@hubspot/cli 7.7.21-experimental.0 → 7.7.21-experimental.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/api/__tests__/migrate.test.js +29 -27
- package/api/migrate.js +22 -14
- package/bin/cli.js +101 -92
- package/bin/hs +2 -2
- package/bin/hscms +2 -2
- package/bin/silenceErrors.js +2 -1
- package/commands/__tests__/account.test.js +34 -29
- package/commands/__tests__/auth.test.js +16 -11
- package/commands/__tests__/cms.test.js +20 -15
- package/commands/__tests__/config.test.js +19 -14
- package/commands/__tests__/create.test.js +15 -10
- package/commands/__tests__/customObject.test.js +19 -14
- package/commands/__tests__/doctor.test.js +48 -43
- package/commands/__tests__/feedback.test.js +45 -7
- package/commands/__tests__/fetch.test.js +28 -29
- package/commands/__tests__/filemanager.test.js +19 -14
- package/commands/__tests__/function.test.js +21 -16
- package/commands/__tests__/getStarted.test.js +50 -55
- package/commands/__tests__/hubdb.test.js +22 -17
- package/commands/__tests__/init.test.js +17 -12
- package/commands/__tests__/lint.test.js +18 -13
- package/commands/__tests__/list.test.js +23 -18
- package/commands/__tests__/logs.test.js +27 -28
- package/commands/__tests__/mcp.test.js +19 -14
- package/commands/__tests__/mv.test.js +52 -14
- package/commands/__tests__/open.test.js +51 -13
- package/commands/__tests__/project.test.js +49 -44
- package/commands/__tests__/remove.test.js +51 -13
- package/commands/__tests__/sandbox.test.js +19 -14
- package/commands/__tests__/secret.test.js +21 -16
- package/commands/__tests__/testAccount.test.js +21 -16
- package/commands/__tests__/theme.test.js +20 -15
- package/commands/account/__tests__/auth.test.js +16 -11
- package/commands/account/__tests__/clean.test.js +17 -12
- package/commands/account/__tests__/createOverride.test.js +15 -10
- package/commands/account/__tests__/info.test.js +16 -11
- package/commands/account/__tests__/list.test.js +16 -11
- package/commands/account/__tests__/remove.test.js +18 -13
- package/commands/account/__tests__/removeOverride.js +13 -8
- package/commands/account/__tests__/rename.test.js +20 -15
- package/commands/account/__tests__/use.test.js +15 -10
- package/commands/account/auth.d.ts +1 -1
- package/commands/account/auth.js +67 -65
- package/commands/account/clean.d.ts +1 -1
- package/commands/account/clean.js +60 -55
- package/commands/account/createOverride.d.ts +1 -1
- package/commands/account/createOverride.js +57 -52
- package/commands/account/info.d.ts +1 -1
- package/commands/account/info.js +35 -33
- package/commands/account/list.d.ts +1 -1
- package/commands/account/list.js +45 -43
- package/commands/account/remove.d.ts +1 -1
- package/commands/account/remove.js +42 -37
- package/commands/account/removeOverride.d.ts +1 -1
- package/commands/account/removeOverride.js +43 -38
- package/commands/account/rename.d.ts +1 -1
- package/commands/account/rename.js +20 -18
- package/commands/account/use.d.ts +1 -1
- package/commands/account/use.js +31 -29
- package/commands/account.d.ts +1 -1
- package/commands/account.js +28 -23
- package/commands/app/__tests__/install.test.js +52 -0
- package/commands/app/__tests__/migrate.test.js +34 -29
- package/commands/app/install.d.ts +8 -0
- package/commands/app/install.js +127 -0
- package/commands/app/migrate.d.ts +2 -2
- package/commands/app/migrate.js +43 -40
- package/commands/app/secret/__tests__/add.test.js +11 -6
- package/commands/app/secret/__tests__/delete.test.js +11 -6
- package/commands/app/secret/__tests__/list.test.js +11 -6
- package/commands/app/secret/__tests__/update.test.js +11 -6
- package/commands/app/secret/add.d.ts +1 -1
- package/commands/app/secret/add.js +30 -28
- package/commands/app/secret/delete.d.ts +1 -1
- package/commands/app/secret/delete.js +36 -34
- package/commands/app/secret/list.d.ts +1 -1
- package/commands/app/secret/list.js +27 -25
- package/commands/app/secret/update.d.ts +1 -1
- package/commands/app/secret/update.js +34 -32
- package/commands/app/secret.d.ts +1 -1
- package/commands/app/secret.js +17 -12
- package/commands/app.d.ts +1 -1
- package/commands/app.js +16 -6
- package/commands/auth.d.ts +1 -1
- package/commands/auth.js +72 -70
- package/commands/cms/convertFields.d.ts +1 -1
- package/commands/cms/convertFields.js +39 -34
- package/commands/cms/getReactModule.d.ts +1 -1
- package/commands/cms/getReactModule.js +37 -32
- package/commands/cms/lighthouseScore.d.ts +1 -1
- package/commands/cms/lighthouseScore.js +72 -67
- package/commands/cms.d.ts +1 -1
- package/commands/cms.js +16 -11
- package/commands/completion.d.ts +1 -1
- package/commands/completion.js +15 -10
- package/commands/config/migrate.d.ts +1 -1
- package/commands/config/migrate.js +32 -27
- package/commands/config/set.d.ts +1 -1
- package/commands/config/set.js +25 -23
- package/commands/config.d.ts +1 -1
- package/commands/config.js +13 -8
- package/commands/create/api-sample.d.ts +1 -1
- package/commands/create/api-sample.js +33 -28
- package/commands/create/app.d.ts +1 -1
- package/commands/create/app.js +5 -3
- package/commands/create/function.d.ts +1 -1
- package/commands/create/function.js +11 -9
- package/commands/create/index.d.ts +1 -1
- package/commands/create/index.js +24 -19
- package/commands/create/module.d.ts +1 -1
- package/commands/create/module.js +14 -12
- package/commands/create/react-app.d.ts +1 -1
- package/commands/create/react-app.js +5 -3
- package/commands/create/template.d.ts +1 -1
- package/commands/create/template.js +14 -12
- package/commands/create/vue-app.d.ts +1 -1
- package/commands/create/vue-app.js +5 -3
- package/commands/create/webpack-serverless.d.ts +1 -1
- package/commands/create/webpack-serverless.js +5 -3
- package/commands/create/website-theme.d.ts +1 -1
- package/commands/create/website-theme.js +7 -5
- package/commands/create.d.ts +2 -2
- package/commands/create.js +35 -30
- package/commands/customObject/__tests__/create.test.js +18 -13
- package/commands/customObject/__tests__/schema.test.js +23 -18
- package/commands/customObject/create.d.ts +1 -1
- package/commands/customObject/create.js +30 -28
- package/commands/customObject/schema/__tests__/create.test.js +18 -13
- package/commands/customObject/schema/__tests__/delete.test.js +18 -13
- package/commands/customObject/schema/__tests__/fetch-all.test.js +18 -13
- package/commands/customObject/schema/__tests__/fetch.test.js +18 -13
- package/commands/customObject/schema/__tests__/list.test.js +18 -13
- package/commands/customObject/schema/__tests__/update.test.js +18 -13
- package/commands/customObject/schema/create.d.ts +1 -1
- package/commands/customObject/schema/create.js +30 -28
- package/commands/customObject/schema/delete.d.ts +1 -1
- package/commands/customObject/schema/delete.js +26 -24
- package/commands/customObject/schema/fetch-all.d.ts +1 -1
- package/commands/customObject/schema/fetch-all.js +24 -22
- package/commands/customObject/schema/fetch.d.ts +1 -1
- package/commands/customObject/schema/fetch.js +26 -24
- package/commands/customObject/schema/list.d.ts +1 -1
- package/commands/customObject/schema/list.js +15 -13
- package/commands/customObject/schema/update.d.ts +1 -1
- package/commands/customObject/schema/update.js +34 -32
- package/commands/customObject/schema.d.ts +1 -1
- package/commands/customObject/schema.js +22 -17
- package/commands/customObject.d.ts +1 -1
- package/commands/customObject.js +18 -13
- package/commands/doctor.d.ts +1 -1
- package/commands/doctor.js +33 -28
- package/commands/feedback.d.ts +1 -1
- package/commands/feedback.js +24 -19
- package/commands/fetch.d.ts +1 -1
- package/commands/fetch.js +30 -28
- package/commands/filemanager/__tests__/fetch.test.js +22 -17
- package/commands/filemanager/__tests__/upload.test.js +20 -15
- package/commands/filemanager/fetch.d.ts +1 -1
- package/commands/filemanager/fetch.js +25 -23
- package/commands/filemanager/upload.d.ts +1 -1
- package/commands/filemanager/upload.js +44 -39
- package/commands/filemanager.d.ts +1 -1
- package/commands/filemanager.js +13 -8
- package/commands/function/deploy.d.ts +1 -1
- package/commands/function/deploy.js +40 -35
- package/commands/function/list.d.ts +1 -1
- package/commands/function/list.js +29 -24
- package/commands/function/server.d.ts +1 -1
- package/commands/function/server.js +17 -15
- package/commands/function.d.ts +1 -1
- package/commands/function.js +18 -12
- package/commands/getStarted.d.ts +1 -1
- package/commands/getStarted.js +131 -140
- package/commands/hubdb/__tests__/clear.test.js +18 -13
- package/commands/hubdb/__tests__/create.test.js +18 -13
- package/commands/hubdb/__tests__/delete.test.js +18 -13
- package/commands/hubdb/__tests__/fetch.test.js +18 -13
- package/commands/hubdb/__tests__/list.test.js +28 -23
- package/commands/hubdb/clear.d.ts +1 -1
- package/commands/hubdb/clear.js +22 -20
- package/commands/hubdb/create.d.ts +1 -1
- package/commands/hubdb/create.js +35 -30
- package/commands/hubdb/delete.d.ts +1 -1
- package/commands/hubdb/delete.js +26 -24
- package/commands/hubdb/fetch.d.ts +1 -1
- package/commands/hubdb/fetch.js +19 -17
- package/commands/hubdb/list.d.ts +1 -1
- package/commands/hubdb/list.js +35 -33
- package/commands/hubdb.d.ts +1 -1
- package/commands/hubdb.js +24 -18
- package/commands/init.d.ts +1 -1
- package/commands/init.js +88 -83
- package/commands/lint.d.ts +1 -1
- package/commands/lint.js +26 -24
- package/commands/list.d.ts +1 -1
- package/commands/list.js +37 -32
- package/commands/logs.d.ts +1 -1
- package/commands/logs.js +37 -35
- package/commands/mcp/__tests__/setup.test.js +12 -7
- package/commands/mcp/__tests__/start.test.js +12 -7
- package/commands/mcp/setup.d.ts +1 -1
- package/commands/mcp/setup.js +20 -17
- package/commands/mcp/start.d.ts +5 -2
- package/commands/mcp/start.js +41 -31
- package/commands/mcp.d.ts +1 -1
- package/commands/mcp.js +12 -7
- package/commands/module/marketplace-validate.d.ts +1 -1
- package/commands/module/marketplace-validate.js +26 -21
- package/commands/module.d.ts +1 -1
- package/commands/module.js +13 -7
- package/commands/mv.d.ts +1 -1
- package/commands/mv.js +22 -20
- package/commands/open.d.ts +1 -1
- package/commands/open.js +21 -19
- package/commands/project/__tests__/add.test.js +15 -10
- package/commands/project/__tests__/create.test.js +19 -14
- package/commands/project/__tests__/deploy.test.js +143 -103
- package/commands/project/__tests__/devUnifiedFlow.test.js +157 -148
- package/commands/project/__tests__/download.test.js +19 -14
- package/commands/project/__tests__/installDeps.test.js +70 -32
- package/commands/project/__tests__/listBuilds.test.js +19 -14
- package/commands/project/__tests__/logs.test.js +94 -56
- package/commands/project/__tests__/migrate.test.js +30 -25
- package/commands/project/__tests__/migrateApp.test.js +22 -17
- package/commands/project/__tests__/open.test.js +21 -16
- package/commands/project/__tests__/profile.test.js +19 -14
- package/commands/project/__tests__/upload.test.js +23 -18
- package/commands/project/__tests__/watch.test.js +19 -14
- package/commands/project/add.d.ts +1 -1
- package/commands/project/add.js +36 -34
- package/commands/project/cloneApp.d.ts +1 -1
- package/commands/project/cloneApp.js +72 -67
- package/commands/project/create.d.ts +2 -2
- package/commands/project/create.js +68 -63
- package/commands/project/deploy.d.ts +3 -2
- package/commands/project/deploy.js +102 -91
- package/commands/project/dev/deprecatedFlow.d.ts +2 -2
- package/commands/project/dev/deprecatedFlow.js +58 -52
- package/commands/project/dev/index.d.ts +1 -1
- package/commands/project/dev/index.js +47 -44
- package/commands/project/dev/unifiedFlow.d.ts +3 -3
- package/commands/project/dev/unifiedFlow.js +74 -67
- package/commands/project/download.d.ts +1 -1
- package/commands/project/download.js +40 -35
- package/commands/project/installDeps.d.ts +1 -1
- package/commands/project/installDeps.js +34 -29
- package/commands/project/listBuilds.d.ts +1 -1
- package/commands/project/listBuilds.js +45 -40
- package/commands/project/logs.d.ts +1 -1
- package/commands/project/logs.js +54 -52
- package/commands/project/migrate.d.ts +1 -1
- package/commands/project/migrate.js +26 -24
- package/commands/project/migrateApp.d.ts +2 -2
- package/commands/project/migrateApp.js +20 -18
- package/commands/project/open.d.ts +1 -1
- package/commands/project/open.js +30 -25
- package/commands/project/profile/add.d.ts +1 -1
- package/commands/project/profile/add.js +73 -68
- package/commands/project/profile/delete.d.ts +1 -1
- package/commands/project/profile/delete.js +56 -51
- package/commands/project/profile.d.ts +1 -1
- package/commands/project/profile.js +14 -9
- package/commands/project/upload.d.ts +1 -1
- package/commands/project/upload.js +55 -50
- package/commands/project/validate.d.ts +1 -1
- package/commands/project/validate.js +40 -35
- package/commands/project/watch.d.ts +1 -1
- package/commands/project/watch.js +61 -59
- package/commands/project.d.ts +1 -1
- package/commands/project.js +43 -38
- package/commands/remove.d.ts +1 -1
- package/commands/remove.js +17 -15
- package/commands/sandbox/__tests__/create.test.js +20 -15
- package/commands/sandbox/__tests__/delete.test.js +20 -15
- package/commands/sandbox/create.d.ts +1 -1
- package/commands/sandbox/create.js +69 -67
- package/commands/sandbox/delete.d.ts +1 -1
- package/commands/sandbox/delete.js +96 -94
- package/commands/sandbox.d.ts +1 -1
- package/commands/sandbox.js +14 -9
- package/commands/secret/__tests__/addSecret.test.js +18 -13
- package/commands/secret/__tests__/deleteSecret.test.js +18 -13
- package/commands/secret/__tests__/listSecret.test.js +18 -13
- package/commands/secret/__tests__/updateSecret.test.js +18 -13
- package/commands/secret/addSecret.d.ts +1 -1
- package/commands/secret/addSecret.js +28 -26
- package/commands/secret/deleteSecret.d.ts +1 -1
- package/commands/secret/deleteSecret.js +29 -27
- package/commands/secret/listSecret.d.ts +1 -1
- package/commands/secret/listSecret.js +21 -19
- package/commands/secret/updateSecret.d.ts +1 -1
- package/commands/secret/updateSecret.js +27 -25
- package/commands/secret.d.ts +1 -1
- package/commands/secret.js +18 -13
- package/commands/testAccount/__tests__/create.test.js +22 -17
- package/commands/testAccount/__tests__/createConfig.test.js +11 -9
- package/commands/testAccount/__tests__/delete.test.js +20 -15
- package/commands/testAccount/create.d.ts +1 -1
- package/commands/testAccount/create.js +57 -62
- package/commands/testAccount/createConfig.d.ts +1 -3
- package/commands/testAccount/createConfig.js +47 -43
- package/commands/testAccount/delete.d.ts +1 -1
- package/commands/testAccount/delete.js +19 -17
- package/commands/testAccount.d.ts +1 -1
- package/commands/testAccount.js +15 -10
- package/commands/theme/__tests__/generate-selectors.test.js +12 -7
- package/commands/theme/__tests__/marketplace-validate.test.js +19 -14
- package/commands/theme/__tests__/preview.test.js +17 -12
- package/commands/theme/generate-selectors.d.ts +1 -1
- package/commands/theme/generate-selectors.js +28 -23
- package/commands/theme/marketplace-validate.d.ts +1 -1
- package/commands/theme/marketplace-validate.js +24 -19
- package/commands/theme/preview.d.ts +1 -1
- package/commands/theme/preview.js +65 -60
- package/commands/theme.d.ts +1 -1
- package/commands/theme.js +16 -11
- package/commands/upload.d.ts +1 -1
- package/commands/upload.js +82 -77
- package/commands/watch.d.ts +1 -1
- package/commands/watch.js +51 -45
- package/lang/en.d.ts +62 -23
- package/lang/en.js +434 -389
- package/lang/en.lyaml +0 -26
- package/lib/__tests__/accountTypes.test.js +22 -20
- package/lib/__tests__/buildAccount.test.js +90 -27
- package/lib/__tests__/commonOpts.test.js +22 -20
- package/lib/__tests__/dependencyManagement.test.js +51 -46
- package/lib/__tests__/developerTestAccounts.test.js +62 -27
- package/lib/__tests__/hasFeature.test.js +8 -6
- package/lib/__tests__/npm.test.js +20 -15
- package/lib/__tests__/oauth.test.js +28 -23
- package/lib/__tests__/parsing.test.js +20 -18
- package/lib/__tests__/polling.test.js +26 -24
- package/lib/__tests__/process.test.js +19 -14
- package/lib/__tests__/projectProfiles.test.js +39 -34
- package/lib/__tests__/sandboxSync.test.js +35 -30
- package/lib/__tests__/sandboxes.test.js +31 -29
- package/lib/__tests__/serverlessLogs.test.js +13 -8
- package/lib/__tests__/usageTracking.test.js +42 -47
- package/lib/__tests__/validation.test.js +20 -18
- package/lib/__tests__/yargsUtils.test.js +41 -6
- package/lib/accountTypes.js +34 -24
- package/lib/app/__tests__/migrate.test.js +99 -94
- package/lib/app/__tests__/migrate_legacy.test.js +31 -29
- package/lib/app/migrate.d.ts +3 -3
- package/lib/app/migrate.js +145 -127
- package/lib/app/migrate_legacy.d.ts +1 -1
- package/lib/app/migrate_legacy.js +78 -72
- package/lib/app/urls.js +9 -5
- package/lib/buildAccount.d.ts +8 -2
- package/lib/buildAccount.js +119 -61
- package/lib/commonOpts.d.ts +1 -1
- package/lib/commonOpts.js +59 -42
- package/lib/configMigrate.js +38 -34
- package/lib/configOptions.js +40 -34
- package/lib/constants.js +34 -31
- package/lib/customObject.js +6 -2
- package/lib/dependencyManagement.js +45 -37
- package/lib/developerTestAccounts.d.ts +1 -1
- package/lib/developerTestAccounts.js +39 -34
- package/lib/doctor/Diagnosis.d.ts +1 -1
- package/lib/doctor/Diagnosis.js +29 -25
- package/lib/doctor/DiagnosticInfoBuilder.d.ts +1 -1
- package/lib/doctor/DiagnosticInfoBuilder.js +37 -30
- package/lib/doctor/Doctor.d.ts +1 -1
- package/lib/doctor/Doctor.js +101 -94
- package/lib/doctor/__tests__/Diagnosis.test.js +14 -9
- package/lib/doctor/__tests__/DiagnosticInfoBuilder.test.js +34 -29
- package/lib/doctor/__tests__/Doctor.test.js +26 -24
- package/lib/enums/exitCodes.js +4 -1
- package/lib/errorHandlers/index.js +41 -32
- package/lib/errorHandlers/suppressError.d.ts +1 -1
- package/lib/errorHandlers/suppressError.js +31 -28
- package/lib/filesystem.js +15 -8
- package/lib/generateSelectors.js +29 -18
- package/lib/hasFeature.d.ts +1 -1
- package/lib/hasFeature.js +6 -3
- package/lib/interpolation.js +18 -11
- package/lib/lang.d.ts +1 -1
- package/lib/lang.js +27 -22
- package/lib/links.js +24 -16
- package/lib/marketplaceValidate.js +39 -29
- package/lib/mcp/setup.js +105 -72
- package/lib/middleware/__test__/configMiddleware.test.js +55 -20
- package/lib/middleware/__test__/gitMiddleware.test.js +42 -7
- package/lib/middleware/__test__/notificationsMiddleware.test.js +4 -2
- package/lib/middleware/__test__/requestMiddleware.test.js +11 -6
- package/lib/middleware/__test__/utils.test.js +11 -9
- package/lib/middleware/__test__/yargsChecksMiddleware.test.js +44 -9
- package/lib/middleware/autoUpdateMiddleware.js +40 -33
- package/lib/middleware/configMiddleware.js +42 -36
- package/lib/middleware/fireAlarmMiddleware.js +18 -12
- package/lib/middleware/gitMiddleware.js +8 -5
- package/lib/middleware/notificationsMiddleware.js +23 -16
- package/lib/middleware/requestMiddleware.js +10 -4
- package/lib/middleware/utils.js +4 -1
- package/lib/middleware/yargsChecksMiddleware.js +13 -10
- package/lib/npm.js +23 -14
- package/lib/oauth.js +35 -29
- package/lib/parsing.js +6 -3
- package/lib/polling.js +15 -11
- package/lib/process.js +19 -11
- package/lib/projectProfiles.d.ts +2 -2
- package/lib/projectProfiles.js +42 -32
- package/lib/projects/ProjectLogsManager.js +21 -18
- package/lib/projects/__tests__/AppDevModeInterface.test.js +145 -140
- package/lib/projects/__tests__/LocalDevProcess.test.js +73 -68
- package/lib/projects/__tests__/LocalDevWebsocketServer.test.js +37 -32
- package/lib/projects/__tests__/ProjectLogsManager.test.js +58 -56
- package/lib/projects/__tests__/buildAndDeploy.test.js +9 -7
- package/lib/projects/__tests__/components.test.js +14 -9
- package/lib/projects/__tests__/projects.test.js +40 -35
- package/lib/projects/__tests__/structure.test.js +81 -43
- package/lib/projects/add/__tests__/legacyAddComponent.test.js +28 -26
- package/lib/projects/add/__tests__/v3AddComponent.test.js +30 -25
- package/lib/projects/add/legacyAddComponent.d.ts +1 -1
- package/lib/projects/add/legacyAddComponent.js +30 -24
- package/lib/projects/add/v3AddComponent.d.ts +1 -1
- package/lib/projects/add/v3AddComponent.js +42 -36
- package/lib/projects/buildAndDeploy.d.ts +1 -1
- package/lib/projects/buildAndDeploy.js +97 -88
- package/lib/projects/components.js +25 -19
- package/lib/projects/config.d.ts +1 -1
- package/lib/projects/config.js +41 -32
- package/lib/projects/create/__tests__/legacy.test.js +57 -22
- package/lib/projects/create/__tests__/v3.test.js +7 -5
- package/lib/projects/create/index.d.ts +3 -3
- package/lib/projects/create/index.js +22 -19
- package/lib/projects/create/legacy.d.ts +1 -1
- package/lib/projects/create/legacy.js +31 -25
- package/lib/projects/create/v3.d.ts +3 -3
- package/lib/projects/create/v3.js +59 -49
- package/lib/projects/ensureProjectExists.js +37 -31
- package/lib/projects/localDev/AppDevModeInterface.d.ts +3 -3
- package/lib/projects/localDev/AppDevModeInterface.js +60 -58
- package/lib/projects/localDev/DevServerManager.d.ts +1 -1
- package/lib/projects/localDev/DevServerManager.js +24 -24
- package/lib/projects/localDev/DevServerManagerV2.d.ts +2 -2
- package/lib/projects/localDev/DevServerManagerV2.js +20 -17
- package/lib/projects/localDev/LocalDevLogger.d.ts +1 -1
- package/lib/projects/localDev/LocalDevLogger.js +64 -59
- package/lib/projects/localDev/LocalDevManager.d.ts +1 -1
- package/lib/projects/localDev/LocalDevManager.js +111 -106
- package/lib/projects/localDev/LocalDevProcess.d.ts +4 -4
- package/lib/projects/localDev/LocalDevProcess.js +30 -25
- package/lib/projects/localDev/LocalDevState.d.ts +3 -3
- package/lib/projects/localDev/LocalDevState.js +5 -3
- package/lib/projects/localDev/LocalDevWatcher.d.ts +1 -1
- package/lib/projects/localDev/LocalDevWatcher.js +11 -6
- package/lib/projects/localDev/LocalDevWebsocketServer.d.ts +1 -1
- package/lib/projects/localDev/LocalDevWebsocketServer.js +27 -25
- package/lib/projects/localDev/helpers.d.ts +4 -4
- package/lib/projects/localDev/helpers.js +174 -156
- package/lib/projects/structure.d.ts +4 -4
- package/lib/projects/structure.js +78 -32
- package/lib/projects/ui.js +13 -10
- package/lib/projects/upload.d.ts +3 -2
- package/lib/projects/upload.js +65 -55
- package/lib/projects/urls.js +24 -14
- package/lib/projects/watch.d.ts +1 -1
- package/lib/projects/watch.js +54 -48
- package/lib/prompts/__tests__/downloadProjectPrompt.test.js +11 -9
- package/lib/prompts/__tests__/projectsLogsPrompt.test.js +16 -11
- package/lib/prompts/accountNamePrompt.d.ts +1 -1
- package/lib/prompts/accountNamePrompt.js +31 -26
- package/lib/prompts/accountsPrompt.js +15 -12
- package/lib/prompts/cmsFieldPrompt.js +19 -13
- package/lib/prompts/createApiSamplePrompt.d.ts +1 -1
- package/lib/prompts/createApiSamplePrompt.js +12 -9
- package/lib/prompts/createDeveloperTestAccountConfigPrompt.d.ts +11 -10
- package/lib/prompts/createDeveloperTestAccountConfigPrompt.js +88 -43
- package/lib/prompts/createFunctionPrompt.js +20 -17
- package/lib/prompts/createModulePrompt.js +15 -12
- package/lib/prompts/createTemplatePrompt.js +8 -5
- package/lib/prompts/downloadProjectPrompt.js +20 -17
- package/lib/prompts/installAppPrompt.js +26 -19
- package/lib/prompts/personalAccessKeyPrompt.d.ts +2 -2
- package/lib/prompts/personalAccessKeyPrompt.js +47 -40
- package/lib/prompts/previewPrompt.js +22 -15
- package/lib/prompts/projectAddPrompt.d.ts +1 -1
- package/lib/prompts/projectAddPrompt.js +18 -14
- package/lib/prompts/projectDevTargetAccountPrompt.d.ts +1 -1
- package/lib/prompts/projectDevTargetAccountPrompt.js +54 -48
- package/lib/prompts/projectNameAndDestPrompt.d.ts +1 -1
- package/lib/prompts/projectNameAndDestPrompt.js +29 -22
- package/lib/prompts/projectNamePrompt.js +14 -11
- package/lib/prompts/projectsLogsPrompt.js +8 -5
- package/lib/prompts/promptUtils.d.ts +1 -1
- package/lib/prompts/promptUtils.js +87 -70
- package/lib/prompts/sandboxesPrompt.d.ts +1 -1
- package/lib/prompts/sandboxesPrompt.js +30 -26
- package/lib/prompts/secretPrompt.js +15 -10
- package/lib/prompts/selectAppPrompt.js +14 -11
- package/lib/prompts/selectHubDBTablePrompt.js +30 -24
- package/lib/prompts/selectProjectTemplatePrompt.d.ts +1 -1
- package/lib/prompts/selectProjectTemplatePrompt.js +13 -10
- package/lib/prompts/selectPublicAppForMigrationPrompt.js +25 -22
- package/lib/prompts/setAsDefaultAccountPrompt.js +16 -13
- package/lib/prompts/uploadPrompt.js +17 -11
- package/lib/sandboxSync.d.ts +1 -1
- package/lib/sandboxSync.js +65 -58
- package/lib/sandboxes.d.ts +1 -1
- package/lib/sandboxes.js +76 -68
- package/lib/schema.js +23 -12
- package/lib/serverlessLogs.js +52 -45
- package/lib/testUtils.js +8 -4
- package/lib/ui/SpinniesManager.d.ts +1 -1
- package/lib/ui/SpinniesManager.js +34 -29
- package/lib/ui/boxen.js +14 -11
- package/lib/ui/git.js +20 -14
- package/lib/ui/index.js +74 -56
- package/lib/ui/logger.js +13 -10
- package/lib/ui/serverlessFunctionLogs.js +20 -14
- package/lib/ui/spinniesUtils.js +39 -24
- package/lib/ui/supportHyperlinks.js +6 -3
- package/lib/ui/supportsColor.js +17 -11
- package/lib/ui/table.js +13 -6
- package/lib/upload.js +21 -15
- package/lib/usageTracking.d.ts +11 -0
- package/lib/usageTracking.js +95 -95
- package/lib/utils/hasFlag.js +8 -2
- package/lib/validation.js +87 -48
- package/lib/yargsUtils.d.ts +1 -1
- package/lib/yargsUtils.js +16 -13
- package/mcp-server/server.js +8 -6
- package/mcp-server/tools/index.js +16 -13
- package/mcp-server/tools/project/AddFeatureToProject.d.ts +1 -1
- package/mcp-server/tools/project/AddFeatureToProject.js +41 -34
- package/mcp-server/tools/project/CreateProjectTool.d.ts +3 -3
- package/mcp-server/tools/project/CreateProjectTool.js +52 -45
- package/mcp-server/tools/project/DeployProject.d.ts +1 -1
- package/mcp-server/tools/project/DeployProject.js +24 -17
- package/mcp-server/tools/project/GuidedWalkthroughTool.d.ts +1 -1
- package/mcp-server/tools/project/GuidedWalkthroughTool.js +27 -20
- package/mcp-server/tools/project/UploadProjectTools.d.ts +1 -1
- package/mcp-server/tools/project/UploadProjectTools.js +21 -11
- package/mcp-server/tools/project/ValidateProjectTool.d.ts +1 -1
- package/mcp-server/tools/project/ValidateProjectTool.js +19 -12
- package/mcp-server/tools/project/__tests__/AddFeatureToProject.test.js +15 -12
- package/mcp-server/tools/project/__tests__/CreateProjectTool.test.js +16 -13
- package/mcp-server/tools/project/__tests__/DeployProject.test.js +9 -6
- package/mcp-server/tools/project/__tests__/GuidedWalkthroughTool.test.js +7 -4
- package/mcp-server/tools/project/__tests__/UploadProjectTools.test.js +7 -4
- package/mcp-server/tools/project/__tests__/ValidateProjectTool.test.js +7 -4
- package/mcp-server/tools/project/constants.js +9 -3
- package/mcp-server/types.js +5 -1
- package/mcp-server/utils/__tests__/command.test.js +11 -9
- package/mcp-server/utils/__tests__/project.test.js +26 -18
- package/mcp-server/utils/command.d.ts +1 -1
- package/mcp-server/utils/command.js +11 -4
- package/mcp-server/utils/content.d.ts +1 -1
- package/mcp-server/utils/content.js +6 -2
- package/mcp-server/utils/project.js +17 -8
- package/mcp-server/utils/toolUsageTracking.d.ts +1 -0
- package/mcp-server/utils/toolUsageTracking.js +25 -0
- package/package.json +13 -17
- package/types/{cms.d.ts → Cms.d.ts} +1 -1
- package/types/Cms.js +2 -0
- package/types/LocalDev.d.ts +4 -4
- package/types/LocalDev.js +2 -1
- package/types/ProjectComponents.d.ts +2 -2
- package/types/ProjectComponents.js +2 -1
- package/types/Projects.d.ts +1 -1
- package/types/Projects.js +5 -2
- package/types/Prompts.js +2 -1
- package/types/Sandboxes.js +2 -0
- package/types/Yargs.js +2 -1
- package/types/sandboxes.js +0 -1
- /package/{types/cms.js → commands/app/__tests__/install.test.d.ts} +0 -0
- /package/types/{sandboxes.d.ts → Sandboxes.d.ts} +0 -0
|
@@ -1,27 +1,62 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
const config_1 = require("@hubspot/local-dev-lib/config");
|
|
37
|
+
const logger_1 = require("@hubspot/local-dev-lib/logger");
|
|
38
|
+
const config_2 = require("@hubspot/local-dev-lib/constants/config");
|
|
39
|
+
const developerTestAccounts_1 = require("@hubspot/local-dev-lib/api/developerTestAccounts");
|
|
40
|
+
const testUtils_1 = require("../testUtils");
|
|
41
|
+
const errorHandlers = __importStar(require("../errorHandlers"));
|
|
42
|
+
const developerTestAccounts_2 = require("../developerTestAccounts");
|
|
8
43
|
vi.mock('@hubspot/local-dev-lib/config');
|
|
9
44
|
vi.mock('@hubspot/local-dev-lib/logger');
|
|
10
45
|
vi.mock('@hubspot/local-dev-lib/api/developerTestAccounts');
|
|
11
46
|
vi.mock('../errorHandlers');
|
|
12
|
-
const mockedGetAccountId = getAccountId;
|
|
13
|
-
const mockedGetConfigAccounts = getConfigAccounts;
|
|
14
|
-
const mockedFetchDeveloperTestAccounts = fetchDeveloperTestAccounts;
|
|
47
|
+
const mockedGetAccountId = config_1.getAccountId;
|
|
48
|
+
const mockedGetConfigAccounts = config_1.getConfigAccounts;
|
|
49
|
+
const mockedFetchDeveloperTestAccounts = developerTestAccounts_1.fetchDeveloperTestAccounts;
|
|
15
50
|
const APP_DEVELOPER_ACCOUNT_1 = {
|
|
16
51
|
name: 'app-developer-1',
|
|
17
52
|
accountId: 123,
|
|
18
|
-
accountType: HUBSPOT_ACCOUNT_TYPES.APP_DEVELOPER,
|
|
53
|
+
accountType: config_2.HUBSPOT_ACCOUNT_TYPES.APP_DEVELOPER,
|
|
19
54
|
env: 'prod',
|
|
20
55
|
};
|
|
21
56
|
const APP_DEVELOPER_ACCOUNT_2 = {
|
|
22
57
|
name: 'app-developer-2',
|
|
23
58
|
accountId: 456,
|
|
24
|
-
accountType: HUBSPOT_ACCOUNT_TYPES.APP_DEVELOPER,
|
|
59
|
+
accountType: config_2.HUBSPOT_ACCOUNT_TYPES.APP_DEVELOPER,
|
|
25
60
|
env: 'prod',
|
|
26
61
|
};
|
|
27
62
|
const accounts = [
|
|
@@ -31,7 +66,7 @@ const accounts = [
|
|
|
31
66
|
name: 'test-account',
|
|
32
67
|
accountId: 789,
|
|
33
68
|
parentAccountId: APP_DEVELOPER_ACCOUNT_1.accountId,
|
|
34
|
-
accountType: HUBSPOT_ACCOUNT_TYPES.DEVELOPER_TEST,
|
|
69
|
+
accountType: config_2.HUBSPOT_ACCOUNT_TYPES.DEVELOPER_TEST,
|
|
35
70
|
env: 'prod',
|
|
36
71
|
},
|
|
37
72
|
];
|
|
@@ -40,19 +75,19 @@ describe('lib/developerTestAccounts', () => {
|
|
|
40
75
|
it('should return true if there are developer test accounts associated with the account', () => {
|
|
41
76
|
mockedGetAccountId.mockReturnValueOnce(APP_DEVELOPER_ACCOUNT_1.accountId);
|
|
42
77
|
mockedGetConfigAccounts.mockReturnValueOnce(accounts);
|
|
43
|
-
const result = getHasDevTestAccounts(APP_DEVELOPER_ACCOUNT_1);
|
|
78
|
+
const result = (0, developerTestAccounts_2.getHasDevTestAccounts)(APP_DEVELOPER_ACCOUNT_1);
|
|
44
79
|
expect(result).toBe(true);
|
|
45
80
|
});
|
|
46
81
|
it('should return false if there are no developer test accounts associated with the account', () => {
|
|
47
82
|
mockedGetAccountId.mockReturnValueOnce(APP_DEVELOPER_ACCOUNT_2.accountId);
|
|
48
83
|
mockedGetConfigAccounts.mockReturnValueOnce(accounts);
|
|
49
|
-
const result = getHasDevTestAccounts(APP_DEVELOPER_ACCOUNT_2);
|
|
84
|
+
const result = (0, developerTestAccounts_2.getHasDevTestAccounts)(APP_DEVELOPER_ACCOUNT_2);
|
|
50
85
|
expect(result).toBe(false);
|
|
51
86
|
});
|
|
52
87
|
it('should return false if there are no accounts configured', () => {
|
|
53
88
|
mockedGetAccountId.mockReturnValueOnce(APP_DEVELOPER_ACCOUNT_1.accountId);
|
|
54
89
|
mockedGetConfigAccounts.mockReturnValueOnce(undefined);
|
|
55
|
-
const result = getHasDevTestAccounts(APP_DEVELOPER_ACCOUNT_1);
|
|
90
|
+
const result = (0, developerTestAccounts_2.getHasDevTestAccounts)(APP_DEVELOPER_ACCOUNT_1);
|
|
56
91
|
expect(result).toBe(false);
|
|
57
92
|
});
|
|
58
93
|
});
|
|
@@ -63,7 +98,7 @@ describe('lib/developerTestAccounts', () => {
|
|
|
63
98
|
});
|
|
64
99
|
it('should return null if the account id is not found', async () => {
|
|
65
100
|
mockedGetAccountId.mockReturnValueOnce(undefined);
|
|
66
|
-
const result = await validateDevTestAccountUsageLimits(APP_DEVELOPER_ACCOUNT_1);
|
|
101
|
+
const result = await (0, developerTestAccounts_2.validateDevTestAccountUsageLimits)(APP_DEVELOPER_ACCOUNT_1);
|
|
67
102
|
expect(result).toBe(null);
|
|
68
103
|
});
|
|
69
104
|
it('should return null if there is no developer test account data', async () => {
|
|
@@ -71,7 +106,7 @@ describe('lib/developerTestAccounts', () => {
|
|
|
71
106
|
mockedFetchDeveloperTestAccounts.mockResolvedValueOnce({
|
|
72
107
|
data: null,
|
|
73
108
|
});
|
|
74
|
-
const result = await validateDevTestAccountUsageLimits(APP_DEVELOPER_ACCOUNT_1);
|
|
109
|
+
const result = await (0, developerTestAccounts_2.validateDevTestAccountUsageLimits)(APP_DEVELOPER_ACCOUNT_1);
|
|
75
110
|
expect(result).toBe(null);
|
|
76
111
|
});
|
|
77
112
|
it('should return the test account data if the account has not reached the limit', async () => {
|
|
@@ -83,7 +118,7 @@ describe('lib/developerTestAccounts', () => {
|
|
|
83
118
|
mockedFetchDeveloperTestAccounts.mockResolvedValueOnce({
|
|
84
119
|
data: testAccountData,
|
|
85
120
|
});
|
|
86
|
-
const result = await validateDevTestAccountUsageLimits(APP_DEVELOPER_ACCOUNT_1);
|
|
121
|
+
const result = await (0, developerTestAccounts_2.validateDevTestAccountUsageLimits)(APP_DEVELOPER_ACCOUNT_1);
|
|
87
122
|
expect(result).toEqual(expect.objectContaining(testAccountData));
|
|
88
123
|
});
|
|
89
124
|
it('should throw an error if the account has reached the limit', async () => {
|
|
@@ -94,14 +129,14 @@ describe('lib/developerTestAccounts', () => {
|
|
|
94
129
|
results: [{}],
|
|
95
130
|
},
|
|
96
131
|
});
|
|
97
|
-
await expect(validateDevTestAccountUsageLimits(APP_DEVELOPER_ACCOUNT_1)).rejects.toThrow();
|
|
132
|
+
await expect((0, developerTestAccounts_2.validateDevTestAccountUsageLimits)(APP_DEVELOPER_ACCOUNT_1)).rejects.toThrow();
|
|
98
133
|
});
|
|
99
134
|
});
|
|
100
135
|
describe('handleDeveloperTestAccountCreateError()', () => {
|
|
101
136
|
let loggerErrorSpy;
|
|
102
137
|
let logErrorSpy;
|
|
103
138
|
beforeEach(() => {
|
|
104
|
-
loggerErrorSpy = vi.spyOn(logger, 'error');
|
|
139
|
+
loggerErrorSpy = vi.spyOn(logger_1.logger, 'error');
|
|
105
140
|
logErrorSpy = vi.spyOn(errorHandlers, 'logError');
|
|
106
141
|
});
|
|
107
142
|
afterEach(() => {
|
|
@@ -109,36 +144,36 @@ describe('lib/developerTestAccounts', () => {
|
|
|
109
144
|
logErrorSpy.mockRestore();
|
|
110
145
|
});
|
|
111
146
|
it('should log and throw an error if the account is missing the required scopes', () => {
|
|
112
|
-
const missingScopesError = mockHubSpotHttpError('Missing scopes error', {
|
|
147
|
+
const missingScopesError = (0, testUtils_1.mockHubSpotHttpError)('Missing scopes error', {
|
|
113
148
|
status: 403,
|
|
114
149
|
data: {
|
|
115
150
|
message: 'Missing scopes error',
|
|
116
151
|
category: 'MISSING_SCOPES',
|
|
117
152
|
},
|
|
118
153
|
});
|
|
119
|
-
expect(() => handleDeveloperTestAccountCreateError(missingScopesError, APP_DEVELOPER_ACCOUNT_1.accountId, 'prod', 10)).toThrow('Missing scopes error');
|
|
154
|
+
expect(() => (0, developerTestAccounts_2.handleDeveloperTestAccountCreateError)(missingScopesError, APP_DEVELOPER_ACCOUNT_1.accountId, 'prod', 10)).toThrow('Missing scopes error');
|
|
120
155
|
expect(loggerErrorSpy).toHaveBeenCalled();
|
|
121
156
|
});
|
|
122
157
|
it('should log and throw an error if the account is missing the required scopes', () => {
|
|
123
|
-
const portalLimitReachedError = mockHubSpotHttpError('Portal limit reached error', {
|
|
158
|
+
const portalLimitReachedError = (0, testUtils_1.mockHubSpotHttpError)('Portal limit reached error', {
|
|
124
159
|
status: 400,
|
|
125
160
|
data: {
|
|
126
161
|
message: 'Portal limit reached error',
|
|
127
162
|
errorType: 'TEST_PORTAL_LIMIT_REACHED',
|
|
128
163
|
},
|
|
129
164
|
});
|
|
130
|
-
expect(() => handleDeveloperTestAccountCreateError(portalLimitReachedError, APP_DEVELOPER_ACCOUNT_1.accountId, 'prod', 10)).toThrow('Portal limit reached error');
|
|
165
|
+
expect(() => (0, developerTestAccounts_2.handleDeveloperTestAccountCreateError)(portalLimitReachedError, APP_DEVELOPER_ACCOUNT_1.accountId, 'prod', 10)).toThrow('Portal limit reached error');
|
|
131
166
|
expect(loggerErrorSpy).toHaveBeenCalled();
|
|
132
167
|
});
|
|
133
168
|
it('should log a generic error message for an unknown error type', () => {
|
|
134
|
-
const someUnknownError = mockHubSpotHttpError('Some unknown error', {
|
|
169
|
+
const someUnknownError = (0, testUtils_1.mockHubSpotHttpError)('Some unknown error', {
|
|
135
170
|
status: 400,
|
|
136
171
|
data: {
|
|
137
172
|
message: 'Some unknown error',
|
|
138
173
|
category: 'SOME_UNKNOWN_ERROR',
|
|
139
174
|
},
|
|
140
175
|
});
|
|
141
|
-
expect(() => handleDeveloperTestAccountCreateError(someUnknownError, APP_DEVELOPER_ACCOUNT_1.accountId, 'prod', 10)).toThrow('Some unknown error');
|
|
176
|
+
expect(() => (0, developerTestAccounts_2.handleDeveloperTestAccountCreateError)(someUnknownError, APP_DEVELOPER_ACCOUNT_1.accountId, 'prod', 10)).toThrow('Some unknown error');
|
|
142
177
|
expect(logErrorSpy).toHaveBeenCalled();
|
|
143
178
|
});
|
|
144
179
|
});
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const localDevAuth_1 = require("@hubspot/local-dev-lib/api/localDevAuth");
|
|
4
|
+
const hasFeature_1 = require("../hasFeature");
|
|
3
5
|
vi.mock('@hubspot/local-dev-lib/api/localDevAuth');
|
|
4
|
-
const mockedFetchEnabledFeatures = fetchEnabledFeatures;
|
|
6
|
+
const mockedFetchEnabledFeatures = localDevAuth_1.fetchEnabledFeatures;
|
|
5
7
|
describe('lib/hasFeature', () => {
|
|
6
8
|
describe('hasFeature()', () => {
|
|
7
9
|
const accountId = 123;
|
|
@@ -18,17 +20,17 @@ describe('lib/hasFeature', () => {
|
|
|
18
20
|
});
|
|
19
21
|
it('should return true if the feature is enabled', async () => {
|
|
20
22
|
// @ts-expect-error test data
|
|
21
|
-
const result = await hasFeature(accountId, 'feature-1');
|
|
23
|
+
const result = await (0, hasFeature_1.hasFeature)(accountId, 'feature-1');
|
|
22
24
|
expect(result).toBe(true);
|
|
23
25
|
});
|
|
24
26
|
it('should return false if the feature is not enabled', async () => {
|
|
25
27
|
// @ts-expect-error test data
|
|
26
|
-
const result = await hasFeature(accountId, 'feature-2');
|
|
28
|
+
const result = await (0, hasFeature_1.hasFeature)(accountId, 'feature-2');
|
|
27
29
|
expect(result).toBe(false);
|
|
28
30
|
});
|
|
29
31
|
it('should return false if the feature is not present', async () => {
|
|
30
32
|
// @ts-expect-error test data
|
|
31
|
-
const result = await hasFeature(accountId, 'feature-4');
|
|
33
|
+
const result = await (0, hasFeature_1.hasFeature)(accountId, 'feature-4');
|
|
32
34
|
expect(result).toBe(false);
|
|
33
35
|
});
|
|
34
36
|
});
|
|
@@ -1,6 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const util_1 = __importDefault(require("util"));
|
|
7
|
+
const npm_1 = require("../npm");
|
|
8
|
+
const package_json_1 = __importDefault(require("../../package.json"));
|
|
4
9
|
vi.mock('@hubspot/local-dev-lib/logger');
|
|
5
10
|
vi.mock('../ui/SpinniesManager');
|
|
6
11
|
describe('lib/npm', () => {
|
|
@@ -12,24 +17,24 @@ describe('lib/npm', () => {
|
|
|
12
17
|
}
|
|
13
18
|
beforeEach(() => {
|
|
14
19
|
execMock = vi.fn();
|
|
15
|
-
|
|
20
|
+
util_1.default.promisify = mockedPromisify(execMock);
|
|
16
21
|
});
|
|
17
22
|
describe('isGloballyInstalled()', () => {
|
|
18
23
|
it('should return true when exec is successful', async () => {
|
|
19
|
-
const actual = await isGloballyInstalled(DEFAULT_PACKAGE_MANAGER);
|
|
24
|
+
const actual = await (0, npm_1.isGloballyInstalled)(npm_1.DEFAULT_PACKAGE_MANAGER);
|
|
20
25
|
expect(actual).toBe(true);
|
|
21
26
|
expect(execMock).toHaveBeenCalledTimes(1);
|
|
22
|
-
expect(execMock).toHaveBeenCalledWith(`${DEFAULT_PACKAGE_MANAGER} --version`);
|
|
27
|
+
expect(execMock).toHaveBeenCalledWith(`${npm_1.DEFAULT_PACKAGE_MANAGER} --version`);
|
|
23
28
|
});
|
|
24
29
|
it('should return false when exec is unsuccessful', async () => {
|
|
25
30
|
execMock.mockImplementationOnce(() => {
|
|
26
31
|
throw new Error('unsuccessful');
|
|
27
32
|
});
|
|
28
|
-
|
|
29
|
-
const actual = await isGloballyInstalled(DEFAULT_PACKAGE_MANAGER);
|
|
33
|
+
util_1.default.promisify = mockedPromisify(execMock);
|
|
34
|
+
const actual = await (0, npm_1.isGloballyInstalled)(npm_1.DEFAULT_PACKAGE_MANAGER);
|
|
30
35
|
expect(actual).toBe(false);
|
|
31
36
|
expect(execMock).toHaveBeenCalledTimes(1);
|
|
32
|
-
expect(execMock).toHaveBeenCalledWith(`${DEFAULT_PACKAGE_MANAGER} --version`);
|
|
37
|
+
expect(execMock).toHaveBeenCalledWith(`${npm_1.DEFAULT_PACKAGE_MANAGER} --version`);
|
|
33
38
|
});
|
|
34
39
|
});
|
|
35
40
|
describe('getLatestCliVersion()', () => {
|
|
@@ -39,19 +44,19 @@ describe('lib/npm', () => {
|
|
|
39
44
|
execMock.mockResolvedValueOnce({
|
|
40
45
|
stdout: JSON.stringify({ latest, next }),
|
|
41
46
|
});
|
|
42
|
-
|
|
43
|
-
const actual = await getLatestCliVersion();
|
|
47
|
+
util_1.default.promisify = mockedPromisify(execMock);
|
|
48
|
+
const actual = await (0, npm_1.getLatestCliVersion)();
|
|
44
49
|
expect(actual).toEqual({ latest, next });
|
|
45
|
-
expect(execMock).toHaveBeenCalledWith(`npm info ${
|
|
50
|
+
expect(execMock).toHaveBeenCalledWith(`npm info ${package_json_1.default.name} dist-tags --json`);
|
|
46
51
|
});
|
|
47
52
|
it('should throw any errors that encounter with the check', async () => {
|
|
48
53
|
const errorMessage = 'unsuccessful';
|
|
49
54
|
execMock.mockImplementationOnce(() => {
|
|
50
55
|
throw new Error(errorMessage);
|
|
51
56
|
});
|
|
52
|
-
|
|
53
|
-
await expect(() => getLatestCliVersion()).rejects.toThrow(errorMessage);
|
|
54
|
-
expect(execMock).toHaveBeenCalledWith(`npm info ${
|
|
57
|
+
util_1.default.promisify = mockedPromisify(execMock);
|
|
58
|
+
await expect(() => (0, npm_1.getLatestCliVersion)()).rejects.toThrow(errorMessage);
|
|
59
|
+
expect(execMock).toHaveBeenCalledWith(`npm info ${package_json_1.default.name} dist-tags --json`);
|
|
55
60
|
});
|
|
56
61
|
});
|
|
57
62
|
});
|
|
@@ -1,21 +1,26 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const express_1 = __importDefault(require("express"));
|
|
7
|
+
const open_1 = __importDefault(require("open"));
|
|
8
|
+
const OAuth2Manager_1 = require("@hubspot/local-dev-lib/models/OAuth2Manager");
|
|
9
|
+
const config_1 = require("@hubspot/local-dev-lib/config");
|
|
10
|
+
const oauth_1 = require("@hubspot/local-dev-lib/oauth");
|
|
11
|
+
const logger_1 = require("@hubspot/local-dev-lib/logger");
|
|
12
|
+
const environments_1 = require("@hubspot/local-dev-lib/constants/environments");
|
|
13
|
+
const auth_1 = require("@hubspot/local-dev-lib/constants/auth");
|
|
14
|
+
const oauth_2 = require("../oauth");
|
|
10
15
|
vi.mock('express');
|
|
11
16
|
vi.mock('open');
|
|
12
17
|
vi.mock('@hubspot/local-dev-lib/models/OAuth2Manager');
|
|
13
18
|
vi.mock('@hubspot/local-dev-lib/config');
|
|
14
19
|
vi.mock('@hubspot/local-dev-lib/oauth');
|
|
15
20
|
vi.mock('@hubspot/local-dev-lib/logger');
|
|
16
|
-
const mockedExpress =
|
|
17
|
-
const mockedOAuth2Manager = OAuth2Manager;
|
|
18
|
-
const mockedGetAccountConfig = getAccountConfig;
|
|
21
|
+
const mockedExpress = express_1.default;
|
|
22
|
+
const mockedOAuth2Manager = OAuth2Manager_1.OAuth2Manager;
|
|
23
|
+
const mockedGetAccountConfig = config_1.getAccountConfig;
|
|
19
24
|
describe('lib/oauth', () => {
|
|
20
25
|
const mockExpressReq = {
|
|
21
26
|
query: { code: 'test-auth-code' },
|
|
@@ -26,7 +31,7 @@ describe('lib/oauth', () => {
|
|
|
26
31
|
clientId: 'test-client-id',
|
|
27
32
|
clientSecret: 'test-client-secret',
|
|
28
33
|
scopes: ['test-scope'],
|
|
29
|
-
env: ENVIRONMENTS.PROD,
|
|
34
|
+
env: environments_1.ENVIRONMENTS.PROD,
|
|
30
35
|
};
|
|
31
36
|
beforeEach(() => {
|
|
32
37
|
mockedExpress.mockReturnValue({
|
|
@@ -50,18 +55,18 @@ describe('lib/oauth', () => {
|
|
|
50
55
|
};
|
|
51
56
|
mockedOAuth2Manager.mockImplementation(() => mockOAuth2Manager);
|
|
52
57
|
mockedGetAccountConfig.mockReturnValue({
|
|
53
|
-
env: ENVIRONMENTS.PROD,
|
|
58
|
+
env: environments_1.ENVIRONMENTS.PROD,
|
|
54
59
|
});
|
|
55
|
-
await authenticateWithOauth(mockAccountConfig);
|
|
60
|
+
await (0, oauth_2.authenticateWithOauth)(mockAccountConfig);
|
|
56
61
|
// Verify OAuth2Manager was initialized correctly
|
|
57
62
|
expect(mockedOAuth2Manager).toHaveBeenCalledWith({
|
|
58
63
|
...mockAccountConfig,
|
|
59
|
-
env: ENVIRONMENTS.PROD,
|
|
64
|
+
env: environments_1.ENVIRONMENTS.PROD,
|
|
60
65
|
});
|
|
61
66
|
// Verify logger was called
|
|
62
|
-
expect(logger.log).toHaveBeenCalledWith('Authorizing');
|
|
67
|
+
expect(logger_1.logger.log).toHaveBeenCalledWith('Authorizing');
|
|
63
68
|
// Verify OAuth tokens were added to config
|
|
64
|
-
expect(addOauthToAccountConfig).toHaveBeenCalledWith(mockOAuth2Manager);
|
|
69
|
+
expect(oauth_1.addOauthToAccountConfig).toHaveBeenCalledWith(mockOAuth2Manager);
|
|
65
70
|
});
|
|
66
71
|
it('should handle missing clientId', async () => {
|
|
67
72
|
const invalidConfig = {
|
|
@@ -74,8 +79,8 @@ describe('lib/oauth', () => {
|
|
|
74
79
|
const exitSpy = vi.spyOn(process, 'exit').mockImplementation(() => {
|
|
75
80
|
throw new Error('exit');
|
|
76
81
|
});
|
|
77
|
-
await expect(authenticateWithOauth(invalidConfig)).rejects.toThrow('exit');
|
|
78
|
-
expect(logger.error).toHaveBeenCalled();
|
|
82
|
+
await expect((0, oauth_2.authenticateWithOauth)(invalidConfig)).rejects.toThrow('exit');
|
|
83
|
+
expect(logger_1.logger.error).toHaveBeenCalled();
|
|
79
84
|
expect(exitSpy).toHaveBeenCalled();
|
|
80
85
|
exitSpy.mockRestore();
|
|
81
86
|
});
|
|
@@ -89,9 +94,9 @@ describe('lib/oauth', () => {
|
|
|
89
94
|
exchangeForTokens: vi.fn().mockResolvedValue({}),
|
|
90
95
|
};
|
|
91
96
|
mockedOAuth2Manager.mockImplementation(() => mockOAuth2Manager);
|
|
92
|
-
await authenticateWithOauth(configWithoutScopes);
|
|
97
|
+
await (0, oauth_2.authenticateWithOauth)(configWithoutScopes);
|
|
93
98
|
// Verify default scopes were used
|
|
94
|
-
expect(
|
|
99
|
+
expect(open_1.default).toHaveBeenCalledWith(expect.stringContaining(encodeURIComponent(auth_1.DEFAULT_OAUTH_SCOPES.join(' '))), expect.anything());
|
|
95
100
|
});
|
|
96
101
|
it('should handle OAuth exchange failure', async () => {
|
|
97
102
|
const mockOAuth2Manager = {
|
|
@@ -101,7 +106,7 @@ describe('lib/oauth', () => {
|
|
|
101
106
|
.mockRejectedValue(new Error('Exchange failed')),
|
|
102
107
|
};
|
|
103
108
|
mockedOAuth2Manager.mockImplementation(() => mockOAuth2Manager);
|
|
104
|
-
await authenticateWithOauth(mockAccountConfig);
|
|
109
|
+
await (0, oauth_2.authenticateWithOauth)(mockAccountConfig);
|
|
105
110
|
expect(mockExpressResp.send).toHaveBeenCalledWith(expect.stringContaining('Authorization failed'));
|
|
106
111
|
});
|
|
107
112
|
});
|
|
@@ -1,34 +1,36 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const parsing_1 = require("../parsing");
|
|
2
4
|
describe('lib/parsing', () => {
|
|
3
5
|
describe('parseStringToNumber', () => {
|
|
4
6
|
it('should parse valid integer strings', () => {
|
|
5
|
-
expect(parseStringToNumber('123')).toBe(123);
|
|
6
|
-
expect(parseStringToNumber('0')).toBe(0);
|
|
7
|
-
expect(parseStringToNumber('-456')).toBe(-456);
|
|
8
|
-
expect(parseStringToNumber('999')).toBe(999);
|
|
7
|
+
expect((0, parsing_1.parseStringToNumber)('123')).toBe(123);
|
|
8
|
+
expect((0, parsing_1.parseStringToNumber)('0')).toBe(0);
|
|
9
|
+
expect((0, parsing_1.parseStringToNumber)('-456')).toBe(-456);
|
|
10
|
+
expect((0, parsing_1.parseStringToNumber)('999')).toBe(999);
|
|
9
11
|
});
|
|
10
12
|
it('should parse strings with leading zeros', () => {
|
|
11
|
-
expect(parseStringToNumber('007')).toBe(7);
|
|
12
|
-
expect(parseStringToNumber('0123')).toBe(123);
|
|
13
|
+
expect((0, parsing_1.parseStringToNumber)('007')).toBe(7);
|
|
14
|
+
expect((0, parsing_1.parseStringToNumber)('0123')).toBe(123);
|
|
13
15
|
});
|
|
14
16
|
it('should throw error for strings with leading whitespace', () => {
|
|
15
|
-
expect(() => parseStringToNumber(' 42')).toThrow('Unable to parse string to number');
|
|
16
|
-
expect(() => parseStringToNumber('\t123')).toThrow('Unable to parse string to number');
|
|
17
|
+
expect(() => (0, parsing_1.parseStringToNumber)(' 42')).toThrow('Unable to parse string to number');
|
|
18
|
+
expect(() => (0, parsing_1.parseStringToNumber)('\t123')).toThrow('Unable to parse string to number');
|
|
17
19
|
});
|
|
18
20
|
it('should throw error for invalid number strings', () => {
|
|
19
|
-
expect(() => parseStringToNumber('abc')).toThrow('Unable to parse string to number');
|
|
20
|
-
expect(() => parseStringToNumber('')).toThrow('Unable to parse string to number');
|
|
21
|
-
expect(() => parseStringToNumber('NaN')).toThrow('Unable to parse string to number');
|
|
21
|
+
expect(() => (0, parsing_1.parseStringToNumber)('abc')).toThrow('Unable to parse string to number');
|
|
22
|
+
expect(() => (0, parsing_1.parseStringToNumber)('')).toThrow('Unable to parse string to number');
|
|
23
|
+
expect(() => (0, parsing_1.parseStringToNumber)('NaN')).toThrow('Unable to parse string to number');
|
|
22
24
|
});
|
|
23
25
|
it('should throw error for strings with non-numeric characters', () => {
|
|
24
|
-
expect(() => parseStringToNumber('123abc')).toThrow('Unable to parse string to number');
|
|
25
|
-
expect(() => parseStringToNumber('456def')).toThrow('Unable to parse string to number');
|
|
26
|
-
expect(() => parseStringToNumber('12.34')).toThrow('Unable to parse string to number');
|
|
26
|
+
expect(() => (0, parsing_1.parseStringToNumber)('123abc')).toThrow('Unable to parse string to number');
|
|
27
|
+
expect(() => (0, parsing_1.parseStringToNumber)('456def')).toThrow('Unable to parse string to number');
|
|
28
|
+
expect(() => (0, parsing_1.parseStringToNumber)('12.34')).toThrow('Unable to parse string to number');
|
|
27
29
|
});
|
|
28
30
|
it('should throw error for strings with mixed content', () => {
|
|
29
|
-
expect(() => parseStringToNumber('123 456')).toThrow('Unable to parse string to number');
|
|
30
|
-
expect(() => parseStringToNumber('1,234')).toThrow('Unable to parse string to number');
|
|
31
|
-
expect(() => parseStringToNumber('1.23e4')).toThrow('Unable to parse string to number');
|
|
31
|
+
expect(() => (0, parsing_1.parseStringToNumber)('123 456')).toThrow('Unable to parse string to number');
|
|
32
|
+
expect(() => (0, parsing_1.parseStringToNumber)('1,234')).toThrow('Unable to parse string to number');
|
|
33
|
+
expect(() => (0, parsing_1.parseStringToNumber)('1.23e4')).toThrow('Unable to parse string to number');
|
|
32
34
|
});
|
|
33
35
|
});
|
|
34
36
|
});
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const polling_1 = require("../polling");
|
|
4
|
+
const constants_1 = require("../constants");
|
|
3
5
|
// Helper to create a mock polling callback
|
|
4
6
|
const createMockCallback = (responses) => {
|
|
5
7
|
let callCount = 0;
|
|
@@ -19,56 +21,56 @@ describe('lib/polling', () => {
|
|
|
19
21
|
describe('poll()', () => {
|
|
20
22
|
it('should resolve when status is SUCCESS', async () => {
|
|
21
23
|
const mockCallback = createMockCallback([
|
|
22
|
-
{ status: DEFAULT_POLLING_STATES.STARTED },
|
|
23
|
-
{ status: DEFAULT_POLLING_STATES.SUCCESS },
|
|
24
|
+
{ status: polling_1.DEFAULT_POLLING_STATES.STARTED },
|
|
25
|
+
{ status: polling_1.DEFAULT_POLLING_STATES.SUCCESS },
|
|
24
26
|
]);
|
|
25
|
-
const pollPromise = poll(mockCallback);
|
|
27
|
+
const pollPromise = (0, polling_1.poll)(mockCallback);
|
|
26
28
|
// Fast-forward through two polling intervals
|
|
27
|
-
vi.advanceTimersByTime(DEFAULT_POLLING_DELAY * 2);
|
|
29
|
+
vi.advanceTimersByTime(constants_1.DEFAULT_POLLING_DELAY * 2);
|
|
28
30
|
const result = await pollPromise;
|
|
29
|
-
expect(result.status).toBe(DEFAULT_POLLING_STATES.SUCCESS);
|
|
31
|
+
expect(result.status).toBe(polling_1.DEFAULT_POLLING_STATES.SUCCESS);
|
|
30
32
|
expect(mockCallback).toHaveBeenCalledTimes(2);
|
|
31
33
|
});
|
|
32
34
|
it('should reject when status is ERROR', async () => {
|
|
33
35
|
const mockCallback = createMockCallback([
|
|
34
|
-
{ status: DEFAULT_POLLING_STATES.STARTED },
|
|
35
|
-
{ status: DEFAULT_POLLING_STATES.ERROR },
|
|
36
|
+
{ status: polling_1.DEFAULT_POLLING_STATES.STARTED },
|
|
37
|
+
{ status: polling_1.DEFAULT_POLLING_STATES.ERROR },
|
|
36
38
|
]);
|
|
37
|
-
const pollPromise = poll(mockCallback);
|
|
38
|
-
vi.advanceTimersByTime(DEFAULT_POLLING_DELAY * 2);
|
|
39
|
+
const pollPromise = (0, polling_1.poll)(mockCallback);
|
|
40
|
+
vi.advanceTimersByTime(constants_1.DEFAULT_POLLING_DELAY * 2);
|
|
39
41
|
await expect(pollPromise).rejects.toEqual({
|
|
40
|
-
status: DEFAULT_POLLING_STATES.ERROR,
|
|
42
|
+
status: polling_1.DEFAULT_POLLING_STATES.ERROR,
|
|
41
43
|
});
|
|
42
44
|
expect(mockCallback).toHaveBeenCalledTimes(2);
|
|
43
45
|
});
|
|
44
46
|
it('should reject when status is FAILURE', async () => {
|
|
45
47
|
const mockCallback = createMockCallback([
|
|
46
|
-
{ status: DEFAULT_POLLING_STATES.STARTED },
|
|
47
|
-
{ status: DEFAULT_POLLING_STATES.FAILURE },
|
|
48
|
+
{ status: polling_1.DEFAULT_POLLING_STATES.STARTED },
|
|
49
|
+
{ status: polling_1.DEFAULT_POLLING_STATES.FAILURE },
|
|
48
50
|
]);
|
|
49
|
-
const pollPromise = poll(mockCallback);
|
|
50
|
-
vi.advanceTimersByTime(DEFAULT_POLLING_DELAY * 2);
|
|
51
|
+
const pollPromise = (0, polling_1.poll)(mockCallback);
|
|
52
|
+
vi.advanceTimersByTime(constants_1.DEFAULT_POLLING_DELAY * 2);
|
|
51
53
|
await expect(pollPromise).rejects.toEqual({
|
|
52
|
-
status: DEFAULT_POLLING_STATES.FAILURE,
|
|
54
|
+
status: polling_1.DEFAULT_POLLING_STATES.FAILURE,
|
|
53
55
|
});
|
|
54
56
|
});
|
|
55
57
|
it('should reject when status is REVERTED', async () => {
|
|
56
58
|
const mockCallback = createMockCallback([
|
|
57
|
-
{ status: DEFAULT_POLLING_STATES.STARTED },
|
|
58
|
-
{ status: DEFAULT_POLLING_STATES.REVERTED },
|
|
59
|
+
{ status: polling_1.DEFAULT_POLLING_STATES.STARTED },
|
|
60
|
+
{ status: polling_1.DEFAULT_POLLING_STATES.REVERTED },
|
|
59
61
|
]);
|
|
60
|
-
const pollPromise = poll(mockCallback);
|
|
61
|
-
vi.advanceTimersByTime(DEFAULT_POLLING_DELAY * 2);
|
|
62
|
+
const pollPromise = (0, polling_1.poll)(mockCallback);
|
|
63
|
+
vi.advanceTimersByTime(constants_1.DEFAULT_POLLING_DELAY * 2);
|
|
62
64
|
await expect(pollPromise).rejects.toEqual({
|
|
63
|
-
status: DEFAULT_POLLING_STATES.REVERTED,
|
|
65
|
+
status: polling_1.DEFAULT_POLLING_STATES.REVERTED,
|
|
64
66
|
});
|
|
65
67
|
});
|
|
66
68
|
it('should reject when callback throws an error', async () => {
|
|
67
69
|
const mockCallback = vi
|
|
68
70
|
.fn()
|
|
69
71
|
.mockRejectedValue(new Error('Network error'));
|
|
70
|
-
const pollPromise = poll(mockCallback);
|
|
71
|
-
vi.advanceTimersByTime(DEFAULT_POLLING_DELAY);
|
|
72
|
+
const pollPromise = (0, polling_1.poll)(mockCallback);
|
|
73
|
+
vi.advanceTimersByTime(constants_1.DEFAULT_POLLING_DELAY);
|
|
72
74
|
await expect(pollPromise).rejects.toThrow('Network error');
|
|
73
75
|
expect(mockCallback).toHaveBeenCalledTimes(1);
|
|
74
76
|
});
|
|
@@ -1,35 +1,40 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const readline_1 = __importDefault(require("readline"));
|
|
7
|
+
const logger_1 = require("@hubspot/local-dev-lib/logger");
|
|
8
|
+
const process_1 = require("../process");
|
|
4
9
|
vi.mock('readline');
|
|
5
10
|
vi.mock('@hubspot/local-dev-lib/logger');
|
|
6
|
-
const mockedReadline =
|
|
7
|
-
const mockedLogger = logger;
|
|
8
|
-
const mockedSetLogLevel = setLogLevel;
|
|
11
|
+
const mockedReadline = readline_1.default;
|
|
12
|
+
const mockedLogger = logger_1.logger;
|
|
13
|
+
const mockedSetLogLevel = logger_1.setLogLevel;
|
|
9
14
|
const processRemoveListenerSpy = vi.spyOn(process, 'removeAllListeners');
|
|
10
15
|
const processOnSpy = vi.spyOn(process, 'on');
|
|
11
16
|
describe('lib/process', () => {
|
|
12
17
|
describe('handleExit()', () => {
|
|
13
18
|
const mockCallback = vi.fn();
|
|
14
19
|
it('should set up listeners for all termination signals', () => {
|
|
15
|
-
handleExit(mockCallback);
|
|
16
|
-
TERMINATION_SIGNALS.forEach(signal => {
|
|
20
|
+
(0, process_1.handleExit)(mockCallback);
|
|
21
|
+
process_1.TERMINATION_SIGNALS.forEach(signal => {
|
|
17
22
|
expect(processRemoveListenerSpy).toHaveBeenCalledWith(signal);
|
|
18
23
|
expect(processOnSpy).toHaveBeenCalledWith(signal, expect.any(Function));
|
|
19
24
|
});
|
|
20
25
|
});
|
|
21
26
|
it('should handle SIGHUP signal correctly', async () => {
|
|
22
|
-
handleExit(mockCallback);
|
|
27
|
+
(0, process_1.handleExit)(mockCallback);
|
|
23
28
|
// Get the callback function passed to process.on for SIGHUP
|
|
24
29
|
const sighupCallback = processOnSpy.mock.calls.find(call => call[0] === 'SIGHUP')?.[1];
|
|
25
30
|
expect(sighupCallback).toBeDefined();
|
|
26
31
|
sighupCallback();
|
|
27
|
-
expect(mockedSetLogLevel).toHaveBeenCalledWith(LOG_LEVEL.NONE);
|
|
32
|
+
expect(mockedSetLogLevel).toHaveBeenCalledWith(logger_1.LOG_LEVEL.NONE);
|
|
28
33
|
expect(mockCallback).toHaveBeenCalledWith({ isSIGHUP: true });
|
|
29
34
|
expect(mockedLogger.debug).toHaveBeenCalledWith(expect.stringContaining('SIGHUP'));
|
|
30
35
|
});
|
|
31
36
|
it('should handle non-SIGHUP signals correctly', async () => {
|
|
32
|
-
handleExit(mockCallback);
|
|
37
|
+
(0, process_1.handleExit)(mockCallback);
|
|
33
38
|
// Get the callback function passed to process.on for SIGINT
|
|
34
39
|
const sigintCallback = processOnSpy.mock.calls.find(call => call[0] === 'SIGINT')?.[1];
|
|
35
40
|
expect(sigintCallback).toBeDefined();
|
|
@@ -39,7 +44,7 @@ describe('lib/process', () => {
|
|
|
39
44
|
expect(mockedLogger.debug).toHaveBeenCalledWith(expect.stringContaining('SIGINT'));
|
|
40
45
|
});
|
|
41
46
|
it('should prevent duplicate exit handling', async () => {
|
|
42
|
-
handleExit(mockCallback);
|
|
47
|
+
(0, process_1.handleExit)(mockCallback);
|
|
43
48
|
// Get the callback function passed to process.on for SIGINT
|
|
44
49
|
const sigintCallback = processOnSpy.mock.calls.find(call => call[0] === 'SIGINT')?.[1];
|
|
45
50
|
expect(sigintCallback).toBeDefined();
|
|
@@ -62,7 +67,7 @@ describe('lib/process', () => {
|
|
|
62
67
|
});
|
|
63
68
|
mockedReadline.createInterface.mockReturnValue({});
|
|
64
69
|
mockedReadline.emitKeypressEvents.mockImplementation(() => { });
|
|
65
|
-
handleKeypress(mockCallback);
|
|
70
|
+
(0, process_1.handleKeypress)(mockCallback);
|
|
66
71
|
expect(mockedReadline.createInterface).toHaveBeenCalledWith(process.stdin, process.stdout);
|
|
67
72
|
expect(mockedReadline.emitKeypressEvents).toHaveBeenCalledWith(process.stdin);
|
|
68
73
|
expect(process.stdin.setRawMode).toHaveBeenCalledWith(true);
|
|
@@ -78,7 +83,7 @@ describe('lib/process', () => {
|
|
|
78
83
|
removeAllListeners: vi.fn(),
|
|
79
84
|
},
|
|
80
85
|
});
|
|
81
|
-
handleKeypress(mockCallback);
|
|
86
|
+
(0, process_1.handleKeypress)(mockCallback);
|
|
82
87
|
expect(process.stdin.setRawMode).toBeUndefined();
|
|
83
88
|
});
|
|
84
89
|
});
|