@hubspot/cli 7.6.0-beta.4 → 7.6.0-beta.6
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.d.ts +7 -0
- package/api/migrate.js +22 -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 +45 -60
- 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 +78 -69
- 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 +2 -1
- package/commands/config/set.js +40 -32
- 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 +125 -146
- 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 +32 -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 +99 -141
- package/commands/project/__tests__/devUnifiedFlow.test.js +151 -155
- 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 +63 -68
- package/commands/project/deploy.d.ts +2 -2
- package/commands/project/deploy.js +83 -90
- 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 +69 -76
- 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 +68 -61
- 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 +36 -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 +222 -20
- package/commands/sandbox/__tests__/delete.test.js +15 -20
- package/commands/sandbox/create.d.ts +2 -2
- package/commands/sandbox/create.js +92 -79
- 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 +63 -84
- package/commands/testAccount/createConfig.d.ts +1 -1
- 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 +52 -25
- package/lang/en.js +421 -397
- package/lang/en.lyaml +4 -28
- package/lib/__tests__/accountTypes.test.js +20 -22
- package/lib/__tests__/buildAccount.test.js +115 -64
- 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 +17 -41
- package/lib/accountTypes.js +24 -34
- package/lib/app/__tests__/migrate.test.js +117 -109
- package/lib/app/__tests__/migrate_legacy.test.js +29 -31
- package/lib/app/migrate.d.ts +18 -4
- package/lib/app/migrate.js +152 -148
- 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 +12 -3
- package/lib/buildAccount.js +165 -69
- package/lib/commonOpts.d.ts +1 -1
- package/lib/commonOpts.js +67 -59
- package/lib/configMigrate.js +34 -38
- package/lib/configOptions.d.ts +5 -0
- package/lib/configOptions.js +44 -40
- package/lib/constants.d.ts +8 -0
- package/lib/constants.js +39 -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 +33 -52
- package/lib/errorHandlers/suppressError.d.ts +1 -1
- package/lib/errorHandlers/suppressError.js +28 -31
- package/lib/errors/ProjectValidationError.d.ts +4 -0
- package/lib/errors/ProjectValidationError.js +9 -0
- 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.d.ts +4 -0
- package/lib/mcp/setup.js +106 -82
- 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 +100 -140
- package/lib/projects/__tests__/LocalDevWebsocketServer.test.js +201 -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__/localDevHelpers.test.js +117 -0
- 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 +24 -30
- package/lib/projects/add/v3AddComponent.d.ts +1 -1
- package/lib/projects/add/v3AddComponent.js +37 -42
- 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 -5
- package/lib/projects/create/v3.js +47 -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 +22 -26
- package/lib/projects/localDev/DevServerManagerV2.d.ts +2 -2
- package/lib/projects/localDev/DevServerManagerV2.js +15 -22
- package/lib/projects/localDev/LocalDevLogger.d.ts +1 -2
- package/lib/projects/localDev/LocalDevLogger.js +66 -66
- package/lib/projects/localDev/LocalDevManager.d.ts +1 -1
- package/lib/projects/localDev/LocalDevManager.js +106 -111
- package/lib/projects/localDev/LocalDevProcess.d.ts +6 -5
- package/lib/projects/localDev/LocalDevProcess.js +37 -50
- package/lib/projects/localDev/LocalDevState.d.ts +5 -7
- package/lib/projects/localDev/LocalDevState.js +9 -11
- package/lib/projects/localDev/LocalDevWatcher.d.ts +1 -1
- package/lib/projects/localDev/LocalDevWatcher.js +6 -11
- package/lib/projects/localDev/LocalDevWebsocketServer.d.ts +3 -3
- package/lib/projects/localDev/LocalDevWebsocketServer.js +63 -55
- package/lib/projects/localDev/helpers.d.ts +11 -4
- package/lib/projects/localDev/helpers.js +211 -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 +57 -73
- package/lib/projects/urls.d.ts +1 -1
- package/lib/projects/urls.js +15 -25
- 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 +2 -2
- package/lib/prompts/createDeveloperTestAccountConfigPrompt.js +27 -31
- 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 +80 -77
- 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 +5 -1
- package/lib/sandboxes.js +72 -76
- package/lib/schema.js +13 -20
- 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.d.ts +6 -0
- package/lib/ui/index.js +56 -76
- 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 +35 -44
- package/lib/utils/__tests__/isDeepEqual.test.js +269 -0
- package/lib/utils/hasFlag.js +2 -8
- package/lib/utils/isDeepEqual.d.ts +1 -0
- package/lib/utils/isDeepEqual.js +31 -0
- package/lib/validation.js +48 -87
- package/lib/yargsUtils.d.ts +2 -1
- package/lib/yargsUtils.js +19 -16
- package/mcp-server/server.js +6 -8
- package/mcp-server/tools/index.js +15 -16
- package/mcp-server/tools/project/{AddFeatureToProject.d.ts → AddFeatureToProjectTool.d.ts} +5 -5
- package/mcp-server/tools/project/AddFeatureToProjectTool.js +76 -0
- package/mcp-server/tools/project/CreateProjectTool.d.ts +4 -4
- package/mcp-server/tools/project/CreateProjectTool.js +40 -54
- package/mcp-server/tools/project/{DeployProject.d.ts → DeployProjectTool.d.ts} +2 -2
- package/mcp-server/tools/project/DeployProjectTool.js +49 -0
- package/mcp-server/tools/project/GetConfigValuesTool.d.ts +20 -0
- package/mcp-server/tools/project/GetConfigValuesTool.js +51 -0
- package/mcp-server/tools/project/GuidedWalkthroughTool.d.ts +1 -1
- package/mcp-server/tools/project/GuidedWalkthroughTool.js +21 -25
- package/mcp-server/tools/project/UploadProjectTools.d.ts +1 -1
- package/mcp-server/tools/project/UploadProjectTools.js +12 -19
- package/mcp-server/tools/project/ValidateProjectTool.d.ts +1 -1
- package/mcp-server/tools/project/ValidateProjectTool.js +13 -17
- package/mcp-server/tools/project/__tests__/AddFeatureToProjectTool.test.d.ts +1 -0
- package/mcp-server/tools/project/__tests__/{AddFeatureToProject.test.js → AddFeatureToProjectTool.test.js} +15 -17
- package/mcp-server/tools/project/__tests__/CreateProjectTool.test.js +12 -15
- package/mcp-server/tools/project/__tests__/DeployProjectTool.test.d.ts +1 -0
- package/mcp-server/tools/project/__tests__/{DeployProject.test.js → DeployProjectTool.test.js} +6 -8
- package/mcp-server/tools/project/__tests__/GetConfigValuesTool.test.d.ts +1 -0
- package/mcp-server/tools/project/__tests__/GetConfigValuesTool.test.js +198 -0
- 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.d.ts +1 -0
- package/mcp-server/tools/project/constants.js +14 -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/mcp-server/utils/toolUsageTracking.js +11 -14
- package/package.json +22 -15
- package/types/Cms.d.ts +1 -1
- package/types/Cms.js +1 -2
- package/types/LocalDev.d.ts +4 -6
- 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/Sandboxes.js +1 -2
- package/types/Yargs.js +1 -2
- package/ui/index.d.ts +1 -0
- package/ui/index.js +6 -0
- package/mcp-server/tools/project/AddFeatureToProject.js +0 -88
- package/mcp-server/tools/project/DeployProject.js +0 -53
- /package/{mcp-server/tools/project/__tests__/AddFeatureToProject.test.d.ts → lib/projects/__tests__/localDevHelpers.test.d.ts} +0 -0
- /package/{mcp-server/tools/project/__tests__/DeployProject.test.d.ts → lib/utils/__tests__/isDeepEqual.test.d.ts} +0 -0
package/lib/accountTypes.js
CHANGED
|
@@ -1,54 +1,44 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
exports.isStandardSandbox = isStandardSandbox;
|
|
6
|
-
exports.isDevelopmentSandbox = isDevelopmentSandbox;
|
|
7
|
-
exports.isDeveloperTestAccount = isDeveloperTestAccount;
|
|
8
|
-
exports.isAppDeveloperAccount = isAppDeveloperAccount;
|
|
9
|
-
exports.isTestAccountOrSandbox = isTestAccountOrSandbox;
|
|
10
|
-
exports.isUnifiedAccount = isUnifiedAccount;
|
|
11
|
-
const config_1 = require("@hubspot/local-dev-lib/constants/config");
|
|
12
|
-
const hasFeature_1 = require("./hasFeature");
|
|
13
|
-
const constants_1 = require("./constants");
|
|
14
|
-
const getAccountIdentifier_1 = require("@hubspot/local-dev-lib/config/getAccountIdentifier");
|
|
1
|
+
import { HUBSPOT_ACCOUNT_TYPES } from '@hubspot/local-dev-lib/constants/config';
|
|
2
|
+
import { hasFeature } from './hasFeature.js';
|
|
3
|
+
import { FEATURES } from './constants.js';
|
|
4
|
+
import { getAccountIdentifier } from '@hubspot/local-dev-lib/config/getAccountIdentifier';
|
|
15
5
|
function isAccountType(accountConfig, accountType) {
|
|
16
6
|
return Boolean(accountConfig.accountType && accountType.includes(accountConfig.accountType));
|
|
17
7
|
}
|
|
18
|
-
function isStandardAccount(accountConfig) {
|
|
19
|
-
return isAccountType(accountConfig, [
|
|
8
|
+
export function isStandardAccount(accountConfig) {
|
|
9
|
+
return isAccountType(accountConfig, [HUBSPOT_ACCOUNT_TYPES.STANDARD]);
|
|
20
10
|
}
|
|
21
|
-
function isSandbox(accountConfig) {
|
|
11
|
+
export function isSandbox(accountConfig) {
|
|
22
12
|
return isAccountType(accountConfig, [
|
|
23
|
-
|
|
24
|
-
|
|
13
|
+
HUBSPOT_ACCOUNT_TYPES.STANDARD_SANDBOX,
|
|
14
|
+
HUBSPOT_ACCOUNT_TYPES.DEVELOPMENT_SANDBOX,
|
|
25
15
|
]);
|
|
26
16
|
}
|
|
27
|
-
function isStandardSandbox(accountConfig) {
|
|
28
|
-
return isAccountType(accountConfig, [
|
|
17
|
+
export function isStandardSandbox(accountConfig) {
|
|
18
|
+
return isAccountType(accountConfig, [HUBSPOT_ACCOUNT_TYPES.STANDARD_SANDBOX]);
|
|
29
19
|
}
|
|
30
|
-
function isDevelopmentSandbox(accountConfig) {
|
|
20
|
+
export function isDevelopmentSandbox(accountConfig) {
|
|
31
21
|
return isAccountType(accountConfig, [
|
|
32
|
-
|
|
22
|
+
HUBSPOT_ACCOUNT_TYPES.DEVELOPMENT_SANDBOX,
|
|
33
23
|
]);
|
|
34
24
|
}
|
|
35
|
-
function isDeveloperTestAccount(accountConfig) {
|
|
36
|
-
return isAccountType(accountConfig, [
|
|
25
|
+
export function isDeveloperTestAccount(accountConfig) {
|
|
26
|
+
return isAccountType(accountConfig, [HUBSPOT_ACCOUNT_TYPES.DEVELOPER_TEST]);
|
|
37
27
|
}
|
|
38
|
-
function isAppDeveloperAccount(accountConfig) {
|
|
39
|
-
return isAccountType(accountConfig, [
|
|
28
|
+
export function isAppDeveloperAccount(accountConfig) {
|
|
29
|
+
return isAccountType(accountConfig, [HUBSPOT_ACCOUNT_TYPES.APP_DEVELOPER]);
|
|
40
30
|
}
|
|
41
|
-
function isTestAccountOrSandbox(accountConfig) {
|
|
31
|
+
export function isTestAccountOrSandbox(accountConfig) {
|
|
42
32
|
return isAccountType(accountConfig, [
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
33
|
+
HUBSPOT_ACCOUNT_TYPES.DEVELOPER_TEST,
|
|
34
|
+
HUBSPOT_ACCOUNT_TYPES.STANDARD_SANDBOX,
|
|
35
|
+
HUBSPOT_ACCOUNT_TYPES.DEVELOPMENT_SANDBOX,
|
|
46
36
|
]);
|
|
47
37
|
}
|
|
48
|
-
async function isUnifiedAccount(account) {
|
|
49
|
-
const accountId =
|
|
38
|
+
export async function isUnifiedAccount(account) {
|
|
39
|
+
const accountId = getAccountIdentifier(account);
|
|
50
40
|
if (!accountId) {
|
|
51
41
|
return false;
|
|
52
42
|
}
|
|
53
|
-
return
|
|
43
|
+
return hasFeature(accountId, FEATURES.UNIFIED_APPS);
|
|
54
44
|
}
|
|
@@ -1,23 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
const polling_1 = require("../../polling");
|
|
17
|
-
const migrate_1 = require("../../../api/migrate");
|
|
18
|
-
const en_1 = require("../../../lang/en");
|
|
19
|
-
const hasFeature_1 = require("../../hasFeature");
|
|
20
|
-
const migrate_2 = require("../migrate");
|
|
1
|
+
import { logger } from '@hubspot/local-dev-lib/logger';
|
|
2
|
+
import { getCwd, sanitizeFileName } from '@hubspot/local-dev-lib/path';
|
|
3
|
+
import { extractZipArchive } from '@hubspot/local-dev-lib/archive';
|
|
4
|
+
import { validateUid } from '@hubspot/project-parsing-lib';
|
|
5
|
+
import { UNMIGRATABLE_REASONS } from '@hubspot/local-dev-lib/constants/projects';
|
|
6
|
+
import { MIGRATION_STATUS } from '@hubspot/local-dev-lib/types/Migration';
|
|
7
|
+
import { downloadProject } from '@hubspot/local-dev-lib/api/projects';
|
|
8
|
+
import fs from 'fs';
|
|
9
|
+
import { confirmPrompt, inputPrompt, listPrompt, } from '../../prompts/promptUtils.js';
|
|
10
|
+
import { ensureProjectExists } from '../../projects/ensureProjectExists.js';
|
|
11
|
+
import { poll } from '../../polling.js';
|
|
12
|
+
import { CLI_UNMIGRATABLE_REASONS, continueMigration, initializeMigration, listAppsForMigration, listThemesForMigration, } from '../../../api/migrate.js';
|
|
13
|
+
import { lib } from '../../../lang/en.js';
|
|
14
|
+
import { hasFeature } from '../../hasFeature.js';
|
|
15
|
+
import { getUnmigratableReason, generateFilterAppsByProjectNameFunction, buildErrorMessageFromMigrationStatus, fetchMigrationApps, promptForAppToMigrate, selectAppToMigrate, handleMigrationSetup, beginMigration, pollMigrationStatus, finalizeMigration, downloadProjectFiles, migrateApp2025_2, logInvalidAccountError, validateMigrationAppsAndThemes, } from '../migrate.js';
|
|
21
16
|
vi.mock('@hubspot/local-dev-lib/logger');
|
|
22
17
|
vi.mock('@hubspot/local-dev-lib/path');
|
|
23
18
|
vi.mock('@hubspot/local-dev-lib/archive');
|
|
@@ -33,22 +28,23 @@ vi.mock('../../../api/migrate');
|
|
|
33
28
|
vi.mock('../../hasFeature');
|
|
34
29
|
vi.mock('../../projects/urls');
|
|
35
30
|
vi.mock('fs');
|
|
36
|
-
const mockedLogger =
|
|
37
|
-
const mockedGetCwd =
|
|
38
|
-
const mockedSanitizeFileName =
|
|
39
|
-
const mockedExtractZipArchive =
|
|
40
|
-
const mockedValidateUid =
|
|
41
|
-
const mockedDownloadProject =
|
|
42
|
-
const mockedConfirmPrompt =
|
|
43
|
-
const mockedInputPrompt =
|
|
44
|
-
const mockedListPrompt =
|
|
45
|
-
const mockedEnsureProjectExists =
|
|
46
|
-
const mockedPoll =
|
|
47
|
-
const mockedListAppsForMigration =
|
|
48
|
-
const
|
|
49
|
-
const
|
|
50
|
-
const
|
|
51
|
-
const
|
|
31
|
+
const mockedLogger = logger;
|
|
32
|
+
const mockedGetCwd = getCwd;
|
|
33
|
+
const mockedSanitizeFileName = sanitizeFileName;
|
|
34
|
+
const mockedExtractZipArchive = extractZipArchive;
|
|
35
|
+
const mockedValidateUid = validateUid;
|
|
36
|
+
const mockedDownloadProject = downloadProject;
|
|
37
|
+
const mockedConfirmPrompt = confirmPrompt;
|
|
38
|
+
const mockedInputPrompt = inputPrompt;
|
|
39
|
+
const mockedListPrompt = listPrompt;
|
|
40
|
+
const mockedEnsureProjectExists = ensureProjectExists;
|
|
41
|
+
const mockedPoll = poll;
|
|
42
|
+
const mockedListAppsForMigration = listAppsForMigration;
|
|
43
|
+
const mockedListThemesForMigration = listThemesForMigration;
|
|
44
|
+
const mockedInitializeMigration = initializeMigration;
|
|
45
|
+
const mockedContinueMigration = continueMigration;
|
|
46
|
+
const mockedHasFeature = hasFeature;
|
|
47
|
+
const mockedFs = fs;
|
|
52
48
|
const createMockMigratableApp = (id, name, projectName) => ({
|
|
53
49
|
appId: id,
|
|
54
50
|
appName: name,
|
|
@@ -78,8 +74,8 @@ const PROJECT_DEST = '/mock/dest';
|
|
|
78
74
|
const MOCK_CWD = '/mock/cwd';
|
|
79
75
|
const MOCK_PROJECT_DIR = '/mock/project/dir';
|
|
80
76
|
const mockUnmigratableApps = [
|
|
81
|
-
createMockUnmigratableApp(3, 'App 3',
|
|
82
|
-
createMockUnmigratableApp(4, 'App 4',
|
|
77
|
+
createMockUnmigratableApp(3, 'App 3', UNMIGRATABLE_REASONS.UP_TO_DATE),
|
|
78
|
+
createMockUnmigratableApp(4, 'App 4', UNMIGRATABLE_REASONS.IS_A_PRIVATE_APP),
|
|
83
79
|
];
|
|
84
80
|
describe('lib/app/migrate', () => {
|
|
85
81
|
beforeEach(() => {
|
|
@@ -93,38 +89,38 @@ describe('lib/app/migrate', () => {
|
|
|
93
89
|
const testCases = [
|
|
94
90
|
{
|
|
95
91
|
name: 'UP_TO_DATE',
|
|
96
|
-
reason:
|
|
97
|
-
expected:
|
|
92
|
+
reason: UNMIGRATABLE_REASONS.UP_TO_DATE,
|
|
93
|
+
expected: lib.migrate.errors.unmigratableReasons.upToDate,
|
|
98
94
|
},
|
|
99
95
|
{
|
|
100
96
|
name: 'IS_A_PRIVATE_APP',
|
|
101
|
-
reason:
|
|
102
|
-
expected:
|
|
97
|
+
reason: UNMIGRATABLE_REASONS.IS_A_PRIVATE_APP,
|
|
98
|
+
expected: lib.migrate.errors.unmigratableReasons.isPrivateApp,
|
|
103
99
|
},
|
|
104
100
|
{
|
|
105
101
|
name: 'LISTED_IN_MARKETPLACE',
|
|
106
|
-
reason:
|
|
107
|
-
expected:
|
|
102
|
+
reason: UNMIGRATABLE_REASONS.LISTED_IN_MARKETPLACE,
|
|
103
|
+
expected: lib.migrate.errors.unmigratableReasons.listedInMarketplace,
|
|
108
104
|
},
|
|
109
105
|
{
|
|
110
106
|
name: 'PROJECT_CONNECTED_TO_GITHUB',
|
|
111
|
-
reason:
|
|
112
|
-
expected:
|
|
107
|
+
reason: UNMIGRATABLE_REASONS.PROJECT_CONNECTED_TO_GITHUB,
|
|
108
|
+
expected: lib.migrate.errors.unmigratableReasons.projectConnectedToGitHub(PROJECT_NAME, ACCOUNT_ID),
|
|
113
109
|
},
|
|
114
110
|
{
|
|
115
111
|
name: 'PART_OF_PROJECT_ALREADY',
|
|
116
|
-
reason:
|
|
117
|
-
expected:
|
|
112
|
+
reason: CLI_UNMIGRATABLE_REASONS.PART_OF_PROJECT_ALREADY,
|
|
113
|
+
expected: lib.migrate.errors.unmigratableReasons.partOfProjectAlready,
|
|
118
114
|
},
|
|
119
115
|
{
|
|
120
116
|
name: 'UNKNOWN_REASON',
|
|
121
117
|
reason: 'UNKNOWN_REASON',
|
|
122
|
-
expected:
|
|
118
|
+
expected: lib.migrate.errors.unmigratableReasons.generic('UNKNOWN_REASON'),
|
|
123
119
|
},
|
|
124
120
|
];
|
|
125
121
|
testCases.forEach(testCase => {
|
|
126
122
|
it(`should return the correct message for ${testCase.name}`, () => {
|
|
127
|
-
const result =
|
|
123
|
+
const result = getUnmigratableReason(testCase.reason, PROJECT_NAME, ACCOUNT_ID);
|
|
128
124
|
expect(result).toBe(testCase.expected);
|
|
129
125
|
});
|
|
130
126
|
});
|
|
@@ -132,14 +128,14 @@ describe('lib/app/migrate', () => {
|
|
|
132
128
|
describe('generateFilterAppsByProjectNameFunction', () => {
|
|
133
129
|
it('should return a function that filters by project name when projectConfig is provided', () => {
|
|
134
130
|
const projectConfig = createLoadedProjectConfig(PROJECT_NAME);
|
|
135
|
-
const filterFn =
|
|
131
|
+
const filterFn = generateFilterAppsByProjectNameFunction(projectConfig);
|
|
136
132
|
const matchingApp = createMockMigratableApp(1, 'App 1', PROJECT_NAME);
|
|
137
133
|
const nonMatchingApp = createMockMigratableApp(2, 'App 2', 'Other Project');
|
|
138
134
|
expect(filterFn(matchingApp)).toBe(true);
|
|
139
135
|
expect(filterFn(nonMatchingApp)).toBe(false);
|
|
140
136
|
});
|
|
141
137
|
it('should return a function that always returns true when projectConfig is not provided', () => {
|
|
142
|
-
const filterFn =
|
|
138
|
+
const filterFn = generateFilterAppsByProjectNameFunction(undefined);
|
|
143
139
|
const app1 = createMockMigratableApp(1, 'App 1', PROJECT_NAME);
|
|
144
140
|
const app2 = createMockMigratableApp(2, 'App 2', 'Other Project');
|
|
145
141
|
expect(filterFn(app1)).toBe(true);
|
|
@@ -150,17 +146,17 @@ describe('lib/app/migrate', () => {
|
|
|
150
146
|
it('should return projectErrorDetail when there are no component errors', () => {
|
|
151
147
|
const error = {
|
|
152
148
|
id: 123,
|
|
153
|
-
status:
|
|
149
|
+
status: MIGRATION_STATUS.FAILURE,
|
|
154
150
|
projectErrorDetail: 'Project error',
|
|
155
151
|
componentErrors: [],
|
|
156
152
|
};
|
|
157
|
-
const result =
|
|
153
|
+
const result = buildErrorMessageFromMigrationStatus(error);
|
|
158
154
|
expect(result).toBe('Project error');
|
|
159
155
|
});
|
|
160
156
|
it('should return formatted error message with component errors', () => {
|
|
161
157
|
const error = {
|
|
162
158
|
id: 123,
|
|
163
|
-
status:
|
|
159
|
+
status: MIGRATION_STATUS.FAILURE,
|
|
164
160
|
projectErrorDetail: 'Project error',
|
|
165
161
|
componentErrors: [
|
|
166
162
|
{
|
|
@@ -174,7 +170,7 @@ describe('lib/app/migrate', () => {
|
|
|
174
170
|
},
|
|
175
171
|
],
|
|
176
172
|
};
|
|
177
|
-
const result =
|
|
173
|
+
const result = buildErrorMessageFromMigrationStatus(error);
|
|
178
174
|
expect(result).toBe('Project error: \n\t- CARD (card1): Card error\n\t- FUNCTION: Function error');
|
|
179
175
|
});
|
|
180
176
|
});
|
|
@@ -192,57 +188,63 @@ describe('lib/app/migrate', () => {
|
|
|
192
188
|
setupMockApps([
|
|
193
189
|
createMockMigratableApp(1, 'App 1', PROJECT_NAME),
|
|
194
190
|
createMockMigratableApp(2, 'App 2', PROJECT_NAME),
|
|
195
|
-
], [createMockUnmigratableApp(3, 'App 3',
|
|
191
|
+
], [createMockUnmigratableApp(3, 'App 3', UNMIGRATABLE_REASONS.UP_TO_DATE)]);
|
|
196
192
|
});
|
|
197
193
|
it('should return all apps when no projectConfig is provided', async () => {
|
|
198
194
|
setupMockApps([createMockMigratableApp(1, 'App 1')]);
|
|
199
|
-
const result = await
|
|
200
|
-
expect(result).toHaveLength(1);
|
|
201
|
-
expect(result[0].appId).toBe(1);
|
|
195
|
+
const result = await fetchMigrationApps(ACCOUNT_ID, PLATFORM_VERSION);
|
|
196
|
+
expect(result.migratableApps).toHaveLength(1);
|
|
197
|
+
expect(result.migratableApps[0].appId).toBe(1);
|
|
198
|
+
expect(result.unmigratableApps).toHaveLength(0);
|
|
202
199
|
});
|
|
203
200
|
it('should filter apps by project name when projectConfig is provided', async () => {
|
|
204
201
|
const projectConfig = createLoadedProjectConfig(PROJECT_NAME);
|
|
205
202
|
setupMockApps([createMockMigratableApp(1, 'App 1', PROJECT_NAME)]);
|
|
206
|
-
const result = await
|
|
207
|
-
expect(result).toHaveLength(1);
|
|
208
|
-
expect(result[0].projectName).toBe(PROJECT_NAME);
|
|
203
|
+
const result = await fetchMigrationApps(ACCOUNT_ID, PLATFORM_VERSION, projectConfig);
|
|
204
|
+
expect(result.migratableApps).toHaveLength(1);
|
|
205
|
+
expect(result.migratableApps[0].projectName).toBe(PROJECT_NAME);
|
|
209
206
|
});
|
|
207
|
+
});
|
|
208
|
+
describe('validateMigrationAppsAndThemes', () => {
|
|
209
|
+
const mockMigratableApp1 = createMockMigratableApp(1, 'App 1', PROJECT_NAME);
|
|
210
|
+
const mockMigratableApp2 = createMockMigratableApp(2, 'App 2', PROJECT_NAME);
|
|
210
211
|
it('should throw an error when multiple apps are found for a project', async () => {
|
|
211
212
|
const projectConfig = createLoadedProjectConfig(PROJECT_NAME);
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
]);
|
|
216
|
-
|
|
213
|
+
await expect(validateMigrationAppsAndThemes(APP_ID, ACCOUNT_ID, {
|
|
214
|
+
migratableApps: [mockMigratableApp1, mockMigratableApp2],
|
|
215
|
+
unmigratableApps: [],
|
|
216
|
+
}, { theme: [], reactTheme: [] }, projectConfig)).rejects.toThrow(lib.migrate.errors.project.multipleApps);
|
|
217
|
+
});
|
|
218
|
+
it('should throw an error when cms themes are found for a project', async () => {
|
|
219
|
+
const projectConfig = createLoadedProjectConfig(PROJECT_NAME);
|
|
220
|
+
await expect(validateMigrationAppsAndThemes(APP_ID, ACCOUNT_ID, { migratableApps: [], unmigratableApps: [] }, { theme: ['theme1'], reactTheme: [] }, projectConfig)).rejects.toThrow(lib.migrate.errors.project.themesNotAllowed);
|
|
217
221
|
});
|
|
218
222
|
it('should throw an error when no apps are found for a project', async () => {
|
|
219
223
|
const projectConfig = createLoadedProjectConfig(PROJECT_NAME);
|
|
220
|
-
|
|
221
|
-
await expect((0, migrate_2.fetchMigrationApps)(undefined, ACCOUNT_ID, PLATFORM_VERSION, projectConfig)).rejects.toThrow(en_1.lib.migrate.errors.noAppsForProject(PROJECT_NAME));
|
|
224
|
+
await expect(validateMigrationAppsAndThemes(APP_ID, ACCOUNT_ID, { migratableApps: [], unmigratableApps: [] }, { theme: [], reactTheme: [] }, projectConfig)).rejects.toThrow(lib.migrate.errors.noAppsForProject(PROJECT_NAME));
|
|
222
225
|
});
|
|
223
226
|
it('should throw an error when no migratable apps are found', async () => {
|
|
224
|
-
|
|
225
|
-
await expect((0, migrate_2.fetchMigrationApps)(undefined, ACCOUNT_ID, PLATFORM_VERSION)).rejects.toThrow(/No apps in account/);
|
|
227
|
+
await expect(validateMigrationAppsAndThemes(APP_ID, ACCOUNT_ID, { migratableApps: [], unmigratableApps: mockUnmigratableApps }, { theme: [], reactTheme: [] })).rejects.toThrow(/No apps in account/);
|
|
226
228
|
});
|
|
227
229
|
it('should throw an error when appId is provided but not found', async () => {
|
|
228
|
-
await expect((
|
|
230
|
+
await expect(validateMigrationAppsAndThemes(APP_ID, ACCOUNT_ID, { migratableApps: [], unmigratableApps: [] }, { theme: [], reactTheme: [] })).rejects.toThrow(/No apps in account/);
|
|
229
231
|
});
|
|
230
232
|
});
|
|
231
233
|
describe('promptForAppToMigrate', () => {
|
|
232
234
|
const mockApps = [
|
|
233
235
|
createMockMigratableApp(1, 'App 1'),
|
|
234
|
-
createMockUnmigratableApp(2, 'App 2',
|
|
236
|
+
createMockUnmigratableApp(2, 'App 2', UNMIGRATABLE_REASONS.UP_TO_DATE),
|
|
235
237
|
];
|
|
236
238
|
beforeEach(() => {
|
|
237
239
|
mockedListPrompt.mockResolvedValue(mockApps[0]);
|
|
238
240
|
});
|
|
239
241
|
it('should prompt the user to select an app', async () => {
|
|
240
|
-
await
|
|
241
|
-
expect(mockedListPrompt).toHaveBeenCalledWith(
|
|
242
|
+
await promptForAppToMigrate(mockApps, ACCOUNT_ID);
|
|
243
|
+
expect(mockedListPrompt).toHaveBeenCalledWith(lib.migrate.prompt.chooseApp, expect.any(Object));
|
|
242
244
|
});
|
|
243
245
|
it('should return the selected app', async () => {
|
|
244
246
|
mockedListPrompt.mockResolvedValue({ appId: mockApps[0].appId });
|
|
245
|
-
const result = await
|
|
247
|
+
const result = await promptForAppToMigrate(mockApps, ACCOUNT_ID);
|
|
246
248
|
expect(result).toBe(mockApps[0].appId);
|
|
247
249
|
});
|
|
248
250
|
});
|
|
@@ -257,26 +259,26 @@ describe('lib/app/migrate', () => {
|
|
|
257
259
|
{ id: '2', componentType: 'FUNCTION', isSupported: false },
|
|
258
260
|
],
|
|
259
261
|
},
|
|
260
|
-
createMockUnmigratableApp(2, 'App 2',
|
|
262
|
+
createMockUnmigratableApp(2, 'App 2', UNMIGRATABLE_REASONS.UP_TO_DATE),
|
|
261
263
|
];
|
|
262
264
|
beforeEach(() => {
|
|
263
265
|
mockedListPrompt.mockResolvedValue({ appId: 1 });
|
|
264
266
|
mockedConfirmPrompt.mockResolvedValue(true);
|
|
265
267
|
});
|
|
266
268
|
it('should throw an error when appId is provided but not found', async () => {
|
|
267
|
-
await expect(
|
|
269
|
+
await expect(selectAppToMigrate(mockApps, ACCOUNT_ID, 999)).rejects.toThrow(lib.migrate.errors.appWithAppIdNotFound(999));
|
|
268
270
|
});
|
|
269
271
|
it('should call listPrompt when appId is not provided', async () => {
|
|
270
|
-
await
|
|
271
|
-
expect(mockedListPrompt).toHaveBeenCalledWith(
|
|
272
|
+
await selectAppToMigrate(mockApps, ACCOUNT_ID);
|
|
273
|
+
expect(mockedListPrompt).toHaveBeenCalledWith(lib.migrate.prompt.chooseApp, expect.any(Object));
|
|
272
274
|
});
|
|
273
275
|
it('should return proceed: false and appIdToMigrate when user cancels', async () => {
|
|
274
276
|
mockedConfirmPrompt.mockResolvedValue(false);
|
|
275
|
-
const result = await
|
|
277
|
+
const result = await selectAppToMigrate(mockApps, ACCOUNT_ID);
|
|
276
278
|
expect(result).toEqual({ proceed: false, appIdToMigrate: 1 });
|
|
277
279
|
});
|
|
278
280
|
it('should return proceed: true and appIdToMigrate when user confirms', async () => {
|
|
279
|
-
const result = await
|
|
281
|
+
const result = await selectAppToMigrate(mockApps, ACCOUNT_ID);
|
|
280
282
|
expect(result).toEqual({ proceed: true, appIdToMigrate: 1 });
|
|
281
283
|
});
|
|
282
284
|
});
|
|
@@ -299,13 +301,19 @@ describe('lib/app/migrate', () => {
|
|
|
299
301
|
unmigratableApps: [],
|
|
300
302
|
},
|
|
301
303
|
});
|
|
304
|
+
// @ts-expect-error
|
|
305
|
+
mockedListThemesForMigration.mockResolvedValue({
|
|
306
|
+
data: {
|
|
307
|
+
migratableThemes: { THEME: [], REACT_THEME: [] },
|
|
308
|
+
},
|
|
309
|
+
});
|
|
302
310
|
mockedListPrompt.mockResolvedValue({ appId: 1 });
|
|
303
311
|
mockedConfirmPrompt.mockResolvedValue(true);
|
|
304
312
|
mockedEnsureProjectExists.mockResolvedValue({ projectExists: false });
|
|
305
313
|
}
|
|
306
314
|
it('should return early when user cancels', async () => {
|
|
307
315
|
mockedConfirmPrompt.mockResolvedValueOnce(false);
|
|
308
|
-
const result = await
|
|
316
|
+
const result = await handleMigrationSetup(ACCOUNT_ID, defaultOptions);
|
|
309
317
|
expect(result).toEqual({});
|
|
310
318
|
});
|
|
311
319
|
it('should return project details when projectConfig is provided', async () => {
|
|
@@ -317,7 +325,7 @@ describe('lib/app/migrate', () => {
|
|
|
317
325
|
unmigratableApps: [],
|
|
318
326
|
},
|
|
319
327
|
});
|
|
320
|
-
const result = await
|
|
328
|
+
const result = await handleMigrationSetup(ACCOUNT_ID, defaultOptions, projectConfig);
|
|
321
329
|
expect(result).toEqual({
|
|
322
330
|
appIdToMigrate: 1,
|
|
323
331
|
projectName: PROJECT_NAME,
|
|
@@ -327,18 +335,18 @@ describe('lib/app/migrate', () => {
|
|
|
327
335
|
it('should prompt for project name when not provided', async () => {
|
|
328
336
|
const optionsWithoutName = { ...defaultOptions, name: undefined };
|
|
329
337
|
mockedInputPrompt.mockResolvedValue('New Project');
|
|
330
|
-
await
|
|
331
|
-
expect(mockedInputPrompt).toHaveBeenCalledWith(
|
|
338
|
+
await handleMigrationSetup(ACCOUNT_ID, optionsWithoutName);
|
|
339
|
+
expect(mockedInputPrompt).toHaveBeenCalledWith(lib.migrate.prompt.inputName, expect.any(Object));
|
|
332
340
|
});
|
|
333
341
|
it('should prompt for project destination when not provided', async () => {
|
|
334
342
|
const optionsWithoutDest = { ...defaultOptions, dest: undefined };
|
|
335
343
|
mockedInputPrompt.mockResolvedValue('/mock/new/dest');
|
|
336
|
-
await
|
|
337
|
-
expect(mockedInputPrompt).toHaveBeenCalledWith(
|
|
344
|
+
await handleMigrationSetup(ACCOUNT_ID, optionsWithoutDest);
|
|
345
|
+
expect(mockedInputPrompt).toHaveBeenCalledWith(lib.migrate.prompt.inputDest, expect.any(Object));
|
|
338
346
|
});
|
|
339
347
|
it('should throw an error when project already exists', async () => {
|
|
340
348
|
mockedEnsureProjectExists.mockResolvedValue({ projectExists: true });
|
|
341
|
-
await expect(
|
|
349
|
+
await expect(handleMigrationSetup(ACCOUNT_ID, defaultOptions)).rejects.toThrow(lib.migrate.errors.project.alreadyExists(PROJECT_NAME));
|
|
342
350
|
});
|
|
343
351
|
});
|
|
344
352
|
describe('beginMigration', () => {
|
|
@@ -348,14 +356,14 @@ describe('lib/app/migrate', () => {
|
|
|
348
356
|
data: { migrationId: MIGRATION_ID },
|
|
349
357
|
});
|
|
350
358
|
mockedPoll.mockResolvedValue({
|
|
351
|
-
status:
|
|
359
|
+
status: MIGRATION_STATUS.INPUT_REQUIRED,
|
|
352
360
|
// @ts-expect-error
|
|
353
361
|
componentsRequiringUids: {},
|
|
354
362
|
});
|
|
355
363
|
mockedInputPrompt.mockResolvedValue('test-uid');
|
|
356
364
|
});
|
|
357
365
|
it('should initialize migration and return migrationId and uidMap', async () => {
|
|
358
|
-
const result = await
|
|
366
|
+
const result = await beginMigration(ACCOUNT_ID, APP_ID, PLATFORM_VERSION);
|
|
359
367
|
expect(result).toEqual({
|
|
360
368
|
migrationId: MIGRATION_ID,
|
|
361
369
|
uidMap: {},
|
|
@@ -364,7 +372,7 @@ describe('lib/app/migrate', () => {
|
|
|
364
372
|
it('should prompt for UIDs when components require them', async () => {
|
|
365
373
|
const componentHint = 'test-card';
|
|
366
374
|
mockedPoll.mockResolvedValue({
|
|
367
|
-
status:
|
|
375
|
+
status: MIGRATION_STATUS.INPUT_REQUIRED,
|
|
368
376
|
// @ts-expect-error
|
|
369
377
|
componentsRequiringUids: {
|
|
370
378
|
'1': {
|
|
@@ -373,26 +381,26 @@ describe('lib/app/migrate', () => {
|
|
|
373
381
|
},
|
|
374
382
|
},
|
|
375
383
|
});
|
|
376
|
-
await
|
|
377
|
-
expect(mockedInputPrompt).toHaveBeenCalledWith(
|
|
384
|
+
await beginMigration(ACCOUNT_ID, APP_ID, PLATFORM_VERSION);
|
|
385
|
+
expect(mockedInputPrompt).toHaveBeenCalledWith(lib.migrate.prompt.uidForComponent("card 'test-card' (ID: 1)"), {
|
|
378
386
|
defaultAnswer: componentHint,
|
|
379
387
|
validate: expect.any(Function),
|
|
380
388
|
});
|
|
381
389
|
});
|
|
382
390
|
it('should throw an error when migration fails', async () => {
|
|
383
391
|
mockedPoll.mockRejectedValue(new Error('Failed'));
|
|
384
|
-
await expect(
|
|
392
|
+
await expect(beginMigration(ACCOUNT_ID, APP_ID, PLATFORM_VERSION)).rejects.toThrow(/Migration Failed/);
|
|
385
393
|
});
|
|
386
394
|
});
|
|
387
395
|
describe('pollMigrationStatus', () => {
|
|
388
396
|
it('should call poll with checkMigrationStatusV2', async () => {
|
|
389
397
|
const mockStatus = {
|
|
390
398
|
id: MIGRATION_ID,
|
|
391
|
-
status:
|
|
399
|
+
status: MIGRATION_STATUS.SUCCESS,
|
|
392
400
|
buildId: BUILD_ID,
|
|
393
401
|
};
|
|
394
402
|
mockedPoll.mockResolvedValue(mockStatus);
|
|
395
|
-
const result = await
|
|
403
|
+
const result = await pollMigrationStatus(ACCOUNT_ID, MIGRATION_ID);
|
|
396
404
|
expect(mockedPoll).toHaveBeenCalledWith(expect.any(Function), expect.any(Object));
|
|
397
405
|
expect(result).toBe(mockStatus);
|
|
398
406
|
});
|
|
@@ -405,18 +413,18 @@ describe('lib/app/migrate', () => {
|
|
|
405
413
|
data: { migrationId: MIGRATION_ID },
|
|
406
414
|
});
|
|
407
415
|
mockedPoll.mockResolvedValue({
|
|
408
|
-
status:
|
|
416
|
+
status: MIGRATION_STATUS.SUCCESS,
|
|
409
417
|
// @ts-expect-error
|
|
410
418
|
buildId: BUILD_ID,
|
|
411
419
|
});
|
|
412
420
|
});
|
|
413
421
|
it('should continue migration and return buildId', async () => {
|
|
414
|
-
const result = await
|
|
422
|
+
const result = await finalizeMigration(ACCOUNT_ID, MIGRATION_ID, uidMap, PROJECT_NAME);
|
|
415
423
|
expect(result).toBe(BUILD_ID);
|
|
416
424
|
});
|
|
417
425
|
it('should throw an error when migration fails', async () => {
|
|
418
426
|
mockedPoll.mockRejectedValue(new Error('Test error'));
|
|
419
|
-
await expect(
|
|
427
|
+
await expect(finalizeMigration(ACCOUNT_ID, MIGRATION_ID, uidMap, PROJECT_NAME)).rejects.toThrow(/Migration Failed/);
|
|
420
428
|
});
|
|
421
429
|
});
|
|
422
430
|
describe('downloadProjectFiles', () => {
|
|
@@ -430,7 +438,7 @@ describe('lib/app/migrate', () => {
|
|
|
430
438
|
mockedSanitizeFileName.mockReturnValue(PROJECT_NAME);
|
|
431
439
|
});
|
|
432
440
|
it('should download and extract project files', async () => {
|
|
433
|
-
await
|
|
441
|
+
await downloadProjectFiles(ACCOUNT_ID, PROJECT_NAME, BUILD_ID, PROJECT_DEST);
|
|
434
442
|
expect(mockedDownloadProject).toHaveBeenCalledWith(ACCOUNT_ID, PROJECT_NAME, BUILD_ID);
|
|
435
443
|
expect(mockedExtractZipArchive).toHaveBeenCalledWith(expect.any(Buffer), PROJECT_NAME, expect.stringContaining(PROJECT_DEST), {
|
|
436
444
|
includesRootDir: true,
|
|
@@ -442,7 +450,7 @@ describe('lib/app/migrate', () => {
|
|
|
442
450
|
projectConfig: { name: PROJECT_NAME, srcDir: 'src' },
|
|
443
451
|
projectDir: MOCK_PROJECT_DIR,
|
|
444
452
|
};
|
|
445
|
-
await
|
|
453
|
+
await downloadProjectFiles(ACCOUNT_ID, PROJECT_NAME, BUILD_ID, PROJECT_DEST, projectConfig);
|
|
446
454
|
expect(mockedFs.renameSync).toHaveBeenCalledWith(`${MOCK_PROJECT_DIR}/src`, `${MOCK_PROJECT_DIR}/archive`);
|
|
447
455
|
expect(mockedExtractZipArchive).toHaveBeenCalledWith(expect.any(Buffer), PROJECT_NAME, MOCK_PROJECT_DIR, {
|
|
448
456
|
includesRootDir: true,
|
|
@@ -452,7 +460,7 @@ describe('lib/app/migrate', () => {
|
|
|
452
460
|
it('should throw an error when download fails', async () => {
|
|
453
461
|
const error = new Error('Download failed');
|
|
454
462
|
mockedDownloadProject.mockRejectedValue(error);
|
|
455
|
-
await expect(
|
|
463
|
+
await expect(downloadProjectFiles(ACCOUNT_ID, PROJECT_NAME, BUILD_ID, PROJECT_DEST)).rejects.toThrow(error);
|
|
456
464
|
});
|
|
457
465
|
});
|
|
458
466
|
describe('migrateApp2025_2', () => {
|
|
@@ -468,27 +476,27 @@ describe('lib/app/migrate', () => {
|
|
|
468
476
|
});
|
|
469
477
|
it('should throw an error when account is not ungated for unified apps', async () => {
|
|
470
478
|
mockedHasFeature.mockResolvedValueOnce(false);
|
|
471
|
-
await expect(
|
|
479
|
+
await expect(migrateApp2025_2(ACCOUNT_ID, options)).rejects.toThrowError(/isn't enrolled in the required product beta to access this command./);
|
|
472
480
|
});
|
|
473
481
|
it('should throw an error when projectConfig is invalid', async () => {
|
|
474
482
|
const invalidProjectConfig = {
|
|
475
483
|
projectConfig: undefined,
|
|
476
484
|
projectDir: '/mock/project/dir',
|
|
477
485
|
};
|
|
478
|
-
await expect(
|
|
486
|
+
await expect(migrateApp2025_2(ACCOUNT_ID, options, invalidProjectConfig)).rejects.toThrow(/The project configuration file is invalid/);
|
|
479
487
|
});
|
|
480
488
|
it('should throw an error when project does not exist', async () => {
|
|
481
489
|
const projectConfig = createLoadedProjectConfig(PROJECT_NAME);
|
|
482
490
|
mockedEnsureProjectExists.mockResolvedValueOnce({
|
|
483
491
|
projectExists: false,
|
|
484
492
|
});
|
|
485
|
-
await expect(
|
|
493
|
+
await expect(migrateApp2025_2(ACCOUNT_ID, options, projectConfig)).rejects.toThrow(/Migrations are only supported for existing projects/);
|
|
486
494
|
});
|
|
487
495
|
});
|
|
488
496
|
describe('logInvalidAccountError', () => {
|
|
489
497
|
it('should log the invalid account error message', () => {
|
|
490
|
-
|
|
491
|
-
expect(mockedLogger.error).toHaveBeenCalledWith(
|
|
498
|
+
logInvalidAccountError();
|
|
499
|
+
expect(mockedLogger.error).toHaveBeenCalledWith(lib.migrate.errors.invalidAccountTypeTitle);
|
|
492
500
|
expect(mockedLogger.log).toHaveBeenCalledWith(expect.stringContaining('Only public apps created in a developer account can be converted to a project component'));
|
|
493
501
|
});
|
|
494
502
|
});
|