@hubspot/cli 8.2.0-beta.0 → 8.2.0-experimental.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/api/migrate.js +8 -4
- package/api/releases.d.ts +36 -0
- package/api/releases.js +41 -0
- package/bin/cli.js +12 -6
- package/commands/account/auth.d.ts +3 -1
- package/commands/account/auth.js +23 -7
- package/commands/account/clean.js +7 -6
- package/commands/account/createOverride.js +10 -7
- package/commands/account/info.js +36 -17
- package/commands/account/link.d.ts +4 -0
- package/commands/account/link.js +87 -0
- package/commands/account/list.js +32 -76
- package/commands/account/remove.js +4 -3
- package/commands/account/removeOverride.js +11 -10
- package/commands/account/rename.js +5 -6
- package/commands/account/unlink.d.ts +4 -0
- package/commands/account/unlink.js +68 -0
- package/commands/account/use.js +75 -6
- package/commands/account.js +4 -0
- package/commands/api.d.ts +10 -0
- package/commands/api.js +164 -0
- package/commands/app/logDetails.d.ts +9 -0
- package/commands/app/logDetails.js +86 -0
- package/commands/app/logs.d.ts +13 -0
- package/commands/app/logs.js +122 -0
- package/commands/app/migrate.js +13 -13
- package/commands/app/secret/add.js +6 -7
- package/commands/app/secret/delete.js +9 -10
- package/commands/app/secret/list.js +6 -7
- package/commands/app/secret/update.js +8 -9
- package/commands/app.js +8 -1
- package/commands/auth.js +20 -16
- package/commands/cms/app/create.js +9 -5
- package/commands/cms/convertFields.js +8 -8
- package/commands/cms/delete.js +2 -3
- package/commands/cms/fetch.js +7 -7
- package/commands/cms/function/create.js +9 -5
- package/commands/cms/function/deploy.js +2 -3
- package/commands/cms/function/list.js +11 -7
- package/commands/cms/function/logs.js +17 -23
- package/commands/cms/function/server.js +2 -3
- package/commands/cms/getReactModule.js +7 -8
- package/commands/cms/lighthouseScore.js +25 -24
- package/commands/cms/lint.js +4 -5
- package/commands/cms/list.js +5 -6
- package/commands/cms/module/create.js +15 -5
- package/commands/cms/module/marketplace-validate.js +7 -8
- package/commands/cms/mv.js +2 -3
- package/commands/cms/template/create.js +10 -6
- package/commands/cms/theme/create.js +5 -5
- package/commands/cms/theme/generate-selectors.js +5 -4
- package/commands/cms/theme/marketplace-validate.js +8 -9
- package/commands/cms/theme/preview.js +16 -8
- package/commands/cms/upload.js +15 -12
- package/commands/cms/watch.js +5 -5
- package/commands/cms/webpack/create.js +5 -5
- package/commands/completion.js +3 -5
- package/commands/config/migrate.js +6 -7
- package/commands/config/set.js +5 -6
- package/commands/customObject/create.js +4 -5
- package/commands/customObject/createSchema.js +4 -5
- package/commands/customObject/deleteSchema.js +4 -5
- package/commands/customObject/fetchAllSchemas.js +2 -3
- package/commands/customObject/fetchSchema.js +2 -3
- package/commands/customObject/listSchemas.js +2 -3
- package/commands/customObject/updateSchema.js +4 -5
- package/commands/doctor.js +8 -8
- package/commands/feedback.js +6 -4
- package/commands/filemanager/fetch.js +5 -6
- package/commands/filemanager/upload.js +5 -5
- package/commands/getStarted.js +17 -19
- package/commands/hubdb/clear.js +6 -3
- package/commands/hubdb/create.js +4 -5
- package/commands/hubdb/delete.js +9 -6
- package/commands/hubdb/fetch.js +6 -3
- package/commands/hubdb/list.js +16 -14
- package/commands/init.js +16 -15
- package/commands/mcp/setup.js +5 -6
- package/commands/mcp/start.js +2 -3
- package/commands/open.js +4 -5
- package/commands/project/add.js +13 -8
- package/commands/project/appInstallStatus.d.ts +4 -0
- package/commands/project/appInstallStatus.js +133 -0
- package/commands/project/create.js +28 -17
- package/commands/project/delete.d.ts +7 -0
- package/commands/project/delete.js +74 -0
- package/commands/project/deploy.js +39 -36
- package/commands/project/dev/deprecatedFlow.js +62 -17
- package/commands/project/dev/index.d.ts +3 -3
- package/commands/project/dev/index.js +59 -48
- package/commands/project/dev/unifiedFlow.js +70 -21
- package/commands/project/download.js +12 -9
- package/commands/project/info.d.ts +4 -0
- package/commands/project/info.js +68 -0
- package/commands/project/installDeps.js +9 -6
- package/commands/project/lint.js +43 -12
- package/commands/project/list.d.ts +2 -2
- package/commands/project/list.js +15 -14
- package/commands/project/listBuilds.js +8 -6
- package/commands/project/logs.js +5 -6
- package/commands/project/migrate.js +18 -18
- package/commands/project/open.js +5 -6
- package/commands/project/profile/add.js +12 -8
- package/commands/project/profile/delete.js +15 -11
- package/commands/project/release/create.d.ts +7 -0
- package/commands/project/release/create.js +159 -0
- package/commands/project/release/info.d.ts +6 -0
- package/commands/project/release/info.js +147 -0
- package/commands/project/release/list.d.ts +6 -0
- package/commands/project/release/list.js +111 -0
- package/commands/project/release.d.ts +3 -0
- package/commands/project/release.js +20 -0
- package/commands/project/updateDeps.js +9 -6
- package/commands/project/upload.d.ts +3 -0
- package/commands/project/upload.js +107 -25
- package/commands/project/validate.js +12 -12
- package/commands/project/watch.js +22 -22
- package/commands/project.js +14 -3
- package/commands/sandbox/create.js +18 -45
- package/commands/sandbox/delete.js +13 -14
- package/commands/secret/addSecret.js +6 -7
- package/commands/secret/deleteSecret.js +5 -6
- package/commands/secret/listSecret.js +2 -3
- package/commands/secret/updateSecret.js +4 -5
- package/commands/testAccount/create.d.ts +1 -1
- package/commands/testAccount/create.js +25 -17
- package/commands/testAccount/createConfig.js +7 -8
- package/commands/testAccount/delete.js +27 -18
- package/commands/testAccount/importData.js +6 -7
- package/commands/upgrade.js +9 -10
- package/lang/en.d.ts +441 -9
- package/lang/en.js +456 -22
- package/lib/CLIWebSocketServer.d.ts +5 -3
- package/lib/CLIWebSocketServer.js +31 -4
- package/lib/accountAuth.d.ts +3 -1
- package/lib/accountAuth.js +47 -17
- package/lib/api/usageTracking.d.ts +30 -0
- package/lib/api/usageTracking.js +11 -0
- package/lib/app/logs.d.ts +38 -0
- package/lib/app/logs.js +225 -0
- package/lib/app/migrate.js +18 -5
- package/lib/app/urls.d.ts +2 -0
- package/lib/app/urls.js +7 -0
- package/lib/auth/awaitPersonalAccessKeyOverWebsocket.d.ts +4 -0
- package/lib/auth/awaitPersonalAccessKeyOverWebsocket.js +145 -0
- package/lib/buildAccount.d.ts +1 -6
- package/lib/buildAccount.js +10 -43
- package/lib/commonOpts.js +0 -1
- package/lib/constants.d.ts +10 -3
- package/lib/constants.js +12 -3
- package/lib/doctor/Diagnosis.js +5 -5
- package/lib/doctor/Doctor.js +7 -7
- package/lib/errorHandlers/index.js +4 -3
- package/lib/errorHandlers/suppressError.js +4 -0
- package/lib/errors/PromptExitError.d.ts +6 -0
- package/lib/errors/PromptExitError.js +11 -0
- package/lib/getStartedV2Actions.js +3 -3
- package/lib/hasFeature.js +1 -2
- package/lib/link/accountTableUtils.d.ts +10 -0
- package/lib/link/accountTableUtils.js +39 -0
- package/lib/link/index.d.ts +18 -0
- package/lib/link/index.js +185 -0
- package/lib/link/linkUtils.d.ts +5 -0
- package/lib/link/linkUtils.js +49 -0
- package/lib/link/prompts.d.ts +7 -0
- package/lib/link/prompts.js +126 -0
- package/lib/link/renderLinkedAccountsTable.d.ts +2 -0
- package/lib/link/renderLinkedAccountsTable.js +14 -0
- package/lib/link/warnIfLinkedDirectory.d.ts +1 -0
- package/lib/link/warnIfLinkedDirectory.js +9 -0
- package/lib/middleware/autoUpdateMiddleware.js +6 -3
- package/lib/middleware/commandTargetingUtils.js +1 -0
- package/lib/process.d.ts +1 -1
- package/lib/process.js +10 -3
- package/lib/projects/ProjectLogsManager.js +6 -3
- package/lib/projects/components.js +15 -4
- package/lib/projects/create/index.js +2 -2
- package/lib/projects/create/legacy.js +2 -2
- package/lib/projects/create/v2.js +4 -5
- package/lib/projects/delete.d.ts +13 -0
- package/lib/projects/delete.js +193 -0
- package/lib/projects/deploy.d.ts +1 -1
- package/lib/projects/deploy.js +2 -2
- package/lib/projects/localDev/AppDevModeInterface.js +13 -9
- package/lib/projects/localDev/DevServerManager_DEPRECATED.d.ts +4 -1
- package/lib/projects/localDev/DevServerManager_DEPRECATED.js +3 -3
- package/lib/projects/localDev/DevSessionManager.d.ts +6 -3
- package/lib/projects/localDev/DevSessionManager.js +31 -19
- package/lib/projects/localDev/LocalDevManager_DEPRECATED.d.ts +5 -0
- package/lib/projects/localDev/LocalDevManager_DEPRECATED.js +21 -10
- package/lib/projects/localDev/LocalDevProcess.js +6 -5
- package/lib/projects/localDev/LocalDevState.d.ts +3 -2
- package/lib/projects/localDev/LocalDevState.js +3 -1
- package/lib/projects/localDev/LocalDevWebsocketServer.js +1 -1
- package/lib/projects/localDev/UIExtensionsDevModeInterface.js +2 -0
- package/lib/projects/localDev/helpers/account.d.ts +4 -3
- package/lib/projects/localDev/helpers/account.js +21 -30
- package/lib/projects/localDev/helpers/process.d.ts +1 -1
- package/lib/projects/localDev/helpers/process.js +4 -10
- package/lib/projects/localDev/helpers/project.d.ts +4 -3
- package/lib/projects/localDev/helpers/project.js +32 -16
- package/lib/projects/npmAuditOnUpload.d.ts +10 -0
- package/lib/projects/npmAuditOnUpload.js +73 -0
- package/lib/projects/pollProjectBuildAndDeploy.d.ts +5 -1
- package/lib/projects/pollProjectBuildAndDeploy.js +3 -2
- package/lib/projects/preview.d.ts +7 -0
- package/lib/projects/preview.js +48 -0
- package/lib/projects/projectInfo.d.ts +5 -0
- package/lib/projects/projectInfo.js +82 -0
- package/lib/projects/projectProfiles.d.ts +1 -2
- package/lib/projects/projectProfiles.js +5 -17
- package/lib/projects/uieLinting.d.ts +21 -3
- package/lib/projects/uieLinting.js +132 -28
- package/lib/projects/upload.d.ts +3 -1
- package/lib/projects/upload.js +46 -7
- package/lib/projects/validateLintConfigOnUpload.d.ts +9 -0
- package/lib/projects/validateLintConfigOnUpload.js +45 -0
- package/lib/projects/workspaces.d.ts +60 -0
- package/lib/projects/workspaces.js +411 -0
- package/lib/prompts/createApiSamplePrompt.js +4 -0
- package/lib/prompts/downloadProjectPrompt.js +11 -10
- package/lib/prompts/installAppPrompt.js +3 -2
- package/lib/prompts/personalAccessKeyPrompt.d.ts +2 -5
- package/lib/prompts/personalAccessKeyPrompt.js +10 -7
- package/lib/prompts/projectDevTargetAccountPrompt.d.ts +1 -0
- package/lib/prompts/projectDevTargetAccountPrompt.js +23 -16
- package/lib/prompts/projectProfilePrompt.d.ts +2 -0
- package/lib/prompts/projectProfilePrompt.js +46 -0
- package/lib/prompts/projectsLogsPrompt.js +3 -0
- package/lib/prompts/promptUtils.js +4 -2
- package/lib/prompts/selectAppPrompt.js +1 -0
- package/lib/prompts/selectHubDBTablePrompt.js +8 -4
- package/lib/prompts/selectPublicAppForMigrationPrompt.js +12 -6
- package/lib/prompts/setAsDefaultAccountPrompt.js +2 -1
- package/lib/sandboxes.d.ts +1 -9
- package/lib/sandboxes.js +0 -21
- package/lib/serverlessLogs.js +2 -2
- package/lib/theme/cmsDevServerProcess.d.ts +2 -0
- package/lib/theme/cmsDevServerProcess.js +8 -7
- package/lib/theme/migrate.d.ts +1 -1
- package/lib/theme/migrate.js +1 -5
- package/lib/ui/SpinniesManager.d.ts +1 -0
- package/lib/ui/SpinniesManager.js +22 -6
- package/lib/ui/accountTable.d.ts +8 -0
- package/lib/ui/accountTable.js +67 -0
- package/lib/ui/appLogs.d.ts +32 -0
- package/lib/ui/appLogs.js +175 -0
- package/lib/ui/spinniesUtils.d.ts +0 -1
- package/lib/ui/spinniesUtils.js +6 -16
- package/lib/usageTracking.d.ts +9 -20
- package/lib/usageTracking.js +68 -30
- package/lib/yargs/makeWrappedYargsHandler.d.ts +3 -0
- package/lib/yargs/makeWrappedYargsHandler.js +121 -0
- package/lib/yargs/makeYargsBuilder.d.ts +13 -0
- package/lib/yargs/makeYargsBuilder.js +33 -0
- package/lib/yargs/parseYargsOrExit.d.ts +4 -0
- package/lib/yargs/parseYargsOrExit.js +25 -0
- package/lib/yargs/strictEnforceBoolean.d.ts +1 -0
- package/lib/yargs/strictEnforceBoolean.js +13 -0
- package/lib/yargsUtils.d.ts +3 -16
- package/lib/yargsUtils.js +3 -48
- package/mcp-server/Tool.d.ts +15 -0
- package/mcp-server/Tool.js +53 -0
- package/mcp-server/server.js +43 -3
- package/mcp-server/tools/cms/HsCreateFunctionTool.d.ts +4 -2
- package/mcp-server/tools/cms/HsCreateFunctionTool.js +10 -8
- package/mcp-server/tools/cms/HsCreateModuleTool.d.ts +4 -2
- package/mcp-server/tools/cms/HsCreateModuleTool.js +12 -11
- package/mcp-server/tools/cms/HsCreateTemplateTool.d.ts +4 -2
- package/mcp-server/tools/cms/HsCreateTemplateTool.js +10 -8
- package/mcp-server/tools/cms/HsFunctionLogsTool.d.ts +4 -2
- package/mcp-server/tools/cms/HsFunctionLogsTool.js +10 -9
- package/mcp-server/tools/cms/HsListFunctionsTool.d.ts +4 -2
- package/mcp-server/tools/cms/HsListFunctionsTool.js +10 -9
- package/mcp-server/tools/cms/HsListTool.d.ts +4 -2
- package/mcp-server/tools/cms/HsListTool.js +10 -8
- package/mcp-server/tools/index.d.ts +3 -2
- package/mcp-server/tools/index.js +24 -22
- package/mcp-server/tools/project/AddFeatureToProjectTool.d.ts +6 -3
- package/mcp-server/tools/project/AddFeatureToProjectTool.js +9 -7
- package/mcp-server/tools/project/CreateProjectTool.d.ts +6 -3
- package/mcp-server/tools/project/CreateProjectTool.js +10 -7
- package/mcp-server/tools/project/CreateTestAccountTool.d.ts +4 -2
- package/mcp-server/tools/project/CreateTestAccountTool.js +21 -9
- package/mcp-server/tools/project/DeployProjectTool.d.ts +4 -2
- package/mcp-server/tools/project/DeployProjectTool.js +5 -7
- package/mcp-server/tools/project/DocFetchTool.d.ts +4 -2
- package/mcp-server/tools/project/DocFetchTool.js +8 -6
- package/mcp-server/tools/project/DocsSearchTool.d.ts +9 -3
- package/mcp-server/tools/project/DocsSearchTool.js +32 -9
- package/mcp-server/tools/project/FindProjectsTool.d.ts +15 -0
- package/mcp-server/tools/project/FindProjectsTool.js +60 -0
- package/mcp-server/tools/project/GetApiUsagePatternsByAppIdTool.d.ts +4 -2
- package/mcp-server/tools/project/GetApiUsagePatternsByAppIdTool.js +8 -6
- package/mcp-server/tools/project/GetApplicationInfoTool.d.ts +4 -2
- package/mcp-server/tools/project/GetApplicationInfoTool.js +8 -6
- package/mcp-server/tools/project/GetBuildLogsTool.d.ts +4 -2
- package/mcp-server/tools/project/GetBuildLogsTool.js +9 -7
- package/mcp-server/tools/project/GetBuildStatusTool.d.ts +4 -2
- package/mcp-server/tools/project/GetBuildStatusTool.js +9 -7
- package/mcp-server/tools/project/GetConfigValuesTool.d.ts +4 -2
- package/mcp-server/tools/project/GetConfigValuesTool.js +12 -7
- package/mcp-server/tools/project/GuidedWalkthroughTool.d.ts +4 -2
- package/mcp-server/tools/project/GuidedWalkthroughTool.js +4 -6
- package/mcp-server/tools/project/UploadProjectTools.d.ts +4 -2
- package/mcp-server/tools/project/UploadProjectTools.js +10 -8
- package/mcp-server/tools/project/ValidateProjectTool.d.ts +4 -2
- package/mcp-server/tools/project/ValidateProjectTool.js +9 -7
- package/mcp-server/tools/project/constants.d.ts +2 -1
- package/mcp-server/tools/project/constants.js +2 -1
- package/mcp-server/types.d.ts +0 -7
- package/mcp-server/types.js +1 -13
- package/mcp-server/utils/command.js +3 -1
- package/mcp-server/utils/config.js +1 -0
- package/mcp-server/utils/logger.d.ts +10 -0
- package/mcp-server/utils/logger.js +29 -0
- package/mcp-server/utils/toolUsageTracking.js +10 -8
- package/package.json +16 -11
- package/types/Link.d.ts +32 -0
- package/types/Link.js +5 -0
- package/types/LocalDev.d.ts +5 -0
- package/types/PackageJson.d.ts +1 -0
- package/types/Projects.d.ts +19 -0
- package/types/Prompts.d.ts +1 -0
- package/types/Yargs.d.ts +19 -1
- package/ui/components/ActionSection.d.ts +1 -1
- package/ui/components/InputField.d.ts +1 -1
- package/ui/components/SelectInput.d.ts +1 -1
- package/ui/components/StatusIcon.d.ts +1 -1
- package/ui/components/Table.d.ts +5 -5
- package/ui/components/getStarted/GetStartedFlow.d.ts +1 -1
- package/ui/components/getStarted/screens/InstallationScreen.d.ts +1 -1
- package/ui/components/getStarted/screens/ProjectSetupScreen.d.ts +1 -1
- package/ui/components/getStarted/screens/UploadScreen.d.ts +1 -1
- package/api/__tests__/migrate.test.d.ts +0 -1
- package/api/__tests__/migrate.test.js +0 -199
- package/commands/__tests__/account.test.d.ts +0 -1
- package/commands/__tests__/account.test.js +0 -69
- package/commands/__tests__/auth.test.d.ts +0 -1
- package/commands/__tests__/auth.test.js +0 -43
- package/commands/__tests__/cms.test.d.ts +0 -1
- package/commands/__tests__/cms.test.js +0 -87
- package/commands/__tests__/config.test.d.ts +0 -1
- package/commands/__tests__/config.test.js +0 -44
- package/commands/__tests__/customObject.test.d.ts +0 -1
- package/commands/__tests__/customObject.test.js +0 -68
- package/commands/__tests__/doctor.test.d.ts +0 -1
- package/commands/__tests__/doctor.test.js +0 -132
- package/commands/__tests__/feedback.test.d.ts +0 -1
- package/commands/__tests__/feedback.test.js +0 -24
- package/commands/__tests__/filemanager.test.d.ts +0 -1
- package/commands/__tests__/filemanager.test.js +0 -45
- package/commands/__tests__/getStarted.test.d.ts +0 -1
- package/commands/__tests__/getStarted.test.js +0 -173
- package/commands/__tests__/hubdb.test.d.ts +0 -1
- package/commands/__tests__/hubdb.test.js +0 -50
- package/commands/__tests__/init.test.d.ts +0 -1
- package/commands/__tests__/init.test.js +0 -42
- package/commands/__tests__/mcp.test.d.ts +0 -1
- package/commands/__tests__/mcp.test.js +0 -46
- package/commands/__tests__/open.test.d.ts +0 -1
- package/commands/__tests__/open.test.js +0 -58
- package/commands/__tests__/project.test.d.ts +0 -1
- package/commands/__tests__/project.test.js +0 -125
- package/commands/__tests__/sandbox.test.d.ts +0 -1
- package/commands/__tests__/sandbox.test.js +0 -44
- package/commands/__tests__/secret.test.d.ts +0 -1
- package/commands/__tests__/secret.test.js +0 -49
- package/commands/__tests__/testAccount.test.d.ts +0 -1
- package/commands/__tests__/testAccount.test.js +0 -57
- package/commands/__tests__/upgrade.test.d.ts +0 -1
- package/commands/__tests__/upgrade.test.js +0 -309
- package/commands/account/__tests__/auth.test.d.ts +0 -1
- package/commands/account/__tests__/auth.test.js +0 -206
- package/commands/account/__tests__/clean.test.d.ts +0 -1
- package/commands/account/__tests__/clean.test.js +0 -28
- package/commands/account/__tests__/createOverride.test.d.ts +0 -1
- package/commands/account/__tests__/createOverride.test.js +0 -32
- package/commands/account/__tests__/info.test.d.ts +0 -1
- package/commands/account/__tests__/info.test.js +0 -28
- package/commands/account/__tests__/list.test.d.ts +0 -1
- package/commands/account/__tests__/list.test.js +0 -153
- package/commands/account/__tests__/remove.test.d.ts +0 -1
- package/commands/account/__tests__/remove.test.js +0 -36
- package/commands/account/__tests__/removeOverride.d.ts +0 -1
- package/commands/account/__tests__/removeOverride.js +0 -25
- package/commands/account/__tests__/rename.test.d.ts +0 -1
- package/commands/account/__tests__/rename.test.js +0 -82
- package/commands/account/__tests__/use.test.d.ts +0 -1
- package/commands/account/__tests__/use.test.js +0 -170
- package/commands/app/__tests__/migrate.test.d.ts +0 -1
- package/commands/app/__tests__/migrate.test.js +0 -111
- package/commands/app/secret/__tests__/add.test.d.ts +0 -1
- package/commands/app/secret/__tests__/add.test.js +0 -140
- package/commands/app/secret/__tests__/delete.test.d.ts +0 -1
- package/commands/app/secret/__tests__/delete.test.js +0 -28
- package/commands/app/secret/__tests__/list.test.d.ts +0 -1
- package/commands/app/secret/__tests__/list.test.js +0 -25
- package/commands/app/secret/__tests__/update.test.d.ts +0 -1
- package/commands/app/secret/__tests__/update.test.js +0 -28
- package/commands/cms/__tests__/delete.test.d.ts +0 -1
- package/commands/cms/__tests__/delete.test.js +0 -39
- package/commands/cms/__tests__/fetch.test.d.ts +0 -1
- package/commands/cms/__tests__/fetch.test.js +0 -156
- package/commands/cms/__tests__/function.test.d.ts +0 -1
- package/commands/cms/__tests__/function.test.js +0 -50
- package/commands/cms/__tests__/lint.test.d.ts +0 -1
- package/commands/cms/__tests__/lint.test.js +0 -33
- package/commands/cms/__tests__/list.test.d.ts +0 -1
- package/commands/cms/__tests__/list.test.js +0 -42
- package/commands/cms/__tests__/module.test.d.ts +0 -1
- package/commands/cms/__tests__/module.test.js +0 -45
- package/commands/cms/__tests__/mv.test.d.ts +0 -1
- package/commands/cms/__tests__/mv.test.js +0 -46
- package/commands/cms/__tests__/theme.test.d.ts +0 -1
- package/commands/cms/__tests__/theme.test.js +0 -54
- package/commands/cms/__tests__/upload.test.d.ts +0 -1
- package/commands/cms/__tests__/upload.test.js +0 -308
- package/commands/cms/__tests__/watch.test.d.ts +0 -1
- package/commands/cms/__tests__/watch.test.js +0 -204
- package/commands/cms/function/__tests__/logs.test.d.ts +0 -1
- package/commands/cms/function/__tests__/logs.test.js +0 -70
- package/commands/cms/theme/__tests__/generate-selectors.test.d.ts +0 -1
- package/commands/cms/theme/__tests__/generate-selectors.test.js +0 -28
- package/commands/cms/theme/__tests__/marketplace-validate.test.d.ts +0 -1
- package/commands/cms/theme/__tests__/marketplace-validate.test.js +0 -36
- package/commands/cms/theme/__tests__/preview.test.d.ts +0 -1
- package/commands/cms/theme/__tests__/preview.test.js +0 -54
- package/commands/customObject/__tests__/create.test.d.ts +0 -1
- package/commands/customObject/__tests__/create.test.js +0 -40
- package/commands/customObject/__tests__/createSchema.test.d.ts +0 -1
- package/commands/customObject/__tests__/createSchema.test.js +0 -28
- package/commands/customObject/__tests__/deleteSchema.test.d.ts +0 -1
- package/commands/customObject/__tests__/deleteSchema.test.js +0 -42
- package/commands/customObject/__tests__/fetch-all-schemas.test.d.ts +0 -1
- package/commands/customObject/__tests__/fetch-all-schemas.test.js +0 -41
- package/commands/customObject/__tests__/fetchSchema.test.d.ts +0 -1
- package/commands/customObject/__tests__/fetchSchema.test.js +0 -45
- package/commands/customObject/__tests__/listSchemas.test.d.ts +0 -1
- package/commands/customObject/__tests__/listSchemas.test.js +0 -29
- package/commands/customObject/__tests__/updateSchema.test.d.ts +0 -1
- package/commands/customObject/__tests__/updateSchema.test.js +0 -40
- package/commands/filemanager/__tests__/fetch.test.d.ts +0 -1
- package/commands/filemanager/__tests__/fetch.test.js +0 -32
- package/commands/filemanager/__tests__/upload.test.d.ts +0 -1
- package/commands/filemanager/__tests__/upload.test.js +0 -191
- package/commands/hubdb/__tests__/clear.test.d.ts +0 -1
- package/commands/hubdb/__tests__/clear.test.js +0 -28
- package/commands/hubdb/__tests__/create.test.d.ts +0 -1
- package/commands/hubdb/__tests__/create.test.js +0 -28
- package/commands/hubdb/__tests__/delete.test.d.ts +0 -1
- package/commands/hubdb/__tests__/delete.test.js +0 -28
- package/commands/hubdb/__tests__/fetch.test.d.ts +0 -1
- package/commands/hubdb/__tests__/fetch.test.js +0 -28
- package/commands/hubdb/__tests__/list.test.d.ts +0 -1
- package/commands/hubdb/__tests__/list.test.js +0 -88
- package/commands/mcp/__tests__/setup.test.d.ts +0 -1
- package/commands/mcp/__tests__/setup.test.js +0 -26
- package/commands/mcp/__tests__/start.test.d.ts +0 -1
- package/commands/mcp/__tests__/start.test.js +0 -144
- package/commands/project/__tests__/add.test.d.ts +0 -1
- package/commands/project/__tests__/add.test.js +0 -107
- package/commands/project/__tests__/create.test.d.ts +0 -1
- package/commands/project/__tests__/create.test.js +0 -97
- package/commands/project/__tests__/deploy.test.d.ts +0 -1
- package/commands/project/__tests__/deploy.test.js +0 -307
- package/commands/project/__tests__/dev.test.d.ts +0 -1
- package/commands/project/__tests__/dev.test.js +0 -273
- package/commands/project/__tests__/devUnifiedFlow.test.d.ts +0 -1
- package/commands/project/__tests__/devUnifiedFlow.test.js +0 -434
- package/commands/project/__tests__/download.test.d.ts +0 -1
- package/commands/project/__tests__/download.test.js +0 -39
- package/commands/project/__tests__/installDeps.test.d.ts +0 -1
- package/commands/project/__tests__/installDeps.test.js +0 -140
- package/commands/project/__tests__/lint.test.d.ts +0 -1
- package/commands/project/__tests__/lint.test.js +0 -704
- package/commands/project/__tests__/list.test.d.ts +0 -1
- package/commands/project/__tests__/list.test.js +0 -31
- package/commands/project/__tests__/listBuilds.test.d.ts +0 -1
- package/commands/project/__tests__/listBuilds.test.js +0 -38
- package/commands/project/__tests__/logs.test.d.ts +0 -1
- package/commands/project/__tests__/logs.test.js +0 -202
- package/commands/project/__tests__/migrate.test.d.ts +0 -1
- package/commands/project/__tests__/migrate.test.js +0 -106
- package/commands/project/__tests__/open.test.d.ts +0 -1
- package/commands/project/__tests__/open.test.js +0 -39
- package/commands/project/__tests__/profile.test.d.ts +0 -1
- package/commands/project/__tests__/profile.test.js +0 -42
- package/commands/project/__tests__/updateDeps.test.d.ts +0 -1
- package/commands/project/__tests__/updateDeps.test.js +0 -140
- package/commands/project/__tests__/upload.test.d.ts +0 -1
- package/commands/project/__tests__/upload.test.js +0 -234
- package/commands/project/__tests__/validate.test.d.ts +0 -1
- package/commands/project/__tests__/validate.test.js +0 -381
- package/commands/project/__tests__/watch.test.d.ts +0 -1
- package/commands/project/__tests__/watch.test.js +0 -35
- package/commands/sandbox/__tests__/create.test.d.ts +0 -1
- package/commands/sandbox/__tests__/create.test.js +0 -245
- package/commands/sandbox/__tests__/delete.test.d.ts +0 -1
- package/commands/sandbox/__tests__/delete.test.js +0 -31
- package/commands/secret/__tests__/addSecret.test.d.ts +0 -1
- package/commands/secret/__tests__/addSecret.test.js +0 -162
- package/commands/secret/__tests__/deleteSecret.test.d.ts +0 -1
- package/commands/secret/__tests__/deleteSecret.test.js +0 -41
- package/commands/secret/__tests__/listSecret.test.d.ts +0 -1
- package/commands/secret/__tests__/listSecret.test.js +0 -29
- package/commands/secret/__tests__/updateSecret.test.d.ts +0 -1
- package/commands/secret/__tests__/updateSecret.test.js +0 -29
- package/commands/testAccount/__tests__/create.test.d.ts +0 -1
- package/commands/testAccount/__tests__/create.test.js +0 -106
- package/commands/testAccount/__tests__/createConfig.test.d.ts +0 -1
- package/commands/testAccount/__tests__/createConfig.test.js +0 -32
- package/commands/testAccount/__tests__/delete.test.d.ts +0 -1
- package/commands/testAccount/__tests__/delete.test.js +0 -29
- package/commands/testAccount/__tests__/importData.test.d.ts +0 -1
- package/commands/testAccount/__tests__/importData.test.js +0 -92
- package/lib/__tests__/CLIWebSocketServer.test.d.ts +0 -1
- package/lib/__tests__/CLIWebSocketServer.test.js +0 -252
- package/lib/__tests__/accountAuth.test.d.ts +0 -1
- package/lib/__tests__/accountAuth.test.js +0 -258
- package/lib/__tests__/accountTypes.test.d.ts +0 -1
- package/lib/__tests__/accountTypes.test.js +0 -98
- package/lib/__tests__/buildAccount.test.d.ts +0 -1
- package/lib/__tests__/buildAccount.test.js +0 -262
- package/lib/__tests__/cliUpgradeUtils.test.d.ts +0 -1
- package/lib/__tests__/cliUpgradeUtils.test.js +0 -131
- package/lib/__tests__/commandSuggestion.test.d.ts +0 -1
- package/lib/__tests__/commandSuggestion.test.js +0 -121
- package/lib/__tests__/commonOpts.test.d.ts +0 -1
- package/lib/__tests__/commonOpts.test.js +0 -80
- package/lib/__tests__/dependencyManagement.test.d.ts +0 -1
- package/lib/__tests__/dependencyManagement.test.js +0 -1067
- package/lib/__tests__/developerTestAccounts.test.d.ts +0 -1
- package/lib/__tests__/developerTestAccounts.test.js +0 -156
- package/lib/__tests__/hasFeature.test.d.ts +0 -1
- package/lib/__tests__/hasFeature.test.js +0 -167
- package/lib/__tests__/http.test.d.ts +0 -1
- package/lib/__tests__/http.test.js +0 -40
- package/lib/__tests__/importData.test.d.ts +0 -1
- package/lib/__tests__/importData.test.js +0 -98
- package/lib/__tests__/npmCli.test.d.ts +0 -1
- package/lib/__tests__/npmCli.test.js +0 -84
- package/lib/__tests__/oauth.test.d.ts +0 -1
- package/lib/__tests__/oauth.test.js +0 -109
- package/lib/__tests__/parsing.test.d.ts +0 -1
- package/lib/__tests__/parsing.test.js +0 -34
- package/lib/__tests__/polling.test.d.ts +0 -1
- package/lib/__tests__/polling.test.js +0 -76
- package/lib/__tests__/process.test.d.ts +0 -1
- package/lib/__tests__/process.test.js +0 -89
- package/lib/__tests__/sandboxSync.test.d.ts +0 -1
- package/lib/__tests__/sandboxSync.test.js +0 -147
- package/lib/__tests__/sandboxes.test.d.ts +0 -1
- package/lib/__tests__/sandboxes.test.js +0 -156
- package/lib/__tests__/serverlessLogs.test.d.ts +0 -1
- package/lib/__tests__/serverlessLogs.test.js +0 -163
- package/lib/__tests__/usageTracking.test.d.ts +0 -1
- package/lib/__tests__/usageTracking.test.js +0 -197
- package/lib/__tests__/validation.test.d.ts +0 -1
- package/lib/__tests__/validation.test.js +0 -143
- package/lib/__tests__/yargsUtils.test.d.ts +0 -1
- package/lib/__tests__/yargsUtils.test.js +0 -124
- package/lib/app/__tests__/migrate.test.d.ts +0 -1
- package/lib/app/__tests__/migrate.test.js +0 -638
- package/lib/doctor/__tests__/Diagnosis.test.d.ts +0 -1
- package/lib/doctor/__tests__/Diagnosis.test.js +0 -84
- package/lib/doctor/__tests__/DiagnosticInfoBuilder.test.d.ts +0 -1
- package/lib/doctor/__tests__/DiagnosticInfoBuilder.test.js +0 -177
- package/lib/doctor/__tests__/Doctor.test.d.ts +0 -1
- package/lib/doctor/__tests__/Doctor.test.js +0 -560
- package/lib/errorHandlers/__tests__/index.test.d.ts +0 -1
- package/lib/errorHandlers/__tests__/index.test.js +0 -278
- package/lib/mcp/__tests__/setup.test.d.ts +0 -1
- package/lib/mcp/__tests__/setup.test.js +0 -523
- package/lib/middleware/__tests__/commandTargetingUtils.test.d.ts +0 -1
- package/lib/middleware/__tests__/commandTargetingUtils.test.js +0 -99
- package/lib/middleware/__tests__/configMiddleware.test.d.ts +0 -1
- package/lib/middleware/__tests__/configMiddleware.test.js +0 -118
- package/lib/middleware/__tests__/gitMiddleware.test.d.ts +0 -1
- package/lib/middleware/__tests__/gitMiddleware.test.js +0 -43
- package/lib/middleware/__tests__/requestMiddleware.test.d.ts +0 -1
- package/lib/middleware/__tests__/requestMiddleware.test.js +0 -15
- package/lib/middleware/__tests__/usageTrackingMiddleware.test.d.ts +0 -1
- package/lib/middleware/__tests__/usageTrackingMiddleware.test.js +0 -44
- package/lib/middleware/__tests__/yargsChecksMiddleware.test.d.ts +0 -1
- package/lib/middleware/__tests__/yargsChecksMiddleware.test.js +0 -39
- package/lib/projects/__tests__/AppDevModeInterface.test.d.ts +0 -1
- package/lib/projects/__tests__/AppDevModeInterface.test.js +0 -541
- package/lib/projects/__tests__/DevServerManager.test.d.ts +0 -1
- package/lib/projects/__tests__/DevServerManager.test.js +0 -185
- package/lib/projects/__tests__/DevSessionManager.test.d.ts +0 -1
- package/lib/projects/__tests__/DevSessionManager.test.js +0 -250
- package/lib/projects/__tests__/LocalDevProcess.test.d.ts +0 -1
- package/lib/projects/__tests__/LocalDevProcess.test.js +0 -481
- package/lib/projects/__tests__/LocalDevWebsocketServer.test.d.ts +0 -1
- package/lib/projects/__tests__/LocalDevWebsocketServer.test.js +0 -231
- package/lib/projects/__tests__/ProjectLogsManager.test.d.ts +0 -1
- package/lib/projects/__tests__/ProjectLogsManager.test.js +0 -302
- package/lib/projects/__tests__/UIExtensionsDevModeInterface.test.d.ts +0 -1
- package/lib/projects/__tests__/UIExtensionsDevModeInterface.test.js +0 -160
- package/lib/projects/__tests__/components.test.d.ts +0 -1
- package/lib/projects/__tests__/components.test.js +0 -426
- package/lib/projects/__tests__/deploy.test.d.ts +0 -1
- package/lib/projects/__tests__/deploy.test.js +0 -231
- package/lib/projects/__tests__/localDevProjectHelpers.test.d.ts +0 -1
- package/lib/projects/__tests__/localDevProjectHelpers.test.js +0 -120
- package/lib/projects/__tests__/platformVersion.test.d.ts +0 -1
- package/lib/projects/__tests__/platformVersion.test.js +0 -63
- package/lib/projects/__tests__/pollProjectBuildAndDeploy.test.d.ts +0 -1
- package/lib/projects/__tests__/pollProjectBuildAndDeploy.test.js +0 -328
- package/lib/projects/__tests__/projectProfiles.test.d.ts +0 -1
- package/lib/projects/__tests__/projectProfiles.test.js +0 -441
- package/lib/projects/__tests__/projects.test.d.ts +0 -1
- package/lib/projects/__tests__/projects.test.js +0 -58
- package/lib/projects/__tests__/structure.test.d.ts +0 -1
- package/lib/projects/__tests__/structure.test.js +0 -210
- package/lib/projects/__tests__/uieLinting.test.d.ts +0 -1
- package/lib/projects/__tests__/uieLinting.test.js +0 -631
- package/lib/projects/__tests__/upload.test.d.ts +0 -1
- package/lib/projects/__tests__/upload.test.js +0 -183
- package/lib/projects/add/__tests__/legacyAddComponent.test.d.ts +0 -1
- package/lib/projects/add/__tests__/legacyAddComponent.test.js +0 -245
- package/lib/projects/add/__tests__/v2AddComponent.test.d.ts +0 -1
- package/lib/projects/add/__tests__/v2AddComponent.test.js +0 -343
- package/lib/projects/create/__tests__/legacy.test.d.ts +0 -1
- package/lib/projects/create/__tests__/legacy.test.js +0 -72
- package/lib/projects/create/__tests__/v2.test.d.ts +0 -1
- package/lib/projects/create/__tests__/v2.test.js +0 -257
- package/lib/projects/platformVersion.d.ts +0 -9
- package/lib/projects/platformVersion.js +0 -39
- package/lib/prompts/__tests__/createDeveloperTestAccountConfigPrompt.test.d.ts +0 -1
- package/lib/prompts/__tests__/createDeveloperTestAccountConfigPrompt.test.js +0 -157
- package/lib/prompts/__tests__/createFunctionPrompt.test.d.ts +0 -1
- package/lib/prompts/__tests__/createFunctionPrompt.test.js +0 -129
- package/lib/prompts/__tests__/createModulePrompt.test.d.ts +0 -1
- package/lib/prompts/__tests__/createModulePrompt.test.js +0 -187
- package/lib/prompts/__tests__/createTemplatePrompt.test.d.ts +0 -1
- package/lib/prompts/__tests__/createTemplatePrompt.test.js +0 -102
- package/lib/prompts/__tests__/downloadProjectPrompt.test.d.ts +0 -1
- package/lib/prompts/__tests__/downloadProjectPrompt.test.js +0 -31
- package/lib/prompts/__tests__/projectAddPrompt.test.d.ts +0 -1
- package/lib/prompts/__tests__/projectAddPrompt.test.js +0 -143
- package/lib/prompts/__tests__/projectsLogsPrompt.test.d.ts +0 -1
- package/lib/prompts/__tests__/projectsLogsPrompt.test.js +0 -37
- package/lib/prompts/__tests__/selectProjectTemplatePrompt.test.d.ts +0 -1
- package/lib/prompts/__tests__/selectProjectTemplatePrompt.test.js +0 -160
- package/lib/sandboxSync.d.ts +0 -4
- package/lib/sandboxSync.js +0 -102
- package/lib/theme/__tests__/migrate.test.d.ts +0 -1
- package/lib/theme/__tests__/migrate.test.js +0 -256
- package/lib/ui/__tests__/SpinniesManager.test.d.ts +0 -1
- package/lib/ui/__tests__/SpinniesManager.test.js +0 -488
- package/lib/ui/__tests__/removeAnsiCodes.test.d.ts +0 -1
- package/lib/ui/__tests__/removeAnsiCodes.test.js +0 -84
- package/mcp-server/tools/cms/__tests__/HsCreateFunctionTool.test.d.ts +0 -1
- package/mcp-server/tools/cms/__tests__/HsCreateFunctionTool.test.js +0 -254
- package/mcp-server/tools/cms/__tests__/HsCreateModuleTool.test.d.ts +0 -1
- package/mcp-server/tools/cms/__tests__/HsCreateModuleTool.test.js +0 -227
- package/mcp-server/tools/cms/__tests__/HsCreateTemplateTool.test.d.ts +0 -1
- package/mcp-server/tools/cms/__tests__/HsCreateTemplateTool.test.js +0 -208
- package/mcp-server/tools/cms/__tests__/HsFunctionLogsTool.test.d.ts +0 -1
- package/mcp-server/tools/cms/__tests__/HsFunctionLogsTool.test.js +0 -186
- package/mcp-server/tools/cms/__tests__/HsListFunctionsTool.test.d.ts +0 -1
- package/mcp-server/tools/cms/__tests__/HsListFunctionsTool.test.js +0 -124
- package/mcp-server/tools/cms/__tests__/HsListTool.test.d.ts +0 -1
- package/mcp-server/tools/cms/__tests__/HsListTool.test.js +0 -124
- package/mcp-server/tools/project/__tests__/AddFeatureToProjectTool.test.d.ts +0 -1
- package/mcp-server/tools/project/__tests__/AddFeatureToProjectTool.test.js +0 -157
- package/mcp-server/tools/project/__tests__/CreateProjectTool.test.d.ts +0 -1
- package/mcp-server/tools/project/__tests__/CreateProjectTool.test.js +0 -132
- package/mcp-server/tools/project/__tests__/CreateTestAccountTool.test.d.ts +0 -1
- package/mcp-server/tools/project/__tests__/CreateTestAccountTool.test.js +0 -461
- package/mcp-server/tools/project/__tests__/DeployProjectTool.test.d.ts +0 -1
- package/mcp-server/tools/project/__tests__/DeployProjectTool.test.js +0 -125
- package/mcp-server/tools/project/__tests__/DocFetchTool.test.d.ts +0 -1
- package/mcp-server/tools/project/__tests__/DocFetchTool.test.js +0 -125
- package/mcp-server/tools/project/__tests__/DocsSearchTool.test.d.ts +0 -1
- package/mcp-server/tools/project/__tests__/DocsSearchTool.test.js +0 -210
- package/mcp-server/tools/project/__tests__/GetApiUsagePatternsByAppIdTool.test.d.ts +0 -1
- package/mcp-server/tools/project/__tests__/GetApiUsagePatternsByAppIdTool.test.js +0 -146
- package/mcp-server/tools/project/__tests__/GetApplicationInfoTool.test.d.ts +0 -1
- package/mcp-server/tools/project/__tests__/GetApplicationInfoTool.test.js +0 -124
- package/mcp-server/tools/project/__tests__/GetBuildLogsTool.test.d.ts +0 -1
- package/mcp-server/tools/project/__tests__/GetBuildLogsTool.test.js +0 -307
- package/mcp-server/tools/project/__tests__/GetBuildStatusTool.test.d.ts +0 -1
- package/mcp-server/tools/project/__tests__/GetBuildStatusTool.test.js +0 -242
- package/mcp-server/tools/project/__tests__/GetConfigValuesTool.test.d.ts +0 -1
- package/mcp-server/tools/project/__tests__/GetConfigValuesTool.test.js +0 -209
- package/mcp-server/tools/project/__tests__/GuidedWalkthroughTool.test.d.ts +0 -1
- package/mcp-server/tools/project/__tests__/GuidedWalkthroughTool.test.js +0 -158
- package/mcp-server/tools/project/__tests__/UploadProjectTools.test.d.ts +0 -1
- package/mcp-server/tools/project/__tests__/UploadProjectTools.test.js +0 -187
- package/mcp-server/tools/project/__tests__/ValidateProjectTool.test.d.ts +0 -1
- package/mcp-server/tools/project/__tests__/ValidateProjectTool.test.js +0 -118
- package/mcp-server/utils/__tests__/command.test.d.ts +0 -1
- package/mcp-server/utils/__tests__/command.test.js +0 -275
- package/mcp-server/utils/__tests__/content.test.d.ts +0 -1
- package/mcp-server/utils/__tests__/content.test.js +0 -164
- package/mcp-server/utils/__tests__/feedbackTracking.test.d.ts +0 -1
- package/mcp-server/utils/__tests__/feedbackTracking.test.js +0 -69
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { fetchAppMetadataBySourceId } from '@hubspot/local-dev-lib/api/appsDev';
|
|
3
|
+
import { APP_KEY, USER_FACING_TO_INTERNAL_TYPE, } from '@hubspot/project-parsing-lib/constants';
|
|
4
|
+
import { debugError } from '../errorHandlers/index.js';
|
|
5
|
+
import { getProjectDetailUrl } from './urls.js';
|
|
6
|
+
import { commands } from '../../lang/en.js';
|
|
7
|
+
import { uiLine, uiLink } from '../ui/index.js';
|
|
8
|
+
import { uiLogger } from '../ui/logger.js';
|
|
9
|
+
export async function getProjectInfo(project, platformVersion, accountId) {
|
|
10
|
+
const deployedBuild = project.deployedBuild;
|
|
11
|
+
const projectInfo = {
|
|
12
|
+
projectName: project.name,
|
|
13
|
+
platformVersion,
|
|
14
|
+
projectId: project.id,
|
|
15
|
+
deployedBuildId: deployedBuild.buildId,
|
|
16
|
+
autoDeployEnabled: deployedBuild.isAutoDeployEnabled,
|
|
17
|
+
components: [],
|
|
18
|
+
};
|
|
19
|
+
const projectUrl = getProjectDetailUrl(project.name, accountId);
|
|
20
|
+
if (projectUrl) {
|
|
21
|
+
projectInfo.projectUrl = projectUrl;
|
|
22
|
+
}
|
|
23
|
+
const appSubbuild = deployedBuild.subbuildStatuses.find(s => s.buildType === USER_FACING_TO_INTERNAL_TYPE[APP_KEY]);
|
|
24
|
+
if (appSubbuild) {
|
|
25
|
+
try {
|
|
26
|
+
const { data: appMetadata } = await fetchAppMetadataBySourceId(project.id, appSubbuild.buildName, accountId);
|
|
27
|
+
projectInfo.app = {
|
|
28
|
+
name: appMetadata.name,
|
|
29
|
+
id: appMetadata.id,
|
|
30
|
+
uid: appSubbuild.buildName,
|
|
31
|
+
authType: appMetadata.authType,
|
|
32
|
+
distributionType: appMetadata.distributionType,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
debugError(err);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
projectInfo.components = deployedBuild.subbuildStatuses
|
|
40
|
+
.filter(s => s.buildType !== USER_FACING_TO_INTERNAL_TYPE[APP_KEY])
|
|
41
|
+
.map(s => ({
|
|
42
|
+
uid: s.buildName,
|
|
43
|
+
type: s.buildType,
|
|
44
|
+
}));
|
|
45
|
+
return projectInfo;
|
|
46
|
+
}
|
|
47
|
+
export function logProjectInfo(projectInfo) {
|
|
48
|
+
uiLogger.log(chalk.bold(commands.project.info.project.title(projectInfo.projectName)));
|
|
49
|
+
uiLine();
|
|
50
|
+
uiLogger.log(commands.project.info.project.platformVersion(projectInfo.platformVersion));
|
|
51
|
+
uiLogger.log(commands.project.info.project.id(projectInfo.projectId));
|
|
52
|
+
uiLogger.log(commands.project.info.project.deployedBuild(projectInfo.deployedBuildId));
|
|
53
|
+
uiLogger.log(commands.project.info.project.autoDeploy(projectInfo.autoDeployEnabled));
|
|
54
|
+
if (projectInfo.projectUrl) {
|
|
55
|
+
uiLogger.log('');
|
|
56
|
+
uiLogger.log(uiLink(commands.project.info.viewProjectLink, projectInfo.projectUrl));
|
|
57
|
+
}
|
|
58
|
+
if (projectInfo.app) {
|
|
59
|
+
uiLogger.log('');
|
|
60
|
+
uiLogger.log(chalk.bold(commands.project.info.app.title));
|
|
61
|
+
uiLine();
|
|
62
|
+
uiLogger.log(commands.project.info.app.name(projectInfo.app.name));
|
|
63
|
+
uiLogger.log(commands.project.info.app.id(projectInfo.app.id));
|
|
64
|
+
uiLogger.log(commands.project.info.app.uid(projectInfo.app.uid));
|
|
65
|
+
if (projectInfo.app.authType) {
|
|
66
|
+
uiLogger.log(commands.project.info.app.authType(projectInfo.app.authType));
|
|
67
|
+
}
|
|
68
|
+
if (projectInfo.app.distributionType) {
|
|
69
|
+
uiLogger.log(commands.project.info.app.distributionType(projectInfo.app.distributionType));
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
if (projectInfo.components.length > 0) {
|
|
73
|
+
uiLogger.log('');
|
|
74
|
+
uiLogger.log(chalk.bold(commands.project.info.componentsHeader));
|
|
75
|
+
uiLine();
|
|
76
|
+
const typeColWidth = Math.max(commands.project.info.labels.type.length, ...projectInfo.components.map(c => c.type.length));
|
|
77
|
+
uiLogger.log(`${commands.project.info.labels.type.padEnd(typeColWidth)} ${commands.project.info.labels.uid}`);
|
|
78
|
+
for (const component of projectInfo.components) {
|
|
79
|
+
uiLogger.log(`${component.type.padEnd(typeColWidth)} ${component.uid}`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
@@ -3,8 +3,7 @@ import { ProjectConfig } from '../../types/Projects.js';
|
|
|
3
3
|
export declare function logProfileHeader(profileName: string): void;
|
|
4
4
|
export declare function logProfileFooter(profile: HsProfileFile, includeVariables?: boolean): void;
|
|
5
5
|
export declare function loadProfile(projectConfig: ProjectConfig | null, projectDir: string | null, profileName: string): HsProfileFile | never;
|
|
6
|
-
export declare function
|
|
7
|
-
export declare function loadAndValidateProfile(projectConfig: ProjectConfig | null, projectDir: string | null, profileName: string | undefined, silent?: boolean): Promise<number | undefined>;
|
|
6
|
+
export declare function loadAndValidateProfile(projectConfig: ProjectConfig | null, projectDir: string | null, profileName: string, silent?: boolean): Promise<HsProfileFile | never>;
|
|
8
7
|
type ValidateProjectForProfileOptions = {
|
|
9
8
|
projectConfig: ProjectConfig;
|
|
10
9
|
projectDir: string;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import path from 'path';
|
|
2
|
-
import { loadHsProfileFile, getHsProfileFilename,
|
|
2
|
+
import { loadHsProfileFile, getHsProfileFilename, validateProfileVariables, } from '@hubspot/project-parsing-lib/profiles';
|
|
3
3
|
import { commands, lib } from '../../lang/en.js';
|
|
4
|
-
import { indent,
|
|
4
|
+
import { indent, uiLine } from '../ui/index.js';
|
|
5
5
|
import { uiLogger } from '../ui/logger.js';
|
|
6
6
|
import { getConfigAccountById } from '@hubspot/local-dev-lib/config';
|
|
7
7
|
import SpinniesManager from '../ui/SpinniesManager.js';
|
|
@@ -9,7 +9,7 @@ import { handleTranslate } from './upload.js';
|
|
|
9
9
|
import { getErrorMessage } from '../errorHandlers/index.js';
|
|
10
10
|
export function logProfileHeader(profileName) {
|
|
11
11
|
uiLine();
|
|
12
|
-
|
|
12
|
+
uiLogger.log(lib.projectProfiles.logs.usingProfile(getHsProfileFilename(profileName)));
|
|
13
13
|
uiLogger.log('');
|
|
14
14
|
}
|
|
15
15
|
export function logProfileFooter(profile, includeVariables = false) {
|
|
@@ -51,19 +51,7 @@ export function loadProfile(projectConfig, projectDir, profileName) {
|
|
|
51
51
|
}
|
|
52
52
|
return profile;
|
|
53
53
|
}
|
|
54
|
-
export async function enforceProfileUsage(projectConfig, projectDir) {
|
|
55
|
-
if (projectConfig && projectDir) {
|
|
56
|
-
const existingProfiles = await getAllHsProfiles(path.join(projectDir, projectConfig.srcDir));
|
|
57
|
-
if (existingProfiles.length > 0) {
|
|
58
|
-
throw new Error(lib.projectProfiles.exitIfUsingProfiles.errors.noProfileSpecified);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
54
|
export async function loadAndValidateProfile(projectConfig, projectDir, profileName, silent = false) {
|
|
63
|
-
if (!profileName) {
|
|
64
|
-
await enforceProfileUsage(projectConfig, projectDir);
|
|
65
|
-
return;
|
|
66
|
-
}
|
|
67
55
|
if (!silent) {
|
|
68
56
|
logProfileHeader(profileName);
|
|
69
57
|
}
|
|
@@ -77,7 +65,7 @@ export async function loadAndValidateProfile(projectConfig, projectDir, profileN
|
|
|
77
65
|
throw new Error(lib.projectProfiles.loadProfile.errors.profileNotValid(profileName, validationResult.errors));
|
|
78
66
|
}
|
|
79
67
|
}
|
|
80
|
-
return profile
|
|
68
|
+
return profile;
|
|
81
69
|
}
|
|
82
70
|
function formatProfileValidationError(error, leadingIndentationLevel = 0) {
|
|
83
71
|
// Trim leading whitespace and replace tabs with spaces to reducing indentations
|
|
@@ -97,7 +85,7 @@ export async function validateProjectForProfile({ projectConfig, projectDir, pro
|
|
|
97
85
|
});
|
|
98
86
|
}
|
|
99
87
|
try {
|
|
100
|
-
const accountId = await loadAndValidateProfile(projectConfig, projectDir, profileName, true);
|
|
88
|
+
const { accountId } = await loadAndValidateProfile(projectConfig, projectDir, profileName, true);
|
|
101
89
|
targetAccountId = accountId || derivedAccountId;
|
|
102
90
|
}
|
|
103
91
|
catch (error) {
|
|
@@ -1,10 +1,20 @@
|
|
|
1
|
+
import { LoadedProjectConfig } from './config.js';
|
|
1
2
|
export declare const REQUIRED_PACKAGES_AND_MIN_VERSIONS: {
|
|
2
3
|
readonly eslint: "9.0.0";
|
|
3
|
-
readonly '@
|
|
4
|
-
readonly '@typescript-eslint/parser': "8.46.4";
|
|
4
|
+
readonly '@eslint/js': "9.0.0";
|
|
5
5
|
readonly 'typescript-eslint': "8.46.4";
|
|
6
|
+
readonly '@hubspot/eslint-config-ui-extensions': "1.0.0";
|
|
7
|
+
readonly 'eslint-config-prettier': "10.0.0";
|
|
8
|
+
readonly 'eslint-plugin-react': "7.0.0";
|
|
9
|
+
readonly 'eslint-plugin-react-hooks': "7.0.0";
|
|
10
|
+
readonly 'eslint-plugin-unused-imports': "4.0.0";
|
|
11
|
+
readonly prettier: "3.0.0";
|
|
6
12
|
readonly jiti: "2.6.1";
|
|
7
13
|
};
|
|
14
|
+
export declare const LINT_SCRIPTS: {
|
|
15
|
+
readonly lint: "eslint .";
|
|
16
|
+
readonly 'lint:fix': "eslint . --fix";
|
|
17
|
+
};
|
|
8
18
|
export declare function isEslintInstalled(directory: string): boolean;
|
|
9
19
|
export declare function areAllLintPackagesInstalled(directory: string): boolean;
|
|
10
20
|
export declare function getMissingLintPackages(directory: string): {
|
|
@@ -13,7 +23,10 @@ export declare function getMissingLintPackages(directory: string): {
|
|
|
13
23
|
export declare function hasEslintConfig(directory: string): boolean;
|
|
14
24
|
export declare function hasDeprecatedEslintConfig(directory: string): boolean;
|
|
15
25
|
export declare function getDeprecatedEslintConfigFiles(directory: string): string[];
|
|
16
|
-
export declare function createEslintConfig(directory: string): string
|
|
26
|
+
export declare function createEslintConfig(directory: string, platformVersion?: string | null): Promise<string>;
|
|
27
|
+
export declare function getUieLintablePackageJsonLocations(projectConfig: LoadedProjectConfig): Promise<string[]>;
|
|
28
|
+
export declare const HUBSPOT_UI_EXTENSIONS_RULE_PREFIX = "@hubspot/ui-extensions/";
|
|
29
|
+
export declare function isHubSpotEslintConfigActive(directory: string): Promise<boolean>;
|
|
17
30
|
export declare function lintPackagesInDirectory(directory: string, projectDir?: string): Promise<{
|
|
18
31
|
success: boolean;
|
|
19
32
|
output: string;
|
|
@@ -31,3 +44,8 @@ export declare function displayLintResults(results: Array<{
|
|
|
31
44
|
success: boolean;
|
|
32
45
|
output: string;
|
|
33
46
|
}>): void;
|
|
47
|
+
export declare function getMissingLintScripts(directory: string): string[];
|
|
48
|
+
export declare function addLintScriptsToPackageJson(directory: string): {
|
|
49
|
+
added: string[];
|
|
50
|
+
relativePath: string;
|
|
51
|
+
};
|
|
@@ -3,17 +3,28 @@ import path from 'path';
|
|
|
3
3
|
import util from 'util';
|
|
4
4
|
import semver from 'semver';
|
|
5
5
|
import { exec as execAsync } from 'node:child_process';
|
|
6
|
+
import { fetchRepoFile } from '@hubspot/local-dev-lib/api/github';
|
|
6
7
|
import { getProjectPackageJsonLocations, isPackageInstalled, } from '../dependencyManagement.js';
|
|
7
8
|
import { commands } from '../../lang/en.js';
|
|
8
9
|
import { uiLogger } from '../ui/logger.js';
|
|
9
|
-
import { safeGetPackageJsonCached } from '../npm/packageJson.js';
|
|
10
|
+
import { clearPackageJsonCache, safeGetPackageJsonCached, } from '../npm/packageJson.js';
|
|
11
|
+
import { debugError } from '../errorHandlers/index.js';
|
|
12
|
+
import { isLegacyProject } from '@hubspot/project-parsing-lib/projects';
|
|
13
|
+
import { DEFAULT_PROJECT_TEMPLATE_BRANCH, HUBSPOT_PROJECT_COMPONENTS_GITHUB_PATH, } from '../constants.js';
|
|
14
|
+
import { CARDS_KEY, Components, PAGES_KEY, SETTINGS_KEY, } from '@hubspot/project-parsing-lib/constants';
|
|
10
15
|
export const REQUIRED_PACKAGES_AND_MIN_VERSIONS = {
|
|
11
16
|
eslint: '9.0.0',
|
|
12
|
-
'@
|
|
13
|
-
'@typescript-eslint/parser': '8.46.4',
|
|
17
|
+
'@eslint/js': '9.0.0',
|
|
14
18
|
'typescript-eslint': '8.46.4',
|
|
19
|
+
'@hubspot/eslint-config-ui-extensions': '1.0.0',
|
|
20
|
+
'eslint-config-prettier': '10.0.0',
|
|
21
|
+
'eslint-plugin-react': '7.0.0',
|
|
22
|
+
'eslint-plugin-react-hooks': '7.0.0',
|
|
23
|
+
'eslint-plugin-unused-imports': '4.0.0',
|
|
24
|
+
prettier: '3.0.0',
|
|
15
25
|
jiti: '2.6.1',
|
|
16
26
|
};
|
|
27
|
+
const UIE_ESLINT_CONFIG_PATH_IN_REPO = 'components/cards/src/app/cards/eslint.config.js';
|
|
17
28
|
const ESLINT_CONFIG_FILES = [
|
|
18
29
|
'eslint.config.mts',
|
|
19
30
|
'eslint.config.ts',
|
|
@@ -30,28 +41,15 @@ const DEPRECATED_ESLINT_CONFIG_FILES = [
|
|
|
30
41
|
'.eslintrc.json',
|
|
31
42
|
'.eslintrc',
|
|
32
43
|
];
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
ecmaVersion: "latest",
|
|
43
|
-
sourceType: "module",
|
|
44
|
-
ecmaFeatures: {
|
|
45
|
-
jsx: true
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
},
|
|
49
|
-
rules: {
|
|
50
|
-
"no-console": ["warn", { allow: ["warn", "error"] }]
|
|
51
|
-
}
|
|
52
|
-
},
|
|
53
|
-
]);
|
|
54
|
-
`;
|
|
44
|
+
const UIE_COMPONENTS = [
|
|
45
|
+
Components[CARDS_KEY],
|
|
46
|
+
Components[SETTINGS_KEY],
|
|
47
|
+
Components[PAGES_KEY],
|
|
48
|
+
];
|
|
49
|
+
export const LINT_SCRIPTS = {
|
|
50
|
+
lint: 'eslint .',
|
|
51
|
+
'lint:fix': 'eslint . --fix',
|
|
52
|
+
};
|
|
55
53
|
function getPackageVersionFromPackageJson(directory, packageName) {
|
|
56
54
|
const packageJsonPath = path.join(directory, 'package.json');
|
|
57
55
|
const packageJson = safeGetPackageJsonCached(packageJsonPath);
|
|
@@ -127,10 +125,43 @@ export function getDeprecatedEslintConfigFiles(directory) {
|
|
|
127
125
|
return fs.existsSync(configPath);
|
|
128
126
|
});
|
|
129
127
|
}
|
|
130
|
-
|
|
131
|
-
|
|
128
|
+
function repoFileDataToString(data) {
|
|
129
|
+
if (typeof data === 'string') {
|
|
130
|
+
return data;
|
|
131
|
+
}
|
|
132
|
+
if (Buffer.isBuffer(data)) {
|
|
133
|
+
return data.toString('utf-8');
|
|
134
|
+
}
|
|
135
|
+
return String(data);
|
|
136
|
+
}
|
|
137
|
+
export async function createEslintConfig(directory, platformVersion) {
|
|
138
|
+
const versionForRemote = platformVersion && !isLegacyProject(platformVersion)
|
|
139
|
+
? platformVersion
|
|
140
|
+
: null;
|
|
141
|
+
if (versionForRemote === null) {
|
|
142
|
+
const message = commands.project.lint.createEslintConfigRequiresV2Platform(platformVersion);
|
|
143
|
+
uiLogger.error(message);
|
|
144
|
+
throw new Error(message);
|
|
145
|
+
}
|
|
146
|
+
let fetchedContent = null;
|
|
147
|
+
try {
|
|
148
|
+
const { data } = await fetchRepoFile(HUBSPOT_PROJECT_COMPONENTS_GITHUB_PATH, `${versionForRemote}/${UIE_ESLINT_CONFIG_PATH_IN_REPO}`, DEFAULT_PROJECT_TEMPLATE_BRANCH);
|
|
149
|
+
const content = repoFileDataToString(data);
|
|
150
|
+
if (content.trim().length > 0) {
|
|
151
|
+
fetchedContent = content;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
catch (error) {
|
|
155
|
+
debugError(error);
|
|
156
|
+
}
|
|
157
|
+
if (fetchedContent === null) {
|
|
158
|
+
const message = commands.project.lint.failedToFetchRemoteEslintConfig(versionForRemote);
|
|
159
|
+
uiLogger.error(message);
|
|
160
|
+
throw new Error(message);
|
|
161
|
+
}
|
|
162
|
+
const configPath = path.join(directory, 'eslint.config.js');
|
|
132
163
|
try {
|
|
133
|
-
fs.writeFileSync(configPath,
|
|
164
|
+
fs.writeFileSync(configPath, fetchedContent, 'utf-8');
|
|
134
165
|
return path.relative(process.cwd(), configPath);
|
|
135
166
|
}
|
|
136
167
|
catch (error) {
|
|
@@ -138,6 +169,38 @@ export function createEslintConfig(directory) {
|
|
|
138
169
|
throw error;
|
|
139
170
|
}
|
|
140
171
|
}
|
|
172
|
+
export async function getUieLintablePackageJsonLocations(projectConfig) {
|
|
173
|
+
if (!projectConfig.projectDir || !projectConfig.projectConfig?.srcDir) {
|
|
174
|
+
return [];
|
|
175
|
+
}
|
|
176
|
+
const srcDirAbsolute = path.resolve(projectConfig.projectDir, projectConfig.projectConfig.srcDir);
|
|
177
|
+
const uiePackageDirPrefixes = UIE_COMPONENTS.map(component => path.join(srcDirAbsolute, component.parentComponent
|
|
178
|
+
? Components[component.parentComponent].dir
|
|
179
|
+
: '', component.dir));
|
|
180
|
+
const allLocations = await getProjectPackageJsonLocations(projectConfig.projectDir);
|
|
181
|
+
return allLocations.filter(location => {
|
|
182
|
+
const resolvedLocation = path.resolve(location);
|
|
183
|
+
return uiePackageDirPrefixes.some(prefix => resolvedLocation.startsWith(prefix));
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
export const HUBSPOT_UI_EXTENSIONS_RULE_PREFIX = '@hubspot/ui-extensions/';
|
|
187
|
+
function getEnvironmentWithoutNpmConfig() {
|
|
188
|
+
return Object.fromEntries(Object.entries(process.env).filter(([key]) => !key.toLowerCase().startsWith('npm_config_')));
|
|
189
|
+
}
|
|
190
|
+
export async function isHubSpotEslintConfigActive(directory) {
|
|
191
|
+
const exec = util.promisify(execAsync);
|
|
192
|
+
try {
|
|
193
|
+
const { stdout } = await exec('npx eslint --print-config ./Component.tsx', {
|
|
194
|
+
cwd: directory,
|
|
195
|
+
});
|
|
196
|
+
const config = JSON.parse(stdout);
|
|
197
|
+
const rules = config.rules ?? {};
|
|
198
|
+
return Object.keys(rules).some(rule => rule.startsWith(HUBSPOT_UI_EXTENSIONS_RULE_PREFIX));
|
|
199
|
+
}
|
|
200
|
+
catch {
|
|
201
|
+
return false;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
141
204
|
export async function lintPackagesInDirectory(directory, projectDir) {
|
|
142
205
|
const displayPath = projectDir
|
|
143
206
|
? path.relative(projectDir, directory)
|
|
@@ -148,6 +211,7 @@ export async function lintPackagesInDirectory(directory, projectDir) {
|
|
|
148
211
|
const { stdout, stderr } = await exec(lintCommand, {
|
|
149
212
|
cwd: directory,
|
|
150
213
|
maxBuffer: 10 * 1024 * 1024, // 10MB buffer for large outputs
|
|
214
|
+
env: getEnvironmentWithoutNpmConfig(),
|
|
151
215
|
});
|
|
152
216
|
let output = `\n${displayPath}:\n`;
|
|
153
217
|
if (stdout && stdout.trim()) {
|
|
@@ -218,3 +282,43 @@ export function displayLintResults(results) {
|
|
|
218
282
|
});
|
|
219
283
|
}
|
|
220
284
|
}
|
|
285
|
+
export function getMissingLintScripts(directory) {
|
|
286
|
+
const packageJsonPath = path.join(directory, 'package.json');
|
|
287
|
+
const packageJson = safeGetPackageJsonCached(packageJsonPath);
|
|
288
|
+
if (!packageJson) {
|
|
289
|
+
return [];
|
|
290
|
+
}
|
|
291
|
+
return Object.keys(LINT_SCRIPTS).filter(scriptName => !packageJson.scripts?.[scriptName]);
|
|
292
|
+
}
|
|
293
|
+
export function addLintScriptsToPackageJson(directory) {
|
|
294
|
+
const packageJsonPath = path.join(directory, 'package.json');
|
|
295
|
+
try {
|
|
296
|
+
const rawContent = fs.readFileSync(packageJsonPath, 'utf-8');
|
|
297
|
+
const packageJson = JSON.parse(rawContent);
|
|
298
|
+
if (!packageJson.scripts) {
|
|
299
|
+
packageJson.scripts = {};
|
|
300
|
+
}
|
|
301
|
+
const added = [];
|
|
302
|
+
for (const [scriptName, scriptValue] of Object.entries(LINT_SCRIPTS)) {
|
|
303
|
+
if (!packageJson.scripts[scriptName]) {
|
|
304
|
+
packageJson.scripts[scriptName] = scriptValue;
|
|
305
|
+
added.push(scriptName);
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
if (added.length > 0) {
|
|
309
|
+
fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2) + '\n', 'utf-8');
|
|
310
|
+
clearPackageJsonCache();
|
|
311
|
+
}
|
|
312
|
+
return {
|
|
313
|
+
added,
|
|
314
|
+
relativePath: path.relative(process.cwd(), packageJsonPath),
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
catch {
|
|
318
|
+
uiLogger.warn(commands.project.lint.failedToAddLintScripts(packageJsonPath));
|
|
319
|
+
return {
|
|
320
|
+
added: [],
|
|
321
|
+
relativePath: path.relative(process.cwd(), packageJsonPath),
|
|
322
|
+
};
|
|
323
|
+
}
|
|
324
|
+
}
|
package/lib/projects/upload.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ type ProjectUploadResult<T> = {
|
|
|
5
5
|
result?: T;
|
|
6
6
|
uploadError?: unknown;
|
|
7
7
|
projectNotFound?: boolean;
|
|
8
|
+
projectId?: number;
|
|
8
9
|
};
|
|
9
10
|
type HandleProjectUploadArg<T> = {
|
|
10
11
|
accountId: number;
|
|
@@ -16,9 +17,10 @@ type HandleProjectUploadArg<T> = {
|
|
|
16
17
|
isUploadCommand?: boolean;
|
|
17
18
|
sendIR?: boolean;
|
|
18
19
|
skipValidation?: boolean;
|
|
20
|
+
skipNpmAudit?: boolean;
|
|
19
21
|
profile?: string;
|
|
20
22
|
};
|
|
21
|
-
export declare function handleProjectUpload<T>({ accountId, projectConfig, projectDir, callbackFunc, profile, uploadMessage, forceCreate, isUploadCommand, sendIR, skipValidation, }: HandleProjectUploadArg<T>): Promise<ProjectUploadResult<T>>;
|
|
23
|
+
export declare function handleProjectUpload<T>({ accountId, projectConfig, projectDir, callbackFunc, profile, uploadMessage, forceCreate, isUploadCommand, sendIR, skipValidation, skipNpmAudit, }: HandleProjectUploadArg<T>): Promise<ProjectUploadResult<T>>;
|
|
22
24
|
export declare function validateSourceDirectory(srcDir: string, projectConfig: ProjectConfig, projectDir: string): Promise<void>;
|
|
23
25
|
export declare function validateNoHSMetaMismatch(srcDir: string, projectConfig: ProjectConfig): Promise<void>;
|
|
24
26
|
type HandleTranslateArg = {
|
package/lib/projects/upload.js
CHANGED
|
@@ -6,16 +6,20 @@ import { uploadProject } from '@hubspot/local-dev-lib/api/projects';
|
|
|
6
6
|
import { shouldIgnoreFile } from '@hubspot/local-dev-lib/ignoreRules';
|
|
7
7
|
import { isTranslationError, translate, } from '@hubspot/project-parsing-lib/translate';
|
|
8
8
|
import { projectContainsHsMetaFiles } from '@hubspot/project-parsing-lib/projects';
|
|
9
|
+
import { findAndParsePackageJsonFiles, collectWorkspaceDirectories, collectFileDependencies, } from '@hubspot/project-parsing-lib/workspaces';
|
|
9
10
|
import SpinniesManager from '../ui/SpinniesManager.js';
|
|
10
11
|
import { uiAccountDescription } from '../ui/index.js';
|
|
11
12
|
import util from 'node:util';
|
|
12
13
|
import { lib } from '../../lang/en.js';
|
|
13
14
|
import { ensureProjectExists } from './ensureProjectExists.js';
|
|
14
15
|
import { uiLogger } from '../ui/logger.js';
|
|
15
|
-
import { isV2Project } from './platformVersion.js';
|
|
16
16
|
import ProjectValidationError from '../errors/ProjectValidationError.js';
|
|
17
17
|
import { walk } from '@hubspot/local-dev-lib/fs';
|
|
18
18
|
import { LEGACY_CONFIG_FILES } from '../constants.js';
|
|
19
|
+
import { archiveWorkspacesAndDependencies, getPackageJsonPathsToUpdate, getLockfilePathsToUpdate, } from './workspaces.js';
|
|
20
|
+
import { isLegacyProject } from '@hubspot/project-parsing-lib/projects';
|
|
21
|
+
import { validateLintConfigOnUpload } from './validateLintConfigOnUpload.js';
|
|
22
|
+
import { runNpmAuditsBeforeProjectUpload } from './npmAuditOnUpload.js';
|
|
19
23
|
async function uploadProjectFiles(accountId, projectName, filePath, uploadMessage, platformVersion, intermediateRepresentation) {
|
|
20
24
|
const accountIdentifier = uiAccountDescription(accountId) || `${accountId}`;
|
|
21
25
|
SpinniesManager.add('upload', {
|
|
@@ -42,12 +46,38 @@ async function uploadProjectFiles(accountId, projectName, filePath, uploadMessag
|
|
|
42
46
|
}
|
|
43
47
|
return { buildId, error };
|
|
44
48
|
}
|
|
45
|
-
export async function handleProjectUpload({ accountId, projectConfig, projectDir, callbackFunc, profile, uploadMessage = '', forceCreate = false, isUploadCommand = false, sendIR = false, skipValidation = false, }) {
|
|
49
|
+
export async function handleProjectUpload({ accountId, projectConfig, projectDir, callbackFunc, profile, uploadMessage = '', forceCreate = false, isUploadCommand = false, sendIR = false, skipValidation = false, skipNpmAudit = false, }) {
|
|
46
50
|
const srcDir = path.resolve(projectDir, projectConfig.srcDir);
|
|
47
51
|
await validateSourceDirectory(srcDir, projectConfig, projectDir);
|
|
48
52
|
await validateNoHSMetaMismatch(srcDir, projectConfig);
|
|
49
53
|
const tempFile = tmp.fileSync({ postfix: '.zip' });
|
|
50
54
|
uiLogger.debug(lib.projectUpload.handleProjectUpload.compressing(tempFile.name));
|
|
55
|
+
// Collect workspace directories and file: dependencies for v2+ projects only.
|
|
56
|
+
// Versions <= 2025.1 do not support the new npm workspaces bundling behavior.
|
|
57
|
+
let workspaceMappings = [];
|
|
58
|
+
let fileDependencyMappings = [];
|
|
59
|
+
let parsedPackageJsons = [];
|
|
60
|
+
if (!isLegacyProject(projectConfig.platformVersion)) {
|
|
61
|
+
parsedPackageJsons = await findAndParsePackageJsonFiles(srcDir);
|
|
62
|
+
workspaceMappings = await collectWorkspaceDirectories(parsedPackageJsons);
|
|
63
|
+
fileDependencyMappings = await collectFileDependencies(parsedPackageJsons);
|
|
64
|
+
}
|
|
65
|
+
if (isUploadCommand && !skipValidation) {
|
|
66
|
+
await validateLintConfigOnUpload({
|
|
67
|
+
srcDir,
|
|
68
|
+
projectDir,
|
|
69
|
+
parsedPackageJsons,
|
|
70
|
+
isLegacyPlatform: isLegacyProject(projectConfig.platformVersion),
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
if (isUploadCommand && !skipNpmAudit) {
|
|
74
|
+
await runNpmAuditsBeforeProjectUpload({
|
|
75
|
+
srcDir,
|
|
76
|
+
projectDir,
|
|
77
|
+
parsedPackageJsons,
|
|
78
|
+
isLegacyPlatform: isLegacyProject(projectConfig.platformVersion),
|
|
79
|
+
});
|
|
80
|
+
}
|
|
51
81
|
const output = fs.createWriteStream(tempFile.name);
|
|
52
82
|
const archive = archiver('zip');
|
|
53
83
|
const result = new Promise((resolve, reject) => output.on('close', async function () {
|
|
@@ -68,7 +98,7 @@ export async function handleProjectUpload({ accountId, projectConfig, projectDir
|
|
|
68
98
|
return resolve({ uploadError: e });
|
|
69
99
|
}
|
|
70
100
|
}
|
|
71
|
-
const { projectExists } = await ensureProjectExists(accountId, projectConfig.name, {
|
|
101
|
+
const { projectExists, project } = await ensureProjectExists(accountId, projectConfig.name, {
|
|
72
102
|
forceCreate,
|
|
73
103
|
uploadCommand: isUploadCommand,
|
|
74
104
|
noLogs: true,
|
|
@@ -77,13 +107,14 @@ export async function handleProjectUpload({ accountId, projectConfig, projectDir
|
|
|
77
107
|
uiLogger.log(lib.projectUpload.handleProjectUpload.projectDoesNotExist(accountId));
|
|
78
108
|
return resolve({ projectNotFound: true });
|
|
79
109
|
}
|
|
110
|
+
const projectId = project?.id;
|
|
80
111
|
const { buildId, error } = await uploadProjectFiles(accountId, projectConfig.name, tempFile.name, uploadMessage, projectConfig.platformVersion, intermediateRepresentation);
|
|
81
112
|
if (error) {
|
|
82
|
-
resolve({ uploadError: error });
|
|
113
|
+
resolve({ uploadError: error, projectId });
|
|
83
114
|
}
|
|
84
115
|
else if (callbackFunc) {
|
|
85
116
|
const uploadResult = await callbackFunc(accountId, projectConfig, tempFile, buildId);
|
|
86
|
-
resolve({ result: uploadResult });
|
|
117
|
+
resolve({ result: uploadResult, projectId });
|
|
87
118
|
}
|
|
88
119
|
}
|
|
89
120
|
catch (e) {
|
|
@@ -91,8 +122,14 @@ export async function handleProjectUpload({ accountId, projectConfig, projectDir
|
|
|
91
122
|
}
|
|
92
123
|
}));
|
|
93
124
|
archive.pipe(output);
|
|
125
|
+
const modifiedPackageJsonPaths = getPackageJsonPathsToUpdate(srcDir, workspaceMappings, fileDependencyMappings);
|
|
126
|
+
const lockfilePathsToUpdate = getLockfilePathsToUpdate(srcDir, workspaceMappings, fileDependencyMappings);
|
|
94
127
|
let loggedIgnoredNodeModule = false;
|
|
95
128
|
archive.directory(srcDir, false, file => {
|
|
129
|
+
if (modifiedPackageJsonPaths.has(file.name) ||
|
|
130
|
+
lockfilePathsToUpdate.has(file.name)) {
|
|
131
|
+
return false;
|
|
132
|
+
}
|
|
96
133
|
const ignored = shouldIgnoreFile(file.name, true);
|
|
97
134
|
if (ignored) {
|
|
98
135
|
const isNodeModule = file.name.includes('node_modules');
|
|
@@ -105,6 +142,8 @@ export async function handleProjectUpload({ accountId, projectConfig, projectDir
|
|
|
105
142
|
}
|
|
106
143
|
return ignored ? false : file;
|
|
107
144
|
});
|
|
145
|
+
// Archive workspaces and file: dependencies
|
|
146
|
+
await archiveWorkspacesAndDependencies(archive, srcDir, workspaceMappings, fileDependencyMappings);
|
|
108
147
|
archive.finalize();
|
|
109
148
|
return result;
|
|
110
149
|
}
|
|
@@ -113,7 +152,7 @@ export async function validateSourceDirectory(srcDir, projectConfig, projectDir)
|
|
|
113
152
|
if (!projectFilePaths || projectFilePaths.length === 0) {
|
|
114
153
|
throw new ProjectValidationError(lib.projectUpload.handleProjectUpload.emptySource(projectConfig.srcDir));
|
|
115
154
|
}
|
|
116
|
-
if (
|
|
155
|
+
if (!isLegacyProject(projectConfig.platformVersion)) {
|
|
117
156
|
projectFilePaths.forEach(filePath => {
|
|
118
157
|
const filename = path.basename(filePath);
|
|
119
158
|
if (LEGACY_CONFIG_FILES.includes(filename)) {
|
|
@@ -124,7 +163,7 @@ export async function validateSourceDirectory(srcDir, projectConfig, projectDir)
|
|
|
124
163
|
}
|
|
125
164
|
export async function validateNoHSMetaMismatch(srcDir, projectConfig) {
|
|
126
165
|
const hasHsMetaFiles = await projectContainsHsMetaFiles(srcDir);
|
|
127
|
-
if (
|
|
166
|
+
if (isLegacyProject(projectConfig.platformVersion) && hasHsMetaFiles) {
|
|
128
167
|
throw new ProjectValidationError(lib.projectUpload.wrongPlatformVersionMetaFiles);
|
|
129
168
|
}
|
|
130
169
|
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ParsedPackageJson } from '@hubspot/project-parsing-lib/workspaces';
|
|
2
|
+
type ValidateLintConfigOnUploadArgs = {
|
|
3
|
+
srcDir: string;
|
|
4
|
+
projectDir: string;
|
|
5
|
+
parsedPackageJsons: ParsedPackageJson[];
|
|
6
|
+
isLegacyPlatform: boolean;
|
|
7
|
+
};
|
|
8
|
+
export declare function validateLintConfigOnUpload({ srcDir, projectDir, parsedPackageJsons, isLegacyPlatform, }: ValidateLintConfigOnUploadArgs): Promise<void>;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import { lib } from '../../lang/en.js';
|
|
3
|
+
import { uiLogger } from '../ui/logger.js';
|
|
4
|
+
import { areAllLintPackagesInstalled, hasEslintConfig, isHubSpotEslintConfigActive, } from './uieLinting.js';
|
|
5
|
+
export async function validateLintConfigOnUpload({ srcDir, projectDir, parsedPackageJsons, isLegacyPlatform, }) {
|
|
6
|
+
const lintRoots = new Set();
|
|
7
|
+
if (isLegacyPlatform) {
|
|
8
|
+
lintRoots.add(srcDir);
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
for (const { dir } of parsedPackageJsons) {
|
|
12
|
+
lintRoots.add(dir);
|
|
13
|
+
}
|
|
14
|
+
if (lintRoots.size === 0) {
|
|
15
|
+
lintRoots.add(srcDir);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
let hasAnyOutput = false;
|
|
19
|
+
for (const lintRoot of lintRoots) {
|
|
20
|
+
const relativeRoot = path.relative(projectDir, lintRoot) || '.';
|
|
21
|
+
let warnMessage;
|
|
22
|
+
if (!areAllLintPackagesInstalled(lintRoot)) {
|
|
23
|
+
warnMessage =
|
|
24
|
+
lib.projectUpload.handleProjectUpload.lintPackagesNotConfigured(relativeRoot);
|
|
25
|
+
}
|
|
26
|
+
else if (!hasEslintConfig(lintRoot)) {
|
|
27
|
+
warnMessage =
|
|
28
|
+
lib.projectUpload.handleProjectUpload.lintConfigNotFound(relativeRoot);
|
|
29
|
+
}
|
|
30
|
+
else if (!(await isHubSpotEslintConfigActive(lintRoot))) {
|
|
31
|
+
warnMessage =
|
|
32
|
+
lib.projectUpload.handleProjectUpload.lintHubSpotRulesNotActive(relativeRoot);
|
|
33
|
+
}
|
|
34
|
+
if (warnMessage) {
|
|
35
|
+
if (!hasAnyOutput) {
|
|
36
|
+
uiLogger.log('');
|
|
37
|
+
hasAnyOutput = true;
|
|
38
|
+
}
|
|
39
|
+
uiLogger.warn(warnMessage);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
if (hasAnyOutput) {
|
|
43
|
+
uiLogger.log('');
|
|
44
|
+
}
|
|
45
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import archiver from 'archiver';
|
|
2
|
+
import { WorkspaceMapping, FileDependencyMapping, FileDependencyKind, LocalDependencyProtocol } from '@hubspot/project-parsing-lib/workspaces';
|
|
3
|
+
export type FileDepArchiveEntry = {
|
|
4
|
+
archivePath: string;
|
|
5
|
+
protocol: LocalDependencyProtocol;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Result of archiving workspaces and file dependencies
|
|
9
|
+
*/
|
|
10
|
+
export type WorkspaceArchiveResult = {
|
|
11
|
+
packageWorkspaces: Map<string, string[]>;
|
|
12
|
+
packageFileDeps: Map<string, Map<string, FileDepArchiveEntry>>;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Generates a short hash of the input string for use in workspace paths.
|
|
16
|
+
* Uses SHA256 truncated to 8 hex characters (4 billion possibilities).
|
|
17
|
+
*/
|
|
18
|
+
export declare function shortHash(input: string): string;
|
|
19
|
+
/**
|
|
20
|
+
* Converts native path separators to POSIX forward slashes.
|
|
21
|
+
*
|
|
22
|
+
* Zip entry names and npm workspace globs are POSIX-only. On Windows,
|
|
23
|
+
* `path.relative` returns backslash-separated paths; archiver normalizes
|
|
24
|
+
* its appended entry names to forward slashes but its filter callback
|
|
25
|
+
* receives forward-slashed names too. Without this normalization, lookups
|
|
26
|
+
* in our exclusion Sets miss on Windows and a file gets archived twice.
|
|
27
|
+
*/
|
|
28
|
+
export declare function toPosixPath(p: string): string;
|
|
29
|
+
/**
|
|
30
|
+
* Determines the archive path for an external workspace or file: dependency.
|
|
31
|
+
*
|
|
32
|
+
* For directories, produces `_workspaces/<basename>-<hash>`.
|
|
33
|
+
* For tarballs, produces `_workspaces/<basename-no-ext>-<hash>/<original-basename>`,
|
|
34
|
+
* so the rewritten package.json reference still ends in the original filename.
|
|
35
|
+
*
|
|
36
|
+
* The hash prevents collisions between different paths with the same basename.
|
|
37
|
+
*/
|
|
38
|
+
export declare function computeExternalArchivePath(absolutePath: string, kind?: FileDependencyKind): string;
|
|
39
|
+
/**
|
|
40
|
+
* Updates package.json files in the archive to reflect new workspace and file: dependency paths.
|
|
41
|
+
*
|
|
42
|
+
* Workspace entries in packageWorkspaces are already in final form:
|
|
43
|
+
* - Internal workspaces: relative paths (e.g. "../packages/utils")
|
|
44
|
+
* - External workspaces: relative paths (e.g. "../_workspaces/logger-abc")
|
|
45
|
+
*
|
|
46
|
+
* Only external file: dependencies appear in packageFileDeps; internal ones
|
|
47
|
+
* keep their original file: references and are left untouched.
|
|
48
|
+
*/
|
|
49
|
+
export declare function updatePackageJsonInArchive(archive: archiver.Archiver, srcDir: string, packageWorkspaces: Map<string, string[]>, packageFileDeps: Map<string, Map<string, FileDepArchiveEntry>>): Promise<void>;
|
|
50
|
+
export declare function rewriteLockfileForExternalDeps(lockfileContent: Record<string, unknown>, pathMappings: Array<{
|
|
51
|
+
oldPath: string;
|
|
52
|
+
newPath: string;
|
|
53
|
+
}>): Record<string, unknown>;
|
|
54
|
+
export declare function getPackageJsonPathsToUpdate(srcDir: string, workspaceMappings: WorkspaceMapping[], fileDependencyMappings: FileDependencyMapping[]): Set<string>;
|
|
55
|
+
export declare function getLockfilePathsToUpdate(srcDir: string, workspaceMappings: WorkspaceMapping[], fileDependencyMappings: FileDependencyMapping[]): Set<string>;
|
|
56
|
+
/**
|
|
57
|
+
* Main orchestration function that handles archiving of workspaces and file dependencies.
|
|
58
|
+
* This is the clean integration point for upload.ts.
|
|
59
|
+
*/
|
|
60
|
+
export declare function archiveWorkspacesAndDependencies(archive: archiver.Archiver, srcDir: string, workspaceMappings: WorkspaceMapping[], fileDependencyMappings: FileDependencyMapping[]): Promise<WorkspaceArchiveResult>;
|