@hubspot/cli 7.7.20-experimental.0 → 7.7.21-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/__tests__/migrate.test.js +27 -29
- package/api/migrate.js +14 -22
- package/bin/cli.js +92 -97
- package/bin/hs +2 -2
- package/bin/hscms +2 -2
- package/bin/silenceErrors.js +1 -2
- package/commands/__tests__/account.test.js +29 -34
- package/commands/__tests__/auth.test.js +11 -16
- package/commands/__tests__/cms.test.js +15 -20
- package/commands/__tests__/config.test.js +14 -19
- package/commands/__tests__/create.test.js +10 -15
- package/commands/__tests__/customObject.test.js +14 -19
- package/commands/__tests__/doctor.test.js +43 -48
- package/commands/__tests__/feedback.test.js +7 -45
- package/commands/__tests__/fetch.test.js +29 -28
- package/commands/__tests__/filemanager.test.js +14 -19
- package/commands/__tests__/function.test.js +16 -21
- package/commands/__tests__/getStarted.test.js +48 -53
- package/commands/__tests__/hubdb.test.js +17 -22
- package/commands/__tests__/init.test.js +12 -17
- package/commands/__tests__/lint.test.js +13 -18
- package/commands/__tests__/list.test.js +18 -23
- package/commands/__tests__/logs.test.js +28 -27
- package/commands/__tests__/mcp.test.js +14 -19
- package/commands/__tests__/mv.test.js +14 -52
- package/commands/__tests__/open.test.js +13 -51
- package/commands/__tests__/project.test.js +44 -49
- package/commands/__tests__/remove.test.js +13 -51
- package/commands/__tests__/sandbox.test.js +14 -19
- package/commands/__tests__/secret.test.js +16 -21
- package/commands/__tests__/testAccount.test.js +16 -21
- package/commands/__tests__/theme.test.js +15 -20
- package/commands/account/__tests__/auth.test.js +11 -16
- package/commands/account/__tests__/clean.test.js +12 -17
- package/commands/account/__tests__/createOverride.test.js +10 -15
- package/commands/account/__tests__/info.test.js +11 -16
- package/commands/account/__tests__/list.test.js +11 -16
- package/commands/account/__tests__/remove.test.js +13 -18
- package/commands/account/__tests__/removeOverride.js +8 -13
- package/commands/account/__tests__/rename.test.js +15 -20
- package/commands/account/__tests__/use.test.js +10 -15
- package/commands/account/auth.d.ts +1 -1
- package/commands/account/auth.js +65 -67
- package/commands/account/clean.d.ts +1 -1
- package/commands/account/clean.js +55 -60
- package/commands/account/createOverride.d.ts +1 -1
- package/commands/account/createOverride.js +52 -57
- package/commands/account/info.d.ts +1 -1
- package/commands/account/info.js +33 -35
- package/commands/account/list.d.ts +1 -1
- package/commands/account/list.js +43 -45
- package/commands/account/remove.d.ts +1 -1
- package/commands/account/remove.js +37 -42
- package/commands/account/removeOverride.d.ts +1 -1
- package/commands/account/removeOverride.js +38 -43
- package/commands/account/rename.d.ts +1 -1
- package/commands/account/rename.js +18 -20
- package/commands/account/use.d.ts +1 -1
- package/commands/account/use.js +29 -31
- package/commands/account.d.ts +1 -1
- package/commands/account.js +23 -28
- package/commands/app/__tests__/migrate.test.js +29 -34
- package/commands/app/migrate.d.ts +2 -2
- package/commands/app/migrate.js +40 -43
- package/commands/app/secret/__tests__/add.test.js +6 -11
- package/commands/app/secret/__tests__/delete.test.js +6 -11
- package/commands/app/secret/__tests__/list.test.js +6 -11
- package/commands/app/secret/__tests__/update.test.js +6 -11
- package/commands/app/secret/add.d.ts +1 -1
- package/commands/app/secret/add.js +28 -30
- package/commands/app/secret/delete.d.ts +1 -1
- package/commands/app/secret/delete.js +34 -36
- package/commands/app/secret/list.d.ts +1 -1
- package/commands/app/secret/list.js +25 -27
- package/commands/app/secret/update.d.ts +1 -1
- package/commands/app/secret/update.js +32 -34
- package/commands/app/secret.d.ts +1 -1
- package/commands/app/secret.js +12 -17
- package/commands/app.d.ts +1 -1
- package/commands/app.js +6 -11
- package/commands/auth.d.ts +1 -1
- package/commands/auth.js +70 -72
- package/commands/cms/convertFields.d.ts +1 -1
- package/commands/cms/convertFields.js +34 -39
- package/commands/cms/getReactModule.d.ts +1 -1
- package/commands/cms/getReactModule.js +32 -37
- package/commands/cms/lighthouseScore.d.ts +1 -1
- package/commands/cms/lighthouseScore.js +67 -72
- package/commands/cms.d.ts +1 -1
- package/commands/cms.js +11 -16
- package/commands/completion.d.ts +1 -1
- package/commands/completion.js +10 -15
- package/commands/config/migrate.d.ts +1 -1
- package/commands/config/migrate.js +27 -32
- package/commands/config/set.d.ts +1 -1
- package/commands/config/set.js +23 -25
- package/commands/config.d.ts +1 -1
- package/commands/config.js +8 -13
- package/commands/create/api-sample.d.ts +1 -1
- package/commands/create/api-sample.js +28 -33
- package/commands/create/app.d.ts +1 -1
- package/commands/create/app.js +3 -5
- package/commands/create/function.d.ts +1 -1
- package/commands/create/function.js +9 -11
- package/commands/create/index.d.ts +1 -1
- package/commands/create/index.js +19 -24
- package/commands/create/module.d.ts +1 -1
- package/commands/create/module.js +12 -14
- package/commands/create/react-app.d.ts +1 -1
- package/commands/create/react-app.js +3 -5
- package/commands/create/template.d.ts +1 -1
- package/commands/create/template.js +12 -14
- package/commands/create/vue-app.d.ts +1 -1
- package/commands/create/vue-app.js +3 -5
- package/commands/create/webpack-serverless.d.ts +1 -1
- package/commands/create/webpack-serverless.js +3 -5
- package/commands/create/website-theme.d.ts +1 -1
- package/commands/create/website-theme.js +5 -7
- package/commands/create.d.ts +2 -2
- package/commands/create.js +30 -35
- package/commands/customObject/__tests__/create.test.js +13 -18
- package/commands/customObject/__tests__/schema.test.js +18 -23
- package/commands/customObject/create.d.ts +1 -1
- package/commands/customObject/create.js +28 -30
- package/commands/customObject/schema/__tests__/create.test.js +13 -18
- package/commands/customObject/schema/__tests__/delete.test.js +13 -18
- package/commands/customObject/schema/__tests__/fetch-all.test.js +13 -18
- package/commands/customObject/schema/__tests__/fetch.test.js +13 -18
- package/commands/customObject/schema/__tests__/list.test.js +13 -18
- package/commands/customObject/schema/__tests__/update.test.js +13 -18
- package/commands/customObject/schema/create.d.ts +1 -1
- package/commands/customObject/schema/create.js +28 -30
- package/commands/customObject/schema/delete.d.ts +1 -1
- package/commands/customObject/schema/delete.js +24 -26
- package/commands/customObject/schema/fetch-all.d.ts +1 -1
- package/commands/customObject/schema/fetch-all.js +22 -24
- package/commands/customObject/schema/fetch.d.ts +1 -1
- package/commands/customObject/schema/fetch.js +24 -26
- package/commands/customObject/schema/list.d.ts +1 -1
- package/commands/customObject/schema/list.js +13 -15
- package/commands/customObject/schema/update.d.ts +1 -1
- package/commands/customObject/schema/update.js +32 -34
- package/commands/customObject/schema.d.ts +1 -1
- package/commands/customObject/schema.js +17 -22
- package/commands/customObject.d.ts +1 -1
- package/commands/customObject.js +13 -18
- package/commands/doctor.d.ts +1 -1
- package/commands/doctor.js +28 -33
- package/commands/feedback.d.ts +1 -1
- package/commands/feedback.js +19 -24
- package/commands/fetch.d.ts +1 -1
- package/commands/fetch.js +28 -30
- package/commands/filemanager/__tests__/fetch.test.js +17 -22
- package/commands/filemanager/__tests__/upload.test.js +15 -20
- package/commands/filemanager/fetch.d.ts +1 -1
- package/commands/filemanager/fetch.js +23 -25
- package/commands/filemanager/upload.d.ts +1 -1
- package/commands/filemanager/upload.js +39 -44
- package/commands/filemanager.d.ts +1 -1
- package/commands/filemanager.js +8 -13
- package/commands/function/deploy.d.ts +1 -1
- package/commands/function/deploy.js +35 -40
- package/commands/function/list.d.ts +1 -1
- package/commands/function/list.js +24 -29
- package/commands/function/server.d.ts +1 -1
- package/commands/function/server.js +15 -17
- package/commands/function.d.ts +1 -1
- package/commands/function.js +12 -18
- package/commands/getStarted.d.ts +1 -1
- package/commands/getStarted.js +124 -130
- package/commands/hubdb/__tests__/clear.test.js +13 -18
- package/commands/hubdb/__tests__/create.test.js +13 -18
- package/commands/hubdb/__tests__/delete.test.js +13 -18
- package/commands/hubdb/__tests__/fetch.test.js +13 -18
- package/commands/hubdb/__tests__/list.test.js +23 -28
- package/commands/hubdb/clear.d.ts +1 -1
- package/commands/hubdb/clear.js +20 -22
- package/commands/hubdb/create.d.ts +1 -1
- package/commands/hubdb/create.js +30 -35
- package/commands/hubdb/delete.d.ts +1 -1
- package/commands/hubdb/delete.js +24 -26
- package/commands/hubdb/fetch.d.ts +1 -1
- package/commands/hubdb/fetch.js +17 -19
- package/commands/hubdb/list.d.ts +1 -1
- package/commands/hubdb/list.js +33 -35
- package/commands/hubdb.d.ts +1 -1
- package/commands/hubdb.js +18 -24
- package/commands/init.d.ts +1 -1
- package/commands/init.js +83 -88
- package/commands/lint.d.ts +1 -1
- package/commands/lint.js +24 -26
- package/commands/list.d.ts +1 -1
- package/commands/list.js +32 -37
- package/commands/logs.d.ts +1 -1
- package/commands/logs.js +35 -37
- package/commands/mcp/__tests__/setup.test.js +7 -12
- package/commands/mcp/__tests__/start.test.js +7 -12
- package/commands/mcp/setup.d.ts +1 -1
- package/commands/mcp/setup.js +17 -19
- package/commands/mcp/start.d.ts +1 -1
- package/commands/mcp/start.js +29 -34
- package/commands/mcp.d.ts +1 -1
- package/commands/mcp.js +7 -12
- package/commands/module/marketplace-validate.d.ts +1 -1
- package/commands/module/marketplace-validate.js +21 -26
- package/commands/module.d.ts +1 -1
- package/commands/module.js +7 -13
- package/commands/mv.d.ts +1 -1
- package/commands/mv.js +20 -22
- package/commands/open.d.ts +1 -1
- package/commands/open.js +19 -21
- package/commands/project/__tests__/add.test.js +10 -15
- package/commands/project/__tests__/create.test.js +14 -19
- package/commands/project/__tests__/deploy.test.js +93 -131
- package/commands/project/__tests__/devUnifiedFlow.test.js +135 -140
- package/commands/project/__tests__/download.test.js +14 -19
- package/commands/project/__tests__/installDeps.test.js +32 -70
- package/commands/project/__tests__/listBuilds.test.js +14 -19
- package/commands/project/__tests__/logs.test.js +56 -94
- package/commands/project/__tests__/migrate.test.js +25 -30
- package/commands/project/__tests__/migrateApp.test.js +17 -22
- package/commands/project/__tests__/open.test.js +16 -21
- package/commands/project/__tests__/profile.test.js +14 -19
- package/commands/project/__tests__/upload.test.js +18 -23
- package/commands/project/__tests__/watch.test.js +14 -19
- package/commands/project/add.d.ts +1 -1
- package/commands/project/add.js +34 -36
- package/commands/project/cloneApp.d.ts +1 -1
- package/commands/project/cloneApp.js +67 -72
- package/commands/project/create.d.ts +2 -2
- package/commands/project/create.js +62 -67
- package/commands/project/deploy.d.ts +1 -1
- package/commands/project/deploy.js +72 -77
- package/commands/project/dev/deprecatedFlow.d.ts +2 -2
- package/commands/project/dev/deprecatedFlow.js +52 -58
- package/commands/project/dev/index.d.ts +1 -1
- package/commands/project/dev/index.js +44 -47
- package/commands/project/dev/unifiedFlow.d.ts +3 -3
- package/commands/project/dev/unifiedFlow.js +62 -68
- package/commands/project/download.d.ts +1 -1
- package/commands/project/download.js +35 -40
- package/commands/project/installDeps.d.ts +1 -1
- package/commands/project/installDeps.js +29 -34
- package/commands/project/listBuilds.d.ts +1 -1
- package/commands/project/listBuilds.js +40 -45
- package/commands/project/logs.d.ts +1 -1
- package/commands/project/logs.js +52 -54
- package/commands/project/migrate.d.ts +1 -1
- package/commands/project/migrate.js +24 -26
- package/commands/project/migrateApp.d.ts +2 -2
- package/commands/project/migrateApp.js +18 -20
- package/commands/project/open.d.ts +1 -1
- package/commands/project/open.js +25 -30
- package/commands/project/profile/add.d.ts +1 -1
- package/commands/project/profile/add.js +68 -73
- package/commands/project/profile/delete.d.ts +1 -1
- package/commands/project/profile/delete.js +51 -56
- package/commands/project/profile.d.ts +1 -1
- package/commands/project/profile.js +9 -14
- package/commands/project/upload.d.ts +1 -1
- package/commands/project/upload.js +50 -55
- package/commands/project/validate.d.ts +1 -1
- package/commands/project/validate.js +35 -40
- package/commands/project/watch.d.ts +1 -1
- package/commands/project/watch.js +59 -61
- package/commands/project.d.ts +1 -1
- package/commands/project.js +38 -43
- package/commands/remove.d.ts +1 -1
- package/commands/remove.js +15 -17
- package/commands/sandbox/__tests__/create.test.js +15 -20
- package/commands/sandbox/__tests__/delete.test.js +15 -20
- package/commands/sandbox/create.d.ts +1 -1
- package/commands/sandbox/create.js +67 -69
- package/commands/sandbox/delete.d.ts +1 -1
- package/commands/sandbox/delete.js +94 -96
- package/commands/sandbox.d.ts +1 -1
- package/commands/sandbox.js +9 -14
- package/commands/secret/__tests__/addSecret.test.js +13 -18
- package/commands/secret/__tests__/deleteSecret.test.js +13 -18
- package/commands/secret/__tests__/listSecret.test.js +13 -18
- package/commands/secret/__tests__/updateSecret.test.js +13 -18
- package/commands/secret/addSecret.d.ts +1 -1
- package/commands/secret/addSecret.js +26 -28
- package/commands/secret/deleteSecret.d.ts +1 -1
- package/commands/secret/deleteSecret.js +27 -29
- package/commands/secret/listSecret.d.ts +1 -1
- package/commands/secret/listSecret.js +19 -21
- package/commands/secret/updateSecret.d.ts +1 -1
- package/commands/secret/updateSecret.js +25 -27
- package/commands/secret.d.ts +1 -1
- package/commands/secret.js +13 -18
- package/commands/testAccount/__tests__/create.test.js +17 -22
- package/commands/testAccount/__tests__/createConfig.test.js +6 -11
- package/commands/testAccount/__tests__/delete.test.js +15 -20
- package/commands/testAccount/create.d.ts +1 -1
- package/commands/testAccount/create.js +50 -55
- package/commands/testAccount/createConfig.d.ts +2 -2
- package/commands/testAccount/createConfig.js +36 -41
- package/commands/testAccount/delete.d.ts +1 -1
- package/commands/testAccount/delete.js +17 -19
- package/commands/testAccount.d.ts +1 -1
- package/commands/testAccount.js +10 -15
- package/commands/theme/__tests__/generate-selectors.test.js +7 -12
- package/commands/theme/__tests__/marketplace-validate.test.js +14 -19
- package/commands/theme/__tests__/preview.test.js +12 -17
- package/commands/theme/generate-selectors.d.ts +1 -1
- package/commands/theme/generate-selectors.js +23 -28
- package/commands/theme/marketplace-validate.d.ts +1 -1
- package/commands/theme/marketplace-validate.js +19 -24
- package/commands/theme/preview.d.ts +1 -1
- package/commands/theme/preview.js +60 -65
- package/commands/theme.d.ts +1 -1
- package/commands/theme.js +11 -16
- package/commands/upload.d.ts +1 -1
- package/commands/upload.js +77 -82
- package/commands/watch.d.ts +1 -1
- package/commands/watch.js +45 -51
- package/lang/en.d.ts +0 -1
- package/lang/en.js +369 -376
- package/lib/__tests__/accountTypes.test.js +20 -22
- package/lib/__tests__/buildAccount.test.js +26 -61
- package/lib/__tests__/commonOpts.test.js +20 -22
- package/lib/__tests__/dependencyManagement.test.js +46 -51
- package/lib/__tests__/developerTestAccounts.test.js +27 -62
- package/lib/__tests__/hasFeature.test.js +6 -8
- package/lib/__tests__/npm.test.js +15 -20
- package/lib/__tests__/oauth.test.js +23 -28
- package/lib/__tests__/parsing.test.js +18 -20
- package/lib/__tests__/polling.test.js +24 -26
- package/lib/__tests__/process.test.js +14 -19
- package/lib/__tests__/projectProfiles.test.js +34 -39
- package/lib/__tests__/sandboxSync.test.js +30 -35
- package/lib/__tests__/sandboxes.test.js +29 -31
- package/lib/__tests__/serverlessLogs.test.js +8 -13
- package/lib/__tests__/usageTracking.test.js +33 -34
- package/lib/__tests__/validation.test.js +18 -20
- package/lib/__tests__/yargsUtils.test.js +6 -41
- package/lib/accountTypes.js +24 -34
- package/lib/app/__tests__/migrate.test.js +94 -99
- package/lib/app/__tests__/migrate_legacy.test.js +29 -31
- package/lib/app/migrate.d.ts +3 -3
- package/lib/app/migrate.js +127 -145
- package/lib/app/migrate_legacy.d.ts +1 -1
- package/lib/app/migrate_legacy.js +72 -78
- package/lib/app/urls.js +5 -9
- package/lib/buildAccount.d.ts +1 -1
- package/lib/buildAccount.js +59 -67
- package/lib/commonOpts.d.ts +1 -1
- package/lib/commonOpts.js +42 -59
- package/lib/configMigrate.js +34 -38
- package/lib/configOptions.js +34 -40
- package/lib/constants.js +31 -34
- package/lib/customObject.js +2 -6
- package/lib/dependencyManagement.js +37 -45
- package/lib/developerTestAccounts.d.ts +1 -1
- package/lib/developerTestAccounts.js +34 -39
- package/lib/doctor/Diagnosis.d.ts +1 -1
- package/lib/doctor/Diagnosis.js +25 -29
- package/lib/doctor/DiagnosticInfoBuilder.d.ts +1 -1
- package/lib/doctor/DiagnosticInfoBuilder.js +30 -37
- package/lib/doctor/Doctor.d.ts +1 -1
- package/lib/doctor/Doctor.js +94 -101
- package/lib/doctor/__tests__/Diagnosis.test.js +9 -14
- package/lib/doctor/__tests__/DiagnosticInfoBuilder.test.js +29 -34
- package/lib/doctor/__tests__/Doctor.test.js +24 -26
- package/lib/enums/exitCodes.js +1 -4
- package/lib/errorHandlers/index.js +32 -41
- package/lib/errorHandlers/suppressError.d.ts +1 -1
- package/lib/errorHandlers/suppressError.js +28 -31
- package/lib/filesystem.js +8 -15
- package/lib/generateSelectors.js +18 -29
- package/lib/hasFeature.d.ts +1 -1
- package/lib/hasFeature.js +3 -6
- package/lib/interpolation.js +11 -18
- package/lib/lang.d.ts +1 -1
- package/lib/lang.js +22 -27
- package/lib/links.js +16 -24
- package/lib/marketplaceValidate.js +29 -39
- package/lib/mcp/setup.js +69 -97
- package/lib/middleware/__test__/configMiddleware.test.js +20 -55
- package/lib/middleware/__test__/gitMiddleware.test.js +7 -42
- package/lib/middleware/__test__/notificationsMiddleware.test.js +2 -4
- package/lib/middleware/__test__/requestMiddleware.test.js +6 -11
- package/lib/middleware/__test__/utils.test.js +9 -11
- package/lib/middleware/__test__/yargsChecksMiddleware.test.js +9 -44
- package/lib/middleware/autoUpdateMiddleware.js +33 -40
- package/lib/middleware/configMiddleware.js +36 -42
- package/lib/middleware/fireAlarmMiddleware.js +12 -18
- package/lib/middleware/gitMiddleware.js +5 -8
- package/lib/middleware/notificationsMiddleware.js +16 -23
- package/lib/middleware/requestMiddleware.js +4 -10
- package/lib/middleware/utils.js +1 -4
- package/lib/middleware/yargsChecksMiddleware.js +10 -13
- package/lib/npm.js +14 -23
- package/lib/oauth.js +29 -35
- package/lib/parsing.js +3 -6
- package/lib/polling.js +11 -15
- package/lib/process.js +11 -19
- package/lib/projectProfiles.d.ts +2 -2
- package/lib/projectProfiles.js +32 -42
- package/lib/projects/ProjectLogsManager.js +18 -21
- package/lib/projects/__tests__/AppDevModeInterface.test.js +140 -145
- package/lib/projects/__tests__/LocalDevProcess.test.js +68 -73
- package/lib/projects/__tests__/LocalDevWebsocketServer.test.js +32 -37
- package/lib/projects/__tests__/ProjectLogsManager.test.js +56 -58
- package/lib/projects/__tests__/buildAndDeploy.test.js +7 -9
- package/lib/projects/__tests__/components.test.js +9 -14
- package/lib/projects/__tests__/projects.test.js +35 -40
- package/lib/projects/__tests__/structure.test.js +43 -81
- package/lib/projects/add/__tests__/legacyAddComponent.test.js +26 -28
- package/lib/projects/add/__tests__/v3AddComponent.test.js +25 -30
- package/lib/projects/add/legacyAddComponent.d.ts +1 -1
- package/lib/projects/add/legacyAddComponent.js +23 -29
- package/lib/projects/add/v3AddComponent.d.ts +1 -1
- package/lib/projects/add/v3AddComponent.js +35 -41
- package/lib/projects/buildAndDeploy.d.ts +1 -1
- package/lib/projects/buildAndDeploy.js +88 -97
- package/lib/projects/components.js +19 -25
- package/lib/projects/config.d.ts +1 -1
- package/lib/projects/config.js +32 -41
- package/lib/projects/create/__tests__/legacy.test.js +22 -57
- package/lib/projects/create/__tests__/v3.test.js +5 -7
- package/lib/projects/create/index.d.ts +3 -3
- package/lib/projects/create/index.js +19 -22
- package/lib/projects/create/legacy.d.ts +1 -1
- package/lib/projects/create/legacy.js +25 -31
- package/lib/projects/create/v3.d.ts +3 -3
- package/lib/projects/create/v3.js +49 -59
- package/lib/projects/ensureProjectExists.js +31 -37
- package/lib/projects/localDev/AppDevModeInterface.d.ts +3 -3
- package/lib/projects/localDev/AppDevModeInterface.js +58 -60
- package/lib/projects/localDev/DevServerManager.d.ts +1 -1
- package/lib/projects/localDev/DevServerManager.js +24 -26
- package/lib/projects/localDev/DevServerManagerV2.d.ts +2 -2
- package/lib/projects/localDev/DevServerManagerV2.js +17 -22
- package/lib/projects/localDev/LocalDevLogger.d.ts +1 -1
- package/lib/projects/localDev/LocalDevLogger.js +59 -64
- package/lib/projects/localDev/LocalDevManager.d.ts +1 -1
- package/lib/projects/localDev/LocalDevManager.js +106 -111
- package/lib/projects/localDev/LocalDevProcess.d.ts +4 -4
- package/lib/projects/localDev/LocalDevProcess.js +25 -30
- package/lib/projects/localDev/LocalDevState.d.ts +3 -3
- package/lib/projects/localDev/LocalDevState.js +3 -5
- package/lib/projects/localDev/LocalDevWatcher.d.ts +1 -1
- package/lib/projects/localDev/LocalDevWatcher.js +6 -11
- package/lib/projects/localDev/LocalDevWebsocketServer.d.ts +1 -1
- package/lib/projects/localDev/LocalDevWebsocketServer.js +25 -27
- package/lib/projects/localDev/helpers.d.ts +3 -3
- package/lib/projects/localDev/helpers.js +156 -174
- package/lib/projects/structure.d.ts +3 -3
- package/lib/projects/structure.js +32 -78
- package/lib/projects/ui.js +10 -13
- package/lib/projects/upload.d.ts +1 -1
- package/lib/projects/upload.js +55 -64
- package/lib/projects/urls.js +14 -24
- package/lib/projects/watch.d.ts +1 -1
- package/lib/projects/watch.js +48 -54
- package/lib/prompts/__tests__/downloadProjectPrompt.test.js +9 -11
- package/lib/prompts/__tests__/projectsLogsPrompt.test.js +11 -16
- package/lib/prompts/accountNamePrompt.d.ts +1 -1
- package/lib/prompts/accountNamePrompt.js +26 -31
- package/lib/prompts/accountsPrompt.js +12 -15
- package/lib/prompts/cmsFieldPrompt.js +13 -19
- package/lib/prompts/createApiSamplePrompt.d.ts +1 -1
- package/lib/prompts/createApiSamplePrompt.js +9 -12
- package/lib/prompts/createDeveloperTestAccountConfigPrompt.d.ts +1 -1
- package/lib/prompts/createDeveloperTestAccountConfigPrompt.js +16 -19
- package/lib/prompts/createFunctionPrompt.js +17 -20
- package/lib/prompts/createModulePrompt.js +12 -15
- package/lib/prompts/createTemplatePrompt.js +5 -8
- package/lib/prompts/downloadProjectPrompt.js +17 -20
- package/lib/prompts/installAppPrompt.js +19 -26
- package/lib/prompts/personalAccessKeyPrompt.d.ts +2 -2
- package/lib/prompts/personalAccessKeyPrompt.js +40 -47
- package/lib/prompts/previewPrompt.js +15 -22
- package/lib/prompts/projectAddPrompt.d.ts +1 -1
- package/lib/prompts/projectAddPrompt.js +14 -18
- package/lib/prompts/projectDevTargetAccountPrompt.d.ts +1 -1
- package/lib/prompts/projectDevTargetAccountPrompt.js +48 -54
- package/lib/prompts/projectNameAndDestPrompt.d.ts +1 -1
- package/lib/prompts/projectNameAndDestPrompt.js +22 -29
- package/lib/prompts/projectNamePrompt.js +11 -14
- package/lib/prompts/projectsLogsPrompt.js +5 -8
- package/lib/prompts/promptUtils.d.ts +1 -1
- package/lib/prompts/promptUtils.js +15 -22
- package/lib/prompts/sandboxesPrompt.d.ts +1 -1
- package/lib/prompts/sandboxesPrompt.js +26 -30
- package/lib/prompts/secretPrompt.js +10 -15
- package/lib/prompts/selectAppPrompt.js +11 -14
- package/lib/prompts/selectHubDBTablePrompt.js +24 -30
- package/lib/prompts/selectProjectTemplatePrompt.d.ts +1 -1
- package/lib/prompts/selectProjectTemplatePrompt.js +10 -13
- package/lib/prompts/selectPublicAppForMigrationPrompt.js +22 -25
- package/lib/prompts/setAsDefaultAccountPrompt.js +13 -16
- package/lib/prompts/uploadPrompt.js +11 -17
- package/lib/sandboxSync.d.ts +1 -1
- package/lib/sandboxSync.js +58 -65
- package/lib/sandboxes.d.ts +1 -1
- package/lib/sandboxes.js +68 -76
- package/lib/schema.js +12 -23
- package/lib/serverlessLogs.js +45 -52
- package/lib/testUtils.js +4 -8
- package/lib/ui/SpinniesManager.d.ts +1 -1
- package/lib/ui/SpinniesManager.js +29 -34
- package/lib/ui/boxen.js +11 -14
- package/lib/ui/git.js +14 -20
- package/lib/ui/index.js +55 -73
- package/lib/ui/logger.js +10 -13
- package/lib/ui/serverlessFunctionLogs.js +14 -20
- package/lib/ui/spinniesUtils.js +24 -39
- package/lib/ui/supportHyperlinks.js +3 -6
- package/lib/ui/supportsColor.js +11 -17
- package/lib/ui/table.js +6 -13
- package/lib/upload.js +15 -21
- package/lib/usageTracking.js +44 -50
- package/lib/utils/hasFlag.js +2 -8
- package/lib/validation.js +48 -87
- package/lib/yargsUtils.d.ts +1 -1
- package/lib/yargsUtils.js +13 -16
- package/mcp-server/server.js +6 -8
- package/mcp-server/tools/index.js +13 -16
- package/mcp-server/tools/project/AddFeatureToProject.d.ts +1 -1
- package/mcp-server/tools/project/AddFeatureToProject.js +33 -37
- package/mcp-server/tools/project/CreateProjectTool.d.ts +1 -1
- package/mcp-server/tools/project/CreateProjectTool.js +44 -48
- package/mcp-server/tools/project/DeployProject.d.ts +1 -1
- package/mcp-server/tools/project/DeployProject.js +16 -20
- package/mcp-server/tools/project/GuidedWalkthroughTool.d.ts +1 -1
- package/mcp-server/tools/project/GuidedWalkthroughTool.js +19 -23
- package/mcp-server/tools/project/UploadProjectTools.d.ts +1 -1
- package/mcp-server/tools/project/UploadProjectTools.js +10 -17
- package/mcp-server/tools/project/ValidateProjectTool.d.ts +1 -1
- package/mcp-server/tools/project/ValidateProjectTool.js +11 -15
- package/mcp-server/tools/project/__tests__/AddFeatureToProject.test.js +12 -14
- package/mcp-server/tools/project/__tests__/CreateProjectTool.test.js +13 -15
- package/mcp-server/tools/project/__tests__/DeployProject.test.js +6 -8
- package/mcp-server/tools/project/__tests__/GuidedWalkthroughTool.test.js +4 -6
- package/mcp-server/tools/project/__tests__/UploadProjectTools.test.js +4 -6
- package/mcp-server/tools/project/__tests__/ValidateProjectTool.test.js +4 -6
- package/mcp-server/tools/project/constants.js +3 -9
- package/mcp-server/types.js +1 -5
- package/mcp-server/utils/__tests__/command.test.js +9 -11
- package/mcp-server/utils/__tests__/project.test.js +12 -17
- package/mcp-server/utils/command.d.ts +1 -1
- package/mcp-server/utils/command.js +4 -11
- package/mcp-server/utils/content.d.ts +1 -1
- package/mcp-server/utils/content.js +2 -6
- package/mcp-server/utils/project.js +8 -14
- package/package.json +15 -11
- package/types/LocalDev.d.ts +4 -4
- package/types/LocalDev.js +1 -2
- package/types/ProjectComponents.d.ts +2 -2
- package/types/ProjectComponents.js +1 -2
- package/types/Projects.d.ts +1 -1
- package/types/Projects.js +2 -5
- package/types/Prompts.js +1 -2
- package/types/Yargs.js +1 -2
- package/types/{Cms.d.ts → cms.d.ts} +1 -1
- package/types/cms.js +1 -0
- package/types/sandboxes.js +1 -0
- package/types/Cms.js +0 -2
- package/types/Sandboxes.js +0 -2
- /package/types/{Sandboxes.d.ts → sandboxes.d.ts} +0 -0
|
@@ -1,31 +1,26 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const LocalDevProcess_1 = __importDefault(require("../localDev/LocalDevProcess"));
|
|
11
|
-
const LocalDevLogger_1 = __importDefault(require("../localDev/LocalDevLogger"));
|
|
12
|
-
const DevServerManagerV2_1 = __importDefault(require("../localDev/DevServerManagerV2"));
|
|
13
|
-
const environments_1 = require("@hubspot/local-dev-lib/constants/environments");
|
|
14
|
-
const vitest_1 = require("vitest");
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import { translateForLocalDev } from '@hubspot/project-parsing-lib';
|
|
3
|
+
import { handleProjectUpload } from '../upload.js';
|
|
4
|
+
import { getProjectConfig } from '../config.js';
|
|
5
|
+
import LocalDevProcess from '../localDev/LocalDevProcess.js';
|
|
6
|
+
import LocalDevLogger from '../localDev/LocalDevLogger.js';
|
|
7
|
+
import DevServerManagerV2 from '../localDev/DevServerManagerV2.js';
|
|
8
|
+
import { ENVIRONMENTS } from '@hubspot/local-dev-lib/constants/environments';
|
|
9
|
+
import { vi } from 'vitest';
|
|
15
10
|
// Mock @hubspot/ui-extensions-dev-server
|
|
16
|
-
|
|
11
|
+
vi.mock('@hubspot/ui-extensions-dev-server', () => ({
|
|
17
12
|
DevModeUnifiedInterface: {
|
|
18
|
-
setup:
|
|
19
|
-
start:
|
|
20
|
-
fileChange:
|
|
21
|
-
cleanup:
|
|
13
|
+
setup: vi.fn().mockResolvedValue(undefined),
|
|
14
|
+
start: vi.fn().mockResolvedValue(undefined),
|
|
15
|
+
fileChange: vi.fn().mockResolvedValue(undefined),
|
|
16
|
+
cleanup: vi.fn().mockResolvedValue(undefined),
|
|
22
17
|
},
|
|
23
18
|
}));
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
19
|
+
vi.mock('@hubspot/project-parsing-lib');
|
|
20
|
+
vi.mock('../upload');
|
|
21
|
+
vi.mock('../config');
|
|
22
|
+
vi.mock('../localDev/LocalDevLogger');
|
|
23
|
+
vi.mock('../localDev/DevServerManagerV2');
|
|
29
24
|
// Tests for LocalDevProcess and LocalDevState
|
|
30
25
|
describe('LocalDevProcess', () => {
|
|
31
26
|
let mockLocalDevLogger;
|
|
@@ -79,51 +74,51 @@ describe('LocalDevProcess', () => {
|
|
|
79
74
|
projectId: 789,
|
|
80
75
|
isGithubLinked: false,
|
|
81
76
|
initialProjectNodes: {},
|
|
82
|
-
env:
|
|
77
|
+
env: ENVIRONMENTS.PROD,
|
|
83
78
|
deployedBuild: mockBuild,
|
|
84
79
|
projectName: 'test-project',
|
|
85
80
|
};
|
|
86
81
|
beforeEach(() => {
|
|
87
|
-
|
|
82
|
+
vi.clearAllMocks();
|
|
88
83
|
mockLocalDevLogger = {
|
|
89
|
-
resetSpinnies:
|
|
90
|
-
devServerSetupError:
|
|
91
|
-
devServerStartError:
|
|
92
|
-
devServerCleanupError:
|
|
93
|
-
missingComponentsWarning:
|
|
94
|
-
noDeployedBuild:
|
|
95
|
-
startupMessage:
|
|
96
|
-
monitorConsoleOutput:
|
|
97
|
-
cleanupStart:
|
|
98
|
-
cleanupError:
|
|
99
|
-
cleanupSuccess:
|
|
100
|
-
uploadInitiated:
|
|
101
|
-
projectConfigMismatch:
|
|
102
|
-
uploadError:
|
|
103
|
-
uploadSuccess:
|
|
104
|
-
clearUploadWarnings:
|
|
105
|
-
fileChangeError:
|
|
106
|
-
uploadWarning:
|
|
84
|
+
resetSpinnies: vi.fn(),
|
|
85
|
+
devServerSetupError: vi.fn(),
|
|
86
|
+
devServerStartError: vi.fn(),
|
|
87
|
+
devServerCleanupError: vi.fn(),
|
|
88
|
+
missingComponentsWarning: vi.fn(),
|
|
89
|
+
noDeployedBuild: vi.fn(),
|
|
90
|
+
startupMessage: vi.fn(),
|
|
91
|
+
monitorConsoleOutput: vi.fn(),
|
|
92
|
+
cleanupStart: vi.fn(),
|
|
93
|
+
cleanupError: vi.fn(),
|
|
94
|
+
cleanupSuccess: vi.fn(),
|
|
95
|
+
uploadInitiated: vi.fn(),
|
|
96
|
+
projectConfigMismatch: vi.fn(),
|
|
97
|
+
uploadError: vi.fn(),
|
|
98
|
+
uploadSuccess: vi.fn(),
|
|
99
|
+
clearUploadWarnings: vi.fn(),
|
|
100
|
+
fileChangeError: vi.fn(),
|
|
101
|
+
uploadWarning: vi.fn(),
|
|
107
102
|
};
|
|
108
103
|
mockDevServerManager = {
|
|
109
|
-
setup:
|
|
110
|
-
start:
|
|
111
|
-
cleanup:
|
|
112
|
-
fileChange:
|
|
104
|
+
setup: vi.fn().mockResolvedValue(undefined),
|
|
105
|
+
start: vi.fn().mockResolvedValue(undefined),
|
|
106
|
+
cleanup: vi.fn().mockResolvedValue(undefined),
|
|
107
|
+
fileChange: vi.fn().mockResolvedValue(undefined),
|
|
113
108
|
};
|
|
114
109
|
// Mock constructors
|
|
115
|
-
|
|
116
|
-
|
|
110
|
+
LocalDevLogger.mockImplementation(() => mockLocalDevLogger);
|
|
111
|
+
DevServerManagerV2.mockImplementation(() => mockDevServerManager);
|
|
117
112
|
// Create process instance
|
|
118
|
-
process = new
|
|
113
|
+
process = new LocalDevProcess(mockOptions);
|
|
119
114
|
// Mock process.exit
|
|
120
|
-
|
|
115
|
+
vi.spyOn(global.process, 'exit').mockImplementation((code) => {
|
|
121
116
|
throw new Error(`Process.exit called with code ${code}`);
|
|
122
117
|
});
|
|
123
118
|
});
|
|
124
119
|
describe('start()', () => {
|
|
125
120
|
it('should exit if no deployed build exists', async () => {
|
|
126
|
-
const processWithoutBuild = new
|
|
121
|
+
const processWithoutBuild = new LocalDevProcess({
|
|
127
122
|
...mockOptions,
|
|
128
123
|
deployedBuild: undefined,
|
|
129
124
|
});
|
|
@@ -156,7 +151,7 @@ describe('LocalDevProcess', () => {
|
|
|
156
151
|
config: {},
|
|
157
152
|
files: [],
|
|
158
153
|
};
|
|
159
|
-
const processWithNode = new
|
|
154
|
+
const processWithNode = new LocalDevProcess({
|
|
160
155
|
...mockOptions,
|
|
161
156
|
initialProjectNodes: {
|
|
162
157
|
component3: mockNode,
|
|
@@ -187,13 +182,13 @@ describe('LocalDevProcess', () => {
|
|
|
187
182
|
describe('updateProjectNodes()', () => {
|
|
188
183
|
it('should update project nodes with translated representation', async () => {
|
|
189
184
|
const mockNodes = { node1: { uid: 'node1' } };
|
|
190
|
-
|
|
185
|
+
translateForLocalDev.mockResolvedValue({
|
|
191
186
|
intermediateNodesIndexedByUid: mockNodes,
|
|
192
187
|
});
|
|
193
188
|
// @ts-expect-error testing private method
|
|
194
189
|
await process.updateProjectNodes();
|
|
195
|
-
expect(
|
|
196
|
-
projectSourceDir:
|
|
190
|
+
expect(translateForLocalDev).toHaveBeenCalledWith({
|
|
191
|
+
projectSourceDir: path.join(mockOptions.projectDir, mockOptions.projectConfig.srcDir),
|
|
197
192
|
platformVersion: mockOptions.projectConfig.platformVersion,
|
|
198
193
|
accountId: mockOptions.targetProjectAccountId,
|
|
199
194
|
}, { projectNodesAtLastUpload: {} });
|
|
@@ -202,18 +197,18 @@ describe('LocalDevProcess', () => {
|
|
|
202
197
|
});
|
|
203
198
|
describe('uploadProject()', () => {
|
|
204
199
|
it('should not upload if project config is invalid', async () => {
|
|
205
|
-
|
|
200
|
+
getProjectConfig.mockResolvedValue({
|
|
206
201
|
projectConfig: null,
|
|
207
202
|
});
|
|
208
203
|
await process.uploadProject();
|
|
209
204
|
expect(mockLocalDevLogger.projectConfigMismatch).toHaveBeenCalled();
|
|
210
|
-
expect(
|
|
205
|
+
expect(handleProjectUpload).not.toHaveBeenCalled();
|
|
211
206
|
});
|
|
212
207
|
it('should handle upload error', async () => {
|
|
213
|
-
|
|
208
|
+
getProjectConfig.mockResolvedValue({
|
|
214
209
|
projectConfig: mockOptions.projectConfig,
|
|
215
210
|
});
|
|
216
|
-
|
|
211
|
+
handleProjectUpload.mockResolvedValue({
|
|
217
212
|
uploadError: new Error('Upload failed'),
|
|
218
213
|
});
|
|
219
214
|
const success = await process.uploadProject();
|
|
@@ -222,10 +217,10 @@ describe('LocalDevProcess', () => {
|
|
|
222
217
|
});
|
|
223
218
|
it('should handle successful upload', async () => {
|
|
224
219
|
await process.handleConfigFileChange();
|
|
225
|
-
|
|
220
|
+
getProjectConfig.mockResolvedValue({
|
|
226
221
|
projectConfig: mockOptions.projectConfig,
|
|
227
222
|
});
|
|
228
|
-
|
|
223
|
+
handleProjectUpload.mockResolvedValue({
|
|
229
224
|
uploadError: null,
|
|
230
225
|
});
|
|
231
226
|
const success = await process.uploadProject();
|
|
@@ -238,19 +233,19 @@ describe('LocalDevProcess', () => {
|
|
|
238
233
|
const initialProjectNodes = { existingNode: { uid: 'existingNode' } };
|
|
239
234
|
// @ts-expect-error accessing private property for testing
|
|
240
235
|
process.state._projectNodesAtLastUpload = initialProjectNodes;
|
|
241
|
-
|
|
236
|
+
getProjectConfig.mockResolvedValue({
|
|
242
237
|
projectConfig: mockOptions.projectConfig,
|
|
243
238
|
});
|
|
244
|
-
|
|
239
|
+
handleProjectUpload.mockResolvedValue({
|
|
245
240
|
uploadError: null,
|
|
246
241
|
});
|
|
247
|
-
|
|
242
|
+
translateForLocalDev.mockResolvedValue({
|
|
248
243
|
intermediateNodesIndexedByUid: mockNodes,
|
|
249
244
|
});
|
|
250
245
|
const success = await process.uploadProject();
|
|
251
246
|
// Verify translateForLocalDev was called without projectNodesAtLastUpload option
|
|
252
|
-
expect(
|
|
253
|
-
projectSourceDir:
|
|
247
|
+
expect(translateForLocalDev).toHaveBeenCalledWith({
|
|
248
|
+
projectSourceDir: path.join(mockOptions.projectDir, mockOptions.projectConfig.srcDir),
|
|
254
249
|
platformVersion: mockOptions.projectConfig.platformVersion,
|
|
255
250
|
accountId: mockOptions.targetProjectAccountId,
|
|
256
251
|
}, { projectNodesAtLastUpload: undefined });
|
|
@@ -281,14 +276,14 @@ describe('LocalDevProcess', () => {
|
|
|
281
276
|
});
|
|
282
277
|
describe('handleConfigFileChange()', () => {
|
|
283
278
|
beforeEach(() => {
|
|
284
|
-
|
|
279
|
+
translateForLocalDev.mockResolvedValue({
|
|
285
280
|
intermediateNodesIndexedByUid: {},
|
|
286
281
|
});
|
|
287
282
|
});
|
|
288
283
|
it('should update project nodes and show upload warning', async () => {
|
|
289
284
|
await process.handleConfigFileChange();
|
|
290
|
-
expect(
|
|
291
|
-
projectSourceDir:
|
|
285
|
+
expect(translateForLocalDev).toHaveBeenCalledWith({
|
|
286
|
+
projectSourceDir: path.join(mockOptions.projectDir, mockOptions.projectConfig.srcDir),
|
|
292
287
|
platformVersion: mockOptions.projectConfig.platformVersion,
|
|
293
288
|
accountId: mockOptions.targetProjectAccountId,
|
|
294
289
|
}, { projectNodesAtLastUpload: {} });
|
|
@@ -297,7 +292,7 @@ describe('LocalDevProcess', () => {
|
|
|
297
292
|
});
|
|
298
293
|
describe('addStateListener()', () => {
|
|
299
294
|
it('should add state listener', () => {
|
|
300
|
-
const listener =
|
|
295
|
+
const listener = vi.fn();
|
|
301
296
|
const key = 'projectNodes';
|
|
302
297
|
process.addStateListener(key, listener);
|
|
303
298
|
// @ts-expect-error
|
|
@@ -305,7 +300,7 @@ describe('LocalDevProcess', () => {
|
|
|
305
300
|
expect(listener).toHaveBeenCalled();
|
|
306
301
|
});
|
|
307
302
|
it('should call listener immediately when callOnInit is true', () => {
|
|
308
|
-
const listener =
|
|
303
|
+
const listener = vi.fn();
|
|
309
304
|
const key = 'projectNodes';
|
|
310
305
|
process.addStateListener(key, listener, true);
|
|
311
306
|
expect(listener).toHaveBeenCalledWith(process.projectNodes);
|
|
@@ -1,14 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const portManager_1 = require("@hubspot/local-dev-lib/portManager");
|
|
8
|
-
const logger_1 = require("@hubspot/local-dev-lib/logger");
|
|
9
|
-
const constants_1 = require("../../constants");
|
|
10
|
-
const LocalDevWebsocketServer_1 = __importDefault(require("../localDev/LocalDevWebsocketServer"));
|
|
11
|
-
const en_1 = require("../../../lang/en");
|
|
1
|
+
import { WebSocketServer } from 'ws';
|
|
2
|
+
import { isPortManagerServerRunning, requestPorts, } from '@hubspot/local-dev-lib/portManager';
|
|
3
|
+
import { logger } from '@hubspot/local-dev-lib/logger';
|
|
4
|
+
import { LOCAL_DEV_UI_MESSAGE_RECEIVE_TYPES, LOCAL_DEV_SERVER_MESSAGE_TYPES, } from '../../constants.js';
|
|
5
|
+
import LocalDevWebsocketServer from '../localDev/LocalDevWebsocketServer.js';
|
|
6
|
+
import { lib } from '../../../lang/en.js';
|
|
12
7
|
vi.mock('ws');
|
|
13
8
|
vi.mock('@hubspot/local-dev-lib/portManager');
|
|
14
9
|
vi.mock('@hubspot/local-dev-lib/logger');
|
|
@@ -38,28 +33,28 @@ describe('LocalDevWebsocketServer', () => {
|
|
|
38
33
|
sendDevServerMessage: vi.fn(),
|
|
39
34
|
};
|
|
40
35
|
// Mock WebSocketServer constructor
|
|
41
|
-
|
|
36
|
+
WebSocketServer.mockImplementation(() => mockWebSocketServer);
|
|
42
37
|
// Create server instance
|
|
43
|
-
server = new
|
|
38
|
+
server = new LocalDevWebsocketServer(mockLocalDevProcess, true);
|
|
44
39
|
});
|
|
45
40
|
describe('start()', () => {
|
|
46
41
|
it('should throw error if port manager is not running', async () => {
|
|
47
|
-
|
|
42
|
+
isPortManagerServerRunning.mockResolvedValue(false);
|
|
48
43
|
await expect(server.start()).rejects.toThrow();
|
|
49
44
|
});
|
|
50
45
|
it('should start websocket server successfully', async () => {
|
|
51
|
-
|
|
52
|
-
|
|
46
|
+
isPortManagerServerRunning.mockResolvedValue(true);
|
|
47
|
+
requestPorts.mockResolvedValue({
|
|
53
48
|
'local-dev-ui-websocket-server': 1234,
|
|
54
49
|
});
|
|
55
50
|
await server.start();
|
|
56
|
-
expect(
|
|
51
|
+
expect(WebSocketServer).toHaveBeenCalledWith({ port: 1234 });
|
|
57
52
|
expect(mockWebSocketServer.on).toHaveBeenCalledWith('connection', expect.any(Function));
|
|
58
|
-
expect(
|
|
53
|
+
expect(logger.log).toHaveBeenCalled();
|
|
59
54
|
});
|
|
60
55
|
it('should accept connection from valid origin', async () => {
|
|
61
|
-
|
|
62
|
-
|
|
56
|
+
isPortManagerServerRunning.mockResolvedValue(true);
|
|
57
|
+
requestPorts.mockResolvedValue({
|
|
63
58
|
'local-dev-ui-websocket-server': 1234,
|
|
64
59
|
});
|
|
65
60
|
await server.start();
|
|
@@ -74,8 +69,8 @@ describe('LocalDevWebsocketServer', () => {
|
|
|
74
69
|
expect(mockWebSocket.close).not.toHaveBeenCalled();
|
|
75
70
|
});
|
|
76
71
|
it('should reject connection from invalid origin', async () => {
|
|
77
|
-
|
|
78
|
-
|
|
72
|
+
isPortManagerServerRunning.mockResolvedValue(true);
|
|
73
|
+
requestPorts.mockResolvedValue({
|
|
79
74
|
'local-dev-ui-websocket-server': 1234,
|
|
80
75
|
});
|
|
81
76
|
await server.start();
|
|
@@ -85,13 +80,13 @@ describe('LocalDevWebsocketServer', () => {
|
|
|
85
80
|
connectionCallback(mockWebSocket, {
|
|
86
81
|
headers: { origin: 'https://malicious-site.com' },
|
|
87
82
|
});
|
|
88
|
-
expect(mockWebSocket.close).toHaveBeenCalledWith(1008,
|
|
83
|
+
expect(mockWebSocket.close).toHaveBeenCalledWith(1008, lib.LocalDevWebsocketServer.errors.originNotAllowed('https://malicious-site.com'));
|
|
89
84
|
expect(mockWebSocket.on).not.toHaveBeenCalled();
|
|
90
85
|
expect(mockLocalDevProcess.addStateListener).not.toHaveBeenCalled();
|
|
91
86
|
});
|
|
92
87
|
it('should reject connection with no origin header', async () => {
|
|
93
|
-
|
|
94
|
-
|
|
88
|
+
isPortManagerServerRunning.mockResolvedValue(true);
|
|
89
|
+
requestPorts.mockResolvedValue({
|
|
95
90
|
'local-dev-ui-websocket-server': 1234,
|
|
96
91
|
});
|
|
97
92
|
await server.start();
|
|
@@ -101,13 +96,13 @@ describe('LocalDevWebsocketServer', () => {
|
|
|
101
96
|
connectionCallback(mockWebSocket, {
|
|
102
97
|
headers: {},
|
|
103
98
|
});
|
|
104
|
-
expect(mockWebSocket.close).toHaveBeenCalledWith(1008,
|
|
99
|
+
expect(mockWebSocket.close).toHaveBeenCalledWith(1008, lib.LocalDevWebsocketServer.errors.originNotAllowed());
|
|
105
100
|
expect(mockWebSocket.on).not.toHaveBeenCalled();
|
|
106
101
|
expect(mockLocalDevProcess.addStateListener).not.toHaveBeenCalled();
|
|
107
102
|
});
|
|
108
103
|
it('should send WEBSOCKET_SERVER_CONNECTED message when valid connection is established', async () => {
|
|
109
|
-
|
|
110
|
-
|
|
104
|
+
isPortManagerServerRunning.mockResolvedValue(true);
|
|
105
|
+
requestPorts.mockResolvedValue({
|
|
111
106
|
'local-dev-ui-websocket-server': 1234,
|
|
112
107
|
});
|
|
113
108
|
await server.start();
|
|
@@ -117,13 +112,13 @@ describe('LocalDevWebsocketServer', () => {
|
|
|
117
112
|
connectionCallback(mockWebSocket, {
|
|
118
113
|
headers: { origin: 'https://app.hubspot.com' },
|
|
119
114
|
});
|
|
120
|
-
expect(mockLocalDevProcess.sendDevServerMessage).toHaveBeenCalledWith(
|
|
115
|
+
expect(mockLocalDevProcess.sendDevServerMessage).toHaveBeenCalledWith(LOCAL_DEV_SERVER_MESSAGE_TYPES.WEBSOCKET_SERVER_CONNECTED);
|
|
121
116
|
});
|
|
122
117
|
});
|
|
123
118
|
describe('message handling', () => {
|
|
124
119
|
beforeEach(async () => {
|
|
125
|
-
|
|
126
|
-
|
|
120
|
+
isPortManagerServerRunning.mockResolvedValue(true);
|
|
121
|
+
requestPorts.mockResolvedValue({
|
|
127
122
|
'local-dev-ui-websocket-server': 1234,
|
|
128
123
|
});
|
|
129
124
|
await server.start();
|
|
@@ -135,7 +130,7 @@ describe('LocalDevWebsocketServer', () => {
|
|
|
135
130
|
it('should handle UPLOAD message type', () => {
|
|
136
131
|
const messageCallback = mockWebSocket.on.mock.calls[0][1];
|
|
137
132
|
const message = {
|
|
138
|
-
type:
|
|
133
|
+
type: LOCAL_DEV_UI_MESSAGE_RECEIVE_TYPES.UPLOAD,
|
|
139
134
|
};
|
|
140
135
|
messageCallback(JSON.stringify(message));
|
|
141
136
|
expect(mockLocalDevProcess.uploadProject).toHaveBeenCalled();
|
|
@@ -144,7 +139,7 @@ describe('LocalDevWebsocketServer', () => {
|
|
|
144
139
|
const messageCallback = mockWebSocket.on.mock.calls[0][1];
|
|
145
140
|
const message = {};
|
|
146
141
|
messageCallback(JSON.stringify(message));
|
|
147
|
-
expect(
|
|
142
|
+
expect(logger.error).toHaveBeenCalled();
|
|
148
143
|
});
|
|
149
144
|
it('should log error for unknown message type', () => {
|
|
150
145
|
const messageCallback = mockWebSocket.on.mock.calls[0][1];
|
|
@@ -152,19 +147,19 @@ describe('LocalDevWebsocketServer', () => {
|
|
|
152
147
|
type: 'UNKNOWN_TYPE',
|
|
153
148
|
};
|
|
154
149
|
messageCallback(JSON.stringify(message));
|
|
155
|
-
expect(
|
|
150
|
+
expect(logger.error).toHaveBeenCalled();
|
|
156
151
|
});
|
|
157
152
|
it('should log error for invalid JSON', () => {
|
|
158
153
|
const messageCallback = mockWebSocket.on.mock.calls[0][1];
|
|
159
154
|
const invalidJson = 'invalid json';
|
|
160
155
|
messageCallback(invalidJson);
|
|
161
|
-
expect(
|
|
156
|
+
expect(logger.error).toHaveBeenCalled();
|
|
162
157
|
});
|
|
163
158
|
});
|
|
164
159
|
describe('shutdown()', () => {
|
|
165
160
|
it('should close the websocket server', async () => {
|
|
166
|
-
|
|
167
|
-
|
|
161
|
+
isPortManagerServerRunning.mockResolvedValue(true);
|
|
162
|
+
requestPorts.mockResolvedValue({
|
|
168
163
|
'local-dev-ui-websocket-server': 1234,
|
|
169
164
|
});
|
|
170
165
|
await server.start();
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const ensureProjectExists_1 = require("../ensureProjectExists");
|
|
6
|
-
const projects_1 = require("@hubspot/local-dev-lib/api/projects");
|
|
1
|
+
import { ProjectLogsManager } from '../ProjectLogsManager.js';
|
|
2
|
+
import { getProjectConfig } from '../config.js';
|
|
3
|
+
import { ensureProjectExists } from '../ensureProjectExists.js';
|
|
4
|
+
import { fetchProjectComponentsMetadata } from '@hubspot/local-dev-lib/api/projects';
|
|
7
5
|
const SUBCOMPONENT_TYPES = {
|
|
8
6
|
APP_ID: 'APP_ID',
|
|
9
7
|
PACKAGE_LOCK_FILE: 'PACKAGE_LOCK_FILE',
|
|
@@ -57,10 +55,10 @@ describe('lib/projects/ProjectLogsManager', () => {
|
|
|
57
55
|
},
|
|
58
56
|
];
|
|
59
57
|
beforeEach(() => {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
58
|
+
ProjectLogsManager.reset();
|
|
59
|
+
getProjectConfig.mockResolvedValue(projectConfig);
|
|
60
|
+
ensureProjectExists.mockResolvedValue(projectDetails);
|
|
61
|
+
fetchProjectComponentsMetadata.mockResolvedValue({
|
|
64
62
|
data: {
|
|
65
63
|
topLevelComponentMetadata: [
|
|
66
64
|
{
|
|
@@ -85,59 +83,59 @@ describe('lib/projects/ProjectLogsManager', () => {
|
|
|
85
83
|
});
|
|
86
84
|
describe('init', () => {
|
|
87
85
|
it('should load the project config', async () => {
|
|
88
|
-
await
|
|
89
|
-
expect(
|
|
86
|
+
await ProjectLogsManager.init(accountId);
|
|
87
|
+
expect(getProjectConfig).toHaveBeenCalledTimes(1);
|
|
90
88
|
});
|
|
91
89
|
it('should throw an error if there is a problem with the config', async () => {
|
|
92
|
-
|
|
93
|
-
await expect(async () =>
|
|
94
|
-
expect(
|
|
90
|
+
getProjectConfig.mockResolvedValue({});
|
|
91
|
+
await expect(async () => ProjectLogsManager.init(accountId)).rejects.toThrow('No project detected. Run this command again from a project directory.');
|
|
92
|
+
expect(getProjectConfig).toHaveBeenCalledTimes(1);
|
|
95
93
|
});
|
|
96
94
|
it('should ensure the project exists', async () => {
|
|
97
|
-
await
|
|
98
|
-
expect(
|
|
99
|
-
expect(
|
|
95
|
+
await ProjectLogsManager.init(accountId);
|
|
96
|
+
expect(ensureProjectExists).toHaveBeenCalledTimes(1);
|
|
97
|
+
expect(ensureProjectExists).toHaveBeenCalledWith(accountId, projectName, {
|
|
100
98
|
allowCreate: false,
|
|
101
99
|
});
|
|
102
100
|
});
|
|
103
101
|
it('should throw an error if there is data missing from the project details', async () => {
|
|
104
|
-
|
|
105
|
-
await expect(async () =>
|
|
102
|
+
ensureProjectExists.mockResolvedValue({});
|
|
103
|
+
await expect(async () => ProjectLogsManager.init(accountId)).rejects.toThrow(/There was an error fetching project details/);
|
|
106
104
|
});
|
|
107
105
|
it('should set all of the expected fields correctly', async () => {
|
|
108
|
-
await
|
|
109
|
-
expect(
|
|
110
|
-
expect(
|
|
111
|
-
expect(
|
|
112
|
-
expect(
|
|
106
|
+
await ProjectLogsManager.init(accountId);
|
|
107
|
+
expect(ProjectLogsManager.projectId).toEqual(projectId);
|
|
108
|
+
expect(ProjectLogsManager.projectName).toEqual(projectName);
|
|
109
|
+
expect(ProjectLogsManager.accountId).toEqual(accountId);
|
|
110
|
+
expect(ProjectLogsManager.functions).toEqual(functions);
|
|
113
111
|
});
|
|
114
112
|
});
|
|
115
113
|
describe('fetchFunctionDetails', () => {
|
|
116
114
|
it('should throw an error if the projectId is null when the method is called', async () => {
|
|
117
|
-
await expect(async () =>
|
|
115
|
+
await expect(async () => ProjectLogsManager.fetchFunctionDetails()).rejects.toThrow('No project detected. Run this command again from a project directory.');
|
|
118
116
|
});
|
|
119
117
|
it('should fetch the component metadata', async () => {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
await
|
|
123
|
-
expect(
|
|
124
|
-
expect(
|
|
118
|
+
ProjectLogsManager.projectId = projectId;
|
|
119
|
+
ProjectLogsManager.accountId = accountId;
|
|
120
|
+
await ProjectLogsManager.fetchFunctionDetails();
|
|
121
|
+
expect(fetchProjectComponentsMetadata).toHaveBeenCalledTimes(1);
|
|
122
|
+
expect(fetchProjectComponentsMetadata).toHaveBeenCalledWith(accountId, projectId);
|
|
125
123
|
});
|
|
126
124
|
it('should set the functions correctly', async () => {
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
await
|
|
130
|
-
expect(
|
|
125
|
+
ProjectLogsManager.projectId = projectId;
|
|
126
|
+
ProjectLogsManager.accountId = accountId;
|
|
127
|
+
await ProjectLogsManager.fetchFunctionDetails();
|
|
128
|
+
expect(ProjectLogsManager.functions).toEqual(functions);
|
|
131
129
|
});
|
|
132
130
|
});
|
|
133
131
|
describe('getFunctionNames', () => {
|
|
134
132
|
it('should return an empty array if functions is empty', async () => {
|
|
135
|
-
|
|
136
|
-
expect(
|
|
133
|
+
ProjectLogsManager.functions = [];
|
|
134
|
+
expect(ProjectLogsManager.getFunctionNames()).toEqual([]);
|
|
137
135
|
});
|
|
138
136
|
it('should return an array of the componentNames', async () => {
|
|
139
|
-
|
|
140
|
-
expect(
|
|
137
|
+
ProjectLogsManager.functions = functions;
|
|
138
|
+
expect(ProjectLogsManager.getFunctionNames()).toEqual([
|
|
141
139
|
'function1',
|
|
142
140
|
'function2',
|
|
143
141
|
]);
|
|
@@ -145,13 +143,13 @@ describe('lib/projects/ProjectLogsManager', () => {
|
|
|
145
143
|
});
|
|
146
144
|
describe('setFunction', () => {
|
|
147
145
|
it('should throw an error when functions is empty', async () => {
|
|
148
|
-
|
|
149
|
-
expect(() =>
|
|
146
|
+
ProjectLogsManager.functions = [];
|
|
147
|
+
expect(() => ProjectLogsManager.setFunction('foo')).toThrow(`There aren't any functions in this project`);
|
|
150
148
|
});
|
|
151
149
|
it('should throw an error when the provided function is invalid', async () => {
|
|
152
|
-
|
|
150
|
+
ProjectLogsManager.functions = functions;
|
|
153
151
|
const badName = 'foo';
|
|
154
|
-
expect(() =>
|
|
152
|
+
expect(() => ProjectLogsManager.setFunction(badName)).toThrow(`No function with name "${badName}"`);
|
|
155
153
|
});
|
|
156
154
|
it('should set the data correctly for public functions', async () => {
|
|
157
155
|
const functionToChoose = {
|
|
@@ -165,27 +163,27 @@ describe('lib/projects/ProjectLogsManager', () => {
|
|
|
165
163
|
endpoint: { path: 'yooooooo', methods: ['GET'] },
|
|
166
164
|
},
|
|
167
165
|
};
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
expect(
|
|
171
|
-
expect(
|
|
172
|
-
expect(
|
|
173
|
-
expect(
|
|
166
|
+
ProjectLogsManager.functions = [functionToChoose];
|
|
167
|
+
ProjectLogsManager.setFunction('function1');
|
|
168
|
+
expect(ProjectLogsManager.functionName).toEqual('function1');
|
|
169
|
+
expect(ProjectLogsManager.endpointName).toEqual('yooooooo');
|
|
170
|
+
expect(ProjectLogsManager.selectedFunction).toEqual(functionToChoose);
|
|
171
|
+
expect(ProjectLogsManager.isPublicFunction).toEqual(true);
|
|
174
172
|
});
|
|
175
173
|
it('should set the data correctly for public functions', async () => {
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
expect(
|
|
179
|
-
expect(
|
|
180
|
-
expect(
|
|
174
|
+
ProjectLogsManager.functions = functions;
|
|
175
|
+
ProjectLogsManager.setFunction('function1');
|
|
176
|
+
expect(ProjectLogsManager.selectedFunction).toEqual(function1);
|
|
177
|
+
expect(ProjectLogsManager.functionName).toEqual('function1');
|
|
178
|
+
expect(ProjectLogsManager.isPublicFunction).toEqual(false);
|
|
181
179
|
});
|
|
182
180
|
});
|
|
183
181
|
describe('reset', () => {
|
|
184
182
|
it('should reset all the values', async () => {
|
|
185
|
-
|
|
186
|
-
expect(
|
|
187
|
-
|
|
188
|
-
expect(
|
|
183
|
+
ProjectLogsManager.projectName = 'value';
|
|
184
|
+
expect(ProjectLogsManager.projectName).toBeDefined();
|
|
185
|
+
ProjectLogsManager.reset();
|
|
186
|
+
expect(ProjectLogsManager.projectName).toBeUndefined();
|
|
189
187
|
});
|
|
190
188
|
});
|
|
191
189
|
});
|
|
@@ -1,25 +1,23 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const buildAndDeploy_1 = require("../buildAndDeploy");
|
|
1
|
+
import { useV3Api } from '../buildAndDeploy.js';
|
|
4
2
|
describe('buildAndDeploy', () => {
|
|
5
3
|
describe('useV3Api', () => {
|
|
6
4
|
it('returns true if platform version is UNSTABLE', () => {
|
|
7
|
-
expect(
|
|
5
|
+
expect(useV3Api('UNSTABLE')).toBe(true);
|
|
8
6
|
});
|
|
9
7
|
it('returns true if platform version is equal to the minimum', () => {
|
|
10
|
-
expect(
|
|
8
|
+
expect(useV3Api('2025.2')).toBe(true);
|
|
11
9
|
});
|
|
12
10
|
it('returns true if platform version is greater than the minimum', () => {
|
|
13
|
-
expect(
|
|
11
|
+
expect(useV3Api('2026.2')).toBe(true);
|
|
14
12
|
});
|
|
15
13
|
it('returns false if platform version is less than the minimum', () => {
|
|
16
|
-
expect(
|
|
14
|
+
expect(useV3Api('2025.0')).toBe(false);
|
|
17
15
|
});
|
|
18
16
|
it('returns false if platform version is invalid', () => {
|
|
19
|
-
expect(
|
|
17
|
+
expect(useV3Api(null)).toBe(false);
|
|
20
18
|
});
|
|
21
19
|
it('returns false for an invalid platform version', () => {
|
|
22
|
-
expect(
|
|
20
|
+
expect(useV3Api('notplaformversion')).toBe(false);
|
|
23
21
|
});
|
|
24
22
|
});
|
|
25
23
|
});
|