@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,12 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const fs_1 = __importDefault(require("fs"));
|
|
7
|
-
const components_1 = require("../components");
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import { handleComponentCollision } from '../components.js';
|
|
8
3
|
vi.mock('fs');
|
|
9
|
-
const mockedFs = vi.mocked(
|
|
4
|
+
const mockedFs = vi.mocked(fs);
|
|
10
5
|
describe('lib/projects/components', () => {
|
|
11
6
|
describe('handleComponentCollision()', () => {
|
|
12
7
|
const mockCollision = {
|
|
@@ -28,7 +23,7 @@ describe('lib/projects/components', () => {
|
|
|
28
23
|
collisions: ['component.js', 'utils.ts'],
|
|
29
24
|
};
|
|
30
25
|
mockedFs.copyFileSync.mockImplementation(() => { });
|
|
31
|
-
|
|
26
|
+
handleComponentCollision(collision);
|
|
32
27
|
expect(mockedFs.copyFileSync).toHaveBeenCalledTimes(2);
|
|
33
28
|
expect(mockedFs.copyFileSync).toHaveBeenCalledWith('/src/path/component.js', '/dest/path/component-1234567890.js');
|
|
34
29
|
expect(mockedFs.copyFileSync).toHaveBeenCalledWith('/src/path/utils.ts', '/dest/path/utils-1234567890.ts');
|
|
@@ -50,7 +45,7 @@ describe('lib/projects/components', () => {
|
|
|
50
45
|
value: '.module.meta.json',
|
|
51
46
|
writable: false,
|
|
52
47
|
});
|
|
53
|
-
|
|
48
|
+
handleComponentCollision(collision);
|
|
54
49
|
expect(mockedFs.readFileSync).toHaveBeenCalledWith('/src/path/component.module.meta.json', 'utf-8');
|
|
55
50
|
expect(mockedFs.writeFileSync).toHaveBeenCalledWith('/dest/path/component-1234567890.module.meta.json', expect.stringContaining('source-1234567890.js'));
|
|
56
51
|
expect(mockedFs.copyFileSync).toHaveBeenCalledWith('/src/path/source.js', '/dest/path/source-1234567890.js');
|
|
@@ -87,7 +82,7 @@ describe('lib/projects/components', () => {
|
|
|
87
82
|
mockedFs.writeFileSync.mockImplementation(() => { });
|
|
88
83
|
// Mock console.log to avoid output during tests
|
|
89
84
|
const consoleSpy = vi.spyOn(console, 'log').mockImplementation(() => { });
|
|
90
|
-
|
|
85
|
+
handleComponentCollision(collision);
|
|
91
86
|
const expectedMergedPackageJson = {
|
|
92
87
|
name: 'existing-package',
|
|
93
88
|
dependencies: {
|
|
@@ -131,7 +126,7 @@ describe('lib/projects/components', () => {
|
|
|
131
126
|
writable: false,
|
|
132
127
|
});
|
|
133
128
|
const consoleSpy = vi.spyOn(console, 'log').mockImplementation(() => { });
|
|
134
|
-
|
|
129
|
+
handleComponentCollision(collision);
|
|
135
130
|
// Verify source files are copied with new names
|
|
136
131
|
expect(mockedFs.copyFileSync).toHaveBeenCalledWith('/src/path/component.js', '/dest/path/component-1234567890.js');
|
|
137
132
|
expect(mockedFs.copyFileSync).toHaveBeenCalledWith('/src/path/utils.ts', '/dest/path/utils-1234567890.ts');
|
|
@@ -146,7 +141,7 @@ describe('lib/projects/components', () => {
|
|
|
146
141
|
...mockCollision,
|
|
147
142
|
collisions: [],
|
|
148
143
|
};
|
|
149
|
-
|
|
144
|
+
handleComponentCollision(collision);
|
|
150
145
|
expect(mockedFs.copyFileSync).not.toHaveBeenCalled();
|
|
151
146
|
expect(mockedFs.readFileSync).not.toHaveBeenCalled();
|
|
152
147
|
expect(mockedFs.writeFileSync).not.toHaveBeenCalled();
|
|
@@ -174,7 +169,7 @@ describe('lib/projects/components', () => {
|
|
|
174
169
|
mockedFs.copyFileSync.mockImplementation(() => { });
|
|
175
170
|
// Mock console.log for package.json handling
|
|
176
171
|
const consoleSpy = vi.spyOn(console, 'log').mockImplementation(() => { });
|
|
177
|
-
|
|
172
|
+
handleComponentCollision(collision);
|
|
178
173
|
// Should copy 2 source files
|
|
179
174
|
expect(mockedFs.copyFileSync).toHaveBeenCalledTimes(2);
|
|
180
175
|
// Should handle 2 metafiles
|
|
@@ -1,22 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const os_1 = __importDefault(require("os"));
|
|
8
|
-
const path_1 = __importDefault(require("path"));
|
|
9
|
-
const exitCodes_1 = require("../../enums/exitCodes");
|
|
10
|
-
const config_1 = require("../../projects/config");
|
|
11
|
-
const logger_1 = require("@hubspot/local-dev-lib/logger");
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import os from 'os';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import { EXIT_CODES } from '../../enums/exitCodes.js';
|
|
5
|
+
import { validateProjectConfig } from '../../projects/config.js';
|
|
6
|
+
import { logger } from '@hubspot/local-dev-lib/logger';
|
|
12
7
|
vi.mock('@hubspot/local-dev-lib/logger');
|
|
13
8
|
describe('lib/projects', () => {
|
|
14
9
|
describe('validateProjectConfig()', () => {
|
|
15
10
|
let projectDir;
|
|
16
11
|
let exitMock;
|
|
17
12
|
beforeAll(() => {
|
|
18
|
-
projectDir =
|
|
19
|
-
|
|
13
|
+
projectDir = fs.mkdtempSync(path.join(os.tmpdir(), 'projects-'));
|
|
14
|
+
fs.mkdirSync(path.join(projectDir, 'src'));
|
|
20
15
|
});
|
|
21
16
|
beforeEach(() => {
|
|
22
17
|
// @ts-expect-error - Mocking process.exit
|
|
@@ -29,60 +24,60 @@ describe('lib/projects', () => {
|
|
|
29
24
|
});
|
|
30
25
|
it('rejects undefined configuration', () => {
|
|
31
26
|
// @ts-ignore Testing invalid input
|
|
32
|
-
|
|
33
|
-
expect(exitMock).toHaveBeenCalledWith(
|
|
34
|
-
expect(
|
|
27
|
+
validateProjectConfig(null, projectDir);
|
|
28
|
+
expect(exitMock).toHaveBeenCalledWith(EXIT_CODES.ERROR);
|
|
29
|
+
expect(logger.error).toHaveBeenCalledWith(expect.stringMatching(/.*Unable to locate a project configuration file. Try running again from a project directory, or run*/));
|
|
35
30
|
});
|
|
36
31
|
it('rejects configuration with missing name', () => {
|
|
37
32
|
// @ts-ignore Testing invalid input
|
|
38
|
-
|
|
39
|
-
expect(exitMock).toHaveBeenCalledWith(
|
|
40
|
-
expect(
|
|
33
|
+
validateProjectConfig({ srcDir: '.' }, projectDir);
|
|
34
|
+
expect(exitMock).toHaveBeenCalledWith(EXIT_CODES.ERROR);
|
|
35
|
+
expect(logger.error).toHaveBeenCalledWith(expect.stringMatching(/.*missing required fields*/));
|
|
41
36
|
});
|
|
42
37
|
it('rejects configuration with missing srcDir', () => {
|
|
43
38
|
// @ts-ignore Testing invalid input
|
|
44
|
-
|
|
45
|
-
expect(exitMock).toHaveBeenCalledWith(
|
|
46
|
-
expect(
|
|
39
|
+
validateProjectConfig({ name: 'hello' }, projectDir);
|
|
40
|
+
expect(exitMock).toHaveBeenCalledWith(EXIT_CODES.ERROR);
|
|
41
|
+
expect(logger.error).toHaveBeenCalledWith(expect.stringMatching(/.*missing required fields.*/));
|
|
47
42
|
});
|
|
48
43
|
describe('rejects configuration with srcDir outside project directory', () => {
|
|
49
44
|
it('for parent directory', () => {
|
|
50
|
-
|
|
51
|
-
expect(exitMock).toHaveBeenCalledWith(
|
|
52
|
-
expect(
|
|
45
|
+
validateProjectConfig({ name: 'hello', srcDir: '..', platformVersion: '' }, projectDir);
|
|
46
|
+
expect(exitMock).toHaveBeenCalledWith(EXIT_CODES.ERROR);
|
|
47
|
+
expect(logger.error).toHaveBeenCalledWith(expect.stringContaining('srcDir: ".."'));
|
|
53
48
|
});
|
|
54
49
|
it('for root directory', () => {
|
|
55
|
-
|
|
56
|
-
expect(exitMock).toHaveBeenCalledWith(
|
|
57
|
-
expect(
|
|
50
|
+
validateProjectConfig({ name: 'hello', srcDir: '/', platformVersion: '' }, projectDir);
|
|
51
|
+
expect(exitMock).toHaveBeenCalledWith(EXIT_CODES.ERROR);
|
|
52
|
+
expect(logger.error).toHaveBeenCalledWith(expect.stringContaining('srcDir: "/"'));
|
|
58
53
|
});
|
|
59
54
|
it('for complicated directory', () => {
|
|
60
55
|
const srcDir = './src/././../src/../../src';
|
|
61
|
-
|
|
62
|
-
expect(exitMock).toHaveBeenCalledWith(
|
|
63
|
-
expect(
|
|
56
|
+
validateProjectConfig({ name: 'hello', srcDir, platformVersion: '' }, projectDir);
|
|
57
|
+
expect(exitMock).toHaveBeenCalledWith(EXIT_CODES.ERROR);
|
|
58
|
+
expect(logger.error).toHaveBeenCalledWith(expect.stringContaining(`srcDir: "${srcDir}"`));
|
|
64
59
|
});
|
|
65
60
|
});
|
|
66
61
|
it('rejects configuration with srcDir that does not exist', () => {
|
|
67
|
-
|
|
68
|
-
expect(exitMock).toHaveBeenCalledWith(
|
|
69
|
-
expect(
|
|
62
|
+
validateProjectConfig({ name: 'hello', srcDir: 'foo', platformVersion: '' }, projectDir);
|
|
63
|
+
expect(exitMock).toHaveBeenCalledWith(EXIT_CODES.ERROR);
|
|
64
|
+
expect(logger.error).toHaveBeenCalledWith(expect.stringMatching(/.*could not be found in.*/));
|
|
70
65
|
});
|
|
71
66
|
describe('accepts configuration with valid srcDir', () => {
|
|
72
67
|
it('for current directory', () => {
|
|
73
|
-
|
|
68
|
+
validateProjectConfig({ name: 'hello', srcDir: '.', platformVersion: '' }, projectDir);
|
|
74
69
|
expect(exitMock).not.toHaveBeenCalled();
|
|
75
|
-
expect(
|
|
70
|
+
expect(logger.error).not.toHaveBeenCalled();
|
|
76
71
|
});
|
|
77
72
|
it('for relative directory', () => {
|
|
78
|
-
|
|
73
|
+
validateProjectConfig({ name: 'hello', srcDir: './src', platformVersion: '' }, projectDir);
|
|
79
74
|
expect(exitMock).not.toHaveBeenCalled();
|
|
80
|
-
expect(
|
|
75
|
+
expect(logger.error).not.toHaveBeenCalled();
|
|
81
76
|
});
|
|
82
77
|
it('for implied relative directory', () => {
|
|
83
|
-
|
|
78
|
+
validateProjectConfig({ name: 'hello', srcDir: 'src', platformVersion: '' }, projectDir);
|
|
84
79
|
expect(exitMock).not.toHaveBeenCalled();
|
|
85
|
-
expect(
|
|
80
|
+
expect(logger.error).not.toHaveBeenCalled();
|
|
86
81
|
});
|
|
87
82
|
});
|
|
88
83
|
});
|
|
@@ -1,50 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
-
};
|
|
38
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
const fs_1 = __importDefault(require("fs"));
|
|
40
|
-
const HSfs = __importStar(require("@hubspot/local-dev-lib/fs"));
|
|
41
|
-
const logger_1 = require("@hubspot/local-dev-lib/logger");
|
|
42
|
-
const structure_1 = require("../structure");
|
|
43
|
-
const Projects_1 = require("../../../types/Projects");
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import * as HSfs from '@hubspot/local-dev-lib/fs';
|
|
3
|
+
import { logger } from '@hubspot/local-dev-lib/logger';
|
|
4
|
+
import { getComponentTypeFromConfigFile, loadConfigFile, getAppCardConfigs, getIsLegacyApp, componentIsApp, findProjectComponents, getProjectComponentTypes, getComponentUid, componentIsPublicApp, } from '../structure.js';
|
|
5
|
+
import { ComponentTypes } from '../../../types/Projects.js';
|
|
44
6
|
vi.mock('fs');
|
|
45
7
|
vi.mock('@hubspot/local-dev-lib/fs');
|
|
46
8
|
vi.mock('@hubspot/local-dev-lib/logger');
|
|
47
|
-
const mockedReadFileSync =
|
|
9
|
+
const mockedReadFileSync = fs.readFileSync;
|
|
48
10
|
const mockedWalk = HSfs.walk;
|
|
49
11
|
const getMockPrivateAppConfig = (cards = []) => ({
|
|
50
12
|
name: 'test-app',
|
|
@@ -61,43 +23,43 @@ const getMockPrivateAppConfig = (cards = []) => ({
|
|
|
61
23
|
describe('lib/projects/structure', () => {
|
|
62
24
|
describe('getComponentTypeFromConfigFile()', () => {
|
|
63
25
|
it('returns correct type for public app config', () => {
|
|
64
|
-
expect(
|
|
26
|
+
expect(getComponentTypeFromConfigFile('public-app.json')).toBe(ComponentTypes.PublicApp);
|
|
65
27
|
});
|
|
66
28
|
it('returns correct type for private app config', () => {
|
|
67
|
-
expect(
|
|
29
|
+
expect(getComponentTypeFromConfigFile('app.json')).toBe(ComponentTypes.PrivateApp);
|
|
68
30
|
});
|
|
69
31
|
it('returns correct type for theme config', () => {
|
|
70
|
-
expect(
|
|
32
|
+
expect(getComponentTypeFromConfigFile('theme.json')).toBe(ComponentTypes.HublTheme);
|
|
71
33
|
});
|
|
72
34
|
it('returns null for unknown config file', () => {
|
|
73
|
-
expect(
|
|
35
|
+
expect(getComponentTypeFromConfigFile('unknown.json')).toBeNull();
|
|
74
36
|
});
|
|
75
37
|
});
|
|
76
38
|
describe('loadConfigFile()', () => {
|
|
77
39
|
it('returns parsed JSON when file exists', () => {
|
|
78
40
|
const mockConfig = { name: 'test-app' };
|
|
79
41
|
mockedReadFileSync.mockReturnValue(JSON.stringify(mockConfig));
|
|
80
|
-
expect(
|
|
42
|
+
expect(loadConfigFile('test/path/app.json')).toEqual(mockConfig);
|
|
81
43
|
});
|
|
82
44
|
it('returns null when file read fails', () => {
|
|
83
45
|
mockedReadFileSync.mockImplementation(() => {
|
|
84
46
|
throw new Error('File not found');
|
|
85
47
|
});
|
|
86
|
-
expect(
|
|
87
|
-
expect(
|
|
48
|
+
expect(loadConfigFile('nonexistent/path/app.json')).toBeNull();
|
|
49
|
+
expect(logger.debug).toHaveBeenCalled();
|
|
88
50
|
});
|
|
89
51
|
});
|
|
90
52
|
describe('getAppCardConfigs()', () => {
|
|
91
53
|
const mockAppPath = '/test/path';
|
|
92
54
|
it('returns empty array when no cards exist', () => {
|
|
93
55
|
const appConfig = getMockPrivateAppConfig();
|
|
94
|
-
expect(
|
|
56
|
+
expect(getAppCardConfigs(appConfig, mockAppPath)).toEqual([]);
|
|
95
57
|
});
|
|
96
58
|
it('returns array of card configs when valid cards exist', () => {
|
|
97
59
|
const mockCardConfig = { type: 'crm-card' };
|
|
98
60
|
mockedReadFileSync.mockReturnValue(JSON.stringify(mockCardConfig));
|
|
99
61
|
const appConfig = getMockPrivateAppConfig([{ file: 'card.json' }]);
|
|
100
|
-
expect(
|
|
62
|
+
expect(getAppCardConfigs(appConfig, mockAppPath)).toEqual([
|
|
101
63
|
mockCardConfig,
|
|
102
64
|
]);
|
|
103
65
|
});
|
|
@@ -108,11 +70,11 @@ describe('lib/projects/structure', () => {
|
|
|
108
70
|
const cardConfig = { type: 'crm-card' };
|
|
109
71
|
const appConfig = getMockPrivateAppConfig([{ file: 'card.json' }]);
|
|
110
72
|
mockedReadFileSync.mockReturnValue(JSON.stringify(cardConfig));
|
|
111
|
-
expect(
|
|
73
|
+
expect(getIsLegacyApp(appConfig, mockAppPath)).toBe(true);
|
|
112
74
|
});
|
|
113
75
|
it('returns false when the app has no cards', () => {
|
|
114
76
|
const appConfig = getMockPrivateAppConfig();
|
|
115
|
-
expect(
|
|
77
|
+
expect(getIsLegacyApp(appConfig, mockAppPath)).toBe(false);
|
|
116
78
|
});
|
|
117
79
|
it('returns false for non-legacy app', () => {
|
|
118
80
|
const cardConfig = {
|
|
@@ -120,20 +82,20 @@ describe('lib/projects/structure', () => {
|
|
|
120
82
|
};
|
|
121
83
|
const appConfig = getMockPrivateAppConfig([{ file: 'card.json' }]);
|
|
122
84
|
mockedReadFileSync.mockReturnValue(JSON.stringify(cardConfig));
|
|
123
|
-
expect(
|
|
85
|
+
expect(getIsLegacyApp(appConfig, mockAppPath)).toBe(false);
|
|
124
86
|
});
|
|
125
87
|
});
|
|
126
88
|
describe('findProjectComponents()', () => {
|
|
127
89
|
it('returns an empty array of components when no components are found', async () => {
|
|
128
90
|
mockedWalk.mockReturnValue([]);
|
|
129
|
-
const components = await
|
|
91
|
+
const components = await findProjectComponents('');
|
|
130
92
|
expect(components).toEqual([]);
|
|
131
93
|
});
|
|
132
94
|
it('returns an array of components when components are found', async () => {
|
|
133
95
|
const cardConfig = { type: 'crm-card' };
|
|
134
96
|
const appConfig = getMockPrivateAppConfig();
|
|
135
97
|
const component = {
|
|
136
|
-
type:
|
|
98
|
+
type: ComponentTypes.PrivateApp,
|
|
137
99
|
config: appConfig,
|
|
138
100
|
runnable: true,
|
|
139
101
|
path: '',
|
|
@@ -142,108 +104,108 @@ describe('lib/projects/structure', () => {
|
|
|
142
104
|
mockedReadFileSync
|
|
143
105
|
.mockReturnValueOnce(JSON.stringify(appConfig))
|
|
144
106
|
.mockReturnValueOnce(JSON.stringify(cardConfig));
|
|
145
|
-
const components = await
|
|
107
|
+
const components = await findProjectComponents('');
|
|
146
108
|
expect(components).toEqual([component]);
|
|
147
109
|
});
|
|
148
110
|
});
|
|
149
111
|
describe('getProjectComponentTypes()', () => {
|
|
150
112
|
it('returns the correct component types', () => {
|
|
151
113
|
const component = {
|
|
152
|
-
type:
|
|
114
|
+
type: ComponentTypes.PrivateApp,
|
|
153
115
|
config: getMockPrivateAppConfig(),
|
|
154
116
|
runnable: true,
|
|
155
117
|
path: 'test/path',
|
|
156
118
|
};
|
|
157
119
|
const components = [component];
|
|
158
|
-
expect(
|
|
159
|
-
[
|
|
120
|
+
expect(getProjectComponentTypes(components)).toEqual({
|
|
121
|
+
[ComponentTypes.PrivateApp]: true,
|
|
160
122
|
});
|
|
161
123
|
});
|
|
162
124
|
it('returns the correct component types for multiple components', () => {
|
|
163
125
|
const component1 = {
|
|
164
|
-
type:
|
|
126
|
+
type: ComponentTypes.PrivateApp,
|
|
165
127
|
config: getMockPrivateAppConfig(),
|
|
166
128
|
runnable: true,
|
|
167
129
|
path: 'test/path',
|
|
168
130
|
};
|
|
169
131
|
const component2 = {
|
|
170
|
-
type:
|
|
132
|
+
type: ComponentTypes.PublicApp,
|
|
171
133
|
// Config doesn't matter for this test so we can use a private app config
|
|
172
134
|
config: getMockPrivateAppConfig(),
|
|
173
135
|
runnable: true,
|
|
174
136
|
path: 'test/path',
|
|
175
137
|
};
|
|
176
138
|
const components = [component1, component2];
|
|
177
|
-
expect(
|
|
178
|
-
[
|
|
179
|
-
[
|
|
139
|
+
expect(getProjectComponentTypes(components)).toEqual({
|
|
140
|
+
[ComponentTypes.PrivateApp]: true,
|
|
141
|
+
[ComponentTypes.PublicApp]: true,
|
|
180
142
|
});
|
|
181
143
|
});
|
|
182
144
|
it('returns an empty object when no components are provided', () => {
|
|
183
145
|
const components = [];
|
|
184
|
-
expect(
|
|
146
|
+
expect(getProjectComponentTypes(components)).toEqual({});
|
|
185
147
|
});
|
|
186
148
|
});
|
|
187
149
|
describe('getComponentUid()', () => {
|
|
188
150
|
it('returns uid from the component config', () => {
|
|
189
151
|
const component = {
|
|
190
|
-
type:
|
|
152
|
+
type: ComponentTypes.PrivateApp,
|
|
191
153
|
config: getMockPrivateAppConfig(),
|
|
192
154
|
runnable: true,
|
|
193
155
|
path: 'test/path',
|
|
194
156
|
};
|
|
195
|
-
expect(
|
|
157
|
+
expect(getComponentUid(component)).toBe(component.config.uid);
|
|
196
158
|
});
|
|
197
159
|
it('returns null for null input', () => {
|
|
198
|
-
expect(
|
|
160
|
+
expect(getComponentUid(null)).toBeNull();
|
|
199
161
|
});
|
|
200
162
|
});
|
|
201
163
|
describe('componentIsApp()', () => {
|
|
202
164
|
it('returns true for public app component', () => {
|
|
203
165
|
const component = {
|
|
204
|
-
type:
|
|
166
|
+
type: ComponentTypes.PublicApp,
|
|
205
167
|
// Config doesn't matter for this test so we can use a private app config
|
|
206
168
|
config: getMockPrivateAppConfig(),
|
|
207
169
|
runnable: true,
|
|
208
170
|
path: 'test/path',
|
|
209
171
|
};
|
|
210
|
-
expect(
|
|
172
|
+
expect(componentIsApp(component)).toBe(true);
|
|
211
173
|
});
|
|
212
174
|
it('returns true for private app component', () => {
|
|
213
175
|
const component = {
|
|
214
|
-
type:
|
|
176
|
+
type: ComponentTypes.PrivateApp,
|
|
215
177
|
config: getMockPrivateAppConfig(),
|
|
216
178
|
runnable: true,
|
|
217
179
|
path: 'test/path',
|
|
218
180
|
};
|
|
219
|
-
expect(
|
|
181
|
+
expect(componentIsApp(component)).toBe(true);
|
|
220
182
|
});
|
|
221
183
|
it('returns false for null input', () => {
|
|
222
|
-
expect(
|
|
184
|
+
expect(componentIsApp(null)).toBe(false);
|
|
223
185
|
});
|
|
224
186
|
});
|
|
225
187
|
describe('componentIsPublicApp()', () => {
|
|
226
188
|
it('returns true for public app component', () => {
|
|
227
189
|
const component = {
|
|
228
|
-
type:
|
|
190
|
+
type: ComponentTypes.PublicApp,
|
|
229
191
|
// Config doesn't matter for this test so we can use a private app config
|
|
230
192
|
config: getMockPrivateAppConfig(),
|
|
231
193
|
runnable: true,
|
|
232
194
|
path: 'test/path',
|
|
233
195
|
};
|
|
234
|
-
expect(
|
|
196
|
+
expect(componentIsPublicApp(component)).toBe(true);
|
|
235
197
|
});
|
|
236
198
|
it('returns false for private app component', () => {
|
|
237
199
|
const component = {
|
|
238
|
-
type:
|
|
200
|
+
type: ComponentTypes.PrivateApp,
|
|
239
201
|
config: getMockPrivateAppConfig(),
|
|
240
202
|
runnable: true,
|
|
241
203
|
path: 'test/path',
|
|
242
204
|
};
|
|
243
|
-
expect(
|
|
205
|
+
expect(componentIsPublicApp(component)).toBe(false);
|
|
244
206
|
});
|
|
245
207
|
it('returns false for null input', () => {
|
|
246
|
-
expect(
|
|
208
|
+
expect(componentIsPublicApp(null)).toBe(false);
|
|
247
209
|
});
|
|
248
210
|
});
|
|
249
211
|
});
|
|
@@ -1,23 +1,21 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
const Projects_1 = require("../../../../types/Projects");
|
|
10
|
-
const en_1 = require("../../../../lang/en");
|
|
1
|
+
import { legacyAddComponent } from '../legacyAddComponent.js';
|
|
2
|
+
import { findProjectComponents } from '../../structure.js';
|
|
3
|
+
import { getProjectComponentListFromRepo } from '../../create/legacy.js';
|
|
4
|
+
import { projectAddPrompt } from '../../../prompts/projectAddPrompt.js';
|
|
5
|
+
import { logger } from '@hubspot/local-dev-lib/logger';
|
|
6
|
+
import { cloneGithubRepo } from '@hubspot/local-dev-lib/github';
|
|
7
|
+
import { ComponentTypes, } from '../../../../types/Projects.js';
|
|
8
|
+
import { commands } from '../../../../lang/en.js';
|
|
11
9
|
vi.mock('../../structure');
|
|
12
10
|
vi.mock('../../create/legacy');
|
|
13
11
|
vi.mock('../../../prompts/projectAddPrompt');
|
|
14
12
|
vi.mock('@hubspot/local-dev-lib/logger');
|
|
15
13
|
vi.mock('@hubspot/local-dev-lib/github');
|
|
16
|
-
const mockedFindProjectComponents = vi.mocked(
|
|
17
|
-
const mockedGetProjectComponentListFromRepo = vi.mocked(
|
|
18
|
-
const mockedProjectAddPrompt = vi.mocked(
|
|
19
|
-
const mockedLogger = vi.mocked(
|
|
20
|
-
const mockedCloneGithubRepo = vi.mocked(
|
|
14
|
+
const mockedFindProjectComponents = vi.mocked(findProjectComponents);
|
|
15
|
+
const mockedGetProjectComponentListFromRepo = vi.mocked(getProjectComponentListFromRepo);
|
|
16
|
+
const mockedProjectAddPrompt = vi.mocked(projectAddPrompt);
|
|
17
|
+
const mockedLogger = vi.mocked(logger);
|
|
18
|
+
const mockedCloneGithubRepo = vi.mocked(cloneGithubRepo);
|
|
21
19
|
describe('lib/projects/add/legacyAddComponent', () => {
|
|
22
20
|
const mockProjectConfig = {
|
|
23
21
|
name: 'test-project',
|
|
@@ -33,7 +31,7 @@ describe('lib/projects/add/legacyAddComponent', () => {
|
|
|
33
31
|
it('successfully adds a component to a project without public apps', async () => {
|
|
34
32
|
const mockComponents = [
|
|
35
33
|
{
|
|
36
|
-
type:
|
|
34
|
+
type: ComponentTypes.PrivateApp,
|
|
37
35
|
config: {
|
|
38
36
|
name: 'private-app',
|
|
39
37
|
description: '',
|
|
@@ -60,7 +58,7 @@ describe('lib/projects/add/legacyAddComponent', () => {
|
|
|
60
58
|
mockedGetProjectComponentListFromRepo.mockResolvedValue(mockComponentList);
|
|
61
59
|
mockedProjectAddPrompt.mockResolvedValue(mockPromptResponse);
|
|
62
60
|
mockedCloneGithubRepo.mockResolvedValue(true);
|
|
63
|
-
await
|
|
61
|
+
await legacyAddComponent(mockArgs, projectDir, mockProjectConfig);
|
|
64
62
|
expect(mockedFindProjectComponents).toHaveBeenCalledWith(projectDir);
|
|
65
63
|
expect(mockedGetProjectComponentListFromRepo).toHaveBeenCalledWith('v1');
|
|
66
64
|
expect(mockedProjectAddPrompt).toHaveBeenCalledWith(mockComponentList, mockArgs);
|
|
@@ -69,13 +67,13 @@ describe('lib/projects/add/legacyAddComponent', () => {
|
|
|
69
67
|
branch: 'main',
|
|
70
68
|
hideLogs: true,
|
|
71
69
|
}));
|
|
72
|
-
expect(mockedLogger.log).toHaveBeenCalledWith(
|
|
73
|
-
expect(mockedLogger.success).toHaveBeenCalledWith(
|
|
70
|
+
expect(mockedLogger.log).toHaveBeenCalledWith(commands.project.add.creatingComponent('test-project'));
|
|
71
|
+
expect(mockedLogger.success).toHaveBeenCalledWith(commands.project.add.success('new-component'));
|
|
74
72
|
});
|
|
75
73
|
it('throws an error when project contains a public app', async () => {
|
|
76
74
|
const mockComponents = [
|
|
77
75
|
{
|
|
78
|
-
type:
|
|
76
|
+
type: ComponentTypes.PublicApp,
|
|
79
77
|
config: {
|
|
80
78
|
name: 'public-app',
|
|
81
79
|
uid: '',
|
|
@@ -99,7 +97,7 @@ describe('lib/projects/add/legacyAddComponent', () => {
|
|
|
99
97
|
},
|
|
100
98
|
];
|
|
101
99
|
mockedFindProjectComponents.mockResolvedValue(mockComponents);
|
|
102
|
-
await expect(
|
|
100
|
+
await expect(legacyAddComponent(mockArgs, projectDir, mockProjectConfig)).rejects.toThrow(commands.project.add.error.projectContainsPublicApp);
|
|
103
101
|
expect(mockedGetProjectComponentListFromRepo).not.toHaveBeenCalled();
|
|
104
102
|
expect(mockedProjectAddPrompt).not.toHaveBeenCalled();
|
|
105
103
|
expect(mockedCloneGithubRepo).not.toHaveBeenCalled();
|
|
@@ -120,7 +118,7 @@ describe('lib/projects/add/legacyAddComponent', () => {
|
|
|
120
118
|
mockedGetProjectComponentListFromRepo.mockResolvedValue(mockComponentList);
|
|
121
119
|
mockedProjectAddPrompt.mockResolvedValue(mockPromptResponse);
|
|
122
120
|
mockedCloneGithubRepo.mockResolvedValue(true);
|
|
123
|
-
await
|
|
121
|
+
await legacyAddComponent(mockArgs, projectDir, mockProjectConfig);
|
|
124
122
|
expect(mockedGetProjectComponentListFromRepo).toHaveBeenCalledWith('v1');
|
|
125
123
|
expect(mockedProjectAddPrompt).toHaveBeenCalledWith(mockComponentList, mockArgs);
|
|
126
124
|
expect(mockedCloneGithubRepo).toHaveBeenCalled();
|
|
@@ -128,7 +126,7 @@ describe('lib/projects/add/legacyAddComponent', () => {
|
|
|
128
126
|
it('throws an error when component list is empty', async () => {
|
|
129
127
|
const mockComponents = [
|
|
130
128
|
{
|
|
131
|
-
type:
|
|
129
|
+
type: ComponentTypes.PrivateApp,
|
|
132
130
|
config: {
|
|
133
131
|
name: 'private-app',
|
|
134
132
|
description: '',
|
|
@@ -142,14 +140,14 @@ describe('lib/projects/add/legacyAddComponent', () => {
|
|
|
142
140
|
];
|
|
143
141
|
mockedFindProjectComponents.mockResolvedValue(mockComponents);
|
|
144
142
|
mockedGetProjectComponentListFromRepo.mockResolvedValue([]);
|
|
145
|
-
await expect(
|
|
143
|
+
await expect(legacyAddComponent(mockArgs, projectDir, mockProjectConfig)).rejects.toThrow(commands.project.add.error.failedToFetchComponentList);
|
|
146
144
|
expect(mockedProjectAddPrompt).not.toHaveBeenCalled();
|
|
147
145
|
expect(mockedCloneGithubRepo).not.toHaveBeenCalled();
|
|
148
146
|
});
|
|
149
147
|
it('throws an error when component list is null', async () => {
|
|
150
148
|
const mockComponents = [
|
|
151
149
|
{
|
|
152
|
-
type:
|
|
150
|
+
type: ComponentTypes.PrivateApp,
|
|
153
151
|
config: {
|
|
154
152
|
name: 'private-app',
|
|
155
153
|
description: '',
|
|
@@ -164,14 +162,14 @@ describe('lib/projects/add/legacyAddComponent', () => {
|
|
|
164
162
|
mockedFindProjectComponents.mockResolvedValue(mockComponents);
|
|
165
163
|
// @ts-expect-error Breaking stuff on purpose
|
|
166
164
|
mockedGetProjectComponentListFromRepo.mockResolvedValue(null);
|
|
167
|
-
await expect(
|
|
165
|
+
await expect(legacyAddComponent(mockArgs, projectDir, mockProjectConfig)).rejects.toThrow(commands.project.add.error.failedToFetchComponentList);
|
|
168
166
|
expect(mockedProjectAddPrompt).not.toHaveBeenCalled();
|
|
169
167
|
expect(mockedCloneGithubRepo).not.toHaveBeenCalled();
|
|
170
168
|
});
|
|
171
169
|
it('throws an error when cloning fails', async () => {
|
|
172
170
|
const mockComponents = [
|
|
173
171
|
{
|
|
174
|
-
type:
|
|
172
|
+
type: ComponentTypes.PrivateApp,
|
|
175
173
|
config: {
|
|
176
174
|
name: 'private-app',
|
|
177
175
|
description: '',
|
|
@@ -198,7 +196,7 @@ describe('lib/projects/add/legacyAddComponent', () => {
|
|
|
198
196
|
mockedGetProjectComponentListFromRepo.mockResolvedValue(mockComponentList);
|
|
199
197
|
mockedProjectAddPrompt.mockResolvedValue(mockPromptResponse);
|
|
200
198
|
mockedCloneGithubRepo.mockRejectedValue(new Error('Clone failed'));
|
|
201
|
-
await expect(
|
|
199
|
+
await expect(legacyAddComponent(mockArgs, projectDir, mockProjectConfig)).rejects.toThrow(commands.project.add.error.failedToDownloadComponent);
|
|
202
200
|
expect(mockedCloneGithubRepo).toHaveBeenCalled();
|
|
203
201
|
expect(mockedLogger.success).not.toHaveBeenCalled();
|
|
204
202
|
});
|