From 6be3ddf34344267d756af585e694abe8403ed589 Mon Sep 17 00:00:00 2001 From: Waldek Mastykarz Date: Sun, 3 Dec 2023 18:34:07 +0100 Subject: [PATCH] Removes Cli.getInstance() --- .../contribute/new-command/unit-tests.mdx | 4 +- scripts/write-all-commands.js | 5 +- src/Auth.spec.ts | 12 +- src/Auth.ts | 7 +- src/Command.spec.ts | 16 +- src/Command.ts | 23 +- src/api.ts | 5 +- src/autocomplete.spec.ts | 16 +- src/autocomplete.ts | 10 +- src/chili/chili.ts | 3 +- src/cli/Cli.ts | 1044 ---------------- src/cli/{Cli.spec.ts => cli.spec.ts} | 336 +++--- src/cli/cli.ts | 1053 +++++++++++++++++ src/index.ts | 4 +- .../administrativeunit-add.spec.ts | 4 +- .../administrativeunit-get.spec.ts | 6 +- .../administrativeunit-remove.spec.ts | 14 +- .../administrativeunit-remove.ts | 4 +- src/m365/aad/commands/app/app-add.spec.ts | 4 +- src/m365/aad/commands/app/app-get.spec.ts | 10 +- src/m365/aad/commands/app/app-get.ts | 4 +- src/m365/aad/commands/app/app-remove.spec.ts | 22 +- src/m365/aad/commands/app/app-remove.ts | 6 +- .../aad/commands/app/app-role-add.spec.ts | 10 +- src/m365/aad/commands/app/app-role-add.ts | 4 +- .../aad/commands/app/app-role-list.spec.ts | 10 +- src/m365/aad/commands/app/app-role-list.ts | 4 +- .../aad/commands/app/app-role-remove.spec.ts | 36 +- src/m365/aad/commands/app/app-role-remove.ts | 8 +- src/m365/aad/commands/app/app-set.spec.ts | 10 +- src/m365/aad/commands/app/app-set.ts | 4 +- .../approleassignment-add.spec.ts | 10 +- .../approleassignment-add.ts | 4 +- .../approleassignment-list.spec.ts | 6 +- .../approleassignment-remove.spec.ts | 18 +- .../approleassignment-remove.ts | 4 +- src/m365/aad/commands/group/group-get.spec.ts | 8 +- .../aad/commands/group/group-list.spec.ts | 4 +- src/m365/aad/commands/group/group-list.ts | 4 +- .../aad/commands/group/group-remove.spec.ts | 22 +- src/m365/aad/commands/group/group-remove.ts | 4 +- .../commands/group/group-user-list.spec.ts | 10 +- .../groupsetting/groupsetting-add.spec.ts | 4 +- .../groupsetting/groupsetting-get.spec.ts | 4 +- .../groupsetting/groupsetting-remove.spec.ts | 16 +- .../groupsetting/groupsetting-remove.ts | 4 +- .../groupsetting/groupsetting-set.spec.ts | 4 +- .../groupsettingtemplate-get.spec.ts | 6 +- .../commands/m365group/m365group-add.spec.ts | 4 +- .../m365group-conversation-list.spec.ts | 4 +- .../m365group-conversation-post-list.spec.ts | 6 +- .../commands/m365group/m365group-get.spec.ts | 4 +- .../commands/m365group/m365group-list.spec.ts | 4 +- .../m365group-recyclebinitem-clear.spec.ts | 22 +- .../m365group-recyclebinitem-clear.ts | 4 +- .../m365group-recyclebinitem-remove.spec.ts | 28 +- .../m365group-recyclebinitem-remove.ts | 6 +- .../m365group-recyclebinitem-restore.spec.ts | 12 +- .../m365group-recyclebinitem-restore.ts | 4 +- .../m365group/m365group-remove.spec.ts | 16 +- .../commands/m365group/m365group-remove.ts | 4 +- .../m365group/m365group-renew.spec.ts | 4 +- .../commands/m365group/m365group-set.spec.ts | 4 +- .../m365group/m365group-teamify.spec.ts | 10 +- .../commands/m365group/m365group-teamify.ts | 4 +- .../m365group/m365group-user-add.spec.ts | 6 +- .../m365group/m365group-user-list.spec.ts | 4 +- .../m365group/m365group-user-remove.spec.ts | 38 +- .../m365group/m365group-user-remove.ts | 4 +- .../m365group/m365group-user-set.spec.ts | 6 +- .../oauth2grant/oauth2grant-add.spec.ts | 4 +- .../oauth2grant/oauth2grant-list.spec.ts | 4 +- .../oauth2grant/oauth2grant-remove.spec.ts | 22 +- .../oauth2grant/oauth2grant-remove.ts | 4 +- .../aad/commands/policy/policy-list.spec.ts | 4 +- .../siteclassification-disable.spec.ts | 14 +- .../siteclassification-disable.ts | 4 +- .../siteclassification-set.spec.ts | 4 +- src/m365/aad/commands/sp/sp-add.spec.ts | 10 +- src/m365/aad/commands/sp/sp-add.ts | 4 +- src/m365/aad/commands/sp/sp-get.spec.ts | 10 +- src/m365/aad/commands/sp/sp-get.ts | 4 +- src/m365/aad/commands/user/user-add.spec.ts | 6 +- src/m365/aad/commands/user/user-get.spec.ts | 10 +- src/m365/aad/commands/user/user-get.ts | 4 +- src/m365/aad/commands/user/user-hibp.spec.ts | 6 +- .../commands/user/user-license-add.spec.ts | 4 +- .../commands/user/user-license-list.spec.ts | 4 +- .../commands/user/user-license-remove.spec.ts | 16 +- .../aad/commands/user/user-license-remove.ts | 4 +- .../user/user-recyclebinitem-clear.spec.ts | 14 +- .../user/user-recyclebinitem-clear.ts | 4 +- .../user/user-recyclebinitem-remove.spec.ts | 16 +- .../user/user-recyclebinitem-remove.ts | 4 +- .../user/user-recyclebinitem-restore.spec.ts | 4 +- .../aad/commands/user/user-remove.spec.ts | 16 +- src/m365/aad/commands/user/user-remove.ts | 4 +- src/m365/aad/commands/user/user-set.spec.ts | 6 +- .../commands/user/user-signin-list.spec.ts | 4 +- .../commands/adaptivecard-send.spec.ts | 6 +- src/m365/app/commands/app-get.ts | 4 +- src/m365/app/commands/app-open.spec.ts | 6 +- src/m365/app/commands/app-open.ts | 4 +- .../permission/permission-add.spec.ts | 8 +- .../commands/permission/permission-list.ts | 4 +- src/m365/base/AppCommand.spec.ts | 10 +- src/m365/base/AppCommand.ts | 4 +- .../base/DateAndPeriodBasedReport.spec.ts | 4 +- src/m365/base/PeriodBasedReport.spec.ts | 4 +- .../commands/business/business-get.spec.ts | 12 +- .../booking/commands/business/business-get.ts | 4 +- src/m365/cli/commands/cli-consent.spec.ts | 4 +- src/m365/cli/commands/cli-doctor.spec.ts | 8 +- src/m365/cli/commands/cli-doctor.ts | 4 +- src/m365/cli/commands/cli-issue.spec.ts | 4 +- src/m365/cli/commands/cli-reconsent.spec.ts | 4 +- src/m365/cli/commands/cli-reconsent.ts | 4 +- .../cli/commands/config/config-get.spec.ts | 10 +- src/m365/cli/commands/config/config-get.ts | 4 +- .../cli/commands/config/config-list.spec.ts | 6 +- src/m365/cli/commands/config/config-list.ts | 4 +- .../cli/commands/config/config-reset.spec.ts | 8 +- src/m365/cli/commands/config/config-reset.ts | 6 +- .../cli/commands/config/config-set.spec.ts | 28 +- src/m365/cli/commands/config/config-set.ts | 8 +- src/m365/commands/docs.spec.ts | 4 +- src/m365/commands/docs.ts | 4 +- src/m365/commands/login.spec.ts | 4 +- src/m365/commands/login.ts | 8 +- src/m365/commands/request.spec.ts | 4 +- src/m365/commands/setup.spec.ts | 50 +- src/m365/commands/setup.ts | 16 +- .../context/commands/context-remove.spec.ts | 10 +- src/m365/context/commands/context-remove.ts | 4 +- .../commands/option/option-remove.spec.ts | 10 +- .../context/commands/option/option-remove.ts | 4 +- .../connection/connection-add.spec.ts | 4 +- .../connection/connection-doctor.spec.ts | 4 +- .../commands/connection/connection-doctor.ts | 3 +- .../connection/connection-remove.spec.ts | 16 +- .../commands/connection/connection-remove.ts | 6 +- .../connection/connection-schema-add.spec.ts | 4 +- .../external/commands/item/item-add.spec.ts | 4 +- .../file/commands/convert/convert-pdf.spec.ts | 4 +- src/m365/file/commands/file-add.spec.ts | 4 +- src/m365/file/commands/file-list.spec.ts | 4 +- src/m365/flow/commands/flow-export.spec.ts | 4 +- src/m365/flow/commands/flow-list.spec.ts | 4 +- src/m365/flow/commands/flow-remove.spec.ts | 32 +- src/m365/flow/commands/flow-remove.ts | 4 +- .../flow/commands/owner/owner-ensure.spec.ts | 10 +- .../flow/commands/owner/owner-list.spec.ts | 4 +- src/m365/flow/commands/owner/owner-list.ts | 4 +- .../flow/commands/owner/owner-remove.spec.ts | 22 +- src/m365/flow/commands/owner/owner-remove.ts | 4 +- src/m365/flow/commands/run/run-cancel.spec.ts | 28 +- src/m365/flow/commands/run/run-cancel.ts | 4 +- src/m365/flow/commands/run/run-get.spec.ts | 4 +- src/m365/flow/commands/run/run-list.spec.ts | 4 +- .../flow/commands/run/run-resubmit.spec.ts | 28 +- src/m365/flow/commands/run/run-resubmit.ts | 4 +- .../commands/changelog/changelog-list.spec.ts | 4 +- .../commands/changelog/changelog-list.ts | 6 +- .../schemaextension-add.spec.ts | 4 +- .../schemaextension-list.spec.ts | 4 +- .../schemaextension-remove.spec.ts | 14 +- .../schemaextension/schemaextension-remove.ts | 4 +- .../schemaextension-set.spec.ts | 4 +- .../subscription/subscription-add.spec.ts | 4 +- .../commands/notebook/notebook-list.spec.ts | 4 +- .../onenote/commands/page/page-list.spec.ts | 8 +- .../outlook/commands/mail/mail-send.spec.ts | 4 +- .../commands/message/message-get.spec.ts | 6 +- .../commands/message/message-list.spec.ts | 10 +- .../outlook/commands/message/message-list.ts | 4 +- .../commands/message/message-move.spec.ts | 10 +- .../outlook/commands/message/message-move.ts | 4 +- .../pa/commands/app/app-consent-set.spec.ts | 16 +- src/m365/pa/commands/app/app-consent-set.ts | 4 +- src/m365/pa/commands/app/app-export.spec.ts | 4 +- src/m365/pa/commands/app/app-get.spec.ts | 18 +- src/m365/pa/commands/app/app-get.ts | 4 +- src/m365/pa/commands/app/app-list.spec.ts | 4 +- .../pa/commands/app/app-owner-set.spec.ts | 6 +- .../app/app-permission-ensure.spec.ts | 6 +- .../commands/app/app-permission-list.spec.ts | 4 +- .../app/app-permission-remove.spec.ts | 14 +- .../pa/commands/app/app-permission-remove.ts | 4 +- src/m365/pa/commands/app/app-remove.spec.ts | 32 +- src/m365/pa/commands/app/app-remove.ts | 4 +- .../connector/connector-export.spec.ts | 4 +- .../commands/bucket/bucket-add.spec.ts | 6 +- .../commands/bucket/bucket-get.spec.ts | 12 +- .../planner/commands/bucket/bucket-get.ts | 4 +- .../commands/bucket/bucket-list.spec.ts | 6 +- .../commands/bucket/bucket-remove.spec.ts | 28 +- .../planner/commands/bucket/bucket-remove.ts | 6 +- .../commands/bucket/bucket-set.spec.ts | 12 +- .../planner/commands/bucket/bucket-set.ts | 4 +- .../planner/commands/plan/plan-add.spec.ts | 6 +- .../planner/commands/plan/plan-get.spec.ts | 4 +- .../planner/commands/plan/plan-list.spec.ts | 6 +- .../planner/commands/plan/plan-remove.spec.ts | 16 +- src/m365/planner/commands/plan/plan-remove.ts | 4 +- .../planner/commands/plan/plan-set.spec.ts | 6 +- .../commands/roster/roster-member-add.spec.ts | 4 +- .../commands/roster/roster-member-get.spec.ts | 4 +- .../roster/roster-member-remove.spec.ts | 20 +- .../commands/roster/roster-member-remove.ts | 6 +- .../commands/roster/roster-plan-list.spec.ts | 4 +- .../commands/roster/roster-remove.spec.ts | 10 +- .../planner/commands/roster/roster-remove.ts | 4 +- .../planner/commands/task/task-add.spec.ts | 6 +- .../commands/task/task-checklistitem-add.ts | 4 +- .../commands/task/task-checklistitem-list.ts | 4 +- .../task/task-checklistitem-remove.spec.ts | 14 +- .../task/task-checklistitem-remove.ts | 4 +- .../planner/commands/task/task-get.spec.ts | 14 +- src/m365/planner/commands/task/task-get.ts | 6 +- .../planner/commands/task/task-list.spec.ts | 8 +- .../commands/task/task-reference-add.spec.ts | 4 +- .../task/task-reference-remove.spec.ts | 14 +- .../commands/task/task-reference-remove.ts | 4 +- .../planner/commands/task/task-remove.spec.ts | 36 +- src/m365/planner/commands/task/task-remove.ts | 8 +- .../planner/commands/task/task-set.spec.ts | 8 +- .../tenant/tenant-settings-set.spec.ts | 4 +- .../aibuildermodel/aibuildermodel-get.spec.ts | 12 +- .../aibuildermodel/aibuildermodel-get.ts | 4 +- .../aibuildermodel-remove.spec.ts | 20 +- .../aibuildermodel/aibuildermodel-remove.ts | 6 +- src/m365/pp/commands/card/card-clone.spec.ts | 10 +- src/m365/pp/commands/card/card-clone.ts | 4 +- src/m365/pp/commands/card/card-get.spec.ts | 8 +- src/m365/pp/commands/card/card-get.ts | 4 +- src/m365/pp/commands/card/card-remove.spec.ts | 20 +- src/m365/pp/commands/card/card-remove.ts | 6 +- .../pp/commands/chatbot/chatbot-get.spec.ts | 12 +- src/m365/pp/commands/chatbot/chatbot-get.ts | 4 +- .../commands/chatbot/chatbot-remove.spec.ts | 16 +- .../pp/commands/chatbot/chatbot-remove.ts | 6 +- .../dataverse/dataverse-table-remove.spec.ts | 10 +- .../dataverse/dataverse-table-remove.ts | 4 +- .../dataverse-table-row-list.spec.ts | 4 +- .../dataverse-table-row-remove.spec.ts | 18 +- .../dataverse/dataverse-table-row-remove.ts | 4 +- .../pp/commands/gateway/gateway-get.spec.ts | 4 +- .../managementapp/managementapp-add.spec.ts | 10 +- .../managementapp/managementapp-add.ts | 4 +- .../pp/commands/solution/solution-get.spec.ts | 4 +- src/m365/pp/commands/solution/solution-get.ts | 4 +- .../pp/commands/solution/solution-list.ts | 4 +- .../solution/solution-publish.spec.ts | 12 +- .../pp/commands/solution/solution-publish.ts | 4 +- .../solution/solution-publisher-add.spec.ts | 4 +- .../solution/solution-publisher-get.spec.ts | 4 +- .../solution-publisher-remove.spec.ts | 16 +- .../solution/solution-publisher-remove.ts | 6 +- .../commands/solution/solution-remove.spec.ts | 16 +- .../pp/commands/solution/solution-remove.ts | 6 +- .../tenant/tenant-settings-set.spec.ts | 4 +- .../commands/auditlog/auditlog-list.spec.ts | 4 +- .../retentionevent/retentionevent-add.spec.ts | 4 +- .../retentionevent/retentionevent-get.spec.ts | 4 +- .../retentionevent-remove.spec.ts | 12 +- .../retentionevent/retentionevent-remove.ts | 4 +- .../retentioneventtype-get.spec.ts | 4 +- .../retentioneventtype-remove.spec.ts | 12 +- .../retentioneventtype-remove.ts | 4 +- .../retentioneventtype-set.spec.ts | 4 +- .../retentionlabel/retentionlabel-add.spec.ts | 4 +- .../retentionlabel/retentionlabel-get.spec.ts | 4 +- .../retentionlabel-remove.spec.ts | 12 +- .../retentionlabel/retentionlabel-remove.ts | 4 +- .../retentionlabel/retentionlabel-set.spec.ts | 4 +- .../sensitivitylabel-get.spec.ts | 4 +- .../sensitivitylabel-list.spec.ts | 4 +- ...nsitivitylabel-policysettings-list.spec.ts | 4 +- .../threatassessment-get.spec.ts | 4 +- .../commands/package/package-generate.spec.ts | 6 +- .../commands/project/project-doctor.spec.ts | 20 +- .../project/project-externalize.spec.ts | 10 +- .../project-github-workflow-add.spec.ts | 4 +- .../project/project-permissions-grant.spec.ts | 10 +- .../project/project-permissions-grant.ts | 4 +- .../commands/project/project-upgrade.spec.ts | 4 +- src/m365/spfx/commands/spfx-doctor.spec.ts | 4 +- src/m365/spo/commands/app/app-add.spec.ts | 6 +- src/m365/spo/commands/app/app-add.ts | 4 +- src/m365/spo/commands/app/app-deploy.spec.ts | 8 +- src/m365/spo/commands/app/app-get.spec.ts | 6 +- src/m365/spo/commands/app/app-install.spec.ts | 4 +- .../commands/app/app-instance-list.spec.ts | 4 +- src/m365/spo/commands/app/app-list.spec.ts | 4 +- src/m365/spo/commands/app/app-remove.spec.ts | 16 +- src/m365/spo/commands/app/app-remove.ts | 4 +- src/m365/spo/commands/app/app-retract.spec.ts | 16 +- src/m365/spo/commands/app/app-retract.ts | 4 +- .../app/app-teamspackage-download.spec.ts | 4 +- .../spo/commands/app/app-uninstall.spec.ts | 16 +- src/m365/spo/commands/app/app-uninstall.ts | 4 +- src/m365/spo/commands/app/app-upgrade.spec.ts | 4 +- .../applicationcustomizer-add.spec.ts | 4 +- .../applicationcustomizer-get.spec.ts | 10 +- .../applicationcustomizer-get.ts | 4 +- .../applicationcustomizer-list.spec.ts | 4 +- .../applicationcustomizer-remove.spec.ts | 26 +- .../applicationcustomizer-remove.ts | 6 +- .../applicationcustomizer-set.spec.ts | 12 +- .../applicationcustomizer-set.ts | 4 +- .../spo/commands/apppage/apppage-add.spec.ts | 4 +- .../spo/commands/apppage/apppage-set.spec.ts | 6 +- src/m365/spo/commands/cdn/cdn-get.spec.ts | 4 +- .../spo/commands/cdn/cdn-origin-add.spec.ts | 4 +- .../spo/commands/cdn/cdn-origin-list.spec.ts | 4 +- .../commands/cdn/cdn-origin-remove.spec.ts | 16 +- .../spo/commands/cdn/cdn-origin-remove.ts | 4 +- .../spo/commands/cdn/cdn-policy-list.spec.ts | 4 +- .../spo/commands/cdn/cdn-policy-set.spec.ts | 4 +- src/m365/spo/commands/cdn/cdn-set.spec.ts | 4 +- .../commandset/commandset-add.spec.ts | 4 +- .../commandset/commandset-get.spec.ts | 12 +- .../spo/commands/commandset/commandset-get.ts | 4 +- .../commandset/commandset-list.spec.ts | 4 +- .../commandset/commandset-remove.spec.ts | 26 +- .../commands/commandset/commandset-remove.ts | 6 +- .../commandset/commandset-set.spec.ts | 10 +- .../spo/commands/commandset/commandset-set.ts | 4 +- .../contenttype/contenttype-add.spec.ts | 20 +- .../commands/contenttype/contenttype-add.ts | 4 +- .../contenttype-field-remove.spec.ts | 66 +- .../contenttype/contenttype-field-remove.ts | 4 +- .../contenttype/contenttype-field-set.spec.ts | 4 +- .../contenttype/contenttype-get.spec.ts | 6 +- .../contenttype/contenttype-list.spec.ts | 4 +- .../contenttype/contenttype-remove.spec.ts | 26 +- .../contenttype/contenttype-remove.ts | 4 +- .../contenttype/contenttype-set.spec.ts | 4 +- .../customaction/customaction-add.spec.ts | 4 +- .../customaction/customaction-clear.spec.ts | 18 +- .../customaction/customaction-clear.ts | 4 +- .../customaction/customaction-get.spec.ts | 14 +- .../commands/customaction/customaction-get.ts | 6 +- .../customaction/customaction-list.spec.ts | 4 +- .../customaction/customaction-remove.spec.ts | 30 +- .../customaction/customaction-remove.ts | 6 +- .../customaction/customaction-set.spec.ts | 6 +- .../eventreceiver/eventreceiver-get.spec.ts | 12 +- .../eventreceiver/eventreceiver-get.ts | 4 +- .../eventreceiver/eventreceiver-list.spec.ts | 4 +- .../eventreceiver-remove.spec.ts | 44 +- .../eventreceiver/eventreceiver-remove.ts | 6 +- .../externaluser/externaluser-list.spec.ts | 4 +- .../commands/feature/feature-disable.spec.ts | 4 +- .../commands/feature/feature-enable.spec.ts | 6 +- .../spo/commands/feature/feature-list.spec.ts | 4 +- src/m365/spo/commands/field/field-add.spec.ts | 4 +- src/m365/spo/commands/field/field-get.spec.ts | 4 +- .../spo/commands/field/field-list.spec.ts | 4 +- .../spo/commands/field/field-remove.spec.ts | 26 +- src/m365/spo/commands/field/field-remove.ts | 4 +- src/m365/spo/commands/field/field-set.spec.ts | 6 +- src/m365/spo/commands/file/file-add.spec.ts | 4 +- .../spo/commands/file/file-checkin.spec.ts | 6 +- .../commands/file/file-checkout-undo.spec.ts | 16 +- .../spo/commands/file/file-checkout-undo.ts | 4 +- .../spo/commands/file/file-checkout.spec.ts | 6 +- src/m365/spo/commands/file/file-copy.spec.ts | 8 +- src/m365/spo/commands/file/file-get.spec.ts | 6 +- src/m365/spo/commands/file/file-list.spec.ts | 4 +- src/m365/spo/commands/file/file-move.spec.ts | 4 +- .../spo/commands/file/file-remove.spec.ts | 70 +- src/m365/spo/commands/file/file-remove.ts | 4 +- .../spo/commands/file/file-rename.spec.ts | 12 +- src/m365/spo/commands/file/file-rename.ts | 4 +- .../file/file-retentionlabel-ensure.spec.ts | 6 +- .../file/file-retentionlabel-remove.spec.ts | 24 +- .../file/file-retentionlabel-remove.ts | 4 +- .../file/file-roleassignment-add.spec.ts | 22 +- .../commands/file/file-roleassignment-add.ts | 10 +- .../file/file-roleassignment-remove.spec.ts | 18 +- .../file/file-roleassignment-remove.ts | 10 +- .../file/file-roleinheritance-break.spec.ts | 16 +- .../file/file-roleinheritance-break.ts | 6 +- .../file/file-roleinheritance-reset.spec.ts | 14 +- .../file/file-roleinheritance-reset.ts | 6 +- .../file/file-sharinginfo-get.spec.ts | 6 +- .../spo/commands/file/file-sharinginfo-get.ts | 4 +- .../file/file-sharinglink-add.spec.ts | 4 +- .../file/file-sharinglink-clear.spec.ts | 30 +- .../commands/file/file-sharinglink-clear.ts | 6 +- .../file/file-sharinglink-get.spec.ts | 4 +- .../file/file-sharinglink-list.spec.ts | 4 +- .../commands/file/file-sharinglink-list.ts | 4 +- .../file/file-sharinglink-remove.spec.ts | 16 +- .../commands/file/file-sharinglink-remove.ts | 4 +- .../file/file-sharinglink-set.spec.ts | 4 +- .../commands/file/file-version-clear.spec.ts | 20 +- .../spo/commands/file/file-version-clear.ts | 4 +- .../commands/file/file-version-get.spec.ts | 4 +- .../commands/file/file-version-list.spec.ts | 4 +- .../commands/file/file-version-remove.spec.ts | 20 +- .../spo/commands/file/file-version-remove.ts | 4 +- .../file/file-version-restore.spec.ts | 20 +- .../spo/commands/file/file-version-restore.ts | 4 +- .../spo/commands/folder/folder-add.spec.ts | 4 +- .../spo/commands/folder/folder-copy.spec.ts | 4 +- .../spo/commands/folder/folder-get.spec.ts | 4 +- .../spo/commands/folder/folder-list.spec.ts | 4 +- .../spo/commands/folder/folder-move.spec.ts | 4 +- .../spo/commands/folder/folder-remove.spec.ts | 28 +- src/m365/spo/commands/folder/folder-remove.ts | 4 +- .../spo/commands/folder/folder-rename.spec.ts | 4 +- .../folder-retentionlabel-ensure.spec.ts | 8 +- .../folder-retentionlabel-remove.spec.ts | 24 +- .../folder/folder-retentionlabel-remove.ts | 4 +- .../folder/folder-roleassignment-add.spec.ts | 20 +- .../folder/folder-roleassignment-add.ts | 8 +- .../folder-roleassignment-remove.spec.ts | 26 +- .../folder/folder-roleassignment-remove.ts | 8 +- .../folder-roleinheritance-break.spec.ts | 20 +- .../folder/folder-roleinheritance-break.ts | 4 +- .../folder-roleinheritance-reset.spec.ts | 16 +- .../folder/folder-roleinheritance-reset.ts | 4 +- src/m365/spo/commands/group/group-add.spec.ts | 4 +- src/m365/spo/commands/group/group-get.spec.ts | 6 +- .../spo/commands/group/group-list.spec.ts | 4 +- src/m365/spo/commands/group/group-list.ts | 4 +- .../commands/group/group-member-add.spec.ts | 10 +- .../commands/group/group-member-list.spec.ts | 8 +- .../group/group-member-remove.spec.ts | 46 +- .../spo/commands/group/group-member-remove.ts | 18 +- .../spo/commands/group/group-remove.spec.ts | 14 +- src/m365/spo/commands/group/group-remove.ts | 4 +- src/m365/spo/commands/group/group-set.spec.ts | 10 +- src/m365/spo/commands/group/group-set.ts | 4 +- .../hidedefaultthemes-set.spec.ts | 8 +- .../commands/homesite/homesite-remove.spec.ts | 14 +- .../spo/commands/homesite/homesite-remove.ts | 4 +- .../commands/homesite/homesite-set.spec.ts | 4 +- .../commands/hubsite/hubsite-connect.spec.ts | 12 +- .../spo/commands/hubsite/hubsite-connect.ts | 4 +- .../commands/hubsite/hubsite-data-get.spec.ts | 4 +- .../hubsite/hubsite-disconnect.spec.ts | 20 +- .../commands/hubsite/hubsite-disconnect.ts | 6 +- .../spo/commands/hubsite/hubsite-get.spec.ts | 16 +- src/m365/spo/commands/hubsite/hubsite-get.ts | 8 +- .../commands/hubsite/hubsite-register.spec.ts | 4 +- .../hubsite/hubsite-rights-grant.spec.ts | 4 +- .../hubsite/hubsite-rights-revoke.spec.ts | 16 +- .../commands/hubsite/hubsite-rights-revoke.ts | 4 +- .../spo/commands/hubsite/hubsite-set.spec.ts | 4 +- .../hubsite/hubsite-unregister.spec.ts | 16 +- .../commands/hubsite/hubsite-unregister.ts | 4 +- .../knowledgehub/knowledgehub-remove.spec.ts | 14 +- .../knowledgehub/knowledgehub-remove.ts | 4 +- .../knowledgehub/knowledgehub-set.spec.ts | 4 +- src/m365/spo/commands/list/list-add.spec.ts | 4 +- .../list/list-contenttype-add.spec.ts | 6 +- .../list/list-contenttype-default-set.spec.ts | 6 +- .../list/list-contenttype-list.spec.ts | 6 +- .../list/list-contenttype-remove.spec.ts | 38 +- .../commands/list/list-contenttype-remove.ts | 4 +- src/m365/spo/commands/list/list-get.spec.ts | 4 +- src/m365/spo/commands/list/list-list.spec.ts | 4 +- .../spo/commands/list/list-remove.spec.ts | 18 +- src/m365/spo/commands/list/list-remove.ts | 4 +- .../list/list-retentionlabel-ensure.spec.ts | 6 +- .../list/list-retentionlabel-get.spec.ts | 4 +- .../list/list-retentionlabel-remove.spec.ts | 22 +- .../list/list-retentionlabel-remove.ts | 4 +- .../list/list-roleassignment-add.spec.ts | 4 +- .../list/list-roleassignment-remove.spec.ts | 26 +- .../list/list-roleassignment-remove.ts | 8 +- .../list/list-roleinheritance-break.spec.ts | 18 +- .../list/list-roleinheritance-break.ts | 4 +- .../list/list-roleinheritance-reset.spec.ts | 18 +- .../list/list-roleinheritance-reset.ts | 4 +- .../list/list-sensitivitylabel-ensure.spec.ts | 8 +- src/m365/spo/commands/list/list-set.spec.ts | 6 +- .../commands/list/list-sitescript-get.spec.ts | 4 +- .../spo/commands/list/list-view-add.spec.ts | 4 +- .../commands/list/list-view-field-add.spec.ts | 4 +- .../list/list-view-field-remove.spec.ts | 44 +- .../commands/list/list-view-field-remove.ts | 4 +- .../commands/list/list-view-field-set.spec.ts | 4 +- .../spo/commands/list/list-view-get.spec.ts | 6 +- .../spo/commands/list/list-view-list.spec.ts | 4 +- .../commands/list/list-view-remove.spec.ts | 44 +- .../spo/commands/list/list-view-remove.ts | 4 +- .../spo/commands/list/list-view-set.spec.ts | 4 +- .../commands/list/list-webhook-add.spec.ts | 4 +- .../commands/list/list-webhook-get.spec.ts | 6 +- .../commands/list/list-webhook-list.spec.ts | 4 +- .../commands/list/list-webhook-remove.spec.ts | 38 +- .../spo/commands/list/list-webhook-remove.ts | 4 +- .../commands/list/list-webhook-set.spec.ts | 6 +- .../commands/listitem/listitem-add.spec.ts | 6 +- .../listitem/listitem-attachment-add.spec.ts | 6 +- .../listitem/listitem-attachment-get.spec.ts | 6 +- .../listitem/listitem-attachment-list.spec.ts | 6 +- .../listitem-attachment-remove.spec.ts | 26 +- .../listitem/listitem-attachment-remove.ts | 4 +- .../listitem/listitem-attachment-set.spec.ts | 6 +- .../listitem/listitem-batch-add.spec.ts | 4 +- .../listitem/listitem-batch-set.spec.ts | 4 +- .../commands/listitem/listitem-get.spec.ts | 6 +- .../listitem/listitem-isrecord.spec.ts | 6 +- .../commands/listitem/listitem-list.spec.ts | 4 +- .../spo/commands/listitem/listitem-list.ts | 4 +- .../listitem/listitem-record-declare.spec.ts | 6 +- .../listitem/listitem-record-lock.spec.ts | 6 +- .../listitem-record-undeclare.spec.ts | 6 +- .../listitem/listitem-record-unlock.spec.ts | 6 +- .../commands/listitem/listitem-remove.spec.ts | 26 +- .../spo/commands/listitem/listitem-remove.ts | 4 +- .../listitem-retentionlabel-ensure.spec.ts | 6 +- .../listitem-retentionlabel-remove.spec.ts | 26 +- .../listitem-retentionlabel-remove.ts | 4 +- .../listitem-roleassignment-add.spec.ts | 20 +- .../listitem/listitem-roleassignment-add.ts | 8 +- .../listitem-roleassignment-remove.spec.ts | 24 +- .../listitem-roleassignment-remove.ts | 8 +- .../listitem-roleinheritance-break.spec.ts | 16 +- .../listitem-roleinheritance-break.ts | 4 +- .../listitem-roleinheritance-reset.spec.ts | 16 +- .../listitem-roleinheritance-reset.ts | 4 +- .../commands/listitem/listitem-set.spec.ts | 6 +- src/m365/spo/commands/mail/mail-send.spec.ts | 6 +- .../navigation/navigation-node-add.spec.ts | 4 +- .../navigation/navigation-node-get.spec.ts | 4 +- .../navigation/navigation-node-list.spec.ts | 4 +- .../navigation/navigation-node-remove.spec.ts | 16 +- .../navigation/navigation-node-remove.ts | 4 +- .../navigation/navigation-node-set.spec.ts | 4 +- .../orgassetslibrary-add.spec.ts | 4 +- .../orgassetslibrary-remove.spec.ts | 18 +- .../orgassetslibrary-remove.ts | 4 +- .../orgnewssite/orgnewssite-remove.spec.ts | 16 +- .../orgnewssite/orgnewssite-remove.ts | 4 +- .../orgnewssite/orgnewssite-set.spec.ts | 4 +- src/m365/spo/commands/page/page-add.spec.ts | 48 +- src/m365/spo/commands/page/page-add.ts | 8 +- .../page/page-clientsidewebpart-add.spec.ts | 4 +- .../spo/commands/page/page-column-get.spec.ts | 6 +- src/m365/spo/commands/page/page-column-get.ts | 4 +- .../commands/page/page-column-list.spec.ts | 6 +- .../spo/commands/page/page-column-list.ts | 4 +- .../commands/page/page-control-get.spec.ts | 4 +- .../commands/page/page-control-list.spec.ts | 4 +- .../commands/page/page-control-set.spec.ts | 4 +- src/m365/spo/commands/page/page-copy.spec.ts | 4 +- src/m365/spo/commands/page/page-get.spec.ts | 4 +- .../spo/commands/page/page-header-set.spec.ts | 4 +- src/m365/spo/commands/page/page-list.spec.ts | 4 +- .../spo/commands/page/page-remove.spec.ts | 28 +- src/m365/spo/commands/page/page-remove.ts | 4 +- .../commands/page/page-section-add.spec.ts | 4 +- .../commands/page/page-section-get.spec.ts | 6 +- .../spo/commands/page/page-section-get.ts | 4 +- .../commands/page/page-section-list.spec.ts | 4 +- .../spo/commands/page/page-section-list.ts | 4 +- src/m365/spo/commands/page/page-set.spec.ts | 38 +- src/m365/spo/commands/page/page-set.ts | 10 +- .../commands/page/page-template-list.spec.ts | 4 +- .../spo/commands/page/page-text-add.spec.ts | 4 +- .../propertybag/propertybag-get.spec.ts | 4 +- .../propertybag/propertybag-list.spec.ts | 4 +- .../propertybag/propertybag-remove.spec.ts | 18 +- .../propertybag/propertybag-remove.ts | 4 +- .../propertybag/propertybag-set.spec.ts | 6 +- .../roledefinition/roledefinition-add.spec.ts | 4 +- .../roledefinition/roledefinition-get.spec.ts | 4 +- .../roledefinition-list.spec.ts | 4 +- .../roledefinition-remove.spec.ts | 16 +- .../roledefinition/roledefinition-remove.ts | 4 +- ...rincipal-permissionrequest-approve.spec.ts | 10 +- ...viceprincipal-permissionrequest-approve.ts | 4 +- ...ceprincipal-permissionrequest-deny.spec.ts | 4 +- .../serviceprincipal-set.spec.ts | 16 +- .../serviceprincipal/serviceprincipal-set.ts | 4 +- src/m365/spo/commands/site/site-add.spec.ts | 4 +- .../commands/site/site-appcatalog-add.spec.ts | 6 +- .../site/site-appcatalog-remove.spec.ts | 6 +- .../site/site-apppermission-add.spec.ts | 6 +- .../site/site-apppermission-get.spec.ts | 4 +- .../site/site-apppermission-list.spec.ts | 4 +- .../site/site-apppermission-remove.spec.ts | 26 +- .../site/site-apppermission-remove.ts | 4 +- .../site/site-apppermission-set.spec.ts | 6 +- .../spo/commands/site/site-chrome-set.spec.ts | 4 +- .../site/site-commsite-enable.spec.ts | 8 +- src/m365/spo/commands/site/site-get.spec.ts | 4 +- .../spo/commands/site/site-groupify.spec.ts | 4 +- .../site/site-hubsite-connect.spec.ts | 4 +- .../site/site-hubsite-disconnect.spec.ts | 16 +- .../commands/site/site-hubsite-disconnect.ts | 4 +- .../site/site-hubsite-theme-sync.spec.ts | 4 +- .../site-inplacerecordsmanagement-set.spec.ts | 4 +- src/m365/spo/commands/site/site-list.spec.ts | 4 +- .../site/site-recyclebinitem-clear.spec.ts | 12 +- .../site/site-recyclebinitem-clear.ts | 4 +- .../site/site-recyclebinitem-list.spec.ts | 4 +- .../site/site-recyclebinitem-move.spec.ts | 12 +- .../commands/site/site-recyclebinitem-move.ts | 4 +- .../site/site-recyclebinitem-remove.spec.ts | 12 +- .../site/site-recyclebinitem-remove.ts | 4 +- .../site/site-recyclebinitem-restore.spec.ts | 4 +- .../spo/commands/site/site-remove.spec.ts | 20 +- src/m365/spo/commands/site/site-remove.ts | 4 +- .../spo/commands/site/site-rename.spec.ts | 6 +- src/m365/spo/commands/site/site-set.spec.ts | 16 +- src/m365/spo/commands/site/site-set.ts | 6 +- .../sitedesign/sitedesign-add.spec.ts | 4 +- .../sitedesign/sitedesign-apply.spec.ts | 4 +- .../sitedesign/sitedesign-get.spec.ts | 10 +- .../spo/commands/sitedesign/sitedesign-get.ts | 4 +- .../sitedesign/sitedesign-remove.spec.ts | 16 +- .../commands/sitedesign/sitedesign-remove.ts | 4 +- .../sitedesign-rights-grant.spec.ts | 4 +- .../sitedesign/sitedesign-rights-list.spec.ts | 4 +- .../sitedesign-rights-revoke.spec.ts | 12 +- .../sitedesign/sitedesign-rights-revoke.ts | 4 +- .../sitedesign/sitedesign-run-list.spec.ts | 4 +- .../sitedesign-run-status-get.spec.ts | 4 +- .../sitedesign/sitedesign-set.spec.ts | 6 +- .../sitedesign/sitedesign-task-get.spec.ts | 4 +- .../sitedesign/sitedesign-task-list.spec.ts | 4 +- .../sitedesign/sitedesign-task-remove.spec.ts | 16 +- .../sitedesign/sitedesign-task-remove.ts | 4 +- .../sitescript/sitescript-add.spec.ts | 4 +- .../sitescript/sitescript-get.spec.ts | 4 +- .../sitescript/sitescript-remove.spec.ts | 12 +- .../commands/sitescript/sitescript-remove.ts | 4 +- .../sitescript/sitescript-set.spec.ts | 4 +- src/m365/spo/commands/spo-get.spec.ts | 4 +- src/m365/spo/commands/spo-search.spec.ts | 4 +- src/m365/spo/commands/spo-search.ts | 4 +- src/m365/spo/commands/spo-set.spec.ts | 4 +- .../storageentity/storageentity-list.spec.ts | 6 +- .../storageentity-remove.spec.ts | 22 +- .../storageentity/storageentity-remove.ts | 4 +- .../storageentity/storageentity-set.spec.ts | 4 +- .../tenant/tenant-appcatalog-add.spec.ts | 104 +- .../commands/tenant/tenant-appcatalog-add.ts | 10 +- .../tenant-applicationcustomizer-add.spec.ts | 28 +- .../tenant-applicationcustomizer-add.ts | 10 +- .../tenant-applicationcustomizer-get.spec.ts | 10 +- .../tenant-applicationcustomizer-get.ts | 4 +- ...enant-applicationcustomizer-remove.spec.ts | 40 +- .../tenant-applicationcustomizer-remove.ts | 6 +- .../tenant-applicationcustomizer-set.spec.ts | 26 +- .../tenant-applicationcustomizer-set.ts | 8 +- .../tenant/tenant-commandset-add.spec.ts | 36 +- .../commands/tenant/tenant-commandset-add.ts | 10 +- .../tenant/tenant-commandset-get.spec.ts | 12 +- .../commands/tenant/tenant-commandset-get.ts | 4 +- .../tenant/tenant-commandset-remove.spec.ts | 40 +- .../tenant/tenant-commandset-remove.ts | 6 +- .../tenant/tenant-commandset-set.spec.ts | 4 +- .../tenant-recyclebinitem-remove.spec.ts | 12 +- .../tenant/tenant-recyclebinitem-remove.ts | 4 +- .../tenant-recyclebinitem-restore.spec.ts | 4 +- .../tenant/tenant-settings-set.spec.ts | 4 +- src/m365/spo/commands/term/term-add.spec.ts | 6 +- src/m365/spo/commands/term/term-get.spec.ts | 10 +- src/m365/spo/commands/term/term-get.ts | 4 +- .../spo/commands/term/term-group-add.spec.ts | 4 +- .../spo/commands/term/term-group-get.spec.ts | 6 +- .../spo/commands/term/term-group-list.spec.ts | 4 +- src/m365/spo/commands/term/term-list.spec.ts | 6 +- src/m365/spo/commands/term/term-list.ts | 4 +- .../spo/commands/term/term-set-add.spec.ts | 6 +- .../spo/commands/term/term-set-get.spec.ts | 6 +- .../spo/commands/term/term-set-list.spec.ts | 6 +- .../spo/commands/theme/theme-apply.spec.ts | 4 +- .../spo/commands/theme/theme-remove.spec.ts | 14 +- src/m365/spo/commands/theme/theme-remove.ts | 4 +- src/m365/spo/commands/theme/theme-set.spec.ts | 4 +- .../spo/commands/user/user-ensure.spec.ts | 4 +- src/m365/spo/commands/user/user-get.spec.ts | 6 +- src/m365/spo/commands/user/user-list.spec.ts | 4 +- .../spo/commands/user/user-remove.spec.ts | 18 +- src/m365/spo/commands/user/user-remove.ts | 4 +- .../userprofile/userprofile-get.spec.ts | 4 +- .../commands/userprofile/userprofile-get.ts | 4 +- src/m365/spo/commands/web/web-add.spec.ts | 6 +- .../web/web-clientsidewebpart-list.spec.ts | 4 +- src/m365/spo/commands/web/web-get.spec.ts | 4 +- .../web/web-installedlanguage-list.spec.ts | 4 +- src/m365/spo/commands/web/web-list.spec.ts | 4 +- src/m365/spo/commands/web/web-reindex.spec.ts | 4 +- src/m365/spo/commands/web/web-remove.spec.ts | 12 +- src/m365/spo/commands/web/web-remove.ts | 4 +- .../web/web-retentionlabel-list.spec.ts | 4 +- .../web/web-roleassignment-add.spec.ts | 18 +- .../commands/web/web-roleassignment-add.ts | 8 +- .../web/web-roleassignment-remove.spec.ts | 24 +- .../commands/web/web-roleassignment-remove.ts | 8 +- .../web/web-roleinheritance-break.spec.ts | 12 +- .../commands/web/web-roleinheritance-break.ts | 4 +- .../web/web-roleinheritance-reset.spec.ts | 12 +- .../commands/web/web-roleinheritance-reset.ts | 4 +- src/m365/spo/commands/web/web-set.spec.ts | 4 +- .../teams/commands/app/app-install.spec.ts | 6 +- src/m365/teams/commands/app/app-install.ts | 4 +- src/m365/teams/commands/app/app-list.spec.ts | 4 +- .../teams/commands/app/app-publish.spec.ts | 4 +- .../teams/commands/app/app-remove.spec.ts | 24 +- src/m365/teams/commands/app/app-remove.ts | 6 +- .../teams/commands/app/app-uninstall.spec.ts | 10 +- src/m365/teams/commands/app/app-uninstall.ts | 4 +- .../teams/commands/app/app-update.spec.ts | 10 +- src/m365/teams/commands/app/app-update.ts | 4 +- .../teams/commands/cache/cache-remove.spec.ts | 18 +- src/m365/teams/commands/cache/cache-remove.ts | 4 +- .../commands/channel/channel-add.spec.ts | 10 +- .../teams/commands/channel/channel-add.ts | 4 +- .../commands/channel/channel-get.spec.ts | 6 +- .../commands/channel/channel-list.spec.ts | 6 +- .../channel/channel-member-add.spec.ts | 12 +- .../commands/channel/channel-member-add.ts | 4 +- .../channel/channel-member-list.spec.ts | 6 +- .../channel/channel-member-remove.spec.ts | 24 +- .../commands/channel/channel-member-remove.ts | 6 +- .../channel/channel-member-set.spec.ts | 10 +- .../commands/channel/channel-member-set.ts | 4 +- .../commands/channel/channel-remove.spec.ts | 20 +- .../teams/commands/channel/channel-remove.ts | 4 +- .../commands/channel/channel-set.spec.ts | 4 +- src/m365/teams/commands/chat/chat-get.spec.ts | 12 +- src/m365/teams/commands/chat/chat-get.ts | 6 +- .../teams/commands/chat/chat-list.spec.ts | 4 +- .../commands/chat/chat-member-add.spec.ts | 4 +- .../commands/chat/chat-member-list.spec.ts | 6 +- .../commands/chat/chat-member-remove.spec.ts | 12 +- .../teams/commands/chat/chat-member-remove.ts | 4 +- .../commands/chat/chat-message-list.spec.ts | 6 +- .../commands/chat/chat-message-send.spec.ts | 12 +- .../teams/commands/chat/chat-message-send.ts | 6 +- .../funsettings/funsettings-list.spec.ts | 4 +- .../funsettings/funsettings-set.spec.ts | 4 +- .../guestsettings/guestsettings-list.spec.ts | 4 +- .../guestsettings/guestsettings-set.spec.ts | 4 +- .../commands/meeting/meeting-add.spec.ts | 4 +- .../meeting-attendancereport-list.spec.ts | 10 +- .../meeting/meeting-attendancereport-list.ts | 4 +- .../commands/meeting/meeting-get.spec.ts | 4 +- .../commands/meeting/meeting-list.spec.ts | 4 +- .../meeting/meeting-transcript-list.spec.ts | 8 +- .../membersettings-list.spec.ts | 4 +- .../membersettings/membersettings-set.spec.ts | 4 +- .../commands/message/message-get.spec.ts | 6 +- .../commands/message/message-list.spec.ts | 6 +- .../message/message-reply-list.spec.ts | 6 +- .../commands/message/message-send.spec.ts | 4 +- .../messagingsettings-list.spec.ts | 4 +- .../messagingsettings-set.spec.ts | 4 +- .../report/report-directroutingcalls.spec.ts | 4 +- .../commands/report/report-pstncalls.spec.ts | 4 +- src/m365/teams/commands/tab/tab-add.spec.ts | 4 +- src/m365/teams/commands/tab/tab-get.spec.ts | 6 +- src/m365/teams/commands/tab/tab-list.spec.ts | 4 +- .../teams/commands/tab/tab-remove.spec.ts | 14 +- src/m365/teams/commands/tab/tab-remove.ts | 4 +- src/m365/teams/commands/team/team-add.spec.ts | 4 +- .../teams/commands/team/team-app-list.spec.ts | 10 +- src/m365/teams/commands/team/team-app-list.ts | 6 +- .../teams/commands/team/team-archive.spec.ts | 6 +- .../teams/commands/team/team-clone.spec.ts | 6 +- src/m365/teams/commands/team/team-get.spec.ts | 6 +- .../teams/commands/team/team-list.spec.ts | 6 +- .../teams/commands/team/team-remove.spec.ts | 16 +- src/m365/teams/commands/team/team-remove.ts | 4 +- src/m365/teams/commands/team/team-set.spec.ts | 4 +- .../commands/team/team-unarchive.spec.ts | 6 +- .../teams/commands/user/user-app-add.spec.ts | 4 +- .../teams/commands/user/user-app-list.spec.ts | 6 +- src/m365/teams/commands/user/user-app-list.ts | 4 +- .../commands/user/user-app-remove.spec.ts | 22 +- .../teams/commands/user/user-app-remove.ts | 6 +- .../teams/commands/user/user-list.spec.ts | 4 +- .../tenant/commands/info/info-get.spec.ts | 4 +- .../people-profilecardproperty-add.spec.ts | 4 +- .../people-profilecardproperty-get.spec.ts | 4 +- .../people-profilecardproperty-remove.spec.ts | 8 +- .../people-profilecardproperty-remove.ts | 4 +- .../people-profilecardproperty-set.spec.ts | 4 +- .../serviceannouncement-health-get.spec.ts | 4 +- .../serviceannouncement-health-list.spec.ts | 4 +- .../serviceannouncement-message-get.spec.ts | 4 +- src/m365/todo/commands/list/list-get.spec.ts | 4 +- .../todo/commands/list/list-remove.spec.ts | 12 +- src/m365/todo/commands/list/list-remove.ts | 4 +- src/m365/todo/commands/list/list-set.spec.ts | 6 +- src/m365/todo/commands/task/task-add.spec.ts | 4 +- src/m365/todo/commands/task/task-get.spec.ts | 6 +- src/m365/todo/commands/task/task-get.ts | 4 +- src/m365/todo/commands/task/task-list.spec.ts | 6 +- src/m365/todo/commands/task/task-list.ts | 4 +- .../todo/commands/task/task-remove.spec.ts | 12 +- src/m365/todo/commands/task/task-remove.ts | 4 +- src/m365/todo/commands/task/task-set.spec.ts | 6 +- .../connections-app-create.spec.ts | 20 +- .../connections/connections-app-create.ts | 6 +- .../yammer/commands/group/group-list.spec.ts | 4 +- .../commands/group/group-user-add.spec.ts | 8 +- .../commands/group/group-user-remove.spec.ts | 16 +- .../commands/group/group-user-remove.ts | 4 +- .../commands/message/message-add.spec.ts | 4 +- .../commands/message/message-get.spec.ts | 6 +- .../commands/message/message-like-set.spec.ts | 16 +- .../commands/message/message-like-set.ts | 4 +- .../commands/message/message-list.spec.ts | 4 +- .../commands/message/message-remove.spec.ts | 12 +- .../yammer/commands/message/message-remove.ts | 4 +- .../commands/network/network-list.spec.ts | 4 +- .../yammer/commands/user/user-get.spec.ts | 4 +- .../yammer/commands/user/user-list.spec.ts | 4 +- .../yammer/commands/yammer-search.spec.ts | 6 +- src/m365/yammer/commands/yammer-search.ts | 4 +- src/telemetry.spec.ts | 12 +- src/telemetry.ts | 4 +- src/utils/aadAdministrativeUnit.spec.ts | 12 +- src/utils/aadAdministrativeUnit.ts | 4 +- src/utils/aadGroup.spec.ts | 13 +- src/utils/aadGroup.ts | 6 +- src/utils/prompt.ts | 11 +- 828 files changed, 4464 insertions(+), 4891 deletions(-) delete mode 100644 src/cli/Cli.ts rename src/cli/{Cli.spec.ts => cli.spec.ts} (83%) create mode 100644 src/cli/cli.ts diff --git a/docs/docs/contribute/new-command/unit-tests.mdx b/docs/docs/contribute/new-command/unit-tests.mdx index 6d7759da5d9..7ba9fc09384 100644 --- a/docs/docs/contribute/new-command/unit-tests.mdx +++ b/docs/docs/contribute/new-command/unit-tests.mdx @@ -51,7 +51,7 @@ Before we start with the test suite, we want to make sure that the basic functio // ... import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { telemetry } from '../../../../telemetry.js'; import { pid } from '../../../../utils/pid.js'; @@ -68,7 +68,7 @@ describe(commands.GROUP_GET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); }); ``` diff --git a/scripts/write-all-commands.js b/scripts/write-all-commands.js index afa0a676c2d..2659ccd7084 100644 --- a/scripts/write-all-commands.js +++ b/scripts/write-all-commands.js @@ -2,7 +2,7 @@ import fs from 'fs'; import path from 'path'; import url, { pathToFileURL } from 'url'; import Command from '../dist/Command.js'; -import { Cli } from '../dist/cli/Cli.js'; +import { cli } from '../dist/cli/cli.js'; import { fsUtil } from '../dist/utils/fsUtil.js'; const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); @@ -11,7 +11,6 @@ const commandHelpFolder = path.join(commandsFolder, '..', '..', 'docs', 'docs', async function loadAllCommands() { const files = fsUtil.readdirR(commandsFolder); - const cli = Cli.getInstance(); await Promise.all(files.map(async (filePath) => { const file = pathToFileURL(filePath).toString(); @@ -23,7 +22,7 @@ async function loadAllCommands() { const command = await import(file); if (command.default instanceof Command) { const helpFilePath = path.relative(commandHelpFolder, getCommandHelpFilePath(command.default.name)); - cli.commands.push(Cli.getCommandInfo(command.default, path.relative(commandsFolder, filePath), helpFilePath)); + cli.commands.push(cli.getCommandInfo(command.default, path.relative(commandsFolder, filePath), helpFilePath)); } } })); diff --git a/src/Auth.spec.ts b/src/Auth.spec.ts index b92be03dc97..897062d4208 100644 --- a/src/Auth.spec.ts +++ b/src/Auth.spec.ts @@ -10,7 +10,7 @@ import authServer from './AuthServer.js'; import { CommandError } from './Command.js'; import { FileTokenStorage } from './auth/FileTokenStorage.js'; import { TokenStorage } from './auth/TokenStorage.js'; -import { Cli } from './cli/Cli.js'; +import { cli } from './cli/cli.js'; import { Logger } from './cli/Logger.js'; import request from './request.js'; import { accessToken } from "./utils/accessToken.js"; @@ -44,7 +44,6 @@ const mockTokenCachePlugin: msal.ICachePlugin = { describe('Auth', () => { let log: any[]; let auth: Auth; - let cli: Cli; let response: DeviceCodeResponse; let openStub: sinon.SinonStub; let clipboardStub: sinon.SinonStub; @@ -85,7 +84,6 @@ describe('Auth', () => { beforeEach(() => { log = []; - cli = Cli.getInstance(); auth = new Auth(); response = { deviceCode: "", @@ -114,7 +112,7 @@ describe('Auth', () => { readFileSyncStub.restore(); initializeServerStub.restore(); sinonUtil.restore([ - cli.config.get, + cli.getConfig().get, request.get, (auth as any).getClientApplication, (auth as any).getDeviceCodeResponse, @@ -384,7 +382,7 @@ describe('Auth', () => { }); it('retrieves new access token using existing refresh token when refresh forced', (done) => { - const config = cli.config; + const config = cli.getConfig(); sinon.stub(config, 'get').callsFake((() => { }) as any); const now = new Date(); now.setSeconds(now.getSeconds() + 1); @@ -413,7 +411,7 @@ describe('Auth', () => { }); it('retrieves access token using device code authentication flow when no refresh token available and no authType specified', (done) => { - const config = cli.config; + const config = cli.getConfig(); sinon.stub(config, 'get').callsFake((() => 'value')); sinon.stub(auth as any, 'getClientApplication').callsFake(_ => publicApplication); sinon.stub(tokenCache, 'getAllAccounts').callsFake(() => []); @@ -463,7 +461,7 @@ describe('Auth', () => { }); it('retrieves token using device code authentication flow when authType deviceCode specified', (done) => { - const config = cli.config; + const config = cli.getConfig(); sinon.stub(config, 'get').callsFake((() => 'value')); sinon.stub(auth as any, 'getClientApplication').callsFake(_ => publicApplication); sinon.stub(tokenCache, 'getAllAccounts').callsFake(() => []); diff --git a/src/Auth.ts b/src/Auth.ts index c59ff3766af..5a0a5747f8d 100644 --- a/src/Auth.ts +++ b/src/Auth.ts @@ -7,7 +7,7 @@ import { CommandError } from './Command.js'; import { FileTokenStorage } from './auth/FileTokenStorage.js'; import { TokenStorage } from './auth/TokenStorage.js'; import { msalCachePlugin } from './auth/msalCachePlugin.js'; -import { Cli } from './cli/Cli.js'; +import { cli } from './cli/cli.js'; import { Logger } from './cli/Logger.js'; import config from './config.js'; import request from './request.js'; @@ -420,7 +420,6 @@ export class Auth { await logger.logToStderr(''); } - const cli = Cli.getInstance(); cli.spinner.text = response.message; cli.spinner.spinner = { frames: ['🌶️ '] @@ -432,11 +431,11 @@ export class Auth { cli.spinner.start(); } - if (Cli.getInstance().getSettingWithDefaultValue(settingsNames.autoOpenLinksInBrowser, false)) { + if (cli.getSettingWithDefaultValue(settingsNames.autoOpenLinksInBrowser, false)) { browserUtil.open(response.verificationUri); } - if (Cli.getInstance().getSettingWithDefaultValue(settingsNames.copyDeviceCodeToClipboard, false)) { + if (cli.getSettingWithDefaultValue(settingsNames.copyDeviceCodeToClipboard, false)) { // _clipboardy is never set before hitting this line, but this check // is implemented so that we can support lazy loading // but also stub it for testing diff --git a/src/Command.spec.ts b/src/Command.spec.ts index 82b887788c4..f389f519a84 100644 --- a/src/Command.spec.ts +++ b/src/Command.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import chalk from 'chalk'; import sinon from 'sinon'; import auth from './Auth.js'; -import { Cli } from './cli/Cli.js'; +import { cli } from './cli/cli.js'; import { Logger } from './cli/Logger.js'; import Command, { CommandError @@ -130,7 +130,6 @@ describe('Command', () => { let telemetryCommandName: any; let logger: Logger; let loggerLogToStderrSpy: sinon.SinonSpy; - let cli: Cli; before(() => { sinon.stub(auth, 'restoreAuth').callsFake(() => Promise.resolve()); @@ -145,7 +144,6 @@ describe('Command', () => { logToStderr: async () => { } }; loggerLogToStderrSpy = sinon.spy(logger, 'logToStderr'); - cli = Cli.getInstance(); }); beforeEach(() => { @@ -170,7 +168,7 @@ describe('Command', () => { it('returns true by default', async () => { const cmd = new MockCommand2(); - assert.strictEqual(await cmd.validate({ options: {} }, Cli.getCommandInfo(cmd)), true); + assert.strictEqual(await cmd.validate({ options: {} }, cli.getCommandInfo(cmd)), true); }); it('removes optional arguments from command name', () => { @@ -534,27 +532,27 @@ describe('Command', () => { it('passes validation when csv output specified', async () => { const cmd = new MockCommand2(); - assert.strictEqual(await cmd.validate({ options: { output: 'csv' } }, Cli.getCommandInfo(cmd)), true); + assert.strictEqual(await cmd.validate({ options: { output: 'csv' } }, cli.getCommandInfo(cmd)), true); }); it('passes validation when json output specified', async () => { const cmd = new MockCommand2(); - assert.strictEqual(await cmd.validate({ options: { output: 'json' } }, Cli.getCommandInfo(cmd)), true); + assert.strictEqual(await cmd.validate({ options: { output: 'json' } }, cli.getCommandInfo(cmd)), true); }); it('passes validation when text output specified', async () => { const cmd = new MockCommand2(); - assert.strictEqual(await cmd.validate({ options: { output: 'text' } }, Cli.getCommandInfo(cmd)), true); + assert.strictEqual(await cmd.validate({ options: { output: 'text' } }, cli.getCommandInfo(cmd)), true); }); it('passes validation when no output specified', async () => { const cmd = new MockCommand2(); - assert.strictEqual(await cmd.validate({ options: {} }, Cli.getCommandInfo(cmd)), true); + assert.strictEqual(await cmd.validate({ options: {} }, cli.getCommandInfo(cmd)), true); }); it('fails validation when invalid output specified', async () => { const cmd = new MockCommand2(); - assert.notStrictEqual(await cmd.validate({ options: { output: 'invalid' } }, Cli.getCommandInfo(cmd)), true); + assert.notStrictEqual(await cmd.validate({ options: { output: 'invalid' } }, cli.getCommandInfo(cmd)), true); }); it('handles option with @meid token and spaces', async () => { diff --git a/src/Command.ts b/src/Command.ts index 6e69664ea55..eae852e05e7 100644 --- a/src/Command.ts +++ b/src/Command.ts @@ -1,10 +1,10 @@ import os from 'os'; import auth from './Auth.js'; import GlobalOptions from './GlobalOptions.js'; -import { Cli } from './cli/Cli.js'; import { CommandInfo } from './cli/CommandInfo.js'; import { CommandOptionInfo } from './cli/CommandOptionInfo.js'; import { Logger } from './cli/Logger.js'; +import { cli } from './cli/cli.js'; import request from './request.js'; import { settingsNames } from './settingsNames.js'; import { telemetry } from './telemetry.js'; @@ -148,7 +148,7 @@ export default abstract class Command { } private async validateRequiredOptions(args: CommandArgs, command: CommandInfo): Promise { - const shouldPrompt = Cli.getInstance().getSettingWithDefaultValue(settingsNames.prompt, true); + const shouldPrompt = cli.getSettingWithDefaultValue(settingsNames.prompt, true); let prompted: boolean = false; for (let i = 0; i < command.options.length; i++) { @@ -165,7 +165,7 @@ export default abstract class Command { if (!prompted) { prompted = true; - Cli.error('🌶️ Provide values for the following parameters:'); + cli.error('🌶️ Provide values for the following parameters:'); } const answer = optionInfo.autocomplete !== undefined @@ -176,7 +176,7 @@ export default abstract class Command { } if (prompted) { - Cli.error(''); + cli.error(''); } this.processOptions(args.options); @@ -190,7 +190,7 @@ export default abstract class Command { return true; } - const shouldPrompt = Cli.getInstance().getSettingWithDefaultValue(settingsNames.prompt, true); + const shouldPrompt = cli.getSettingWithDefaultValue(settingsNames.prompt, true); const argsOptions: string[] = Object.keys(args.options); for (const optionSet of optionsSets.sort(opt => opt.runsWhen ? 0 : 1)) { @@ -220,22 +220,22 @@ export default abstract class Command { } private async promptForOptionSetNameAndValue(args: CommandArgs, optionSet: OptionSet): Promise { - Cli.error(`🌶️ Please specify one of the following options:`); + cli.error(`🌶️ Please specify one of the following options:`); const selectedOptionName = await prompt.forSelection({ message: `Option to use:`, choices: optionSet.options.map((choice: any) => { return { name: choice, value: choice }; }) }); const optionValue = await prompt.forInput({ message: `${selectedOptionName}:` }); args.options[selectedOptionName] = optionValue; - Cli.error(''); + cli.error(''); } private async promptForSpecificOption(args: CommandArgs, commonOptions: string[]): Promise { - Cli.error(`🌶️ Multiple options for an option set specified. Please specify the correct option that you wish to use.`); + cli.error(`🌶️ Multiple options for an option set specified. Please specify the correct option that you wish to use.`); const selectedOptionName = await prompt.forSelection({ message: `Option to use:`, choices: commonOptions.map((choice: any) => { return { name: choice, value: choice }; }) }); commonOptions.filter(y => y !== selectedOptionName).map(optionName => args.options[optionName] = undefined); - Cli.error(''); + cli.error(''); } private async validateOutput(args: CommandArgs): Promise { @@ -512,7 +512,6 @@ export default abstract class Command { } protected async showDeprecationWarning(logger: Logger, deprecated: string, recommended: string): Promise { - const cli: Cli = Cli.getInstance(); if (cli.currentCommandName && cli.currentCommandName.indexOf(deprecated) === 0) { const chalk = (await import('chalk')).default; @@ -526,7 +525,6 @@ export default abstract class Command { } protected getUsedCommandName(): string { - const cli: Cli = Cli.getInstance(); const commandName: string = this.getCommandName(); if (!cli.currentCommandName) { return commandName; @@ -607,7 +605,6 @@ export default abstract class Command { public async getCsvOutput(logStatement: any[], options: GlobalOptions): Promise { const { stringify } = await import('csv-stringify/sync'); - const cli = Cli.getInstance(); if (logStatement && logStatement.length > 0 && !options.query) { logStatement.map(l => { @@ -627,7 +624,7 @@ export default abstract class Command { return stringify(logStatement, { header: cli.getSettingWithDefaultValue(settingsNames.csvHeader, true), escape: cli.getSettingWithDefaultValue(settingsNames.csvEscape, '"'), - quote: cli.config.get(settingsNames.csvQuote), + quote: cli.getConfig().get(settingsNames.csvQuote), quoted: cli.getSettingWithDefaultValue(settingsNames.csvQuoted, false), // eslint-disable-next-line camelcase quoted_empty: cli.getSettingWithDefaultValue(settingsNames.csvQuotedEmpty, false) diff --git a/src/api.ts b/src/api.ts index ec182cc586c..210dc1cf911 100644 --- a/src/api.ts +++ b/src/api.ts @@ -1,15 +1,14 @@ -import { Cli, CommandOutput } from "./cli/Cli.js"; +import { CommandOutput, cli } from "./cli/cli.js"; export async function executeCommand(commandName: string, options: any, listener?: { stdout: (message: any) => void, stderr: (message: any) => void, }): Promise { - const cli = Cli.getInstance(); cli.loadAllCommandsInfo(); await cli.loadCommandFromArgs(commandName.split(' ')); if (!cli.commandToExecute) { return Promise.reject(`Command not found: ${commandName}`); } - return Cli.executeCommandWithOutput(cli.commandToExecute.command, { options: options ?? {} }, listener); + return cli.executeCommandWithOutput(cli.commandToExecute.command, { options: options ?? {} }, listener); } \ No newline at end of file diff --git a/src/autocomplete.spec.ts b/src/autocomplete.spec.ts index 3816536cdf1..7c03a0dadd8 100644 --- a/src/autocomplete.spec.ts +++ b/src/autocomplete.spec.ts @@ -5,7 +5,7 @@ import path from 'path'; import sinon from 'sinon'; import url from 'url'; import Command from './Command.js'; -import { Cli } from './cli/Cli.js'; +import { cli } from './cli/cli.js'; import { sinonUtil } from './utils/sinonUtil.js'; const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); @@ -98,10 +98,8 @@ describe('autocomplete', () => { } } }; - let cli: Cli; before(async () => { - cli = Cli.getInstance(); sinon.stub(fs, 'existsSync').callsFake(() => false); autocomplete = (await import('./autocomplete.js')).autocomplete; }); @@ -116,7 +114,7 @@ describe('autocomplete', () => { it('writes sh completion to disk', () => { const writeFileSyncStub = sinon.stub(fs, 'writeFileSync').callsFake(() => { }); - cli.commands.push(Cli.getCommandInfo(new SimpleCommand(), 'command.js', 'command.mdx')); + cli.commands.push(cli.getCommandInfo(new SimpleCommand(), 'command.js', 'command.mdx')); autocomplete.generateShCompletion(); assert(writeFileSyncStub.calledWith(path.join(__dirname, `..${path.sep}commands.json`), JSON.stringify({ cli: { @@ -154,7 +152,7 @@ describe('autocomplete', () => { }); it('builds clink completion', () => { - cli.commands.push(Cli.getCommandInfo(new SimpleCommand(), 'command.js', 'command.mdx')); + cli.commands.push(cli.getCommandInfo(new SimpleCommand(), 'command.js', 'command.mdx')); const clink: string = autocomplete.getClinkCompletion(); assert.strictEqual(clink, [ @@ -167,7 +165,7 @@ describe('autocomplete', () => { }); it('includes long options in clink completion', () => { - cli.commands.push(Cli.getCommandInfo(new CommandWithOptions(), 'command.js', 'command.mdx')); + cli.commands.push(cli.getCommandInfo(new CommandWithOptions(), 'command.js', 'command.mdx')); const clink: string = autocomplete.getClinkCompletion(); assert.strictEqual(clink, [ @@ -180,7 +178,7 @@ describe('autocomplete', () => { }); it('includes short options in clink completion', () => { - cli.commands.push(Cli.getCommandInfo(new CommandWithOptions(), 'command.js', 'command.mdx')); + cli.commands.push(cli.getCommandInfo(new CommandWithOptions(), 'command.js', 'command.mdx')); const clink: string = autocomplete.getClinkCompletion(); assert.strictEqual(clink, [ @@ -193,7 +191,7 @@ describe('autocomplete', () => { }); it('includes autocomplete for options in clink completion', () => { - cli.commands.push(Cli.getCommandInfo(new CommandWithOptions(), 'command.js', 'command.mdx')); + cli.commands.push(cli.getCommandInfo(new CommandWithOptions(), 'command.js', 'command.mdx')); const clink: string = autocomplete.getClinkCompletion(); assert.strictEqual(clink, [ @@ -206,7 +204,7 @@ describe('autocomplete', () => { }); it('includes command alias in clink completion', () => { - cli.commands.push(Cli.getCommandInfo(new CommandWithAlias(), 'command.js', 'command.mdx')); + cli.commands.push(cli.getCommandInfo(new CommandWithAlias(), 'command.js', 'command.mdx')); const clink: string = autocomplete.getClinkCompletion(); assert.strictEqual(clink, [ diff --git a/src/autocomplete.ts b/src/autocomplete.ts index f6e9ad30e8c..a274aff6284 100644 --- a/src/autocomplete.ts +++ b/src/autocomplete.ts @@ -5,7 +5,7 @@ import omelette from 'omelette'; import os from 'os'; import path from 'path'; import url from 'url'; -import { Cli } from './cli/Cli.js'; +import { cli } from './cli/cli.js'; import { CommandInfo } from './cli/CommandInfo.js'; import { CommandOptionInfo } from './cli/CommandOptionInfo.js'; const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); @@ -88,8 +88,7 @@ class Autocomplete { } public generateShCompletion(): void { - const cli: Cli = Cli.getInstance(); - const commandsInfo: any = this.getCommandsInfo(cli); + const commandsInfo: any = this.getCommandsInfo(); fs.writeFileSync(Autocomplete.autocompleteFilePath, JSON.stringify(commandsInfo)); } @@ -98,8 +97,7 @@ class Autocomplete { } public getClinkCompletion(): string { - const cli: Cli = Cli.getInstance(); - const cmd: any = this.getCommandsInfo(cli); + const cmd: any = this.getCommandsInfo(); const lua: string[] = ['local parser = clink.arg.new_parser']; const functions: any = {}; @@ -176,7 +174,7 @@ class Autocomplete { return functionName.replace(/-/g, '_'); } - private getCommandsInfo(cli: Cli): any { + private getCommandsInfo(): any { const commandsInfo: any = {}; const commands: CommandInfo[] = cli.commands; commands.forEach(c => { diff --git a/src/chili/chili.ts b/src/chili/chili.ts index 9e2916fb719..731b0c0905d 100644 --- a/src/chili/chili.ts +++ b/src/chili/chili.ts @@ -2,7 +2,7 @@ import fs from 'fs'; import ora from 'ora'; import path from 'path'; import url from 'url'; -import { Cli } from '../cli/Cli.js'; +import { cli } from '../cli/cli.js'; import request, { CliRequestOptions } from '../request.js'; import { settingsNames } from '../settingsNames.js'; import { md } from '../utils/md.js'; @@ -39,7 +39,6 @@ let history: { prompt: string; response: string; }[] = []; -const cli = Cli.getInstance(); const showSpinner = cli.getSettingWithDefaultValue(settingsNames.showSpinner, true) && typeof global.it === 'undefined'; request.logger = { diff --git a/src/cli/Cli.ts b/src/cli/Cli.ts deleted file mode 100644 index 5ff80f158ad..00000000000 --- a/src/cli/Cli.ts +++ /dev/null @@ -1,1044 +0,0 @@ -import Configstore from 'configstore'; -import fs from 'fs'; -import minimist from 'minimist'; -import { createRequire } from 'module'; -import ora, { Options, Ora } from 'ora'; -import os from 'os'; -import path from 'path'; -import { fileURLToPath, pathToFileURL } from 'url'; -import Command, { CommandArgs, CommandError, CommandTypes } from '../Command.js'; -import GlobalOptions from '../GlobalOptions.js'; -import config from '../config.js'; -import { M365RcJson } from '../m365/base/M365RcJson.js'; -import request from '../request.js'; -import { settingsNames } from '../settingsNames.js'; -import { telemetry } from '../telemetry.js'; -import { app } from '../utils/app.js'; -import { formatting } from '../utils/formatting.js'; -import { md } from '../utils/md.js'; -import { validation } from '../utils/validation.js'; -import { CommandInfo } from './CommandInfo.js'; -import { CommandOptionInfo } from './CommandOptionInfo.js'; -import { Logger } from './Logger.js'; -import { SelectionConfig, ConfirmationConfig, prompt } from '../utils/prompt.js'; -import { timings } from './timings.js'; -const require = createRequire(import.meta.url); - -const __dirname = fileURLToPath(new URL('.', import.meta.url)); - -export interface CommandOutput { - stdout: string; - stderr: string; -} - -export class Cli { - public commands: CommandInfo[] = []; - /** - * Command to execute - */ - public commandToExecute: CommandInfo | undefined; - /** - * Name of the command specified through args - */ - public currentCommandName: string | undefined; - private optionsFromArgs: { options: minimist.ParsedArgs } | undefined; - private static instance: Cli; - private static defaultHelpMode = 'options'; - public static helpModes: string[] = ['options', 'examples', 'remarks', 'response', 'full']; - public spinner: Ora; - - private _config: Configstore | undefined; - public get config(): Configstore { - if (!this._config) { - this._config = new Configstore(config.configstoreName); - } - - return this._config; - } - - public getSettingWithDefaultValue(settingName: string, defaultValue: TValue): TValue { - const configuredValue: TValue | undefined = this.config.get(settingName); - if (typeof configuredValue === 'undefined') { - return defaultValue; - } - else { - return configuredValue; - } - } - - private constructor() { - const options: Options = { - text: 'Running command...', - /* c8 ignore next 1 */ - stream: this.getSettingWithDefaultValue('errorOutput', 'stderr') === 'stderr' ? process.stderr : process.stdout - }; - this.spinner = ora(options); - } - - public static getInstance(): Cli { - if (!Cli.instance) { - Cli.instance = new Cli(); - } - - return Cli.instance; - } - - public async execute(rawArgs: string[]): Promise { - const start = process.hrtime.bigint(); - - // for completion commands we also need information about commands' options - const loadAllCommandInfo: boolean = rawArgs.indexOf('completion') > -1; - this.loadAllCommandsInfo(loadAllCommandInfo); - - // check if help for a specific command has been requested using the - // 'm365 help xyz' format. If so, remove 'help' from the array of words - // to use lazy loading commands but keep track of the fact that help should - // be displayed - let showHelp: boolean = false; - if (rawArgs.length > 0 && rawArgs[0] === 'help') { - showHelp = true; - rawArgs.shift(); - } - - // parse args to see if a command has been specified - const parsedArgs: minimist.ParsedArgs = minimist(rawArgs); - - // load command - await this.loadCommandFromArgs(parsedArgs._); - - if (this.commandToExecute) { - // we have found a command to execute. Parse args again taking into - // account short and long options, option types and whether the command - // supports known and unknown options or not - - try { - this.optionsFromArgs = { - options: this.getCommandOptionsFromArgs(rawArgs, this.commandToExecute) - }; - } - catch (e: any) { - const optionsWithoutShorts = Cli.removeShortOptions({ options: parsedArgs }); - - return this.closeWithError(e.message, optionsWithoutShorts, false); - } - } - else { - // we need this to properly support displaying commands - // from the current group - this.optionsFromArgs = { - options: parsedArgs - }; - } - - // show help if no match found, help explicitly requested or - // no command specified - if (!this.commandToExecute || - showHelp || - parsedArgs.h || - parsedArgs.help) { - if (parsedArgs.output !== 'none') { - this.printHelp(await this.getHelpMode(parsedArgs)); - } - return Promise.resolve(); - } - - delete (this.optionsFromArgs.options as any)._; - delete (this.optionsFromArgs.options as any)['--']; - - try { - // replace values staring with @ with file contents - Cli.loadOptionValuesFromFiles(this.optionsFromArgs); - } - catch (e) { - return this.closeWithError(e, this.optionsFromArgs); - } - - const startProcessing = process.hrtime.bigint(); - try { - // process options before passing them on to validation stage - const contextCommandOptions = await this.loadOptionsFromContext(this.commandToExecute.options, this.optionsFromArgs.options.debug); - this.optionsFromArgs.options = { ...contextCommandOptions, ...this.optionsFromArgs.options }; - await this.commandToExecute.command.processOptions(this.optionsFromArgs.options); - - const endProcessing = process.hrtime.bigint(); - timings.options.push(Number(endProcessing - startProcessing)); - } - catch (e: any) { - const endProcessing = process.hrtime.bigint(); - timings.options.push(Number(endProcessing - startProcessing)); - - return this.closeWithError(e.message, this.optionsFromArgs, false); - } - - // if output not specified, set the configured output value (if any) - if (this.optionsFromArgs.options.output === undefined) { - this.optionsFromArgs.options.output = this.getSettingWithDefaultValue(settingsNames.output, 'json'); - } - - const startValidation = process.hrtime.bigint(); - const validationResult = await this.commandToExecute.command.validate(this.optionsFromArgs, this.commandToExecute); - const endValidation = process.hrtime.bigint(); - timings.validation.push(Number(endValidation - startValidation)); - if (validationResult !== true) { - return this.closeWithError(validationResult, this.optionsFromArgs, true); - } - - const end = process.hrtime.bigint(); - timings.core.push(Number(end - start)); - - try { - await Cli.executeCommand(this.commandToExecute.command, this.optionsFromArgs); - const endTotal = process.hrtime.bigint(); - timings.total.push(Number(endTotal - start)); - this.printTimings(rawArgs); - process.exit(0); - } - catch (err) { - const endTotal = process.hrtime.bigint(); - timings.total.push(Number(endTotal - start)); - this.printTimings(rawArgs); - await this.closeWithError(err, this.optionsFromArgs); - /* c8 ignore next */ - } - } - - private printTimings(rawArgs: string[]): void { - if (rawArgs.some(arg => arg === '--debug')) { - Cli.error(''); - Cli.error('Timings:'); - Object.getOwnPropertyNames(timings).forEach(key => { - Cli.error(`${key}: ${(timings as any)[key].reduce((a: number, b: number) => a + b, 0) / 1e6}ms`); - }); - } - } - - public static async executeCommand(command: Command, args: { options: minimist.ParsedArgs }): Promise { - const logger: Logger = { - log: async (message: any): Promise => { - if (args.options.output !== 'none') { - const output: any = await Cli.formatOutput(command, message, args.options); - Cli.log(output); - } - }, - logRaw: async (message: any): Promise => { - if (args.options.output !== 'none') { - Cli.log(message); - } - }, - logToStderr: async (message: any): Promise => { - if (args.options.output !== 'none') { - Cli.error(message); - } - } - }; - - if (args.options.debug) { - await logger.logToStderr(`Executing command ${command.name} with options ${JSON.stringify(args)}`); - } - - // store the current command name, if any and set the name to the name of - // the command to execute - const cli = Cli.getInstance(); - const parentCommandName: string | undefined = cli.currentCommandName; - cli.currentCommandName = command.getCommandName(cli.currentCommandName); - const showSpinner = cli.getSettingWithDefaultValue(settingsNames.showSpinner, true) && args.options.output !== 'none'; - - // don't show spinner if running tests - /* c8 ignore next 3 */ - if (showSpinner && typeof global.it === 'undefined') { - cli.spinner.start(); - } - - const startCommand = process.hrtime.bigint(); - try { - await command.action(logger, args as any); - - if (args.options.debug || args.options.verbose) { - const chalk = (await import('chalk')).default; - await logger.logToStderr(chalk.green('DONE')); - } - } - finally { - // restore the original command name - cli.currentCommandName = parentCommandName; - - /* c8 ignore next 3 */ - if (cli.spinner.isSpinning) { - cli.spinner.stop(); - } - - const endCommand = process.hrtime.bigint(); - timings.command.push(Number(endCommand - startCommand)); - } - } - - public static async executeCommandWithOutput(command: Command, args: { options: minimist.ParsedArgs }, listener?: { - stdout?: (message: any) => void, - stderr?: (message: any) => void - }): Promise { - const log: string[] = []; - const logErr: string[] = []; - const logger: Logger = { - log: async (message: any): Promise => { - const formattedMessage = await Cli.formatOutput(command, message, args.options); - if (listener && listener.stdout) { - listener.stdout(formattedMessage); - } - log.push(formattedMessage); - }, - logRaw: async (message: any): Promise => { - const formattedMessage = await Cli.formatOutput(command, message, args.options); - if (listener && listener.stdout) { - listener.stdout(formattedMessage); - } - log.push(formattedMessage); - }, - logToStderr: async (message: any): Promise => { - if (listener && listener.stderr) { - listener.stderr(message); - } - logErr.push(message); - } - }; - - if (args.options.debug && args.options.output !== 'none') { - const message = `Executing command ${command.name} with options ${JSON.stringify(args)}`; - if (listener && listener.stderr) { - listener.stderr(message); - } - logErr.push(message); - } - - // store the current command name, if any and set the name to the name of - // the command to execute - const cli = Cli.getInstance(); - const parentCommandName: string | undefined = cli.currentCommandName; - cli.currentCommandName = command.getCommandName(); - // store the current logger if any - const currentLogger: Logger | undefined = request.logger; - - try { - await command.action(logger, args as any); - - return ({ - stdout: log.join(os.EOL), - stderr: logErr.join(os.EOL) - }); - } - catch (err: any) { - // restoring the command and logger is done here instead of in a 'finally' because there were issues with the code coverage tool - // restore the original command name - cli.currentCommandName = parentCommandName; - // restore the original logger - request.logger = currentLogger; - - throw { - error: err, - stderr: logErr.join(os.EOL) - }; - } - /* c8 ignore next */ - finally { - // restore the original command name - cli.currentCommandName = parentCommandName; - // restore the original logger - request.logger = currentLogger; - } - } - - public loadAllCommandsInfo(loadFull: boolean = false): void { - const commandsInfoFileName = loadFull ? 'allCommandsFull.json' : 'allCommands.json'; - this.commands = require(path.join(__dirname, '..', '..', commandsInfoFileName)); - } - - /** - * Loads command files into CLI based on the specified arguments. - * - * @param commandNameWords Array of words specified as args - */ - public async loadCommandFromArgs(commandNameWords: string[]): Promise { - if (commandNameWords.length === 0) { - return; - } - - this.currentCommandName = commandNameWords.join(' '); - - const commandFilePath = this.commands - .find(c => c.name === this.currentCommandName || - c.aliases?.find(a => a === this.currentCommandName))?.file ?? ''; - - if (commandFilePath) { - await this.loadCommandFromFile(commandFilePath); - } - } - - private async loadOptionsFromContext(commandOptions: CommandOptionInfo[], debug: boolean | undefined): Promise { - const filePath: string = '.m365rc.json'; - let m365rc: M365RcJson = {}; - - if (!fs.existsSync(filePath)) { - return; - } - - if (debug!) { - await Cli.error('found .m365rc.json file'); - } - - try { - const fileContents: string = fs.readFileSync(filePath, 'utf8'); - if (fileContents) { - m365rc = JSON.parse(fileContents); - } - } - catch (e) { - await this.closeWithError(`Error parsing ${filePath}`, { options: {} }); - /* c8 ignore next */ - } - - if (!m365rc.context) { - return; - } - - if (debug!) { - await Cli.error('found context in .m365rc.json file'); - } - - const context = m365rc.context; - - const foundOptions: any = {}; - await commandOptions.forEach(async option => { - if (context[option.name]) { - foundOptions[option.name] = context[option.name]; - if (debug!) { - await Cli.error(`returning ${option.name} option from context`); - } - } - }); - - return foundOptions; - } - - /** - * Loads command from the specified file into CLI. If can't find the file - * or the file doesn't contain a command, loads all available commands. - * - * @param commandFilePathUrl File path of the file with command to load - */ - private async loadCommandFromFile(commandFileUrl: string): Promise { - const commandsFolder = path.join(__dirname, '../m365'); - const filePath: string = path.join(commandsFolder, commandFileUrl); - - if (!fs.existsSync(filePath)) { - // reset command name - this.currentCommandName = undefined; - return; - } - - try { - const command: any = await import(pathToFileURL(filePath).toString()); - if (command.default instanceof Command) { - const commandInfo = this.commands.find(c => c.file === commandFileUrl); - this.commandToExecute = Cli.getCommandInfo(command.default, commandFileUrl, commandInfo?.help); - } - } - catch { } - } - - public static getCommandInfo(command: Command, filePath: string = '', helpFilePath: string = ''): CommandInfo { - return { - aliases: command.alias(), - name: command.name, - description: command.description, - command: command, - options: this.getCommandOptions(command), - defaultProperties: command.defaultProperties(), - file: filePath, - help: helpFilePath - }; - } - - private static getCommandOptions(command: Command): CommandOptionInfo[] { - const options: CommandOptionInfo[] = []; - - command.options.forEach(option => { - const required: boolean = option.option.indexOf('<') > -1; - const optionArgs: string[] = option.option.split(/[ ,|]+/); - let short: string | undefined; - let long: string | undefined; - let name: string = ''; - optionArgs.forEach(o => { - if (o.startsWith('--')) { - long = o.replace('--', ''); - name = long; - } - else if (o.startsWith('-')) { - short = o.replace('-', ''); - name = short; - } - }); - - options.push({ - autocomplete: option.autocomplete, - long: long, - name: name, - required: required, - short: short - }); - }); - - return options; - } - - private getCommandOptionsFromArgs(args: string[], commandInfo: CommandInfo | undefined): minimist.ParsedArgs { - const minimistOptions: minimist.Opts = { - alias: {} - }; - - let argsToParse = args; - - if (commandInfo) { - const commandTypes = commandInfo.command.types; - if (commandTypes) { - minimistOptions.string = commandTypes.string; - - // minimist will parse unused boolean options to 'false' (unused options => options that are not included in the args) - // But in the CLI booleans are nullable. They can can be true, false or undefined. - // For this reason we only pass boolean types that are actually used as arg. - minimistOptions.boolean = commandTypes.boolean.filter(optionName => args.some(arg => `--${optionName}` === arg || `-${optionName}` === arg)); - } - - minimistOptions.alias = {}; - commandInfo.options.forEach(option => { - if (option.short && option.long) { - (minimistOptions.alias as any)[option.short] = option.long; - } - }); - - argsToParse = this.getRewrittenArgs(args, commandTypes); - } - - return minimist(argsToParse, minimistOptions); - } - - /** - * Rewrites arguments (if necessary) before passing them into minimist. - * Currently only boolean values are checked and fixed. - * Args are only checked and rewritten if the option has been added to the 'types.boolean' array. - */ - private getRewrittenArgs(args: string[], commandTypes: CommandTypes): string[] { - const booleanTypes = commandTypes.boolean; - - if (booleanTypes.length === 0) { - return args; - } - - return args.map((arg: string, index: number, array: string[]) => { - if (arg.startsWith('-') || index === 0) { - return arg; - } - - // This line checks if the current arg is a value that belongs to a boolean option. - if (booleanTypes.some(t => `--${t}` === array[index - 1] || `-${t}` === array[index - 1])) { - const rewrittenBoolean = formatting.rewriteBooleanValue(arg); - - if (!validation.isValidBoolean(rewrittenBoolean)) { - const optionName = array[index - 1]; - throw new Error(`The value '${arg}' for option '${optionName}' is not a valid boolean`); - } - - return rewrittenBoolean; - } - - return arg; - }); - } - - private static async formatOutput(command: Command, logStatement: any, options: GlobalOptions): Promise { - if (logStatement instanceof Date) { - return logStatement.toString(); - } - - let logStatementType: string = typeof logStatement; - - if (logStatementType === 'undefined') { - return logStatement; - } - - // we need to get the list of object's properties to see if the specified - // JMESPath query (if any) filters object's properties or not. We need to - // know this in order to decide if we should use default command's - // properties or custom ones from JMESPath - const originalObject: any = Array.isArray(logStatement) ? Cli.getFirstNonUndefinedArrayItem(logStatement) : logStatement; - const originalProperties: string[] = originalObject && typeof originalObject !== 'string' ? Object.getOwnPropertyNames(originalObject) : []; - - if (options.query && - !options.help) { - const jmespath = await import('jmespath'); - try { - logStatement = jmespath.search(logStatement, options.query); - } - catch (e: any) { - const message = `JMESPath query error. ${e.message}. See https://jmespath.org/specification.html for more information`; - await Cli.getInstance().closeWithError(message, { options }, false); - /* c8 ignore next */ - } - // we need to update the statement type in case the JMESPath query - // returns an object of different shape than the original message to log - // #2095 - logStatementType = typeof logStatement; - } - - if (!options.output || options.output === 'json') { - return command.getJsonOutput(logStatement); - } - - if (logStatement instanceof CommandError) { - const chalk = (await import('chalk')).default; - return chalk.red(`Error: ${logStatement.message}`); - } - - let arrayType: string = ''; - if (!Array.isArray(logStatement)) { - logStatement = [logStatement]; - arrayType = logStatementType; - } - else { - for (let i: number = 0; i < logStatement.length; i++) { - if (Array.isArray(logStatement[i])) { - arrayType = 'array'; - break; - } - - const t: string = typeof logStatement[i]; - if (t !== 'undefined') { - arrayType = t; - break; - } - } - } - - if (arrayType !== 'object') { - return logStatement.join(os.EOL); - } - - // if output type has been set to 'text', process the retrieved - // data so that returned objects contain only default properties specified - // on the current command. If there is no current command or the - // command doesn't specify default properties, return original data - if (this.shouldTrimOutput(options.output)) { - const cli: Cli = Cli.getInstance(); - const currentCommand: CommandInfo | undefined = cli.commandToExecute; - - if (arrayType === 'object' && - currentCommand && currentCommand.defaultProperties) { - // the log statement contains the same properties as the original object - // so it can be filtered following the default properties specified on - // the command - if (JSON.stringify(originalProperties) === JSON.stringify(Object.getOwnPropertyNames(logStatement[0]))) { - // in some cases we return properties wrapped in `value` array - // returned by the API. We'll remove it in the future, but for now - // we'll use a workaround to drop the `value` array here - if (logStatement[0].value && - Array.isArray(logStatement[0].value)) { - logStatement = logStatement[0].value; - } - - logStatement = logStatement.map((s: any) => - formatting.filterObject(s, currentCommand.defaultProperties as string[])); - } - } - } - - switch (options.output) { - case 'csv': - return command.getCsvOutput(logStatement, options); - case 'md': - return command.getMdOutput(logStatement, command, options); - default: - return command.getTextOutput(logStatement); - } - } - - private static getFirstNonUndefinedArrayItem(arr: any[]): any { - for (let i: number = 0; i < arr.length; i++) { - const a: any = arr[i]; - if (typeof a !== 'undefined') { - return a; - } - } - - return undefined; - } - - private printHelp(helpMode: string, exitCode: number = 0): void { - const properties: any = {}; - - if (this.commandToExecute) { - properties.command = this.commandToExecute.name; - this.printCommandHelp(helpMode); - } - else { - Cli.log(); - Cli.log(`CLI for Microsoft 365 v${app.packageJson().version}`); - Cli.log(`${app.packageJson().description}`); - Cli.log(); - - properties.command = 'commandList'; - this.printAvailableCommands(); - } - - telemetry.trackEvent('help', properties); - - process.exit(exitCode); - } - - private printCommandHelp(helpMode: string): void { - const docsRootDir = path.join(__dirname, '..', '..', 'docs'); - const helpFilePath = path.join(docsRootDir, 'docs', 'cmd', this.commandToExecute!.help!); - - if (fs.existsSync(helpFilePath)) { - let helpContents = fs.readFileSync(helpFilePath, 'utf8'); - helpContents = this.getHelpSection(helpMode, helpContents); - helpContents = md.md2plain(helpContents, docsRootDir); - Cli.log(); - Cli.log(helpContents); - } - } - - private async getHelpMode(options: any): Promise { - const { h, help } = options; - - if (!h && !help) { - return this.getSettingWithDefaultValue(settingsNames.helpMode, Cli.defaultHelpMode); - } - - // user passed -h or --help, let's see if they passed a specific mode - // or requested the default - const helpMode: boolean | string = h ?? help; - - if (typeof helpMode === 'boolean' || typeof helpMode !== 'string') { - // requested default mode or passed a number, let's use default - return this.getSettingWithDefaultValue(settingsNames.helpMode, Cli.defaultHelpMode); - } - else { - const lowerCaseHelpMode = helpMode.toLowerCase(); - - if (Cli.helpModes.indexOf(lowerCaseHelpMode) < 0) { - await Cli.getInstance().closeWithError(`Unknown help mode ${helpMode}. Allowed values are ${Cli.helpModes.join(', ')}`, { options }, false); - /* c8 ignore next 2 */ - return ''; // noop - } - else { - return lowerCaseHelpMode; - } - } - } - - private getHelpSection(helpMode: string, helpContents: string): string { - if (helpMode === 'full') { - return helpContents; - } - - // options is the first section, so get help up to options - const titleAndUsage = helpContents.substring(0, helpContents.indexOf('## Options')); - - // find the requested section - const sectionLines: string[] = []; - const sectionName = helpMode[0].toUpperCase() + helpMode.substring(1); - const lines: string[] = helpContents.split('\n'); - for (let i: number = 0; i < lines.length; i++) { - const line = lines[i]; - - if (line.indexOf(`## ${sectionName}`) === 0) { - sectionLines.push(line); - } - else if (sectionLines.length > 0) { - if (line.indexOf('## ') === 0) { - // we've reached the next section, stop - break; - } - else { - sectionLines.push(line); - } - } - } - - return titleAndUsage + sectionLines.join('\n'); - } - - private printAvailableCommands(): void { - // commands that match the current group - const commandsToPrint: { [commandName: string]: CommandInfo } = {}; - // sub-commands in the current group - const commandGroupsToPrint: { [group: string]: number } = {}; - // current command group, eg. 'spo', 'spo site' - let currentGroup: string = ''; - - const addToList = (commandName: string, command: CommandInfo): void => { - const pos: number = commandName.indexOf(' ', currentGroup.length + 1); - if (pos === -1) { - commandsToPrint[commandName] = command; - } - else { - const subCommandsGroup: string = commandName.substr(0, pos); - if (!commandGroupsToPrint[subCommandsGroup]) { - commandGroupsToPrint[subCommandsGroup] = 0; - } - - commandGroupsToPrint[subCommandsGroup]++; - } - }; - - // get current command group - if (this.optionsFromArgs && - this.optionsFromArgs.options && - this.optionsFromArgs.options._ && - this.optionsFromArgs.options._.length > 0) { - currentGroup = this.optionsFromArgs.options._.join(' '); - - if (currentGroup) { - currentGroup += ' '; - } - } - - const getCommandsForGroup = (): void => { - for (let i = 0; i < this.commands.length; i++) { - const command: CommandInfo = this.commands[i]; - if (command.name.startsWith(currentGroup)) { - addToList(command.name, command); - } - - if (command.aliases) { - for (let j = 0; j < command.aliases.length; j++) { - const alias: string = command.aliases[j]; - if (alias.startsWith(currentGroup)) { - addToList(alias, command); - } - } - } - } - }; - - getCommandsForGroup(); - if (Object.keys(commandsToPrint).length === 0 && - Object.keys(commandGroupsToPrint).length === 0) { - // specified string didn't match any commands. Reset group and try again - currentGroup = ''; - getCommandsForGroup(); - } - - const namesOfCommandsToPrint: string[] = Object.keys(commandsToPrint); - if (namesOfCommandsToPrint.length > 0) { - // determine the length of the longest command name to pad strings + ' [options]' - const maxLength: number = Math.max(...namesOfCommandsToPrint.map(s => s.length)) + 10; - - Cli.log(`Commands:`); - Cli.log(); - - const sortedCommandNamesToPrint = Object.getOwnPropertyNames(commandsToPrint).sort(); - sortedCommandNamesToPrint.forEach(commandName => { - Cli.log(` ${`${commandName} [options]`.padEnd(maxLength, ' ')} ${commandsToPrint[commandName].description}`); - }); - } - - const namesOfCommandGroupsToPrint: string[] = Object.keys(commandGroupsToPrint); - if (namesOfCommandGroupsToPrint.length > 0) { - if (namesOfCommandsToPrint.length > 0) { - Cli.log(); - } - - // determine the longest command group name to pad strings + ' *' - const maxLength: number = Math.max(...namesOfCommandGroupsToPrint.map(s => s.length)) + 2; - - Cli.log(`Commands groups:`); - Cli.log(); - - // sort commands groups (because of aliased commands) - const sortedCommandGroupsToPrint = Object - .keys(commandGroupsToPrint) - .sort() - .reduce((object: { [group: string]: number }, key: string) => { - object[key] = commandGroupsToPrint[key]; - return object; - }, {}); - - for (const commandGroup in sortedCommandGroupsToPrint) { - Cli.log(` ${`${commandGroup} *`.padEnd(maxLength, ' ')} ${commandGroupsToPrint[commandGroup]} command${commandGroupsToPrint[commandGroup] === 1 ? '' : 's'}`); - } - } - - Cli.log(); - } - - private async closeWithError(error: any, args: CommandArgs, showHelpIfEnabled: boolean = false): Promise { - let exitCode: number = 1; - - if (args.options.output === 'none') { - return process.exit(exitCode); - } - - const chalk = (await import('chalk')).default; - - let errorMessage: string = error instanceof CommandError ? error.message : error; - if ((!args.options.output || args.options.output === 'json') && - !this.getSettingWithDefaultValue(settingsNames.printErrorsAsPlainText, true)) { - errorMessage = JSON.stringify({ error: errorMessage }); - } - else { - errorMessage = chalk.red(`Error: ${errorMessage}`); - } - - if (error instanceof CommandError && error.code) { - exitCode = error.code; - } - - await Cli.error(errorMessage); - - if (showHelpIfEnabled && - await this.getSettingWithDefaultValue(settingsNames.showHelpOnFailure, showHelpIfEnabled)) { - this.printHelp(await this.getHelpMode(args.options), exitCode); - } - else { - process.exit(exitCode); - } - - // will never be run. Required for testing where we're stubbing process.exit - /* c8 ignore next */ - throw new Error(errorMessage); - /* c8 ignore next */ - } - - public static log(message?: any, ...optionalParams: any[]): void { - const cli = Cli.getInstance(); - const spinnerSpinning = cli.spinner.isSpinning; - - /* c8 ignore next 3 */ - if (spinnerSpinning) { - cli.spinner.stop(); - } - - if (message) { - console.log(message, ...optionalParams); - } - else { - console.log(); - } - - // Restart the spinner if it was running before the log - /* c8 ignore next 3 */ - if (spinnerSpinning) { - cli.spinner.start(); - } - } - - public static async error(message?: any, ...optionalParams: any[]): Promise { - const cli = Cli.getInstance(); - const spinnerSpinning = cli.spinner.isSpinning; - - /* c8 ignore next 3 */ - if (spinnerSpinning) { - cli.spinner.stop(); - } - - const errorOutput: string = cli.getSettingWithDefaultValue(settingsNames.errorOutput, 'stderr'); - if (errorOutput === 'stdout') { - console.log(message, ...optionalParams); - } - else { - console.error(message, ...optionalParams); - } - - // Restart the spinner if it was running before the log - /* c8 ignore next 3 */ - if (spinnerSpinning) { - cli.spinner.start(); - } - } - - public static async promptForSelection(config: SelectionConfig): Promise { - const cli = Cli.getInstance(); - const spinnerSpinning = cli.spinner.isSpinning; - - /* c8 ignore next 3 */ - if (spinnerSpinning) { - cli.spinner.stop(); - } - - const answer = await prompt.forSelection(config); - Cli.error(''); - - // Restart the spinner if it was running before the prompt - /* c8 ignore next 3 */ - if (spinnerSpinning) { - cli.spinner.start(); - } - - return answer; - } - - public static async promptForConfirmation(config: ConfirmationConfig): Promise { - const cli = Cli.getInstance(); - const spinnerSpinning = cli.spinner.isSpinning; - - /* c8 ignore next 3 */ - if (spinnerSpinning) { - cli.spinner.stop(); - } - - const answer = await prompt.forConfirmation(config); - Cli.error(''); - - // Restart the spinner if it was running before the prompt - /* c8 ignore next 3 */ - if (spinnerSpinning) { - cli.spinner.start(); - } - - return answer; - } - - public static async handleMultipleResultsFound(message: string, values: { [key: string]: T }): Promise { - const prompt: boolean = Cli.getInstance().getSettingWithDefaultValue(settingsNames.prompt, true); - if (!prompt) { - throw new Error(`${message} Found: ${Object.keys(values).join(', ')}.`); - } - - Cli.error(`🌶️ ${message}`); - const choices = Object.keys(values).map((choice: any) => { return { name: choice, value: choice }; }); - const response = await Cli.promptForSelection({ message: `Please choose one:`, choices }); - - return values[response]; - } - - private static removeShortOptions(args: { options: minimist.ParsedArgs }): { options: minimist.ParsedArgs } { - const filteredArgs = JSON.parse(JSON.stringify(args)); - const optionsToRemove: string[] = Object.getOwnPropertyNames(args.options) - .filter(option => option.length === 1 || option === '--'); - optionsToRemove.forEach(option => delete filteredArgs.options[option]); - - return filteredArgs; - } - - private static loadOptionValuesFromFiles(args: { options: minimist.ParsedArgs }): void { - const optionNames: string[] = Object.getOwnPropertyNames(args.options); - optionNames.forEach(option => { - const value = args.options[option]; - if (!value || - typeof value !== 'string' || - !value.startsWith('@')) { - return; - } - - const filePath: string = value.substr(1); - // if the file doesn't exist, leave as-is, if it exists replace with - // contents from the file - if (fs.existsSync(filePath)) { - args.options[option] = fs.readFileSync(filePath, 'utf-8'); - } - }); - } - - public static shouldTrimOutput(output: string | undefined): boolean { - return output === 'text'; - } -} diff --git a/src/cli/Cli.spec.ts b/src/cli/cli.spec.ts similarity index 83% rename from src/cli/Cli.spec.ts rename to src/cli/cli.spec.ts index 0d85f61f483..7f7d4b7c2dc 100644 --- a/src/cli/Cli.spec.ts +++ b/src/cli/cli.spec.ts @@ -17,7 +17,7 @@ import { pid } from '../utils/pid.js'; import { Choice, SelectionConfig, prompt } from '../utils/prompt.js'; import { session } from '../utils/session.js'; import { sinonUtil } from '../utils/sinonUtil.js'; -import { Cli, CommandOutput } from './Cli.js'; +import { cli, CommandOutput } from './cli.js'; import { Logger } from './Logger.js'; const require = createRequire(import.meta.url); @@ -190,7 +190,7 @@ class MockCommandWithConfirmationPrompt extends AnonymousCommand { return 'Mock command with prompt'; } public async commandAction(): Promise { - await Cli.promptForConfirmation({ message: `Continue?` }); + await cli.promptForConfirmation({ message: `Continue?` }); } } @@ -202,7 +202,7 @@ class MockCommandWithHandleMultipleResultsFound extends AnonymousCommand { return 'Mock command with interactive prompt'; } public async commandAction(): Promise { - await Cli.handleMultipleResultsFound(`Multiple values with name found.`, { '1': { 'id': '1', 'title': 'Option1' }, '2': { 'id': '2', 'title': 'Option2' } }); + await cli.handleMultipleResultsFound(`Multiple values with name found.`, { '1': { 'id': '1', 'title': 'Option1' }, '2': { 'id': '2', 'title': 'Option2' } }); } } @@ -234,8 +234,7 @@ class MockCommandWithRawOutput extends AnonymousCommand { } } -describe('Cli', () => { - let cli: Cli; +describe('cli', () => { let rootFolder: string; let cliLogStub: sinon.SinonStub; let cliErrorStub: sinon.SinonStub; @@ -256,11 +255,11 @@ describe('Cli', () => { sinon.stub(pid, 'getProcessName').callsFake(() => ''); sinon.stub(session, 'getId').callsFake(() => ''); - cliLogStub = sinon.stub((Cli as any), 'log').callsFake(message => { + cliLogStub = sinon.stub(cli, 'log').callsFake(message => { log.push(message as string ?? ''); }); - cliErrorStub = sinon.stub((Cli as any), 'error'); - cliFormatOutputSpy = sinon.spy((Cli as any), 'formatOutput'); + cliErrorStub = sinon.stub(cli, 'error'); + cliFormatOutputSpy = sinon.spy(cli, 'formatOutput'); processExitStub = sinon.stub(process, 'exit').callsFake((() => { }) as any); md2plainSpy = sinon.spy(md, 'md2plain'); @@ -282,21 +281,20 @@ describe('Cli', () => { beforeEach(() => { log = []; - cli = Cli.getInstance(); cli.commands = [ - Cli.getCommandInfo(mockCommand, 'cli-mock.js', 'help.mdx'), - Cli.getCommandInfo(mockCommandWithAutocomplete, 'cli-autocomplete-mock.js', 'help.mdx'), - Cli.getCommandInfo(mockCommandWithOptionSets, 'cli-optionsets-mock.js', 'help.mdx'), - Cli.getCommandInfo(mockCommandWithAlias, 'cli-alias-mock.js', 'help.mdx'), - Cli.getCommandInfo(mockCommandWithValidation, 'cli-validation-mock.js', 'help.mdx'), - Cli.getCommandInfo(cliCompletionUpdateCommand, 'cli/commands/completion/completion-clink-update.js', 'cli/completion/completion-clink-update.mdx'), - Cli.getCommandInfo(mockCommandWithBooleanRewrite, 'cli-boolean-rewrite-mock.js', 'help.mdx') + cli.getCommandInfo(mockCommand, 'cli-mock.js', 'help.mdx'), + cli.getCommandInfo(mockCommandWithAutocomplete, 'cli-autocomplete-mock.js', 'help.mdx'), + cli.getCommandInfo(mockCommandWithOptionSets, 'cli-optionsets-mock.js', 'help.mdx'), + cli.getCommandInfo(mockCommandWithAlias, 'cli-alias-mock.js', 'help.mdx'), + cli.getCommandInfo(mockCommandWithValidation, 'cli-validation-mock.js', 'help.mdx'), + cli.getCommandInfo(cliCompletionUpdateCommand, 'cli/commands/completion/completion-clink-update.js', 'cli/completion/completion-clink-update.mdx'), + cli.getCommandInfo(mockCommandWithBooleanRewrite, 'cli-boolean-rewrite-mock.js', 'help.mdx') ]; sinon.stub(cli, 'loadAllCommandsInfo').callsFake(() => ''); + cli.commandToExecute = undefined; }); afterEach(() => { - (Cli as any).instance = undefined; cliLogStub.resetHistory(); cliErrorStub.resetHistory(); cliFormatOutputSpy.resetHistory(); @@ -304,7 +302,7 @@ describe('Cli', () => { md2plainSpy.resetHistory(); mockCommandActionSpy.resetHistory(); sinonUtil.restore([ - Cli.executeCommand, + cli.executeCommand, fs.existsSync, fs.readFileSync, // eslint-disable-next-line no-console @@ -321,7 +319,9 @@ describe('Cli', () => { prompt.forSelection, prompt.forConfirmation, cli.getSettingWithDefaultValue, - cli.loadAllCommandsInfo + cli.loadAllCommandsInfo, + cli.getConfig().get, + cli.loadCommandFromFile ]); }); @@ -403,7 +403,7 @@ describe('Cli', () => { sinon.stub(fs, 'existsSync').callsFake((path) => path.toString().endsWith('.mdx') || path.toString().endsWith('-mock.js')); const originalFsReadFileSync = fs.readFileSync; sinon.stub(fs, 'readFileSync').callsFake(() => originalFsReadFileSync(path.join(rootFolder, '..', '..', 'docs', 'docs', 'cmd', 'cli', 'completion', 'completion-clink-update.mdx'), 'utf8')); - (cli as any).commandToExecute = cli.commands.find(c => c.name === 'cli mock'); + cli.commandToExecute = cli.commands.find(c => c.name === 'cli mock'); cli .execute(['help', 'cli', 'mock']) .then(_ => { @@ -421,7 +421,7 @@ describe('Cli', () => { sinon.stub(fs, 'existsSync').callsFake((path) => path.toString().endsWith('.mdx') || path.toString().endsWith('-mock.js')); const originalFsReadFileSync = fs.readFileSync; sinon.stub(fs, 'readFileSync').callsFake(() => originalFsReadFileSync(path.join(rootFolder, '..', '..', 'docs', 'docs', 'cmd', 'cli', 'completion', 'completion-clink-update.mdx'), 'utf8')); - (cli as any).commandToExecute = cli.commands.find(c => c.name === 'cli mock'); + cli.commandToExecute = cli.commands.find(c => c.name === 'cli mock'); cli .execute(['cli', 'mock', '--help']) .then(_ => { @@ -439,7 +439,7 @@ describe('Cli', () => { sinon.stub(fs, 'existsSync').callsFake((path) => path.toString().endsWith('.mdx') || path.toString().endsWith('-mock.js')); const originalFsReadFileSync = fs.readFileSync; sinon.stub(fs, 'readFileSync').callsFake(() => originalFsReadFileSync(path.join(rootFolder, '..', '..', 'docs', 'docs', 'cmd', 'cli', 'completion', 'completion-clink-update.mdx'), 'utf8')); - (cli as any).commandToExecute = cli.commands.find(c => c.name === 'cli mock'); + cli.commandToExecute = cli.commands.find(c => c.name === 'cli mock'); cli .execute(['cli', 'mock', '-h']) .then(_ => { @@ -472,7 +472,7 @@ describe('Cli', () => { sinon.stub(fs, 'existsSync').callsFake((path) => path.toString().endsWith('.mdx') || path.toString().endsWith('-mock.js')); const originalFsReadFileSync = fs.readFileSync; sinon.stub(fs, 'readFileSync').callsFake(() => originalFsReadFileSync(path.join(rootFolder, '..', '..', 'docs', 'docs', 'cmd', 'cli', 'completion', 'completion-clink-update.mdx'), 'utf8')); - (cli as any).commandToExecute = cli.commands.find(c => c.aliases?.some(a => a === 'cli mock alt')); + cli.commandToExecute = cli.commands.find(c => c.aliases?.some(a => a === 'cli mock alt')); cli .execute(['help', 'cli', 'mock', 'alt']) .then(_ => { @@ -577,7 +577,7 @@ describe('Cli', () => { }); it(`passes options validation if the command doesn't allow unknown options and specified options match command options`, (done) => { - (cli as any).commandToExecute = cli.commands.find(c => c.name === 'cli mock'); + cli.commandToExecute = cli.commands.find(c => c.name === 'cli mock'); cli .execute(['cli', 'mock', '-x', '123', '-y', '456']) .then(_ => { @@ -592,7 +592,7 @@ describe('Cli', () => { }); it(`succeeds running with truthy/falsy values 'true' and 'false'`, (done) => { - (cli as any).commandToExecute = cli.commands.find(c => c.name === 'cli mock boolean rewrite'); + cli.commandToExecute = cli.commands.find(c => c.name === 'cli mock boolean rewrite'); cli .execute(['cli', 'mock', 'boolean', 'rewrite', '--booleanParameterX', 'true', '--booleanParameterY', 'false', '--output', 'text']) .then(_ => { @@ -608,7 +608,7 @@ describe('Cli', () => { }); it(`rewrites a truthy/falsy values '1' and '0' to 'true' and 'false' respectively`, (done) => { - (cli as any).commandToExecute = cli.commands.find(c => c.name === 'cli mock boolean rewrite'); + cli.commandToExecute = cli.commands.find(c => c.name === 'cli mock boolean rewrite'); cli .execute(['cli', 'mock', 'boolean', 'rewrite', '--booleanParameterX', '1', '--booleanParameterY', '0', '--output', 'text']) .then(_ => { @@ -624,7 +624,7 @@ describe('Cli', () => { }); it(`rewrites a truthy/falsy values 'on' and 'off' to 'true' and 'false' respectively`, (done) => { - (cli as any).commandToExecute = cli.commands.find(c => c.name === 'cli mock boolean rewrite'); + cli.commandToExecute = cli.commands.find(c => c.name === 'cli mock boolean rewrite'); cli .execute(['cli', 'mock', 'boolean', 'rewrite', '--booleanParameterX', 'on', '--booleanParameterY', 'off', '--output', 'text']) .then(_ => { @@ -640,7 +640,7 @@ describe('Cli', () => { }); it(`rewrites a truthy/falsy values 'yes' and 'no' to 'true' and 'false' respectively`, (done) => { - (cli as any).commandToExecute = cli.commands.find(c => c.name === 'cli mock boolean rewrite'); + cli.commandToExecute = cli.commands.find(c => c.name === 'cli mock boolean rewrite'); cli .execute(['cli', 'mock', 'boolean', 'rewrite', '--booleanParameterX', 'yes', '--booleanParameterY', 'no', '--output', 'text']) .then(_ => { @@ -656,7 +656,7 @@ describe('Cli', () => { }); it(`rewrites a truthy/falsy values 'True' and 'False' to 'true' and 'false' respectively`, (done) => { - (cli as any).commandToExecute = cli.commands.find(c => c.name === 'cli mock boolean rewrite'); + cli.commandToExecute = cli.commands.find(c => c.name === 'cli mock boolean rewrite'); cli .execute(['cli', 'mock', 'boolean', 'rewrite', '--booleanParameterX', 'True', '--booleanParameterY', 'False', '--output', 'text']) .then(_ => { @@ -672,7 +672,7 @@ describe('Cli', () => { }); it(`rewrites a truthy/falsy values 'yes' and 'no' to 'true' and 'false' respectively (using shorts)`, (done) => { - (cli as any).commandToExecute = cli.commands.find(c => c.name === 'cli mock boolean rewrite'); + cli.commandToExecute = cli.commands.find(c => c.name === 'cli mock boolean rewrite'); cli .execute(['cli', 'mock', 'boolean', 'rewrite', '-x', 'yes', '-y', 'no', '--output', 'text']) .then(_ => { @@ -688,7 +688,7 @@ describe('Cli', () => { }); it(`shows error when a boolean option does not contain a correct truthy/falsy value`, (done) => { - (cli as any).commandToExecute = cli.commands.find(c => c.name === 'cli mock boolean rewrite'); + cli.commandToExecute = cli.commands.find(c => c.name === 'cli mock boolean rewrite'); cli .execute(['cli', 'mock', 'boolean', 'rewrite', '--booleanParameterX', 'folse']) .then(_ => done('Promise fulfilled while error expected'), _ => { @@ -698,7 +698,7 @@ describe('Cli', () => { }); it(`fails options validation if the command doesn't allow unknown options and specified options match command options`, (done) => { - (cli as any).commandToExecute = cli.commands.find(c => c.name === 'cli mock'); + cli.commandToExecute = cli.commands.find(c => c.name === 'cli mock'); cli .execute(['cli', 'mock', '-x', '123', '--paramZ']) .then(_ => done('Promise fulfilled while error expected'), _ => { @@ -713,7 +713,7 @@ describe('Cli', () => { }); it(`doesn't execute command action when option validation failed`, (done) => { - (cli as any).commandToExecute = cli.commands.find(c => c.name === 'cli mock'); + cli.commandToExecute = cli.commands.find(c => c.name === 'cli mock'); cli .execute(['cli', 'mock', '-x', '123', '--paramZ']) .then(_ => done('Promise fulfilled while error expected'), _ => { @@ -728,7 +728,7 @@ describe('Cli', () => { }); it(`exits with exit code 1 when option validation failed`, (done) => { - (cli as any).commandToExecute = cli.commands.find(c => c.name === 'cli mock'); + cli.commandToExecute = cli.commands.find(c => c.name === 'cli mock'); cli .execute(['cli', 'mock', '-x', '123', '--paramZ']) .then(_ => done('Promise fulfilled while error expected'), _ => { @@ -743,14 +743,14 @@ describe('Cli', () => { }); it(`does not prompt and fails validation if a required option is missing`, (done) => { - sinon.stub(Cli.getInstance(), 'getSettingWithDefaultValue').callsFake((settingName, defaultValue) => { + sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((settingName, defaultValue) => { if (settingName === settingsNames.prompt) { return undefined; } return defaultValue; }); - (cli as any).commandToExecute = cli.commands.find(c => c.name === 'cli mock'); + cli.commandToExecute = cli.commands.find(c => c.name === 'cli mock'); cli .execute(['cli', 'mock']) .then(_ => done('Promise fulfilled while error expected'), _ => { @@ -773,7 +773,7 @@ describe('Cli', () => { return defaultValue; }); - (cli as any).commandToExecute = cli.commands.find(c => c.name === 'cli mock optionsets'); + cli.commandToExecute = cli.commands.find(c => c.name === 'cli mock optionsets'); cli .execute(['cli', 'mock', 'optionsets']) .then(_ => done('Promise fulfilled while error expected'), _ => { @@ -796,7 +796,7 @@ describe('Cli', () => { return defaultValue; }); - (cli as any).commandToExecute = cli.commands.find(c => c.name === 'cli mock optionsets'); + cli.commandToExecute = cli.commands.find(c => c.name === 'cli mock optionsets'); cli .execute(['cli', 'mock', 'optionsets', '--opt1', 'testvalue', '--opt2', 'testvalue']) .then(_ => done('Promise fulfilled while error expected'), _ => { @@ -811,7 +811,7 @@ describe('Cli', () => { }); it(`passes validation when one option from a required set is specified`, (done) => { - (cli as any).commandToExecute = cli.commands.find(c => c.name === 'cli mock optionsets'); + cli.commandToExecute = cli.commands.find(c => c.name === 'cli mock optionsets'); cli .execute(['cli', 'mock', 'optionsets', '--opt1', 'testvalue']) .then(_ => { @@ -834,7 +834,7 @@ describe('Cli', () => { return defaultValue; }); - (cli as any).commandToExecute = cli.commands.find(c => c.name === 'cli mock optionsets'); + cli.commandToExecute = cli.commands.find(c => c.name === 'cli mock optionsets'); cli .execute(['cli', 'mock', 'optionsets', '--opt2', 'testvalue']) .then(_ => done('Promise fulfilled while error expected'), _ => { @@ -849,7 +849,7 @@ describe('Cli', () => { }); it(`passes validation when one option from a dependent set is specified`, (done) => { - (cli as any).commandToExecute = cli.commands.find(c => c.name === 'cli mock optionsets'); + cli.commandToExecute = cli.commands.find(c => c.name === 'cli mock optionsets'); cli .execute(['cli', 'mock', 'optionsets', '--opt2', 'testvalue', '--opt3', 'testvalue']) .then(_ => { @@ -872,7 +872,7 @@ describe('Cli', () => { return defaultValue; }); - (cli as any).commandToExecute = cli.commands.find(c => c.name === 'cli mock optionsets'); + cli.commandToExecute = cli.commands.find(c => c.name === 'cli mock optionsets'); cli .execute(['cli', 'mock', 'optionsets', '--opt1', 'testvalue', '--opt5', 'testvalue', '--opt6', 'testvalue']) .then(_ => done('Promise fulfilled while error expected'), _ => { @@ -887,7 +887,7 @@ describe('Cli', () => { }); it(`passes validation when one option from an optional set is specified`, (done) => { - (cli as any).commandToExecute = cli.commands.find(c => c.name === 'cli mock optionsets'); + cli.commandToExecute = cli.commands.find(c => c.name === 'cli mock optionsets'); cli .execute(['cli', 'mock', 'optionsets', '--opt2', 'testvalue', '--opt3', 'testvalue', '--opt5', 'testvalue']) .then(_ => { @@ -903,14 +903,14 @@ describe('Cli', () => { it(`prompts for required options`, (done) => { const promptStub: sinon.SinonStub = sinon.stub(prompt, 'forInput').resolves("test"); - sinon.stub(Cli.getInstance(), 'getSettingWithDefaultValue').callsFake((settingName, defaultValue) => { + sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((settingName, defaultValue) => { if (settingName === settingsNames.prompt) { return 'true'; } return defaultValue; }); - (cli as any).commandToExecute = cli.commands.find(c => c.name === 'cli mock'); + cli.commandToExecute = cli.commands.find(c => c.name === 'cli mock'); cli .execute(['cli', 'mock']) .then(_ => { @@ -926,7 +926,7 @@ describe('Cli', () => { it(`prompts for required options when autocomplete has items`, async () => { const promptStub: sinon.SinonStub = sinon.stub(prompt, 'forSelection').resolves("value1"); - sinon.stub(Cli.getInstance(), 'getSettingWithDefaultValue').callsFake((settingName, defaultValue) => { + sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((settingName, defaultValue) => { if (settingName === settingsNames.prompt) { return 'true'; } @@ -936,7 +936,7 @@ describe('Cli', () => { return defaultValue; }); - (cli as any).commandToExecute = cli.commands.find(c => c.name === 'cli mock autocomplete'); + cli.commandToExecute = cli.commands.find(c => c.name === 'cli mock autocomplete'); await cli.execute(['cli', 'mock', 'autocomplete']); assert.strictEqual(promptStub.firstCall.args[0].choices[0].value, 'value1'); assert.strictEqual(promptStub.firstCall.args[0].choices[1].value, 'value2'); @@ -953,13 +953,13 @@ describe('Cli', () => { const promptInputStub: sinon.SinonStub = sinon.stub(prompt, 'forInput').resolves('Test 123'); - sinon.stub(Cli.getInstance(), 'getSettingWithDefaultValue').callsFake((settingName, defaultValue) => { + sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((settingName, defaultValue) => { if (settingName === settingsNames.prompt) { return 'true'; } return defaultValue; }); - (cli as any).commandToExecute = cli.commands.find(c => c.name === 'cli mock optionsets'); + cli.commandToExecute = cli.commands.find(c => c.name === 'cli mock optionsets'); await cli.execute(['cli', 'mock', 'optionsets']); assert.strictEqual(promptStub.firstCall.args[0].choices[0].value, firstOptionValue); assert.strictEqual(promptStub.firstCall.args[0].choices[1].value, secondOptionValue); @@ -976,13 +976,13 @@ describe('Cli', () => { return (config.choices[0] as Choice).value; }); - sinon.stub(Cli.getInstance(), 'getSettingWithDefaultValue').callsFake((settingName, defaultValue) => { + sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((settingName, defaultValue) => { if (settingName === settingsNames.prompt) { return 'true'; } return defaultValue; }); - (cli as any).commandToExecute = cli.commands.find(c => c.name === 'cli mock optionsets'); + cli.commandToExecute = cli.commands.find(c => c.name === 'cli mock optionsets'); await cli.execute(['cli', 'mock', 'optionsets', '--opt1', 'testvalue', '--opt2', 'testvalue']); assert.strictEqual(promptStub.lastCall.args[0].message, `Option to use:`); assert.strictEqual(promptStub.lastCall.args[0].choices[0].value, firstOptionValue); @@ -1000,13 +1000,13 @@ describe('Cli', () => { const promptInputStub: sinon.SinonStub = sinon.stub(prompt, 'forInput').resolves('Test 123'); - sinon.stub(Cli.getInstance(), 'getSettingWithDefaultValue').callsFake((settingName, defaultValue) => { + sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((settingName, defaultValue) => { if (settingName === settingsNames.prompt) { return 'true'; } return defaultValue; }); - (cli as any).commandToExecute = cli.commands.find(c => c.name === 'cli mock optionsets'); + cli.commandToExecute = cli.commands.find(c => c.name === 'cli mock optionsets'); await cli.execute(['cli', 'mock', 'optionsets', '--opt2', 'testvalue']); assert.strictEqual(promptStub.firstCall.args[0].message, `Option to use:`); assert.strictEqual(promptStub.firstCall.args[0].choices[0].value, firstOptionValue); @@ -1023,13 +1023,13 @@ describe('Cli', () => { return (config.choices[0] as Choice).value; }); - sinon.stub(Cli.getInstance(), 'getSettingWithDefaultValue').callsFake((settingName, defaultValue) => { + sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((settingName, defaultValue) => { if (settingName === settingsNames.prompt) { return 'true'; } return defaultValue; }); - (cli as any).commandToExecute = cli.commands.find(c => c.name === 'cli mock optionsets'); + cli.commandToExecute = cli.commands.find(c => c.name === 'cli mock optionsets'); await cli.execute(['cli', 'mock', 'optionsets', '--opt2', 'testvalue', '--opt3', 'opt 3', '--opt4', 'opt 4']); assert.strictEqual(promptStub.lastCall.args[0].choices[0].value, firstOptionValue); assert.strictEqual(promptStub.lastCall.args[0].choices[1].value, secondOptionValue); @@ -1038,7 +1038,7 @@ describe('Cli', () => { it(`calls command's validation method when defined`, (done) => { const mockCommandValidateSpy: sinon.SinonSpy = sinon.spy(mockCommandWithValidation, 'validate'); - (cli as any).commandToExecute = cli.commands.find(c => c.name === 'cli mock1 validation'); + cli.commandToExecute = cli.commands.find(c => c.name === 'cli mock1 validation'); cli .execute(['cli', 'mock1', 'validation', '-x', '123']) .then(_ => { @@ -1056,7 +1056,7 @@ describe('Cli', () => { sinon.stub(mockCommandWithValidation, 'validate').callsFake(() => Promise.resolve(true)); const mockCommandWithValidationActionSpy: sinon.SinonSpy = sinon.spy(mockCommandWithValidation, 'action'); - (cli as any).commandToExecute = cli.commands.find(c => c.name === 'cli mock1 validation'); + cli.commandToExecute = cli.commands.find(c => c.name === 'cli mock1 validation'); cli .execute(['cli', 'mock1', 'validation', '-x', '123']) .then(_ => { @@ -1074,7 +1074,7 @@ describe('Cli', () => { sinon.stub(mockCommandWithValidation, 'validate').callsFake(() => Promise.resolve('Error')); const mockCommandWithValidationActionSpy: sinon.SinonSpy = sinon.spy(mockCommandWithValidation, 'action'); - (cli as any).commandToExecute = cli.commands.find(c => c.name === 'cli mock1 validation'); + cli.commandToExecute = cli.commands.find(c => c.name === 'cli mock1 validation'); cli .execute(['cli', 'mock1', 'validation', '-x', '123']) .then(_ => done('Promise fulfilled while error expected'), _ => { @@ -1089,7 +1089,7 @@ describe('Cli', () => { }); it(`executes command when validation passed`, (done) => { - (cli as any).commandToExecute = cli.commands.find(c => c.name === 'cli mock'); + cli.commandToExecute = cli.commands.find(c => c.name === 'cli mock'); cli .execute(['cli', 'mock', '-x', '123']) .then(_ => { @@ -1104,7 +1104,7 @@ describe('Cli', () => { }); it(`writes DONE when executing command in verbose mode succeeded`, (done) => { - (cli as any).commandToExecute = cli.commands.find(c => c.name === 'cli mock'); + cli.commandToExecute = cli.commands.find(c => c.name === 'cli mock'); cli .execute(['cli', 'mock', '-x', '123', '--verbose']) .then(_ => { @@ -1119,7 +1119,7 @@ describe('Cli', () => { }); it(`writes DONE when executing command in debug mode succeeded`, (done) => { - (cli as any).commandToExecute = cli.commands.find(c => c.name === 'cli mock'); + cli.commandToExecute = cli.commands.find(c => c.name === 'cli mock'); cli .execute(['cli', 'mock', '-x', '123', '--debug']) .then(_ => { @@ -1134,7 +1134,7 @@ describe('Cli', () => { }); it('executes the specified command', (done) => { - Cli + cli .executeCommand(mockCommand, { options: { _: [] } }) .then(_ => { try { @@ -1148,7 +1148,7 @@ describe('Cli', () => { }); it('logs command name when executing command in debug mode', (done) => { - Cli + cli .executeCommand(mockCommand, { options: { debug: true, _: [] } }) .then(_ => { try { @@ -1165,7 +1165,7 @@ describe('Cli', () => { const promptStub: sinon.SinonStub = sinon.stub(prompt, 'forConfirmation').resolves(true); const mockCommandWithConfirmationPrompt = new MockCommandWithConfirmationPrompt(); - Cli + cli .executeCommand(mockCommandWithConfirmationPrompt, { options: { _: [] } }) .then(_ => { try { @@ -1180,12 +1180,12 @@ describe('Cli', () => { it('prints command output with formatting', (done) => { const commandWithOutput: MockCommandWithOutput = new MockCommandWithOutput(); - Cli + cli .executeCommand(commandWithOutput, { options: { _: [] } }) .then(_ => { try { - assert(cliLogStub.called, 'Cli.log not called'); - assert(cliFormatOutputSpy.called, 'Cli.formatOutput not called'); + assert(cliLogStub.called, 'cli.log not called'); + assert(cliFormatOutputSpy.called, 'cli.formatOutput not called'); done(); } catch (e) { @@ -1196,12 +1196,12 @@ describe('Cli', () => { it('prints command output without formatting', (done) => { const commandWithOutput: MockCommandWithRawOutput = new MockCommandWithRawOutput(); - Cli + cli .executeCommand(commandWithOutput, { options: { _: [] } }) .then(_ => { try { - assert(cliLogStub.called, 'Cli.log not called'); - assert(cliFormatOutputSpy.notCalled, 'Cli.formatOutput called'); + assert(cliLogStub.called, 'cli.log not called'); + assert(cliFormatOutputSpy.notCalled, 'cli.formatOutput called'); done(); } catch (e) { @@ -1212,7 +1212,7 @@ describe('Cli', () => { it('returns command output when executing command with output', (done) => { const commandWithOutput: MockCommandWithOutput = new MockCommandWithOutput(); - Cli + cli .executeCommandWithOutput(commandWithOutput, { options: { _: [], output: 'text' } }) .then((output: CommandOutput) => { try { @@ -1227,7 +1227,7 @@ describe('Cli', () => { it('returns raw command output when executing command with output', (done) => { const commandWithOutput: MockCommandWithRawOutput = new MockCommandWithRawOutput(); - Cli + cli .executeCommandWithOutput(commandWithOutput, { options: { _: [], output: 'text' } }) .then((output: CommandOutput) => { try { @@ -1242,7 +1242,7 @@ describe('Cli', () => { it('returns debug command output when executing command with output in debug mode', (done) => { const commandWithOutput: MockCommandWithRawOutput = new MockCommandWithRawOutput(); - Cli + cli .executeCommandWithOutput(commandWithOutput, { options: { _: [], debug: true, output: 'text' } }) .then((output: CommandOutput) => { try { @@ -1259,7 +1259,7 @@ describe('Cli', () => { it('captures command stdout output in a listener when specified', (done) => { let output: string = ''; const commandWithOutput: MockCommandWithOutput = new MockCommandWithOutput(); - Cli + cli .executeCommandWithOutput(commandWithOutput, { options: { _: [], output: 'text' } }, { stdout: (message) => output = message }) @@ -1277,7 +1277,7 @@ describe('Cli', () => { it('captures command raw stdout output in a listener when specified', (done) => { let output: string = ''; const commandWithOutput: MockCommandWithRawOutput = new MockCommandWithRawOutput(); - Cli + cli .executeCommandWithOutput(commandWithOutput, { options: { _: [], output: 'text' } }, { stdout: (message) => output = message }) @@ -1295,7 +1295,7 @@ describe('Cli', () => { it('captures command stderr output in a listener when specified', (done) => { const output: string[] = []; const commandWithOutput: MockCommandWithRawOutput = new MockCommandWithRawOutput(); - Cli + cli .executeCommandWithOutput(commandWithOutput, { options: { _: [], output: 'text', debug: true } }, { stderr: (message) => output.push(message) }) @@ -1314,7 +1314,7 @@ describe('Cli', () => { const promptStub: sinon.SinonStub = sinon.stub(prompt, 'forConfirmation').resolves(true); const mockCommandWithConfirmationPrompt = new MockCommandWithConfirmationPrompt(); - Cli + cli .executeCommandWithOutput(mockCommandWithConfirmationPrompt, { options: { _: [] } }) .then(_ => { try { @@ -1328,24 +1328,24 @@ describe('Cli', () => { }); it('calls prompt tool when command shows interactive prompt and executed with output', async () => { - sinon.stub(Cli.getInstance(), 'getSettingWithDefaultValue').callsFake((() => true)); + sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((() => true)); const promptStub: sinon.SinonStub = sinon.stub(prompt, 'forSelection').callsFake(() => Promise.resolve("test") as any); const mockCommandWithHandleMultipleResultsFound = new MockCommandWithHandleMultipleResultsFound(); - await Cli.executeCommandWithOutput(mockCommandWithHandleMultipleResultsFound, { options: { _: [] } }); + await cli.executeCommandWithOutput(mockCommandWithHandleMultipleResultsFound, { options: { _: [] } }); assert(promptStub.called); }); it('throws error when interactive mode not set', async () => { - sinon.stub(Cli.getInstance(), 'getSettingWithDefaultValue').callsFake((() => false)); - await assert.rejects((Cli.handleMultipleResultsFound(`Multiple values with name found.`, { '1': { 'id': '1', 'title': 'Option1' }, '2': { 'id': '2', 'title': 'Option2' } }) + sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((() => false)); + await assert.rejects((cli.handleMultipleResultsFound(`Multiple values with name found.`, { '1': { 'id': '1', 'title': 'Option1' }, '2': { 'id': '2', 'title': 'Option2' } }) ), 'error'); }); it('correctly handles error when executing command', (done) => { sinon.stub(mockCommand, 'commandAction').callsFake(() => { throw 'Error'; }); - Cli + cli .executeCommand(mockCommand, { options: { _: [] } }) .then(_ => { done('Command succeeded while expected fail'); @@ -1361,14 +1361,14 @@ describe('Cli', () => { }); it('correctly handles error when executing command (execute)', async () => { - sinon.stub(Cli, 'executeCommand').callsFake(() => Promise.reject('Error')); - (cli as any).commandToExecute = cli.commands.find(c => c.name === 'cli completion clink update'); + sinon.stub(cli, 'executeCommand').callsFake(() => Promise.reject('Error')); + cli.commandToExecute = cli.commands.find(c => c.name === 'cli completion clink update'); assert.rejects(cli.execute(['cli', 'completion', 'clink', 'update']), new Error('Error')); }); it('correctly handles error when executing command with output', (done) => { sinon.stub(mockCommand, 'commandAction').callsFake(() => { throw 'Error'; }); - Cli + cli .executeCommandWithOutput(mockCommand, { options: { _: [] } }) .then(_ => { done('Command succeeded while expected fail'); @@ -1384,39 +1384,38 @@ describe('Cli', () => { }); it(`loads all commands, when the matched file doesn't contain command`, async () => { - sinon.stub(cli as any, 'loadCommandFromFile').callsFake(_ => (cli as any).loadCommandFromFile.wrappedMethod.apply(cli, [path.join(rootFolder, 'CommandInfo.js')])); + sinon.stub(cli, 'loadCommandFromFile').callsFake(_ => (cli.loadCommandFromFile as any).wrappedMethod.apply(cli, [path.join(rootFolder, 'CommandInfo.js')])); await cli.loadCommandFromArgs(['status']); - assert.strictEqual((cli as any).commandToExecute, undefined); + assert.strictEqual(cli.commandToExecute, undefined); }); it(`loads all commands, when exception was thrown when loading a command file`, async () => { - (cli as any).commandsFolder = path.join(rootFolder, '..', 'm365'); - sinon.stub((cli as any), 'loadCommandFromFile').returns(Promise.resolve()); + sinon.stub(cli, 'loadCommandFromFile').returns(Promise.resolve()); await cli.loadCommandFromArgs(['status']); - assert.strictEqual((cli as any).commandToExecute, undefined); + assert.strictEqual(cli.commandToExecute, undefined); }); it('doesn\'t fail when undefined object is passed to the log', async () => { - const actual = await (Cli as any).formatOutput(mockCommand, undefined, { output: 'text' }); + const actual = await cli.formatOutput(mockCommand, undefined, { output: 'text' }); assert.strictEqual(actual, undefined); }); it('returns the same object if non-array is passed to the log', async () => { const s = 'foo'; - const actual = await (Cli as any).formatOutput(mockCommand, s, { output: 'text' }); + const actual = await cli.formatOutput(mockCommand, s, { output: 'text' }); assert.strictEqual(actual, s); }); it('doesn\'t fail when an array with undefined object is passed to the log', async () => { - const actual = await (Cli as any).formatOutput(mockCommand, [undefined], { output: 'text' }); + const actual = await cli.formatOutput(mockCommand, [undefined], { output: 'text' }); assert.strictEqual(actual, ''); }); it('formats output as pretty JSON when JSON output requested', async () => { const o = { lorem: 'ipsum', dolor: 'sit' }; - const actual = await (Cli as any).formatOutput(mockCommand, o, { output: 'json' }); + const actual = await cli.formatOutput(mockCommand, o, { output: 'json' }); assert.strictEqual(actual, JSON.stringify(o, null, 2)); }); @@ -1429,7 +1428,7 @@ describe('Cli', () => { ' "_ObjectIdentity_": "b61700a0-9062-3000-659e-7f5738e3385a|908bed80-a04a-4433-b4a0-883d9847d110:1b11f502-9eb0-401a-b164-68933e6e9443\\\\\\nSiteProperties\\\\\\nhttps%3a%2f%2fm365x954810.sharepoint.com%2fsites%2fsite1617"', '}' ].join('\n'); - const actual = await (Cli as any).formatOutput(mockCommand, input, { output: 'json' }); + const actual = await cli.formatOutput(mockCommand, input, { output: 'json' }); assert.strictEqual(actual, expected); }); @@ -1445,7 +1444,7 @@ describe('Cli', () => { } ]; const expected = "header1,header2\nvalue1item1,value2item1\nvalue1item2,value2item2\n"; - const actual = await (Cli as any).formatOutput(mockCommand, input, { output: 'csv' }); + const actual = await cli.formatOutput(mockCommand, input, { output: 'csv' }); assert.strictEqual(actual, expected); }); @@ -1456,7 +1455,7 @@ describe('Cli', () => { "header2": "value2item1" }; const expected = "header1,header2\nvalue1item1,value2item1\n"; - const actual = await (Cli as any).formatOutput(mockCommand, input, { output: 'csv' }); + const actual = await cli.formatOutput(mockCommand, input, { output: 'csv' }); assert.strictEqual(actual, expected); }); @@ -1466,7 +1465,7 @@ describe('Cli', () => { "header1": "value1item1", "header2": "value2item1" }; - sinon.stub(Cli.getInstance(), 'getSettingWithDefaultValue').callsFake((settingName, defaultValue) => { + sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((settingName, defaultValue) => { if (settingName === settingsNames.csvHeader) { return false; } @@ -1474,7 +1473,7 @@ describe('Cli', () => { }); const expected = "value1item1,value2item1\n"; - const actual = await (Cli as any).formatOutput(mockCommand, input, { output: 'csv' }); + const actual = await cli.formatOutput(mockCommand, input, { output: 'csv' }); assert.strictEqual(actual, expected); }); @@ -1484,7 +1483,7 @@ describe('Cli', () => { "header1": "value1item1", "header2": "value2item1" }; - sinon.stub(Cli.getInstance(), 'getSettingWithDefaultValue').callsFake((settingName, defaultValue) => { + sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((settingName, defaultValue) => { if (settingName === settingsNames.csvQuoted) { return true; } @@ -1492,7 +1491,7 @@ describe('Cli', () => { }); const expected = "\"header1\",\"header2\"\n\"value1item1\",\"value2item1\"\n"; - const actual = await (Cli as any).formatOutput(mockCommand, input, { output: 'csv' }); + const actual = await cli.formatOutput(mockCommand, input, { output: 'csv' }); assert.strictEqual(actual, expected); }); @@ -1502,7 +1501,7 @@ describe('Cli', () => { "header1": "value1item1", "header2": "" }; - sinon.stub(Cli.getInstance(), 'getSettingWithDefaultValue').callsFake((settingName, defaultValue) => { + sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((settingName, defaultValue) => { if (settingName === settingsNames.csvQuotedEmpty) { return true; } @@ -1510,7 +1509,7 @@ describe('Cli', () => { }); const expected = "header1,header2\nvalue1item1,\"\"\n"; - const actual = await (Cli as any).formatOutput(mockCommand, input, { output: 'csv' }); + const actual = await cli.formatOutput(mockCommand, input, { output: 'csv' }); assert.strictEqual(actual, expected); }); @@ -1520,13 +1519,13 @@ describe('Cli', () => { "header1": "value1item1", "header2": "value2item1" }; - sinon.stub(Cli.getInstance(), 'getSettingWithDefaultValue').callsFake((settingName, defaultValue) => { + sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((settingName, defaultValue) => { if (settingName === settingsNames.csvQuoted) { return true; } return defaultValue; }); - sinon.stub(Cli.getInstance().config, 'get').callsFake((settingName) => { + sinon.stub(cli.getConfig(), 'get').callsFake((settingName) => { if (settingName === settingsNames.csvQuote) { return "_"; } @@ -1534,25 +1533,25 @@ describe('Cli', () => { }); const expected = "_header1_,_header2_\n_value1item1_,_value2item1_\n"; - const actual = await (Cli as any).formatOutput(mockCommand, input, { output: 'csv' }); + const actual = await cli.formatOutput(mockCommand, input, { output: 'csv' }); assert.strictEqual(actual, expected); }); it('formats simple output as text', async () => { const o = false; - const actual = await (Cli as any).formatOutput(mockCommand, o, { output: 'text' }); + const actual = await cli.formatOutput(mockCommand, o, { output: 'text' }); assert.strictEqual(actual, `${o}`); }); it('formats date output as text', async () => { const d = new Date(); - const actual = await (Cli as any).formatOutput(mockCommand, d, { output: 'text' }); + const actual = await cli.formatOutput(mockCommand, d, { output: 'text' }); assert.strictEqual(actual, d.toString()); }); it('formats object output as transposed table when passing sequential props', async () => { const o = { prop1: 'value1', prop2: 'value2' }; - const actual = await (Cli as any).formatOutput(mockCommand, o, { output: 'text' }); + const actual = await cli.formatOutput(mockCommand, o, { output: 'text' }); const t = new Table(); t.cell('prop1', 'value1'); t.cell('prop2', 'value2'); @@ -1565,7 +1564,7 @@ describe('Cli', () => { it('formats object output as transposed table', async () => { const o = { prop1: 'value1 ', prop12: 'value12' }; - const actual = await (Cli as any).formatOutput(mockCommand, o, { output: 'text' }); + const actual = await cli.formatOutput(mockCommand, o, { output: 'text' }); const t = new Table(); t.cell('prop1', 'value1'); t.cell('prop12', 'value12'); @@ -1578,7 +1577,7 @@ describe('Cli', () => { it('formats array values as JSON', async () => { const o = { prop1: ['value1', 'value2'] }; - const actual = await (Cli as any).formatOutput(mockCommand, o, { output: 'text' }); + const actual = await cli.formatOutput(mockCommand, o, { output: 'text' }); const expected = 'prop1: ["value1","value2"]' + '\n'; assert.strictEqual(actual, expected); }); @@ -1588,7 +1587,7 @@ describe('Cli', () => { ['value1', 'value2'], ['value3', 'value4'] ]; - const actual = await (Cli as any).formatOutput(mockCommand, o, { output: 'text' }); + const actual = await cli.formatOutput(mockCommand, o, { output: 'text' }); const expected = [o[0].join(','), o[1].join(',')].join(os.EOL); assert.strictEqual(actual, expected); }); @@ -1598,7 +1597,7 @@ describe('Cli', () => { { prop1: 'value1', prop2: 'value2' }, { prop1: 'value3', prop2: 'value4' } ]; - const actual = await (Cli as any).formatOutput(mockCommand, o, { output: 'text' }); + const actual = await cli.formatOutput(mockCommand, o, { output: 'text' }); const t = new Table(); t.cell('prop1', 'value1'); t.cell('prop2', 'value2'); @@ -1612,14 +1611,14 @@ describe('Cli', () => { it('formats command error as error message', async () => { const o = new CommandError('An error has occurred'); - const actual = await (Cli as any).formatOutput(mockCommand, o, { output: 'text' }); + const actual = await cli.formatOutput(mockCommand, o, { output: 'text' }); const expected = chalk.red('Error: An error has occurred'); assert.strictEqual(actual, expected); }); it('sets array type to the first non-undefined value', async () => { const o = [undefined, 'lorem', 'ipsum']; - const actual = await (Cli as any).formatOutput(mockCommand, o, { output: 'text' }); + const actual = await cli.formatOutput(mockCommand, o, { output: 'text' }); const expected = `${os.EOL}lorem${os.EOL}ipsum`; assert.strictEqual(actual, expected); }); @@ -1630,7 +1629,7 @@ describe('Cli', () => { 'lorem', { prop1: 'value3', prop2: 'value4' } ]; - const actual = await (Cli as any).formatOutput(mockCommand, o, { output: 'text' }); + const actual = await cli.formatOutput(mockCommand, o, { output: 'text' }); const t = new Table(); t.cell('prop1', 'value1'); t.cell('prop2', 'value2'); @@ -1653,7 +1652,7 @@ describe('Cli', () => { "header2": "value2item2" } ]; - const actual = await (Cli as any).formatOutput(mockCommand, input, { output: 'md' }); + const actual = await cli.formatOutput(mockCommand, input, { output: 'md' }); const match = actual.match(/^## /gm); assert.strictEqual(match, null); }); @@ -1664,7 +1663,7 @@ describe('Cli', () => { "header1": "value1item1", "header2": "value2item1" }; - const actual = await (Cli as any).formatOutput(mockCommand, input, { output: 'md' }); + const actual = await cli.formatOutput(mockCommand, input, { output: 'md' }); const match = actual.match(/^## /gm); assert.strictEqual(match, null); }); @@ -1674,7 +1673,7 @@ describe('Cli', () => { "first": "Joe", "last": "Doe" }; - const actual = await (Cli as any).formatOutput(mockCommand, o, { query: 'first', output: 'json' }); + const actual = await cli.formatOutput(mockCommand, o, { query: 'first', output: 'json' }); assert.strictEqual(actual, JSON.stringify("Joe")); }); @@ -1685,11 +1684,10 @@ describe('Cli', () => { { "name": "Bellevue", "state": "WA" }, { "name": "Olympia", "state": "WA" } ]; - const cli: Cli = Cli.getInstance(); - (cli as any).commandToExecute = { + cli.commandToExecute = { defaultProperties: ['name'] - }; - const actual = await (Cli as any).formatOutput(mockCommand, o, { output: 'text' }); + } as any; + const actual = await cli.formatOutput(mockCommand, o, { output: 'text' }); const t = new Table(); t.cell('name', 'Seattle'); t.newRow(); @@ -1712,11 +1710,10 @@ describe('Cli', () => { { "name": "Olympia", "state": "WA" } ] }; - const cli: Cli = Cli.getInstance(); - (cli as any).commandToExecute = { + cli.commandToExecute = { defaultProperties: ['name'] - }; - const actual = await (Cli as any).formatOutput(mockCommand, o, { output: 'text' }); + } as any; + const actual = await cli.formatOutput(mockCommand, o, { output: 'text' }); const t = new Table(); t.cell('name', 'Seattle'); t.newRow(); @@ -1739,7 +1736,7 @@ describe('Cli', () => { { "name": "Olympia", "state": "WA" } ] }; - const actual = await (Cli as any).formatOutput(mockCommand, o, { + const actual = await cli.formatOutput(mockCommand, o, { query: `locations[?state == 'WA'].name | sort(@) | {WashingtonCities: join(', ', @)}`, output: 'json' }); @@ -1757,7 +1754,7 @@ describe('Cli', () => { { "name": "Olympia", "state": "WA" } ] }; - const actual = await (Cli as any).formatOutput(mockCommand, o, { + const actual = await cli.formatOutput(mockCommand, o, { query: `locations[?state == 'WA'].name | sort(@) | {WashingtonCities: join(', ', @)}`, output: 'json', help: true @@ -1775,7 +1772,7 @@ describe('Cli', () => { ] }; assert.rejects(async () => { - await (Cli as any).formatOutput(mockCommand, o, { + await cli.formatOutput(mockCommand, o, { query: `contains(abc)`, output: 'json' }); @@ -1783,10 +1780,9 @@ describe('Cli', () => { }); it(`prints commands grouped per service when no command specified`, (done) => { - (cli as any).commandsFolder = path.join(rootFolder, '..', 'm365'); cli.loadCommandFromArgs(['status']); cli.loadCommandFromArgs(['spo', 'site', 'list']); - (cli as any).printAvailableCommands(); + cli.printAvailableCommands(); try { assert(cliLogStub.calledWith(' cli * 8 commands')); @@ -1798,15 +1794,14 @@ describe('Cli', () => { }); it(`prints commands from the specified group`, (done) => { - (cli as any).commandsFolder = path.join(rootFolder, '..', 'm365'); cli.loadCommandFromArgs(['status']); cli.loadCommandFromArgs(['spo', 'site', 'list']); - (cli as any).optionsFromArgs = { + cli.optionsFromArgs = { options: { _: ['cli'] } }; - (cli as any).printAvailableCommands(); + cli.printAvailableCommands(); try { assert(cliLogStub.calledWith(' cli mock * 5 commands')); @@ -1818,15 +1813,14 @@ describe('Cli', () => { }); it(`prints commands from the root group when the specified string doesn't match any group`, (done) => { - (cli as any).commandsFolder = path.join(rootFolder, '..', 'm365'); cli.loadCommandFromArgs(['status']); cli.loadCommandFromArgs(['spo', 'site', 'list']); - (cli as any).optionsFromArgs = { + cli.optionsFromArgs = { options: { _: ['foo'] } }; - (cli as any).printAvailableCommands(); + cli.printAvailableCommands(); try { assert(cliLogStub.calledWith(' cli * 8 commands')); @@ -1839,7 +1833,7 @@ describe('Cli', () => { it(`runs properly when context file not found`, (done) => { sinon.stub(fs, 'existsSync').callsFake(_ => false); - (cli as any).commandToExecute = cli.commands.find(c => c.name === 'cli mock'); + cli.commandToExecute = cli.commands.find(c => c.name === 'cli mock'); cli .execute(['cli', 'mock', '--parameterX', '123', '--output', 'json']) .then(_ => { @@ -1856,13 +1850,13 @@ describe('Cli', () => { it(`populates option from context file`, (done) => { sinon.stub(fs, 'existsSync').callsFake((path) => path.toString() === '.m365rc.json'); sinon.stub(fs, 'readFileSync').onCall(0).callsFake(_ => '{"context": {"parameterY": "456"}}').onCall(1).callsFake(_ => '{}'); - sinon.stub(Cli.getInstance(), 'getSettingWithDefaultValue').callsFake((settingName, defaultValue) => { + sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((settingName, defaultValue) => { if (settingName === settingsNames.prompt) { return undefined; } return defaultValue; }); - (cli as any).commandToExecute = cli.commands.find(c => c.name === 'cli mock'); + cli.commandToExecute = cli.commands.find(c => c.name === 'cli mock'); cli .execute(['cli', 'mock', '--parameterX', '123', '--output', 'text']) .then(_ => { @@ -1879,13 +1873,13 @@ describe('Cli', () => { it(`populates option from context file (debug mode)`, (done) => { sinon.stub(fs, 'existsSync').callsFake((path) => path.toString() === '.m365rc.json'); sinon.stub(fs, 'readFileSync').onCall(0).callsFake(_ => '{"context": {"parameterY": "456"}}').onCall(1).callsFake(_ => '{}'); - sinon.stub(Cli.getInstance(), 'getSettingWithDefaultValue').callsFake((settingName, defaultValue) => { + sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((settingName, defaultValue) => { if (settingName === settingsNames.prompt) { return undefined; } return defaultValue; }); - (cli as any).commandToExecute = cli.commands.find(c => c.name === 'cli mock'); + cli.commandToExecute = cli.commands.find(c => c.name === 'cli mock'); cli .execute(['cli', 'mock', '--parameterX', '123', '--output', 'text', '--debug']) .then(_ => { @@ -1902,13 +1896,13 @@ describe('Cli', () => { it(`runs properly when context m365rc file found but without any context`, (done) => { sinon.stub(fs, 'existsSync').callsFake((path) => path.toString() === '.m365rc.json'); sinon.stub(fs, 'readFileSync').onCall(0).callsFake(_ => '{}').onCall(1).callsFake(_ => '{}'); - sinon.stub(Cli.getInstance(), 'getSettingWithDefaultValue').callsFake((settingName, defaultValue) => { + sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((settingName, defaultValue) => { if (settingName === settingsNames.prompt) { return undefined; } return defaultValue; }); - (cli as any).commandToExecute = cli.commands.find(c => c.name === 'cli mock'); + cli.commandToExecute = cli.commands.find(c => c.name === 'cli mock'); cli .execute(['cli', 'mock', '--parameterX', '123', '--output', 'text']) .then(_ => { @@ -1925,13 +1919,13 @@ describe('Cli', () => { it(`throws error when context json parse fails`, (done) => { sinon.stub(fs, 'existsSync').callsFake((path) => path.toString() === '.m365rc.json'); sinon.stub(fs, 'readFileSync').onCall(0).callsFake(_ => 'I will not parse').onCall(1).callsFake(_ => '{}'); - sinon.stub(Cli.getInstance(), 'getSettingWithDefaultValue').callsFake((settingName, defaultValue) => { + sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((settingName, defaultValue) => { if (settingName === settingsNames.prompt) { return undefined; } return defaultValue; }); - (cli as any).commandToExecute = cli.commands.find(c => c.name === 'cli mock'); + cli.commandToExecute = cli.commands.find(c => c.name === 'cli mock'); cli .execute(['cli', 'mock', '--parameterX', '123', '--output', 'text']) .then(_ => { @@ -1949,7 +1943,7 @@ describe('Cli', () => { it(`exits with the specified exit code`, async () => { try { - await (cli as any).closeWithError(new CommandError('Error', 5), { options: {} }); + await cli.closeWithError(new CommandError('Error', 5), { options: {} }); assert.fail(`Didn't fail while expected`); } catch { @@ -1958,11 +1952,11 @@ describe('Cli', () => { }); it(`prints error as JSON in JSON output mode and printErrorsAsPlainText set to false`, async () => { - const config = cli.config; + const config = cli.getConfig(); sinon.stub(config, 'get').callsFake(() => false); try { - await (cli as any).closeWithError(new CommandError('Error'), { options: { output: 'json' } }); + await cli.closeWithError(new CommandError('Error'), { options: { output: 'json' } }); assert.fail(`Didn't fail while expected`); } catch (err) { @@ -1973,7 +1967,7 @@ describe('Cli', () => { it(`replaces option value with the content of the specified file when value starts with @ and the specified file exists`, (done) => { sinon.stub(fs, 'existsSync').callsFake((path) => path.toString().endsWith('.txt')); sinon.stub(fs, 'readFileSync').callsFake(_ => 'abc'); - (cli as any).commandToExecute = cli.commands.find(c => c.name === 'cli mock'); + cli.commandToExecute = cli.commands.find(c => c.name === 'cli mock'); cli .execute(['cli', 'mock', '-x', '@file.txt', '-o', 'text']) .then(_ => { @@ -1990,7 +1984,7 @@ describe('Cli', () => { it(`returns error when reading file contents failed`, (done) => { sinon.stub(fs, 'existsSync').callsFake(_ => true); sinon.stub(fs, 'readFileSync').callsFake(_ => { throw 'An error has occurred'; }); - (cli as any).commandToExecute = cli.commands.find(c => c.name === 'cli mock'); + cli.commandToExecute = cli.commands.find(c => c.name === 'cli mock'); cli .execute(['cli', 'mock', '-x', '@file.txt']) .then(_ => { @@ -2008,7 +2002,7 @@ describe('Cli', () => { it(`leaves the original value if the file specified in @ value doesn't exist`, (done) => { sinon.stub(fs, 'existsSync').callsFake(_ => false); - (cli as any).commandToExecute = cli.commands.find(c => c.name === 'cli mock'); + cli.commandToExecute = cli.commands.find(c => c.name === 'cli mock'); cli .execute(['cli', 'mock', '-x', '@file.txt', '-o', 'text']) .then(_ => { @@ -2024,7 +2018,7 @@ describe('Cli', () => { it(`closes with error when processing options failed`, (done) => { sinon.stub(mockCommand, 'processOptions').callsFake(() => Promise.reject('Error')); - (cli as any).commandToExecute = cli.commands.find(c => c.name === 'cli mock'); + cli.commandToExecute = cli.commands.find(c => c.name === 'cli mock'); cli .execute(['cli', 'mock', '-x', '123']) .then(_ => { @@ -2041,64 +2035,64 @@ describe('Cli', () => { }); it(`logs output to console`, () => { - sinonUtil.restore((Cli as any).log); + sinonUtil.restore(cli.log); const consoleLogSpy: sinon.SinonSpy = sinon.stub(console, 'log').callsFake(() => { }); - (Cli as any).log('Message'); + cli.log('Message'); assert(consoleLogSpy.calledWith('Message')); }); it(`logs empty line to console when no message specified`, () => { - sinonUtil.restore((Cli as any).log); + sinonUtil.restore(cli.log); const consoleLogSpy: sinon.SinonSpy = sinon.stub(console, 'log').callsFake(() => { }); - (Cli as any).log(); + cli.log(); assert(consoleLogSpy.calledWith()); }); it(`logs error to console stderr`, async () => { - sinonUtil.restore((Cli as any).error); + sinonUtil.restore(cli.error); sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((name, defaultValue) => defaultValue); const consoleErrorStub = sinon.stub(console, 'error').callsFake(() => { }); - await (Cli as any).error('Message'); + await cli.error('Message'); assert(consoleErrorStub.calledWith('Message')); }); it(`logs error to console stdout when stdout configured as error output`, async () => { - const config = cli.config; + const config = cli.getConfig(); sinon.stub(config, 'get').callsFake(() => 'stdout'); - sinonUtil.restore((Cli as any).error); + sinonUtil.restore(cli.error); const consoleErrorSpy: sinon.SinonSpy = sinon.stub(console, 'error').callsFake(() => { }); const consoleLogSpy: sinon.SinonSpy = sinon.stub(console, 'log').callsFake(() => { }); - await (Cli as any).error('Message'); + await cli.error('Message'); assert(consoleErrorSpy.notCalled, 'console.error called'); assert(consoleLogSpy.calledWith('Message'), 'console.log not called with the right message'); }); it(`returns stored configuration value when available`, () => { - const config = cli.config; + const config = cli.getConfig(); sinon.stub(config, 'get').callsFake(() => 'value'); const actualValue = cli.getSettingWithDefaultValue('key', ''); assert.strictEqual(actualValue, 'value'); }); it('returns true, for the method shouldTrimOutput, when output is text', () => { - const spyShouldTrimOutput = Cli.shouldTrimOutput('text'); + const spyShouldTrimOutput = cli.shouldTrimOutput('text'); assert.strictEqual(spyShouldTrimOutput, true); }); it('returns false, for the method shouldTrimOutput, when output is csv', () => { - const spyShouldTrimOutput = Cli.shouldTrimOutput('csv'); + const spyShouldTrimOutput = cli.shouldTrimOutput('csv'); assert.strictEqual(spyShouldTrimOutput, false); }); it('returns false, for the method shouldTrimOutput, when output is json', () => { - const spyShouldTrimOutput = Cli.shouldTrimOutput('json'); + const spyShouldTrimOutput = cli.shouldTrimOutput('json'); assert.strictEqual(spyShouldTrimOutput, false); }); it('does not show help when output is set to none', (done) => { - (cli as any).commandToExecute = cli.commands.find(c => c.name === 'cli completion clink update'); + cli.commandToExecute = cli.commands.find(c => c.name === 'cli completion clink update'); cli .execute(['cli', 'completion', 'clink', 'update', '-h', 'examples', '--output', 'none']) .then(_ => { @@ -2113,7 +2107,7 @@ describe('Cli', () => { }); it(`shows no output on successful run with output set to none`, (done) => { - (cli as any).commandToExecute = cli.commands.find(c => c.name === 'cli mock boolean rewrite'); + cli.commandToExecute = cli.commands.find(c => c.name === 'cli mock boolean rewrite'); cli .execute(['cli', 'mock', 'boolean', 'rewrite', '--booleanParameterX', 'true', '--booleanParameterY', 'false', '--output', 'none']) .then(_ => { @@ -2129,7 +2123,7 @@ describe('Cli', () => { }); it(`shows no output when a validation error occurs in and output is set to none`, (done) => { - (cli as any).commandToExecute = cli.commands.find(c => c.name === 'cli mock boolean rewrite'); + cli.commandToExecute = cli.commands.find(c => c.name === 'cli mock boolean rewrite'); cli .execute(['cli', 'mock', 'boolean', 'rewrite', '--booleanParameterX', 'folse', '--output', 'none']) .then(_ => { @@ -2142,7 +2136,7 @@ describe('Cli', () => { it('for completion commands loads full command info', async () => { sinonUtil.restore(cli.loadAllCommandsInfo); const loadAllCommandsInfoStub = sinon.spy(cli, 'loadAllCommandsInfo'); - sinon.stub(Cli, 'executeCommand').callsFake(() => Promise.resolve()); + sinon.stub(cli, 'executeCommand').callsFake(() => Promise.resolve()); await cli.execute(['cli', 'completion', 'sh', 'update']); assert(loadAllCommandsInfoStub.calledWith(true)); diff --git a/src/cli/cli.ts b/src/cli/cli.ts new file mode 100644 index 00000000000..5462f5855cd --- /dev/null +++ b/src/cli/cli.ts @@ -0,0 +1,1053 @@ +import Configstore from 'configstore'; +import fs from 'fs'; +import minimist from 'minimist'; +import { createRequire } from 'module'; +import ora, { Options, Ora } from 'ora'; +import os from 'os'; +import path from 'path'; +import { fileURLToPath, pathToFileURL } from 'url'; +import Command, { CommandArgs, CommandError, CommandTypes } from '../Command.js'; +import GlobalOptions from '../GlobalOptions.js'; +import config from '../config.js'; +import { M365RcJson } from '../m365/base/M365RcJson.js'; +import request from '../request.js'; +import { settingsNames } from '../settingsNames.js'; +import { telemetry } from '../telemetry.js'; +import { app } from '../utils/app.js'; +import { formatting } from '../utils/formatting.js'; +import { md } from '../utils/md.js'; +import { validation } from '../utils/validation.js'; +import { CommandInfo } from './CommandInfo.js'; +import { CommandOptionInfo } from './CommandOptionInfo.js'; +import { Logger } from './Logger.js'; +import { SelectionConfig, ConfirmationConfig, prompt } from '../utils/prompt.js'; +import { timings } from './timings.js'; +const require = createRequire(import.meta.url); + +const __dirname = fileURLToPath(new URL('.', import.meta.url)); + +export interface CommandOutput { + stdout: string; + stderr: string; +} + +let _config: Configstore | undefined; +// we assign it through exported function to support mocking +// eslint-disable-next-line prefer-const +let spinner: Ora = ora(); +const commands: CommandInfo[] = []; +/** + * Command to execute + */ +let commandToExecute: CommandInfo | undefined; +/** + * Name of the command specified through args + */ +let currentCommandName: string | undefined; +let optionsFromArgs: { options: minimist.ParsedArgs } | undefined; +const defaultHelpMode = 'options'; +const helpModes: string[] = ['options', 'examples', 'remarks', 'response', 'full']; + +function getConfig(): Configstore { + if (!_config) { + _config = new Configstore(config.configstoreName); + } + + return _config; +} + +function getSettingWithDefaultValue(settingName: string, defaultValue: TValue): TValue { + const configuredValue: TValue | undefined = cli.getConfig().get(settingName); + if (typeof configuredValue === 'undefined') { + return defaultValue; + } + else { + return configuredValue; + } +} + +async function execute(rawArgs: string[]): Promise { + const start = process.hrtime.bigint(); + + // for completion commands we also need information about commands' options + const loadAllCommandInfo: boolean = rawArgs.indexOf('completion') > -1; + cli.loadAllCommandsInfo(loadAllCommandInfo); + + // check if help for a specific command has been requested using the + // 'm365 help xyz' format. If so, remove 'help' from the array of words + // to use lazy loading commands but keep track of the fact that help should + // be displayed + let showHelp: boolean = false; + if (rawArgs.length > 0 && rawArgs[0] === 'help') { + showHelp = true; + rawArgs.shift(); + } + + // parse args to see if a command has been specified + const parsedArgs: minimist.ParsedArgs = minimist(rawArgs); + + // load command + await cli.loadCommandFromArgs(parsedArgs._); + + if (cli.commandToExecute) { + // we have found a command to execute. Parse args again taking into + // account short and long options, option types and whether the command + // supports known and unknown options or not + + try { + cli.optionsFromArgs = { + options: getCommandOptionsFromArgs(rawArgs, cli.commandToExecute) + }; + } + catch (e: any) { + const optionsWithoutShorts = removeShortOptions({ options: parsedArgs }); + + return cli.closeWithError(e.message, optionsWithoutShorts, false); + } + } + else { + // we need this to properly support displaying commands + // from the current group + cli.optionsFromArgs = { + options: parsedArgs + }; + } + + // show help if no match found, help explicitly requested or + // no command specified + if (!cli.commandToExecute || + showHelp || + parsedArgs.h || + parsedArgs.help) { + if (parsedArgs.output !== 'none') { + printHelp(await getHelpMode(parsedArgs)); + } + return Promise.resolve(); + } + + delete (cli.optionsFromArgs.options as any)._; + delete (cli.optionsFromArgs.options as any)['--']; + + try { + // replace values staring with @ with file contents + loadOptionValuesFromFiles(cli.optionsFromArgs); + } + catch (e) { + return cli.closeWithError(e, cli.optionsFromArgs); + } + + const startProcessing = process.hrtime.bigint(); + try { + // process options before passing them on to validation stage + const contextCommandOptions = await loadOptionsFromContext(cli.commandToExecute.options, cli.optionsFromArgs.options.debug); + cli.optionsFromArgs.options = { ...contextCommandOptions, ...cli.optionsFromArgs.options }; + await cli.commandToExecute.command.processOptions(cli.optionsFromArgs.options); + + const endProcessing = process.hrtime.bigint(); + timings.options.push(Number(endProcessing - startProcessing)); + } + catch (e: any) { + const endProcessing = process.hrtime.bigint(); + timings.options.push(Number(endProcessing - startProcessing)); + + return cli.closeWithError(e.message, cli.optionsFromArgs, false); + } + + // if output not specified, set the configured output value (if any) + if (cli.optionsFromArgs.options.output === undefined) { + cli.optionsFromArgs.options.output = cli.getSettingWithDefaultValue(settingsNames.output, 'json'); + } + + const startValidation = process.hrtime.bigint(); + const validationResult = await cli.commandToExecute.command.validate(cli.optionsFromArgs, cli.commandToExecute); + const endValidation = process.hrtime.bigint(); + timings.validation.push(Number(endValidation - startValidation)); + if (validationResult !== true) { + return cli.closeWithError(validationResult, cli.optionsFromArgs, true); + } + + const end = process.hrtime.bigint(); + timings.core.push(Number(end - start)); + + try { + await cli.executeCommand(cli.commandToExecute.command, cli.optionsFromArgs); + const endTotal = process.hrtime.bigint(); + timings.total.push(Number(endTotal - start)); + printTimings(rawArgs); + process.exit(0); + } + catch (err) { + const endTotal = process.hrtime.bigint(); + timings.total.push(Number(endTotal - start)); + printTimings(rawArgs); + await cli.closeWithError(err, cli.optionsFromArgs); + /* c8 ignore next */ + } +} + +function printTimings(rawArgs: string[]): void { + if (rawArgs.some(arg => arg === '--debug')) { + cli.error(''); + cli.error('Timings:'); + Object.getOwnPropertyNames(timings).forEach(key => { + cli.error(`${key}: ${(timings as any)[key].reduce((a: number, b: number) => a + b, 0) / 1e6}ms`); + }); + } +} + +async function executeCommand(command: Command, args: { options: minimist.ParsedArgs }): Promise { + const logger: Logger = { + log: async (message: any): Promise => { + if (args.options.output !== 'none') { + const output: any = await cli.formatOutput(command, message, args.options); + cli.log(output); + } + }, + logRaw: async (message: any): Promise => { + if (args.options.output !== 'none') { + cli.log(message); + } + }, + logToStderr: async (message: any): Promise => { + if (args.options.output !== 'none') { + cli.error(message); + } + } + }; + + if (args.options.debug) { + await logger.logToStderr(`Executing command ${command.name} with options ${JSON.stringify(args)}`); + } + + // store the current command name, if any and set the name to the name of + // the command to execute + const parentCommandName: string | undefined = cli.currentCommandName; + cli.currentCommandName = command.getCommandName(cli.currentCommandName); + const showSpinner = cli.getSettingWithDefaultValue(settingsNames.showSpinner, true) && args.options.output !== 'none'; + + // don't show spinner if running tests + /* c8 ignore next 3 */ + if (showSpinner && typeof global.it === 'undefined') { + cli.spinner.start(); + } + + const startCommand = process.hrtime.bigint(); + try { + await command.action(logger, args as any); + + if (args.options.debug || args.options.verbose) { + const chalk = (await import('chalk')).default; + await logger.logToStderr(chalk.green('DONE')); + } + } + finally { + // restore the original command name + cli.currentCommandName = parentCommandName; + + /* c8 ignore next 3 */ + if (cli.spinner.isSpinning) { + cli.spinner.stop(); + } + + const endCommand = process.hrtime.bigint(); + timings.command.push(Number(endCommand - startCommand)); + } +} + +async function executeCommandWithOutput(command: Command, args: { options: minimist.ParsedArgs }, listener?: { + stdout?: (message: any) => void, + stderr?: (message: any) => void +}): Promise { + const log: string[] = []; + const logErr: string[] = []; + const logger: Logger = { + log: async (message: any): Promise => { + const formattedMessage = await cli.formatOutput(command, message, args.options); + if (listener && listener.stdout) { + listener.stdout(formattedMessage); + } + log.push(formattedMessage); + }, + logRaw: async (message: any): Promise => { + const formattedMessage = await cli.formatOutput(command, message, args.options); + if (listener && listener.stdout) { + listener.stdout(formattedMessage); + } + log.push(formattedMessage); + }, + logToStderr: async (message: any): Promise => { + if (listener && listener.stderr) { + listener.stderr(message); + } + logErr.push(message); + } + }; + + if (args.options.debug && args.options.output !== 'none') { + const message = `Executing command ${command.name} with options ${JSON.stringify(args)}`; + if (listener && listener.stderr) { + listener.stderr(message); + } + logErr.push(message); + } + + // store the current command name, if any and set the name to the name of + // the command to execute + const parentCommandName: string | undefined = cli.currentCommandName; + cli.currentCommandName = command.getCommandName(); + // store the current logger if any + const currentLogger: Logger | undefined = request.logger; + + try { + await command.action(logger, args as any); + + return ({ + stdout: log.join(os.EOL), + stderr: logErr.join(os.EOL) + }); + } + catch (err: any) { + // restoring the command and logger is done here instead of in a 'finally' because there were issues with the code coverage tool + // restore the original command name + cli.currentCommandName = parentCommandName; + // restore the original logger + request.logger = currentLogger; + + throw { + error: err, + stderr: logErr.join(os.EOL) + }; + } + /* c8 ignore next */ + finally { + // restore the original command name + cli.currentCommandName = parentCommandName; + // restore the original logger + request.logger = currentLogger; + } +} + +function loadAllCommandsInfo(loadFull: boolean = false): void { + const commandsInfoFileName = loadFull ? 'allCommandsFull.json' : 'allCommands.json'; + cli.commands = require(path.join(__dirname, '..', '..', commandsInfoFileName)); +} + +/** + * Loads command files into CLI based on the specified arguments. + * + * @param commandNameWords Array of words specified as args +*/ +async function loadCommandFromArgs(commandNameWords: string[]): Promise { + if (commandNameWords.length === 0) { + return; + } + + cli.currentCommandName = commandNameWords.join(' '); + + const commandFilePath = cli.commands + .find(c => c.name === cli.currentCommandName || + c.aliases?.find(a => a === cli.currentCommandName))?.file ?? ''; + + if (commandFilePath) { + await cli.loadCommandFromFile(commandFilePath); + } +} + +async function loadOptionsFromContext(commandOptions: CommandOptionInfo[], debug: boolean | undefined): Promise { + const filePath: string = '.m365rc.json'; + let m365rc: M365RcJson = {}; + + if (!fs.existsSync(filePath)) { + return; + } + + if (debug!) { + await cli.error('found .m365rc.json file'); + } + + try { + const fileContents: string = fs.readFileSync(filePath, 'utf8'); + if (fileContents) { + m365rc = JSON.parse(fileContents); + } + } + catch (e) { + await cli.closeWithError(`Error parsing ${filePath}`, { options: {} }); + /* c8 ignore next */ + } + + if (!m365rc.context) { + return; + } + + if (debug!) { + await cli.error('found context in .m365rc.json file'); + } + + const context = m365rc.context; + + const foundOptions: any = {}; + await commandOptions.forEach(async option => { + if (context[option.name]) { + foundOptions[option.name] = context[option.name]; + if (debug!) { + await cli.error(`returning ${option.name} option from context`); + } + } + }); + + return foundOptions; +} + +/** + * Loads command from the specified file into CLI. If can't find the file + * or the file doesn't contain a command, loads all available commands. + * + * @param commandFilePathUrl File path of the file with command to load + */ +async function loadCommandFromFile(commandFileUrl: string): Promise { + const commandsFolder = path.join(__dirname, '../m365'); + const filePath: string = path.join(commandsFolder, commandFileUrl); + + if (!fs.existsSync(filePath)) { + // reset command name + cli.currentCommandName = undefined; + return; + } + + try { + const command: any = await import(pathToFileURL(filePath).toString()); + if (command.default instanceof Command) { + const commandInfo = cli.commands.find(c => c.file === commandFileUrl); + cli.commandToExecute = cli.getCommandInfo(command.default, commandFileUrl, commandInfo?.help); + } + } + catch { } +} + +function getCommandInfo(command: Command, filePath: string = '', helpFilePath: string = ''): CommandInfo { + return { + aliases: command.alias(), + name: command.name, + description: command.description, + command: command, + options: getCommandOptions(command), + defaultProperties: command.defaultProperties(), + file: filePath, + help: helpFilePath + }; +} + +function getCommandOptions(command: Command): CommandOptionInfo[] { + const options: CommandOptionInfo[] = []; + + command.options.forEach(option => { + const required: boolean = option.option.indexOf('<') > -1; + const optionArgs: string[] = option.option.split(/[ ,|]+/); + let short: string | undefined; + let long: string | undefined; + let name: string = ''; + optionArgs.forEach(o => { + if (o.startsWith('--')) { + long = o.replace('--', ''); + name = long; + } + else if (o.startsWith('-')) { + short = o.replace('-', ''); + name = short; + } + }); + + options.push({ + autocomplete: option.autocomplete, + long: long, + name: name, + required: required, + short: short + }); + }); + + return options; +} + +function getCommandOptionsFromArgs(args: string[], commandInfo: CommandInfo | undefined): minimist.ParsedArgs { + const minimistOptions: minimist.Opts = { + alias: {} + }; + + let argsToParse = args; + + if (commandInfo) { + const commandTypes = commandInfo.command.types; + if (commandTypes) { + minimistOptions.string = commandTypes.string; + + // minimist will parse unused boolean options to 'false' (unused options => options that are not included in the args) + // But in the CLI booleans are nullable. They can can be true, false or undefined. + // For this reason we only pass boolean types that are actually used as arg. + minimistOptions.boolean = commandTypes.boolean.filter(optionName => args.some(arg => `--${optionName}` === arg || `-${optionName}` === arg)); + } + + minimistOptions.alias = {}; + commandInfo.options.forEach(option => { + if (option.short && option.long) { + (minimistOptions.alias as any)[option.short] = option.long; + } + }); + + argsToParse = getRewrittenArgs(args, commandTypes); + } + + return minimist(argsToParse, minimistOptions); +} + +/** + * Rewrites arguments (if necessary) before passing them into minimist. + * Currently only boolean values are checked and fixed. + * Args are only checked and rewritten if the option has been added to the 'types.boolean' array. + */ +function getRewrittenArgs(args: string[], commandTypes: CommandTypes): string[] { + const booleanTypes = commandTypes.boolean; + + if (booleanTypes.length === 0) { + return args; + } + + return args.map((arg: string, index: number, array: string[]) => { + if (arg.startsWith('-') || index === 0) { + return arg; + } + + // This line checks if the current arg is a value that belongs to a boolean option. + if (booleanTypes.some(t => `--${t}` === array[index - 1] || `-${t}` === array[index - 1])) { + const rewrittenBoolean = formatting.rewriteBooleanValue(arg); + + if (!validation.isValidBoolean(rewrittenBoolean)) { + const optionName = array[index - 1]; + throw new Error(`The value '${arg}' for option '${optionName}' is not a valid boolean`); + } + + return rewrittenBoolean; + } + + return arg; + }); +} + +async function formatOutput(command: Command, logStatement: any, options: GlobalOptions): Promise { + if (logStatement instanceof Date) { + return logStatement.toString(); + } + + let logStatementType: string = typeof logStatement; + + if (logStatementType === 'undefined') { + return logStatement; + } + + // we need to get the list of object's properties to see if the specified + // JMESPath query (if any) filters object's properties or not. We need to + // know this in order to decide if we should use default command's + // properties or custom ones from JMESPath + const originalObject: any = Array.isArray(logStatement) ? getFirstNonUndefinedArrayItem(logStatement) : logStatement; + const originalProperties: string[] = originalObject && typeof originalObject !== 'string' ? Object.getOwnPropertyNames(originalObject) : []; + + if (options.query && + !options.help) { + const jmespath = await import('jmespath'); + try { + logStatement = jmespath.search(logStatement, options.query); + } + catch (e: any) { + const message = `JMESPath query error. ${e.message}. See https://jmespath.org/specification.html for more information`; + await cli.closeWithError(message, { options }, false); + /* c8 ignore next */ + } + // we need to update the statement type in case the JMESPath query + // returns an object of different shape than the original message to log + // #2095 + logStatementType = typeof logStatement; + } + + if (!options.output || options.output === 'json') { + return command.getJsonOutput(logStatement); + } + + if (logStatement instanceof CommandError) { + const chalk = (await import('chalk')).default; + return chalk.red(`Error: ${logStatement.message}`); + } + + let arrayType: string = ''; + if (!Array.isArray(logStatement)) { + logStatement = [logStatement]; + arrayType = logStatementType; + } + else { + for (let i: number = 0; i < logStatement.length; i++) { + if (Array.isArray(logStatement[i])) { + arrayType = 'array'; + break; + } + + const t: string = typeof logStatement[i]; + if (t !== 'undefined') { + arrayType = t; + break; + } + } + } + + if (arrayType !== 'object') { + return logStatement.join(os.EOL); + } + + // if output type has been set to 'text', process the retrieved + // data so that returned objects contain only default properties specified + // on the current command. If there is no current command or the + // command doesn't specify default properties, return original data + if (cli.shouldTrimOutput(options.output)) { + const currentCommand: CommandInfo | undefined = cli.commandToExecute; + + if (arrayType === 'object' && + currentCommand && currentCommand.defaultProperties) { + // the log statement contains the same properties as the original object + // so it can be filtered following the default properties specified on + // the command + if (JSON.stringify(originalProperties) === JSON.stringify(Object.getOwnPropertyNames(logStatement[0]))) { + // in some cases we return properties wrapped in `value` array + // returned by the API. We'll remove it in the future, but for now + // we'll use a workaround to drop the `value` array here + if (logStatement[0].value && + Array.isArray(logStatement[0].value)) { + logStatement = logStatement[0].value; + } + + logStatement = logStatement.map((s: any) => + formatting.filterObject(s, currentCommand.defaultProperties as string[])); + } + } + } + + switch (options.output) { + case 'csv': + return command.getCsvOutput(logStatement, options); + case 'md': + return command.getMdOutput(logStatement, command, options); + default: + return command.getTextOutput(logStatement); + } +} + +function getFirstNonUndefinedArrayItem(arr: any[]): any { + for (let i: number = 0; i < arr.length; i++) { + const a: any = arr[i]; + if (typeof a !== 'undefined') { + return a; + } + } + + return undefined; +} + +function printHelp(helpMode: string, exitCode: number = 0): void { + const properties: any = {}; + + if (cli.commandToExecute) { + properties.command = cli.commandToExecute.name; + printCommandHelp(helpMode); + } + else { + cli.log(); + cli.log(`CLI for Microsoft 365 v${app.packageJson().version}`); + cli.log(`${app.packageJson().description} `); + cli.log(); + + properties.command = 'commandList'; + cli.printAvailableCommands(); + } + + telemetry.trackEvent('help', properties); + + process.exit(exitCode); +} + +function printCommandHelp(helpMode: string): void { + const docsRootDir = path.join(__dirname, '..', '..', 'docs'); + const helpFilePath = path.join(docsRootDir, 'docs', 'cmd', cli.commandToExecute!.help!); + + if (fs.existsSync(helpFilePath)) { + let helpContents = fs.readFileSync(helpFilePath, 'utf8'); + helpContents = getHelpSection(helpMode, helpContents); + helpContents = md.md2plain(helpContents, docsRootDir); + cli.log(); + cli.log(helpContents); + } +} + +async function getHelpMode(options: any): Promise { + const { h, help } = options; + + if (!h && !help) { + return cli.getSettingWithDefaultValue(settingsNames.helpMode, defaultHelpMode); + } + + // user passed -h or --help, let's see if they passed a specific mode + // or requested the default + const helpMode: boolean | string = h ?? help; + + if (typeof helpMode === 'boolean' || typeof helpMode !== 'string') { + // requested default mode or passed a number, let's use default + return cli.getSettingWithDefaultValue(settingsNames.helpMode, defaultHelpMode); + } + else { + const lowerCaseHelpMode = helpMode.toLowerCase(); + + if (cli.helpModes.indexOf(lowerCaseHelpMode) < 0) { + await cli.closeWithError(`Unknown help mode ${helpMode}. Allowed values are ${cli.helpModes.join(', ')} `, { options }, false); + /* c8 ignore next 2 */ + return ''; // noop + } + else { + return lowerCaseHelpMode; + } + } +} + +function getHelpSection(helpMode: string, helpContents: string): string { + if (helpMode === 'full') { + return helpContents; + } + + // options is the first section, so get help up to options + const titleAndUsage = helpContents.substring(0, helpContents.indexOf('## Options')); + + // find the requested section + const sectionLines: string[] = []; + const sectionName = helpMode[0].toUpperCase() + helpMode.substring(1); + const lines: string[] = helpContents.split('\n'); + for (let i: number = 0; i < lines.length; i++) { + const line = lines[i]; + + if (line.indexOf(`## ${sectionName}`) === 0) { + sectionLines.push(line); + } + else if (sectionLines.length > 0) { + if (line.indexOf('## ') === 0) { + // we've reached the next section, stop + break; + } + else { + sectionLines.push(line); + } + } + } + + return titleAndUsage + sectionLines.join('\n'); +} + +function printAvailableCommands(): void { + // commands that match the current group + const commandsToPrint: { [commandName: string]: CommandInfo } = {}; + // sub-commands in the current group + const commandGroupsToPrint: { [group: string]: number } = {}; + // current command group, eg. 'spo', 'spo site' + let currentGroup: string = ''; + + const addToList = (commandName: string, command: CommandInfo): void => { + const pos: number = commandName.indexOf(' ', currentGroup.length + 1); + if (pos === -1) { + commandsToPrint[commandName] = command; + } + else { + const subCommandsGroup: string = commandName.substr(0, pos); + if (!commandGroupsToPrint[subCommandsGroup]) { + commandGroupsToPrint[subCommandsGroup] = 0; + } + + commandGroupsToPrint[subCommandsGroup]++; + } + }; + + // get current command group + if (cli.optionsFromArgs && + cli.optionsFromArgs.options && + cli.optionsFromArgs.options._ && + cli.optionsFromArgs.options._.length > 0) { + currentGroup = cli.optionsFromArgs.options._.join(' '); + + if (currentGroup) { + currentGroup += ' '; + } + } + + const getCommandsForGroup = (): void => { + for (let i = 0; i < cli.commands.length; i++) { + const command: CommandInfo = cli.commands[i]; + if (command.name.startsWith(currentGroup)) { + addToList(command.name, command); + } + + if (command.aliases) { + for (let j = 0; j < command.aliases.length; j++) { + const alias: string = command.aliases[j]; + if (alias.startsWith(currentGroup)) { + addToList(alias, command); + } + } + } + } + }; + + getCommandsForGroup(); + if (Object.keys(commandsToPrint).length === 0 && + Object.keys(commandGroupsToPrint).length === 0) { + // specified string didn't match any commands. Reset group and try again + currentGroup = ''; + getCommandsForGroup(); + } + + const namesOfCommandsToPrint: string[] = Object.keys(commandsToPrint); + if (namesOfCommandsToPrint.length > 0) { + // determine the length of the longest command name to pad strings + ' [options]' + const maxLength: number = Math.max(...namesOfCommandsToPrint.map(s => s.length)) + 10; + + cli.log(`Commands:`); + cli.log(); + + const sortedCommandNamesToPrint = Object.getOwnPropertyNames(commandsToPrint).sort(); + sortedCommandNamesToPrint.forEach(commandName => { + cli.log(` ${`${commandName} [options]`.padEnd(maxLength, ' ')} ${commandsToPrint[commandName].description}`); + }); + } + + const namesOfCommandGroupsToPrint: string[] = Object.keys(commandGroupsToPrint); + if (namesOfCommandGroupsToPrint.length > 0) { + if (namesOfCommandsToPrint.length > 0) { + cli.log(); + } + + // determine the longest command group name to pad strings + ' *' + const maxLength: number = Math.max(...namesOfCommandGroupsToPrint.map(s => s.length)) + 2; + + cli.log(`Commands groups:`); + cli.log(); + + // sort commands groups (because of aliased commands) + const sortedCommandGroupsToPrint = Object + .keys(commandGroupsToPrint) + .sort() + .reduce((object: { [group: string]: number }, key: string) => { + object[key] = commandGroupsToPrint[key]; + return object; + }, {}); + + for (const commandGroup in sortedCommandGroupsToPrint) { + cli.log(` ${`${commandGroup} *`.padEnd(maxLength, ' ')} ${commandGroupsToPrint[commandGroup]} command${commandGroupsToPrint[commandGroup] === 1 ? '' : 's'}`); + } + } + + cli.log(); +} + +async function closeWithError(error: any, args: CommandArgs, showHelpIfEnabled: boolean = false): Promise { + let exitCode: number = 1; + + if (args.options.output === 'none') { + return process.exit(exitCode); + } + + const chalk = (await import('chalk')).default; + + let errorMessage: string = error instanceof CommandError ? error.message : error; + if ((!args.options.output || args.options.output === 'json') && + !cli.getSettingWithDefaultValue(settingsNames.printErrorsAsPlainText, true)) { + errorMessage = JSON.stringify({ error: errorMessage }); + } + else { + errorMessage = chalk.red(`Error: ${errorMessage}`); + } + + if (error instanceof CommandError && error.code) { + exitCode = error.code; + } + + await cli.error(errorMessage); + + if (showHelpIfEnabled && + await cli.getSettingWithDefaultValue(settingsNames.showHelpOnFailure, showHelpIfEnabled)) { + printHelp(await getHelpMode(args.options), exitCode); + } + else { + process.exit(exitCode); + } + + // will never be run. Required for testing where we're stubbing process.exit + /* c8 ignore next */ + throw new Error(errorMessage); + /* c8 ignore next */ +} + +function log(message?: any, ...optionalParams: any[]): void { + const spinnerSpinning = cli.spinner.isSpinning; + + /* c8 ignore next 3 */ + if (spinnerSpinning) { + cli.spinner.stop(); + } + + if (message) { + console.log(message, ...optionalParams); + } + else { + console.log(); + } + + // Restart the spinner if it was running before the log + /* c8 ignore next 3 */ + if (spinnerSpinning) { + cli.spinner.start(); + } +} + +async function error(message?: any, ...optionalParams: any[]): Promise { + const spinnerSpinning = cli.spinner.isSpinning; + + /* c8 ignore next 3 */ + if (spinnerSpinning) { + cli.spinner.stop(); + } + + const errorOutput: string = cli.getSettingWithDefaultValue(settingsNames.errorOutput, 'stderr'); + if (errorOutput === 'stdout') { + console.log(message, ...optionalParams); + } + else { + console.error(message, ...optionalParams); + } + + // Restart the spinner if it was running before the log + /* c8 ignore next 3 */ + if (spinnerSpinning) { + cli.spinner.start(); + } +} + +async function promptForSelection(config: SelectionConfig): Promise { + const spinnerSpinning = cli.spinner.isSpinning; + + /* c8 ignore next 3 */ + if (spinnerSpinning) { + cli.spinner.stop(); + } + + const answer = await prompt.forSelection(config); + cli.error(''); + + // Restart the spinner if it was running before the prompt + /* c8 ignore next 3 */ + if (spinnerSpinning) { + cli.spinner.start(); + } + + return answer; +} + +async function promptForConfirmation(config: ConfirmationConfig): Promise { + const spinnerSpinning = cli.spinner.isSpinning; + + /* c8 ignore next 3 */ + if (spinnerSpinning) { + cli.spinner.stop(); + } + + const answer = await prompt.forConfirmation(config); + cli.error(''); + + // Restart the spinner if it was running before the prompt + /* c8 ignore next 3 */ + if (spinnerSpinning) { + cli.spinner.start(); + } + + return answer; +} + +async function handleMultipleResultsFound(message: string, values: { [key: string]: T }): Promise { + const prompt: boolean = cli.getSettingWithDefaultValue(settingsNames.prompt, true); + if (!prompt) { + throw new Error(`${message} Found: ${Object.keys(values).join(', ')}.`); + } + + cli.error(`🌶️ ${message} `); + const choices = Object.keys(values).map((choice: any) => { return { name: choice, value: choice }; }); + const response = await cli.promptForSelection({ message: `Please choose one:`, choices }); + + return values[response]; +} + +function removeShortOptions(args: { options: minimist.ParsedArgs }): { options: minimist.ParsedArgs } { + const filteredArgs = JSON.parse(JSON.stringify(args)); + const optionsToRemove: string[] = Object.getOwnPropertyNames(args.options) + .filter(option => option.length === 1 || option === '--'); + optionsToRemove.forEach(option => delete filteredArgs.options[option]); + + return filteredArgs; +} + +function loadOptionValuesFromFiles(args: { options: minimist.ParsedArgs }): void { + const optionNames: string[] = Object.getOwnPropertyNames(args.options); + optionNames.forEach(option => { + const value = args.options[option]; + if (!value || + typeof value !== 'string' || + !value.startsWith('@')) { + return; + } + + const filePath: string = value.substr(1); + // if the file doesn't exist, leave as-is, if it exists replace with + // contents from the file + if (fs.existsSync(filePath)) { + args.options[option] = fs.readFileSync(filePath, 'utf-8'); + } + }); +} + +function shouldTrimOutput(output: string | undefined): boolean { + return output === 'text'; +} + +export const cli = { + closeWithError, + commands, + commandToExecute, + getConfig, + currentCommandName, + error, + execute, + executeCommand, + executeCommandWithOutput, + formatOutput, + getCommandInfo, + getSettingWithDefaultValue, + handleMultipleResultsFound, + helpModes, + loadAllCommandsInfo, + loadCommandFromArgs, + loadCommandFromFile, + log, + optionsFromArgs, + printAvailableCommands, + promptForConfirmation, + promptForSelection, + shouldTrimOutput, + spinner +}; + +const spinnerOptions: Options = { + text: 'Running command...', + /* c8 ignore next 1 */ + stream: cli.getSettingWithDefaultValue('errorOutput', 'stderr') === 'stderr' ? process.stderr : process.stdout +}; +cli.spinner = ora(spinnerOptions); \ No newline at end of file diff --git a/src/index.ts b/src/index.ts index 639cb1acfa4..5ea7d3a584e 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,6 +1,6 @@ #!/usr/bin/env node -import { Cli } from './cli/Cli.js'; +import { cli } from './cli/cli.js'; import { app } from './utils/app.js'; // required to make console.log() in combination with piped output synchronous @@ -17,4 +17,4 @@ if (!process.env.CLIMICROSOFT365_NOUPDATE) { }); } -Cli.getInstance().execute(process.argv.slice(2)); \ No newline at end of file +cli.execute(process.argv.slice(2)); \ No newline at end of file diff --git a/src/m365/aad/commands/administrativeunit/administrativeunit-add.spec.ts b/src/m365/aad/commands/administrativeunit/administrativeunit-add.spec.ts index e4cbe6c124f..93af1359be1 100644 --- a/src/m365/aad/commands/administrativeunit/administrativeunit-add.spec.ts +++ b/src/m365/aad/commands/administrativeunit/administrativeunit-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import commands from '../../commands.js'; import command from './administrativeunit-add.js'; @@ -32,7 +32,7 @@ describe(commands.ADMINISTRATIVEUNIT_ADD, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/aad/commands/administrativeunit/administrativeunit-get.spec.ts b/src/m365/aad/commands/administrativeunit/administrativeunit-get.spec.ts index 0c8cd5b1dfd..e9a5aaebb81 100644 --- a/src/m365/aad/commands/administrativeunit/administrativeunit-get.spec.ts +++ b/src/m365/aad/commands/administrativeunit/administrativeunit-get.spec.ts @@ -7,7 +7,7 @@ import commands from "../../commands.js"; import { telemetry } from '../../../../telemetry.js'; import { pid } from '../../../../utils/pid.js'; import { session } from '../../../../utils/session.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import command from './administrativeunit-get.js'; import request from '../../../../request.js'; import { sinonUtil } from '../../../../utils/sinonUtil.js'; @@ -42,7 +42,7 @@ describe(commands.ADMINISTRATIVEUNIT_GET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -65,7 +65,7 @@ describe(commands.ADMINISTRATIVEUNIT_GET, () => { sinonUtil.restore([ request.get, aadAdministrativeUnit.getAdministrativeUnitByDisplayName, - Cli.handleMultipleResultsFound + cli.handleMultipleResultsFound ]); }); diff --git a/src/m365/aad/commands/administrativeunit/administrativeunit-remove.spec.ts b/src/m365/aad/commands/administrativeunit/administrativeunit-remove.spec.ts index 2ca5d46e474..6d12a668ce2 100644 --- a/src/m365/aad/commands/administrativeunit/administrativeunit-remove.spec.ts +++ b/src/m365/aad/commands/administrativeunit/administrativeunit-remove.spec.ts @@ -9,7 +9,7 @@ import { CommandError } from '../../../../Command.js'; import { pid } from '../../../../utils/pid.js'; import { session } from '../../../../utils/session.js'; import { sinonUtil } from '../../../../utils/sinonUtil.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import command from './administrativeunit-remove.js'; import { aadAdministrativeUnit } from '../../../../utils/aadAdministrativeUnit.js'; @@ -29,7 +29,7 @@ describe(commands.ADMINISTRATIVEUNIT_REMOVE, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -45,7 +45,7 @@ describe(commands.ADMINISTRATIVEUNIT_REMOVE, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -57,8 +57,8 @@ describe(commands.ADMINISTRATIVEUNIT_REMOVE, () => { sinonUtil.restore([ request.delete, aadAdministrativeUnit.getAdministrativeUnitByDisplayName, - Cli.handleMultipleResultsFound, - Cli.promptForConfirmation + cli.handleMultipleResultsFound, + cli.promptForConfirmation ]); }); @@ -99,8 +99,8 @@ describe(commands.ADMINISTRATIVEUNIT_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { displayName: displayName } }); assert(deleteRequestStub.called); diff --git a/src/m365/aad/commands/administrativeunit/administrativeunit-remove.ts b/src/m365/aad/commands/administrativeunit/administrativeunit-remove.ts index ca7c9bf7469..737ac9e1084 100644 --- a/src/m365/aad/commands/administrativeunit/administrativeunit-remove.ts +++ b/src/m365/aad/commands/administrativeunit/administrativeunit-remove.ts @@ -5,7 +5,7 @@ import { validation } from "../../../../utils/validation.js"; import request, { CliRequestOptions } from "../../../../request.js"; import GraphCommand from "../../../base/GraphCommand.js"; import commands from "../../commands.js"; -import { Cli } from "../../../../cli/Cli.js"; +import { cli } from "../../../../cli/cli.js"; interface CommandArgs { @@ -112,7 +112,7 @@ class AadAdministrativeUnitRemoveCommand extends GraphCommand { await removeAdministrativeUnit(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove administrative unit '${args.options.id || args.options.displayName}'?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove administrative unit '${args.options.id || args.options.displayName}'?` }); if (result) { await removeAdministrativeUnit(); diff --git a/src/m365/aad/commands/app/app-add.spec.ts b/src/m365/aad/commands/app/app-add.spec.ts index 0532ac446b2..e5e3b804b18 100644 --- a/src/m365/aad/commands/app/app-add.spec.ts +++ b/src/m365/aad/commands/app/app-add.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import fs from 'fs'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -159,7 +159,7 @@ describe(commands.APP_ADD, () => { accessToken: 'abc' }; } - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/aad/commands/app/app-get.spec.ts b/src/m365/aad/commands/app/app-get.spec.ts index 1c87a692f5e..61414fcb3b9 100644 --- a/src/m365/aad/commands/app/app-get.spec.ts +++ b/src/m365/aad/commands/app/app-get.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import fs from 'fs'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -16,20 +16,18 @@ import command from './app-get.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.APP_GET, () => { - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -55,7 +53,7 @@ describe(commands.APP_GET, () => { fs.readFileSync, fs.writeFileSync, cli.getSettingWithDefaultValue, - Cli.handleMultipleResultsFound + cli.handleMultipleResultsFound ]); }); @@ -157,7 +155,7 @@ describe(commands.APP_GET, () => { throw `Invalid request ${JSON.stringify(opts)}`; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves({ id: '9b1b1e42-794b-4c71-93ac-5ed92488b67f' }); + sinon.stub(cli, 'handleMultipleResultsFound').resolves({ id: '9b1b1e42-794b-4c71-93ac-5ed92488b67f' }); await command.action(logger, { options: { diff --git a/src/m365/aad/commands/app/app-get.ts b/src/m365/aad/commands/app/app-get.ts index 48c97a03b59..f5e5aa01668 100644 --- a/src/m365/aad/commands/app/app-get.ts +++ b/src/m365/aad/commands/app/app-get.ts @@ -8,7 +8,7 @@ import { validation } from '../../../../utils/validation.js'; import GraphCommand from '../../../base/GraphCommand.js'; import { M365RcJson } from '../../../base/M365RcJson.js'; import commands from '../../commands.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; interface CommandArgs { options: Options; @@ -121,7 +121,7 @@ class AadAppGetCommand extends GraphCommand { } const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', res.value); - const result = await Cli.handleMultipleResultsFound<{ id: string }>(`Multiple Azure AD application registration with name '${name}' found.`, resultAsKeyValuePair); + const result = await cli.handleMultipleResultsFound<{ id: string }>(`Multiple Azure AD application registration with name '${name}' found.`, resultAsKeyValuePair); return result.id; } diff --git a/src/m365/aad/commands/app/app-remove.spec.ts b/src/m365/aad/commands/app/app-remove.spec.ts index 2d60c138ce5..e594fd437e7 100644 --- a/src/m365/aad/commands/app/app-remove.spec.ts +++ b/src/m365/aad/commands/app/app-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,7 +15,6 @@ import command from './app-remove.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.APP_REMOVE, () => { - let cli: Cli; let log: string[]; let logger: Logger; let commandInfo: CommandInfo; @@ -23,13 +22,12 @@ describe(commands.APP_REMOVE, () => { let deleteRequestStub: sinon.SinonStub; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -46,7 +44,7 @@ describe(commands.APP_REMOVE, () => { } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -82,9 +80,9 @@ describe(commands.APP_REMOVE, () => { sinonUtil.restore([ request.get, request.delete, - Cli.promptForConfirmation, + cli.promptForConfirmation, cli.getSettingWithDefaultValue, - Cli.handleMultipleResultsFound + cli.handleMultipleResultsFound ]); }); @@ -176,8 +174,8 @@ describe(commands.APP_REMOVE, () => { }); it('aborts removing the app when prompt not confirmed', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { @@ -188,8 +186,8 @@ describe(commands.APP_REMOVE, () => { }); it('deletes app when prompt confirmed (debug)', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -307,7 +305,7 @@ describe(commands.APP_REMOVE, () => { throw "Multiple Azure AD application registration with name 'myapp' found."; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves({ id: 'd75be2e1-0204-4f95-857d-51a37cf40be8' }); + sinon.stub(cli, 'handleMultipleResultsFound').resolves({ id: 'd75be2e1-0204-4f95-857d-51a37cf40be8' }); await command.action(logger, { options: { diff --git a/src/m365/aad/commands/app/app-remove.ts b/src/m365/aad/commands/app/app-remove.ts index fe0ca9415ff..eaf2596bc7d 100644 --- a/src/m365/aad/commands/app/app-remove.ts +++ b/src/m365/aad/commands/app/app-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -104,7 +104,7 @@ class AadAppRemoveCommand extends GraphCommand { await deleteApp(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the app?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the app?` }); if (result) { await deleteApp(); @@ -147,7 +147,7 @@ class AadAppRemoveCommand extends GraphCommand { } const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', res.value); - const result = await Cli.handleMultipleResultsFound<{ id: string }>(`Multiple Azure AD application registration with name '${name}' found.`, resultAsKeyValuePair); + const result = await cli.handleMultipleResultsFound<{ id: string }>(`Multiple Azure AD application registration with name '${name}' found.`, resultAsKeyValuePair); return result.id; } } diff --git a/src/m365/aad/commands/app/app-role-add.spec.ts b/src/m365/aad/commands/app/app-role-add.spec.ts index 33b2141d89e..44abf05b6d4 100644 --- a/src/m365/aad/commands/app/app-role-add.spec.ts +++ b/src/m365/aad/commands/app/app-role-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,19 +15,17 @@ import command from './app-role-add.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.APP_ROLE_ADD, () => { - let cli: Cli; let log: string[]; let logger: Logger; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -50,7 +48,7 @@ describe(commands.APP_ROLE_ADD, () => { request.get, request.patch, cli.getSettingWithDefaultValue, - Cli.handleMultipleResultsFound + cli.handleMultipleResultsFound ]); }); @@ -388,7 +386,7 @@ describe(commands.APP_ROLE_ADD, () => { throw `Invalid request ${JSON.stringify(opts)}`; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves({ id: '5b31c38c-2584-42f0-aa47-657fb3a84230' }); + sinon.stub(cli, 'handleMultipleResultsFound').resolves({ id: '5b31c38c-2584-42f0-aa47-657fb3a84230' }); sinon.stub(request, 'patch').callsFake(async opts => { if (opts.url === 'https://graph.microsoft.com/v1.0/myorganization/applications/5b31c38c-2584-42f0-aa47-657fb3a84230' && diff --git a/src/m365/aad/commands/app/app-role-add.ts b/src/m365/aad/commands/app/app-role-add.ts index fdd006efc20..0e29f27f087 100644 --- a/src/m365/aad/commands/app/app-role-add.ts +++ b/src/m365/aad/commands/app/app-role-add.ts @@ -5,7 +5,7 @@ import request, { CliRequestOptions } from '../../../../request.js'; import { formatting } from '../../../../utils/formatting.js'; import GraphCommand from '../../../base/GraphCommand.js'; import commands from '../../commands.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; interface CommandArgs { options: Options; @@ -203,7 +203,7 @@ class AadAppRoleAddCommand extends GraphCommand { } const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', res.value); - const result = await Cli.handleMultipleResultsFound<{ id: string }>(`Multiple Azure AD application registration with name '${appName}' found.`, resultAsKeyValuePair); + const result = await cli.handleMultipleResultsFound<{ id: string }>(`Multiple Azure AD application registration with name '${appName}' found.`, resultAsKeyValuePair); return result.id; } } diff --git a/src/m365/aad/commands/app/app-role-list.spec.ts b/src/m365/aad/commands/app/app-role-list.spec.ts index d19e181f883..47e1e3108ce 100644 --- a/src/m365/aad/commands/app/app-role-list.spec.ts +++ b/src/m365/aad/commands/app/app-role-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,20 +15,18 @@ import command from './app-role-list.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.APP_ROLE_LIST, () => { - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -52,7 +50,7 @@ describe(commands.APP_ROLE_LIST, () => { sinonUtil.restore([ request.get, cli.getSettingWithDefaultValue, - Cli.handleMultipleResultsFound + cli.handleMultipleResultsFound ]); }); @@ -415,7 +413,7 @@ describe(commands.APP_ROLE_LIST, () => { throw `Invalid request ${JSON.stringify(opts)}`; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves({ id: '5b31c38c-2584-42f0-aa47-657fb3a84230' }); + sinon.stub(cli, 'handleMultipleResultsFound').resolves({ id: '5b31c38c-2584-42f0-aa47-657fb3a84230' }); await command.action(logger, { options: { appName: 'My app' } }); assert(loggerLogSpy.calledWith([ diff --git a/src/m365/aad/commands/app/app-role-list.ts b/src/m365/aad/commands/app/app-role-list.ts index e2706c2536c..37d87fc9d62 100644 --- a/src/m365/aad/commands/app/app-role-list.ts +++ b/src/m365/aad/commands/app/app-role-list.ts @@ -6,7 +6,7 @@ import { formatting } from '../../../../utils/formatting.js'; import { odata } from '../../../../utils/odata.js'; import GraphCommand from '../../../base/GraphCommand.js'; import commands from '../../commands.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; interface CommandArgs { options: Options; @@ -107,7 +107,7 @@ class AadAppRoleListCommand extends GraphCommand { } const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', res.value); - const result = await Cli.handleMultipleResultsFound<{ id: string }>(`Multiple Azure AD application registration with name '${appName}' found.`, resultAsKeyValuePair); + const result = await cli.handleMultipleResultsFound<{ id: string }>(`Multiple Azure AD application registration with name '${appName}' found.`, resultAsKeyValuePair); return result.id; } } diff --git a/src/m365/aad/commands/app/app-role-remove.spec.ts b/src/m365/aad/commands/app/app-role-remove.spec.ts index 083769b0e59..85620369f1e 100644 --- a/src/m365/aad/commands/app/app-role-remove.spec.ts +++ b/src/m365/aad/commands/app/app-role-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,20 +15,18 @@ import command from './app-role-remove.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.APP_ROLE_REMOVE, () => { - let cli: Cli; let log: string[]; let logger: Logger; let commandInfo: CommandInfo; let promptIssued: boolean = false; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -44,7 +42,7 @@ describe(commands.APP_ROLE_REMOVE, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -56,9 +54,9 @@ describe(commands.APP_ROLE_REMOVE, () => { sinonUtil.restore([ request.get, request.patch, - Cli.promptForConfirmation, + cli.promptForConfirmation, cli.getSettingWithDefaultValue, - Cli.handleMultipleResultsFound + cli.handleMultipleResultsFound ]); }); @@ -1392,7 +1390,7 @@ describe(commands.APP_ROLE_REMOVE, () => { throw `Invalid request ${JSON.stringify(opts)}`; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves({ id: '5b31c38c-2584-42f0-aa47-657fb3a84230' }); + sinon.stub(cli, 'handleMultipleResultsFound').resolves({ id: '5b31c38c-2584-42f0-aa47-657fb3a84230' }); sinon.stub(request, 'patch').callsFake(async opts => { if (opts.url === 'https://graph.microsoft.com/v1.0/myorganization/applications/5b31c38c-2584-42f0-aa47-657fb3a84230' && @@ -1557,7 +1555,7 @@ describe(commands.APP_ROLE_REMOVE, () => { throw `Invalid request ${JSON.stringify(opts)}`; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves({ id: 'c4352a0a-494f-46f9-b843-479855c173a7' }); + sinon.stub(cli, 'handleMultipleResultsFound').resolves({ id: 'c4352a0a-494f-46f9-b843-479855c173a7' }); sinon.stub(request, 'patch').callsFake(async opts => { if (opts.url === 'https://graph.microsoft.com/v1.0/myorganization/applications/5b31c38c-2584-42f0-aa47-657fb3a84230' && @@ -1714,8 +1712,8 @@ describe(commands.APP_ROLE_REMOVE, () => { it('deletes an app role when the role is in enabled state and valid appObjectId, role claim and the prompt is confirmed (debug)', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); const getRequestStub = sinon.stub(request, 'get'); @@ -1795,8 +1793,8 @@ describe(commands.APP_ROLE_REMOVE, () => { it('deletes an app role when the role is in enabled state and valid appId, role name and prompt is confirmed', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); const getRequestStub = sinon.stub(request, 'get'); @@ -1889,8 +1887,8 @@ describe(commands.APP_ROLE_REMOVE, () => { it('deletes an app role when the role is in enabled state and valid appId, role id and prompt is confirmed (debug)', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); const getRequestStub = sinon.stub(request, 'get'); @@ -1984,8 +1982,8 @@ describe(commands.APP_ROLE_REMOVE, () => { it('aborts deleting app role when prompt is not confirmed', async () => { // represents the aad app get request called when the prompt is confirmed const patchStub = sinon.stub(request, 'get'); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { appName: 'App-Name', claim: 'Product.Read' } }); assert(patchStub.notCalled); @@ -1994,8 +1992,8 @@ describe(commands.APP_ROLE_REMOVE, () => { it('aborts deleting app role when prompt is not confirmed (debug)', async () => { // represents the aad app get request called when the prompt is confirmed const patchStub = sinon.stub(request, 'get'); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); command.action(logger, { options: { debug: true, appName: 'App-Name', claim: 'Product.Read' } }); assert(patchStub.notCalled); diff --git a/src/m365/aad/commands/app/app-role-remove.ts b/src/m365/aad/commands/app/app-role-remove.ts index 2b1d8d0a6cf..7e4bbf66400 100644 --- a/src/m365/aad/commands/app/app-role-remove.ts +++ b/src/m365/aad/commands/app/app-role-remove.ts @@ -1,5 +1,5 @@ import { Application, AppRole } from "@microsoft/microsoft-graph-types"; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -99,7 +99,7 @@ class AadAppRoleRemoveCommand extends GraphCommand { await deleteAppRole(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the app role?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the app role?` }); if (result) { await deleteAppRole(); @@ -127,7 +127,7 @@ class AadAppRoleRemoveCommand extends GraphCommand { appRoleToDelete.length > 1) { const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', appRoleToDelete); - appRoleToDelete[0] = await Cli.handleMultipleResultsFound(`Multiple roles with name '${args.options.name}' found.`, resultAsKeyValuePair); + appRoleToDelete[0] = await cli.handleMultipleResultsFound(`Multiple roles with name '${args.options.name}' found.`, resultAsKeyValuePair); } if (appRoleToDelete.length === 0) { throw `No app role with ${appRoleDeleteIdentifierNameValue} found.`; @@ -238,7 +238,7 @@ class AadAppRoleRemoveCommand extends GraphCommand { } const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', res.value); - const result: { id: string } = (await Cli.handleMultipleResultsFound(`Multiple Azure AD application registration with name '${appName}' found.`, resultAsKeyValuePair)) as { id: string }; + const result: { id: string } = (await cli.handleMultipleResultsFound(`Multiple Azure AD application registration with name '${appName}' found.`, resultAsKeyValuePair)) as { id: string }; return result.id; } } diff --git a/src/m365/aad/commands/app/app-set.spec.ts b/src/m365/aad/commands/app/app-set.spec.ts index 2ea9934446e..6c4979a79b1 100644 --- a/src/m365/aad/commands/app/app-set.spec.ts +++ b/src/m365/aad/commands/app/app-set.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import fs from 'fs'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -21,19 +21,17 @@ describe(commands.APP_SET, () => { const appDetailsResponse: any = { "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#applications/$entity", "id": "95cfe30d-ed44-4f9d-b73d-c66560f72e83", "deletedDateTime": null, "appId": "ff254847-12c7-44cf-921e-8883dbd622a7", "applicationTemplateId": null, "disabledByMicrosoftStatus": null, "createdDateTime": "2022-02-07T08:51:18Z", "displayName": "Angular Teams app", "description": null, "groupMembershipClaims": null, "identifierUris": ["api://244e-2001-1c00-80c-d00-e5da-977c-7c52-5193.ngrok.io/ff254847-12c7-44cf-921e-8883dbd622a7"], "isDeviceOnlyAuthSupported": null, "isFallbackPublicClient": null, "notes": null, "publisherDomain": "contoso.onmicrosoft.com", "serviceManagementReference": null, "signInAudience": "AzureADMyOrg", "tags": [], "tokenEncryptionKeyId": null, "defaultRedirectUri": null, "certification": null, "optionalClaims": null, "addIns": [], "api": { "acceptMappedClaims": null, "knownClientApplications": [], "requestedAccessTokenVersion": null, "oauth2PermissionScopes": [{ "adminConsentDescription": "Access as a user", "adminConsentDisplayName": "Access as a user", "id": "cf38eb5b-8fcd-4697-9bd5-d80b7f98dfc5", "isEnabled": true, "type": "User", "userConsentDescription": null, "userConsentDisplayName": null, "value": "access_as_user" }], "preAuthorizedApplications": [{ "appId": "5e3ce6c0-2b1f-4285-8d4b-75ee78787346", "delegatedPermissionIds": ["cf38eb5b-8fcd-4697-9bd5-d80b7f98dfc5"] }, { "appId": "1fec8e78-bce4-4aaf-ab1b-5451cc387264", "delegatedPermissionIds": ["cf38eb5b-8fcd-4697-9bd5-d80b7f98dfc5"] }] }, "appRoles": [], "info": { "logoUrl": null, "marketingUrl": null, "privacyStatementUrl": null, "supportUrl": null, "termsOfServiceUrl": null }, "keyCredentials": [], "parentalControlSettings": { "countriesBlockedForMinors": [], "legalAgeGroupRule": "Allow" }, "passwordCredentials": [], "publicClient": { "redirectUris": [] }, "requiredResourceAccess": [{ "resourceAppId": "00000003-0000-0000-c000-000000000000", "resourceAccess": [{ "id": "e1fe6dd8-ba31-4d61-89e7-88639da4683d", "type": "Scope" }] }], "verifiedPublisher": { "displayName": null, "verifiedPublisherId": null, "addedDateTime": null }, "web": { "homePageUrl": null, "logoutUrl": null, "redirectUris": [], "implicitGrantSettings": { "enableAccessTokenIssuance": false, "enableIdTokenIssuance": false } }, "spa": { "redirectUris": [] } }; //#endregion - let cli: Cli; let log: string[]; let logger: Logger; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -58,7 +56,7 @@ describe(commands.APP_SET, () => { fs.existsSync, fs.readFileSync, cli.getSettingWithDefaultValue, - Cli.handleMultipleResultsFound + cli.handleMultipleResultsFound ]); }); @@ -1179,7 +1177,7 @@ describe(commands.APP_SET, () => { throw `Invalid request ${JSON.stringify(opts)}`; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves({ id: '5b31c38c-2584-42f0-aa47-657fb3a84230' }); + sinon.stub(cli, 'handleMultipleResultsFound').resolves({ id: '5b31c38c-2584-42f0-aa47-657fb3a84230' }); sinon.stub(request, 'patch').callsFake(async opts => { if (opts.url === 'https://graph.microsoft.com/v1.0/myorganization/applications/5b31c38c-2584-42f0-aa47-657fb3a84230') { diff --git a/src/m365/aad/commands/app/app-set.ts b/src/m365/aad/commands/app/app-set.ts index 4f3f2d9c622..e0af0cd80ad 100644 --- a/src/m365/aad/commands/app/app-set.ts +++ b/src/m365/aad/commands/app/app-set.ts @@ -6,7 +6,7 @@ import request, { CliRequestOptions } from '../../../../request.js'; import { formatting } from '../../../../utils/formatting.js'; import GraphCommand from '../../../base/GraphCommand.js'; import commands from '../../commands.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; interface CommandArgs { options: Options; @@ -160,7 +160,7 @@ class AadAppSetCommand extends GraphCommand { } const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', res.value); - const result = await Cli.handleMultipleResultsFound<{ id: string }>(`Multiple Azure AD application registration with name '${name}' found.`, resultAsKeyValuePair); + const result = await cli.handleMultipleResultsFound<{ id: string }>(`Multiple Azure AD application registration with name '${name}' found.`, resultAsKeyValuePair); return result.id; } diff --git a/src/m365/aad/commands/approleassignment/approleassignment-add.spec.ts b/src/m365/aad/commands/approleassignment/approleassignment-add.spec.ts index 3f3b7c6d05b..54a80f5a6fe 100644 --- a/src/m365/aad/commands/approleassignment/approleassignment-add.spec.ts +++ b/src/m365/aad/commands/approleassignment/approleassignment-add.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import os from 'os'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -16,7 +16,6 @@ import command from './approleassignment-add.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.APPROLEASSIGNMENT_ADD, () => { - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; @@ -43,13 +42,12 @@ describe(commands.APPROLEASSIGNMENT_ADD, () => { }; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -73,7 +71,7 @@ describe(commands.APPROLEASSIGNMENT_ADD, () => { request.get, request.post, cli.getSettingWithDefaultValue, - Cli.handleMultipleResultsFound + cli.handleMultipleResultsFound ]); }); @@ -248,7 +246,7 @@ describe(commands.APPROLEASSIGNMENT_ADD, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves({ id: '24448e9c-d0fa-43d1-a1dd-e279720969a0' }); + sinon.stub(cli, 'handleMultipleResultsFound').resolves({ id: '24448e9c-d0fa-43d1-a1dd-e279720969a0' }); await command.action(logger, { options: { debug: true, appDisplayName: 'test', resource: 'SharePoint', scopes: 'Scope1' } }); assert.deepEqual(loggerLogSpy.lastCall.args[0][0], { diff --git a/src/m365/aad/commands/approleassignment/approleassignment-add.ts b/src/m365/aad/commands/approleassignment/approleassignment-add.ts index 1504d0311b1..e6b3e958663 100644 --- a/src/m365/aad/commands/approleassignment/approleassignment-add.ts +++ b/src/m365/aad/commands/approleassignment/approleassignment-add.ts @@ -7,7 +7,7 @@ import { validation } from '../../../../utils/validation.js'; import GraphCommand from '../../../base/GraphCommand.js'; import commands from '../../commands.js'; import { ServicePrincipal } from '@microsoft/microsoft-graph-types'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; interface AppRole { objectId: string; @@ -126,7 +126,7 @@ class AadAppRoleAssignmentAddCommand extends GraphCommand { if (servicePrincipalResult.value.length > 1) { const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', servicePrincipalResult.value); - const result = await Cli.handleMultipleResultsFound(`Multiple service principal found.`, resultAsKeyValuePair); + const result = await cli.handleMultipleResultsFound(`Multiple service principal found.`, resultAsKeyValuePair); objectId = result.id!; } else { diff --git a/src/m365/aad/commands/approleassignment/approleassignment-list.spec.ts b/src/m365/aad/commands/approleassignment/approleassignment-list.spec.ts index e52c188675d..61be299d0a0 100644 --- a/src/m365/aad/commands/approleassignment/approleassignment-list.spec.ts +++ b/src/m365/aad/commands/approleassignment/approleassignment-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -410,7 +410,6 @@ class RequestStub { } describe(commands.APPROLEASSIGNMENT_LIST, () => { - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; @@ -438,13 +437,12 @@ describe(commands.APPROLEASSIGNMENT_LIST, () => { ]; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/aad/commands/approleassignment/approleassignment-remove.spec.ts b/src/m365/aad/commands/approleassignment/approleassignment-remove.spec.ts index 08ad21fea1f..8112fdc2285 100644 --- a/src/m365/aad/commands/approleassignment/approleassignment-remove.spec.ts +++ b/src/m365/aad/commands/approleassignment/approleassignment-remove.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import os from 'os'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -16,7 +16,6 @@ import command from './approleassignment-remove.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.APPROLEASSIGNMENT_REMOVE, () => { - let cli: Cli; let log: string[]; let logger: Logger; let commandInfo: CommandInfo; @@ -24,13 +23,12 @@ describe(commands.APPROLEASSIGNMENT_REMOVE, () => { let deleteRequestStub: sinon.SinonStub; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -46,7 +44,7 @@ describe(commands.APPROLEASSIGNMENT_REMOVE, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -75,7 +73,7 @@ describe(commands.APPROLEASSIGNMENT_REMOVE, () => { sinonUtil.restore([ request.get, request.delete, - Cli.promptForConfirmation, + cli.promptForConfirmation, cli.getSettingWithDefaultValue ]); }); @@ -106,16 +104,16 @@ describe(commands.APPROLEASSIGNMENT_REMOVE, () => { }); it('aborts removing the app role assignment when prompt not confirmed', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { appDisplayName: 'myapp', resource: 'SharePoint', scopes: 'Sites.Read.All' } }); assert(deleteRequestStub.notCalled); }); it('deletes app role assignment when prompt confirmed (debug)', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { debug: true, appDisplayName: 'myapp', resource: 'SharePoint', scopes: 'Sites.Read.All' } }); assert(deleteRequestStub.called); diff --git a/src/m365/aad/commands/approleassignment/approleassignment-remove.ts b/src/m365/aad/commands/approleassignment/approleassignment-remove.ts index 646dfe77e41..8c60f4a1037 100644 --- a/src/m365/aad/commands/approleassignment/approleassignment-remove.ts +++ b/src/m365/aad/commands/approleassignment/approleassignment-remove.ts @@ -1,5 +1,5 @@ import os from 'os'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -197,7 +197,7 @@ class AadAppRoleAssignmentRemoveCommand extends GraphCommand { await removeAppRoleAssignment(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the appRoleAssignment with scope ${args.options.scope} for resource ${args.options.resource}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the appRoleAssignment with scope ${args.options.scope} for resource ${args.options.resource}?` }); if (result) { await removeAppRoleAssignment(); diff --git a/src/m365/aad/commands/group/group-get.spec.ts b/src/m365/aad/commands/group/group-get.spec.ts index f0acc93f8ca..b3877264d94 100644 --- a/src/m365/aad/commands/group/group-get.spec.ts +++ b/src/m365/aad/commands/group/group-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -54,7 +54,7 @@ describe(commands.GROUP_GET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -76,7 +76,7 @@ describe(commands.GROUP_GET, () => { afterEach(() => { sinonUtil.restore([ request.get, - Cli.handleMultipleResultsFound + cli.handleMultipleResultsFound ]); }); @@ -115,7 +115,7 @@ describe(commands.GROUP_GET, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves(groupResponse); + sinon.stub(cli, 'handleMultipleResultsFound').resolves(groupResponse); await command.action(logger, { options: { displayName: validDisplayName } }); assert(loggerLogSpy.calledWith(groupResponse.value[0])); diff --git a/src/m365/aad/commands/group/group-list.spec.ts b/src/m365/aad/commands/group/group-list.spec.ts index 0a3b34db065..637a0f48420 100644 --- a/src/m365/aad/commands/group/group-list.spec.ts +++ b/src/m365/aad/commands/group/group-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -25,7 +25,7 @@ describe(commands.GROUP_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/aad/commands/group/group-list.ts b/src/m365/aad/commands/group/group-list.ts index 84730cfc241..905aa617cf2 100644 --- a/src/m365/aad/commands/group/group-list.ts +++ b/src/m365/aad/commands/group/group-list.ts @@ -1,5 +1,5 @@ import { Group } from '@microsoft/microsoft-graph-types'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import { CliRequestOptions } from '../../../../request.js'; @@ -115,7 +115,7 @@ class AadGroupListCommand extends GraphCommand { groups = await odata.getAllItems(requestUrl); } - if (Cli.shouldTrimOutput(args.options.output)) { + if (cli.shouldTrimOutput(args.options.output)) { groups.forEach((group: ExtendedGroup) => { if (group.groupTypes && group.groupTypes.length > 0 && group.groupTypes[0] === 'Unified') { group.groupType = 'Microsoft 365'; diff --git a/src/m365/aad/commands/group/group-remove.spec.ts b/src/m365/aad/commands/group/group-remove.spec.ts index 5600a16bcea..d81b5d0cd4e 100644 --- a/src/m365/aad/commands/group/group-remove.spec.ts +++ b/src/m365/aad/commands/group/group-remove.spec.ts @@ -10,7 +10,7 @@ import { pid } from '../../../../utils/pid.js'; import { session } from '../../../../utils/session.js'; import { sinonUtil } from '../../../../utils/sinonUtil.js'; import { aadGroup } from '../../../../utils/aadGroup.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import command from './group-remove.js'; import { settingsNames } from '../../../../settingsNames.js'; @@ -23,7 +23,6 @@ describe(commands.GROUP_REMOVE, () => { let log: string[]; let logger: Logger; let commandInfo: CommandInfo; - let cli: Cli; before(() => { sinon.stub(auth, 'restoreAuth').resolves(); @@ -31,8 +30,7 @@ describe(commands.GROUP_REMOVE, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); - cli = Cli.getInstance(); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -56,8 +54,8 @@ describe(commands.GROUP_REMOVE, () => { request.delete, aadGroup.getGroupIdByDisplayName, cli.getSettingWithDefaultValue, - Cli.handleMultipleResultsFound, - Cli.promptForConfirmation + cli.handleMultipleResultsFound, + cli.promptForConfirmation ]); }); @@ -88,7 +86,7 @@ describe(commands.GROUP_REMOVE, () => { }); it('removes the specified group by displayName when passing the force option', async () => { - const confirmationStub = sinon.stub(Cli, 'promptForConfirmation').resolves(true); + const confirmationStub = sinon.stub(cli, 'promptForConfirmation').resolves(true); sinon.stub(aadGroup, 'getGroupIdByDisplayName').resolves(groupId); @@ -106,7 +104,7 @@ describe(commands.GROUP_REMOVE, () => { }); it('removes the specified group by displayName while prompting for confirmation', async () => { - const confirmationStub = sinon.stub(Cli, 'promptForConfirmation').resolves(true); + const confirmationStub = sinon.stub(cli, 'promptForConfirmation').resolves(true); sinon.stub(aadGroup, 'getGroupIdByDisplayName').resolves(groupId); @@ -124,7 +122,7 @@ describe(commands.GROUP_REMOVE, () => { }); it('throws an error when group by id cannot be found', async () => { - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinon.stub(cli, 'promptForConfirmation').resolves(true); const error = { error: { @@ -151,7 +149,7 @@ describe(commands.GROUP_REMOVE, () => { }); it('prompts before removing the specified group when confirm option not passed', async () => { - const confirmationStub = sinon.stub(Cli, 'promptForConfirmation').resolves(false); + const confirmationStub = sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { id: groupId } }); @@ -204,7 +202,7 @@ describe(commands.GROUP_REMOVE, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves({ id: '9b1b1e42-794b-4c71-93ac-5ed92488b67f' }); + sinon.stub(cli, 'handleMultipleResultsFound').resolves({ id: '9b1b1e42-794b-4c71-93ac-5ed92488b67f' }); const deleteRequestStub = sinon.stub(request, 'delete').callsFake(async (opts) => { if (opts.url === `https://graph.microsoft.com/v1.0/groups/9b1b1e42-794b-4c71-93ac-5ed92488b67f`) { @@ -219,7 +217,7 @@ describe(commands.GROUP_REMOVE, () => { }); it('aborts removing group when prompt not confirmed', async () => { - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinon.stub(cli, 'promptForConfirmation').resolves(false); const deleteSpy = sinon.stub(request, 'delete').resolves(); diff --git a/src/m365/aad/commands/group/group-remove.ts b/src/m365/aad/commands/group/group-remove.ts index 83746c46cbc..d97877c9ddb 100644 --- a/src/m365/aad/commands/group/group-remove.ts +++ b/src/m365/aad/commands/group/group-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import GraphCommand from '../../../base/GraphCommand.js'; @@ -115,7 +115,7 @@ class AadGroupRemoveCommand extends GraphCommand { await removeGroup(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove group '${args.options.id || args.options.displayName}'?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove group '${args.options.id || args.options.displayName}'?` }); if (result) { await removeGroup(); diff --git a/src/m365/aad/commands/group/group-user-list.spec.ts b/src/m365/aad/commands/group/group-user-list.spec.ts index 62423a424b1..27868de9158 100644 --- a/src/m365/aad/commands/group/group-user-list.spec.ts +++ b/src/m365/aad/commands/group/group-user-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -24,7 +24,6 @@ describe(commands.GROUP_USER_LIST, () => { let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; - let cli: Cli; before(() => { sinon.stub(auth, 'restoreAuth').resolves(); @@ -32,8 +31,7 @@ describe(commands.GROUP_USER_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); - cli = Cli.getInstance(); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -58,7 +56,7 @@ describe(commands.GROUP_USER_LIST, () => { request.get, aadGroup.getGroupIdByDisplayName, cli.getSettingWithDefaultValue, - Cli.handleMultipleResultsFound + cli.handleMultipleResultsFound ]); }); @@ -265,7 +263,7 @@ describe(commands.GROUP_USER_LIST, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves({ id: '9b1b1e42-794b-4c71-93ac-5ed92488b67f' }); + sinon.stub(cli, 'handleMultipleResultsFound').resolves({ id: '9b1b1e42-794b-4c71-93ac-5ed92488b67f' }); await command.action(logger, { options: { groupDisplayName: groupDisplayName, role: "Owner" } }); assert(loggerLogSpy.calledOnceWithExactly([ diff --git a/src/m365/aad/commands/groupsetting/groupsetting-add.spec.ts b/src/m365/aad/commands/groupsetting/groupsetting-add.spec.ts index 183ad0208f1..c2771fefbe2 100644 --- a/src/m365/aad/commands/groupsetting/groupsetting-add.spec.ts +++ b/src/m365/aad/commands/groupsetting/groupsetting-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -25,7 +25,7 @@ describe(commands.GROUPSETTING_ADD, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/aad/commands/groupsetting/groupsetting-get.spec.ts b/src/m365/aad/commands/groupsetting/groupsetting-get.spec.ts index 0838c696b33..55a257bd238 100644 --- a/src/m365/aad/commands/groupsetting/groupsetting-get.spec.ts +++ b/src/m365/aad/commands/groupsetting/groupsetting-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -25,7 +25,7 @@ describe(commands.GROUPSETTING_GET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/aad/commands/groupsetting/groupsetting-remove.spec.ts b/src/m365/aad/commands/groupsetting/groupsetting-remove.spec.ts index 6789fe3f53e..6590a0fe5de 100644 --- a/src/m365/aad/commands/groupsetting/groupsetting-remove.spec.ts +++ b/src/m365/aad/commands/groupsetting/groupsetting-remove.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import fs from 'fs'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -27,7 +27,7 @@ describe(commands.GROUPSETTING_REMOVE, () => { sinon.stub(session, 'getId').returns(''); sinon.stub(fs, 'readFileSync').returns('abc'); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -43,7 +43,7 @@ describe(commands.GROUPSETTING_REMOVE, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -55,7 +55,7 @@ describe(commands.GROUPSETTING_REMOVE, () => { sinonUtil.restore([ request.delete, global.setTimeout, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -127,8 +127,8 @@ describe(commands.GROUPSETTING_REMOVE, () => { it('removes the group setting when prompt confirmed', async () => { const postStub = sinon.stub(request, 'delete').callsFake(() => Promise.resolve()); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { id: '28beab62-7540-4db1-a23f-29a6018a3848' } }); assert(postStub.called); @@ -137,8 +137,8 @@ describe(commands.GROUPSETTING_REMOVE, () => { it('removes the group setting when prompt confirmed (debug)', async () => { const deleteStub = sinon.stub(request, 'delete').resolves(); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { debug: true, id: '28beab62-7540-4db1-a23f-29a6018a3848' } }); assert(deleteStub.called); diff --git a/src/m365/aad/commands/groupsetting/groupsetting-remove.ts b/src/m365/aad/commands/groupsetting/groupsetting-remove.ts index 5ea85a377b3..39b1f96132a 100644 --- a/src/m365/aad/commands/groupsetting/groupsetting-remove.ts +++ b/src/m365/aad/commands/groupsetting/groupsetting-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -88,7 +88,7 @@ class AadGroupSettingRemoveCommand extends GraphCommand { await removeGroupSetting(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the group setting ${args.options.id}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the group setting ${args.options.id}?` }); if (result) { await removeGroupSetting(); diff --git a/src/m365/aad/commands/groupsetting/groupsetting-set.spec.ts b/src/m365/aad/commands/groupsetting/groupsetting-set.spec.ts index 5a05f3fdf94..1079724ad0e 100644 --- a/src/m365/aad/commands/groupsetting/groupsetting-set.spec.ts +++ b/src/m365/aad/commands/groupsetting/groupsetting-set.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -25,7 +25,7 @@ describe(commands.GROUPSETTING_SET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/aad/commands/groupsettingtemplate/groupsettingtemplate-get.spec.ts b/src/m365/aad/commands/groupsettingtemplate/groupsettingtemplate-get.spec.ts index 62fc4fbc157..76d881df76d 100644 --- a/src/m365/aad/commands/groupsettingtemplate/groupsettingtemplate-get.spec.ts +++ b/src/m365/aad/commands/groupsettingtemplate/groupsettingtemplate-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,20 +15,18 @@ import command from './groupsettingtemplate-get.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.GROUPSETTINGTEMPLATE_GET, () => { - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/aad/commands/m365group/m365group-add.spec.ts b/src/m365/aad/commands/m365group/m365group-add.spec.ts index e31d317a91c..dc3832d5faf 100644 --- a/src/m365/aad/commands/m365group/m365group-add.spec.ts +++ b/src/m365/aad/commands/m365group/m365group-add.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import fs from 'fs'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -50,7 +50,7 @@ describe(commands.M365GROUP_ADD, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/aad/commands/m365group/m365group-conversation-list.spec.ts b/src/m365/aad/commands/m365group/m365group-conversation-list.spec.ts index b363b7be3f2..45a41a4332c 100644 --- a/src/m365/aad/commands/m365group/m365group-conversation-list.spec.ts +++ b/src/m365/aad/commands/m365group/m365group-conversation-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -51,7 +51,7 @@ describe(commands.M365GROUP_CONVERSATION_LIST, () => { sinon.stub(session, 'getId').returns(''); sinon.stub(aadGroup, 'isUnifiedGroup').resolves(true); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/aad/commands/m365group/m365group-conversation-post-list.spec.ts b/src/m365/aad/commands/m365group/m365group-conversation-post-list.spec.ts index c42704f790f..0a91f0575b6 100644 --- a/src/m365/aad/commands/m365group/m365group-conversation-post-list.spec.ts +++ b/src/m365/aad/commands/m365group/m365group-conversation-post-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -16,7 +16,6 @@ import { settingsNames } from '../../../../settingsNames.js'; import { aadGroup } from '../../../../utils/aadGroup.js'; describe(commands.M365GROUP_CONVERSATION_POST_LIST, () => { - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; @@ -77,14 +76,13 @@ describe(commands.M365GROUP_CONVERSATION_POST_LIST, () => { ] }; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); sinon.stub(aadGroup, 'isUnifiedGroup').resolves(true); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/aad/commands/m365group/m365group-get.spec.ts b/src/m365/aad/commands/m365group/m365group-get.spec.ts index da5e0e2212a..15e1f222311 100644 --- a/src/m365/aad/commands/m365group/m365group-get.spec.ts +++ b/src/m365/aad/commands/m365group/m365group-get.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -27,7 +27,7 @@ describe(commands.M365GROUP_GET, () => { sinon.stub(session, 'getId').returns(''); sinon.stub(aadGroup, 'isUnifiedGroup').resolves(true); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/aad/commands/m365group/m365group-list.spec.ts b/src/m365/aad/commands/m365group/m365group-list.spec.ts index 7fc5642b0d3..67350634332 100644 --- a/src/m365/aad/commands/m365group/m365group-list.spec.ts +++ b/src/m365/aad/commands/m365group/m365group-list.spec.ts @@ -2,7 +2,7 @@ import { Group } from '@microsoft/microsoft-graph-types'; import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -27,7 +27,7 @@ describe(commands.M365GROUP_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/aad/commands/m365group/m365group-recyclebinitem-clear.spec.ts b/src/m365/aad/commands/m365group/m365group-recyclebinitem-clear.spec.ts index ae4e6106af1..948e46ea550 100644 --- a/src/m365/aad/commands/m365group/m365group-recyclebinitem-clear.spec.ts +++ b/src/m365/aad/commands/m365group/m365group-recyclebinitem-clear.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import fs from 'fs'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; import request from '../../../../request.js'; @@ -40,7 +40,7 @@ describe(commands.M365GROUP_RECYCLEBINITEM_CLEAR, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -52,7 +52,7 @@ describe(commands.M365GROUP_RECYCLEBINITEM_CLEAR, () => { sinonUtil.restore([ request.get, request.delete, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -263,16 +263,16 @@ describe(commands.M365GROUP_RECYCLEBINITEM_CLEAR, () => { it('aborts clearing the M365 Group recyclebin items when prompt not confirmed', async () => { const deleteSpy = sinon.spy(request, 'delete'); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: {} }); assert(deleteSpy.notCalled); }); it('aborts clearing the recycle bin items when prompt not confirmed (debug)', async () => { const deleteSpy = sinon.spy(request, 'delete'); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { debug: true } }); assert(deleteSpy.notCalled); }); @@ -341,8 +341,8 @@ describe(commands.M365GROUP_RECYCLEBINITEM_CLEAR, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: {} }); assert(deleteStub.calledTwice); }); @@ -437,8 +437,8 @@ describe(commands.M365GROUP_RECYCLEBINITEM_CLEAR, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { debug: true } }); assert(deleteStub.calledThrice); }); diff --git a/src/m365/aad/commands/m365group/m365group-recyclebinitem-clear.ts b/src/m365/aad/commands/m365group/m365group-recyclebinitem-clear.ts index 66eb722029d..2f2b944a8ab 100644 --- a/src/m365/aad/commands/m365group/m365group-recyclebinitem-clear.ts +++ b/src/m365/aad/commands/m365group/m365group-recyclebinitem-clear.ts @@ -1,5 +1,5 @@ import { DirectoryObject } from '@microsoft/microsoft-graph-types'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request from '../../../../request.js'; @@ -61,7 +61,7 @@ class AadM365GroupRecycleBinItemClearCommand extends GraphCommand { await clearM365GroupRecycleBinItems(); } else { - const response = await Cli.promptForConfirmation({ message: `Are you sure you want to clear all M365 Groups from recycle bin?` }); + const response = await cli.promptForConfirmation({ message: `Are you sure you want to clear all M365 Groups from recycle bin?` }); if (response) { await clearM365GroupRecycleBinItems(); diff --git a/src/m365/aad/commands/m365group/m365group-recyclebinitem-remove.spec.ts b/src/m365/aad/commands/m365group/m365group-recyclebinitem-remove.spec.ts index 7485426199e..4cf21c14912 100644 --- a/src/m365/aad/commands/m365group/m365group-recyclebinitem-remove.spec.ts +++ b/src/m365/aad/commands/m365group/m365group-recyclebinitem-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -16,7 +16,6 @@ import command from './m365group-recyclebinitem-remove.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.M365GROUP_RECYCLEBINITEM_REMOVE, () => { - let cli: Cli; const validGroupId = '00000000-0000-0000-0000-000000000000'; const validGroupDisplayName = 'Dev Team'; const validGroupMailNickname = 'Devteam'; @@ -64,14 +63,13 @@ describe(commands.M365GROUP_RECYCLEBINITEM_REMOVE, () => { let promptIssued: boolean = false; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); - sinon.stub(Cli.getInstance(), 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { + commandInfo = cli.getCommandInfo(command); + sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { if (settingName === 'prompt') { return false; } @@ -93,7 +91,7 @@ describe(commands.M365GROUP_RECYCLEBINITEM_REMOVE, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -105,8 +103,8 @@ describe(commands.M365GROUP_RECYCLEBINITEM_REMOVE, () => { sinonUtil.restore([ request.get, request.delete, - Cli.promptForConfirmation, - Cli.handleMultipleResultsFound, + cli.promptForConfirmation, + cli.handleMultipleResultsFound, cli.getSettingWithDefaultValue ]); }); @@ -223,11 +221,11 @@ describe(commands.M365GROUP_RECYCLEBINITEM_REMOVE, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves(singleGroupsResponse.value[0]); + sinon.stub(cli, 'handleMultipleResultsFound').resolves(singleGroupsResponse.value[0]); - sinonUtil.restore(Cli.promptForConfirmation); + sinonUtil.restore(cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -262,8 +260,8 @@ describe(commands.M365GROUP_RECYCLEBINITEM_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -287,8 +285,8 @@ describe(commands.M365GROUP_RECYCLEBINITEM_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { diff --git a/src/m365/aad/commands/m365group/m365group-recyclebinitem-remove.ts b/src/m365/aad/commands/m365group/m365group-recyclebinitem-remove.ts index 5694c7c5119..06a14931e43 100644 --- a/src/m365/aad/commands/m365group/m365group-recyclebinitem-remove.ts +++ b/src/m365/aad/commands/m365group/m365group-recyclebinitem-remove.ts @@ -1,5 +1,5 @@ import { Group } from '@microsoft/microsoft-graph-types'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -105,7 +105,7 @@ class AadM365GroupRecycleBinItemRemoveCommand extends GraphCommand { await removeGroup(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the group '${args.options.id || args.options.displayName || args.options.mailNickname}'?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the group '${args.options.id || args.options.displayName || args.options.mailNickname}'?` }); if (result) { await removeGroup(); @@ -146,7 +146,7 @@ class AadM365GroupRecycleBinItemRemoveCommand extends GraphCommand { if (groups.length > 1) { const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', groups); - const result = await Cli.handleMultipleResultsFound(`Multiple groups with name '${displayName || mailNickname}' found.`, resultAsKeyValuePair); + const result = await cli.handleMultipleResultsFound(`Multiple groups with name '${displayName || mailNickname}' found.`, resultAsKeyValuePair); return result.id!; } diff --git a/src/m365/aad/commands/m365group/m365group-recyclebinitem-restore.spec.ts b/src/m365/aad/commands/m365group/m365group-recyclebinitem-restore.spec.ts index b55d7c33285..e6655de6ac7 100644 --- a/src/m365/aad/commands/m365group/m365group-recyclebinitem-restore.spec.ts +++ b/src/m365/aad/commands/m365group/m365group-recyclebinitem-restore.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -16,7 +16,6 @@ import command from './m365group-recyclebinitem-restore.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.M365GROUP_RECYCLEBINITEM_RESTORE, () => { - let cli: Cli; const validGroupId = '00000000-0000-0000-0000-000000000000'; const validGroupDisplayName = 'Dev Team'; const validGroupMailNickname = 'Devteam'; @@ -63,14 +62,13 @@ describe(commands.M365GROUP_RECYCLEBINITEM_RESTORE, () => { let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); - sinon.stub(Cli.getInstance(), 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { + commandInfo = cli.getCommandInfo(command); + sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { if (settingName === 'prompt') { return false; } @@ -100,7 +98,7 @@ describe(commands.M365GROUP_RECYCLEBINITEM_RESTORE, () => { request.post, global.setTimeout, cli.getSettingWithDefaultValue, - Cli.handleMultipleResultsFound + cli.handleMultipleResultsFound ]); }); @@ -261,7 +259,7 @@ describe(commands.M365GROUP_RECYCLEBINITEM_RESTORE, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves(singleGroupsResponse.value[0]); + sinon.stub(cli, 'handleMultipleResultsFound').resolves(singleGroupsResponse.value[0]); await command.action(logger, { options: { diff --git a/src/m365/aad/commands/m365group/m365group-recyclebinitem-restore.ts b/src/m365/aad/commands/m365group/m365group-recyclebinitem-restore.ts index beff0a3e4d7..b2450e2ed2e 100644 --- a/src/m365/aad/commands/m365group/m365group-recyclebinitem-restore.ts +++ b/src/m365/aad/commands/m365group/m365group-recyclebinitem-restore.ts @@ -6,7 +6,7 @@ import { formatting } from '../../../../utils/formatting.js'; import { validation } from '../../../../utils/validation.js'; import GraphCommand from '../../../base/GraphCommand.js'; import commands from '../../commands.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; interface CommandArgs { options: Options; @@ -132,7 +132,7 @@ class AadM365GroupRecycleBinItemRestoreCommand extends GraphCommand { if (groups.length > 1) { const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', groups); - const result = await Cli.handleMultipleResultsFound<{ id: string }>(`Multiple groups with name '${displayName || mailNickname}' found.`, resultAsKeyValuePair); + const result = await cli.handleMultipleResultsFound<{ id: string }>(`Multiple groups with name '${displayName || mailNickname}' found.`, resultAsKeyValuePair); return result.id; } diff --git a/src/m365/aad/commands/m365group/m365group-remove.spec.ts b/src/m365/aad/commands/m365group/m365group-remove.spec.ts index 0bf3c4d4250..8fa0cc5ebdf 100644 --- a/src/m365/aad/commands/m365group/m365group-remove.spec.ts +++ b/src/m365/aad/commands/m365group/m365group-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -104,7 +104,7 @@ describe(commands.M365GROUP_REMOVE, () => { sinon.stub(aadGroup, 'isUnifiedGroup').resolves(true); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -125,7 +125,7 @@ describe(commands.M365GROUP_REMOVE, () => { const futureDate = new Date(); futureDate.setSeconds(futureDate.getSeconds() + 1800); sinon.stub(spo, 'ensureFormDigest').callsFake(() => { return Promise.resolve({ FormDigestValue: 'abc', FormDigestTimeoutSeconds: 1800, FormDigestExpiresAt: futureDate, WebFullUrl: 'https://contoso.sharepoint.com/teams/sales' }); }); - sinon.stub(Cli, 'promptForConfirmation').callsFake(async () => { + sinon.stub(cli, 'promptForConfirmation').callsFake(async () => { promptIssued = true; return false; }); @@ -141,7 +141,7 @@ describe(commands.M365GROUP_REMOVE, () => { request.delete, spo.getSpoAdminUrl, spo.ensureFormDigest, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -186,8 +186,8 @@ describe(commands.M365GROUP_REMOVE, () => { defaultGetStub(); const deletedGroupSpy: sinon.SinonStub = defaultPostStub(); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { id: groupId, verbose: true } }); assert(deletedGroupSpy.calledOnce); @@ -223,8 +223,8 @@ describe(commands.M365GROUP_REMOVE, () => { it('handles error if unexpected error occurs while deleting site from the recycle bin', async () => { const getCallStub: sinon.SinonStub = sinon.stub(request, 'get'); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); getCallStub.withArgs(sinon.match({ url: `https://graph.microsoft.com/v1.0/groups/${groupId}/drive?$select=webUrl` })) .resolves({ webUrl: "https://contoso.sharepoint.com/teams/sales/Shared%20Documents" }); diff --git a/src/m365/aad/commands/m365group/m365group-remove.ts b/src/m365/aad/commands/m365group/m365group-remove.ts index 48289f71358..bd115e86b92 100644 --- a/src/m365/aad/commands/m365group/m365group-remove.ts +++ b/src/m365/aad/commands/m365group/m365group-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -109,7 +109,7 @@ class AadM365GroupRemoveCommand extends GraphCommand { await removeGroup(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the group ${args.options.id}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the group ${args.options.id}?` }); if (result) { await removeGroup(); diff --git a/src/m365/aad/commands/m365group/m365group-renew.spec.ts b/src/m365/aad/commands/m365group/m365group-renew.spec.ts index a65174f5b57..79e5d66491e 100644 --- a/src/m365/aad/commands/m365group/m365group-renew.spec.ts +++ b/src/m365/aad/commands/m365group/m365group-renew.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -28,7 +28,7 @@ describe(commands.M365GROUP_RENEW, () => { sinon.stub(session, 'getId').returns(''); sinon.stub(aadGroup, 'isUnifiedGroup').resolves(true); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/aad/commands/m365group/m365group-set.spec.ts b/src/m365/aad/commands/m365group/m365group-set.spec.ts index 791d7b65737..c13df09c237 100644 --- a/src/m365/aad/commands/m365group/m365group-set.spec.ts +++ b/src/m365/aad/commands/m365group/m365group-set.spec.ts @@ -3,7 +3,7 @@ import assert from 'assert'; import fs from 'fs'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -30,7 +30,7 @@ describe(commands.M365GROUP_SET, () => { sinon.stub(session, 'getId').returns(''); sinon.stub(aadGroup, 'isUnifiedGroup').resolves(true); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/aad/commands/m365group/m365group-teamify.spec.ts b/src/m365/aad/commands/m365group/m365group-teamify.spec.ts index e730cf91e8e..533a1f2276e 100644 --- a/src/m365/aad/commands/m365group/m365group-teamify.spec.ts +++ b/src/m365/aad/commands/m365group/m365group-teamify.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -16,20 +16,18 @@ import { settingsNames } from '../../../../settingsNames.js'; import { aadGroup } from '../../../../utils/aadGroup.js'; describe(commands.M365GROUP_TEAMIFY, () => { - let cli: Cli; let log: string[]; let logger: Logger; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); sinon.stub(aadGroup, 'isUnifiedGroup').resolves(true); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -53,7 +51,7 @@ describe(commands.M365GROUP_TEAMIFY, () => { request.get, request.put, cli.getSettingWithDefaultValue, - Cli.handleMultipleResultsFound + cli.handleMultipleResultsFound ]); }); @@ -337,7 +335,7 @@ describe(commands.M365GROUP_TEAMIFY, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves({ + sinon.stub(cli, 'handleMultipleResultsFound').resolves({ "@odata.id": "https://graph.microsoft.com/v2/00000000-0000-0000-0000-000000000000/directoryObjects/00000000-0000-0000-0000-000000000000/Microsoft.DirectoryServices.Group", "id": "00000000-0000-0000-0000-000000000000", "deletedDateTime": null, diff --git a/src/m365/aad/commands/m365group/m365group-teamify.ts b/src/m365/aad/commands/m365group/m365group-teamify.ts index 1c811a0ba7f..b0487b50510 100644 --- a/src/m365/aad/commands/m365group/m365group-teamify.ts +++ b/src/m365/aad/commands/m365group/m365group-teamify.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -93,7 +93,7 @@ class AadM365GroupTeamifyCommand extends GraphCommand { if (response.value.length > 1) { const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', response.value); - const result = await Cli.handleMultipleResultsFound<{ id: string }>(`Multiple Microsoft 365 Groups with name '${options.mailNickname}' found.`, resultAsKeyValuePair); + const result = await cli.handleMultipleResultsFound<{ id: string }>(`Multiple Microsoft 365 Groups with name '${options.mailNickname}' found.`, resultAsKeyValuePair); return result.id; } diff --git a/src/m365/aad/commands/m365group/m365group-user-add.spec.ts b/src/m365/aad/commands/m365group/m365group-user-add.spec.ts index 2e79026bcdd..b882de92702 100644 --- a/src/m365/aad/commands/m365group/m365group-user-add.spec.ts +++ b/src/m365/aad/commands/m365group/m365group-user-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -17,20 +17,18 @@ import { settingsNames } from '../../../../settingsNames.js'; import { aadGroup } from '../../../../utils/aadGroup.js'; describe(commands.M365GROUP_USER_ADD, () => { - let cli: Cli; let log: string[]; let logger: Logger; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); sinon.stub(aadGroup, 'isUnifiedGroup').resolves(true); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/aad/commands/m365group/m365group-user-list.spec.ts b/src/m365/aad/commands/m365group/m365group-user-list.spec.ts index d8fd081fcc7..274ecbb3d6a 100644 --- a/src/m365/aad/commands/m365group/m365group-user-list.spec.ts +++ b/src/m365/aad/commands/m365group/m365group-user-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -27,7 +27,7 @@ describe(commands.M365GROUP_USER_LIST, () => { sinon.stub(session, 'getId').returns(''); sinon.stub(aadGroup, 'isUnifiedGroup').resolves(true); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/aad/commands/m365group/m365group-user-remove.spec.ts b/src/m365/aad/commands/m365group/m365group-user-remove.spec.ts index 607ef344cd2..47cfe0d9311 100644 --- a/src/m365/aad/commands/m365group/m365group-user-remove.spec.ts +++ b/src/m365/aad/commands/m365group/m365group-user-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -17,21 +17,19 @@ import { settingsNames } from '../../../../settingsNames.js'; import { aadGroup } from '../../../../utils/aadGroup.js'; describe(commands.M365GROUP_USER_REMOVE, () => { - let cli: Cli; let log: string[]; let logger: Logger; let commandInfo: CommandInfo; let promptIssued: boolean = false; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); sinon.stub(aadGroup, 'isUnifiedGroup').resolves(true); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -47,7 +45,7 @@ describe(commands.M365GROUP_USER_REMOVE, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -59,7 +57,7 @@ describe(commands.M365GROUP_USER_REMOVE, () => { request.get, request.delete, global.setTimeout, - Cli.promptForConfirmation, + cli.promptForConfirmation, cli.getSettingWithDefaultValue ]); }); @@ -167,8 +165,8 @@ describe(commands.M365GROUP_USER_REMOVE, () => { it('aborts removing the specified user from the specified Microsoft 365 Group when force option not passed and prompt not confirmed', async () => { const postSpy = sinon.spy(request, 'delete'); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { groupId: "00000000-0000-0000-0000-000000000000", userName: "anne.matthews@contoso.onmicrosoft.com" } }); assert(postSpy.notCalled); @@ -176,8 +174,8 @@ describe(commands.M365GROUP_USER_REMOVE, () => { it('aborts removing the specified user from the specified Microsoft 365 Group when force option not passed and prompt not confirmed (debug)', async () => { const postSpy = sinon.spy(request, 'delete'); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { debug: true, groupId: "00000000-0000-0000-0000-000000000000", userName: "anne.matthews@contoso.onmicrosoft.com" } }); assert(postSpy.notCalled); @@ -225,8 +223,8 @@ describe(commands.M365GROUP_USER_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { groupId: "00000000-0000-0000-0000-000000000000", userName: "anne.matthews@contoso.onmicrosoft.com" } }); assert(memberDeleteCallIssued); @@ -501,8 +499,8 @@ describe(commands.M365GROUP_USER_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await assert.rejects(command.action(logger, { options: { groupId: "00000000-0000-0000-0000-000000000000", userName: "anne.matthews@contoso.onmicrosoft.com" } } as any), new CommandError('Invalid object identifier')); }); @@ -544,8 +542,8 @@ describe(commands.M365GROUP_USER_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await assert.rejects(command.action(logger, { options: { groupId: "00000000-0000-0000-0000-000000000000", userName: "anne.matthews@contoso.onmicrosoft.com" } } as any), new CommandError('Invalid object identifier')); @@ -598,8 +596,8 @@ describe(commands.M365GROUP_USER_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await assert.rejects(command.action(logger, { options: { groupId: "00000000-0000-0000-0000-000000000000", userName: "anne.matthews@contoso.onmicrosoft.com" } } as any), new CommandError('Invalid object identifier')); @@ -616,8 +614,8 @@ describe(commands.M365GROUP_USER_REMOVE, () => { sinon.stub(request, 'delete').resolves(); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await assert.rejects(command.action(logger, { options: { debug: true, groupId: "00000000-0000-0000-0000-000000000000", userName: "anne.matthews@contoso.onmicrosoft.com" } } as any), new CommandError("Invalid request")); }); diff --git a/src/m365/aad/commands/m365group/m365group-user-remove.ts b/src/m365/aad/commands/m365group/m365group-user-remove.ts index 458609969c2..cb86136f158 100644 --- a/src/m365/aad/commands/m365group/m365group-user-remove.ts +++ b/src/m365/aad/commands/m365group/m365group-user-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request from '../../../../request.js'; @@ -162,7 +162,7 @@ class AadM365GroupUserRemoveCommand extends GraphCommand { await removeUser(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove ${args.options.userName} from the ${(typeof args.options.groupId !== 'undefined' ? 'group' : 'team')} ${groupId}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove ${args.options.userName} from the ${(typeof args.options.groupId !== 'undefined' ? 'group' : 'team')} ${groupId}?` }); if (result) { await removeUser(); diff --git a/src/m365/aad/commands/m365group/m365group-user-set.spec.ts b/src/m365/aad/commands/m365group/m365group-user-set.spec.ts index 9381da1447a..99323e8b821 100644 --- a/src/m365/aad/commands/m365group/m365group-user-set.spec.ts +++ b/src/m365/aad/commands/m365group/m365group-user-set.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -17,20 +17,18 @@ import { settingsNames } from '../../../../settingsNames.js'; import { aadGroup } from '../../../../utils/aadGroup.js'; describe(commands.M365GROUP_USER_SET, () => { - let cli: Cli; let log: string[]; let logger: Logger; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); sinon.stub(aadGroup, 'isUnifiedGroup').resolves(true); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/aad/commands/oauth2grant/oauth2grant-add.spec.ts b/src/m365/aad/commands/oauth2grant/oauth2grant-add.spec.ts index f1e780b0457..c565457fcad 100644 --- a/src/m365/aad/commands/oauth2grant/oauth2grant-add.spec.ts +++ b/src/m365/aad/commands/oauth2grant/oauth2grant-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -26,7 +26,7 @@ describe(commands.OAUTH2GRANT_ADD, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/aad/commands/oauth2grant/oauth2grant-list.spec.ts b/src/m365/aad/commands/oauth2grant/oauth2grant-list.spec.ts index bee7d854a73..2a7dde5f10f 100644 --- a/src/m365/aad/commands/oauth2grant/oauth2grant-list.spec.ts +++ b/src/m365/aad/commands/oauth2grant/oauth2grant-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -25,7 +25,7 @@ describe(commands.OAUTH2GRANT_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/aad/commands/oauth2grant/oauth2grant-remove.spec.ts b/src/m365/aad/commands/oauth2grant/oauth2grant-remove.spec.ts index ae03f8d3ed8..72a6368e9c1 100644 --- a/src/m365/aad/commands/oauth2grant/oauth2grant-remove.spec.ts +++ b/src/m365/aad/commands/oauth2grant/oauth2grant-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; import request from '../../../../request.js'; @@ -40,7 +40,7 @@ describe(commands.OAUTH2GRANT_REMOVE, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -53,7 +53,7 @@ describe(commands.OAUTH2GRANT_REMOVE, () => { afterEach(() => { sinonUtil.restore([ request.delete, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -79,8 +79,8 @@ describe(commands.OAUTH2GRANT_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { debug: true, grantId: 'YgA60KYa4UOPSdc-lpxYEnQkr8KVLDpCsOXkiV8i-ek' } }); assert(loggerLogToStderrSpy.called); @@ -96,8 +96,8 @@ describe(commands.OAUTH2GRANT_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { grantId: 'YgA60KYa4UOPSdc-lpxYEnQkr8KVLDpCsOXkiV8i-ek' } }); assert(loggerLogSpy.notCalled); @@ -133,8 +133,8 @@ describe(commands.OAUTH2GRANT_REMOVE, () => { it('aborts removing OAuth2 permission grant when prompt not confirmed', async () => { const deleteSpy = sinon.spy(request, 'delete'); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { grantId: 'YgA60KYa4UOPSdc-lpxYEnQkr8KVLDpCsOXkiV8i-ek' } }); assert(deleteSpy.notCalled); @@ -143,8 +143,8 @@ describe(commands.OAUTH2GRANT_REMOVE, () => { it('aborts removing OAuth2 permission grant when prompt not confirmed (debug)', async () => { const deleteSpy = sinon.spy(request, 'delete'); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { debug: true, grantId: 'YgA60KYa4UOPSdc-lpxYEnQkr8KVLDpCsOXkiV8i-ek' } }); assert(deleteSpy.notCalled); diff --git a/src/m365/aad/commands/oauth2grant/oauth2grant-remove.ts b/src/m365/aad/commands/oauth2grant/oauth2grant-remove.ts index 175238ba5ca..48dc7eb6308 100644 --- a/src/m365/aad/commands/oauth2grant/oauth2grant-remove.ts +++ b/src/m365/aad/commands/oauth2grant/oauth2grant-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -66,7 +66,7 @@ class AadOAuth2GrantRemoveCommand extends GraphCommand { await removeOauth2Grant(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the OAuth2 permissions for ${args.options.grantId}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the OAuth2 permissions for ${args.options.grantId}?` }); if (result) { await removeOauth2Grant(); diff --git a/src/m365/aad/commands/policy/policy-list.spec.ts b/src/m365/aad/commands/policy/policy-list.spec.ts index 37bd0609473..5f004f7ef6b 100644 --- a/src/m365/aad/commands/policy/policy-list.spec.ts +++ b/src/m365/aad/commands/policy/policy-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -25,7 +25,7 @@ describe(commands.POLICY_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/aad/commands/siteclassification/siteclassification-disable.spec.ts b/src/m365/aad/commands/siteclassification/siteclassification-disable.spec.ts index 3879bd10b8f..6fd6d2cffec 100644 --- a/src/m365/aad/commands/siteclassification/siteclassification-disable.spec.ts +++ b/src/m365/aad/commands/siteclassification/siteclassification-disable.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; import request from '../../../../request.js'; @@ -38,7 +38,7 @@ describe(commands.SITECLASSIFICATION_DISABLE, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -50,7 +50,7 @@ describe(commands.SITECLASSIFICATION_DISABLE, () => { sinonUtil.restore([ request.get, request.delete, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -484,8 +484,8 @@ describe(commands.SITECLASSIFICATION_DISABLE, () => { it('aborts removing the group when prompt not confirmed', async () => { const postSpy = sinon.spy(request, 'delete'); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: {} }); assert(postSpy.notCalled); @@ -573,8 +573,8 @@ describe(commands.SITECLASSIFICATION_DISABLE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: {} }); assert(deleteRequestIssued); diff --git a/src/m365/aad/commands/siteclassification/siteclassification-disable.ts b/src/m365/aad/commands/siteclassification/siteclassification-disable.ts index dde63733306..7ee0e2b76cf 100644 --- a/src/m365/aad/commands/siteclassification/siteclassification-disable.ts +++ b/src/m365/aad/commands/siteclassification/siteclassification-disable.ts @@ -1,5 +1,5 @@ import { GroupSetting } from '@microsoft/microsoft-graph-types'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -95,7 +95,7 @@ class AadSiteClassificationDisableCommand extends GraphCommand { await disableSiteClassification(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to disable site classification?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to disable site classification?` }); if (result) { await disableSiteClassification(); diff --git a/src/m365/aad/commands/siteclassification/siteclassification-set.spec.ts b/src/m365/aad/commands/siteclassification/siteclassification-set.spec.ts index 747913a7131..930c77cc6f3 100644 --- a/src/m365/aad/commands/siteclassification/siteclassification-set.spec.ts +++ b/src/m365/aad/commands/siteclassification/siteclassification-set.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -24,7 +24,7 @@ describe(commands.SITECLASSIFICATION_SET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/aad/commands/sp/sp-add.spec.ts b/src/m365/aad/commands/sp/sp-add.spec.ts index 3211d0ccfc9..02e53bb8b59 100644 --- a/src/m365/aad/commands/sp/sp-add.spec.ts +++ b/src/m365/aad/commands/sp/sp-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,20 +15,18 @@ import command from './sp-add.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.SP_ADD, () => { - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -53,7 +51,7 @@ describe(commands.SP_ADD, () => { request.get, request.post, cli.getSettingWithDefaultValue, - Cli.handleMultipleResultsFound + cli.handleMultipleResultsFound ]); }); @@ -279,7 +277,7 @@ describe(commands.SP_ADD, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves({ + sinon.stub(cli, 'handleMultipleResultsFound').resolves({ "id": "be559819-b036-470f-858b-281c4e808403", "appId": "ee091f63-9e48-4697-8462-7cfbf7410b8e", "displayName": "Test App" diff --git a/src/m365/aad/commands/sp/sp-add.ts b/src/m365/aad/commands/sp/sp-add.ts index 6820e66f843..0e1e6857f8a 100644 --- a/src/m365/aad/commands/sp/sp-add.ts +++ b/src/m365/aad/commands/sp/sp-add.ts @@ -5,7 +5,7 @@ import { formatting } from '../../../../utils/formatting.js'; import { validation } from '../../../../utils/validation.js'; import GraphCommand from '../../../base/GraphCommand.js'; import commands from '../../commands.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; interface CommandArgs { options: Options; @@ -110,7 +110,7 @@ class AadSpAddCommand extends GraphCommand { if (response.value.length > 1) { const resultAsKeyValuePair = formatting.convertArrayToHashTable('appId', response.value); - const result = await Cli.handleMultipleResultsFound<{ appId: string }>(`Multiple Azure AD apps with name '${args.options.appName}' found.`, resultAsKeyValuePair); + const result = await cli.handleMultipleResultsFound<{ appId: string }>(`Multiple Azure AD apps with name '${args.options.appName}' found.`, resultAsKeyValuePair); return result.appId; } diff --git a/src/m365/aad/commands/sp/sp-get.spec.ts b/src/m365/aad/commands/sp/sp-get.spec.ts index b2003992347..d31d41ce399 100644 --- a/src/m365/aad/commands/sp/sp-get.spec.ts +++ b/src/m365/aad/commands/sp/sp-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,7 +15,6 @@ import command from './sp-get.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.SP_GET, () => { - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; @@ -38,13 +37,12 @@ describe(commands.SP_GET, () => { }; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -67,7 +65,7 @@ describe(commands.SP_GET, () => { sinonUtil.restore([ request.get, cli.getSettingWithDefaultValue, - Cli.handleMultipleResultsFound + cli.handleMultipleResultsFound ]); }); @@ -241,7 +239,7 @@ describe(commands.SP_GET, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves(spAppInfo.value[0]); + sinon.stub(cli, 'handleMultipleResultsFound').resolves(spAppInfo.value[0]); await command.action(logger, { options: { debug: true, appDisplayName: 'foo' } }); assert(loggerLogSpy.calledWith(spAppInfo)); diff --git a/src/m365/aad/commands/sp/sp-get.ts b/src/m365/aad/commands/sp/sp-get.ts index cedd82988e0..52d4604bd6d 100644 --- a/src/m365/aad/commands/sp/sp-get.ts +++ b/src/m365/aad/commands/sp/sp-get.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -110,7 +110,7 @@ class AadSpGetCommand extends GraphCommand { if (response.value.length > 1) { const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', response.value); - const result = await Cli.handleMultipleResultsFound<{ id: string }>(`Multiple Azure AD apps with name '${args.options.appDisplayName}' found.`, resultAsKeyValuePair); + const result = await cli.handleMultipleResultsFound<{ id: string }>(`Multiple Azure AD apps with name '${args.options.appDisplayName}' found.`, resultAsKeyValuePair); return result.id; } diff --git a/src/m365/aad/commands/user/user-add.spec.ts b/src/m365/aad/commands/user/user-add.spec.ts index 373943155a6..045795ff87f 100644 --- a/src/m365/aad/commands/user/user-add.spec.ts +++ b/src/m365/aad/commands/user/user-add.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -71,20 +71,18 @@ describe(commands.USER_ADD, () => { } }; - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/aad/commands/user/user-get.spec.ts b/src/m365/aad/commands/user/user-get.spec.ts index e2d001def98..613c2114c31 100644 --- a/src/m365/aad/commands/user/user-get.spec.ts +++ b/src/m365/aad/commands/user/user-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -21,14 +21,12 @@ describe(commands.USER_GET, () => { const userName = "AarifS@contoso.onmicrosoft.com"; const resultValue = { "id": "68be84bf-a585-4776-80b3-30aa5207aa21", "businessPhones": ["+1 425 555 0100"], "displayName": "Aarif Sherzai", "givenName": "Aarif", "jobTitle": "Administrative", "mail": null, "mobilePhone": "+1 425 555 0100", "officeLocation": null, "preferredLanguage": null, "surname": "Sherzai", "userPrincipalName": "AarifS@contoso.onmicrosoft.com" }; - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); @@ -40,7 +38,7 @@ describe(commands.USER_GET, () => { accessToken: 'abc' }; } - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -66,7 +64,7 @@ describe(commands.USER_GET, () => { accessToken.getUserIdFromAccessToken, accessToken.getUserNameFromAccessToken, cli.getSettingWithDefaultValue, - Cli.handleMultipleResultsFound + cli.handleMultipleResultsFound ]); }); @@ -296,7 +294,7 @@ describe(commands.USER_GET, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves(resultValue); + sinon.stub(cli, 'handleMultipleResultsFound').resolves(resultValue); await command.action(logger, { options: { email: userName } }); assert(loggerLogSpy.calledWith(resultValue)); diff --git a/src/m365/aad/commands/user/user-get.ts b/src/m365/aad/commands/user/user-get.ts index 69f0217aa01..1e6e71b098e 100644 --- a/src/m365/aad/commands/user/user-get.ts +++ b/src/m365/aad/commands/user/user-get.ts @@ -6,7 +6,7 @@ import { formatting } from '../../../../utils/formatting.js'; import { validation } from '../../../../utils/validation.js'; import GraphCommand from '../../../base/GraphCommand.js'; import commands from '../../commands.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; interface CommandArgs { options: Options; @@ -133,7 +133,7 @@ class AadUserGetCommand extends GraphCommand { if (res.value.length > 1) { const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', res.value); - const result = await Cli.handleMultipleResultsFound(`Multiple users with ${identifier} found.`, resultAsKeyValuePair); + const result = await cli.handleMultipleResultsFound(`Multiple users with ${identifier} found.`, resultAsKeyValuePair); await logger.log(result); } else { diff --git a/src/m365/aad/commands/user/user-hibp.spec.ts b/src/m365/aad/commands/user/user-hibp.spec.ts index 169f6aec51b..62c0aef613e 100644 --- a/src/m365/aad/commands/user/user-hibp.spec.ts +++ b/src/m365/aad/commands/user/user-hibp.spec.ts @@ -1,6 +1,6 @@ import assert from 'assert'; import sinon from 'sinon'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,15 +15,13 @@ import command from './user-hibp.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.USER_HIBP, () => { - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); diff --git a/src/m365/aad/commands/user/user-license-add.spec.ts b/src/m365/aad/commands/user/user-license-add.spec.ts index 0c594844d9b..8670f8d0834 100644 --- a/src/m365/aad/commands/user/user-license-add.spec.ts +++ b/src/m365/aad/commands/user/user-license-add.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -44,7 +44,7 @@ describe(commands.USER_LICENSE_ADD, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/aad/commands/user/user-license-list.spec.ts b/src/m365/aad/commands/user/user-license-list.spec.ts index 778491e0a0f..dd62a830a8f 100644 --- a/src/m365/aad/commands/user/user-license-list.spec.ts +++ b/src/m365/aad/commands/user/user-license-list.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -62,7 +62,7 @@ describe(commands.USER_LICENSE_LIST, () => { accessToken: 'abc' }; auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/aad/commands/user/user-license-remove.spec.ts b/src/m365/aad/commands/user/user-license-remove.spec.ts index d0b0602c2da..b881487f8a2 100644 --- a/src/m365/aad/commands/user/user-license-remove.spec.ts +++ b/src/m365/aad/commands/user/user-license-remove.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -32,7 +32,7 @@ describe(commands.USER_LICENSE_REMOVE, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -48,7 +48,7 @@ describe(commands.USER_LICENSE_REMOVE, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -59,7 +59,7 @@ describe(commands.USER_LICENSE_REMOVE, () => { afterEach(() => { sinonUtil.restore([ request.post, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -126,8 +126,8 @@ describe(commands.USER_LICENSE_REMOVE, () => { it('aborts removing the specified user licenses when force option not passed and prompt not confirmed', async () => { const postSpy = sinon.spy(request, 'delete'); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { @@ -160,8 +160,8 @@ describe(commands.USER_LICENSE_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { diff --git a/src/m365/aad/commands/user/user-license-remove.ts b/src/m365/aad/commands/user/user-license-remove.ts index 80726c660d3..c3ed5fe39cb 100644 --- a/src/m365/aad/commands/user/user-license-remove.ts +++ b/src/m365/aad/commands/user/user-license-remove.ts @@ -3,7 +3,7 @@ import GlobalOptions from '../../../../GlobalOptions.js'; import commands from '../../commands.js'; import request, { CliRequestOptions } from '../../../../request.js'; import { validation } from '../../../../utils/validation.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import GraphCommand from '../../../base/GraphCommand.js'; interface CommandArgs { @@ -98,7 +98,7 @@ class AadUserLicenseRemoveCommand extends GraphCommand { await this.deleteUserLicenses(args); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the licenses for the user '${args.options.userId || args.options.userName}'?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the licenses for the user '${args.options.userId || args.options.userName}'?` }); if (result) { await this.deleteUserLicenses(args); diff --git a/src/m365/aad/commands/user/user-recyclebinitem-clear.spec.ts b/src/m365/aad/commands/user/user-recyclebinitem-clear.spec.ts index 06cfba08993..d96f90777db 100644 --- a/src/m365/aad/commands/user/user-recyclebinitem-clear.spec.ts +++ b/src/m365/aad/commands/user/user-recyclebinitem-clear.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; import request from '../../../../request.js'; @@ -43,7 +43,7 @@ describe(commands.USER_RECYCLEBINITEM_CLEAR, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -56,7 +56,7 @@ describe(commands.USER_RECYCLEBINITEM_CLEAR, () => { sinonUtil.restore([ request.post, odata.getAllItems, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -76,8 +76,8 @@ describe(commands.USER_RECYCLEBINITEM_CLEAR, () => { it('removes a single user when prompt confirmed', async () => { let amountOfBatches = 0; - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); sinon.stub(odata, 'getAllItems').callsFake(async (url) => { if (url === graphGetUrl) { @@ -129,8 +129,8 @@ describe(commands.USER_RECYCLEBINITEM_CLEAR, () => { }); it('aborts removing users when prompt not confirmed', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); const postStub = sinon.stub(request, 'post').callsFake(async () => { return; }); diff --git a/src/m365/aad/commands/user/user-recyclebinitem-clear.ts b/src/m365/aad/commands/user/user-recyclebinitem-clear.ts index 81a73efca2d..fd9de31cfc9 100644 --- a/src/m365/aad/commands/user/user-recyclebinitem-clear.ts +++ b/src/m365/aad/commands/user/user-recyclebinitem-clear.ts @@ -1,5 +1,5 @@ import { User } from '@microsoft/microsoft-graph-types'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -90,7 +90,7 @@ class AadUserRecycleBinItemClearCommand extends GraphCommand { await clearRecycleBinUsers(); } else { - const result = await Cli.promptForConfirmation({ message: 'Are you sure you want to permanently delete all deleted users?' }); + const result = await cli.promptForConfirmation({ message: 'Are you sure you want to permanently delete all deleted users?' }); if (result) { await clearRecycleBinUsers(); diff --git a/src/m365/aad/commands/user/user-recyclebinitem-remove.spec.ts b/src/m365/aad/commands/user/user-recyclebinitem-remove.spec.ts index d35c3c9fb42..90b2ab007fd 100644 --- a/src/m365/aad/commands/user/user-recyclebinitem-remove.spec.ts +++ b/src/m365/aad/commands/user/user-recyclebinitem-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -27,7 +27,7 @@ describe(commands.USER_RECYCLEBINITEM_REMOVE, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -43,7 +43,7 @@ describe(commands.USER_RECYCLEBINITEM_REMOVE, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -55,7 +55,7 @@ describe(commands.USER_RECYCLEBINITEM_REMOVE, () => { afterEach(() => { sinonUtil.restore([ request.delete, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -73,8 +73,8 @@ describe(commands.USER_RECYCLEBINITEM_REMOVE, () => { }); it('removes the user when prompt confirmed', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); const deleteStub = sinon.stub(request, 'delete').callsFake(async (opts) => { if (opts.url === `https://graph.microsoft.com/v1.0/directory/deletedItems/${validUserId}`) { @@ -105,8 +105,8 @@ describe(commands.USER_RECYCLEBINITEM_REMOVE, () => { }); it('aborts removing users when prompt not confirmed', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); const deleteStub = sinon.stub(request, 'delete').resolves(); await command.action(logger, { options: { id: validUserId } }); diff --git a/src/m365/aad/commands/user/user-recyclebinitem-remove.ts b/src/m365/aad/commands/user/user-recyclebinitem-remove.ts index 591cfc099dc..a4215e1d6a5 100644 --- a/src/m365/aad/commands/user/user-recyclebinitem-remove.ts +++ b/src/m365/aad/commands/user/user-recyclebinitem-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -85,7 +85,7 @@ class AadUserRecycleBinItemRemoveCommand extends GraphCommand { await clearRecycleBinItem(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to permanently delete the user with id ${args.options.id}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to permanently delete the user with id ${args.options.id}?` }); if (result) { await clearRecycleBinItem(); diff --git a/src/m365/aad/commands/user/user-recyclebinitem-restore.spec.ts b/src/m365/aad/commands/user/user-recyclebinitem-restore.spec.ts index 205e37460ae..f792f152d4b 100644 --- a/src/m365/aad/commands/user/user-recyclebinitem-restore.spec.ts +++ b/src/m365/aad/commands/user/user-recyclebinitem-restore.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -42,7 +42,7 @@ describe(commands.USER_RECYCLEBINITEM_RESTORE, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/aad/commands/user/user-remove.spec.ts b/src/m365/aad/commands/user/user-remove.spec.ts index 85bc5b525bb..badf489a412 100644 --- a/src/m365/aad/commands/user/user-remove.spec.ts +++ b/src/m365/aad/commands/user/user-remove.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -30,7 +30,7 @@ describe(commands.USER_REMOVE, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -46,7 +46,7 @@ describe(commands.USER_REMOVE, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -57,7 +57,7 @@ describe(commands.USER_REMOVE, () => { afterEach(() => { sinonUtil.restore([ request.delete, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -132,8 +132,8 @@ describe(commands.USER_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -153,8 +153,8 @@ describe(commands.USER_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { diff --git a/src/m365/aad/commands/user/user-remove.ts b/src/m365/aad/commands/user/user-remove.ts index d59a6af3b4c..37bcee55335 100644 --- a/src/m365/aad/commands/user/user-remove.ts +++ b/src/m365/aad/commands/user/user-remove.ts @@ -3,7 +3,7 @@ import GlobalOptions from '../../../../GlobalOptions.js'; import commands from '../../commands.js'; import request, { CliRequestOptions } from '../../../../request.js'; import { validation } from '../../../../utils/validation.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import GraphCommand from '../../../base/GraphCommand.js'; interface CommandArgs { @@ -90,7 +90,7 @@ class AadUserRemoveCommand extends GraphCommand { await this.deleteUser(args); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove user '${args.options.id || args.options.userName}'?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove user '${args.options.id || args.options.userName}'?` }); if (result) { await this.deleteUser(args); diff --git a/src/m365/aad/commands/user/user-set.spec.ts b/src/m365/aad/commands/user/user-set.spec.ts index 704a31149d4..c80a0d9c1d5 100644 --- a/src/m365/aad/commands/user/user-set.spec.ts +++ b/src/m365/aad/commands/user/user-set.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -33,14 +33,12 @@ describe(commands.USER_SET, () => { const managerUserName = 'doe@contoso.com'; const largeString = 'f4gsz5cD0DmR7VpVXhsKlAwIryzpC847Z4qciQ1CDveZCNuCkWtUd9I8QXVLjurVS'; - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); @@ -52,7 +50,7 @@ describe(commands.USER_SET, () => { accessToken: 'abc' }; } - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/aad/commands/user/user-signin-list.spec.ts b/src/m365/aad/commands/user/user-signin-list.spec.ts index c7a69adf91a..27a130cf9f0 100644 --- a/src/m365/aad/commands/user/user-signin-list.spec.ts +++ b/src/m365/aad/commands/user/user-signin-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -152,7 +152,7 @@ describe(commands.USER_SIGNIN_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/adaptivecard/commands/adaptivecard-send.spec.ts b/src/m365/adaptivecard/commands/adaptivecard-send.spec.ts index f11a4cdbc1f..f71d610b98f 100644 --- a/src/m365/adaptivecard/commands/adaptivecard-send.spec.ts +++ b/src/m365/adaptivecard/commands/adaptivecard-send.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../Auth.js'; -import { Cli } from '../../../cli/Cli.js'; +import { cli } from '../../../cli/cli.js'; import { CommandInfo } from '../../../cli/CommandInfo.js'; import { Logger } from '../../../cli/Logger.js'; import { CommandError } from '../../../Command.js'; @@ -17,18 +17,16 @@ import 'adaptivecards-templating'; import { settingsNames } from '../../../settingsNames.js'; describe(commands.SEND, () => { - let cli: Cli; let log: string[]; let logger: Logger; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/app/commands/app-get.ts b/src/m365/app/commands/app-get.ts index 90c154cc134..cfc29908b1a 100644 --- a/src/m365/app/commands/app-get.ts +++ b/src/m365/app/commands/app-get.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../cli/Cli.js'; +import { cli } from '../../../cli/cli.js'; import { Logger } from '../../../cli/Logger.js'; import Command from '../../../Command.js'; import aadAppGetCommand, { Options as AadAppGetCommandOptions } from '../../aad/commands/app/app-get.js'; @@ -23,7 +23,7 @@ class AppGetCommand extends AppCommand { }; try { - const appGetOutput = await Cli.executeCommandWithOutput(aadAppGetCommand as Command, { options: { ...options, _: [] } }); + const appGetOutput = await cli.executeCommandWithOutput(aadAppGetCommand as Command, { options: { ...options, _: [] } }); if (this.verbose) { await logger.logToStderr(appGetOutput.stderr); } diff --git a/src/m365/app/commands/app-open.spec.ts b/src/m365/app/commands/app-open.spec.ts index 3aaed473f33..9a3aef0884f 100644 --- a/src/m365/app/commands/app-open.spec.ts +++ b/src/m365/app/commands/app-open.spec.ts @@ -3,7 +3,7 @@ import fs from 'fs'; import sinon from 'sinon'; import auth from '../../../Auth.js'; import { CommandError } from '../../../Command.js'; -import { Cli } from '../../../cli/Cli.js'; +import { cli } from '../../../cli/cli.js'; import { CommandInfo } from '../../../cli/CommandInfo.js'; import { Logger } from '../../../cli/Logger.js'; import { telemetry } from '../../../telemetry.js'; @@ -16,7 +16,6 @@ import command from './app-open.js'; describe(commands.OPEN, () => { let log: string[]; let logger: Logger; - let cli: Cli; let openStub: sinon.SinonStub; let getSettingWithDefaultValueStub: sinon.SinonStub; let loggerLogSpy: sinon.SinonSpy; @@ -37,12 +36,11 @@ describe(commands.OPEN, () => { } ] })); - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { log = []; - cli = Cli.getInstance(); logger = { log: async (msg: string) => { log.push(msg); diff --git a/src/m365/app/commands/app-open.ts b/src/m365/app/commands/app-open.ts index d05c1e46c9c..9e1a7fd26f8 100644 --- a/src/m365/app/commands/app-open.ts +++ b/src/m365/app/commands/app-open.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../cli/Cli.js'; +import { cli } from '../../../cli/cli.js'; import { Logger } from '../../../cli/Logger.js'; import GlobalOptions from '../../../GlobalOptions.js'; import { settingsNames } from '../../../settingsNames.js'; @@ -60,7 +60,7 @@ class AppOpenCommand extends AppCommand { const previewPrefix = args.options.preview === true ? "preview." : ""; const url = `https://${previewPrefix}portal.azure.com/#blade/Microsoft_AAD_RegisteredApps/ApplicationMenuBlade/Overview/appId/${this.appId}/isMSAApp/`; - if (Cli.getInstance().getSettingWithDefaultValue(settingsNames.autoOpenLinksInBrowser, false) === false) { + if (cli.getSettingWithDefaultValue(settingsNames.autoOpenLinksInBrowser, false) === false) { await logger.log(`Use a web browser to open the page ${url}`); return; } diff --git a/src/m365/app/commands/permission/permission-add.spec.ts b/src/m365/app/commands/permission/permission-add.spec.ts index 8f43958b946..ae94ace9d45 100644 --- a/src/m365/app/commands/permission/permission-add.spec.ts +++ b/src/m365/app/commands/permission/permission-add.spec.ts @@ -4,7 +4,7 @@ import fs from 'fs'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -27,13 +27,11 @@ describe(commands.PERMISSION_ADD, () => { const delegatedPermissions = 'https://graph.microsoft.com/offline_access'; //#endregion - let cli: Cli; let log: string[]; let logger: Logger; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); @@ -48,8 +46,8 @@ describe(commands.PERMISSION_ADD, () => { ] })); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); - sinon.stub(Cli.getInstance(), 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { + commandInfo = cli.getCommandInfo(command); + sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { if (settingName === 'prompt') { return false; } diff --git a/src/m365/app/commands/permission/permission-list.ts b/src/m365/app/commands/permission/permission-list.ts index 1fecbfcbacd..24ae315f971 100644 --- a/src/m365/app/commands/permission/permission-list.ts +++ b/src/m365/app/commands/permission/permission-list.ts @@ -1,5 +1,5 @@ import { Application, AppRole, AppRoleAssignment, OAuth2PermissionGrant, PermissionScope, RequiredResourceAccess, ResourceAccess, ServicePrincipal } from '@microsoft/microsoft-graph-types'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import Command from '../../../../Command.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -231,7 +231,7 @@ class AppPermissionListCommand extends AppCommand { verbose: this.verbose }; - const output = await Cli.executeCommandWithOutput(appGetCommand as Command, { options: { ...options, _: [] } }); + const output = await cli.executeCommandWithOutput(appGetCommand as Command, { options: { ...options, _: [] } }); if (this.debug) { await logger.logToStderr(output.stderr); diff --git a/src/m365/base/AppCommand.spec.ts b/src/m365/base/AppCommand.spec.ts index e7f93e7030b..e959ca0178d 100644 --- a/src/m365/base/AppCommand.spec.ts +++ b/src/m365/base/AppCommand.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import fs from 'fs'; import sinon from 'sinon'; -import { Cli } from '../../cli/Cli.js'; +import { cli } from '../../cli/cli.js'; import { CommandInfo } from '../../cli/CommandInfo.js'; import { Logger } from '../../cli/Logger.js'; import Command, { CommandError } from '../../Command.js'; @@ -32,7 +32,7 @@ describe('AppCommand', () => { let commandInfo: CommandInfo; before(() => { - commandInfo = Cli.getCommandInfo(new MockCommand()); + commandInfo = cli.getCommandInfo(new MockCommand()); sinon.stub(telemetry, 'trackEvent').callsFake(() => { }); }); @@ -56,7 +56,7 @@ describe('AppCommand', () => { sinonUtil.restore([ fs.existsSync, fs.readFileSync, - Cli.handleMultipleResultsFound + cli.handleMultipleResultsFound ]); }); @@ -121,7 +121,7 @@ describe('AppCommand', () => { } ] })); - const cliPromptStub = sinon.stub(Cli, 'handleMultipleResultsFound').callsFake(async () => ( + const cliPromptStub = sinon.stub(cli, 'handleMultipleResultsFound').callsFake(async () => ( { appIdIndex: 0 } )); await assert.rejects(cmd.action(logger, { options: {} })); @@ -142,7 +142,7 @@ describe('AppCommand', () => { } ] })); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves({ appIdIndex: 1 }); + sinon.stub(cli, 'handleMultipleResultsFound').resolves({ appIdIndex: 1 }); sinon.stub(Command.prototype, 'action').resolves(); try { diff --git a/src/m365/base/AppCommand.ts b/src/m365/base/AppCommand.ts index c278374a996..669b51e8dd1 100644 --- a/src/m365/base/AppCommand.ts +++ b/src/m365/base/AppCommand.ts @@ -1,5 +1,5 @@ import fs from 'fs'; -import { Cli } from '../../cli/Cli.js'; +import { cli } from '../../cli/cli.js'; import { Logger } from '../../cli/Logger.js'; import Command, { CommandArgs, CommandError } from '../../Command.js'; import GlobalOptions from '../../GlobalOptions.js'; @@ -91,7 +91,7 @@ export default abstract class AppCommand extends Command { if (this.m365rcJson.apps.length > 1) { const resultAsKeyValuePair = formatting.convertArrayToHashTable('appIdIndex', this.m365rcJson.apps); - const result = await Cli.handleMultipleResultsFound<{ appIdIndex: number }>(`Multiple Azure AD apps found in ${m365rcJsonPath}.`, resultAsKeyValuePair); + const result = await cli.handleMultipleResultsFound<{ appIdIndex: number }>(`Multiple Azure AD apps found in ${m365rcJsonPath}.`, resultAsKeyValuePair); this.appId = ((this.m365rcJson as M365RcJson).apps as M365RcJsonApp[])[result.appIdIndex].appId; await super.action(logger, args); } diff --git a/src/m365/base/DateAndPeriodBasedReport.spec.ts b/src/m365/base/DateAndPeriodBasedReport.spec.ts index 70c7ca22873..2349859a21b 100644 --- a/src/m365/base/DateAndPeriodBasedReport.spec.ts +++ b/src/m365/base/DateAndPeriodBasedReport.spec.ts @@ -3,7 +3,7 @@ import fs from 'fs'; import sinon from 'sinon'; import { telemetry } from '../../telemetry.js'; import auth from '../../Auth.js'; -import { Cli } from '../../cli/Cli.js'; +import { cli } from '../../cli/cli.js'; import { CommandInfo } from '../../cli/CommandInfo.js'; import { Logger } from '../../cli/Logger.js'; import { CommandError } from '../../Command.js'; @@ -42,7 +42,7 @@ describe('PeriodBasedReport', () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(mockCommand); + commandInfo = cli.getCommandInfo(mockCommand); }); beforeEach(() => { diff --git a/src/m365/base/PeriodBasedReport.spec.ts b/src/m365/base/PeriodBasedReport.spec.ts index 17264c2ba2c..2afd0a563d1 100644 --- a/src/m365/base/PeriodBasedReport.spec.ts +++ b/src/m365/base/PeriodBasedReport.spec.ts @@ -3,7 +3,7 @@ import fs from 'fs'; import sinon from 'sinon'; import auth from '../../Auth.js'; import { CommandError } from '../../Command.js'; -import { Cli } from '../../cli/Cli.js'; +import { cli } from '../../cli/cli.js'; import { CommandInfo } from '../../cli/CommandInfo.js'; import { Logger } from '../../cli/Logger.js'; import request from '../../request.js'; @@ -42,7 +42,7 @@ describe('PeriodBasedReport', () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(mockCommand); + commandInfo = cli.getCommandInfo(mockCommand); }); beforeEach(() => { diff --git a/src/m365/booking/commands/business/business-get.spec.ts b/src/m365/booking/commands/business/business-get.spec.ts index 5f8912dbe07..6e6d432d601 100644 --- a/src/m365/booking/commands/business/business-get.spec.ts +++ b/src/m365/booking/commands/business/business-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; import request from '../../../../request.js'; @@ -15,7 +15,6 @@ import command from './business-get.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.BUSINESS_GET, () => { - let cli: Cli; const validId = 'mail@contoso.onmicrosoft.com'; const validName = 'Valid Business'; @@ -34,7 +33,6 @@ describe(commands.BUSINESS_GET, () => { let loggerLogSpy: sinon.SinonSpy; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); @@ -62,9 +60,9 @@ describe(commands.BUSINESS_GET, () => { afterEach(() => { sinonUtil.restore([ request.get, - Cli.executeCommandWithOutput, + cli.executeCommandWithOutput, cli.getSettingWithDefaultValue, - Cli.handleMultipleResultsFound + cli.handleMultipleResultsFound ]); }); @@ -149,7 +147,7 @@ describe(commands.BUSINESS_GET, () => { return Promise.reject('Invalid request'); }); - sinon.stub(Cli.getInstance(), 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { + sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { if (settingName === 'prompt') { return true; } @@ -157,7 +155,7 @@ describe(commands.BUSINESS_GET, () => { return defaultValue; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves(businessResponse); + sinon.stub(cli, 'handleMultipleResultsFound').resolves(businessResponse); await command.action(logger, { options: { name: validName } }); assert(loggerLogSpy.calledWith(businessResponse)); diff --git a/src/m365/booking/commands/business/business-get.ts b/src/m365/booking/commands/business/business-get.ts index a9435edc7ad..26941afe044 100644 --- a/src/m365/booking/commands/business/business-get.ts +++ b/src/m365/booking/commands/business/business-get.ts @@ -5,7 +5,7 @@ import request, { CliRequestOptions } from '../../../../request.js'; import { formatting } from '../../../../utils/formatting.js'; import GraphCommand from '../../../base/GraphCommand.js'; import commands from '../../commands.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; interface CommandArgs { options: Options; @@ -100,7 +100,7 @@ class BookingBusinessGetCommand extends GraphCommand { if (bookingBusinesses.length > 1) { const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', bookingBusinesses); - const result = await Cli.handleMultipleResultsFound(`Multiple businesses with name '${options.name}' found.`, resultAsKeyValuePair); + const result = await cli.handleMultipleResultsFound(`Multiple businesses with name '${options.name}' found.`, resultAsKeyValuePair); return result.id!; } diff --git a/src/m365/cli/commands/cli-consent.spec.ts b/src/m365/cli/commands/cli-consent.spec.ts index 6ed8effbf28..a6f7c4dc21c 100644 --- a/src/m365/cli/commands/cli-consent.spec.ts +++ b/src/m365/cli/commands/cli-consent.spec.ts @@ -1,6 +1,6 @@ import assert from 'assert'; import sinon from 'sinon'; -import { Cli } from '../../../cli/Cli.js'; +import { cli } from '../../../cli/cli.js'; import { CommandInfo } from '../../../cli/CommandInfo.js'; import { Logger } from '../../../cli/Logger.js'; import config from '../../../config.js'; @@ -24,7 +24,7 @@ describe(commands.CONSENT, () => { sinon.stub(session, 'getId').callsFake(() => ''); originalTenant = config.tenant; originalAadAppId = config.cliAadAppId; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/cli/commands/cli-doctor.spec.ts b/src/m365/cli/commands/cli-doctor.spec.ts index 62f0def167a..9511e81c27a 100644 --- a/src/m365/cli/commands/cli-doctor.spec.ts +++ b/src/m365/cli/commands/cli-doctor.spec.ts @@ -3,7 +3,7 @@ import { createRequire } from 'module'; import os from 'os'; import sinon from 'sinon'; import auth from '../../../Auth.js'; -import { Cli } from '../../../cli/Cli.js'; +import { cli } from '../../../cli/cli.js'; import { Logger } from '../../../cli/Logger.js'; import { telemetry } from '../../../telemetry.js'; import { pid } from '../../../utils/pid.js'; @@ -26,7 +26,7 @@ describe(commands.DOCTOR, () => { sinon.stub(pid, 'getProcessName').callsFake(() => ''); sinon.stub(session, 'getId').callsFake(() => ''); auth.service.connected = true; - sinon.stub(Cli.getInstance().config, 'all').value({}); + sinon.stub(cli.getConfig(), 'all').value({}); }); beforeEach(() => { @@ -571,8 +571,8 @@ describe(commands.DOCTOR, () => { sinon.stub(auth.service, 'tenant').value('common'); sinon.stub(auth.service, 'authType').value(0); sinon.stub(process, 'env').value({ 'CLIMICROSOFT365_ENV': '' }); - sinonUtil.restore(Cli.getInstance().config.all); - sinon.stub(Cli.getInstance().config, 'all').value({ "showHelpOnFailure": false }); + sinonUtil.restore(cli.getConfig().all); + sinon.stub(cli.getConfig(), 'all').value({ "showHelpOnFailure": false }); await command.action(logger, { options: {} }); assert(loggerLogSpy.calledWith({ diff --git a/src/m365/cli/commands/cli-doctor.ts b/src/m365/cli/commands/cli-doctor.ts index 534d9f47736..907476a79b3 100644 --- a/src/m365/cli/commands/cli-doctor.ts +++ b/src/m365/cli/commands/cli-doctor.ts @@ -1,6 +1,6 @@ import os from 'os'; import auth, { AuthType } from '../../../Auth.js'; -import { Cli } from '../../../cli/Cli.js'; +import { cli } from '../../../cli/cli.js'; import { Logger } from '../../../cli/Logger.js'; import Command from '../../../Command.js'; import { app } from '../../../utils/app.js'; @@ -59,7 +59,7 @@ class CliDoctorCommand extends Command { cliAadAppTenant: validation.isValidGuid(auth.service.tenant) ? 'single' : auth.service.tenant, authMode: AuthType[auth.service.authType], cliEnvironment: process.env.CLIMICROSOFT365_ENV ? process.env.CLIMICROSOFT365_ENV : '', - cliConfig: Cli.getInstance().config.all, + cliConfig: cli.getConfig().all, roles: roles, scopes: Object.fromEntries(scopes) }; diff --git a/src/m365/cli/commands/cli-issue.spec.ts b/src/m365/cli/commands/cli-issue.spec.ts index 990ebd58462..7bfebbfbd2a 100644 --- a/src/m365/cli/commands/cli-issue.spec.ts +++ b/src/m365/cli/commands/cli-issue.spec.ts @@ -1,6 +1,6 @@ import assert from 'assert'; import sinon from 'sinon'; -import { Cli } from '../../../cli/Cli.js'; +import { cli } from '../../../cli/cli.js'; import { CommandInfo } from '../../../cli/CommandInfo.js'; import { Logger } from '../../../cli/Logger.js'; import { telemetry } from '../../../telemetry.js'; @@ -22,7 +22,7 @@ describe(commands.ISSUE, () => { sinon.stub(pid, 'getProcessName').callsFake(() => ''); sinon.stub(session, 'getId').callsFake(() => ''); (command as any).open = () => { }; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/cli/commands/cli-reconsent.spec.ts b/src/m365/cli/commands/cli-reconsent.spec.ts index 8f707306358..6e38a60be8a 100644 --- a/src/m365/cli/commands/cli-reconsent.spec.ts +++ b/src/m365/cli/commands/cli-reconsent.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import { CommandError } from '../../../Command.js'; -import { Cli } from '../../../cli/Cli.js'; +import { cli } from '../../../cli/cli.js'; import { Logger } from '../../../cli/Logger.js'; import { telemetry } from '../../../telemetry.js'; import { browserUtil } from '../../../utils/browserUtil.js'; @@ -13,7 +13,6 @@ import command from './cli-reconsent.js'; describe(commands.RECONSENT, () => { let log: string[]; let logger: Logger; - let cli: Cli; let getSettingWithDefaultValueStub: sinon.SinonStub; let loggerLogSpy: sinon.SinonSpy; let openStub: sinon.SinonStub; @@ -26,7 +25,6 @@ describe(commands.RECONSENT, () => { beforeEach(() => { log = []; - cli = Cli.getInstance(); logger = { log: async (msg: string) => { log.push(msg); diff --git a/src/m365/cli/commands/cli-reconsent.ts b/src/m365/cli/commands/cli-reconsent.ts index cee543a3662..057a856d323 100644 --- a/src/m365/cli/commands/cli-reconsent.ts +++ b/src/m365/cli/commands/cli-reconsent.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../cli/Cli.js'; +import { cli } from '../../../cli/cli.js'; import { Logger } from '../../../cli/Logger.js'; import config from '../../../config.js'; import { settingsNames } from '../../../settingsNames.js'; @@ -19,7 +19,7 @@ class CliReconsentCommand extends AnonymousCommand { public async commandAction(logger: Logger): Promise { const url = `https://login.microsoftonline.com/${config.tenant}/oauth2/authorize?client_id=${config.cliAadAppId}&response_type=code&prompt=admin_consent`; - if (Cli.getInstance().getSettingWithDefaultValue(settingsNames.autoOpenLinksInBrowser, false) === false) { + if (cli.getSettingWithDefaultValue(settingsNames.autoOpenLinksInBrowser, false) === false) { await logger.log(`To re-consent the PnP Microsoft 365 Management Shell Azure AD application navigate in your web browser to ${url}`); return; } diff --git a/src/m365/cli/commands/config/config-get.spec.ts b/src/m365/cli/commands/config/config-get.spec.ts index 088d97ae44d..408ac354598 100644 --- a/src/m365/cli/commands/config/config-get.spec.ts +++ b/src/m365/cli/commands/config/config-get.spec.ts @@ -1,6 +1,6 @@ import assert from 'assert'; import sinon from 'sinon'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { settingsNames } from '../../../../settingsNames.js'; @@ -18,7 +18,7 @@ describe(commands.CONFIG_GET, () => { let commandInfo: CommandInfo; before(() => { - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); sinon.stub(telemetry, 'trackEvent').callsFake(() => { }); sinon.stub(pid, 'getProcessName').callsFake(() => ''); sinon.stub(session, 'getId').callsFake(() => ''); @@ -41,7 +41,7 @@ describe(commands.CONFIG_GET, () => { }); afterEach(() => { - sinonUtil.restore(Cli.getInstance().config.get); + sinonUtil.restore(cli.getConfig().get); }); after(() => { @@ -57,14 +57,14 @@ describe(commands.CONFIG_GET, () => { }); it(`gets value of the specified property`, async () => { - const config = Cli.getInstance().config; + const config = cli.getConfig(); sinon.stub(config, 'get').callsFake(_ => 'json'); await command.action(logger, { options: { key: settingsNames.output } }); assert(loggerSpy.calledWith('json')); }); it(`returns undefined if the specified setting is not configured`, async () => { - const config = Cli.getInstance().config; + const config = cli.getConfig(); sinon.stub(config, 'get').callsFake(_ => undefined); await command.action(logger, { options: { key: settingsNames.output } }); assert(loggerSpy.calledWith(undefined)); diff --git a/src/m365/cli/commands/config/config-get.ts b/src/m365/cli/commands/config/config-get.ts index f6f91c419fa..8a965d952f5 100644 --- a/src/m365/cli/commands/config/config-get.ts +++ b/src/m365/cli/commands/config/config-get.ts @@ -1,4 +1,4 @@ -import { Cli } from "../../../../cli/Cli.js"; +import { cli } from "../../../../cli/cli.js"; import { Logger } from "../../../../cli/Logger.js"; import GlobalOptions from "../../../../GlobalOptions.js"; import { settingsNames } from "../../../../settingsNames.js"; @@ -62,7 +62,7 @@ class CliConfigGetCommand extends AnonymousCommand { } public async commandAction(logger: Logger, args: CommandArgs): Promise { - await logger.log(Cli.getInstance().config.get(args.options.key)); + await logger.log(cli.getConfig().get(args.options.key)); } } diff --git a/src/m365/cli/commands/config/config-list.spec.ts b/src/m365/cli/commands/config/config-list.spec.ts index 941a45c66f2..a9b030d4396 100644 --- a/src/m365/cli/commands/config/config-list.spec.ts +++ b/src/m365/cli/commands/config/config-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import { telemetry } from '../../../../telemetry.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import { pid } from '../../../../utils/pid.js'; import { session } from '../../../../utils/session.js'; @@ -37,7 +37,7 @@ describe(commands.CONFIG_LIST, () => { }); afterEach(() => { - sinonUtil.restore(Cli.getInstance().config.all); + sinonUtil.restore(cli.getConfig().all); }); after(() => { @@ -53,7 +53,7 @@ describe(commands.CONFIG_LIST, () => { }); it('returns a list of all the self set properties', async () => { - const config = Cli.getInstance().config; + const config = cli.getConfig(); sinon.stub(config, 'all').value({ 'errorOutput': 'stdout' }); await command.action(logger, { options: {} }); diff --git a/src/m365/cli/commands/config/config-list.ts b/src/m365/cli/commands/config/config-list.ts index 204c4da45a1..e40e673c428 100644 --- a/src/m365/cli/commands/config/config-list.ts +++ b/src/m365/cli/commands/config/config-list.ts @@ -1,4 +1,4 @@ -import { Cli } from "../../../../cli/Cli.js"; +import { cli } from "../../../../cli/cli.js"; import { Logger } from "../../../../cli/Logger.js"; import AnonymousCommand from "../../../base/AnonymousCommand.js"; import commands from "../../commands.js"; @@ -13,7 +13,7 @@ class CliConfigListCommand extends AnonymousCommand { } public async commandAction(logger: Logger): Promise { - await logger.log(Cli.getInstance().config.all); + await logger.log(cli.getConfig().all); } } diff --git a/src/m365/cli/commands/config/config-reset.spec.ts b/src/m365/cli/commands/config/config-reset.spec.ts index 0378a822532..2795837dca5 100644 --- a/src/m365/cli/commands/config/config-reset.spec.ts +++ b/src/m365/cli/commands/config/config-reset.spec.ts @@ -1,6 +1,6 @@ import assert from 'assert'; import sinon from 'sinon'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { settingsNames } from '../../../../settingsNames.js'; @@ -16,7 +16,7 @@ describe(commands.CONFIG_RESET, () => { let commandInfo: CommandInfo; before(() => { - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); sinon.stub(telemetry, 'trackEvent').callsFake(() => { }); sinon.stub(pid, 'getProcessName').callsFake(() => ''); sinon.stub(session, 'getId').callsFake(() => ''); @@ -51,7 +51,7 @@ describe(commands.CONFIG_RESET, () => { it('resets a specific configuration option to its default value', async () => { const output = undefined; - const config = Cli.getInstance().config; + const config = cli.getConfig(); let actualKey: string = '', actualValue: any; @@ -66,7 +66,7 @@ describe(commands.CONFIG_RESET, () => { }); it('resets all configuration settings to default', async () => { - const config = Cli.getInstance().config; + const config = cli.getConfig(); let errorOutputKey: string = '', errorOutputValue: any , outputKey: string = '', outputValue: any , printErrorsAsPlainTextKey: string = '', printErrorsAsPlainTextValue: any diff --git a/src/m365/cli/commands/config/config-reset.ts b/src/m365/cli/commands/config/config-reset.ts index 9d4574fb97f..86ec941109c 100644 --- a/src/m365/cli/commands/config/config-reset.ts +++ b/src/m365/cli/commands/config/config-reset.ts @@ -1,4 +1,4 @@ -import { Cli } from "../../../../cli/Cli.js"; +import { cli } from "../../../../cli/cli.js"; import { Logger } from "../../../../cli/Logger.js"; import GlobalOptions from "../../../../GlobalOptions.js"; import { settingsNames } from "../../../../settingsNames.js"; @@ -65,10 +65,10 @@ class CliConfigResetCommand extends AnonymousCommand { public async commandAction(logger: Logger, args: CommandArgs): Promise { if (args.options.key) { - Cli.getInstance().config.delete(args.options.key); + cli.getConfig().delete(args.options.key); } else { - Cli.getInstance().config.clear(); + cli.getConfig().clear(); } } } diff --git a/src/m365/cli/commands/config/config-set.spec.ts b/src/m365/cli/commands/config/config-set.spec.ts index 499b7a2807e..71372609dcb 100644 --- a/src/m365/cli/commands/config/config-set.spec.ts +++ b/src/m365/cli/commands/config/config-set.spec.ts @@ -1,6 +1,6 @@ import assert from 'assert'; import sinon from 'sinon'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { settingsNames } from '../../../../settingsNames.js'; @@ -17,7 +17,7 @@ describe(commands.CONFIG_SET, () => { let commandInfo: CommandInfo; before(() => { - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); sinon.stub(telemetry, 'trackEvent').callsFake(() => { }); sinon.stub(pid, 'getProcessName').callsFake(() => ''); sinon.stub(session, 'getId').callsFake(() => ''); @@ -39,7 +39,7 @@ describe(commands.CONFIG_SET, () => { }); afterEach(() => { - sinonUtil.restore(Cli.getInstance().config.set); + sinonUtil.restore(cli.getConfig().set); }); after(() => { @@ -55,7 +55,7 @@ describe(commands.CONFIG_SET, () => { }); it(`sets ${settingsNames.showHelpOnFailure} property`, async () => { - const config = Cli.getInstance().config; + const config = cli.getConfig(); let actualKey: string = '', actualValue: any; sinon.stub(config, 'set').callsFake(((key: string, value: any) => { actualKey = key; @@ -67,7 +67,7 @@ describe(commands.CONFIG_SET, () => { }); it(`sets ${settingsNames.autoOpenLinksInBrowser} property`, async () => { - const config = Cli.getInstance().config; + const config = cli.getConfig(); let actualKey: string = '', actualValue: any; sinon.stub(config, 'set').callsFake(((key: string, value: any) => { actualKey = key; @@ -80,7 +80,7 @@ describe(commands.CONFIG_SET, () => { it(`sets ${settingsNames.output} property to 'text'`, async () => { const output = "text"; - const config = Cli.getInstance().config; + const config = cli.getConfig(); let actualKey: string = '', actualValue: any; sinon.stub(config, 'set').callsFake(((key: string, value: any) => { actualKey = key; @@ -94,7 +94,7 @@ describe(commands.CONFIG_SET, () => { it(`sets ${settingsNames.output} property to 'json'`, async () => { const output = "json"; - const config = Cli.getInstance().config; + const config = cli.getConfig(); let actualKey: string = '', actualValue: any; sinon.stub(config, 'set').callsFake(((key: string, value: any) => { actualKey = key; @@ -108,7 +108,7 @@ describe(commands.CONFIG_SET, () => { it(`sets ${settingsNames.output} property to 'csv'`, async () => { const output = "csv"; - const config = Cli.getInstance().config; + const config = cli.getConfig(); let actualKey: string = '', actualValue: any; sinon.stub(config, 'set').callsFake(((key: string, value: any) => { actualKey = key; @@ -121,7 +121,7 @@ describe(commands.CONFIG_SET, () => { }); it(`sets ${settingsNames.csvHeader} property`, async () => { - const config = Cli.getInstance().config; + const config = cli.getConfig(); let actualKey: string = '', actualValue: any; sinon.stub(config, 'set').callsFake(((key: string, value: any) => { actualKey = key; @@ -133,7 +133,7 @@ describe(commands.CONFIG_SET, () => { }); it(`sets ${settingsNames.csvQuoted} property`, async () => { - const config = Cli.getInstance().config; + const config = cli.getConfig(); let actualKey: string = '', actualValue: any; sinon.stub(config, 'set').callsFake(((key: string, value: any) => { actualKey = key; @@ -145,7 +145,7 @@ describe(commands.CONFIG_SET, () => { }); it(`sets ${settingsNames.csvQuotedEmpty} property`, async () => { - const config = Cli.getInstance().config; + const config = cli.getConfig(); let actualKey: string = '', actualValue: any; sinon.stub(config, 'set').callsFake(((key: string, value: any) => { actualKey = key; @@ -157,7 +157,7 @@ describe(commands.CONFIG_SET, () => { }); it(`sets ${settingsNames.prompt} property`, async () => { - const config = Cli.getInstance().config; + const config = cli.getConfig(); let actualKey: string = '', actualValue: any; sinon.stub(config, 'set').callsFake(((key: string, value: any) => { actualKey = key; @@ -169,7 +169,7 @@ describe(commands.CONFIG_SET, () => { }); it(`sets ${settingsNames.authType} property`, async () => { - const config = Cli.getInstance().config; + const config = cli.getConfig(); let actualKey: string = '', actualValue: any; sinon.stub(config, 'set').callsFake(((key: string, value: any) => { actualKey = key; @@ -181,7 +181,7 @@ describe(commands.CONFIG_SET, () => { }); it(`sets ${settingsNames.promptListPageSize} property`, async () => { - const config = Cli.getInstance().config; + const config = cli.getConfig(); let actualKey: string = '', actualValue: any; sinon.stub(config, 'set').callsFake(((key: string, value: any) => { actualKey = key; diff --git a/src/m365/cli/commands/config/config-set.ts b/src/m365/cli/commands/config/config-set.ts index 1dc13f9da1c..e103313fea7 100644 --- a/src/m365/cli/commands/config/config-set.ts +++ b/src/m365/cli/commands/config/config-set.ts @@ -1,4 +1,4 @@ -import { Cli } from "../../../../cli/Cli.js"; +import { cli } from "../../../../cli/cli.js"; import { Logger } from "../../../../cli/Logger.js"; import GlobalOptions from "../../../../GlobalOptions.js"; import { settingsNames } from "../../../../settingsNames.js"; @@ -81,8 +81,8 @@ class CliConfigSetCommand extends AnonymousCommand { } if (args.options.key === settingsNames.helpMode && - Cli.helpModes.indexOf(args.options.value) === -1) { - return `${args.options.value} is not a valid value for the option ${args.options.key}. Allowed values: ${Cli.helpModes.join(', ')}`; + cli.helpModes.indexOf(args.options.value) === -1) { + return `${args.options.value} is not a valid value for the option ${args.options.key}. Allowed values: ${cli.helpModes.join(', ')}`; } const allowedAuthTypes = ['certificate', 'deviceCode', 'password', 'identity', 'browser', 'secret']; @@ -117,7 +117,7 @@ class CliConfigSetCommand extends AnonymousCommand { break; } - Cli.getInstance().config.set(args.options.key, value); + cli.getConfig().set(args.options.key, value); } } diff --git a/src/m365/commands/docs.spec.ts b/src/m365/commands/docs.spec.ts index 43084b0b599..5ae4c1a4e22 100644 --- a/src/m365/commands/docs.spec.ts +++ b/src/m365/commands/docs.spec.ts @@ -1,6 +1,6 @@ import assert from 'assert'; import sinon from 'sinon'; -import { Cli } from '../../cli/Cli.js'; +import { cli } from '../../cli/cli.js'; import { Logger } from '../../cli/Logger.js'; import { telemetry } from '../../telemetry.js'; import { app } from '../../utils/app.js'; @@ -14,7 +14,6 @@ import command from './docs.js'; describe(commands.DOCS, () => { let log: any[]; let logger: Logger; - let cli: Cli; let loggerLogSpy: sinon.SinonSpy; let getSettingWithDefaultValueStub: sinon.SinonStub; @@ -26,7 +25,6 @@ describe(commands.DOCS, () => { beforeEach(() => { log = []; - cli = Cli.getInstance(); logger = { log: async (msg: string) => { log.push(msg); diff --git a/src/m365/commands/docs.ts b/src/m365/commands/docs.ts index 0f2d225e0c1..ab54a58f004 100644 --- a/src/m365/commands/docs.ts +++ b/src/m365/commands/docs.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../cli/Cli.js'; +import { cli } from '../../cli/cli.js'; import { Logger } from '../../cli/Logger.js'; import { settingsNames } from '../../settingsNames.js'; import { app } from '../../utils/app.js'; @@ -18,7 +18,7 @@ class DocsCommand extends AnonymousCommand { public async commandAction(logger: Logger): Promise { await logger.log(app.packageJson().homepage); - if (Cli.getInstance().getSettingWithDefaultValue(settingsNames.autoOpenLinksInBrowser, false) === false) { + if (cli.getSettingWithDefaultValue(settingsNames.autoOpenLinksInBrowser, false) === false) { return; } diff --git a/src/m365/commands/login.spec.ts b/src/m365/commands/login.spec.ts index 7f398ad732c..6822ad28ce8 100644 --- a/src/m365/commands/login.spec.ts +++ b/src/m365/commands/login.spec.ts @@ -3,7 +3,7 @@ import fs from 'fs'; import sinon from 'sinon'; import auth, { AuthType, CloudType } from '../../Auth.js'; import { CommandArgs, CommandError } from '../../Command.js'; -import { Cli } from '../../cli/Cli.js'; +import { cli } from '../../cli/cli.js'; import { CommandInfo } from '../../cli/CommandInfo.js'; import { Logger } from '../../cli/Logger.js'; import { telemetry } from '../../telemetry.js'; @@ -25,7 +25,7 @@ describe(commands.LOGIN, () => { sinon.stub(telemetry, 'trackEvent').callsFake(() => { }); sinon.stub(pid, 'getProcessName').callsFake(() => ''); sinon.stub(session, 'getId').callsFake(() => ''); - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/commands/login.ts b/src/m365/commands/login.ts index f21c773fc1f..ba28d666441 100644 --- a/src/m365/commands/login.ts +++ b/src/m365/commands/login.ts @@ -10,7 +10,7 @@ import { accessToken } from '../../utils/accessToken.js'; import { misc } from '../../utils/misc.js'; import commands from './commands.js'; import { settingsNames } from '../../settingsNames.js'; -import { Cli } from '../../cli/Cli.js'; +import { cli } from '../../cli/cli.js'; interface CommandArgs { options: Options; @@ -51,7 +51,7 @@ class LoginCommand extends Command { #initTelemetry(): void { this.telemetry.push((args: CommandArgs) => { Object.assign(this.telemetryProperties, { - authType: args.options.authType || Cli.getInstance().getSettingWithDefaultValue(settingsNames.authType, 'deviceCode'), + authType: args.options.authType || cli.getSettingWithDefaultValue(settingsNames.authType, 'deviceCode'), cloud: args.options.cloud ?? CloudType.Public }); }); @@ -97,7 +97,7 @@ class LoginCommand extends Command { #initValidators(): void { this.validators.push( async (args: CommandArgs) => { - const authType = args.options.authType || Cli.getInstance().getSettingWithDefaultValue(settingsNames.authType, 'deviceCode'); + const authType = args.options.authType || cli.getSettingWithDefaultValue(settingsNames.authType, 'deviceCode'); if (authType === 'password') { if (!args.options.userName) { @@ -159,7 +159,7 @@ class LoginCommand extends Command { await logger.logToStderr(`Signing in to Microsoft 365...`); } - const authType = args.options.authType || Cli.getInstance().getSettingWithDefaultValue(settingsNames.authType, 'deviceCode'); + const authType = args.options.authType || cli.getSettingWithDefaultValue(settingsNames.authType, 'deviceCode'); auth.service.appId = args.options.appId || config.cliAadAppId; auth.service.tenant = args.options.tenant || config.tenant; diff --git a/src/m365/commands/request.spec.ts b/src/m365/commands/request.spec.ts index ef6a58ca089..a03b9d118fc 100644 --- a/src/m365/commands/request.spec.ts +++ b/src/m365/commands/request.spec.ts @@ -3,7 +3,7 @@ import fs from 'fs'; import sinon from 'sinon'; import { PassThrough } from 'stream'; import auth from '../../Auth.js'; -import { Cli } from '../../cli/Cli.js'; +import { cli } from '../../cli/cli.js'; import { CommandInfo } from '../../cli/CommandInfo.js'; import { Logger } from '../../cli/Logger.js'; import { CommandError } from '../../Command.js'; @@ -50,7 +50,7 @@ describe(commands.REQUEST, () => { sinon.stub(session, 'getId').callsFake(() => ''); auth.service.connected = true; sinon.stub(auth, 'ensureAccessToken').callsFake(() => Promise.resolve('ABC')); - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/commands/setup.spec.ts b/src/m365/commands/setup.spec.ts index 0a9b1cd4893..9640853cf9f 100644 --- a/src/m365/commands/setup.spec.ts +++ b/src/m365/commands/setup.spec.ts @@ -1,6 +1,6 @@ import assert from 'assert'; import sinon from 'sinon'; -import { Cli } from '../../cli/Cli.js'; +import { cli } from '../../cli/cli.js'; import { CommandInfo } from '../../cli/CommandInfo.js'; import { Logger } from '../../cli/Logger.js'; import { telemetry } from '../../telemetry.js'; @@ -23,7 +23,7 @@ describe(commands.SETUP, () => { sinon.stub(telemetry, 'trackEvent').callsFake(() => { }); sinon.stub(pid, 'getProcessName').callsFake(() => ''); sinon.stub(session, 'getId').callsFake(() => ''); - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -46,9 +46,9 @@ describe(commands.SETUP, () => { afterEach(() => { sinonUtil.restore([ (command as any).configureSettings, - Cli.promptForConfirmation, - Cli.promptForSelection, - Cli.getInstance().config.set, + cli.promptForConfirmation, + cli.promptForSelection, + cli.getConfig().set, pid.isPowerShell ]); }); @@ -70,7 +70,7 @@ describe(commands.SETUP, () => { }); it('sets correct settings for interactive, beginner', async () => { - sinon.stub(Cli, 'promptForSelection').callsFake(async (config: SelectionConfig): Promise => { + sinon.stub(cli, 'promptForSelection').callsFake(async (config: SelectionConfig): Promise => { switch (config.message) { case 'How do you plan to use the CLI?': return 'Interactively'; @@ -80,7 +80,7 @@ describe(commands.SETUP, () => { return ''; } }); - sinon.stub(Cli, 'promptForConfirmation').callsFake(async (config: ConfirmationConfig): Promise => { + sinon.stub(cli, 'promptForConfirmation').callsFake(async (config: ConfirmationConfig): Promise => { switch (config.message) { case 'Are you going to use the CLI in PowerShell?': return true; @@ -102,7 +102,7 @@ describe(commands.SETUP, () => { }); it('sets correct settings for interactive, proficient', async () => { - sinon.stub(Cli, 'promptForSelection').callsFake(async (config: SelectionConfig): Promise => { + sinon.stub(cli, 'promptForSelection').callsFake(async (config: SelectionConfig): Promise => { switch (config.message) { case 'How do you plan to use the CLI?': return 'Interactively'; @@ -112,7 +112,7 @@ describe(commands.SETUP, () => { return ''; } }); - sinon.stub(Cli, 'promptForConfirmation').callsFake(async (config: ConfirmationConfig): Promise => { + sinon.stub(cli, 'promptForConfirmation').callsFake(async (config: ConfirmationConfig): Promise => { switch (config.message) { case 'Are you going to use the CLI in PowerShell?': return true; @@ -133,7 +133,7 @@ describe(commands.SETUP, () => { }); it('sets correct settings for scripting, non-PowerShell, beginner', async () => { - sinon.stub(Cli, 'promptForSelection').callsFake(async (config: SelectionConfig): Promise => { + sinon.stub(cli, 'promptForSelection').callsFake(async (config: SelectionConfig): Promise => { switch (config.message) { case 'How do you plan to use the CLI?': return 'Scripting'; @@ -143,7 +143,7 @@ describe(commands.SETUP, () => { return ''; } }); - sinon.stub(Cli, 'promptForConfirmation').callsFake(async (config: ConfirmationConfig): Promise => { + sinon.stub(cli, 'promptForConfirmation').callsFake(async (config: ConfirmationConfig): Promise => { switch (config.message) { case 'Are you going to use the CLI in PowerShell?': return false; @@ -164,7 +164,7 @@ describe(commands.SETUP, () => { }); it('sets correct settings for scripting, PowerShell, beginner', async () => { - sinon.stub(Cli, 'promptForSelection').callsFake(async (config: SelectionConfig): Promise => { + sinon.stub(cli, 'promptForSelection').callsFake(async (config: SelectionConfig): Promise => { switch (config.message) { case 'How do you plan to use the CLI?': return 'Scripting'; @@ -174,7 +174,7 @@ describe(commands.SETUP, () => { return ''; } }); - sinon.stub(Cli, 'promptForConfirmation').callsFake(async (config: ConfirmationConfig): Promise => { + sinon.stub(cli, 'promptForConfirmation').callsFake(async (config: ConfirmationConfig): Promise => { switch (config.message) { case 'Are you going to use the CLI in PowerShell?': return true; @@ -196,7 +196,7 @@ describe(commands.SETUP, () => { }); it('sets correct settings for scripting, non-PowerShell, proficient', async () => { - sinon.stub(Cli, 'promptForSelection').callsFake(async (config: SelectionConfig): Promise => { + sinon.stub(cli, 'promptForSelection').callsFake(async (config: SelectionConfig): Promise => { switch (config.message) { case 'How do you plan to use the CLI?': return 'Scripting'; @@ -206,7 +206,7 @@ describe(commands.SETUP, () => { return ''; } }); - sinon.stub(Cli, 'promptForConfirmation').callsFake(async (config: ConfirmationConfig): Promise => { + sinon.stub(cli, 'promptForConfirmation').callsFake(async (config: ConfirmationConfig): Promise => { switch (config.message) { case 'Are you going to use the CLI in PowerShell?': return false; @@ -227,7 +227,7 @@ describe(commands.SETUP, () => { }); it('sets correct settings for scripting, PowerShell, proficient', async () => { - sinon.stub(Cli, 'promptForSelection').callsFake(async (config: SelectionConfig): Promise => { + sinon.stub(cli, 'promptForSelection').callsFake(async (config: SelectionConfig): Promise => { switch (config.message) { case 'How do you plan to use the CLI?': return 'Scripting'; @@ -237,7 +237,7 @@ describe(commands.SETUP, () => { return ''; } }); - sinon.stub(Cli, 'promptForConfirmation').callsFake(async (config: ConfirmationConfig): Promise => { + sinon.stub(cli, 'promptForConfirmation').callsFake(async (config: ConfirmationConfig): Promise => { switch (config.message) { case 'Are you going to use the CLI in PowerShell?': return true; @@ -259,7 +259,7 @@ describe(commands.SETUP, () => { }); it(`doesn't apply settings when not confirmed`, async () => { - sinon.stub(Cli, 'promptForSelection').callsFake(async (config: SelectionConfig): Promise => { + sinon.stub(cli, 'promptForSelection').callsFake(async (config: SelectionConfig): Promise => { switch (config.message) { case 'How do you plan to use the CLI?': return 'Scripting'; @@ -269,7 +269,7 @@ describe(commands.SETUP, () => { return ''; } }); - sinon.stub(Cli, 'promptForConfirmation').callsFake(async (config: ConfirmationConfig): Promise => { + sinon.stub(cli, 'promptForConfirmation').callsFake(async (config: ConfirmationConfig): Promise => { switch (config.message) { case 'Are you going to use the CLI in PowerShell?': return false; @@ -337,7 +337,7 @@ describe(commands.SETUP, () => { }); it('outputs settings to configure to console in debug mode', async () => { - sinon.stub(Cli, 'promptForSelection').callsFake(async (config: SelectionConfig): Promise => { + sinon.stub(cli, 'promptForSelection').callsFake(async (config: SelectionConfig): Promise => { switch (config.message) { case 'How do you plan to use the CLI?': return 'Interactively'; @@ -347,7 +347,7 @@ describe(commands.SETUP, () => { return ''; } }); - sinon.stub(Cli, 'promptForConfirmation').callsFake(async (config: ConfirmationConfig): Promise => { + sinon.stub(cli, 'promptForConfirmation').callsFake(async (config: ConfirmationConfig): Promise => { switch (config.message) { case 'Are you going to use the CLI in PowerShell?': return false; @@ -355,7 +355,7 @@ describe(commands.SETUP, () => { return true; } }); - sinon.stub(Cli.getInstance().config, 'set').callsFake(() => { }); + sinon.stub(cli.getConfig(), 'set').callsFake(() => { }); const expected: SettingNames = {}; Object.assign(expected, interactivePreset); @@ -368,7 +368,7 @@ describe(commands.SETUP, () => { }); it('logs configured settings when used interactively', async () => { - sinon.stub(Cli, 'promptForSelection').callsFake(async (config: SelectionConfig): Promise => { + sinon.stub(cli, 'promptForSelection').callsFake(async (config: SelectionConfig): Promise => { switch (config.message) { case 'How do you plan to use the CLI?': return 'Interactively'; @@ -378,7 +378,7 @@ describe(commands.SETUP, () => { return ''; } }); - sinon.stub(Cli, 'promptForConfirmation').callsFake(async (config: ConfirmationConfig): Promise => { + sinon.stub(cli, 'promptForConfirmation').callsFake(async (config: ConfirmationConfig): Promise => { switch (config.message) { case 'Are you going to use the CLI in PowerShell?': return false; @@ -386,7 +386,7 @@ describe(commands.SETUP, () => { return true; } }); - sinon.stub(Cli.getInstance().config, 'set').callsFake(() => { }); + sinon.stub(cli.getConfig(), 'set').callsFake(() => { }); const expected: SettingNames = {}; Object.assign(expected, interactivePreset); diff --git a/src/m365/commands/setup.ts b/src/m365/commands/setup.ts index 9a941ee58bc..b77a5fa28b1 100644 --- a/src/m365/commands/setup.ts +++ b/src/m365/commands/setup.ts @@ -1,6 +1,6 @@ import chalk from 'chalk'; import os from 'os'; -import { Cli } from '../../cli/Cli.js'; +import { cli } from '../../cli/cli.js'; import { Logger } from '../../cli/Logger.js'; import GlobalOptions from '../../GlobalOptions.js'; import { settingsNames } from '../../settingsNames.js'; @@ -100,7 +100,7 @@ class SetupCommand extends AnonymousCommand { } // stop the spinner. Fixes #5598 - Cli.getInstance().spinner.stop(); + cli.spinner.stop(); await logger.logToStderr(`Welcome to the CLI for Microsoft 365 setup!`); await logger.logToStderr(`This command will guide you through the process of configuring the CLI for your needs.`); @@ -116,14 +116,14 @@ class SetupCommand extends AnonymousCommand { { name: 'Scripting', value: 'Scripting' } ] }; - preferences.usageMode = await Cli.promptForSelection(usageModeConfig); + preferences.usageMode = await cli.promptForSelection(usageModeConfig); if (preferences.usageMode === 'Scripting') { const usedInPowerShellConfig: ConfirmationConfig = { message: 'Are you going to use the CLI in PowerShell?', default: pid.isPowerShell() }; - preferences.usedInPowerShell = await Cli.promptForConfirmation(usedInPowerShellConfig); + preferences.usedInPowerShell = await cli.promptForConfirmation(usedInPowerShellConfig); } const experienceConfig: SelectionConfig = { @@ -133,7 +133,7 @@ class SetupCommand extends AnonymousCommand { { name: 'Proficient', value: 'Proficient' } ] }; - preferences.experience = await Cli.promptForSelection(experienceConfig); + preferences.experience = await cli.promptForSelection(experienceConfig); const summaryConfig: ConfirmationConfig = { // invoked by inquirer @@ -145,7 +145,7 @@ class SetupCommand extends AnonymousCommand { return this.getSummaryMessage(settings); } }; - preferences.summary = await Cli.promptForConfirmation(summaryConfig); + preferences.summary = await cli.promptForConfirmation(summaryConfig); if (preferences.summary) { // used only for testing. Normally, we'd get the settings from the answers @@ -159,7 +159,7 @@ class SetupCommand extends AnonymousCommand { await logger.logToStderr(''); // start the spinner. Fixes #5598 - Cli.getInstance().spinner.start(); + cli.spinner.start(); await this.configureSettings(settings, false, logger); @@ -215,7 +215,7 @@ class SetupCommand extends AnonymousCommand { } for (const [key, value] of Object.entries(settings)) { - Cli.getInstance().config.set(key, value); + cli.getConfig().set(key, value); if (!silent) { await logger.logToStderr(formatting.getStatus(CheckStatus.Success, `${key}: ${value}`)); diff --git a/src/m365/context/commands/context-remove.spec.ts b/src/m365/context/commands/context-remove.spec.ts index 9ee745aed4d..99368d51136 100644 --- a/src/m365/context/commands/context-remove.spec.ts +++ b/src/m365/context/commands/context-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import fs from 'fs'; import sinon from 'sinon'; -import { Cli } from '../../../cli/Cli.js'; +import { cli } from '../../../cli/cli.js'; import { Logger } from '../../../cli/Logger.js'; import { CommandError } from '../../../Command.js'; import { telemetry } from '../../../telemetry.js'; @@ -31,7 +31,7 @@ describe(commands.REMOVE, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -45,7 +45,7 @@ describe(commands.REMOVE, () => { fs.readFileSync, fs.writeFileSync, fs.unlinkSync, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -86,8 +86,8 @@ describe(commands.REMOVE, () => { let fileContents: string | undefined; let filePath: string | undefined; - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); sinon.stub(fs, 'existsSync').callsFake(_ => true); sinon.stub(fs, 'readFileSync').callsFake(_ => JSON.stringify({ diff --git a/src/m365/context/commands/context-remove.ts b/src/m365/context/commands/context-remove.ts index 208b10d2527..aa091608420 100644 --- a/src/m365/context/commands/context-remove.ts +++ b/src/m365/context/commands/context-remove.ts @@ -1,5 +1,5 @@ import fs from 'fs'; -import { Cli } from '../../../cli/Cli.js'; +import { cli } from '../../../cli/cli.js'; import { Logger } from '../../../cli/Logger.js'; import { CommandError } from '../../../Command.js'; import GlobalOptions from '../../../GlobalOptions.js'; @@ -52,7 +52,7 @@ class ContextRemoveCommand extends AnonymousCommand { await this.removeContext(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the context?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the context?` }); if (result) { await this.removeContext(); diff --git a/src/m365/context/commands/option/option-remove.spec.ts b/src/m365/context/commands/option/option-remove.spec.ts index dbb5ecf667f..62c51ffad75 100644 --- a/src/m365/context/commands/option/option-remove.spec.ts +++ b/src/m365/context/commands/option/option-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import fs from 'fs'; import sinon from 'sinon'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; import { telemetry } from '../../../../telemetry.js'; @@ -31,7 +31,7 @@ describe(commands.OPTION_REMOVE, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -44,7 +44,7 @@ describe(commands.OPTION_REMOVE, () => { fs.existsSync, fs.readFileSync, fs.writeFileSync, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -96,8 +96,8 @@ describe(commands.OPTION_REMOVE, () => { }); it(`removes a context info option from the existing .m365rc.json file`, async () => { - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); sinon.stub(fs, 'existsSync').callsFake(_ => true); sinon.stub(fs, 'readFileSync').callsFake(_ => JSON.stringify({ diff --git a/src/m365/context/commands/option/option-remove.ts b/src/m365/context/commands/option/option-remove.ts index d612cf1c434..24cabf3cedd 100644 --- a/src/m365/context/commands/option/option-remove.ts +++ b/src/m365/context/commands/option/option-remove.ts @@ -1,5 +1,5 @@ import fs from 'fs'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; import GlobalOptions from '../../../../GlobalOptions.js'; @@ -60,7 +60,7 @@ class ContextOptionRemoveCommand extends ContextCommand { await this.removeContextOption(args.options.name, logger); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the context option ${args.options.name}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the context option ${args.options.name}?` }); if (result) { await this.removeContextOption(args.options.name, logger); diff --git a/src/m365/external/commands/connection/connection-add.spec.ts b/src/m365/external/commands/connection/connection-add.spec.ts index 7eba05c7819..4e85c129907 100644 --- a/src/m365/external/commands/connection/connection-add.spec.ts +++ b/src/m365/external/commands/connection/connection-add.spec.ts @@ -2,7 +2,7 @@ import { ExternalConnectors } from '@microsoft/microsoft-graph-types'; import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -47,7 +47,7 @@ describe(commands.CONNECTION_ADD, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/external/commands/connection/connection-doctor.spec.ts b/src/m365/external/commands/connection/connection-doctor.spec.ts index fc34d1a9395..312254bef10 100644 --- a/src/m365/external/commands/connection/connection-doctor.spec.ts +++ b/src/m365/external/commands/connection/connection-doctor.spec.ts @@ -2,7 +2,7 @@ import { ExternalConnectors, SearchResponse } from '@microsoft/microsoft-graph-t import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -235,7 +235,7 @@ describe(commands.CONNECTION_DOCTOR, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); loggerLogSpy = sinon.spy(logger, 'log'); }); diff --git a/src/m365/external/commands/connection/connection-doctor.ts b/src/m365/external/commands/connection/connection-doctor.ts index 4374ba6945f..eca9f982e84 100644 --- a/src/m365/external/commands/connection/connection-doctor.ts +++ b/src/m365/external/commands/connection/connection-doctor.ts @@ -2,7 +2,7 @@ import { ExternalConnectors, SearchResponse } from '@microsoft/microsoft-graph-t import os from 'os'; import Command from '../../../../Command.js'; import GlobalOptions from '../../../../GlobalOptions.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import request, { CliRequestOptions } from '../../../../request.js'; import { settingsNames } from '../../../../settingsNames.js'; @@ -98,7 +98,6 @@ class ExternalConnectionDoctorCommand extends GraphCommand { const output = args.options.output; this.checksStatus = []; - const cli = Cli.getInstance(); const showSpinner = cli.getSettingWithDefaultValue(settingsNames.showSpinner, true) && output === 'text' && typeof global.it === 'undefined'; diff --git a/src/m365/external/commands/connection/connection-remove.spec.ts b/src/m365/external/commands/connection/connection-remove.spec.ts index d734298c267..99e943f4db2 100644 --- a/src/m365/external/commands/connection/connection-remove.spec.ts +++ b/src/m365/external/commands/connection/connection-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; import request from '../../../../request.js'; @@ -14,19 +14,17 @@ import command from './connection-remove.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.CONNECTION_REMOVE, () => { - let cli: Cli; let log: string[]; let logger: Logger; let promptIssued: boolean = false; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - sinon.stub(Cli.getInstance(), 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { + sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { if (settingName === 'prompt') { return false; } @@ -49,7 +47,7 @@ describe(commands.CONNECTION_REMOVE, () => { } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -62,7 +60,7 @@ describe(commands.CONNECTION_REMOVE, () => { request.get, request.delete, cli.getSettingWithDefaultValue, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -122,8 +120,8 @@ describe(commands.CONNECTION_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { debug: true, id: "contosohr" } }); @@ -253,7 +251,7 @@ describe(commands.CONNECTION_REMOVE, () => { throw "Invalid request"; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves({ + sinon.stub(cli, 'handleMultipleResultsFound').resolves({ "id": "contosohr" }); diff --git a/src/m365/external/commands/connection/connection-remove.ts b/src/m365/external/commands/connection/connection-remove.ts index c7f1e4d04f8..1f3fa40f6c5 100644 --- a/src/m365/external/commands/connection/connection-remove.ts +++ b/src/m365/external/commands/connection/connection-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request from '../../../../request.js'; @@ -83,7 +83,7 @@ class ExternalConnectionRemoveCommand extends GraphCommand { } const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', res.value); - const result = await Cli.handleMultipleResultsFound<{ id: string }>(`Multiple external connections with name ${args.options.name} found.`, resultAsKeyValuePair); + const result = await cli.handleMultipleResultsFound<{ id: string }>(`Multiple external connections with name ${args.options.name} found.`, resultAsKeyValuePair); return result.id; } @@ -92,7 +92,7 @@ class ExternalConnectionRemoveCommand extends GraphCommand { await this.removeExternalConnection(args); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the external connection '${args.options.id || args.options.name}'?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the external connection '${args.options.id || args.options.name}'?` }); if (result) { await this.removeExternalConnection(args); diff --git a/src/m365/external/commands/connection/connection-schema-add.spec.ts b/src/m365/external/commands/connection/connection-schema-add.spec.ts index 5ef6538fa3e..2dc79f2132c 100644 --- a/src/m365/external/commands/connection/connection-schema-add.spec.ts +++ b/src/m365/external/commands/connection/connection-schema-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -27,7 +27,7 @@ describe(commands.CONNECTION_SCHEMA_ADD, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/external/commands/item/item-add.spec.ts b/src/m365/external/commands/item/item-add.spec.ts index 4e76b7ba8a1..74f98573ede 100644 --- a/src/m365/external/commands/item/item-add.spec.ts +++ b/src/m365/external/commands/item/item-add.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -24,7 +24,7 @@ describe(commands.ITEM_ADD, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); logger = { log: async () => { }, logRaw: async () => { }, diff --git a/src/m365/file/commands/convert/convert-pdf.spec.ts b/src/m365/file/commands/convert/convert-pdf.spec.ts index 459978be29c..38d0249dcc0 100644 --- a/src/m365/file/commands/convert/convert-pdf.spec.ts +++ b/src/m365/file/commands/convert/convert-pdf.spec.ts @@ -3,7 +3,7 @@ import fs from 'fs'; import sinon from 'sinon'; import { PassThrough } from 'stream'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -31,7 +31,7 @@ describe(commands.CONVERT_PDF, () => { sinon.stub(session, 'getId').returns(''); auth.service.connected = true; unlinkSyncStub = sinon.stub(fs, 'unlinkSync').returns(); - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/file/commands/file-add.spec.ts b/src/m365/file/commands/file-add.spec.ts index 60c9aef318b..a5ee857c36d 100644 --- a/src/m365/file/commands/file-add.spec.ts +++ b/src/m365/file/commands/file-add.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import fs from 'fs'; import sinon from 'sinon'; import auth from '../../../Auth.js'; -import { Cli } from '../../../cli/Cli.js'; +import { cli } from '../../../cli/cli.js'; import { CommandInfo } from '../../../cli/CommandInfo.js'; import { Logger } from '../../../cli/Logger.js'; import { CommandError } from '../../../Command.js'; @@ -25,7 +25,7 @@ describe(commands.ADD, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/file/commands/file-list.spec.ts b/src/m365/file/commands/file-list.spec.ts index 3721d21f0ef..dd84a9bc1dd 100644 --- a/src/m365/file/commands/file-list.spec.ts +++ b/src/m365/file/commands/file-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../Auth.js'; -import { Cli } from '../../../cli/Cli.js'; +import { cli } from '../../../cli/cli.js'; import { CommandInfo } from '../../../cli/CommandInfo.js'; import { Logger } from '../../../cli/Logger.js'; import { CommandError } from '../../../Command.js'; @@ -25,7 +25,7 @@ describe(commands.LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/flow/commands/flow-export.spec.ts b/src/m365/flow/commands/flow-export.spec.ts index 726bdbb943e..4c112b8e2d0 100644 --- a/src/m365/flow/commands/flow-export.spec.ts +++ b/src/m365/flow/commands/flow-export.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import fs from 'fs'; import sinon from 'sinon'; import auth from '../../../Auth.js'; -import { Cli } from '../../../cli/Cli.js'; +import { cli } from '../../../cli/cli.js'; import { CommandInfo } from '../../../cli/CommandInfo.js'; import { Logger } from '../../../cli/Logger.js'; import { CommandError } from '../../../Command.js'; @@ -116,7 +116,7 @@ describe(commands.EXPORT, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/flow/commands/flow-list.spec.ts b/src/m365/flow/commands/flow-list.spec.ts index aa8ec93a69e..76236d2d551 100644 --- a/src/m365/flow/commands/flow-list.spec.ts +++ b/src/m365/flow/commands/flow-list.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../Auth.js'; import { CommandError } from '../../../Command.js'; -import { Cli } from '../../../cli/Cli.js'; +import { cli } from '../../../cli/cli.js'; import { CommandInfo } from '../../../cli/CommandInfo.js'; import { Logger } from '../../../cli/Logger.js'; import request from '../../../request.js'; @@ -28,7 +28,7 @@ describe(commands.LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/flow/commands/flow-remove.spec.ts b/src/m365/flow/commands/flow-remove.spec.ts index 2dd02404c13..a752012f71a 100644 --- a/src/m365/flow/commands/flow-remove.spec.ts +++ b/src/m365/flow/commands/flow-remove.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../Auth.js'; import { CommandError } from '../../../Command.js'; -import { Cli } from '../../../cli/Cli.js'; +import { cli } from '../../../cli/cli.js'; import { CommandInfo } from '../../../cli/CommandInfo.js'; import { Logger } from '../../../cli/Logger.js'; import request from '../../../request.js'; @@ -26,7 +26,7 @@ describe(commands.REMOVE, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -43,7 +43,7 @@ describe(commands.REMOVE, () => { } }; loggerLogToStderrSpy = sinon.spy(logger, 'logToStderr'); - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -54,7 +54,7 @@ describe(commands.REMOVE, () => { afterEach(() => { sinonUtil.restore([ request.delete, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -104,8 +104,8 @@ describe(commands.REMOVE, () => { it('aborts removing the specified Microsoft Flow owned by the currently signed-in user when force option not passed and prompt not confirmed', async () => { const postSpy = sinon.spy(request, 'delete'); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { @@ -125,8 +125,8 @@ describe(commands.REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -152,8 +152,8 @@ describe(commands.REMOVE, () => { it('aborts removing the specified Microsoft Flow owned by another user when force option not passed and prompt not confirmed', async () => { const postSpy = sinon.spy(request, 'delete'); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { @@ -174,8 +174,8 @@ describe(commands.REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -255,8 +255,8 @@ describe(commands.REMOVE, () => { } }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await assert.rejects(command.action(logger, { options: @@ -270,8 +270,8 @@ describe(commands.REMOVE, () => { it('correctly handles no Microsoft Flow found when prompt confirmed', async () => { sinon.stub(request, 'delete').resolves({ statusCode: 204 }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await assert.rejects(command.action(logger, { options: diff --git a/src/m365/flow/commands/flow-remove.ts b/src/m365/flow/commands/flow-remove.ts index 568ac261953..721495b7d97 100644 --- a/src/m365/flow/commands/flow-remove.ts +++ b/src/m365/flow/commands/flow-remove.ts @@ -1,5 +1,5 @@ import GlobalOptions from '../../../GlobalOptions.js'; -import { Cli } from '../../../cli/Cli.js'; +import { cli } from '../../../cli/cli.js'; import { Logger } from '../../../cli/Logger.js'; import request, { CliRequestOptions } from '../../../request.js'; import { formatting } from '../../../utils/formatting.js'; @@ -105,7 +105,7 @@ class FlowRemoveCommand extends AzmgmtCommand { await removeFlow(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the Microsoft Flow ${args.options.name}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the Microsoft Flow ${args.options.name}?` }); if (result) { await removeFlow(); diff --git a/src/m365/flow/commands/owner/owner-ensure.spec.ts b/src/m365/flow/commands/owner/owner-ensure.spec.ts index da2d3b1993f..0d65f98a261 100644 --- a/src/m365/flow/commands/owner/owner-ensure.spec.ts +++ b/src/m365/flow/commands/owner/owner-ensure.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -28,7 +28,6 @@ describe(commands.OWNER_ENSURE, () => { let log: string[]; let logger: Logger; let commandInfo: CommandInfo; - let cli: Cli; before(() => { sinon.stub(auth, 'restoreAuth').resolves(); @@ -36,8 +35,7 @@ describe(commands.OWNER_ENSURE, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); - cli = Cli.getInstance(); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -62,7 +60,7 @@ describe(commands.OWNER_ENSURE, () => { aadGroup.getGroupByDisplayName, aadUser.getUserIdByUpn, cli.getSettingWithDefaultValue, - Cli.handleMultipleResultsFound + cli.handleMultipleResultsFound ]); }); @@ -249,7 +247,7 @@ describe(commands.OWNER_ENSURE, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves({ id: validGroupId }); + sinon.stub(cli, 'handleMultipleResultsFound').resolves({ id: validGroupId }); const postRequestStub = sinon.stub(request, 'post').callsFake(async opts => { if (opts.url === `https://management.azure.com/providers/Microsoft.ProcessSimple/scopes/admin/environments/${formatting.encodeQueryParameter(validEnvironmentName)}/flows/${formatting.encodeQueryParameter(validFlowName)}/modifyPermissions?api-version=2016-11-01`) { diff --git a/src/m365/flow/commands/owner/owner-list.spec.ts b/src/m365/flow/commands/owner/owner-list.spec.ts index 1c0ad448a2e..8d4958a051c 100644 --- a/src/m365/flow/commands/owner/owner-list.spec.ts +++ b/src/m365/flow/commands/owner/owner-list.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -50,7 +50,7 @@ describe(commands.OWNER_LIST, () => { } }; loggerLogSpy = sinon.spy(logger, 'log'); - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); afterEach(() => { diff --git a/src/m365/flow/commands/owner/owner-list.ts b/src/m365/flow/commands/owner/owner-list.ts index a5a1b749d77..aa88c539253 100644 --- a/src/m365/flow/commands/owner/owner-list.ts +++ b/src/m365/flow/commands/owner/owner-list.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import { formatting } from '../../../../utils/formatting.js'; @@ -97,7 +97,7 @@ class FlowOwnerListCommand extends AzmgmtCommand { } const response = await odata.getAllItems(`${this.resource}providers/Microsoft.ProcessSimple/${args.options.asAdmin ? 'scopes/admin/' : ''}environments/${formatting.encodeQueryParameter(args.options.environmentName)}/flows/${formatting.encodeQueryParameter(args.options.flowName)}/permissions?api-version=2016-11-01`); - if (!Cli.shouldTrimOutput(args.options.output)) { + if (!cli.shouldTrimOutput(args.options.output)) { await logger.log(response); } else { diff --git a/src/m365/flow/commands/owner/owner-remove.spec.ts b/src/m365/flow/commands/owner/owner-remove.spec.ts index 5e3ca3929c6..fc75dbc0fe5 100644 --- a/src/m365/flow/commands/owner/owner-remove.spec.ts +++ b/src/m365/flow/commands/owner/owner-remove.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -33,7 +33,6 @@ describe(commands.OWNER_REMOVE, () => { let logger: Logger; let commandInfo: CommandInfo; let promptIssued: boolean = false; - let cli: Cli; before(() => { sinon.stub(auth, 'restoreAuth').resolves(); @@ -41,8 +40,7 @@ describe(commands.OWNER_REMOVE, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); - cli = Cli.getInstance(); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -58,7 +56,7 @@ describe(commands.OWNER_REMOVE, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -73,8 +71,8 @@ describe(commands.OWNER_REMOVE, () => { aadGroup.getGroupIdByDisplayName, aadUser.getUserIdByUpn, cli.getSettingWithDefaultValue, - Cli.handleMultipleResultsFound, - Cli.promptForConfirmation + cli.handleMultipleResultsFound, + cli.promptForConfirmation ]); }); @@ -119,8 +117,8 @@ describe(commands.OWNER_REMOVE, () => { }); it('deletes owner from flow by groupId as admin when prompt confirmed', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); const postStub = sinon.stub(request, 'post').callsFake(async opts => { if (opts.url === requestUrlAdmin) { return; @@ -192,7 +190,7 @@ describe(commands.OWNER_REMOVE, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves({ id: '37a0264d-fea4-4e87-8e5e-e574ff878cf2' }); + sinon.stub(cli, 'handleMultipleResultsFound').resolves({ id: '37a0264d-fea4-4e87-8e5e-e574ff878cf2' }); const postStub = sinon.stub(request, 'post').callsFake(async opts => { if (opts.url === requestUrlAdmin) { @@ -227,8 +225,8 @@ describe(commands.OWNER_REMOVE, () => { it('aborts removing the specified owner from a flow when option not passed and prompt not confirmed', async () => { const postSpy = sinon.spy(request, 'post'); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { environmentName: environmentName, flowName: flowName, useName: userName } }); assert(postSpy.notCalled); diff --git a/src/m365/flow/commands/owner/owner-remove.ts b/src/m365/flow/commands/owner/owner-remove.ts index ce2abff373f..94e1ad17548 100644 --- a/src/m365/flow/commands/owner/owner-remove.ts +++ b/src/m365/flow/commands/owner/owner-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -154,7 +154,7 @@ class FlowOwnerRemoveCommand extends AzmgmtCommand { await removeFlowOwner(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove owner '${args.options.groupId || args.options.groupName || args.options.userId || args.options.userName}' from the specified flow?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove owner '${args.options.groupId || args.options.groupName || args.options.userId || args.options.userName}' from the specified flow?` }); if (result) { await removeFlowOwner(); diff --git a/src/m365/flow/commands/run/run-cancel.spec.ts b/src/m365/flow/commands/run/run-cancel.spec.ts index 36ced61888d..149336c0590 100644 --- a/src/m365/flow/commands/run/run-cancel.spec.ts +++ b/src/m365/flow/commands/run/run-cancel.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -26,7 +26,7 @@ describe(commands.RUN_CANCEL, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -43,7 +43,7 @@ describe(commands.RUN_CANCEL, () => { } }; loggerLogSpy = sinon.spy(logger, 'log'); - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -54,7 +54,7 @@ describe(commands.RUN_CANCEL, () => { afterEach(() => { sinonUtil.restore([ request.post, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -108,8 +108,8 @@ describe(commands.RUN_CANCEL, () => { it('aborts cancelling the specified Microsoft FlowName when force option not passed and prompt not confirmed', async () => { const postSpy = sinon.spy(request, 'post'); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { environmentName: 'Default-eff8592e-e14a-4ae8-8771-d96d5c549e1c', @@ -150,8 +150,8 @@ describe(commands.RUN_CANCEL, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -191,8 +191,8 @@ describe(commands.RUN_CANCEL, () => { } }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await assert.rejects(command.action(logger, { options: @@ -212,8 +212,8 @@ describe(commands.RUN_CANCEL, () => { } }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await assert.rejects(command.action(logger, { options: @@ -252,8 +252,8 @@ describe(commands.RUN_CANCEL, () => { } }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await assert.rejects(command.action(logger, { options: diff --git a/src/m365/flow/commands/run/run-cancel.ts b/src/m365/flow/commands/run/run-cancel.ts index b443d29c950..387e47e5beb 100644 --- a/src/m365/flow/commands/run/run-cancel.ts +++ b/src/m365/flow/commands/run/run-cancel.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -98,7 +98,7 @@ class FlowRunCancelCommand extends AzmgmtCommand { await cancelFlow(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to cancel the flow run ${args.options.name}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to cancel the flow run ${args.options.name}?` }); if (result) { await cancelFlow(); diff --git a/src/m365/flow/commands/run/run-get.spec.ts b/src/m365/flow/commands/run/run-get.spec.ts index 156ec8a628f..fd97f332853 100644 --- a/src/m365/flow/commands/run/run-get.spec.ts +++ b/src/m365/flow/commands/run/run-get.spec.ts @@ -10,7 +10,7 @@ import { session } from '../../../../utils/session.js'; import { sinonUtil } from '../../../../utils/sinonUtil.js'; import commands from '../../commands.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import command from './run-get.js'; describe(commands.RUN_GET, () => { @@ -39,7 +39,7 @@ describe(commands.RUN_GET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/flow/commands/run/run-list.spec.ts b/src/m365/flow/commands/run/run-list.spec.ts index 8096a10119c..d4ecbb10089 100644 --- a/src/m365/flow/commands/run/run-list.spec.ts +++ b/src/m365/flow/commands/run/run-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -119,7 +119,7 @@ describe(commands.RUN_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/flow/commands/run/run-resubmit.spec.ts b/src/m365/flow/commands/run/run-resubmit.spec.ts index 5aa97769489..4d786602dac 100644 --- a/src/m365/flow/commands/run/run-resubmit.spec.ts +++ b/src/m365/flow/commands/run/run-resubmit.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -26,7 +26,7 @@ describe(commands.RUN_RESUBMIT, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -43,7 +43,7 @@ describe(commands.RUN_RESUBMIT, () => { } }; loggerLogToStderrSpy = sinon.spy(logger, 'logToStderr'); - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -55,7 +55,7 @@ describe(commands.RUN_RESUBMIT, () => { sinonUtil.restore([ request.post, request.get, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -110,8 +110,8 @@ describe(commands.RUN_RESUBMIT, () => { it('aborts resubmitting the specified Microsoft Flow when force option not passed and prompt not confirmed', async () => { const postSpy = sinon.spy(request, 'post'); const getSpy = sinon.spy(request, 'get'); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { @@ -132,8 +132,8 @@ describe(commands.RUN_RESUBMIT, () => { } }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await assert.rejects(command.action(logger, { options: @@ -153,8 +153,8 @@ describe(commands.RUN_RESUBMIT, () => { } }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await assert.rejects(command.action(logger, { options: @@ -199,8 +199,8 @@ describe(commands.RUN_RESUBMIT, () => { } }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await assert.rejects(command.action(logger, { options: @@ -245,8 +245,8 @@ describe(commands.RUN_RESUBMIT, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: diff --git a/src/m365/flow/commands/run/run-resubmit.ts b/src/m365/flow/commands/run/run-resubmit.ts index 5ff7b81f10c..db800a43628 100644 --- a/src/m365/flow/commands/run/run-resubmit.ts +++ b/src/m365/flow/commands/run/run-resubmit.ts @@ -1,5 +1,5 @@ import chalk from 'chalk'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -105,7 +105,7 @@ class FlowRunResubmitCommand extends AzmgmtCommand { await resubmitFlow(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to resubmit the flow with run ${args.options.name}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to resubmit the flow with run ${args.options.name}?` }); if (result) { await resubmitFlow(); diff --git a/src/m365/graph/commands/changelog/changelog-list.spec.ts b/src/m365/graph/commands/changelog/changelog-list.spec.ts index 670ab93d7a9..f37daae3d76 100644 --- a/src/m365/graph/commands/changelog/changelog-list.spec.ts +++ b/src/m365/graph/commands/changelog/changelog-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -93,7 +93,7 @@ describe(commands.CHANGELOG_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/graph/commands/changelog/changelog-list.ts b/src/m365/graph/commands/changelog/changelog-list.ts index 9375cb3ce9b..24486a1f393 100644 --- a/src/m365/graph/commands/changelog/changelog-list.ts +++ b/src/m365/graph/commands/changelog/changelog-list.ts @@ -1,6 +1,6 @@ import { DOMParser } from '@xmldom/xmldom'; import GlobalOptions from '../../../../GlobalOptions.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import request, { CliRequestOptions } from '../../../../request.js'; import { md } from '../../../../utils/md.js'; @@ -187,7 +187,7 @@ class GraphChangelogListCommand extends AnonymousCommand { } as Changelog; Array.from(xmlDoc.getElementsByTagName('item')).forEach((item: any) => { - const description: string = Cli.shouldTrimOutput(args.options.output) ? + const description: string = cli.shouldTrimOutput(args.options.output) ? md.md2plain(item.getElementsByTagName('description').item(0).textContent, '') : item.getElementsByTagName('description').item(0).textContent; @@ -195,7 +195,7 @@ class GraphChangelogListCommand extends AnonymousCommand { guid: item.getElementsByTagName('guid').item(0).textContent, category: item.getElementsByTagName('category').item(1).textContent, title: item.getElementsByTagName('title').item(0).textContent, - description: Cli.shouldTrimOutput(args.options.output) ? + description: cli.shouldTrimOutput(args.options.output) ? description.length > 50 ? `${description.substring(0, 47)}...` : description : description, pubDate: new Date(item.getElementsByTagName('pubDate').item(0).textContent) diff --git a/src/m365/graph/commands/schemaextension/schemaextension-add.spec.ts b/src/m365/graph/commands/schemaextension/schemaextension-add.spec.ts index a02ad0d2174..c2bae8c2e33 100644 --- a/src/m365/graph/commands/schemaextension/schemaextension-add.spec.ts +++ b/src/m365/graph/commands/schemaextension/schemaextension-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -25,7 +25,7 @@ describe(commands.SCHEMAEXTENSION_ADD, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/graph/commands/schemaextension/schemaextension-list.spec.ts b/src/m365/graph/commands/schemaextension/schemaextension-list.spec.ts index 224d7d58b04..9bf6d80f1df 100644 --- a/src/m365/graph/commands/schemaextension/schemaextension-list.spec.ts +++ b/src/m365/graph/commands/schemaextension/schemaextension-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -25,7 +25,7 @@ describe(commands.SCHEMAEXTENSION_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/graph/commands/schemaextension/schemaextension-remove.spec.ts b/src/m365/graph/commands/schemaextension/schemaextension-remove.spec.ts index 0d2bffd1086..fe754cc6bc8 100644 --- a/src/m365/graph/commands/schemaextension/schemaextension-remove.spec.ts +++ b/src/m365/graph/commands/schemaextension/schemaextension-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; import request from '../../../../request.js'; @@ -42,7 +42,7 @@ describe(commands.SCHEMAEXTENSION_REMOVE, () => { }; loggerLogSpy = sinon.spy(logger, 'log'); loggerLogToStderrSpy = sinon.spy(logger, 'logToStderr'); - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -53,7 +53,7 @@ describe(commands.SCHEMAEXTENSION_REMOVE, () => { afterEach(() => { sinonUtil.restore([ request.delete, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -104,8 +104,8 @@ describe(commands.SCHEMAEXTENSION_REMOVE, () => { it('aborts removing schema extension when prompt not confirmed', async () => { sinon.stub(request, 'delete').rejects('Invalid request'); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { id: 'exttyee4dv5_MySchemaExtension' } }); }); @@ -119,8 +119,8 @@ describe(commands.SCHEMAEXTENSION_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { id: 'exttyee4dv5_MySchemaExtension' } }); assert(loggerLogSpy.notCalled); diff --git a/src/m365/graph/commands/schemaextension/schemaextension-remove.ts b/src/m365/graph/commands/schemaextension/schemaextension-remove.ts index ec171d304cd..8405161c532 100644 --- a/src/m365/graph/commands/schemaextension/schemaextension-remove.ts +++ b/src/m365/graph/commands/schemaextension/schemaextension-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -76,7 +76,7 @@ class GraphSchemaExtensionRemoveCommand extends GraphCommand { await removeSchemaExtension(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the schema extension with ID ${args.options.id}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the schema extension with ID ${args.options.id}?` }); if (result) { await removeSchemaExtension(); diff --git a/src/m365/graph/commands/schemaextension/schemaextension-set.spec.ts b/src/m365/graph/commands/schemaextension/schemaextension-set.spec.ts index bbcfd00cf95..63849a96310 100644 --- a/src/m365/graph/commands/schemaextension/schemaextension-set.spec.ts +++ b/src/m365/graph/commands/schemaextension/schemaextension-set.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -25,7 +25,7 @@ describe(commands.SCHEMAEXTENSION_SET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/graph/commands/subscription/subscription-add.spec.ts b/src/m365/graph/commands/subscription/subscription-add.spec.ts index 030b195d315..e242b891446 100644 --- a/src/m365/graph/commands/subscription/subscription-add.spec.ts +++ b/src/m365/graph/commands/subscription/subscription-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -26,7 +26,7 @@ describe(commands.SUBSCRIPTION_ADD, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/onenote/commands/notebook/notebook-list.spec.ts b/src/m365/onenote/commands/notebook/notebook-list.spec.ts index 82ce9e1578d..dc53f2fcc67 100644 --- a/src/m365/onenote/commands/notebook/notebook-list.spec.ts +++ b/src/m365/onenote/commands/notebook/notebook-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -25,7 +25,7 @@ describe(commands.NOTEBOOK_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/onenote/commands/page/page-list.spec.ts b/src/m365/onenote/commands/page/page-list.spec.ts index 60f5b9d3437..87d9dab3f2f 100644 --- a/src/m365/onenote/commands/page/page-list.spec.ts +++ b/src/m365/onenote/commands/page/page-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -17,7 +17,6 @@ import command from './page-list.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.PAGE_LIST, () => { - let cli: Cli; const userId = '0e38b3b3-d9ac-42fa-81db-437ac8caec2f'; const userName = 'john@contoso.com'; const groupId = 'bba4c915-0ac8-47a1-bd05-087a44c92d3b'; @@ -79,14 +78,13 @@ describe(commands.PAGE_LIST, () => { let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); - sinon.stub(Cli.getInstance(), 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { + commandInfo = cli.getCommandInfo(command); + sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { if (settingName === 'prompt') { return false; } diff --git a/src/m365/outlook/commands/mail/mail-send.spec.ts b/src/m365/outlook/commands/mail/mail-send.spec.ts index e0d64833f57..2f3ba1c6fd0 100644 --- a/src/m365/outlook/commands/mail/mail-send.spec.ts +++ b/src/m365/outlook/commands/mail/mail-send.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import fs from 'fs'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -31,7 +31,7 @@ describe(commands.MAIL_SEND, () => { expiresOn: 'abc', accessToken: 'abc' }; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/outlook/commands/message/message-get.spec.ts b/src/m365/outlook/commands/message/message-get.spec.ts index 1f168cfaf57..0546b11ddee 100644 --- a/src/m365/outlook/commands/message/message-get.spec.ts +++ b/src/m365/outlook/commands/message/message-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -73,14 +73,12 @@ describe(commands.MESSAGE_GET, () => { } }; - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); @@ -90,7 +88,7 @@ describe(commands.MESSAGE_GET, () => { expiresOn: 'abc', accessToken: 'abc' }; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/outlook/commands/message/message-list.spec.ts b/src/m365/outlook/commands/message/message-list.spec.ts index e40ebf23385..c8f35437b15 100644 --- a/src/m365/outlook/commands/message/message-list.spec.ts +++ b/src/m365/outlook/commands/message/message-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,7 +15,6 @@ import command from './message-list.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.MESSAGE_LIST, () => { - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; @@ -350,13 +349,12 @@ describe(commands.MESSAGE_LIST, () => { // #endregion before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -380,7 +378,7 @@ describe(commands.MESSAGE_LIST, () => { sinonUtil.restore([ request.get, cli.getSettingWithDefaultValue, - Cli.handleMultipleResultsFound + cli.handleMultipleResultsFound ]); }); @@ -540,7 +538,7 @@ describe(commands.MESSAGE_LIST, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves({ + sinon.stub(cli, 'handleMultipleResultsFound').resolves({ "id": "AAMkAGVmMDEzMTM4LTZmYWUtNDdkNC1hMDZiLTU1OGY5OTZhYmY4OAAuAAAAAAAiQ8W967B7TKBjgx9rVEURAQAiIsqMbYjsT5e-T7KzowPTAAAAAAEMAAA=" }); diff --git a/src/m365/outlook/commands/message/message-list.ts b/src/m365/outlook/commands/message/message-list.ts index 7ebda4f696d..e3c6c393879 100644 --- a/src/m365/outlook/commands/message/message-list.ts +++ b/src/m365/outlook/commands/message/message-list.ts @@ -7,7 +7,7 @@ import { odata } from '../../../../utils/odata.js'; import GraphCommand from '../../../base/GraphCommand.js'; import commands from '../../commands.js'; import { Outlook } from '../../Outlook.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; interface CommandArgs { options: Options; @@ -108,7 +108,7 @@ class OutlookMessageListCommand extends GraphCommand { if (response.value.length > 1) { const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', response.value); - const result = await Cli.handleMultipleResultsFound<{ id: string }>(`Multiple folders with name '${args.options.folderName!}' found.`, resultAsKeyValuePair); + const result = await cli.handleMultipleResultsFound<{ id: string }>(`Multiple folders with name '${args.options.folderName!}' found.`, resultAsKeyValuePair); return result.id; } diff --git a/src/m365/outlook/commands/message/message-move.spec.ts b/src/m365/outlook/commands/message/message-move.spec.ts index 67d8bc7113e..da9f87e2555 100644 --- a/src/m365/outlook/commands/message/message-move.spec.ts +++ b/src/m365/outlook/commands/message/message-move.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,19 +15,17 @@ import command from './message-move.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.MESSAGE_MOVE, () => { - let cli: Cli; let log: string[]; let logger: Logger; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -51,7 +49,7 @@ describe(commands.MESSAGE_MOVE, () => { request.get, request.post, cli.getSettingWithDefaultValue, - Cli.handleMultipleResultsFound + cli.handleMultipleResultsFound ]); }); @@ -358,7 +356,7 @@ describe(commands.MESSAGE_MOVE, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves({ + sinon.stub(cli, 'handleMultipleResultsFound').resolves({ "id": "AAMkAGVmMDEzMTM4LTZmYWUtNDdkNC1hMDZiLTU1OGY5OTZhYmY4OAAuAAAAAAAiQ8W967B7TKBjgx9rVEURAQAiIsqMbYjsT5e-T7KzowPTAAAAAAEMAAA=" }); diff --git a/src/m365/outlook/commands/message/message-move.ts b/src/m365/outlook/commands/message/message-move.ts index d6e003af294..9890ac089a0 100644 --- a/src/m365/outlook/commands/message/message-move.ts +++ b/src/m365/outlook/commands/message/message-move.ts @@ -5,7 +5,7 @@ import { formatting } from '../../../../utils/formatting.js'; import GraphCommand from '../../../base/GraphCommand.js'; import commands from '../../commands.js'; import { Outlook } from '../../Outlook.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; interface CommandArgs { options: Options; @@ -131,7 +131,7 @@ class OutlookMessageMoveCommand extends GraphCommand { if (response.value.length > 1) { const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', response.value); - const result = await Cli.handleMultipleResultsFound<{ id: string; }>(`Multiple folders with name '${folderName as string}' found.`, resultAsKeyValuePair); + const result = await cli.handleMultipleResultsFound<{ id: string; }>(`Multiple folders with name '${folderName as string}' found.`, resultAsKeyValuePair); return result.id; } diff --git a/src/m365/pa/commands/app/app-consent-set.spec.ts b/src/m365/pa/commands/app/app-consent-set.spec.ts index 6e8693600b6..1942c2a1cca 100644 --- a/src/m365/pa/commands/app/app-consent-set.spec.ts +++ b/src/m365/pa/commands/app/app-consent-set.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -30,7 +30,7 @@ describe(commands.APP_CONSENT_SET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -46,7 +46,7 @@ describe(commands.APP_CONSENT_SET, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -57,7 +57,7 @@ describe(commands.APP_CONSENT_SET, () => { afterEach(() => { sinonUtil.restore([ request.post, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -110,8 +110,8 @@ describe(commands.APP_CONSENT_SET, () => { it('aborts bypassing the consent for the specified Microsoft Power App when force option not passed and prompt not confirmed', async () => { const postSpy = sinon.spy(request, 'post'); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { @@ -132,8 +132,8 @@ describe(commands.APP_CONSENT_SET, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await assert.doesNotReject(command.action(logger, { options: { diff --git a/src/m365/pa/commands/app/app-consent-set.ts b/src/m365/pa/commands/app/app-consent-set.ts index be5929dc777..af092df5e0d 100644 --- a/src/m365/pa/commands/app/app-consent-set.ts +++ b/src/m365/pa/commands/app/app-consent-set.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -77,7 +77,7 @@ class PaAppConsentSetCommand extends PowerAppsCommand { await this.consentPaApp(args); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you bypass the consent for the Microsoft Power App ${args.options.name} to ${args.options.bypass}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you bypass the consent for the Microsoft Power App ${args.options.name} to ${args.options.bypass}?` }); if (result) { await this.consentPaApp(args); diff --git a/src/m365/pa/commands/app/app-export.spec.ts b/src/m365/pa/commands/app/app-export.spec.ts index ee5fcea3dc1..dfd75ebf10a 100644 --- a/src/m365/pa/commands/app/app-export.spec.ts +++ b/src/m365/pa/commands/app/app-export.spec.ts @@ -3,7 +3,7 @@ import fs from 'fs'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -153,7 +153,7 @@ describe(commands.APP_EXPORT, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/pa/commands/app/app-get.spec.ts b/src/m365/pa/commands/app/app-get.spec.ts index 4372c9ae7e7..31fec013947 100644 --- a/src/m365/pa/commands/app/app-get.spec.ts +++ b/src/m365/pa/commands/app/app-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -16,7 +16,6 @@ import command from './app-get.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.APP_GET, () => { - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; @@ -24,13 +23,12 @@ describe(commands.APP_GET, () => { let loggerLogToStderrSpy: sinon.SinonSpy; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -53,8 +51,8 @@ describe(commands.APP_GET, () => { afterEach(() => { sinonUtil.restore([ request.get, - Cli.executeCommand, - Cli.executeCommandWithOutput, + cli.executeCommand, + cli.executeCommandWithOutput, cli.getSettingWithDefaultValue ]); }); @@ -620,7 +618,7 @@ describe(commands.APP_GET, () => { } ]; - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === paAppListCommand) { return { "stdout": JSON.stringify(apps) }; } @@ -1280,7 +1278,7 @@ describe(commands.APP_GET, () => { } ]; - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === paAppListCommand) { return { "stdout": JSON.stringify(apps) }; } @@ -1936,7 +1934,7 @@ describe(commands.APP_GET, () => { } ]; - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === paAppListCommand) { return { "stdout": JSON.stringify(apps) }; } @@ -1948,7 +1946,7 @@ describe(commands.APP_GET, () => { }); it('correctly handles no apps found using displayName (debug)', async () => { - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === paAppListCommand) { return { "stdout": JSON.stringify([]) }; } diff --git a/src/m365/pa/commands/app/app-get.ts b/src/m365/pa/commands/app/app-get.ts index e6e3eb45750..32c337e6158 100644 --- a/src/m365/pa/commands/app/app-get.ts +++ b/src/m365/pa/commands/app/app-get.ts @@ -1,4 +1,4 @@ -import { Cli, CommandOutput } from '../../../../cli/Cli.js'; +import { cli, CommandOutput } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import Command from '../../../../Command.js'; import GlobalOptions from '../../../../GlobalOptions.js'; @@ -138,7 +138,7 @@ class PaAppGetCommand extends PowerAppsCommand { verbose: this.verbose }; - return await Cli.executeCommandWithOutput(paAppListCommand as Command, { options: { ...options, _: [] } }); + return await cli.executeCommandWithOutput(paAppListCommand as Command, { options: { ...options, _: [] } }); } private setProperties(app: any): any { diff --git a/src/m365/pa/commands/app/app-list.spec.ts b/src/m365/pa/commands/app/app-list.spec.ts index 3f2348ada35..ac10d48faad 100644 --- a/src/m365/pa/commands/app/app-list.spec.ts +++ b/src/m365/pa/commands/app/app-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -26,7 +26,7 @@ describe(commands.APP_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/pa/commands/app/app-owner-set.spec.ts b/src/m365/pa/commands/app/app-owner-set.spec.ts index 03b0ae30651..ba65ef0ec3a 100644 --- a/src/m365/pa/commands/app/app-owner-set.spec.ts +++ b/src/m365/pa/commands/app/app-owner-set.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -16,7 +16,6 @@ import command from './app-owner-set.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.APP_OWNER_SET, () => { - let cli: Cli; let log: string[]; let logger: Logger; let commandInfo: CommandInfo; @@ -205,13 +204,12 @@ describe(commands.APP_OWNER_SET, () => { }; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/pa/commands/app/app-permission-ensure.spec.ts b/src/m365/pa/commands/app/app-permission-ensure.spec.ts index 16942a3ca29..2d138154f44 100644 --- a/src/m365/pa/commands/app/app-permission-ensure.spec.ts +++ b/src/m365/pa/commands/app/app-permission-ensure.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -17,7 +17,6 @@ import commands from '../../commands.js'; import command from './app-permission-ensure.js'; describe(commands.APP_PERMISSION_ENSURE, () => { - let cli: Cli; let log: string[]; let logger: Logger; let commandInfo: CommandInfo; @@ -81,13 +80,12 @@ describe(commands.APP_PERMISSION_ENSURE, () => { }; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); auth.service.accessTokens[auth.defaultResource] = { expiresOn: '123', accessToken: 'abc' diff --git a/src/m365/pa/commands/app/app-permission-list.spec.ts b/src/m365/pa/commands/app/app-permission-list.spec.ts index b6cd3f5ed79..1a5a1615183 100644 --- a/src/m365/pa/commands/app/app-permission-list.spec.ts +++ b/src/m365/pa/commands/app/app-permission-list.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -79,7 +79,7 @@ describe(commands.APP_PERMISSION_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/pa/commands/app/app-permission-remove.spec.ts b/src/m365/pa/commands/app/app-permission-remove.spec.ts index 138b47a61c5..9d87a34fb71 100644 --- a/src/m365/pa/commands/app/app-permission-remove.spec.ts +++ b/src/m365/pa/commands/app/app-permission-remove.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -17,7 +17,6 @@ import commands from '../../commands.js'; import command from './app-permission-remove.js'; describe(commands.APP_PERMISSION_REMOVE, () => { - let cli: Cli; let log: string[]; let logger: Logger; let commandInfo: CommandInfo; @@ -58,7 +57,6 @@ describe(commands.APP_PERMISSION_REMOVE, () => { const tenantId = '174290ec-373f-4d4c-89ea-9801dad0acd9'; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); @@ -68,7 +66,7 @@ describe(commands.APP_PERMISSION_REMOVE, () => { expiresOn: '123', accessToken: 'abc' }; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -85,7 +83,7 @@ describe(commands.APP_PERMISSION_REMOVE, () => { } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -100,7 +98,7 @@ describe(commands.APP_PERMISSION_REMOVE, () => { sinonUtil.restore([ request.post, cli.getSettingWithDefaultValue, - Cli.promptForConfirmation, + cli.promptForConfirmation, aadUser.getUserIdByUpn, aadGroup.getGroupByDisplayName, accessToken.getTenantIdFromAccessToken @@ -215,8 +213,8 @@ describe(commands.APP_PERMISSION_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); const requestBody = { delete: [{ id: `tenant-${tenantId}` }] diff --git a/src/m365/pa/commands/app/app-permission-remove.ts b/src/m365/pa/commands/app/app-permission-remove.ts index 6e17019fb00..d3019d7c926 100644 --- a/src/m365/pa/commands/app/app-permission-remove.ts +++ b/src/m365/pa/commands/app/app-permission-remove.ts @@ -1,6 +1,6 @@ import Auth from '../../../../Auth.js'; import GlobalOptions from '../../../../GlobalOptions.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import request, { CliRequestOptions } from '../../../../request.js'; import { aadGroup } from '../../../../utils/aadGroup.js'; @@ -138,7 +138,7 @@ class PaAppPermissionRemoveCommand extends PowerAppsCommand { await this.removeAppPermission(logger, args.options); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the permissions of '${args.options.userId || args.options.userName || args.options.groupId || args.options.groupName || (args.options.tenant && 'everyone')}' from the Power App '${args.options.appName}'?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the permissions of '${args.options.userId || args.options.userName || args.options.groupId || args.options.groupName || (args.options.tenant && 'everyone')}' from the Power App '${args.options.appName}'?` }); if (result) { await this.removeAppPermission(logger, args.options); diff --git a/src/m365/pa/commands/app/app-remove.spec.ts b/src/m365/pa/commands/app/app-remove.spec.ts index 6b82a1c9acd..0ed9ee76eea 100644 --- a/src/m365/pa/commands/app/app-remove.spec.ts +++ b/src/m365/pa/commands/app/app-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -26,7 +26,7 @@ describe(commands.APP_REMOVE, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -43,7 +43,7 @@ describe(commands.APP_REMOVE, () => { } }; loggerLogToStderrSpy = sinon.spy(logger, 'logToStderr'); - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -54,7 +54,7 @@ describe(commands.APP_REMOVE, () => { afterEach(() => { sinonUtil.restore([ request.delete, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -101,8 +101,8 @@ describe(commands.APP_REMOVE, () => { it('aborts removing the specified Microsoft Power App when force option not passed and prompt not confirmed', async () => { const postSpy = sinon.spy(request, 'delete'); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { @@ -121,8 +121,8 @@ describe(commands.APP_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -142,8 +142,8 @@ describe(commands.APP_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -195,8 +195,8 @@ describe(commands.APP_REMOVE, () => { it('correctly handles no Microsoft Power App found when prompt confirmed', async () => { sinon.stub(request, 'delete').rejects({ response: { status: 403 } }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await assert.rejects(command.action(logger, { options: @@ -221,8 +221,8 @@ describe(commands.APP_REMOVE, () => { it('correctly handles Microsoft Power App found when prompt confirmed', async () => { sinon.stub(request, 'delete').resolves({ statusCode: 200 }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: @@ -269,8 +269,8 @@ describe(commands.APP_REMOVE, () => { it('correctly handles random api error', async () => { sinon.stub(request, 'delete').rejects(new Error("Something went wrong")); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await assert.rejects(command.action(logger, { options: diff --git a/src/m365/pa/commands/app/app-remove.ts b/src/m365/pa/commands/app/app-remove.ts index 520d8006995..f481b4a264b 100644 --- a/src/m365/pa/commands/app/app-remove.ts +++ b/src/m365/pa/commands/app/app-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; import GlobalOptions from '../../../../GlobalOptions.js'; @@ -97,7 +97,7 @@ class PaAppRemoveCommand extends PowerAppsCommand { await removePaApp(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the Microsoft Power App ${args.options.name}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the Microsoft Power App ${args.options.name}?` }); if (result) { await removePaApp(); diff --git a/src/m365/pa/commands/connector/connector-export.spec.ts b/src/m365/pa/commands/connector/connector-export.spec.ts index 794df82773d..e8ecab428e2 100644 --- a/src/m365/pa/commands/connector/connector-export.spec.ts +++ b/src/m365/pa/commands/connector/connector-export.spec.ts @@ -3,7 +3,7 @@ import fs from 'fs'; import path from 'path'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -32,7 +32,7 @@ describe(commands.CONNECTOR_EXPORT, () => { mkdirSyncStub = sinon.stub(fs, 'mkdirSync').returns(''); writeFileSyncStub = sinon.stub(fs, 'writeFileSync').returns(); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/planner/commands/bucket/bucket-add.spec.ts b/src/m365/planner/commands/bucket/bucket-add.spec.ts index 8b98a11bdfe..505499ed04a 100644 --- a/src/m365/planner/commands/bucket/bucket-add.spec.ts +++ b/src/m365/planner/commands/bucket/bucket-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -110,7 +110,6 @@ describe(commands.BUCKET_ADD, () => { ] }; - let cli: Cli; const planResponse = { value: [{ id: 'iVPMIgdku0uFlou-KLNg6MkAE1O2', @@ -124,7 +123,6 @@ describe(commands.BUCKET_ADD, () => { let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); @@ -134,7 +132,7 @@ describe(commands.BUCKET_ADD, () => { accessToken: 'abc', expiresOn: new Date() }; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/planner/commands/bucket/bucket-get.spec.ts b/src/m365/planner/commands/bucket/bucket-get.spec.ts index 9195424e41b..d4e0523d2f5 100644 --- a/src/m365/planner/commands/bucket/bucket-get.spec.ts +++ b/src/m365/planner/commands/bucket/bucket-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -94,14 +94,12 @@ describe(commands.BUCKET_GET, () => { }] }; - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); @@ -111,8 +109,8 @@ describe(commands.BUCKET_GET, () => { accessToken: 'abc', expiresOn: new Date() }; - commandInfo = Cli.getCommandInfo(command); - sinon.stub(Cli.getInstance(), 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { + commandInfo = cli.getCommandInfo(command); + sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { if (settingName === 'prompt') { return false; } @@ -142,7 +140,7 @@ describe(commands.BUCKET_GET, () => { sinonUtil.restore([ request.get, request.patch, - Cli.handleMultipleResultsFound, + cli.handleMultipleResultsFound, cli.getSettingWithDefaultValue ]); }); @@ -370,7 +368,7 @@ describe(commands.BUCKET_GET, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves(singleBucketByNameResponse.value[0]); + sinon.stub(cli, 'handleMultipleResultsFound').resolves(singleBucketByNameResponse.value[0]); await assert.doesNotReject(command.action(logger, { options: { diff --git a/src/m365/planner/commands/bucket/bucket-get.ts b/src/m365/planner/commands/bucket/bucket-get.ts index d5970a5c332..19d5d7b0435 100644 --- a/src/m365/planner/commands/bucket/bucket-get.ts +++ b/src/m365/planner/commands/bucket/bucket-get.ts @@ -7,7 +7,7 @@ import { planner } from '../../../../utils/planner.js'; import { validation } from '../../../../utils/validation.js'; import GraphCommand from '../../../base/GraphCommand.js'; import commands from '../../commands.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { formatting } from '../../../../utils/formatting.js'; interface CommandArgs { @@ -171,7 +171,7 @@ class PlannerBucketGetCommand extends GraphCommand { if (filteredBuckets.length > 1) { const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', filteredBuckets); - const result = await Cli.handleMultipleResultsFound(`Multiple buckets with name '${name}' found.`, resultAsKeyValuePair); + const result = await cli.handleMultipleResultsFound(`Multiple buckets with name '${name}' found.`, resultAsKeyValuePair); return result.id!.toString(); } diff --git a/src/m365/planner/commands/bucket/bucket-list.spec.ts b/src/m365/planner/commands/bucket/bucket-list.spec.ts index 45a51743e3c..1acc3ce1392 100644 --- a/src/m365/planner/commands/bucket/bucket-list.spec.ts +++ b/src/m365/planner/commands/bucket/bucket-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -124,7 +124,6 @@ describe(commands.BUCKET_LIST, () => { ] }; - let cli: Cli; const planResponse = { value: [{ id: 'iVPMIgdku0uFlou-KLNg6MkAE1O2', @@ -139,7 +138,6 @@ describe(commands.BUCKET_LIST, () => { let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); @@ -149,7 +147,7 @@ describe(commands.BUCKET_LIST, () => { accessToken: 'abc', expiresOn: new Date() }; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/planner/commands/bucket/bucket-remove.spec.ts b/src/m365/planner/commands/bucket/bucket-remove.spec.ts index f7f67625f54..f823b2ab96f 100644 --- a/src/m365/planner/commands/bucket/bucket-remove.spec.ts +++ b/src/m365/planner/commands/bucket/bucket-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -16,7 +16,6 @@ import command from './bucket-remove.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.BUCKET_REMOVE, () => { - let cli: Cli; const validBucketId = 'vncYUXCRBke28qMLB-d4xJcACtNz'; const validBucketName = 'Bucket name'; const validPlanId = 'oUHpnKBFekqfGE_PS6GGUZcAFY7b'; @@ -101,7 +100,6 @@ describe(commands.BUCKET_REMOVE, () => { let promptIssued: boolean = false; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); @@ -111,8 +109,8 @@ describe(commands.BUCKET_REMOVE, () => { accessToken: 'abc', expiresOn: new Date() }; - commandInfo = Cli.getCommandInfo(command); - sinon.stub(Cli.getInstance(), 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { + commandInfo = cli.getCommandInfo(command); + sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { if (settingName === 'prompt') { return false; } @@ -134,7 +132,7 @@ describe(commands.BUCKET_REMOVE, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -147,8 +145,8 @@ describe(commands.BUCKET_REMOVE, () => { request.get, request.delete, cli.getSettingWithDefaultValue, - Cli.promptForConfirmation, - Cli.handleMultipleResultsFound + cli.promptForConfirmation, + cli.handleMultipleResultsFound ]); }); @@ -383,10 +381,10 @@ describe(commands.BUCKET_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves(singleBucketByNameResponse.value[0]); + sinon.stub(cli, 'handleMultipleResultsFound').resolves(singleBucketByNameResponse.value[0]); await assert.doesNotReject(command.action(logger, { options: { @@ -472,8 +470,8 @@ describe(commands.BUCKET_REMOVE, () => { throw 'Invalid Request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -503,8 +501,8 @@ describe(commands.BUCKET_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await assert.doesNotReject(command.action(logger, { options: { diff --git a/src/m365/planner/commands/bucket/bucket-remove.ts b/src/m365/planner/commands/bucket/bucket-remove.ts index 0a93cc0c870..9b32aa554ce 100644 --- a/src/m365/planner/commands/bucket/bucket-remove.ts +++ b/src/m365/planner/commands/bucket/bucket-remove.ts @@ -1,5 +1,5 @@ import { PlannerBucket } from '@microsoft/microsoft-graph-types'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -162,7 +162,7 @@ class PlannerBucketRemoveCommand extends GraphCommand { await removeBucket(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the bucket ${args.options.id || args.options.name}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the bucket ${args.options.id || args.options.name}?` }); if (result) { await removeBucket(); @@ -201,7 +201,7 @@ class PlannerBucketRemoveCommand extends GraphCommand { if (filteredBuckets.length > 1) { const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', filteredBuckets); - return await Cli.handleMultipleResultsFound(`Multiple buckets with name '${args.options.name}' found.`, resultAsKeyValuePair); + return await cli.handleMultipleResultsFound(`Multiple buckets with name '${args.options.name}' found.`, resultAsKeyValuePair); } return filteredBuckets[0]; diff --git a/src/m365/planner/commands/bucket/bucket-set.spec.ts b/src/m365/planner/commands/bucket/bucket-set.spec.ts index a71458c8118..3d2ad5a3d2e 100644 --- a/src/m365/planner/commands/bucket/bucket-set.spec.ts +++ b/src/m365/planner/commands/bucket/bucket-set.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -16,7 +16,6 @@ import command from './bucket-set.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.BUCKET_SET, () => { - let cli: Cli; const validBucketId = 'vncYUXCRBke28qMLB-d4xJcACtNz'; const validBucketName = 'Bucket name'; const validOrderHint = '8585513699476931356P;'; @@ -101,7 +100,6 @@ describe(commands.BUCKET_SET, () => { let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); @@ -111,8 +109,8 @@ describe(commands.BUCKET_SET, () => { accessToken: 'abc', expiresOn: new Date() }; - commandInfo = Cli.getCommandInfo(command); - sinon.stub(Cli.getInstance(), 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { + commandInfo = cli.getCommandInfo(command); + sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { if (settingName === 'prompt') { return false; } @@ -142,7 +140,7 @@ describe(commands.BUCKET_SET, () => { request.get, request.patch, cli.getSettingWithDefaultValue, - Cli.handleMultipleResultsFound + cli.handleMultipleResultsFound ]); }); @@ -365,7 +363,7 @@ describe(commands.BUCKET_SET, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves(singleBucketByNameResponse.value[0]); + sinon.stub(cli, 'handleMultipleResultsFound').resolves(singleBucketByNameResponse.value[0]); await assert.doesNotReject(command.action(logger, { options: { diff --git a/src/m365/planner/commands/bucket/bucket-set.ts b/src/m365/planner/commands/bucket/bucket-set.ts index 63f7dc29c6d..c1888077605 100644 --- a/src/m365/planner/commands/bucket/bucket-set.ts +++ b/src/m365/planner/commands/bucket/bucket-set.ts @@ -7,7 +7,7 @@ import { planner } from '../../../../utils/planner.js'; import { validation } from '../../../../utils/validation.js'; import GraphCommand from '../../../base/GraphCommand.js'; import commands from '../../commands.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { formatting } from '../../../../utils/formatting.js'; interface CommandArgs { @@ -201,7 +201,7 @@ class PlannerBucketSetCommand extends GraphCommand { if (filteredBuckets.length > 1) { const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', filteredBuckets); - return await Cli.handleMultipleResultsFound(`Multiple buckets with name '${args.options.name}' found.`, resultAsKeyValuePair); + return await cli.handleMultipleResultsFound(`Multiple buckets with name '${args.options.name}' found.`, resultAsKeyValuePair); } return filteredBuckets[0]; diff --git a/src/m365/planner/commands/plan/plan-add.spec.ts b/src/m365/planner/commands/plan/plan-add.spec.ts index 9342dd01c92..24aec1b6d30 100644 --- a/src/m365/planner/commands/plan/plan-add.spec.ts +++ b/src/m365/planner/commands/plan/plan-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -16,7 +16,6 @@ import command from './plan-add.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.PLAN_ADD, () => { - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; @@ -89,7 +88,6 @@ describe(commands.PLAN_ADD, () => { }; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); @@ -99,7 +97,7 @@ describe(commands.PLAN_ADD, () => { accessToken: 'abc', expiresOn: new Date() }; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/planner/commands/plan/plan-get.spec.ts b/src/m365/planner/commands/plan/plan-get.spec.ts index 6a2945dc7e8..b461ccda088 100644 --- a/src/m365/planner/commands/plan/plan-get.spec.ts +++ b/src/m365/planner/commands/plan/plan-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -59,7 +59,7 @@ describe(commands.PLAN_GET, () => { accessToken: 'abc', expiresOn: new Date() }; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/planner/commands/plan/plan-list.spec.ts b/src/m365/planner/commands/plan/plan-list.spec.ts index 8a8ebbec8c2..3d0ff572063 100644 --- a/src/m365/planner/commands/plan/plan-list.spec.ts +++ b/src/m365/planner/commands/plan/plan-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -110,14 +110,12 @@ describe(commands.PLAN_LIST, () => { } }]; - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); @@ -127,7 +125,7 @@ describe(commands.PLAN_LIST, () => { accessToken: 'abc', expiresOn: new Date() }; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/planner/commands/plan/plan-remove.spec.ts b/src/m365/planner/commands/plan/plan-remove.spec.ts index 2cd691b5bdb..4a1f1a40a38 100644 --- a/src/m365/planner/commands/plan/plan-remove.spec.ts +++ b/src/m365/planner/commands/plan/plan-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -62,7 +62,7 @@ describe(commands.PLAN_REMOVE, () => { accessToken: 'abc', expiresOn: new Date() }; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -78,7 +78,7 @@ describe(commands.PLAN_REMOVE, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -90,7 +90,7 @@ describe(commands.PLAN_REMOVE, () => { sinonUtil.restore([ request.get, request.delete, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -230,8 +230,8 @@ describe(commands.PLAN_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -256,8 +256,8 @@ describe(commands.PLAN_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { diff --git a/src/m365/planner/commands/plan/plan-remove.ts b/src/m365/planner/commands/plan/plan-remove.ts index 4a45a785e20..9a164ccb875 100644 --- a/src/m365/planner/commands/plan/plan-remove.ts +++ b/src/m365/planner/commands/plan/plan-remove.ts @@ -1,5 +1,5 @@ import { PlannerPlan } from '@microsoft/microsoft-graph-types'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -130,7 +130,7 @@ class PlannerPlanRemoveCommand extends GraphCommand { await removePlan(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the plan ${args.options.id || args.options.title}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the plan ${args.options.id || args.options.title}?` }); if (result) { await removePlan(); diff --git a/src/m365/planner/commands/plan/plan-set.spec.ts b/src/m365/planner/commands/plan/plan-set.spec.ts index 38835c019f7..e4e8d8f3caf 100644 --- a/src/m365/planner/commands/plan/plan-set.spec.ts +++ b/src/m365/planner/commands/plan/plan-set.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -16,7 +16,6 @@ import command from './plan-set.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.PLAN_SET, () => { - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; @@ -124,7 +123,6 @@ describe(commands.PLAN_SET, () => { }; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); @@ -134,7 +132,7 @@ describe(commands.PLAN_SET, () => { accessToken: 'abc', expiresOn: new Date() }; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/planner/commands/roster/roster-member-add.spec.ts b/src/m365/planner/commands/roster/roster-member-add.spec.ts index accdd2a2c51..ab8ef1dbc77 100644 --- a/src/m365/planner/commands/roster/roster-member-add.spec.ts +++ b/src/m365/planner/commands/roster/roster-member-add.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -36,7 +36,7 @@ describe(commands.ROSTER_MEMBER_ADD, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/planner/commands/roster/roster-member-get.spec.ts b/src/m365/planner/commands/roster/roster-member-get.spec.ts index 79bdf3de00c..847b7177f98 100644 --- a/src/m365/planner/commands/roster/roster-member-get.spec.ts +++ b/src/m365/planner/commands/roster/roster-member-get.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -40,7 +40,7 @@ describe(commands.ROSTER_MEMBER_GET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/planner/commands/roster/roster-member-remove.spec.ts b/src/m365/planner/commands/roster/roster-member-remove.spec.ts index 027f9edd30e..aeb93e2853c 100644 --- a/src/m365/planner/commands/roster/roster-member-remove.spec.ts +++ b/src/m365/planner/commands/roster/roster-member-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -52,7 +52,7 @@ describe(commands.ROSTER_MEMBER_REMOVE, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -68,7 +68,7 @@ describe(commands.ROSTER_MEMBER_REMOVE, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -80,7 +80,7 @@ describe(commands.ROSTER_MEMBER_REMOVE, () => { sinonUtil.restore([ request.delete, request.get, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -140,8 +140,8 @@ describe(commands.ROSTER_MEMBER_REMOVE, () => { it('prompts before removing the last roster member when force option not passed', async () => { let secondPromptConfirm: boolean = false; - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').callsFake(async (config: ConfirmationConfig) => { + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').callsFake(async (config: ConfirmationConfig) => { if (config.message === `Are you sure you want to remove member '${validUserId}'?`) { return true; } @@ -209,8 +209,8 @@ describe(commands.ROSTER_MEMBER_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -244,8 +244,8 @@ describe(commands.ROSTER_MEMBER_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { diff --git a/src/m365/planner/commands/roster/roster-member-remove.ts b/src/m365/planner/commands/roster/roster-member-remove.ts index e955a16edd0..de36d154f42 100644 --- a/src/m365/planner/commands/roster/roster-member-remove.ts +++ b/src/m365/planner/commands/roster/roster-member-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -100,7 +100,7 @@ class PlannerRosterMemberRemoveCommand extends GraphCommand { await this.removeRosterMember(args); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove member '${args.options.userId || args.options.userName}'?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove member '${args.options.userId || args.options.userName}'?` }); if (result) { await this.removeRosterMember(args); @@ -142,7 +142,7 @@ class PlannerRosterMemberRemoveCommand extends GraphCommand { if (!args.options.force) { const rosterMembers = await odata.getAllItems(`${this.resource}/beta/planner/rosters/${args.options.rosterId}/members?$select=Id`); if (rosterMembers.length === 1) { - const result = await Cli.promptForConfirmation({ message: `You are about to remove the last member of this Roster. When this happens, the Roster and all its contents will be deleted within 30 days. Are you sure you want to proceed?` }); + const result = await cli.promptForConfirmation({ message: `You are about to remove the last member of this Roster. When this happens, the Roster and all its contents will be deleted within 30 days. Are you sure you want to proceed?` }); return result; } diff --git a/src/m365/planner/commands/roster/roster-plan-list.spec.ts b/src/m365/planner/commands/roster/roster-plan-list.spec.ts index d3940fcbc79..29856e27509 100644 --- a/src/m365/planner/commands/roster/roster-plan-list.spec.ts +++ b/src/m365/planner/commands/roster/roster-plan-list.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -61,7 +61,7 @@ describe(commands.ROSTER_PLAN_LIST, () => { accessToken: 'abc', expiresOn: new Date() }; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/planner/commands/roster/roster-remove.spec.ts b/src/m365/planner/commands/roster/roster-remove.spec.ts index 7b2911baf0a..8b0749d6bcd 100644 --- a/src/m365/planner/commands/roster/roster-remove.spec.ts +++ b/src/m365/planner/commands/roster/roster-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; import request from '../../../../request.js'; @@ -44,7 +44,7 @@ describe(commands.PLAN_REMOVE, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -55,7 +55,7 @@ describe(commands.PLAN_REMOVE, () => { afterEach(() => { sinonUtil.restore([ request.delete, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -121,8 +121,8 @@ describe(commands.PLAN_REMOVE, () => { throw 'Invalid Request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { diff --git a/src/m365/planner/commands/roster/roster-remove.ts b/src/m365/planner/commands/roster/roster-remove.ts index 2195c0b83b4..7ea62eb305b 100644 --- a/src/m365/planner/commands/roster/roster-remove.ts +++ b/src/m365/planner/commands/roster/roster-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -59,7 +59,7 @@ class PlannerRosterRemoveCommand extends GraphCommand { await this.removeRoster(args, logger); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove roster ${args.options.id}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove roster ${args.options.id}?` }); if (result) { await this.removeRoster(args, logger); diff --git a/src/m365/planner/commands/task/task-add.spec.ts b/src/m365/planner/commands/task/task-add.spec.ts index d12ddfb2312..e1f602577b0 100644 --- a/src/m365/planner/commands/task/task-add.spec.ts +++ b/src/m365/planner/commands/task/task-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -163,14 +163,12 @@ describe(commands.TASK_ADD, () => { ] }; - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); @@ -180,7 +178,7 @@ describe(commands.TASK_ADD, () => { accessToken: 'abc', expiresOn: new Date() }; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/planner/commands/task/task-checklistitem-add.ts b/src/m365/planner/commands/task/task-checklistitem-add.ts index b88c05f2508..46159b28b1d 100644 --- a/src/m365/planner/commands/task/task-checklistitem-add.ts +++ b/src/m365/planner/commands/task/task-checklistitem-add.ts @@ -1,6 +1,6 @@ import { PlannerTaskDetails } from '@microsoft/microsoft-graph-types'; import { v4 } from 'uuid'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -85,7 +85,7 @@ class PlannerTaskChecklistItemAddCommand extends GraphCommand { }; const result = await request.patch(requestOptions); - if (!Cli.shouldTrimOutput(args.options.output)) { + if (!cli.shouldTrimOutput(args.options.output)) { await logger.log(result.checklist); } else { diff --git a/src/m365/planner/commands/task/task-checklistitem-list.ts b/src/m365/planner/commands/task/task-checklistitem-list.ts index 720de7c8fce..43867406a9b 100644 --- a/src/m365/planner/commands/task/task-checklistitem-list.ts +++ b/src/m365/planner/commands/task/task-checklistitem-list.ts @@ -1,4 +1,4 @@ -import { Cli } from "../../../../cli/Cli.js"; +import { cli } from "../../../../cli/cli.js"; import { Logger } from "../../../../cli/Logger.js"; import GlobalOptions from "../../../../GlobalOptions.js"; import request, { CliRequestOptions } from "../../../../request.js"; @@ -57,7 +57,7 @@ class PlannerTaskChecklistItemListCommand extends GraphCommand { try { const res = await request.get(requestOptions); - if (!args.options.output || !Cli.shouldTrimOutput(args.options.output)) { + if (!args.options.output || !cli.shouldTrimOutput(args.options.output)) { await logger.log(res.checklist); } else { diff --git a/src/m365/planner/commands/task/task-checklistitem-remove.spec.ts b/src/m365/planner/commands/task/task-checklistitem-remove.spec.ts index 357d3d72cbd..7206e9699cb 100644 --- a/src/m365/planner/commands/task/task-checklistitem-remove.spec.ts +++ b/src/m365/planner/commands/task/task-checklistitem-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -46,8 +46,8 @@ describe(commands.TASK_CHECKLISTITEM_REMOVE, () => { accessToken: 'abc', expiresOn: new Date() }; - sinon.stub(Cli.getInstance().config, 'all').value({}); - commandInfo = Cli.getCommandInfo(command); + sinon.stub(cli.getConfig(), 'all').value({}); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -63,7 +63,7 @@ describe(commands.TASK_CHECKLISTITEM_REMOVE, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(true); }); @@ -75,7 +75,7 @@ describe(commands.TASK_CHECKLISTITEM_REMOVE, () => { sinonUtil.restore([ request.get, request.patch, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -94,8 +94,8 @@ describe(commands.TASK_CHECKLISTITEM_REMOVE, () => { }); it('prompts before removal when force option not passed', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); diff --git a/src/m365/planner/commands/task/task-checklistitem-remove.ts b/src/m365/planner/commands/task/task-checklistitem-remove.ts index c4d509c0411..30d83bcd5e5 100644 --- a/src/m365/planner/commands/task/task-checklistitem-remove.ts +++ b/src/m365/planner/commands/task/task-checklistitem-remove.ts @@ -1,5 +1,5 @@ import { PlannerTaskDetails } from '@microsoft/microsoft-graph-types'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -59,7 +59,7 @@ class PlannerTaskChecklistItemRemoveCommand extends GraphCommand { await this.removeChecklistitem(args); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the checklist item with id ${args.options.id} from the planner task?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the checklist item with id ${args.options.id} from the planner task?` }); if (result) { await this.removeChecklistitem(args); diff --git a/src/m365/planner/commands/task/task-get.spec.ts b/src/m365/planner/commands/task/task-get.spec.ts index a298e203ef7..6a96a553765 100644 --- a/src/m365/planner/commands/task/task-get.spec.ts +++ b/src/m365/planner/commands/task/task-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -16,7 +16,6 @@ import command from './task-get.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.TASK_GET, () => { - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; @@ -133,7 +132,6 @@ describe(commands.TASK_GET, () => { }; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); @@ -143,8 +141,8 @@ describe(commands.TASK_GET, () => { accessToken: 'abc', expiresOn: new Date() }; - commandInfo = Cli.getCommandInfo(command); - sinon.stub(Cli.getInstance(), 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { + commandInfo = cli.getCommandInfo(command); + sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { if (settingName === 'prompt') { return false; } @@ -173,7 +171,7 @@ describe(commands.TASK_GET, () => { afterEach(() => { sinonUtil.restore([ request.get, - Cli.handleMultipleResultsFound, + cli.handleMultipleResultsFound, cli.getSettingWithDefaultValue ]); }); @@ -482,7 +480,7 @@ describe(commands.TASK_GET, () => { throw 'Invalid Request'; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves(singleBucketByNameResponse.value[0]); + sinon.stub(cli, 'handleMultipleResultsFound').resolves(singleBucketByNameResponse.value[0]); await command.action(logger, { options: { @@ -561,7 +559,7 @@ describe(commands.TASK_GET, () => { throw 'Invalid Request'; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves(singleTaskByTitleResponse.value[0]); + sinon.stub(cli, 'handleMultipleResultsFound').resolves(singleTaskByTitleResponse.value[0]); await command.action(logger, { options: { diff --git a/src/m365/planner/commands/task/task-get.ts b/src/m365/planner/commands/task/task-get.ts index f83e4e4a4f1..39c57777c5e 100644 --- a/src/m365/planner/commands/task/task-get.ts +++ b/src/m365/planner/commands/task/task-get.ts @@ -8,7 +8,7 @@ import { planner } from '../../../../utils/planner.js'; import { validation } from '../../../../utils/validation.js'; import GraphCommand from '../../../base/GraphCommand.js'; import commands from '../../commands.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; interface CommandArgs { options: Options; @@ -192,7 +192,7 @@ class PlannerTaskGetCommand extends GraphCommand { if (tasks.length > 1) { const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', tasks); - const result = (await Cli.handleMultipleResultsFound(`Multiple tasks with title '${options.title}' found.`, resultAsKeyValuePair)); + const result = (await cli.handleMultipleResultsFound(`Multiple tasks with title '${options.title}' found.`, resultAsKeyValuePair)); return result.id!; } @@ -223,7 +223,7 @@ class PlannerTaskGetCommand extends GraphCommand { if (buckets.length > 1) { const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', buckets); - const result = await Cli.handleMultipleResultsFound(`Multiple buckets with name '${options.bucketName}' found.`, resultAsKeyValuePair); + const result = await cli.handleMultipleResultsFound(`Multiple buckets with name '${options.bucketName}' found.`, resultAsKeyValuePair); return result.id!; } diff --git a/src/m365/planner/commands/task/task-list.spec.ts b/src/m365/planner/commands/task/task-list.spec.ts index 396d1a6df53..9a6b2b77d45 100644 --- a/src/m365/planner/commands/task/task-list.spec.ts +++ b/src/m365/planner/commands/task/task-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -268,14 +268,12 @@ describe(commands.TASK_LIST, () => { ] }; - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); @@ -285,8 +283,8 @@ describe(commands.TASK_LIST, () => { accessToken: 'abc', expiresOn: new Date() }; - commandInfo = Cli.getCommandInfo(command); - sinon.stub(Cli.getInstance(), 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { + commandInfo = cli.getCommandInfo(command); + sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { if (settingName === 'prompt') { return false; } diff --git a/src/m365/planner/commands/task/task-reference-add.spec.ts b/src/m365/planner/commands/task/task-reference-add.spec.ts index aed0899890c..c2a0d917242 100644 --- a/src/m365/planner/commands/task/task-reference-add.spec.ts +++ b/src/m365/planner/commands/task/task-reference-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -50,7 +50,7 @@ describe(commands.TASK_REFERENCE_ADD, () => { accessToken: 'abc', expiresOn: new Date() }; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/planner/commands/task/task-reference-remove.spec.ts b/src/m365/planner/commands/task/task-reference-remove.spec.ts index c52b84fd8ec..567f0541412 100644 --- a/src/m365/planner/commands/task/task-reference-remove.spec.ts +++ b/src/m365/planner/commands/task/task-reference-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -60,8 +60,8 @@ describe(commands.TASK_REFERENCE_REMOVE, () => { accessToken: 'abc', expiresOn: new Date() }; - sinon.stub(Cli.getInstance().config, 'all').value({}); - commandInfo = Cli.getCommandInfo(command); + sinon.stub(cli.getConfig(), 'all').value({}); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -78,7 +78,7 @@ describe(commands.TASK_REFERENCE_REMOVE, () => { } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(true); }); @@ -90,7 +90,7 @@ describe(commands.TASK_REFERENCE_REMOVE, () => { sinonUtil.restore([ request.get, request.patch, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -139,8 +139,8 @@ describe(commands.TASK_REFERENCE_REMOVE, () => { }); it('prompts before removal when force option not passed', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); diff --git a/src/m365/planner/commands/task/task-reference-remove.ts b/src/m365/planner/commands/task/task-reference-remove.ts index 001e1433a40..b847476adcb 100644 --- a/src/m365/planner/commands/task/task-reference-remove.ts +++ b/src/m365/planner/commands/task/task-reference-remove.ts @@ -1,5 +1,5 @@ import { PlannerTaskDetails } from '@microsoft/microsoft-graph-types'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -83,7 +83,7 @@ class PlannerTaskReferenceRemoveCommand extends GraphCommand { await this.removeReference(logger, args); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the reference from the Planner task?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the reference from the Planner task?` }); if (result) { await this.removeReference(logger, args); diff --git a/src/m365/planner/commands/task/task-remove.spec.ts b/src/m365/planner/commands/task/task-remove.spec.ts index 18253d96462..268525fe96f 100644 --- a/src/m365/planner/commands/task/task-remove.spec.ts +++ b/src/m365/planner/commands/task/task-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -16,7 +16,6 @@ import command from './task-remove.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.TASK_REMOVE, () => { - let cli: Cli; let log: string[]; let logger: Logger; let commandInfo: CommandInfo; @@ -122,7 +121,6 @@ describe(commands.TASK_REMOVE, () => { }; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); @@ -132,7 +130,7 @@ describe(commands.TASK_REMOVE, () => { accessToken: 'abc', expiresOn: new Date() }; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -148,7 +146,7 @@ describe(commands.TASK_REMOVE, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -160,9 +158,9 @@ describe(commands.TASK_REMOVE, () => { sinonUtil.restore([ request.get, request.delete, - Cli.promptForConfirmation, + cli.promptForConfirmation, cli.getSettingWithDefaultValue, - Cli.handleMultipleResultsFound + cli.handleMultipleResultsFound ]); }); @@ -481,10 +479,10 @@ describe(commands.TASK_REMOVE, () => { throw 'Invalid Request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves(singleBucketByNameResponse.value[0]); + sinon.stub(cli, 'handleMultipleResultsFound').resolves(singleBucketByNameResponse.value[0]); await command.action(logger, { options: { @@ -572,10 +570,10 @@ describe(commands.TASK_REMOVE, () => { throw 'Invalid Request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves(singleTaskByTitleResponse.value[0]); + sinon.stub(cli, 'handleMultipleResultsFound').resolves(singleTaskByTitleResponse.value[0]); await command.action(logger, { options: { @@ -661,8 +659,8 @@ describe(commands.TASK_REMOVE, () => { throw 'Invalid Request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -702,8 +700,8 @@ describe(commands.TASK_REMOVE, () => { throw 'Invalid Request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -740,8 +738,8 @@ describe(commands.TASK_REMOVE, () => { throw 'Invalid Request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { diff --git a/src/m365/planner/commands/task/task-remove.ts b/src/m365/planner/commands/task/task-remove.ts index 2c572b9522b..5eaecf18171 100644 --- a/src/m365/planner/commands/task/task-remove.ts +++ b/src/m365/planner/commands/task/task-remove.ts @@ -1,5 +1,5 @@ import { PlannerBucket, PlannerPlan, PlannerTask } from '@microsoft/microsoft-graph-types'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -158,7 +158,7 @@ class PlannerTaskRemoveCommand extends GraphCommand { await removeTask(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the task ${args.options.id || args.options.title}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the task ${args.options.id || args.options.title}?` }); if (result) { await removeTask(); @@ -193,7 +193,7 @@ class PlannerTaskRemoveCommand extends GraphCommand { if (filteredtasks.length > 1) { const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', filteredtasks); - return await Cli.handleMultipleResultsFound(`Multiple tasks with title '${title}' found.`, resultAsKeyValuePair); + return await cli.handleMultipleResultsFound(`Multiple tasks with title '${title}' found.`, resultAsKeyValuePair); } return filteredtasks[0]; @@ -224,7 +224,7 @@ class PlannerTaskRemoveCommand extends GraphCommand { if (filteredBuckets.length > 1) { const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', filteredBuckets); - const result = await Cli.handleMultipleResultsFound(`Multiple buckets with name '${bucketName}' found.`, resultAsKeyValuePair); + const result = await cli.handleMultipleResultsFound(`Multiple buckets with name '${bucketName}' found.`, resultAsKeyValuePair); return result.id!; } diff --git a/src/m365/planner/commands/task/task-set.spec.ts b/src/m365/planner/commands/task/task-set.spec.ts index 2535dbde55d..55d25a588fd 100644 --- a/src/m365/planner/commands/task/task-set.spec.ts +++ b/src/m365/planner/commands/task/task-set.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -135,14 +135,12 @@ describe(commands.TASK_SET, () => { ] }; - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); @@ -152,8 +150,8 @@ describe(commands.TASK_SET, () => { accessToken: 'abc', expiresOn: new Date() }; - commandInfo = Cli.getCommandInfo(command); - sinon.stub(Cli.getInstance(), 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { + commandInfo = cli.getCommandInfo(command); + sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { if (settingName === 'prompt') { return false; } diff --git a/src/m365/planner/commands/tenant/tenant-settings-set.spec.ts b/src/m365/planner/commands/tenant/tenant-settings-set.spec.ts index b8d301c9f1c..dfc3cde019a 100644 --- a/src/m365/planner/commands/tenant/tenant-settings-set.spec.ts +++ b/src/m365/planner/commands/tenant/tenant-settings-set.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -35,7 +35,7 @@ describe(commands.TENANT_SETTINGS_SET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/pp/commands/aibuildermodel/aibuildermodel-get.spec.ts b/src/m365/pp/commands/aibuildermodel/aibuildermodel-get.spec.ts index a4126d6922b..b105f523ace 100644 --- a/src/m365/pp/commands/aibuildermodel/aibuildermodel-get.spec.ts +++ b/src/m365/pp/commands/aibuildermodel/aibuildermodel-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -16,7 +16,6 @@ import { session } from '../../../../utils/session.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.AIBUILDERMODEL_GET, () => { - let cli: Cli; let commandInfo: CommandInfo; //#region Mocked Responses const validEnvironment = '4be50206-9576-4237-8b17-38d8aadfaa36'; @@ -72,14 +71,13 @@ describe(commands.AIBUILDERMODEL_GET, () => { let loggerLogSpy: sinon.SinonSpy; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); - sinon.stub(Cli.getInstance(), 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { + commandInfo = cli.getCommandInfo(command); + sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { if (settingName === 'prompt') { return false; } @@ -109,7 +107,7 @@ describe(commands.AIBUILDERMODEL_GET, () => { request.get, powerPlatform.getDynamicsInstanceApiUrl, cli.getSettingWithDefaultValue, - Cli.handleMultipleResultsFound + cli.handleMultipleResultsFound ]); }); @@ -200,7 +198,7 @@ describe(commands.AIBUILDERMODEL_GET, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves(aiBuilderModelResponse.value[0]); + sinon.stub(cli, 'handleMultipleResultsFound').resolves(aiBuilderModelResponse.value[0]); await command.action(logger, { options: { verbose: true, environment: validEnvironment, name: validName } }); assert(loggerLogSpy.calledWith(aiBuilderModelResponse.value[0])); diff --git a/src/m365/pp/commands/aibuildermodel/aibuildermodel-get.ts b/src/m365/pp/commands/aibuildermodel/aibuildermodel-get.ts index a33bdb766ec..fff84db2a40 100644 --- a/src/m365/pp/commands/aibuildermodel/aibuildermodel-get.ts +++ b/src/m365/pp/commands/aibuildermodel/aibuildermodel-get.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -125,7 +125,7 @@ class PpAiBuilderModelGetCommand extends PowerPlatformCommand { if (result.value.length > 1) { const resultAsKeyValuePair = formatting.convertArrayToHashTable('msdyn_aimodelid', result.value); - return await Cli.handleMultipleResultsFound(`Multiple AI builder models with name '${options.name}' found.`, resultAsKeyValuePair); + return await cli.handleMultipleResultsFound(`Multiple AI builder models with name '${options.name}' found.`, resultAsKeyValuePair); } return result.value[0]; diff --git a/src/m365/pp/commands/aibuildermodel/aibuildermodel-remove.spec.ts b/src/m365/pp/commands/aibuildermodel/aibuildermodel-remove.spec.ts index bee0d0345db..aef9b0bb940 100644 --- a/src/m365/pp/commands/aibuildermodel/aibuildermodel-remove.spec.ts +++ b/src/m365/pp/commands/aibuildermodel/aibuildermodel-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -73,7 +73,7 @@ describe(commands.AIBUILDERMODEL_REMOVE, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -90,7 +90,7 @@ describe(commands.AIBUILDERMODEL_REMOVE, () => { } }; loggerLogToStderrSpy = sinon.spy(logger, 'logToStderr'); - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -102,8 +102,8 @@ describe(commands.AIBUILDERMODEL_REMOVE, () => { sinonUtil.restore([ request.delete, powerPlatform.getDynamicsInstanceApiUrl, - Cli.promptForConfirmation, - Cli.executeCommandWithOutput + cli.promptForConfirmation, + cli.executeCommandWithOutput ]); }); @@ -155,8 +155,8 @@ describe(commands.AIBUILDERMODEL_REMOVE, () => { it('aborts removing the specified AI builder model owned by the currently signed-in user when force option not passed and prompt not confirmed', async () => { const postSpy = sinon.spy(request, 'delete'); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { environmentName: validEnvironment, @@ -169,7 +169,7 @@ describe(commands.AIBUILDERMODEL_REMOVE, () => { it('removes the specified AI builder model owned by the currently signed-in user when prompt confirmed', async () => { sinon.stub(powerPlatform, 'getDynamicsInstanceApiUrl').callsFake(async () => envUrl); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === ppAiBuilderModelGetCommand) { return ({ stdout: aiBuilderModelResponse @@ -187,8 +187,8 @@ describe(commands.AIBUILDERMODEL_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { debug: true, diff --git a/src/m365/pp/commands/aibuildermodel/aibuildermodel-remove.ts b/src/m365/pp/commands/aibuildermodel/aibuildermodel-remove.ts index 47e8c5dfd35..6f7cff5dcb2 100644 --- a/src/m365/pp/commands/aibuildermodel/aibuildermodel-remove.ts +++ b/src/m365/pp/commands/aibuildermodel/aibuildermodel-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import Command from '../../../../Command.js'; import GlobalOptions from '../../../../GlobalOptions.js'; @@ -98,7 +98,7 @@ class PpAiBuilderModelRemoveCommand extends PowerPlatformCommand { await this.deleteAiBuilderModel(args); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove AI builder model '${args.options.id || args.options.name}'?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove AI builder model '${args.options.id || args.options.name}'?` }); if (result) { await this.deleteAiBuilderModel(args); @@ -119,7 +119,7 @@ class PpAiBuilderModelRemoveCommand extends PowerPlatformCommand { verbose: this.verbose }; - const output = await Cli.executeCommandWithOutput(ppAiBuilderModelGetCommand as Command, { options: { ...options, _: [] } }); + const output = await cli.executeCommandWithOutput(ppAiBuilderModelGetCommand as Command, { options: { ...options, _: [] } }); const getAiBuilderModelOutput = JSON.parse(output.stdout); return getAiBuilderModelOutput.msdyn_aimodelid; } diff --git a/src/m365/pp/commands/card/card-clone.spec.ts b/src/m365/pp/commands/card/card-clone.spec.ts index 4e955fca51c..1d0edd986be 100644 --- a/src/m365/pp/commands/card/card-clone.spec.ts +++ b/src/m365/pp/commands/card/card-clone.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -36,7 +36,7 @@ describe(commands.CARD_CLONE, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -60,8 +60,8 @@ describe(commands.CARD_CLONE, () => { request.get, request.post, powerPlatform.getDynamicsInstanceApiUrl, - Cli.promptForConfirmation, - Cli.executeCommandWithOutput + cli.promptForConfirmation, + cli.executeCommandWithOutput ]); }); @@ -102,7 +102,7 @@ describe(commands.CARD_CLONE, () => { it('clones the specified card owned by the currently signed-in user based on the name', async () => { sinon.stub(powerPlatform, 'getDynamicsInstanceApiUrl').callsFake(async () => envUrl); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === ppCardGetCommand) { return ({ stdout: `{ "overwritetime": "1900-01-01T00:00:00Z", "_owningbusinessunit_value": "b419f090-fe22-ec11-b6e5-000d3ab596a1", "solutionid": "fd140aae-4df4-11dd-bd17-0019b9312238", "componentidunique": "e2b1d019-bd9a-491a-b888-693740711319", "_owninguser_value": "4f175d04-b952-ed11-bba2-000d3adf774e", "statecode": 0, "statuscode": 1, "ismanaged": false, "cardid": "${validId}", "_ownerid_value": "4f175d04-b952-ed11-bba2-000d3adf774e", "componentstate": 0, "modifiedon": "2022-10-29T08:22:46Z", "name": "${validName}", "_modifiedby_value": "4f175d04-b952-ed11-bba2-000d3adf774e", "versionnumber": 4463945, "createdon": "2022-10-29T08:22:46Z", "description": " ", "_createdby_value": "4f175d04-b952-ed11-bba2-000d3adf774e", "overriddencreatedon": null, "schemaversion": null, "importsequencenumber": null, "tags": null, "_modifiedonbehalfby_value": null, "utcconversiontimezonecode": null, "publishdate": null, "_createdonbehalfby_value": null, "hiddentags": null, "remixsourceid": null, "sizes": null, "coowners": null, "_owningteam_value": null, "publishsourceid": null, "timezoneruleversionnumber": null, "iscustomizable": { "Value": true, "CanBeChanged": true, "ManagedPropertyLogicalName": "iscustomizableanddeletable"}}` diff --git a/src/m365/pp/commands/card/card-clone.ts b/src/m365/pp/commands/card/card-clone.ts index 53f5dcd2be7..fcd50e0590e 100644 --- a/src/m365/pp/commands/card/card-clone.ts +++ b/src/m365/pp/commands/card/card-clone.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import Command from '../../../../Command.js'; import GlobalOptions from '../../../../GlobalOptions.js'; @@ -110,7 +110,7 @@ class PpCardCloneCommand extends PowerPlatformCommand { verbose: this.verbose }; - const output = await Cli.executeCommandWithOutput(ppCardGetCommand as Command, { options: { ...options, _: [] } }); + const output = await cli.executeCommandWithOutput(ppCardGetCommand as Command, { options: { ...options, _: [] } }); const getCardOutput = JSON.parse(output.stdout); return getCardOutput.cardid; } diff --git a/src/m365/pp/commands/card/card-get.spec.ts b/src/m365/pp/commands/card/card-get.spec.ts index f0970f3750e..8177894e107 100644 --- a/src/m365/pp/commands/card/card-get.spec.ts +++ b/src/m365/pp/commands/card/card-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -75,20 +75,18 @@ describe(commands.CARD_GET, () => { }; //#endregion - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); - sinon.stub(Cli.getInstance(), 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { + commandInfo = cli.getCommandInfo(command); + sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { if (settingName === 'prompt') { return false; } diff --git a/src/m365/pp/commands/card/card-get.ts b/src/m365/pp/commands/card/card-get.ts index ccf17894b9d..e2cb2c48d04 100644 --- a/src/m365/pp/commands/card/card-get.ts +++ b/src/m365/pp/commands/card/card-get.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -126,7 +126,7 @@ class PpCardGetCommand extends PowerPlatformCommand { if (result.value.length > 1) { const resultAsKeyValuePair = formatting.convertArrayToHashTable('cardid', result.value); - return Cli.handleMultipleResultsFound(`Multiple cards with name '${options.name}' found`, resultAsKeyValuePair); + return cli.handleMultipleResultsFound(`Multiple cards with name '${options.name}' found`, resultAsKeyValuePair); } return result.value[0]; diff --git a/src/m365/pp/commands/card/card-remove.spec.ts b/src/m365/pp/commands/card/card-remove.spec.ts index 8fe80c9f698..14e8b47af60 100644 --- a/src/m365/pp/commands/card/card-remove.spec.ts +++ b/src/m365/pp/commands/card/card-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -35,7 +35,7 @@ describe(commands.CARD_REMOVE, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -52,7 +52,7 @@ describe(commands.CARD_REMOVE, () => { } }; loggerLogToStderrSpy = sinon.spy(logger, 'logToStderr'); - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -64,8 +64,8 @@ describe(commands.CARD_REMOVE, () => { sinonUtil.restore([ request.delete, powerPlatform.getDynamicsInstanceApiUrl, - Cli.promptForConfirmation, - Cli.executeCommandWithOutput + cli.promptForConfirmation, + cli.executeCommandWithOutput ]); }); @@ -117,8 +117,8 @@ describe(commands.CARD_REMOVE, () => { it('aborts removing the specified card owned by the currently signed-in user when force option not passed and prompt not confirmed', async () => { const postSpy = sinon.spy(request, 'delete'); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { environmentName: validEnvironment, @@ -131,7 +131,7 @@ describe(commands.CARD_REMOVE, () => { it('removes the specified card owned by the currently signed-in user when prompt confirmed', async () => { sinon.stub(powerPlatform, 'getDynamicsInstanceApiUrl').callsFake(async () => envUrl); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === ppCardGetCommand) { return ({ stdout: `{ "overwritetime": "1900-01-01T00:00:00Z", "_owningbusinessunit_value": "b419f090-fe22-ec11-b6e5-000d3ab596a1", "solutionid": "fd140aae-4df4-11dd-bd17-0019b9312238", "componentidunique": "e2b1d019-bd9a-491a-b888-693740711319", "_owninguser_value": "4f175d04-b952-ed11-bba2-000d3adf774e", "statecode": 0, "statuscode": 1, "ismanaged": false, "cardid": "${validId}", "_ownerid_value": "4f175d04-b952-ed11-bba2-000d3adf774e", "componentstate": 0, "modifiedon": "2022-10-29T08:22:46Z", "name": "${validName}", "_modifiedby_value": "4f175d04-b952-ed11-bba2-000d3adf774e", "versionnumber": 4463945, "createdon": "2022-10-29T08:22:46Z", "description": " ", "_createdby_value": "4f175d04-b952-ed11-bba2-000d3adf774e", "overriddencreatedon": null, "schemaversion": null, "importsequencenumber": null, "tags": null, "_modifiedonbehalfby_value": null, "utcconversiontimezonecode": null, "publishdate": null, "_createdonbehalfby_value": null, "hiddentags": null, "remixsourceid": null, "sizes": null, "coowners": null, "_owningteam_value": null, "publishsourceid": null, "timezoneruleversionnumber": null, "iscustomizable": { "Value": true, "CanBeChanged": true, "ManagedPropertyLogicalName": "iscustomizableanddeletable"}}` @@ -149,8 +149,8 @@ describe(commands.CARD_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { debug: true, diff --git a/src/m365/pp/commands/card/card-remove.ts b/src/m365/pp/commands/card/card-remove.ts index c5d6118cd31..737f743872e 100644 --- a/src/m365/pp/commands/card/card-remove.ts +++ b/src/m365/pp/commands/card/card-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import Command from '../../../../Command.js'; import GlobalOptions from '../../../../GlobalOptions.js'; @@ -98,7 +98,7 @@ class PpCardRemoveCommand extends PowerPlatformCommand { await this.deleteCard(args); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove card '${args.options.id || args.options.name}'?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove card '${args.options.id || args.options.name}'?` }); if (result) { await this.deleteCard(args); @@ -119,7 +119,7 @@ class PpCardRemoveCommand extends PowerPlatformCommand { verbose: this.verbose }; - const output = await Cli.executeCommandWithOutput(ppCardGetCommand as Command, { options: { ...options, _: [] } }); + const output = await cli.executeCommandWithOutput(ppCardGetCommand as Command, { options: { ...options, _: [] } }); const getCardOutput = JSON.parse(output.stdout); return getCardOutput.cardid; } diff --git a/src/m365/pp/commands/chatbot/chatbot-get.spec.ts b/src/m365/pp/commands/chatbot/chatbot-get.spec.ts index 2dd8467a65f..c3f8b7216ef 100644 --- a/src/m365/pp/commands/chatbot/chatbot-get.spec.ts +++ b/src/m365/pp/commands/chatbot/chatbot-get.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -17,7 +17,6 @@ import command from './chatbot-get.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.CHATBOT_GET, () => { - let cli: Cli; let commandInfo: CommandInfo; //#region Mocked Responses const validEnvironment = '4be50206-9576-4237-8b17-38d8aadfaa36'; @@ -83,14 +82,13 @@ describe(commands.CHATBOT_GET, () => { let loggerLogSpy: sinon.SinonSpy; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); - sinon.stub(Cli.getInstance(), 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { + commandInfo = cli.getCommandInfo(command); + sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { if (settingName === 'prompt') { return false; } @@ -120,7 +118,7 @@ describe(commands.CHATBOT_GET, () => { request.get, powerPlatform.getDynamicsInstanceApiUrl, cli.getSettingWithDefaultValue, - Cli.handleMultipleResultsFound + cli.handleMultipleResultsFound ]); }); @@ -215,7 +213,7 @@ describe(commands.CHATBOT_GET, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves(botResponse.value[0]); + sinon.stub(cli, 'handleMultipleResultsFound').resolves(botResponse.value[0]); await command.action(logger, { options: { verbose: true, environment: validEnvironment, name: validName } }); assert(loggerLogSpy.calledWith(botResponse.value[0])); diff --git a/src/m365/pp/commands/chatbot/chatbot-get.ts b/src/m365/pp/commands/chatbot/chatbot-get.ts index 9c77c6913ee..966aeefe2a1 100644 --- a/src/m365/pp/commands/chatbot/chatbot-get.ts +++ b/src/m365/pp/commands/chatbot/chatbot-get.ts @@ -6,7 +6,7 @@ import { powerPlatform } from '../../../../utils/powerPlatform.js'; import { validation } from '../../../../utils/validation.js'; import PowerPlatformCommand from '../../../base/PowerPlatformCommand.js'; import commands from '../../commands.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; interface CommandArgs { options: Options; @@ -122,7 +122,7 @@ class PpChatbotGetCommand extends PowerPlatformCommand { if (result.value.length > 1) { const resultAsKeyValuePair = formatting.convertArrayToHashTable('botid', result.value); - return await Cli.handleMultipleResultsFound(`Multiple chatbots with name '${options.name}' found.`, resultAsKeyValuePair); + return await cli.handleMultipleResultsFound(`Multiple chatbots with name '${options.name}' found.`, resultAsKeyValuePair); } if (result.value.length === 0) { diff --git a/src/m365/pp/commands/chatbot/chatbot-remove.spec.ts b/src/m365/pp/commands/chatbot/chatbot-remove.spec.ts index 48d1483fc04..f6a1668ac65 100644 --- a/src/m365/pp/commands/chatbot/chatbot-remove.spec.ts +++ b/src/m365/pp/commands/chatbot/chatbot-remove.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -35,7 +35,7 @@ describe(commands.CHATBOT_REMOVE, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -52,7 +52,7 @@ describe(commands.CHATBOT_REMOVE, () => { } }; loggerLogToStderrSpy = sinon.spy(logger, 'logToStderr'); - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -64,8 +64,8 @@ describe(commands.CHATBOT_REMOVE, () => { sinonUtil.restore([ request.post, powerPlatform.getDynamicsInstanceApiUrl, - Cli.promptForConfirmation, - Cli.executeCommandWithOutput + cli.promptForConfirmation, + cli.executeCommandWithOutput ]); }); @@ -128,7 +128,7 @@ describe(commands.CHATBOT_REMOVE, () => { it('removes the specified chatbot owned by the currently signed-in user when prompt confirmed by name', async () => { sinon.stub(powerPlatform, 'getDynamicsInstanceApiUrl').callsFake(async () => envUrl); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === ppChatbotGetCommand) { return ({ stdout: `{ "authenticationtrigger": 0, "_owningbusinessunit_value": "6da087c1-1c4d-ed11-bba1-000d3a2caf7f", "statuscode": 1, "createdon": "2022-11-19T10:42:22Z", "statecode": 0, "schemaname": "new_bot_23f5f58697fd43d595eb451c9797a53d", "_ownerid_value": "5fa787c1-1c4d-ed11-bba1-000d3a2caf7f", "name": "CLI 365 Chatbot", "solutionid": "fd140aae-4df4-11dd-bd17-0019b9312238", "ismanaged": false, "versionnumber": 1429641, "publishedon": "2022-11-19T19:19:53Z", "timezoneruleversionnumber": 0, "language": 1033, "_modifiedby_value": "5fa787c1-1c4d-ed11-bba1-000d3a2caf7f", "overwritetime": "1900-01-01T00:00:00Z", "modifiedon": "2022-11-19T20:19:57Z", "componentstate": 0, "botid": "3a081d91-5ea8-40a7-8ac9-abbaa3fcb893", "_createdby_value": "5fa787c1-1c4d-ed11-bba1-000d3a2caf7f", "componentidunique": "cdcd6496-e25d-4ad1-91cf-3f4d547fdd23", "authenticationmode": 1, "_owninguser_value": "5fa787c1-1c4d-ed11-bba1-000d3a2caf7f", "accesscontrolpolicy": 0, "runtimeprovider": 0, "_publishedby_value": null, "authenticationconfiguration": null, "authorizedsecuritygroupids": null, "overriddencreatedon": null, "applicationmanifestinformation": null, "importsequencenumber": null, "synchronizationstatus": null, "_modifiedonbehalfby_value": null, "template": null, "_providerconnectionreferenceid_value": null, "configuration": null, "utcconversiontimezonecode": null, "_createdonbehalfby_value": null, "iconbase64": null, "supportedlanguages": null, "_owningteam_value": null, "iscustomizable": { "Value": true, "CanBeChanged": true, "ManagedPropertyLogicalName": "iscustomizableanddeletable" } }` @@ -146,8 +146,8 @@ describe(commands.CHATBOT_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { verbose: true, diff --git a/src/m365/pp/commands/chatbot/chatbot-remove.ts b/src/m365/pp/commands/chatbot/chatbot-remove.ts index 736575a21d8..66615db12aa 100644 --- a/src/m365/pp/commands/chatbot/chatbot-remove.ts +++ b/src/m365/pp/commands/chatbot/chatbot-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import Command from '../../../../Command.js'; import GlobalOptions from '../../../../GlobalOptions.js'; @@ -98,7 +98,7 @@ class PpChatbotRemoveCommand extends PowerPlatformCommand { await this.deleteChatbot(args); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove chatbot '${args.options.id || args.options.name}'?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove chatbot '${args.options.id || args.options.name}'?` }); if (result) { await this.deleteChatbot(args); @@ -119,7 +119,7 @@ class PpChatbotRemoveCommand extends PowerPlatformCommand { verbose: this.verbose }; - const output = await Cli.executeCommandWithOutput(ppChatbotGetCommand as Command, { options: { ...options, _: [] } }); + const output = await cli.executeCommandWithOutput(ppChatbotGetCommand as Command, { options: { ...options, _: [] } }); const getBotOutput = JSON.parse(output.stdout); return getBotOutput.botid; } diff --git a/src/m365/pp/commands/dataverse/dataverse-table-remove.spec.ts b/src/m365/pp/commands/dataverse/dataverse-table-remove.spec.ts index 9b7c2e3c658..3253ea98ead 100644 --- a/src/m365/pp/commands/dataverse/dataverse-table-remove.spec.ts +++ b/src/m365/pp/commands/dataverse/dataverse-table-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; import request from '../../../../request.js'; @@ -47,7 +47,7 @@ describe(commands.DATAVERSE_TABLE_REMOVE, () => { } }; loggerLogToStderrSpy = sinon.spy(logger, 'logToStderr'); - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -59,7 +59,7 @@ describe(commands.DATAVERSE_TABLE_REMOVE, () => { sinonUtil.restore([ request.delete, powerPlatform.getDynamicsInstanceApiUrl, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -110,8 +110,8 @@ describe(commands.DATAVERSE_TABLE_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { debug: true, diff --git a/src/m365/pp/commands/dataverse/dataverse-table-remove.ts b/src/m365/pp/commands/dataverse/dataverse-table-remove.ts index 564264c2128..b3f596affb1 100644 --- a/src/m365/pp/commands/dataverse/dataverse-table-remove.ts +++ b/src/m365/pp/commands/dataverse/dataverse-table-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -68,7 +68,7 @@ class PpDataverseTableRemoveCommand extends PowerPlatformCommand { await this.removeDataverseTable(args.options); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the dataverse table ${args.options.name}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the dataverse table ${args.options.name}?` }); if (result) { await this.removeDataverseTable(args.options); diff --git a/src/m365/pp/commands/dataverse/dataverse-table-row-list.spec.ts b/src/m365/pp/commands/dataverse/dataverse-table-row-list.spec.ts index a2215fbc48c..ebd3803b992 100644 --- a/src/m365/pp/commands/dataverse/dataverse-table-row-list.spec.ts +++ b/src/m365/pp/commands/dataverse/dataverse-table-row-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -61,7 +61,7 @@ describe(commands.DATAVERSE_TABLE_ROW_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/pp/commands/dataverse/dataverse-table-row-remove.spec.ts b/src/m365/pp/commands/dataverse/dataverse-table-row-remove.spec.ts index 856d7d07f27..c5c0e2103d0 100644 --- a/src/m365/pp/commands/dataverse/dataverse-table-row-remove.spec.ts +++ b/src/m365/pp/commands/dataverse/dataverse-table-row-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -38,7 +38,7 @@ describe(commands.DATAVERSE_TABLE_ROW_REMOVE, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -55,7 +55,7 @@ describe(commands.DATAVERSE_TABLE_ROW_REMOVE, () => { } }; loggerLogToStderrSpy = sinon.spy(logger, 'logToStderr'); - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -68,8 +68,8 @@ describe(commands.DATAVERSE_TABLE_ROW_REMOVE, () => { request.get, request.delete, powerPlatform.getDynamicsInstanceApiUrl, - Cli.promptForConfirmation, - Cli.executeCommandWithOutput + cli.promptForConfirmation, + cli.executeCommandWithOutput ]); }); @@ -122,8 +122,8 @@ describe(commands.DATAVERSE_TABLE_ROW_REMOVE, () => { it('aborts removing the specified row from a dataverse table owned by the currently signed-in user when force option not passed and prompt not confirmed', async () => { const postSpy = sinon.spy(request, 'delete'); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { environmentName: validEnvironment, @@ -144,8 +144,8 @@ describe(commands.DATAVERSE_TABLE_ROW_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { debug: true, diff --git a/src/m365/pp/commands/dataverse/dataverse-table-row-remove.ts b/src/m365/pp/commands/dataverse/dataverse-table-row-remove.ts index c49e530effa..da10b5ceca7 100644 --- a/src/m365/pp/commands/dataverse/dataverse-table-row-remove.ts +++ b/src/m365/pp/commands/dataverse/dataverse-table-row-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -100,7 +100,7 @@ class PpDataverseTableRowRemoveCommand extends PowerPlatformCommand { await this.deleteTableRow(logger, args); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove row '${args.options.id}' from table '${args.options.tableName || args.options.entitySetName}'?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove row '${args.options.id}' from table '${args.options.tableName || args.options.entitySetName}'?` }); if (result) { await this.deleteTableRow(logger, args); diff --git a/src/m365/pp/commands/gateway/gateway-get.spec.ts b/src/m365/pp/commands/gateway/gateway-get.spec.ts index 42b1edc082f..acccf65666e 100644 --- a/src/m365/pp/commands/gateway/gateway-get.spec.ts +++ b/src/m365/pp/commands/gateway/gateway-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -36,7 +36,7 @@ describe(commands.GATEWAY_GET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/pp/commands/managementapp/managementapp-add.spec.ts b/src/m365/pp/commands/managementapp/managementapp-add.spec.ts index 3d2ba28d6c3..ac17f73ab8a 100644 --- a/src/m365/pp/commands/managementapp/managementapp-add.spec.ts +++ b/src/m365/pp/commands/managementapp/managementapp-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,20 +15,18 @@ import command from './managementapp-add.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.MANAGEMENTAPP_ADD, () => { - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -52,7 +50,7 @@ describe(commands.MANAGEMENTAPP_ADD, () => { request.get, request.put, cli.getSettingWithDefaultValue, - Cli.handleMultipleResultsFound + cli.handleMultipleResultsFound ]); }); @@ -144,7 +142,7 @@ describe(commands.MANAGEMENTAPP_ADD, () => { throw `Invalid request ${JSON.stringify(opts)}`; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves({ + sinon.stub(cli, 'handleMultipleResultsFound').resolves({ "id": "340a4aa3-1af6-43ac-87d8-189819003952", "appId": "9b1b1e42-794b-4c71-93ac-5ed92488b67f", "createdDateTime": "2019-10-29T17:46:55Z", diff --git a/src/m365/pp/commands/managementapp/managementapp-add.ts b/src/m365/pp/commands/managementapp/managementapp-add.ts index 9fcd248cebf..c0468c71a06 100644 --- a/src/m365/pp/commands/managementapp/managementapp-add.ts +++ b/src/m365/pp/commands/managementapp/managementapp-add.ts @@ -6,7 +6,7 @@ import { formatting } from '../../../../utils/formatting.js'; import { validation } from '../../../../utils/validation.js'; import PowerPlatformCommand from '../../../base/PowerPlatformCommand.js'; import commands from '../../commands.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; interface CommandArgs { options: Options; @@ -126,7 +126,7 @@ class PpManagementAppAddCommand extends PowerPlatformCommand { } const resultAsKeyValuePair = formatting.convertArrayToHashTable('appId', aadApps.value); - const result = await Cli.handleMultipleResultsFound(`Multiple Azure AD application registration with name '${name}' found.`, resultAsKeyValuePair); + const result = await cli.handleMultipleResultsFound(`Multiple Azure AD application registration with name '${name}' found.`, resultAsKeyValuePair); return result.appId!; } } diff --git a/src/m365/pp/commands/solution/solution-get.spec.ts b/src/m365/pp/commands/solution/solution-get.spec.ts index 168a9f12bea..55b04e64a6c 100644 --- a/src/m365/pp/commands/solution/solution-get.spec.ts +++ b/src/m365/pp/commands/solution/solution-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -53,7 +53,7 @@ describe(commands.SOLUTION_GET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/pp/commands/solution/solution-get.ts b/src/m365/pp/commands/solution/solution-get.ts index 60022b97507..c19f7cc22f1 100644 --- a/src/m365/pp/commands/solution/solution-get.ts +++ b/src/m365/pp/commands/solution/solution-get.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -95,7 +95,7 @@ class PpSolutionGetCommand extends PowerPlatformCommand { const dynamicsApiUrl = await powerPlatform.getDynamicsInstanceApiUrl(args.options.environmentName, args.options.asAdmin); const res = await this.getSolution(dynamicsApiUrl, args.options); - if (!args.options.output || !Cli.shouldTrimOutput(args.options.output)) { + if (!args.options.output || !cli.shouldTrimOutput(args.options.output)) { await logger.log(res); } else { diff --git a/src/m365/pp/commands/solution/solution-list.ts b/src/m365/pp/commands/solution/solution-list.ts index aa6e50d15dd..3f692e8d6c1 100644 --- a/src/m365/pp/commands/solution/solution-list.ts +++ b/src/m365/pp/commands/solution/solution-list.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import { odata } from '../../../../utils/odata.js'; @@ -65,7 +65,7 @@ class PpSolutionListCommand extends PowerPlatformCommand { const requestUrl = `${dynamicsApiUrl}/api/data/v9.0/solutions?$filter=isvisible eq true&$expand=publisherid($select=friendlyname)&$select=solutionid,uniquename,version,publisherid,installedon,solutionpackageversion,friendlyname,versionnumber&api-version=9.1`; const res = await odata.getAllItems(requestUrl); - if (!args.options.output || !Cli.shouldTrimOutput(args.options.output)) { + if (!args.options.output || !cli.shouldTrimOutput(args.options.output)) { await logger.log(res); } else { diff --git a/src/m365/pp/commands/solution/solution-publish.spec.ts b/src/m365/pp/commands/solution/solution-publish.spec.ts index 0f5c4858b5b..33514d75a8f 100644 --- a/src/m365/pp/commands/solution/solution-publish.spec.ts +++ b/src/m365/pp/commands/solution/solution-publish.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -49,7 +49,7 @@ describe(commands.SOLUTION_PUBLISH, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -73,8 +73,8 @@ describe(commands.SOLUTION_PUBLISH, () => { request.post, request.get, powerPlatform.getDynamicsInstanceApiUrl, - Cli.promptForConfirmation, - Cli.executeCommandWithOutput + cli.promptForConfirmation, + cli.executeCommandWithOutput ]); }); @@ -119,7 +119,7 @@ describe(commands.SOLUTION_PUBLISH, () => { it('publishes the components of a specified solution owned by the currently signed-in user', async () => { sinon.stub(powerPlatform, 'getDynamicsInstanceApiUrl').callsFake(async () => envUrl); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === ppSolutionGetCommand) { return ({ stdout: `{ @@ -171,7 +171,7 @@ describe(commands.SOLUTION_PUBLISH, () => { it('publishes the components of a specified solution owned by the currently signed-in user and waits for completion', async () => { sinon.stub(powerPlatform, 'getDynamicsInstanceApiUrl').callsFake(async () => envUrl); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === ppSolutionGetCommand) { return ({ stdout: `{ diff --git a/src/m365/pp/commands/solution/solution-publish.ts b/src/m365/pp/commands/solution/solution-publish.ts index 23d0688fbe0..34ba2a92b0d 100644 --- a/src/m365/pp/commands/solution/solution-publish.ts +++ b/src/m365/pp/commands/solution/solution-publish.ts @@ -1,5 +1,5 @@ import { AxiosRequestConfig } from 'axios'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import Command from '../../../../Command.js'; import GlobalOptions from '../../../../GlobalOptions.js'; @@ -164,7 +164,7 @@ class PpSolutionPublishCommand extends PowerPlatformCommand { verbose: this.verbose }; - const output = await Cli.executeCommandWithOutput(ppSolutionGetCommand as Command, { options: { ...options, _: [] } }); + const output = await cli.executeCommandWithOutput(ppSolutionGetCommand as Command, { options: { ...options, _: [] } }); const getSolutionOutput = JSON.parse(output.stdout); return getSolutionOutput.solutionid; } diff --git a/src/m365/pp/commands/solution/solution-publisher-add.spec.ts b/src/m365/pp/commands/solution/solution-publisher-add.spec.ts index e6d8ce348fc..db70ba4ec89 100644 --- a/src/m365/pp/commands/solution/solution-publisher-add.spec.ts +++ b/src/m365/pp/commands/solution/solution-publisher-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -34,7 +34,7 @@ describe(commands.SOLUTION_PUBLISHER_ADD, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/pp/commands/solution/solution-publisher-get.spec.ts b/src/m365/pp/commands/solution/solution-publisher-get.spec.ts index e45251f148c..c220abbb387 100644 --- a/src/m365/pp/commands/solution/solution-publisher-get.spec.ts +++ b/src/m365/pp/commands/solution/solution-publisher-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -44,7 +44,7 @@ describe(commands.SOLUTION_PUBLISHER_GET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/pp/commands/solution/solution-publisher-remove.spec.ts b/src/m365/pp/commands/solution/solution-publisher-remove.spec.ts index 08f53a316e1..d302498fa8a 100644 --- a/src/m365/pp/commands/solution/solution-publisher-remove.spec.ts +++ b/src/m365/pp/commands/solution/solution-publisher-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -35,7 +35,7 @@ describe(commands.SOLUTION_PUBLISHER_REMOVE, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -52,7 +52,7 @@ describe(commands.SOLUTION_PUBLISHER_REMOVE, () => { } }; loggerLogToStderrSpy = sinon.spy(logger, 'logToStderr'); - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -65,8 +65,8 @@ describe(commands.SOLUTION_PUBLISHER_REMOVE, () => { // request.get, request.delete, powerPlatform.getDynamicsInstanceApiUrl, - Cli.promptForConfirmation, - Cli.executeCommandWithOutput + cli.promptForConfirmation, + cli.executeCommandWithOutput ]); }); @@ -119,7 +119,7 @@ describe(commands.SOLUTION_PUBLISHER_REMOVE, () => { it('removes the specified publisher owned by the currently signed-in user when prompt confirmed', async () => { sinon.stub(powerPlatform, 'getDynamicsInstanceApiUrl').callsFake(async () => envUrl); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === ppSolutionPublisherGetCommand) { return ( { @@ -147,8 +147,8 @@ describe(commands.SOLUTION_PUBLISHER_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { debug: true, diff --git a/src/m365/pp/commands/solution/solution-publisher-remove.ts b/src/m365/pp/commands/solution/solution-publisher-remove.ts index a570e8ba92b..dbee6b751f2 100644 --- a/src/m365/pp/commands/solution/solution-publisher-remove.ts +++ b/src/m365/pp/commands/solution/solution-publisher-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import Command from '../../../../Command.js'; import GlobalOptions from '../../../../GlobalOptions.js'; @@ -98,7 +98,7 @@ class PpSolutionPublisherRemoveCommand extends PowerPlatformCommand { await this.deletePublisher(args); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove publisher '${args.options.id || args.options.name}'?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove publisher '${args.options.id || args.options.name}'?` }); if (result) { await this.deletePublisher(args); @@ -119,7 +119,7 @@ class PpSolutionPublisherRemoveCommand extends PowerPlatformCommand { verbose: this.verbose }; - const output = await Cli.executeCommandWithOutput(ppSolutionPublisherGetCommand as Command, { options: { ...options, _: [] } }); + const output = await cli.executeCommandWithOutput(ppSolutionPublisherGetCommand as Command, { options: { ...options, _: [] } }); const getPublisherOutput = JSON.parse(output.stdout); return getPublisherOutput.publisherid; } diff --git a/src/m365/pp/commands/solution/solution-remove.spec.ts b/src/m365/pp/commands/solution/solution-remove.spec.ts index ef7e0e4f503..98e8f3bbf3c 100644 --- a/src/m365/pp/commands/solution/solution-remove.spec.ts +++ b/src/m365/pp/commands/solution/solution-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -35,7 +35,7 @@ describe(commands.SOLUTION_REMOVE, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -52,7 +52,7 @@ describe(commands.SOLUTION_REMOVE, () => { } }; loggerLogToStderrSpy = sinon.spy(logger, 'logToStderr'); - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -64,8 +64,8 @@ describe(commands.SOLUTION_REMOVE, () => { sinonUtil.restore([ request.delete, powerPlatform.getDynamicsInstanceApiUrl, - Cli.promptForConfirmation, - Cli.executeCommandWithOutput + cli.promptForConfirmation, + cli.executeCommandWithOutput ]); }); @@ -128,7 +128,7 @@ describe(commands.SOLUTION_REMOVE, () => { it('removes the specified solution owned by the currently signed-in user when prompt confirmed', async () => { sinon.stub(powerPlatform, 'getDynamicsInstanceApiUrl').callsFake(async () => envUrl); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === ppSolutionGetCommand) { return ({ stdout: `{ @@ -158,8 +158,8 @@ describe(commands.SOLUTION_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { debug: true, diff --git a/src/m365/pp/commands/solution/solution-remove.ts b/src/m365/pp/commands/solution/solution-remove.ts index 4984d2b2e29..6a263466f47 100644 --- a/src/m365/pp/commands/solution/solution-remove.ts +++ b/src/m365/pp/commands/solution/solution-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import Command from '../../../../Command.js'; import GlobalOptions from '../../../../GlobalOptions.js'; @@ -98,7 +98,7 @@ class PpSolutionRemoveCommand extends PowerPlatformCommand { await this.deleteSolution(args); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove solution '${args.options.id || args.options.name}'?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove solution '${args.options.id || args.options.name}'?` }); if (result) { await this.deleteSolution(args); @@ -119,7 +119,7 @@ class PpSolutionRemoveCommand extends PowerPlatformCommand { verbose: this.verbose }; - const output = await Cli.executeCommandWithOutput(ppSolutionGetCommand as Command, { options: { ...options, _: [] } }); + const output = await cli.executeCommandWithOutput(ppSolutionGetCommand as Command, { options: { ...options, _: [] } }); const getSolutionOutput = JSON.parse(output.stdout); return getSolutionOutput.solutionid; } diff --git a/src/m365/pp/commands/tenant/tenant-settings-set.spec.ts b/src/m365/pp/commands/tenant/tenant-settings-set.spec.ts index 83efe4cafcb..fb97f12cddc 100644 --- a/src/m365/pp/commands/tenant/tenant-settings-set.spec.ts +++ b/src/m365/pp/commands/tenant/tenant-settings-set.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -77,7 +77,7 @@ describe(commands.TENANT_SETTINGS_SET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/purview/commands/auditlog/auditlog-list.spec.ts b/src/m365/purview/commands/auditlog/auditlog-list.spec.ts index 1a1855655a7..97b1c7f79ea 100644 --- a/src/m365/purview/commands/auditlog/auditlog-list.spec.ts +++ b/src/m365/purview/commands/auditlog/auditlog-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -117,7 +117,7 @@ describe(commands.AUDITLOG_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); if (!auth.service.accessTokens[auth.defaultResource]) { auth.service.accessTokens[auth.defaultResource] = { expiresOn: 'abc', diff --git a/src/m365/purview/commands/retentionevent/retentionevent-add.spec.ts b/src/m365/purview/commands/retentionevent/retentionevent-add.spec.ts index 27f293bbeea..af6b49bad44 100644 --- a/src/m365/purview/commands/retentionevent/retentionevent-add.spec.ts +++ b/src/m365/purview/commands/retentionevent/retentionevent-add.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -97,7 +97,7 @@ describe(commands.RETENTIONEVENT_ADD, () => { expiresOn: 'abc', accessToken: 'abc' }; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/purview/commands/retentionevent/retentionevent-get.spec.ts b/src/m365/purview/commands/retentionevent/retentionevent-get.spec.ts index d581932176d..f5de9315a47 100644 --- a/src/m365/purview/commands/retentionevent/retentionevent-get.spec.ts +++ b/src/m365/purview/commands/retentionevent/retentionevent-get.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -74,7 +74,7 @@ describe(commands.RETENTIONEVENT_GET, () => { expiresOn: 'abc', accessToken: 'abc' }; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/purview/commands/retentionevent/retentionevent-remove.spec.ts b/src/m365/purview/commands/retentionevent/retentionevent-remove.spec.ts index 8bc51a09449..8d0374f217b 100644 --- a/src/m365/purview/commands/retentionevent/retentionevent-remove.spec.ts +++ b/src/m365/purview/commands/retentionevent/retentionevent-remove.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -31,7 +31,7 @@ describe(commands.RETENTIONEVENT_REMOVE, () => { accessToken: 'abc', expiresOn: new Date() }; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -47,7 +47,7 @@ describe(commands.RETENTIONEVENT_REMOVE, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -58,7 +58,7 @@ describe(commands.RETENTIONEVENT_REMOVE, () => { afterEach(() => { sinonUtil.restore([ request.delete, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -124,8 +124,8 @@ describe(commands.RETENTIONEVENT_REMOVE, () => { throw 'Invalid Request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { diff --git a/src/m365/purview/commands/retentionevent/retentionevent-remove.ts b/src/m365/purview/commands/retentionevent/retentionevent-remove.ts index f728b2b2f6e..efa4b74b296 100644 --- a/src/m365/purview/commands/retentionevent/retentionevent-remove.ts +++ b/src/m365/purview/commands/retentionevent/retentionevent-remove.ts @@ -1,5 +1,5 @@ import GlobalOptions from '../../../../GlobalOptions.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import request, { CliRequestOptions } from '../../../../request.js'; import { validation } from '../../../../utils/validation.js'; @@ -68,7 +68,7 @@ class PurviewRetentionEventRemoveCommand extends GraphCommand { await this.removeRetentionEvent(args.options); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the retention event ${args.options.id}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the retention event ${args.options.id}?` }); if (result) { await this.removeRetentionEvent(args.options); diff --git a/src/m365/purview/commands/retentioneventtype/retentioneventtype-get.spec.ts b/src/m365/purview/commands/retentioneventtype/retentioneventtype-get.spec.ts index 0dbeb71d62e..256988e93fb 100644 --- a/src/m365/purview/commands/retentioneventtype/retentioneventtype-get.spec.ts +++ b/src/m365/purview/commands/retentioneventtype/retentioneventtype-get.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -50,7 +50,7 @@ describe(commands.RETENTIONEVENTTYPE_GET, () => { accessToken: 'abc', expiresOn: new Date() }; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/purview/commands/retentioneventtype/retentioneventtype-remove.spec.ts b/src/m365/purview/commands/retentioneventtype/retentioneventtype-remove.spec.ts index 207d3e6dd15..2a214fca30c 100644 --- a/src/m365/purview/commands/retentioneventtype/retentioneventtype-remove.spec.ts +++ b/src/m365/purview/commands/retentioneventtype/retentioneventtype-remove.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -31,7 +31,7 @@ describe(commands.RETENTIONEVENTTYPE_REMOVE, () => { accessToken: 'abc', expiresOn: new Date() }; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -47,7 +47,7 @@ describe(commands.RETENTIONEVENTTYPE_REMOVE, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -57,7 +57,7 @@ describe(commands.RETENTIONEVENTTYPE_REMOVE, () => { afterEach(() => { sinonUtil.restore([ - Cli.promptForConfirmation, + cli.promptForConfirmation, request.delete ]); }); @@ -108,8 +108,8 @@ describe(commands.RETENTIONEVENTTYPE_REMOVE, () => { throw 'Invalid Request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { id: validId } }); }); diff --git a/src/m365/purview/commands/retentioneventtype/retentioneventtype-remove.ts b/src/m365/purview/commands/retentioneventtype/retentioneventtype-remove.ts index 39c5582e56d..0ce08ced983 100644 --- a/src/m365/purview/commands/retentioneventtype/retentioneventtype-remove.ts +++ b/src/m365/purview/commands/retentioneventtype/retentioneventtype-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -68,7 +68,7 @@ class PurviewRetentionEventTypeRemoveCommand extends GraphCommand { await this.removeRetentionEventType(args.options); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the retention event type with id ${args.options.id}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the retention event type with id ${args.options.id}?` }); if (result) { await this.removeRetentionEventType(args.options); diff --git a/src/m365/purview/commands/retentioneventtype/retentioneventtype-set.spec.ts b/src/m365/purview/commands/retentioneventtype/retentioneventtype-set.spec.ts index 51336d07689..bf25dfebefe 100644 --- a/src/m365/purview/commands/retentioneventtype/retentioneventtype-set.spec.ts +++ b/src/m365/purview/commands/retentioneventtype/retentioneventtype-set.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -31,7 +31,7 @@ describe(commands.RETENTIONEVENTTYPE_SET, () => { accessToken: 'abc', expiresOn: new Date() }; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/purview/commands/retentionlabel/retentionlabel-add.spec.ts b/src/m365/purview/commands/retentionlabel/retentionlabel-add.spec.ts index 3da2b3f2ccf..a57b22973aa 100644 --- a/src/m365/purview/commands/retentionlabel/retentionlabel-add.spec.ts +++ b/src/m365/purview/commands/retentionlabel/retentionlabel-add.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -97,7 +97,7 @@ describe(commands.RETENTIONLABEL_ADD, () => { accessToken: 'abc', expiresOn: new Date() }; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/purview/commands/retentionlabel/retentionlabel-get.spec.ts b/src/m365/purview/commands/retentionlabel/retentionlabel-get.spec.ts index 58953bdee74..a565d4f2087 100644 --- a/src/m365/purview/commands/retentionlabel/retentionlabel-get.spec.ts +++ b/src/m365/purview/commands/retentionlabel/retentionlabel-get.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -62,7 +62,7 @@ describe(commands.RETENTIONLABEL_GET, () => { accessToken: 'abc', expiresOn: new Date() }; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/purview/commands/retentionlabel/retentionlabel-remove.spec.ts b/src/m365/purview/commands/retentionlabel/retentionlabel-remove.spec.ts index 22a28f1429e..7a8a8568b60 100644 --- a/src/m365/purview/commands/retentionlabel/retentionlabel-remove.spec.ts +++ b/src/m365/purview/commands/retentionlabel/retentionlabel-remove.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -31,7 +31,7 @@ describe(commands.RETENTIONLABEL_REMOVE, () => { accessToken: 'abc', expiresOn: new Date() }; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -47,7 +47,7 @@ describe(commands.RETENTIONLABEL_REMOVE, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -58,7 +58,7 @@ describe(commands.RETENTIONLABEL_REMOVE, () => { afterEach(() => { sinonUtil.restore([ request.delete, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -124,8 +124,8 @@ describe(commands.RETENTIONLABEL_REMOVE, () => { throw 'Invalid Request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { diff --git a/src/m365/purview/commands/retentionlabel/retentionlabel-remove.ts b/src/m365/purview/commands/retentionlabel/retentionlabel-remove.ts index d529eb6ca7e..97a7c5b2d17 100644 --- a/src/m365/purview/commands/retentionlabel/retentionlabel-remove.ts +++ b/src/m365/purview/commands/retentionlabel/retentionlabel-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -68,7 +68,7 @@ class PurviewRetentionLabelRemoveCommand extends GraphCommand { await this.removeRetentionLabel(args); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the retention label ${args.options.id}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the retention label ${args.options.id}?` }); if (result) { await this.removeRetentionLabel(args); diff --git a/src/m365/purview/commands/retentionlabel/retentionlabel-set.spec.ts b/src/m365/purview/commands/retentionlabel/retentionlabel-set.spec.ts index 33dbdfdb897..16e02681a29 100644 --- a/src/m365/purview/commands/retentionlabel/retentionlabel-set.spec.ts +++ b/src/m365/purview/commands/retentionlabel/retentionlabel-set.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -32,7 +32,7 @@ describe(commands.RETENTIONLABEL_SET, () => { accessToken: 'abc', expiresOn: new Date() }; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/purview/commands/sensitivitylabel/sensitivitylabel-get.spec.ts b/src/m365/purview/commands/sensitivitylabel/sensitivitylabel-get.spec.ts index 96068f25b04..792d66b8a5a 100644 --- a/src/m365/purview/commands/sensitivitylabel/sensitivitylabel-get.spec.ts +++ b/src/m365/purview/commands/sensitivitylabel/sensitivitylabel-get.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -49,7 +49,7 @@ describe(commands.SENSITIVITYLABEL_GET, () => { accessToken: 'abc', expiresOn: new Date() }; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/purview/commands/sensitivitylabel/sensitivitylabel-list.spec.ts b/src/m365/purview/commands/sensitivitylabel/sensitivitylabel-list.spec.ts index 189dfdfcf9a..9d48ca52ffa 100644 --- a/src/m365/purview/commands/sensitivitylabel/sensitivitylabel-list.spec.ts +++ b/src/m365/purview/commands/sensitivitylabel/sensitivitylabel-list.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -53,7 +53,7 @@ describe(commands.SENSITIVITYLABEL_LIST, () => { accessToken: 'abc', expiresOn: new Date() }; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/purview/commands/sensitivitylabel/sensitivitylabel-policysettings-list.spec.ts b/src/m365/purview/commands/sensitivitylabel/sensitivitylabel-policysettings-list.spec.ts index 05391120c18..002124d59c8 100644 --- a/src/m365/purview/commands/sensitivitylabel/sensitivitylabel-policysettings-list.spec.ts +++ b/src/m365/purview/commands/sensitivitylabel/sensitivitylabel-policysettings-list.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -41,7 +41,7 @@ describe(commands.SENSITIVITYLABEL_POLICYSETTINGS_LIST, () => { accessToken: 'abc', expiresOn: new Date() }; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/purview/commands/threatassessment/threatassessment-get.spec.ts b/src/m365/purview/commands/threatassessment/threatassessment-get.spec.ts index 56bc6490e2f..f6a30334f80 100644 --- a/src/m365/purview/commands/threatassessment/threatassessment-get.spec.ts +++ b/src/m365/purview/commands/threatassessment/threatassessment-get.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -57,7 +57,7 @@ describe(commands.THREATASSESSMENT_GET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spfx/commands/package/package-generate.spec.ts b/src/m365/spfx/commands/package/package-generate.spec.ts index 10ccdb4ca55..7ea223def5d 100644 --- a/src/m365/spfx/commands/package/package-generate.spec.ts +++ b/src/m365/spfx/commands/package/package-generate.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import fs from 'fs'; import sinon from 'sinon'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { telemetry } from '../../../../telemetry.js'; @@ -31,8 +31,8 @@ describe(commands.PACKAGE_GENERATE, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); (command as any).archive = admZipMock; - commandInfo = Cli.getCommandInfo(command); - Cli.getInstance().config; + commandInfo = cli.getCommandInfo(command); + cli.getConfig; }); beforeEach(() => { diff --git a/src/m365/spfx/commands/project/project-doctor.spec.ts b/src/m365/spfx/commands/project/project-doctor.spec.ts index a73cd9b2140..41480adbc0b 100644 --- a/src/m365/spfx/commands/project/project-doctor.spec.ts +++ b/src/m365/spfx/commands/project/project-doctor.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import fs from 'fs'; import path from 'path'; import sinon from 'sinon'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -30,7 +30,7 @@ describe(commands.PROJECT_DOCTOR, () => { }); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -128,14 +128,14 @@ describe(commands.PROJECT_DOCTOR, () => { it('returns markdown report with output format md', async () => { sinon.stub(command as any, 'getProjectRoot').returns(path.join(process.cwd(), invalidProjectPath)); - sinon.stub(Cli, 'log').callsFake(msg => log.push(msg)); + sinon.stub(cli, 'log').callsFake(msg => log.push(msg)); try { - await Cli.executeCommand(command, { options: { output: 'md' } } as any); + await cli.executeCommand(command, { options: { output: 'md' } } as any); assert(log[0].indexOf('## Findings') > -1); } finally { - sinonUtil.restore(Cli.log); + sinonUtil.restore(cli.log); } }); @@ -594,22 +594,22 @@ describe(commands.PROJECT_DOCTOR, () => { }); it('passes validation when json output specified', async () => { - assert.strictEqual(await command.validate({ options: { output: 'json' } }, Cli.getCommandInfo(command)), true); + assert.strictEqual(await command.validate({ options: { output: 'json' } }, cli.getCommandInfo(command)), true); }); it('passes validation when text output specified', async () => { - assert.strictEqual(await command.validate({ options: { output: 'text' } }, Cli.getCommandInfo(command)), true); + assert.strictEqual(await command.validate({ options: { output: 'text' } }, cli.getCommandInfo(command)), true); }); it('passes validation when md output specified', async () => { - assert.strictEqual(await command.validate({ options: { output: 'md' } }, Cli.getCommandInfo(command)), true); + assert.strictEqual(await command.validate({ options: { output: 'md' } }, cli.getCommandInfo(command)), true); }); it('passes validation when tour output specified', async () => { - assert.strictEqual(await command.validate({ options: { output: 'tour' } }, Cli.getCommandInfo(command)), true); + assert.strictEqual(await command.validate({ options: { output: 'tour' } }, cli.getCommandInfo(command)), true); }); it('fails validation when csv output specified', async () => { - assert.notStrictEqual(await command.validate({ options: { output: 'csv' } }, Cli.getCommandInfo(command)), true); + assert.notStrictEqual(await command.validate({ options: { output: 'csv' } }, cli.getCommandInfo(command)), true); }); }); diff --git a/src/m365/spfx/commands/project/project-externalize.spec.ts b/src/m365/spfx/commands/project/project-externalize.spec.ts index e28c15237fa..f39000e198b 100644 --- a/src/m365/spfx/commands/project/project-externalize.spec.ts +++ b/src/m365/spfx/commands/project/project-externalize.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import fs from 'fs'; import path from 'path'; import sinon from 'sinon'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -597,18 +597,18 @@ describe(commands.PROJECT_EXTERNALIZE, () => { }); it('passes validation when json output specified', async () => { - assert.strictEqual(await command.validate({ options: { output: 'json' } }, Cli.getCommandInfo(command)), true); + assert.strictEqual(await command.validate({ options: { output: 'json' } }, cli.getCommandInfo(command)), true); }); it('passes validation when text output specified', async () => { - assert.strictEqual(await command.validate({ options: { output: 'text' } }, Cli.getCommandInfo(command)), true); + assert.strictEqual(await command.validate({ options: { output: 'text' } }, cli.getCommandInfo(command)), true); }); it('passes validation when md output specified', async () => { - assert.strictEqual(await command.validate({ options: { output: 'md' } }, Cli.getCommandInfo(command)), true); + assert.strictEqual(await command.validate({ options: { output: 'md' } }, cli.getCommandInfo(command)), true); }); it('fails validation when csv output specified', async () => { - assert.notStrictEqual(await command.validate({ options: { output: 'csv' } }, Cli.getCommandInfo(command)), true); + assert.notStrictEqual(await command.validate({ options: { output: 'csv' } }, cli.getCommandInfo(command)), true); }); }); diff --git a/src/m365/spfx/commands/project/project-github-workflow-add.spec.ts b/src/m365/spfx/commands/project/project-github-workflow-add.spec.ts index 9c4749162d4..397fff00185 100644 --- a/src/m365/spfx/commands/project/project-github-workflow-add.spec.ts +++ b/src/m365/spfx/commands/project/project-github-workflow-add.spec.ts @@ -3,7 +3,7 @@ import fs from 'fs'; import path from 'path'; import sinon from 'sinon'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { telemetry } from '../../../../telemetry.js'; @@ -23,7 +23,7 @@ describe(commands.PROJECT_GITHUB_WORKFLOW_ADD, () => { sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').callsFake(() => ''); sinon.stub(session, 'getId').callsFake(() => ''); - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spfx/commands/project/project-permissions-grant.spec.ts b/src/m365/spfx/commands/project/project-permissions-grant.spec.ts index 64cb82548b8..83620b6cbbc 100644 --- a/src/m365/spfx/commands/project/project-permissions-grant.spec.ts +++ b/src/m365/spfx/commands/project/project-permissions-grant.spec.ts @@ -4,7 +4,7 @@ import fs from 'fs'; import path from 'path'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; import { telemetry } from '../../../../telemetry.js'; @@ -108,7 +108,7 @@ describe(commands.PROJECT_PERMISSIONS_GRANT, () => { (command as any).getProjectRoot, fs.existsSync, fs.readFileSync, - Cli.executeCommandWithOutput + cli.executeCommandWithOutput ]); }); @@ -145,7 +145,7 @@ describe(commands.PROJECT_PERMISSIONS_GRANT, () => { sinon.stub(fs, 'existsSync').returns(true); sinon.stub(fs, 'readFileSync').returns(packagejsonContent); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoServicePrincipalGrantAddCommand) { return ({ stdout: `{ "ClientId": "90a2c08e-e786-4100-9ea9-36c261be6c0d", "ConsentType": "AllPrincipals", "IsDomainIsolated": false, "ObjectId": "jsCikIbnAEGeqTbCYb5sDZXCr9YICndHoJUQvLfiOQM", "PackageName": null, "Resource": "Microsoft Graph", "ResourceId": "d6afc295-0a08-4777-a095-10bcb7e23903", "Scope": "User.ReadBasic.All"}` @@ -174,7 +174,7 @@ describe(commands.PROJECT_PERMISSIONS_GRANT, () => { sinon.stub(fs, 'existsSync').returns(true); sinon.stub(fs, 'readFileSync').returns(packagejsonContent); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoServicePrincipalGrantAddCommand) { throw grantExistError; } @@ -193,7 +193,7 @@ describe(commands.PROJECT_PERMISSIONS_GRANT, () => { sinon.stub(fs, 'existsSync').returns(true); sinon.stub(fs, 'readFileSync').returns(packagejsonContent); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoServicePrincipalGrantAddCommand) { throw 'Something went wrong'; } diff --git a/src/m365/spfx/commands/project/project-permissions-grant.ts b/src/m365/spfx/commands/project/project-permissions-grant.ts index 303aae1350b..8931e4465e8 100644 --- a/src/m365/spfx/commands/project/project-permissions-grant.ts +++ b/src/m365/spfx/commands/project/project-permissions-grant.ts @@ -1,6 +1,6 @@ import fs from 'fs'; import path from 'path'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import Command, { CommandError } from '../../../../Command.js'; import spoServicePrincipalGrantAddCommand, { Options as SpoServicePrincipalGrantAddCommandOptions } from '../../../spo/commands/serviceprincipal/serviceprincipal-grant-add.js'; @@ -46,7 +46,7 @@ class SpfxProjectPermissionSGrantCommand extends BaseProjectCommand { let output = null; try { - output = await Cli.executeCommandWithOutput(spoServicePrincipalGrantAddCommand as Command, { options: { ...options, _: [] } }); + output = await cli.executeCommandWithOutput(spoServicePrincipalGrantAddCommand as Command, { options: { ...options, _: [] } }); } catch (err: any) { if (err.error && err.error.message.indexOf('already exists') > -1) { diff --git a/src/m365/spfx/commands/project/project-upgrade.spec.ts b/src/m365/spfx/commands/project/project-upgrade.spec.ts index 04590e388b4..95a27ee9556 100644 --- a/src/m365/spfx/commands/project/project-upgrade.spec.ts +++ b/src/m365/spfx/commands/project/project-upgrade.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import fs from 'fs'; import path from 'path'; import sinon from 'sinon'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -37,7 +37,7 @@ describe(commands.PROJECT_UPGRADE, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); project141webPartNoLib = (command as any).getProject(projectPath); - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spfx/commands/spfx-doctor.spec.ts b/src/m365/spfx/commands/spfx-doctor.spec.ts index b6ec240d1dd..037afaf2cc8 100644 --- a/src/m365/spfx/commands/spfx-doctor.spec.ts +++ b/src/m365/spfx/commands/spfx-doctor.spec.ts @@ -3,7 +3,7 @@ import child_process from 'child_process'; import fs from 'fs'; import sinon, { SinonSandbox } from 'sinon'; import { CommandError } from '../../../Command.js'; -import { Cli } from '../../../cli/Cli.js'; +import { cli } from '../../../cli/cli.js'; import { CommandInfo } from '../../../cli/CommandInfo.js'; import { Logger } from '../../../cli/Logger.js'; import { telemetry } from '../../../telemetry.js'; @@ -38,7 +38,7 @@ describe(commands.DOCTOR, () => { sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/app/app-add.spec.ts b/src/m365/spo/commands/app/app-add.spec.ts index 985aeae663c..4ce1db3794e 100644 --- a/src/m365/spo/commands/app/app-add.spec.ts +++ b/src/m365/spo/commands/app/app-add.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import fs from 'fs'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -16,7 +16,6 @@ import command from './app-add.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.APP_ADD, () => { - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; @@ -24,14 +23,13 @@ describe(commands.APP_ADD, () => { let requests: any[]; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/app/app-add.ts b/src/m365/spo/commands/app/app-add.ts index e6331bd8f00..bf4c1aa31e0 100644 --- a/src/m365/spo/commands/app/app-add.ts +++ b/src/m365/spo/commands/app/app-add.ts @@ -1,7 +1,7 @@ import fs from 'fs'; import path from 'path'; import GlobalOptions from '../../../../GlobalOptions.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import request, { CliRequestOptions } from '../../../../request.js'; import { spo } from '../../../../utils/spo.js'; @@ -126,7 +126,7 @@ class SpoAppAddCommand extends SpoAppBaseCommand { const res = await request.post(requestOptions); const json: { UniqueId: string; } = JSON.parse(res); - if (!Cli.shouldTrimOutput(args.options.output)) { + if (!cli.shouldTrimOutput(args.options.output)) { await logger.log(json); } else { diff --git a/src/m365/spo/commands/app/app-deploy.spec.ts b/src/m365/spo/commands/app/app-deploy.spec.ts index 701347ed663..8137c9cc29c 100644 --- a/src/m365/spo/commands/app/app-deploy.spec.ts +++ b/src/m365/spo/commands/app/app-deploy.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,7 +15,6 @@ import command from './app-deploy.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.APP_DEPLOY, () => { - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogToStderrSpy: sinon.SinonSpy; @@ -23,14 +22,13 @@ describe(commands.APP_DEPLOY, () => { let requests: any[]; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -54,7 +52,7 @@ describe(commands.APP_DEPLOY, () => { sinonUtil.restore([ request.get, request.post, - Cli.promptForConfirmation, + cli.promptForConfirmation, cli.getSettingWithDefaultValue ]); }); diff --git a/src/m365/spo/commands/app/app-get.spec.ts b/src/m365/spo/commands/app/app-get.spec.ts index 9b2178b0589..5e0752d93c7 100644 --- a/src/m365/spo/commands/app/app-get.spec.ts +++ b/src/m365/spo/commands/app/app-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,21 +15,19 @@ import command from './app-get.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.APP_GET, () => { - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/app/app-install.spec.ts b/src/m365/spo/commands/app/app-install.spec.ts index f670eda87bd..e1341ec9c19 100644 --- a/src/m365/spo/commands/app/app-install.spec.ts +++ b/src/m365/spo/commands/app/app-install.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -26,7 +26,7 @@ describe(commands.APP_INSTALL, () => { sinon.stub(session, 'getId').returns(''); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/app/app-instance-list.spec.ts b/src/m365/spo/commands/app/app-instance-list.spec.ts index 0e1a1809d26..779bf5a4f24 100644 --- a/src/m365/spo/commands/app/app-instance-list.spec.ts +++ b/src/m365/spo/commands/app/app-instance-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -27,7 +27,7 @@ describe(commands.APP_INSTANCE_LIST, () => { sinon.stub(session, 'getId').returns(''); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/app/app-list.spec.ts b/src/m365/spo/commands/app/app-list.spec.ts index 2eaca58d442..181c38dd70b 100644 --- a/src/m365/spo/commands/app/app-list.spec.ts +++ b/src/m365/spo/commands/app/app-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -26,7 +26,7 @@ describe(commands.APP_LIST, () => { sinon.stub(session, 'getId').returns(''); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/app/app-remove.spec.ts b/src/m365/spo/commands/app/app-remove.spec.ts index 2f4d44a3d5a..64d8dc1620f 100644 --- a/src/m365/spo/commands/app/app-remove.spec.ts +++ b/src/m365/spo/commands/app/app-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -27,7 +27,7 @@ describe(commands.APP_REMOVE, () => { sinon.stub(session, 'getId').returns(''); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -44,7 +44,7 @@ describe(commands.APP_REMOVE, () => { } }; requests = []; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -57,7 +57,7 @@ describe(commands.APP_REMOVE, () => { sinonUtil.restore([ request.get, request.post, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -162,8 +162,8 @@ describe(commands.APP_REMOVE, () => { }); it('aborts removing app when prompt not confirmed', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { id: 'b2307a39-e878-458b-bc90-03bc578531d6', appCatalogUrl: 'https://contoso.sharepoint.com' } }); assert(requests.length === 0); }); @@ -189,8 +189,8 @@ describe(commands.APP_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { id: 'b2307a39-e878-458b-bc90-03bc578531d6', appCatalogUrl: 'https://contoso.sharepoint.com' } }); let correctRequestIssued = false; requests.forEach(r => { diff --git a/src/m365/spo/commands/app/app-remove.ts b/src/m365/spo/commands/app/app-remove.ts index 6309444b83d..aa7ff1b1c15 100644 --- a/src/m365/spo/commands/app/app-remove.ts +++ b/src/m365/spo/commands/app/app-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -122,7 +122,7 @@ class SpoAppRemoveCommand extends SpoAppBaseCommand { await removeApp(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the app ${args.options.id} from the app catalog?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the app ${args.options.id} from the app catalog?` }); if (result) { await removeApp(); diff --git a/src/m365/spo/commands/app/app-retract.spec.ts b/src/m365/spo/commands/app/app-retract.spec.ts index 08325ced387..6657d10dd8e 100644 --- a/src/m365/spo/commands/app/app-retract.spec.ts +++ b/src/m365/spo/commands/app/app-retract.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -27,7 +27,7 @@ describe(commands.APP_RETRACT, () => { sinon.stub(session, 'getId').returns(''); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -44,7 +44,7 @@ describe(commands.APP_RETRACT, () => { } }; requests = []; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -57,7 +57,7 @@ describe(commands.APP_RETRACT, () => { sinonUtil.restore([ request.get, request.post, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -190,8 +190,8 @@ describe(commands.APP_RETRACT, () => { }); it('aborts retracting app when prompt not confirmed', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { id: 'b2307a39-e878-458b-bc90-03bc578531d6', appCatalogUrl: 'https://contoso.sharepoint.com' } }); assert(requests.length === 0); }); @@ -211,8 +211,8 @@ describe(commands.APP_RETRACT, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { id: 'b2307a39-e878-458b-bc90-03bc578531d6', appCatalogUrl: 'https://contoso.sharepoint.com' } }); let correctRequestIssued = false; requests.forEach(r => { diff --git a/src/m365/spo/commands/app/app-retract.ts b/src/m365/spo/commands/app/app-retract.ts index faef326d1c7..ab9e0dee242 100644 --- a/src/m365/spo/commands/app/app-retract.ts +++ b/src/m365/spo/commands/app/app-retract.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -121,7 +121,7 @@ class SpoAppRetractCommand extends SpoAppBaseCommand { await retractApp(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to retract the app ${args.options.id} from the app catalog?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to retract the app ${args.options.id} from the app catalog?` }); if (result) { await retractApp(); diff --git a/src/m365/spo/commands/app/app-teamspackage-download.spec.ts b/src/m365/spo/commands/app/app-teamspackage-download.spec.ts index 7a5b59c51ad..9a5f87e9f82 100644 --- a/src/m365/spo/commands/app/app-teamspackage-download.spec.ts +++ b/src/m365/spo/commands/app/app-teamspackage-download.spec.ts @@ -3,7 +3,7 @@ import fs from 'fs'; import sinon from 'sinon'; import { PassThrough } from 'stream'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -27,7 +27,7 @@ describe(commands.APP_TEAMSPACKAGE_DOWNLOAD, () => { sinon.stub(session, 'getId').returns(''); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/app/app-uninstall.spec.ts b/src/m365/spo/commands/app/app-uninstall.spec.ts index d60f32bbc17..b4f5b0aa5f5 100644 --- a/src/m365/spo/commands/app/app-uninstall.spec.ts +++ b/src/m365/spo/commands/app/app-uninstall.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -27,7 +27,7 @@ describe(commands.APP_UNINSTALL, () => { sinon.stub(session, 'getId').returns(''); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -43,7 +43,7 @@ describe(commands.APP_UNINSTALL, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -53,7 +53,7 @@ describe(commands.APP_UNINSTALL, () => { }); afterEach(() => { - sinonUtil.restore(Cli.promptForConfirmation); + sinonUtil.restore(cli.promptForConfirmation); }); after(() => { @@ -171,8 +171,8 @@ describe(commands.APP_UNINSTALL, () => { }); it('aborts removing property when prompt not confirmed', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { id: 'b2307a39-e878-458b-bc90-03bc578531d6', siteUrl: 'https://contoso.sharepoint.com' } }); assert(requests.length === 0); }); @@ -197,8 +197,8 @@ describe(commands.APP_UNINSTALL, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { id: 'b2307a39-e878-458b-bc90-03bc578531d6', siteUrl: 'https://contoso.sharepoint.com' } }); let correctRequestIssued = false; requests.forEach(r => { diff --git a/src/m365/spo/commands/app/app-uninstall.ts b/src/m365/spo/commands/app/app-uninstall.ts index e5d67c76255..b8c76a11ccd 100644 --- a/src/m365/spo/commands/app/app-uninstall.ts +++ b/src/m365/spo/commands/app/app-uninstall.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -108,7 +108,7 @@ class SpoAppUninstallCommand extends SpoCommand { await uninstallApp(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to uninstall the app ${args.options.id} from site ${args.options.siteUrl}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to uninstall the app ${args.options.id} from site ${args.options.siteUrl}?` }); if (result) { await uninstallApp(); diff --git a/src/m365/spo/commands/app/app-upgrade.spec.ts b/src/m365/spo/commands/app/app-upgrade.spec.ts index 1749291da51..53bdea504b7 100644 --- a/src/m365/spo/commands/app/app-upgrade.spec.ts +++ b/src/m365/spo/commands/app/app-upgrade.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -26,7 +26,7 @@ describe(commands.APP_UPGRADE, () => { sinon.stub(session, 'getId').returns(''); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/applicationcustomizer/applicationcustomizer-add.spec.ts b/src/m365/spo/commands/applicationcustomizer/applicationcustomizer-add.spec.ts index f5756e4b0c5..f18d5f1bd9f 100644 --- a/src/m365/spo/commands/applicationcustomizer/applicationcustomizer-add.spec.ts +++ b/src/m365/spo/commands/applicationcustomizer/applicationcustomizer-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -55,7 +55,7 @@ describe(commands.APPLICATIONCUSTOMIZER_ADD, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/applicationcustomizer/applicationcustomizer-get.spec.ts b/src/m365/spo/commands/applicationcustomizer/applicationcustomizer-get.spec.ts index 0bd0806a6cd..5fabf7e9e96 100644 --- a/src/m365/spo/commands/applicationcustomizer/applicationcustomizer-get.spec.ts +++ b/src/m365/spo/commands/applicationcustomizer/applicationcustomizer-get.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -69,21 +69,19 @@ describe(commands.APPLICATIONCUSTOMIZER_GET, () => { VersionOfUserCustomAction: '16.0.1.0' }; - let cli: Cli; let log: any[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; auth.service.spoUrl = webUrl; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -106,7 +104,7 @@ describe(commands.APPLICATIONCUSTOMIZER_GET, () => { sinonUtil.restore([ request.get, cli.getSettingWithDefaultValue, - Cli.handleMultipleResultsFound + cli.handleMultipleResultsFound ]); }); @@ -612,7 +610,7 @@ describe(commands.APPLICATIONCUSTOMIZER_GET, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves({ + sinon.stub(cli, 'handleMultipleResultsFound').resolves({ ClientSideComponentId: '7096cded-b83d-4eab-96f0-df477ed7c0bc', ClientSideComponentProperties: '', CommandUIExtension: null, diff --git a/src/m365/spo/commands/applicationcustomizer/applicationcustomizer-get.ts b/src/m365/spo/commands/applicationcustomizer/applicationcustomizer-get.ts index fa39710fbda..288d9241301 100644 --- a/src/m365/spo/commands/applicationcustomizer/applicationcustomizer-get.ts +++ b/src/m365/spo/commands/applicationcustomizer/applicationcustomizer-get.ts @@ -6,7 +6,7 @@ import { validation } from '../../../../utils/validation.js'; import SpoCommand from '../../../base/SpoCommand.js'; import commands from '../../commands.js'; import { CustomAction } from '../customaction/customaction.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; interface CommandArgs { options: Options; @@ -153,7 +153,7 @@ class SpoApplicationCustomizerGetCommand extends SpoCommand { } else { const resultAsKeyValuePair = formatting.convertArrayToHashTable('Id', customActions); - return await Cli.handleMultipleResultsFound(`Multiple application customizers with ${identifier} found.`, resultAsKeyValuePair); + return await cli.handleMultipleResultsFound(`Multiple application customizers with ${identifier} found.`, resultAsKeyValuePair); } } diff --git a/src/m365/spo/commands/applicationcustomizer/applicationcustomizer-list.spec.ts b/src/m365/spo/commands/applicationcustomizer/applicationcustomizer-list.spec.ts index fb591bb2bef..2e3c5bbc7ed 100644 --- a/src/m365/spo/commands/applicationcustomizer/applicationcustomizer-list.spec.ts +++ b/src/m365/spo/commands/applicationcustomizer/applicationcustomizer-list.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -58,7 +58,7 @@ describe(commands.APPLICATIONCUSTOMIZER_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/applicationcustomizer/applicationcustomizer-remove.spec.ts b/src/m365/spo/commands/applicationcustomizer/applicationcustomizer-remove.spec.ts index 89f315d50ea..240803868c3 100644 --- a/src/m365/spo/commands/applicationcustomizer/applicationcustomizer-remove.spec.ts +++ b/src/m365/spo/commands/applicationcustomizer/applicationcustomizer-remove.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -21,7 +21,6 @@ describe(commands.APPLICATIONCUSTOMIZER_REMOVE, () => { const id = '14125658-a9bc-4ddf-9c75-1b5767c9a337'; const clientSideComponentId = '015e0fcf-fe9d-4037-95af-0a4776cdfbb4'; const title = 'SiteGuidedTour'; - let cli: Cli; let promptIssued: boolean = false; let log: any[]; let logger: Logger; @@ -114,14 +113,13 @@ describe(commands.APPLICATIONCUSTOMIZER_REMOVE, () => { }; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').callsFake(() => { }); sinon.stub(pid, 'getProcessName').callsFake(() => ''); sinon.stub(session, 'getId').callsFake(() => ''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); - sinon.stub(Cli.getInstance(), 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { + commandInfo = cli.getCommandInfo(command); + sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { if (settingName === 'prompt') { return false; } @@ -144,7 +142,7 @@ describe(commands.APPLICATIONCUSTOMIZER_REMOVE, () => { } }; requests = []; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -157,9 +155,9 @@ describe(commands.APPLICATIONCUSTOMIZER_REMOVE, () => { request.get, request.delete, cli.getSettingWithDefaultValue, - Cli.handleMultipleResultsFound, - Cli.promptForConfirmation, - Cli.handleMultipleResultsFound + cli.handleMultipleResultsFound, + cli.promptForConfirmation, + cli.handleMultipleResultsFound ]); }); @@ -225,8 +223,8 @@ describe(commands.APPLICATIONCUSTOMIZER_REMOVE, () => { }); it('aborts removing application customizer when prompt not confirmed', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { webUrl: webUrl, id: id } }); assert(requests.length === 0); }); @@ -333,7 +331,7 @@ describe(commands.APPLICATIONCUSTOMIZER_REMOVE, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves(singleResponse.value[0]); + sinon.stub(cli, 'handleMultipleResultsFound').resolves(singleResponse.value[0]); const deleteCallsSpy: sinon.SinonStub = defaultDeleteCallsStub(); await command.action(logger, { options: { verbose: true, title: title, webUrl: webUrl, scope: 'Web', force: true } } as any); @@ -349,8 +347,8 @@ describe(commands.APPLICATIONCUSTOMIZER_REMOVE, () => { }); const deleteCallsSpy: sinon.SinonStub = defaultDeleteCallsStub(); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { verbose: true, id: id, webUrl: webUrl, scope: 'Web' } } as any); assert(deleteCallsSpy.calledOnce); diff --git a/src/m365/spo/commands/applicationcustomizer/applicationcustomizer-remove.ts b/src/m365/spo/commands/applicationcustomizer/applicationcustomizer-remove.ts index 791c4f765fd..23205a60af5 100644 --- a/src/m365/spo/commands/applicationcustomizer/applicationcustomizer-remove.ts +++ b/src/m365/spo/commands/applicationcustomizer/applicationcustomizer-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -109,7 +109,7 @@ class SpoApplicationCustomizerRemoveCommand extends SpoCommand { return await this.removeApplicationCustomizer(logger, args.options); } - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the application customizer '${args.options.clientSideComponentId || args.options.title || args.options.id}'?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the application customizer '${args.options.clientSideComponentId || args.options.title || args.options.id}'?` }); if (result) { await this.removeApplicationCustomizer(logger, args.options); @@ -162,7 +162,7 @@ class SpoApplicationCustomizerRemoveCommand extends SpoCommand { if (appCustomizers.length > 1) { const resultAsKeyValuePair = formatting.convertArrayToHashTable('Id', appCustomizers); - return await Cli.handleMultipleResultsFound(`Multiple application customizer with ${options.title ? `title '${options.title}'` : `ClientSideComponentId '${options.clientSideComponentId}'`} found.`, resultAsKeyValuePair); + return await cli.handleMultipleResultsFound(`Multiple application customizer with ${options.title ? `title '${options.title}'` : `ClientSideComponentId '${options.clientSideComponentId}'`} found.`, resultAsKeyValuePair); } return appCustomizers[0]; diff --git a/src/m365/spo/commands/applicationcustomizer/applicationcustomizer-set.spec.ts b/src/m365/spo/commands/applicationcustomizer/applicationcustomizer-set.spec.ts index 13f15fe584c..98de4fb2c18 100644 --- a/src/m365/spo/commands/applicationcustomizer/applicationcustomizer-set.spec.ts +++ b/src/m365/spo/commands/applicationcustomizer/applicationcustomizer-set.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -23,7 +23,6 @@ describe(commands.APPLICATIONCUSTOMIZER_SET, () => { const title = 'SiteGuidedTour'; const newTitle = 'New Title'; const clientSideComponentProperties = '{"testMessage":"Updated message"}'; - let cli: Cli; let log: any[]; let logger: Logger; @@ -113,14 +112,13 @@ describe(commands.APPLICATIONCUSTOMIZER_SET, () => { }; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').callsFake(() => { }); sinon.stub(pid, 'getProcessName').callsFake(() => ''); sinon.stub(session, 'getId').callsFake(() => ''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); - sinon.stub(Cli.getInstance(), 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { + commandInfo = cli.getCommandInfo(command); + sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { if (settingName === 'prompt') { return false; } @@ -148,7 +146,7 @@ describe(commands.APPLICATIONCUSTOMIZER_SET, () => { sinonUtil.restore([ request.get, request.post, - Cli.handleMultipleResultsFound, + cli.handleMultipleResultsFound, cli.getSettingWithDefaultValue ]); }); @@ -308,7 +306,7 @@ describe(commands.APPLICATIONCUSTOMIZER_SET, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves(singleResponse.value[0]); + sinon.stub(cli, 'handleMultipleResultsFound').resolves(singleResponse.value[0]); const updateCallsSpy: sinon.SinonStub = defaultUpdateCallsStub(); await command.action(logger, { options: { verbose: true, title: title, webUrl: webUrl, scope: 'Site', newTitle: newTitle } } as any); diff --git a/src/m365/spo/commands/applicationcustomizer/applicationcustomizer-set.ts b/src/m365/spo/commands/applicationcustomizer/applicationcustomizer-set.ts index 29259f890a3..2d0a9268021 100644 --- a/src/m365/spo/commands/applicationcustomizer/applicationcustomizer-set.ts +++ b/src/m365/spo/commands/applicationcustomizer/applicationcustomizer-set.ts @@ -7,7 +7,7 @@ import commands from '../../commands.js'; import { spo } from '../../../../utils/spo.js'; import { formatting } from '../../../../utils/formatting.js'; import { CustomAction } from '../../commands/customaction/customaction.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; interface CommandArgs { options: Options; @@ -181,7 +181,7 @@ class SpoApplicationCustomizerSetCommand extends SpoCommand { if (appCustomizers.length > 1) { const resultAsKeyValuePair = formatting.convertArrayToHashTable('Id', appCustomizers); - return await Cli.handleMultipleResultsFound(`Multiple application customizer with ${title ? `title '${title}'` : `ClientSideComponentId '${clientSideComponentId}'`} found.`, resultAsKeyValuePair); + return await cli.handleMultipleResultsFound(`Multiple application customizer with ${title ? `title '${title}'` : `ClientSideComponentId '${clientSideComponentId}'`} found.`, resultAsKeyValuePair); } return appCustomizers[0]; diff --git a/src/m365/spo/commands/apppage/apppage-add.spec.ts b/src/m365/spo/commands/apppage/apppage-add.spec.ts index 8d95d9e8c84..113d23ca58a 100644 --- a/src/m365/spo/commands/apppage/apppage-add.spec.ts +++ b/src/m365/spo/commands/apppage/apppage-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -24,7 +24,7 @@ describe(commands.APPPAGE_ADD, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/apppage/apppage-set.spec.ts b/src/m365/spo/commands/apppage/apppage-set.spec.ts index 23659330ae2..ae0bb4c5841 100644 --- a/src/m365/spo/commands/apppage/apppage-set.spec.ts +++ b/src/m365/spo/commands/apppage/apppage-set.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from "../../../../Auth.js"; -import { Cli } from "../../../../cli/Cli.js"; +import { cli } from "../../../../cli/cli.js"; import { CommandInfo } from "../../../../cli/CommandInfo.js"; import { Logger } from "../../../../cli/Logger.js"; import { CommandError } from "../../../../Command.js"; @@ -15,19 +15,17 @@ import command from './apppage-set.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.APPPAGE_SET, () => { - let cli: Cli; let log: string[]; let logger: Logger; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/cdn/cdn-get.spec.ts b/src/m365/spo/commands/cdn/cdn-get.spec.ts index 50a1d705c0c..8e3ed3c8216 100644 --- a/src/m365/spo/commands/cdn/cdn-get.spec.ts +++ b/src/m365/spo/commands/cdn/cdn-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -27,7 +27,7 @@ describe(commands.CDN_GET, () => { auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; auth.service.tenantId = 'abc'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/cdn/cdn-origin-add.spec.ts b/src/m365/spo/commands/cdn/cdn-origin-add.spec.ts index 8b1f5fa6614..44bc625d83d 100644 --- a/src/m365/spo/commands/cdn/cdn-origin-add.spec.ts +++ b/src/m365/spo/commands/cdn/cdn-origin-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -58,7 +58,7 @@ describe(commands.CDN_ORIGIN_ADD, () => { throw 'Invalid request'; }); - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/cdn/cdn-origin-list.spec.ts b/src/m365/spo/commands/cdn/cdn-origin-list.spec.ts index 24aa37c97b1..47ce7126471 100644 --- a/src/m365/spo/commands/cdn/cdn-origin-list.spec.ts +++ b/src/m365/spo/commands/cdn/cdn-origin-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -28,7 +28,7 @@ describe(commands.CDN_ORIGIN_LIST, () => { auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; auth.service.tenantId = 'abc'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/cdn/cdn-origin-remove.spec.ts b/src/m365/spo/commands/cdn/cdn-origin-remove.spec.ts index 5e3e13b14bf..4d07180912e 100644 --- a/src/m365/spo/commands/cdn/cdn-origin-remove.spec.ts +++ b/src/m365/spo/commands/cdn/cdn-origin-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -51,7 +51,7 @@ describe(commands.CDN_ORIGIN_REMOVE, () => { throw 'Invalid request'; }); - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -68,7 +68,7 @@ describe(commands.CDN_ORIGIN_REMOVE, () => { } }; requests = []; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -77,7 +77,7 @@ describe(commands.CDN_ORIGIN_REMOVE, () => { }); afterEach(() => { - sinonUtil.restore(Cli.promptForConfirmation); + sinonUtil.restore(cli.promptForConfirmation); }); after(() => { @@ -158,16 +158,16 @@ describe(commands.CDN_ORIGIN_REMOVE, () => { }); it('aborts removing CDN origin when prompt not confirmed', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { debug: true, origin: '*/cdn' } }); assert(requests.length === 0); }); it('removes CDN origin when prompt confirmed', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { debug: true, origin: '*/cdn' } }); }); diff --git a/src/m365/spo/commands/cdn/cdn-origin-remove.ts b/src/m365/spo/commands/cdn/cdn-origin-remove.ts index e8aad26e2b0..4fb55b7def3 100644 --- a/src/m365/spo/commands/cdn/cdn-origin-remove.ts +++ b/src/m365/spo/commands/cdn/cdn-origin-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import config from '../../../../config.js'; import GlobalOptions from '../../../../GlobalOptions.js'; @@ -115,7 +115,7 @@ class SpoCdnOriginRemoveCommand extends SpoCommand { await removeCdnOrigin(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to delete the ${args.options.origin} CDN origin?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to delete the ${args.options.origin} CDN origin?` }); if (result) { await removeCdnOrigin(); diff --git a/src/m365/spo/commands/cdn/cdn-policy-list.spec.ts b/src/m365/spo/commands/cdn/cdn-policy-list.spec.ts index dff171542bc..29d884d739f 100644 --- a/src/m365/spo/commands/cdn/cdn-policy-list.spec.ts +++ b/src/m365/spo/commands/cdn/cdn-policy-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -28,7 +28,7 @@ describe(commands.CDN_POLICY_LIST, () => { auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; auth.service.tenantId = 'abc'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/cdn/cdn-policy-set.spec.ts b/src/m365/spo/commands/cdn/cdn-policy-set.spec.ts index da9e7527dc2..2e6a0518e6b 100644 --- a/src/m365/spo/commands/cdn/cdn-policy-set.spec.ts +++ b/src/m365/spo/commands/cdn/cdn-policy-set.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -50,7 +50,7 @@ describe(commands.CDN_POLICY_SET, () => { throw 'Invalid request'; }); - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/cdn/cdn-set.spec.ts b/src/m365/spo/commands/cdn/cdn-set.spec.ts index 5a11877853a..a25bc56a5e5 100644 --- a/src/m365/spo/commands/cdn/cdn-set.spec.ts +++ b/src/m365/spo/commands/cdn/cdn-set.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -49,7 +49,7 @@ describe(commands.CDN_SET, () => { throw 'Invalid request'; }); - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/commandset/commandset-add.spec.ts b/src/m365/spo/commands/commandset/commandset-add.spec.ts index a44e89e3026..67c6e6a56b4 100644 --- a/src/m365/spo/commands/commandset/commandset-add.spec.ts +++ b/src/m365/spo/commands/commandset/commandset-add.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -55,7 +55,7 @@ describe(commands.COMMANDSET_ADD, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/commandset/commandset-get.spec.ts b/src/m365/spo/commands/commandset/commandset-get.spec.ts index ed88b0e0a1f..c24549c57b2 100644 --- a/src/m365/spo/commands/commandset/commandset-get.spec.ts +++ b/src/m365/spo/commands/commandset/commandset-get.spec.ts @@ -3,7 +3,7 @@ import sinon from 'sinon'; import { v4 } from 'uuid'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -17,7 +17,6 @@ import command from './commandset-get.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.COMMANDSET_GET, () => { - let cli: Cli; const webUrl = 'https://contoso.sharepoint.com/sites/project-z'; const commandSetId = '0a8e82b5-651f-400b-b537-9a739f92d6b4'; const clientSideComponentId = '2397e6ef-4b89-4508-aea2-e375e312c76d'; @@ -31,14 +30,13 @@ describe(commands.COMMANDSET_GET, () => { let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); - sinon.stub(Cli.getInstance(), 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { + commandInfo = cli.getCommandInfo(command); + sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { if (settingName === 'prompt') { return false; } @@ -68,7 +66,7 @@ describe(commands.COMMANDSET_GET, () => { odata.getAllItems, request.get, cli.getSettingWithDefaultValue, - Cli.handleMultipleResultsFound + cli.handleMultipleResultsFound ]); }); @@ -219,7 +217,7 @@ describe(commands.COMMANDSET_GET, () => { }); it('handles selecting single result when multiple command sets with the specified name found and cli is set to prompt', async () => { - sinon.stub(Cli, 'handleMultipleResultsFound').resolves(commandSetObject); + sinon.stub(cli, 'handleMultipleResultsFound').resolves(commandSetObject); const commandSetResponseClone = [...commandSetResponse]; const commandSetObjectClone = { ...commandSetObject }; diff --git a/src/m365/spo/commands/commandset/commandset-get.ts b/src/m365/spo/commands/commandset/commandset-get.ts index 41afacaec54..85bb0480dd7 100644 --- a/src/m365/spo/commands/commandset/commandset-get.ts +++ b/src/m365/spo/commands/commandset/commandset-get.ts @@ -5,7 +5,7 @@ import { spo } from '../../../../utils/spo.js'; import { validation } from '../../../../utils/validation.js'; import SpoCommand from '../../../base/SpoCommand.js'; import commands from '../../commands.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CustomAction } from '../customaction/customaction.js'; interface CommandArgs { @@ -136,7 +136,7 @@ class SpoCommandSetGetCommand extends SpoCommand { } else { const resultAsKeyValuePair = formatting.convertArrayToHashTable('Id', commandSets); - const commandSet = await Cli.handleMultipleResultsFound(`Multiple command sets with title '${args.options.title}' found.`, resultAsKeyValuePair); + const commandSet = await cli.handleMultipleResultsFound(`Multiple command sets with title '${args.options.title}' found.`, resultAsKeyValuePair); logger.log(commandSet); } } diff --git a/src/m365/spo/commands/commandset/commandset-list.spec.ts b/src/m365/spo/commands/commandset/commandset-list.spec.ts index b917065f2da..06f846851bb 100644 --- a/src/m365/spo/commands/commandset/commandset-list.spec.ts +++ b/src/m365/spo/commands/commandset/commandset-list.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -58,7 +58,7 @@ describe(commands.COMMANDSET_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/commandset/commandset-remove.spec.ts b/src/m365/spo/commands/commandset/commandset-remove.spec.ts index b81c3ad8dd8..83d68ccc98b 100644 --- a/src/m365/spo/commands/commandset/commandset-remove.spec.ts +++ b/src/m365/spo/commands/commandset/commandset-remove.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -16,7 +16,6 @@ import command from './commandset-remove.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.COMMANDSET_REMOVE, () => { - let cli: Cli; let log: string[]; let logger: Logger; let commandInfo: CommandInfo; @@ -114,13 +113,12 @@ describe(commands.COMMANDSET_REMOVE, () => { //#endregion before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -136,7 +134,7 @@ describe(commands.COMMANDSET_REMOVE, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -147,9 +145,9 @@ describe(commands.COMMANDSET_REMOVE, () => { sinonUtil.restore([ request.get, request.delete, - Cli.promptForConfirmation, + cli.promptForConfirmation, cli.getSettingWithDefaultValue, - Cli.handleMultipleResultsFound + cli.handleMultipleResultsFound ]); }); @@ -220,8 +218,8 @@ describe(commands.COMMANDSET_REMOVE, () => { it('aborts removing the specified commandset when force option not passed and prompt not confirmed', async () => { const postSpy = sinon.spy(request, 'delete'); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { @@ -313,7 +311,7 @@ describe(commands.COMMANDSET_REMOVE, () => { throw `Invalid request`; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves(commandsetSingleResponse.value[0]); + sinon.stub(cli, 'handleMultipleResultsFound').resolves(commandsetSingleResponse.value[0]); await command.action(logger, { options: { webUrl: validUrl, title: validTitle, force: true } }); assert(removeRequestIssued); @@ -379,8 +377,8 @@ describe(commands.COMMANDSET_REMOVE, () => { throw `Invalid request`; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await assert.doesNotReject(command.action(logger, { options: { @@ -408,8 +406,8 @@ describe(commands.COMMANDSET_REMOVE, () => { throw `Invalid request`; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await assert.doesNotReject(command.action(logger, { options: { diff --git a/src/m365/spo/commands/commandset/commandset-remove.ts b/src/m365/spo/commands/commandset/commandset-remove.ts index 49c80f55b69..f8c65025ace 100644 --- a/src/m365/spo/commands/commandset/commandset-remove.ts +++ b/src/m365/spo/commands/commandset/commandset-remove.ts @@ -7,7 +7,7 @@ import request, { CliRequestOptions } from '../../../../request.js'; import { CustomAction } from '../customaction/customaction.js'; import { formatting } from '../../../../utils/formatting.js'; import { spo } from '../../../../utils/spo.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; interface CommandArgs { options: Options; @@ -112,7 +112,7 @@ class SpoCommandSetRemoveCommand extends SpoCommand { await this.deleteCommandset(args); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove command set '${args.options.clientSideComponentId || args.options.title || args.options.id}'?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove command set '${args.options.clientSideComponentId || args.options.title || args.options.id}'?` }); if (result) { await this.deleteCommandset(args); @@ -142,7 +142,7 @@ class SpoCommandSetRemoveCommand extends SpoCommand { if (commandSets.length > 1) { const resultAsKeyValuePair = formatting.convertArrayToHashTable('Id', commandSets); - return await Cli.handleMultipleResultsFound(`Multiple user commandsets with ${options.title ? `title '${options.title}'` : `ClientSideComponentId '${options.clientSideComponentId}'`} found.`, resultAsKeyValuePair); + return await cli.handleMultipleResultsFound(`Multiple user commandsets with ${options.title ? `title '${options.title}'` : `ClientSideComponentId '${options.clientSideComponentId}'`} found.`, resultAsKeyValuePair); } return commandSets[0]; diff --git a/src/m365/spo/commands/commandset/commandset-set.spec.ts b/src/m365/spo/commands/commandset/commandset-set.spec.ts index 56671776800..668c885ca23 100644 --- a/src/m365/spo/commands/commandset/commandset-set.spec.ts +++ b/src/m365/spo/commands/commandset/commandset-set.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -16,7 +16,6 @@ import command from './commandset-set.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.COMMANDSET_SET, () => { - let cli: Cli; let log: string[]; let logger: Logger; let commandInfo: CommandInfo; @@ -116,13 +115,12 @@ describe(commands.COMMANDSET_SET, () => { //#endregion before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -145,7 +143,7 @@ describe(commands.COMMANDSET_SET, () => { request.get, request.post, cli.getSettingWithDefaultValue, - Cli.handleMultipleResultsFound + cli.handleMultipleResultsFound ]); }); @@ -349,7 +347,7 @@ describe(commands.COMMANDSET_SET, () => { throw `Invalid request`; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves(commandsetSingleResponse.value[0]); + sinon.stub(cli, 'handleMultipleResultsFound').resolves(commandsetSingleResponse.value[0]); await command.action(logger, { options: { verbose: true, webUrl: validUrl, title: validTitle, newTitle: validNewTitle, listType: 'Library', location: 'Both' } }); assert(updateRequestIssued); diff --git a/src/m365/spo/commands/commandset/commandset-set.ts b/src/m365/spo/commands/commandset/commandset-set.ts index 8fffc0c077c..a418b38dea0 100644 --- a/src/m365/spo/commands/commandset/commandset-set.ts +++ b/src/m365/spo/commands/commandset/commandset-set.ts @@ -7,7 +7,7 @@ import request, { CliRequestOptions } from '../../../../request.js'; import { CustomAction } from '../customaction/customaction.js'; import { formatting } from '../../../../utils/formatting.js'; import { spo } from '../../../../utils/spo.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; interface CommandArgs { options: Options; @@ -215,7 +215,7 @@ class SpoCommandSetSetCommand extends SpoCommand { if (commandSets.length > 1) { const resultAsKeyValuePair = formatting.convertArrayToHashTable('Id', commandSets); - return await Cli.handleMultipleResultsFound(`Multiple user commandsets with ${options.title ? `title '${options.title}'` : `ClientSideComponentId '${options.clientSideComponentId}'`} found.`, resultAsKeyValuePair); + return await cli.handleMultipleResultsFound(`Multiple user commandsets with ${options.title ? `title '${options.title}'` : `ClientSideComponentId '${options.clientSideComponentId}'`} found.`, resultAsKeyValuePair); } return commandSets[0]; diff --git a/src/m365/spo/commands/contenttype/contenttype-add.spec.ts b/src/m365/spo/commands/contenttype/contenttype-add.spec.ts index a5c07954b05..7db84059c31 100644 --- a/src/m365/spo/commands/contenttype/contenttype-add.spec.ts +++ b/src/m365/spo/commands/contenttype/contenttype-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -36,7 +36,7 @@ describe(commands.CONTENTTYPE_ADD, () => { }); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -60,7 +60,7 @@ describe(commands.CONTENTTYPE_ADD, () => { sinonUtil.restore([ request.get, request.post, - Cli.executeCommandWithOutput + cli.executeCommandWithOutput ]); }); @@ -96,7 +96,7 @@ describe(commands.CONTENTTYPE_ADD, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoContentTypeGetCommand) { return { stdout: '{"Description":"Create a new list item.","DisplayFormTemplateName":"ListForm","DisplayFormUrl":"","DocumentTemplate":"","DocumentTemplateUrl":"","EditFormTemplateName":"ListForm","EditFormUrl":"","Group":"PnP Content Types","Hidden":false,"Id":{"StringValue":"0x0100558D85B7216F6A489A499DB361E1AE2F"},"JSLink":"","MobileDisplayFormUrl":"","MobileEditFormUrl":"","MobileNewFormUrl":"","Name":"PnP Alert","NewFormTemplateName":"ListForm","NewFormUrl":"","ReadOnly":false,"SchemaXml":"","Scope":"/sites/portal","Sealed":false,"StringId":"0x0100FF0B2E33A3718B46A3909298D240FD93"}' }; } @@ -126,7 +126,7 @@ describe(commands.CONTENTTYPE_ADD, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoContentTypeGetCommand) { return { stdout: '{"Description":"Create a new list item.","DisplayFormTemplateName":"ListForm","DisplayFormUrl":"","DocumentTemplate":"","DocumentTemplateUrl":"","EditFormTemplateName":"ListForm","EditFormUrl":"","Group":"PnP Content Types","Hidden":false,"Id":{"StringValue":"0x0100558D85B7216F6A489A499DB361E1AE2F"},"JSLink":"","MobileDisplayFormUrl":"","MobileEditFormUrl":"","MobileNewFormUrl":"","Name":"PnP Alert","NewFormTemplateName":"ListForm","NewFormUrl":"","ReadOnly":false,"Scope":"/sites/portal","Sealed":false,"StringId":"0x0100FF0B2E33A3718B46A3909298D240FD93"}' }; } @@ -206,7 +206,7 @@ describe(commands.CONTENTTYPE_ADD, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoContentTypeGetCommand) { return { stdout: '{"Description":"Create a new list item.","DisplayFormTemplateName":"ListForm","DisplayFormUrl":"","DocumentTemplate":"","DocumentTemplateUrl":"","EditFormTemplateName":"ListForm","EditFormUrl":"","Group":"PnP Content Types","Hidden":false,"Id":{"StringValue":"0x0100558D85B7216F6A489A499DB361E1AE2F"},"JSLink":"","MobileDisplayFormUrl":"","MobileEditFormUrl":"","MobileNewFormUrl":"","Name":"PnP Alert","NewFormTemplateName":"ListForm","NewFormUrl":"","ReadOnly":false,"Scope":"/sites/portal","Sealed":false,"StringId":"0x0100FF0B2E33A3718B46A3909298D240FD93"}' }; } @@ -245,7 +245,7 @@ describe(commands.CONTENTTYPE_ADD, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoContentTypeGetCommand) { return { stdout: '{"Description":"Create a new list item.","DisplayFormTemplateName":"ListForm","DisplayFormUrl":"","DocumentTemplate":"","DocumentTemplateUrl":"","EditFormTemplateName":"ListForm","EditFormUrl":"","Group":"PnP Content Types","Hidden":false,"Id":{"StringValue":"0x0100558D85B7216F6A489A499DB361E1AE2F"},"JSLink":"","MobileDisplayFormUrl":"","MobileEditFormUrl":"","MobileNewFormUrl":"","Name":"PnP Alert","NewFormTemplateName":"ListForm","NewFormUrl":"","ReadOnly":false,"Scope":"/sites/portal","Sealed":false,"StringId":"0x0100FF0B2E33A3718B46A3909298D240FD93"}' }; } @@ -288,7 +288,7 @@ describe(commands.CONTENTTYPE_ADD, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoContentTypeGetCommand) { return { stdout: '{"Description":"Create a new list item.","DisplayFormTemplateName":"ListForm","DisplayFormUrl":"","DocumentTemplate":"","DocumentTemplateUrl":"","EditFormTemplateName":"ListForm","EditFormUrl":"","Group":"PnP Content Types","Hidden":false,"Id":{"StringValue":"0x0100558D85B7216F6A489A499DB361E1AE2F"},"JSLink":"","MobileDisplayFormUrl":"","MobileEditFormUrl":"","MobileNewFormUrl":"","Name":"PnP Alert","NewFormTemplateName":"ListForm","NewFormUrl":"","ReadOnly":false,"Scope":"/sites/portal","Sealed":false,"StringId":"0x0100FF0B2E33A3718B46A3909298D240FD93"}' }; } @@ -331,7 +331,7 @@ describe(commands.CONTENTTYPE_ADD, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoContentTypeGetCommand) { throw { 'error': 'Something went wrong obtaining the content types' }; } @@ -360,7 +360,7 @@ describe(commands.CONTENTTYPE_ADD, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoContentTypeGetCommand) { return { stdout: '{"Description":"Create a new list item.","DisplayFormTemplateName":"ListForm","DisplayFormUrl":"","DocumentTemplate":"","DocumentTemplateUrl":"","EditFormTemplateName":"ListForm","EditFormUrl":"","Group":"PnP Content Types","Hidden":false,"Id":{"StringValue":"0x0100558D85B7216F6A489A499DB361E1AE2F"},"JSLink":"","MobileDisplayFormUrl":"","MobileEditFormUrl":"","MobileNewFormUrl":"","Name":"PnP Alert","NewFormTemplateName":"ListForm","NewFormUrl":"","ReadOnly":false,"Scope":"/sites/portal","Sealed":false,"StringId":"0x0100FF0B2E33A3718B46A3909298D240FD93"}' }; } diff --git a/src/m365/spo/commands/contenttype/contenttype-add.ts b/src/m365/spo/commands/contenttype/contenttype-add.ts index 94cdce22969..388838cdc40 100644 --- a/src/m365/spo/commands/contenttype/contenttype-add.ts +++ b/src/m365/spo/commands/contenttype/contenttype-add.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import Command from '../../../../Command.js'; import config from '../../../../config.js'; @@ -152,7 +152,7 @@ class SpoContentTypeAddCommand extends SpoCommand { }; try { - const output = await Cli.executeCommandWithOutput(spoContentTypeGetCommand as Command, { options: { ...options, _: [] } }); + const output = await cli.executeCommandWithOutput(spoContentTypeGetCommand as Command, { options: { ...options, _: [] } }); if (this.debug) { await logger.logToStderr(output.stderr); } diff --git a/src/m365/spo/commands/contenttype/contenttype-field-remove.spec.ts b/src/m365/spo/commands/contenttype/contenttype-field-remove.spec.ts index 630e98332b6..849acbffd11 100644 --- a/src/m365/spo/commands/contenttype/contenttype-field-remove.spec.ts +++ b/src/m365/spo/commands/contenttype/contenttype-field-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -26,7 +26,6 @@ const LIST_TITLE = "TEST"; const LIST_URL = "/shared documents"; describe(commands.CONTENTTYPE_FIELD_REMOVE, () => { - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; @@ -135,7 +134,6 @@ describe(commands.CONTENTTYPE_FIELD_REMOVE, () => { }; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); @@ -148,7 +146,7 @@ describe(commands.CONTENTTYPE_FIELD_REMOVE, () => { }); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -164,7 +162,7 @@ describe(commands.CONTENTTYPE_FIELD_REMOVE, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -182,7 +180,7 @@ describe(commands.CONTENTTYPE_FIELD_REMOVE, () => { sinonUtil.restore([ request.get, request.post, - Cli.promptForConfirmation, + cli.promptForConfirmation, cli.getSettingWithDefaultValue ]); }); @@ -245,8 +243,8 @@ describe(commands.CONTENTTYPE_FIELD_REMOVE, () => { sinon.stub(request, 'get').callsFake(getStubCalls); const postCallbackStub = sinon.stub(request, 'post').callsFake(postStubSuccCalls); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { webUrl: WEB_URL, contentTypeId: CONTENT_TYPE_ID, fieldLinkId: FIELD_LINK_ID, @@ -259,8 +257,8 @@ describe(commands.CONTENTTYPE_FIELD_REMOVE, () => { sinon.stub(request, 'get').callsFake(getStubCalls); const postCallbackStub = sinon.stub(request, 'post').callsFake(postStubSuccCalls); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { @@ -290,8 +288,8 @@ describe(commands.CONTENTTYPE_FIELD_REMOVE, () => { sinon.stub(request, 'get').callsFake(getStubCalls); const postCallbackStub = sinon.stub(request, 'post').callsFake(postStubSuccCalls); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { @@ -333,8 +331,8 @@ describe(commands.CONTENTTYPE_FIELD_REMOVE, () => { sinon.stub(request, 'get').callsFake(getStubCalls); const postCallbackStub = sinon.stub(request, 'post').callsFake(postStubSuccCalls); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -349,8 +347,8 @@ describe(commands.CONTENTTYPE_FIELD_REMOVE, () => { sinon.stub(request, 'get').callsFake(getStubCalls); const postCallbackStub = sinon.stub(request, 'post').callsFake(postStubSuccCalls); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { @@ -381,8 +379,8 @@ describe(commands.CONTENTTYPE_FIELD_REMOVE, () => { sinon.stub(request, 'get').callsFake(getStubCalls); const postCallbackStub = sinon.stub(request, 'post').callsFake(postStubSuccCalls); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -399,8 +397,8 @@ describe(commands.CONTENTTYPE_FIELD_REMOVE, () => { sinon.stub(request, 'get').callsFake(getStubCalls); const postCallbackStub = sinon.stub(request, 'post').callsFake(postStubSuccCalls); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { @@ -473,8 +471,8 @@ describe(commands.CONTENTTYPE_FIELD_REMOVE, () => { sinon.stub(request, 'get').callsFake(getStubCalls); const postCallbackStub = sinon.stub(request, 'post').callsFake(postStubSuccCalls); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -491,8 +489,8 @@ describe(commands.CONTENTTYPE_FIELD_REMOVE, () => { sinon.stub(request, 'get').callsFake(getStubCalls); const postCallbackStub = sinon.stub(request, 'post').callsFake(postStubSuccCalls); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); command.action(logger, { options: { @@ -537,8 +535,8 @@ describe(commands.CONTENTTYPE_FIELD_REMOVE, () => { sinon.stub(request, 'get').callsFake(getStubCalls); const postCallbackStub = sinon.stub(request, 'post').callsFake(postStubSuccCalls); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -554,8 +552,8 @@ describe(commands.CONTENTTYPE_FIELD_REMOVE, () => { sinon.stub(request, 'get').callsFake(getStubCalls); const postCallbackStub = sinon.stub(request, 'post').callsFake(postStubSuccCalls); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -571,8 +569,8 @@ describe(commands.CONTENTTYPE_FIELD_REMOVE, () => { sinon.stub(request, 'get').callsFake(getStubCalls); const postCallbackStub = sinon.stub(request, 'post').callsFake(postStubSuccCalls); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -587,8 +585,8 @@ describe(commands.CONTENTTYPE_FIELD_REMOVE, () => { sinon.stub(request, 'get').callsFake(getStubCalls); const postCallbackStub = sinon.stub(request, 'post').callsFake(postStubSuccCalls); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); command.action(logger, { options: { @@ -626,8 +624,8 @@ describe(commands.CONTENTTYPE_FIELD_REMOVE, () => { sinon.stub(request, 'get').callsFake(getStubCalls); sinon.stub(request, 'post').callsFake(postStubFailedCalls); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await assert.rejects(command.action(logger, { options: { diff --git a/src/m365/spo/commands/contenttype/contenttype-field-remove.ts b/src/m365/spo/commands/contenttype/contenttype-field-remove.ts index 81b6b403705..e32e19bd267 100644 --- a/src/m365/spo/commands/contenttype/contenttype-field-remove.ts +++ b/src/m365/spo/commands/contenttype/contenttype-field-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -202,7 +202,7 @@ class SpoContentTypeFieldRemoveCommand extends SpoCommand { await removeFieldLink(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the column ${args.options.fieldLinkId} from content type ${args.options.contentTypeId}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the column ${args.options.fieldLinkId} from content type ${args.options.contentTypeId}?` }); if (result) { await removeFieldLink(); diff --git a/src/m365/spo/commands/contenttype/contenttype-field-set.spec.ts b/src/m365/spo/commands/contenttype/contenttype-field-set.spec.ts index 2dc633b9a25..9a2d47698fb 100644 --- a/src/m365/spo/commands/contenttype/contenttype-field-set.spec.ts +++ b/src/m365/spo/commands/contenttype/contenttype-field-set.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -35,7 +35,7 @@ describe(commands.CONTENTTYPE_FIELD_SET, () => { }); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/contenttype/contenttype-get.spec.ts b/src/m365/spo/commands/contenttype/contenttype-get.spec.ts index a4ad4993d81..05416167cca 100644 --- a/src/m365/spo/commands/contenttype/contenttype-get.spec.ts +++ b/src/m365/spo/commands/contenttype/contenttype-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -17,20 +17,18 @@ import { settingsNames } from '../../../../settingsNames.js'; describe(commands.CONTENTTYPE_GET, () => { const contentTypeByIdResponse = { "Description": "Create a new list item.", "DisplayFormTemplateName": "ListForm", "DisplayFormUrl": "", "DocumentTemplate": "", "DocumentTemplateUrl": "", "EditFormTemplateName": "ListForm", "EditFormUrl": "", "Group": "PnP Content Types", "Hidden": false, "Id": { "StringValue": "0x0100558D85B7216F6A489A499DB361E1AE2F" }, "JSLink": "", "MobileDisplayFormUrl": "", "MobileEditFormUrl": "", "MobileNewFormUrl": "", "Name": "PnP Alert", "NewFormTemplateName": "ListForm", "NewFormUrl": "", "ReadOnly": false, "SchemaXml": "ListFormListFormListForm", "Scope": "/sites/portal", "Sealed": false, "StringId": "0x0100558D85B7216F6A489A499DB361E1AE2F" }; const contentTypeByNameResponse = { value: [{ "Description": "Create a new list item.", "DisplayFormTemplateName": "ListForm", "DisplayFormUrl": "", "DocumentTemplate": "", "DocumentTemplateUrl": "", "EditFormTemplateName": "ListForm", "EditFormUrl": "", "Group": "PnP Content Types", "Hidden": false, "Id": { "StringValue": "0x0100558D85B7216F6A489A499DB361E1AE2F" }, "JSLink": "", "MobileDisplayFormUrl": "", "MobileEditFormUrl": "", "MobileNewFormUrl": "", "Name": "PnP Alert", "NewFormTemplateName": "ListForm", "NewFormUrl": "", "ReadOnly": false, "SchemaXml": "ListFormListFormListForm", "Scope": "/sites/portal", "Sealed": false, "StringId": "0x0100558D85B7216F6A489A499DB361E1AE2F" }] }; - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/contenttype/contenttype-list.spec.ts b/src/m365/spo/commands/contenttype/contenttype-list.spec.ts index 7f1559308e2..f257d5e48cf 100644 --- a/src/m365/spo/commands/contenttype/contenttype-list.spec.ts +++ b/src/m365/spo/commands/contenttype/contenttype-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -25,7 +25,7 @@ describe(commands.CONTENTTYPE_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/contenttype/contenttype-remove.spec.ts b/src/m365/spo/commands/contenttype/contenttype-remove.spec.ts index 6963e3bd055..02f842a7a5a 100644 --- a/src/m365/spo/commands/contenttype/contenttype-remove.spec.ts +++ b/src/m365/spo/commands/contenttype/contenttype-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,20 +15,18 @@ import command from './contenttype-remove.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.CONTENTTYPE_REMOVE, () => { - let cli: Cli; let log: string[]; let logger: Logger; let commandInfo: CommandInfo; let promptIssued: boolean = false; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -44,7 +42,7 @@ describe(commands.CONTENTTYPE_REMOVE, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -55,7 +53,7 @@ describe(commands.CONTENTTYPE_REMOVE, () => { sinonUtil.restore([ request.get, request.post, - Cli.promptForConfirmation, + cli.promptForConfirmation, cli.getSettingWithDefaultValue ]); }); @@ -99,8 +97,8 @@ describe(commands.CONTENTTYPE_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -124,8 +122,8 @@ describe(commands.CONTENTTYPE_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { debug: true, @@ -178,8 +176,8 @@ describe(commands.CONTENTTYPE_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { debug: true, verbose: false, webUrl: 'https://contoso.sharepoint.com/sites/portal', name: 'TestContentType', force: false } }); assert(getCallbackStub.called); @@ -203,8 +201,8 @@ describe(commands.CONTENTTYPE_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { verbose: true, webUrl: 'https://contoso.sharepoint.com/sites/portal', name: 'TestContentType', force: false } }); assert(postCallbackStub.notCalled); diff --git a/src/m365/spo/commands/contenttype/contenttype-remove.ts b/src/m365/spo/commands/contenttype/contenttype-remove.ts index 5e2f3c9e537..230f1f07fbc 100644 --- a/src/m365/spo/commands/contenttype/contenttype-remove.ts +++ b/src/m365/spo/commands/contenttype/contenttype-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -147,7 +147,7 @@ class SpoContentTypeRemoveCommand extends SpoCommand { await removeContentType(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the content type ${args.options.id || args.options.name}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the content type ${args.options.id || args.options.name}?` }); if (result) { await removeContentType(); diff --git a/src/m365/spo/commands/contenttype/contenttype-set.spec.ts b/src/m365/spo/commands/contenttype/contenttype-set.spec.ts index b3ecafa26f1..c3e82981c10 100644 --- a/src/m365/spo/commands/contenttype/contenttype-set.spec.ts +++ b/src/m365/spo/commands/contenttype/contenttype-set.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import config from '../../../../config.js'; @@ -50,7 +50,7 @@ describe(commands.CONTENTTYPE_SET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/customaction/customaction-add.spec.ts b/src/m365/spo/commands/customaction/customaction-add.spec.ts index db7be9b9ac2..b52300e3ad3 100644 --- a/src/m365/spo/commands/customaction/customaction-add.spec.ts +++ b/src/m365/spo/commands/customaction/customaction-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -39,7 +39,7 @@ describe(commands.CUSTOMACTION_ADD, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/customaction/customaction-clear.spec.ts b/src/m365/spo/commands/customaction/customaction-clear.spec.ts index a3d4b6088c4..67268a08132 100644 --- a/src/m365/spo/commands/customaction/customaction-clear.spec.ts +++ b/src/m365/spo/commands/customaction/customaction-clear.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,7 +15,6 @@ import command from './customaction-clear.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.CUSTOMACTION_CLEAR, () => { - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; @@ -38,13 +37,12 @@ describe(commands.CUSTOMACTION_CLEAR, () => { }; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -61,7 +59,7 @@ describe(commands.CUSTOMACTION_CLEAR, () => { } }; loggerLogSpy = sinon.spy(logger, 'log'); - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -71,7 +69,7 @@ describe(commands.CUSTOMACTION_CLEAR, () => { afterEach(() => { sinonUtil.restore([ request.post, - Cli.promptForConfirmation, + cli.promptForConfirmation, cli.getSettingWithDefaultValue ]); }); @@ -111,8 +109,8 @@ describe(commands.CUSTOMACTION_CLEAR, () => { it('should abort custom actions clear when prompt not confirmed', async () => { const postCallsSpy: sinon.SinonStub = defaultPostCallsStub(); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { webUrl: 'https://contoso.sharepoint.com' } } as any); assert(postCallsSpy.notCalled); }); @@ -121,8 +119,8 @@ describe(commands.CUSTOMACTION_CLEAR, () => { const postCallsSpy: sinon.SinonStub = defaultPostCallsStub(); const clearScopedCustomActionsSpy = sinon.spy((command as any), 'clearScopedCustomActions'); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); try { await command.action(logger, { options: { webUrl: 'https://contoso.sharepoint.com' } } as any); diff --git a/src/m365/spo/commands/customaction/customaction-clear.ts b/src/m365/spo/commands/customaction/customaction-clear.ts index 84f3e171015..630b35152c0 100644 --- a/src/m365/spo/commands/customaction/customaction-clear.ts +++ b/src/m365/spo/commands/customaction/customaction-clear.ts @@ -1,5 +1,5 @@ import chalk from 'chalk'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -97,7 +97,7 @@ class SpoCustomActionClearCommand extends SpoCommand { await clearCustomActions(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to clear all the user custom actions with scope ${chalk.yellow(args.options.scope || 'All')}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to clear all the user custom actions with scope ${chalk.yellow(args.options.scope || 'All')}?` }); if (result) { await clearCustomActions(); diff --git a/src/m365/spo/commands/customaction/customaction-get.spec.ts b/src/m365/spo/commands/customaction/customaction-get.spec.ts index 9f620d5791e..33cbba9a611 100644 --- a/src/m365/spo/commands/customaction/customaction-get.spec.ts +++ b/src/m365/spo/commands/customaction/customaction-get.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -15,7 +15,6 @@ import command from './customaction-get.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.CUSTOMACTION_GET, () => { - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; @@ -66,14 +65,13 @@ describe(commands.CUSTOMACTION_GET, () => { before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); - sinon.stub(Cli.getInstance(), 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { + commandInfo = cli.getCommandInfo(command); + sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { if (settingName === 'prompt') { return false; } @@ -102,7 +100,7 @@ describe(commands.CUSTOMACTION_GET, () => { sinonUtil.restore([ request.get, cli.getSettingWithDefaultValue, - Cli.handleMultipleResultsFound + cli.handleMultipleResultsFound ]); }); @@ -193,7 +191,7 @@ describe(commands.CUSTOMACTION_GET, () => { }); it('handles selecting single result when multiple custom actions sets with the specified name found and cli is set to prompt', async () => { - sinon.stub(Cli, 'handleMultipleResultsFound').resolves({ + sinon.stub(cli, 'handleMultipleResultsFound').resolves({ ClientSideComponentId: '015e0fcf-fe9d-4037-95af-0a4776cdfbb4', ClientSideComponentProperties: '{"testMessage":"Test message"}', CommandUIExtension: null, @@ -689,7 +687,7 @@ describe(commands.CUSTOMACTION_GET, () => { }); it('handles selecting single result when multiple custom actions sets with the specified ClientSideComponentId found and cli is set to prompt', async () => { - sinon.stub(Cli, 'handleMultipleResultsFound').resolves({ + sinon.stub(cli, 'handleMultipleResultsFound').resolves({ ClientSideComponentId: '015e0fcf-fe9d-4037-95af-0a4776cdfbb4', ClientSideComponentProperties: '{"testMessage":"Test message"}', CommandUIExtension: null, diff --git a/src/m365/spo/commands/customaction/customaction-get.ts b/src/m365/spo/commands/customaction/customaction-get.ts index 39a4b2c2fa0..c6836758b5d 100644 --- a/src/m365/spo/commands/customaction/customaction-get.ts +++ b/src/m365/spo/commands/customaction/customaction-get.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import { formatting } from '../../../../utils/formatting.js'; @@ -158,7 +158,7 @@ class SpoCustomActionGetCommand extends SpoCommand { } const resultAsKeyValuePair = formatting.convertArrayToHashTable('Id', customActions); - return await Cli.handleMultipleResultsFound(`Multiple user custom actions with title '${options.title}' found.`, resultAsKeyValuePair); + return await cli.handleMultipleResultsFound(`Multiple user custom actions with title '${options.title}' found.`, resultAsKeyValuePair); } else { const customActions: CustomAction[] = await spo.getCustomActions(options.webUrl, options.scope, `ClientSideComponentId eq guid'${options.clientSideComponentId}'`); @@ -169,7 +169,7 @@ class SpoCustomActionGetCommand extends SpoCommand { if (customActions.length > 1) { const resultAsKeyValuePair = formatting.convertArrayToHashTable('Id', customActions); - return await Cli.handleMultipleResultsFound(`Multiple user custom actions with ClientSideComponentId '${options.clientSideComponentId}' found.`, resultAsKeyValuePair); + return await cli.handleMultipleResultsFound(`Multiple user custom actions with ClientSideComponentId '${options.clientSideComponentId}' found.`, resultAsKeyValuePair); } return customActions[0]; diff --git a/src/m365/spo/commands/customaction/customaction-list.spec.ts b/src/m365/spo/commands/customaction/customaction-list.spec.ts index f6945a1206f..254a62958b0 100644 --- a/src/m365/spo/commands/customaction/customaction-list.spec.ts +++ b/src/m365/spo/commands/customaction/customaction-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -26,7 +26,7 @@ describe(commands.CUSTOMACTION_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/customaction/customaction-remove.spec.ts b/src/m365/spo/commands/customaction/customaction-remove.spec.ts index 87c7da03b93..99da5ea4686 100644 --- a/src/m365/spo/commands/customaction/customaction-remove.spec.ts +++ b/src/m365/spo/commands/customaction/customaction-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,7 +15,6 @@ import command from './customaction-remove.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.CUSTOMACTION_REMOVE, () => { - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; @@ -40,13 +39,12 @@ describe(commands.CUSTOMACTION_REMOVE, () => { }; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -66,7 +64,7 @@ describe(commands.CUSTOMACTION_REMOVE, () => { loggerLogSpy = sinon.spy(logger, 'log'); loggerLogToStderrSpy = sinon.spy(logger, 'logToStderr'); - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -78,9 +76,9 @@ describe(commands.CUSTOMACTION_REMOVE, () => { sinonUtil.restore([ request.get, request.post, - Cli.promptForConfirmation, + cli.promptForConfirmation, cli.getSettingWithDefaultValue, - Cli.handleMultipleResultsFound + cli.handleMultipleResultsFound ]); }); @@ -226,7 +224,7 @@ describe(commands.CUSTOMACTION_REMOVE, () => { throw `Invalid request`; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves({ + sinon.stub(cli, 'handleMultipleResultsFound').resolves({ ClientSideComponentId: '015e0fcf-fe9d-4037-95af-0a4776cdfbb4', ClientSideComponentProperties: '{"testMessage":"Test message"}', CommandUIExtension: null, @@ -251,8 +249,8 @@ describe(commands.CUSTOMACTION_REMOVE, () => { const postCallsSpy: sinon.SinonStub = defaultPostCallsStub(); const removeScopedCustomActionSpy = sinon.spy((command as any), 'removeScopedCustomAction'); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); try { await command.action(logger, { options: { title: 'Places', webUrl: 'https://contoso.sharepoint.com' } } as any); @@ -309,8 +307,8 @@ describe(commands.CUSTOMACTION_REMOVE, () => { it('should abort custom action remove when prompt not confirmed', async () => { const postCallsSpy: sinon.SinonStub = defaultPostCallsStub(); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { id: 'b2307a39-e878-458b-bc90-03bc578531d6', webUrl: 'https://contoso.sharepoint.com' } } as any); assert(postCallsSpy.notCalled); @@ -320,8 +318,8 @@ describe(commands.CUSTOMACTION_REMOVE, () => { const postCallsSpy: sinon.SinonStub = defaultPostCallsStub(); const removeScopedCustomActionSpy = sinon.spy((command as any), 'removeScopedCustomAction'); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); try { await command.action(logger, { options: { id: 'b2307a39-e878-458b-bc90-03bc578531d6', webUrl: 'https://contoso.sharepoint.com' } } as any); @@ -372,8 +370,8 @@ describe(commands.CUSTOMACTION_REMOVE, () => { const postCallsSpy: sinon.SinonStub = defaultPostCallsStub(); const removeScopedCustomActionSpy = sinon.spy((command as any), 'removeScopedCustomAction'); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); try { await command.action(logger, { options: { title: 'Places', webUrl: 'https://contoso.sharepoint.com' } } as any); diff --git a/src/m365/spo/commands/customaction/customaction-remove.ts b/src/m365/spo/commands/customaction/customaction-remove.ts index 80b45a43c97..04c676b2717 100644 --- a/src/m365/spo/commands/customaction/customaction-remove.ts +++ b/src/m365/spo/commands/customaction/customaction-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -124,7 +124,7 @@ class SpoCustomActionRemoveCommand extends SpoCommand { await removeCustomAction(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the ${args.options.id} user custom action?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the ${args.options.id} user custom action?` }); if (result) { await removeCustomAction(); @@ -148,7 +148,7 @@ class SpoCustomActionRemoveCommand extends SpoCommand { } const resultAsKeyValuePair = formatting.convertArrayToHashTable('Id', customActions); - const result = await Cli.handleMultipleResultsFound(`Multiple user custom actions with title '${options.title}' found.`, resultAsKeyValuePair); + const result = await cli.handleMultipleResultsFound(`Multiple user custom actions with title '${options.title}' found.`, resultAsKeyValuePair); return result.Id; } diff --git a/src/m365/spo/commands/customaction/customaction-set.spec.ts b/src/m365/spo/commands/customaction/customaction-set.spec.ts index 86eeea16834..259b6667a5f 100644 --- a/src/m365/spo/commands/customaction/customaction-set.spec.ts +++ b/src/m365/spo/commands/customaction/customaction-set.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,7 +15,6 @@ import command from './customaction-set.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.CUSTOMACTION_SET, () => { - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; @@ -37,13 +36,12 @@ describe(commands.CUSTOMACTION_SET, () => { }; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/eventreceiver/eventreceiver-get.spec.ts b/src/m365/spo/commands/eventreceiver/eventreceiver-get.spec.ts index 3f1dbbb80bf..0d80c89e9e8 100644 --- a/src/m365/spo/commands/eventreceiver/eventreceiver-get.spec.ts +++ b/src/m365/spo/commands/eventreceiver/eventreceiver-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,7 +15,6 @@ import command from './eventreceiver-get.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.EVENTRECEIVER_GET, () => { - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; @@ -37,14 +36,13 @@ describe(commands.EVENTRECEIVER_GET, () => { }; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); - sinon.stub(Cli.getInstance(), 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { + commandInfo = cli.getCommandInfo(command); + sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { if (settingName === 'prompt') { return false; } @@ -74,7 +72,7 @@ describe(commands.EVENTRECEIVER_GET, () => { sinonUtil.restore([ request.get, cli.getSettingWithDefaultValue, - Cli.handleMultipleResultsFound + cli.handleMultipleResultsFound ]); }); @@ -198,7 +196,7 @@ describe(commands.EVENTRECEIVER_GET, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves(eventReceiverResponseJson); + sinon.stub(cli, 'handleMultipleResultsFound').resolves(eventReceiverResponseJson); await command.action(logger, { options: { webUrl: 'https://contoso.sharepoint.com/sites/portal', name: 'PnP Test Receiver' } }); assert(loggerLogSpy.calledWith(eventReceiverResponseJson)); diff --git a/src/m365/spo/commands/eventreceiver/eventreceiver-get.ts b/src/m365/spo/commands/eventreceiver/eventreceiver-get.ts index ea111ed19be..fdab14ae7c8 100644 --- a/src/m365/spo/commands/eventreceiver/eventreceiver-get.ts +++ b/src/m365/spo/commands/eventreceiver/eventreceiver-get.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -179,7 +179,7 @@ class SpoEventreceiverGetCommand extends SpoCommand { if (res.value && res.value.length > 1) { const resultAsKeyValuePair = formatting.convertArrayToHashTable('ReceiverId', res.value); - return await Cli.handleMultipleResultsFound(`Multiple event receivers with name '${args.options.name}' found.`, resultAsKeyValuePair); + return await cli.handleMultipleResultsFound(`Multiple event receivers with name '${args.options.name}' found.`, resultAsKeyValuePair); } return res.value[0]; diff --git a/src/m365/spo/commands/eventreceiver/eventreceiver-list.spec.ts b/src/m365/spo/commands/eventreceiver/eventreceiver-list.spec.ts index bedd298e9ee..a505fba39b4 100644 --- a/src/m365/spo/commands/eventreceiver/eventreceiver-list.spec.ts +++ b/src/m365/spo/commands/eventreceiver/eventreceiver-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -52,7 +52,7 @@ describe(commands.EVENTRECEIVER_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/eventreceiver/eventreceiver-remove.spec.ts b/src/m365/spo/commands/eventreceiver/eventreceiver-remove.spec.ts index 18a7a449117..0ef08031660 100644 --- a/src/m365/spo/commands/eventreceiver/eventreceiver-remove.spec.ts +++ b/src/m365/spo/commands/eventreceiver/eventreceiver-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -39,7 +39,7 @@ describe(commands.EVENTRECEIVER_REMOVE, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -57,7 +57,7 @@ describe(commands.EVENTRECEIVER_REMOVE, () => { }; (command as any).items = []; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -67,8 +67,8 @@ describe(commands.EVENTRECEIVER_REMOVE, () => { afterEach(() => { sinonUtil.restore([ - Cli.executeCommandWithOutput, - Cli.promptForConfirmation, + cli.executeCommandWithOutput, + cli.promptForConfirmation, request.delete ]); }); @@ -167,7 +167,7 @@ describe(commands.EVENTRECEIVER_REMOVE, () => { throw 'Invalid request URL: ' + opts.url; }); - sinon.stub(Cli, 'executeCommandWithOutput').resolves({ + sinon.stub(cli, 'executeCommandWithOutput').resolves({ stdout: eventReceiverResponse, stderr: '' }); @@ -185,12 +185,12 @@ describe(commands.EVENTRECEIVER_REMOVE, () => { throw 'Invalid request URL: ' + opts.url; }); - sinon.stub(Cli, 'executeCommandWithOutput').resolves({ + sinon.stub(cli, 'executeCommandWithOutput').resolves({ stdout: eventReceiverResponse, stderr: '' }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { webUrl: 'https://contoso.sharepoint.com/sites/portal', scope: 'site', name: 'PnP Test Receiver' } }); assert(requestDeleteStub.called); @@ -205,13 +205,13 @@ describe(commands.EVENTRECEIVER_REMOVE, () => { throw 'Invalid request URL: ' + opts.url; }); - sinon.stub(Cli, 'executeCommandWithOutput').resolves({ + sinon.stub(cli, 'executeCommandWithOutput').resolves({ stdout: eventReceiverResponse, stderr: '' }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { webUrl: 'https://contoso.sharepoint.com/sites/portal', name: 'PnP Test Receiver', listUrl: '/sites/portal/Lists/rerlist' } }); assert(requestDeleteStub.called); @@ -226,13 +226,13 @@ describe(commands.EVENTRECEIVER_REMOVE, () => { throw 'Invalid request URL: ' + opts.url; }); - sinon.stub(Cli, 'executeCommandWithOutput').resolves({ + sinon.stub(cli, 'executeCommandWithOutput').resolves({ stdout: eventReceiverResponse, stderr: '' }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { webUrl: 'https://contoso.sharepoint.com/sites/portal', name: 'PnP Test Receiver', listId: '8fccab0d-78e5-4037-a6a7-0168f9359cd4' } }); assert(requestDeleteStub.called); @@ -247,13 +247,13 @@ describe(commands.EVENTRECEIVER_REMOVE, () => { throw 'Invalid request URL: ' + opts.url; }); - sinon.stub(Cli, 'executeCommandWithOutput').resolves({ + sinon.stub(cli, 'executeCommandWithOutput').resolves({ stdout: eventReceiverResponse, stderr: '' }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { webUrl: 'https://contoso.sharepoint.com/sites/portal', scope: 'site', id: '625b1f4c-2869-457f-8b41-bed72059bb2b' } }); assert(requestDeleteStub.called); @@ -268,13 +268,13 @@ describe(commands.EVENTRECEIVER_REMOVE, () => { throw 'Invalid request URL: ' + opts.url; }); - sinon.stub(Cli, 'executeCommandWithOutput').resolves({ + sinon.stub(cli, 'executeCommandWithOutput').resolves({ stdout: eventReceiverResponse, stderr: '' }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { webUrl: 'https://contoso.sharepoint.com/sites/portal', listTitle: 'Documents', name: 'PnP Test Receiver' } }); assert(requestDeleteStub.called); @@ -283,7 +283,7 @@ describe(commands.EVENTRECEIVER_REMOVE, () => { it('correctly handles API OData error', async () => { const errorMessage = 'Something went wrong'; - sinon.stub(Cli, 'executeCommandWithOutput').resolves({ + sinon.stub(cli, 'executeCommandWithOutput').resolves({ stdout: eventReceiverResponse, stderr: '' }); diff --git a/src/m365/spo/commands/eventreceiver/eventreceiver-remove.ts b/src/m365/spo/commands/eventreceiver/eventreceiver-remove.ts index 7c1914c3adf..9a2e97d7078 100644 --- a/src/m365/spo/commands/eventreceiver/eventreceiver-remove.ts +++ b/src/m365/spo/commands/eventreceiver/eventreceiver-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import Command from '../../../../Command.js'; import GlobalOptions from '../../../../GlobalOptions.js'; @@ -127,7 +127,7 @@ class SpoEventreceiverRemoveCommand extends SpoCommand { await this.removeEventReceiver(args.options); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove event receiver with ${args.options.id ? `id ${args.options.id}` : `name ${args.options.name}`}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove event receiver with ${args.options.id ? `id ${args.options.id}` : `name ${args.options.name}`}?` }); if (result) { await this.removeEventReceiver(args.options); @@ -185,7 +185,7 @@ class SpoEventreceiverRemoveCommand extends SpoCommand { verbose: this.verbose }; - const commandOutput = await Cli.executeCommandWithOutput(getCommand as Command, { options: { ...getOptions, _: [] } }); + const commandOutput = await cli.executeCommandWithOutput(getCommand as Command, { options: { ...getOptions, _: [] } }); const eventReceiver: EventReceiver = JSON.parse(commandOutput.stdout); return eventReceiver.ReceiverId; diff --git a/src/m365/spo/commands/externaluser/externaluser-list.spec.ts b/src/m365/spo/commands/externaluser/externaluser-list.spec.ts index 0fe50909cf7..03cb704c303 100644 --- a/src/m365/spo/commands/externaluser/externaluser-list.spec.ts +++ b/src/m365/spo/commands/externaluser/externaluser-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -34,7 +34,7 @@ describe(commands.EXTERNALUSER_LIST, () => { }); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/feature/feature-disable.spec.ts b/src/m365/spo/commands/feature/feature-disable.spec.ts index 941fbc53eae..96b601e1a7b 100644 --- a/src/m365/spo/commands/feature/feature-disable.spec.ts +++ b/src/m365/spo/commands/feature/feature-disable.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -25,7 +25,7 @@ describe(commands.FEATURE_DISABLE, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/feature/feature-enable.spec.ts b/src/m365/spo/commands/feature/feature-enable.spec.ts index 15514d491a7..24eb22c4bd7 100644 --- a/src/m365/spo/commands/feature/feature-enable.spec.ts +++ b/src/m365/spo/commands/feature/feature-enable.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,20 +15,18 @@ import command from './feature-enable.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.FEATURE_ENABLE, () => { - let cli: Cli; let log: string[]; let logger: Logger; let commandInfo: CommandInfo; let requests: any[]; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/feature/feature-list.spec.ts b/src/m365/spo/commands/feature/feature-list.spec.ts index 672401183b6..03882754d5e 100644 --- a/src/m365/spo/commands/feature/feature-list.spec.ts +++ b/src/m365/spo/commands/feature/feature-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -25,7 +25,7 @@ describe(commands.FEATURE_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/field/field-add.spec.ts b/src/m365/spo/commands/field/field-add.spec.ts index 53437a90bff..19d25d386cc 100644 --- a/src/m365/spo/commands/field/field-add.spec.ts +++ b/src/m365/spo/commands/field/field-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -34,7 +34,7 @@ describe(commands.FIELD_ADD, () => { WebFullUrl: 'https://contoso.sharepoint.com' }); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/field/field-get.spec.ts b/src/m365/spo/commands/field/field-get.spec.ts index eae37952c72..17d79232c39 100644 --- a/src/m365/spo/commands/field/field-get.spec.ts +++ b/src/m365/spo/commands/field/field-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -25,7 +25,7 @@ describe(commands.FIELD_GET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/field/field-list.spec.ts b/src/m365/spo/commands/field/field-list.spec.ts index 93fe792c9ed..08889f91b81 100644 --- a/src/m365/spo/commands/field/field-list.spec.ts +++ b/src/m365/spo/commands/field/field-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -25,7 +25,7 @@ describe(commands.FIELD_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/field/field-remove.spec.ts b/src/m365/spo/commands/field/field-remove.spec.ts index 2c9ef5d56db..a57eb326350 100644 --- a/src/m365/spo/commands/field/field-remove.spec.ts +++ b/src/m365/spo/commands/field/field-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,7 +15,6 @@ import command from './field-remove.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.FIELD_REMOVE, () => { - let cli: Cli; let log: any[]; let logger: Logger; let commandInfo: CommandInfo; @@ -23,13 +22,12 @@ describe(commands.FIELD_REMOVE, () => { let promptIssued: boolean = false; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -46,7 +44,7 @@ describe(commands.FIELD_REMOVE, () => { } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -60,7 +58,7 @@ describe(commands.FIELD_REMOVE, () => { sinonUtil.restore([ request.post, request.get, - Cli.promptForConfirmation, + cli.promptForConfirmation, cli.getSettingWithDefaultValue ]); }); @@ -97,16 +95,16 @@ describe(commands.FIELD_REMOVE, () => { }); it('aborts removing field when prompt not confirmed', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { id: 'b2307a39-e878-458b-bc90-03bc578531d6', webUrl: 'https://contoso.sharepoint.com' } }); assert(requests.length === 0); }); it('aborts removing field when prompt not confirmed and passing the group parameter', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { group: 'MyGroup', webUrl: 'https://contoso.sharepoint.com' } }); assert(requests.length === 0); @@ -127,8 +125,8 @@ describe(commands.FIELD_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await assert.rejects(command.action(logger, { options: { id: 'b2307a39-e878-458b-bc90-03bc578531d6', webUrl: 'https://contoso.sharepoint.com' } })); let correctRequestIssued = false; requests.forEach(r => { @@ -199,8 +197,8 @@ describe(commands.FIELD_REMOVE, () => { }); it('calls group and deletes two fields and asks for confirmation', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); const getStub = sinon.stub(request, 'get').callsFake(async (opts) => { if (opts.url === `https://contoso.sharepoint.com/sites/portal/_api/web/GetList(\'%2Fsites%2Fportal%2FLists%2FEvents\')/fields`) { diff --git a/src/m365/spo/commands/field/field-remove.ts b/src/m365/spo/commands/field/field-remove.ts index 737e32e82c9..fb8efabb529 100644 --- a/src/m365/spo/commands/field/field-remove.ts +++ b/src/m365/spo/commands/field/field-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -206,7 +206,7 @@ class SpoFieldRemoveCommand extends SpoCommand { else { const confirmMessage: string = `Are you sure you want to remove the ${args.options.group ? 'fields' : 'field'} ${args.options.id || args.options.title || 'from group ' + args.options.group} ${messageEnd}?`; - const result = await Cli.promptForConfirmation({ message: confirmMessage }); + const result = await cli.promptForConfirmation({ message: confirmMessage }); if (result) { await prepareRemoval(); diff --git a/src/m365/spo/commands/field/field-set.spec.ts b/src/m365/spo/commands/field/field-set.spec.ts index fd989f5f63b..8a2dec6ff4c 100644 --- a/src/m365/spo/commands/field/field-set.spec.ts +++ b/src/m365/spo/commands/field/field-set.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import Sinon, * as sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -18,14 +18,12 @@ import command from './field-set.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.FIELD_SET, () => { - let cli: Cli; let log: any[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); @@ -37,7 +35,7 @@ describe(commands.FIELD_SET, () => { WebFullUrl: 'https://contoso.sharepoint.com' }); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/file/file-add.spec.ts b/src/m365/spo/commands/file/file-add.spec.ts index 4a4dc228082..90912febc76 100644 --- a/src/m365/spo/commands/file/file-add.spec.ts +++ b/src/m365/spo/commands/file/file-add.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import fs from 'fs'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -202,7 +202,7 @@ describe(commands.FILE_ADD, () => { sinon.stub(session, 'getId').returns(''); sinon.stub(Buffer, 'alloc').returns(Buffer.from('abc')); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/file/file-checkin.spec.ts b/src/m365/spo/commands/file/file-checkin.spec.ts index f594d11d454..1a4ac62e38c 100644 --- a/src/m365/spo/commands/file/file-checkin.spec.ts +++ b/src/m365/spo/commands/file/file-checkin.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,7 +15,6 @@ import command from './file-checkin.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.FILE_CHECKIN, () => { - let cli: Cli; let log: any[]; let logger: Logger; let commandInfo: CommandInfo; @@ -44,13 +43,12 @@ describe(commands.FILE_CHECKIN, () => { }; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/file/file-checkout-undo.spec.ts b/src/m365/spo/commands/file/file-checkout-undo.spec.ts index 05cc2a034d2..3f87d6204c2 100644 --- a/src/m365/spo/commands/file/file-checkout-undo.spec.ts +++ b/src/m365/spo/commands/file/file-checkout-undo.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -31,7 +31,7 @@ describe(commands.FILE_CHECKOUT_UNDO, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -47,7 +47,7 @@ describe(commands.FILE_CHECKOUT_UNDO, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -58,7 +58,7 @@ describe(commands.FILE_CHECKOUT_UNDO, () => { afterEach(() => { sinonUtil.restore([ request.post, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -83,8 +83,8 @@ describe(commands.FILE_CHECKOUT_UNDO, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { webUrl: webUrl, fileId: fileId, verbose: true } }); assert(postStub.called); @@ -146,8 +146,8 @@ describe(commands.FILE_CHECKOUT_UNDO, () => { it('aborts undoing checkout when prompt not confirmed', async () => { const postStub = sinon.stub(request, 'post').resolves(); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { webUrl: webUrl, id: fileId } }); assert(postStub.notCalled); }); diff --git a/src/m365/spo/commands/file/file-checkout-undo.ts b/src/m365/spo/commands/file/file-checkout-undo.ts index f12de59bdeb..1582677fd59 100644 --- a/src/m365/spo/commands/file/file-checkout-undo.ts +++ b/src/m365/spo/commands/file/file-checkout-undo.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -123,7 +123,7 @@ class SpoFileCheckoutUndoCommand extends SpoCommand { await undoCheckout(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to undo the checkout for file ${args.options.fileId || args.options.fileUrl}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to undo the checkout for file ${args.options.fileId || args.options.fileUrl}?` }); if (result) { await undoCheckout(); diff --git a/src/m365/spo/commands/file/file-checkout.spec.ts b/src/m365/spo/commands/file/file-checkout.spec.ts index 776740b3561..01e498764c7 100644 --- a/src/m365/spo/commands/file/file-checkout.spec.ts +++ b/src/m365/spo/commands/file/file-checkout.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,7 +15,6 @@ import command from './file-checkout.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.FILE_CHECKOUT, () => { - let cli: Cli; let log: any[]; let logger: Logger; let commandInfo: CommandInfo; @@ -44,13 +43,12 @@ describe(commands.FILE_CHECKOUT, () => { }; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/file/file-copy.spec.ts b/src/m365/spo/commands/file/file-copy.spec.ts index f17b142f565..79f0e78da94 100644 --- a/src/m365/spo/commands/file/file-copy.spec.ts +++ b/src/m365/spo/commands/file/file-copy.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -23,21 +23,19 @@ describe(commands.FILE_COPY, () => { const relTargetUrl = '/sites/project/Documents'; const absoluteTargetUrl = 'https://contoso.sharepoint.com/sites/project/Documents'; - let cli: Cli; let log: any[]; let logger: Logger; let requestPostStub: sinon.SinonStub; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); - sinon.stub(Cli.getInstance(), 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { + commandInfo = cli.getCommandInfo(command); + sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { if (settingName === 'prompt') { return false; } diff --git a/src/m365/spo/commands/file/file-get.spec.ts b/src/m365/spo/commands/file/file-get.spec.ts index d8263e1f406..b0030f3a01e 100644 --- a/src/m365/spo/commands/file/file-get.spec.ts +++ b/src/m365/spo/commands/file/file-get.spec.ts @@ -3,7 +3,7 @@ import fs from 'fs'; import sinon from 'sinon'; import { PassThrough } from 'stream'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -17,20 +17,18 @@ import command from './file-get.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.FILE_GET, () => { - let cli: Cli; let log: any[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/file/file-list.spec.ts b/src/m365/spo/commands/file/file-list.spec.ts index 32d264b5c6c..23e171b348b 100644 --- a/src/m365/spo/commands/file/file-list.spec.ts +++ b/src/m365/spo/commands/file/file-list.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -93,7 +93,7 @@ describe(commands.FILE_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/file/file-move.spec.ts b/src/m365/spo/commands/file/file-move.spec.ts index 8603f3dbe05..ce20da22db6 100644 --- a/src/m365/spo/commands/file/file-move.spec.ts +++ b/src/m365/spo/commands/file/file-move.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -35,7 +35,7 @@ describe(commands.FILE_MOVE, () => { sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/file/file-remove.spec.ts b/src/m365/spo/commands/file/file-remove.spec.ts index 956d1f81bee..00db167e015 100644 --- a/src/m365/spo/commands/file/file-remove.spec.ts +++ b/src/m365/spo/commands/file/file-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -16,7 +16,6 @@ import command from './file-remove.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.FILE_REMOVE, () => { - let cli: Cli; let log: any[]; let logger: Logger; let commandInfo: CommandInfo; @@ -24,13 +23,12 @@ describe(commands.FILE_REMOVE, () => { let promptIssued: boolean = false; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -47,7 +45,7 @@ describe(commands.FILE_REMOVE, () => { } }; requests = []; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -57,7 +55,7 @@ describe(commands.FILE_REMOVE, () => { afterEach(() => { sinonUtil.restore([ request.post, - Cli.promptForConfirmation, + cli.promptForConfirmation, cli.getSettingWithDefaultValue ]); }); @@ -102,8 +100,8 @@ describe(commands.FILE_REMOVE, () => { }); it('aborts removing file when prompt not confirmed', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { webUrl: 'https://contoso.sharepoint.com', id: '0cd891ef-afce-4e55-b836-fce03286cccf' } }); assert(requests.length === 0); @@ -124,8 +122,8 @@ describe(commands.FILE_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { webUrl: 'https://contoso.sharepoint.com', id: '0cd891ef-afce-4e55-b836-fce03286cccf' } }); let correctRequestIssued = false; @@ -157,8 +155,8 @@ describe(commands.FILE_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { webUrl: siteUrl, url: fileUrl } }); let correctRequestIssued = false; requests.forEach(r => { @@ -189,8 +187,8 @@ describe(commands.FILE_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { webUrl: siteUrl, url: fileUrl } }); let correctRequestIssued = false; requests.forEach(r => { @@ -221,8 +219,8 @@ describe(commands.FILE_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { webUrl: siteUrl, url: fileUrl } }); let correctRequestIssued = false; requests.forEach(r => { @@ -253,8 +251,8 @@ describe(commands.FILE_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { webUrl: siteUrl, url: fileUrl } }); let correctRequestIssued = false; requests.forEach(r => { @@ -285,8 +283,8 @@ describe(commands.FILE_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { webUrl: siteUrl, url: fileUrl } }); let correctRequestIssued = false; @@ -318,8 +316,8 @@ describe(commands.FILE_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { webUrl: siteUrl, url: fileUrl } }); let correctRequestIssued = false; requests.forEach(r => { @@ -350,8 +348,8 @@ describe(commands.FILE_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { webUrl: siteUrl, url: fileUrl } }); let correctRequestIssued = false; @@ -383,8 +381,8 @@ describe(commands.FILE_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { webUrl: siteUrl, url: fileUrl } }); let correctRequestIssued = false; @@ -416,8 +414,8 @@ describe(commands.FILE_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { webUrl: siteUrl, url: fileUrl } }); let correctRequestIssued = false; @@ -449,8 +447,8 @@ describe(commands.FILE_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { webUrl: siteUrl, url: fileUrl } }); let correctRequestIssued = false; @@ -479,8 +477,8 @@ describe(commands.FILE_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { webUrl: 'https://contoso.sharepoint.com', id: '0cd891ef-afce-4e55-b836-fce03286cccf', recycle: true } }); let correctRequestIssued = false; @@ -509,8 +507,8 @@ describe(commands.FILE_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { webUrl: 'https://contoso.sharepoint.com', url: '0cd891ef-afce-4e55-b836-fce03286cccf' } }); let correctRequestIssued = false; @@ -539,8 +537,8 @@ describe(commands.FILE_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { webUrl: 'https://contoso.sharepoint.com', url: '0cd891ef-afce-4e55-b836-fce03286cccf', recycle: true } }); let correctRequestIssued = false; diff --git a/src/m365/spo/commands/file/file-remove.ts b/src/m365/spo/commands/file/file-remove.ts index ab9b415e016..a0bca6d6621 100644 --- a/src/m365/spo/commands/file/file-remove.ts +++ b/src/m365/spo/commands/file/file-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -142,7 +142,7 @@ class SpoFileRemoveCommand extends SpoCommand { await removeFile(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to ${args.options.recycle ? 'recycle' : 'remove'} the file ${args.options.id || args.options.url} located in site ${args.options.webUrl}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to ${args.options.recycle ? 'recycle' : 'remove'} the file ${args.options.id || args.options.url} located in site ${args.options.webUrl}?` }); if (result) { await removeFile(); diff --git a/src/m365/spo/commands/file/file-rename.spec.ts b/src/m365/spo/commands/file/file-rename.spec.ts index 20802640a54..8527f81acb5 100644 --- a/src/m365/spo/commands/file/file-rename.spec.ts +++ b/src/m365/spo/commands/file/file-rename.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -40,7 +40,7 @@ describe(commands.FILE_RENAME, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -64,7 +64,7 @@ describe(commands.FILE_RENAME, () => { sinonUtil.restore([ request.get, request.post, - Cli.executeCommand + cli.executeCommand ]); }); @@ -92,7 +92,7 @@ describe(commands.FILE_RENAME, () => { }); it('forcefully renames file from a non-root site in the root folder of a document library when a file with the same name exists (or it doesn\'t?)', async () => { - sinon.stub(Cli, 'executeCommand').resolves(); + sinon.stub(cli, 'executeCommand').resolves(); sinon.stub(request, 'post').callsFake(async (opts) => { if ((opts.url as string) === 'https://contoso.sharepoint.com/sites/portal/_api/web/GetFileByServerRelativePath(DecodedUrl=\'%2Fsites%2Fportal%2FShared%20Documents%2Fabc.pdf\')/ListItemAllFields/ValidateUpdateListItem()') { @@ -152,7 +152,7 @@ describe(commands.FILE_RENAME, () => { message: 'File does not exist' } }; - sinon.stub(Cli, 'executeCommand').rejects(fileDeleteError); + sinon.stub(cli, 'executeCommand').rejects(fileDeleteError); sinon.stub(request, 'post').callsFake(async (opts) => { if ((opts.url as string) === 'https://contoso.sharepoint.com/sites/portal/_api/web/GetFileByServerRelativePath(DecodedUrl=\'%2Fsites%2Fportal%2FShared%20Documents%2Fabc.pdf\')/ListItemAllFields/ValidateUpdateListItem()') { @@ -188,7 +188,7 @@ describe(commands.FILE_RENAME, () => { stderr: '' }; - sinon.stub(Cli, 'executeCommand').rejects(fileDeleteError); + sinon.stub(cli, 'executeCommand').rejects(fileDeleteError); sinon.stub(request, 'get').callsFake(async (opts) => { if ((opts.url as string) === `https://contoso.sharepoint.com/sites/portal/_api/web/GetFileByServerRelativePath(DecodedUrl='%2Fsites%2Fportal%2FShared%20Documents%2Fabc.pdf')?$select=UniqueId`) { diff --git a/src/m365/spo/commands/file/file-rename.ts b/src/m365/spo/commands/file/file-rename.ts index 944dd351a0c..b6ce2e57c50 100644 --- a/src/m365/spo/commands/file/file-rename.ts +++ b/src/m365/spo/commands/file/file-rename.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import Command from '../../../../Command.js'; import GlobalOptions from '../../../../GlobalOptions.js'; @@ -142,7 +142,7 @@ class SpoFileRenameCommand extends SpoCommand { verbose: this.verbose }; try { - await Cli.executeCommand(removeCommand as Command, { options: { ...removeOptions, _: [] } }); + await cli.executeCommand(removeCommand as Command, { options: { ...removeOptions, _: [] } }); } catch (err: any) { if (err.error !== undefined && err.error.message !== undefined && err.error.message.includes('does not exist')) { diff --git a/src/m365/spo/commands/file/file-retentionlabel-ensure.spec.ts b/src/m365/spo/commands/file/file-retentionlabel-ensure.spec.ts index 0ce2052eb59..68b27e2ceb8 100644 --- a/src/m365/spo/commands/file/file-retentionlabel-ensure.spec.ts +++ b/src/m365/spo/commands/file/file-retentionlabel-ensure.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -61,19 +61,17 @@ describe(commands.FILE_RETENTIONLABEL_ENSURE, () => { }] }; - let cli: Cli; let log: any[]; let logger: Logger; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/file/file-retentionlabel-remove.spec.ts b/src/m365/spo/commands/file/file-retentionlabel-remove.spec.ts index 21bd4d02275..45037c659e1 100644 --- a/src/m365/spo/commands/file/file-retentionlabel-remove.spec.ts +++ b/src/m365/spo/commands/file/file-retentionlabel-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -31,20 +31,18 @@ describe(commands.FILE_RETENTIONLABEL_REMOVE, () => { } }; - let cli: Cli; let log: any[]; let logger: Logger; let commandInfo: CommandInfo; let promptIssued: boolean = false; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -60,7 +58,7 @@ describe(commands.FILE_RETENTIONLABEL_REMOVE, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -71,8 +69,8 @@ describe(commands.FILE_RETENTIONLABEL_REMOVE, () => { sinonUtil.restore([ request.get, request.post, - Cli.promptForConfirmation, - Cli.executeCommandWithOutput, + cli.promptForConfirmation, + cli.executeCommandWithOutput, cli.getSettingWithDefaultValue ]); }); @@ -98,8 +96,8 @@ describe(commands.FILE_RETENTIONLABEL_REMOVE, () => { it('aborts removing file retention label when prompt not confirmed', async () => { const postSpy = sinon.spy(request, 'delete'); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { @@ -119,8 +117,8 @@ describe(commands.FILE_RETENTIONLABEL_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); sinon.stub(request, 'post').callsFake(async (opts) => { if (opts.url === `https://contoso.sharepoint.com/_api/SP_CompliancePolicy_SPPolicyStoreProxy_SetComplianceTagOnBulkItems` @@ -148,8 +146,8 @@ describe(commands.FILE_RETENTIONLABEL_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); sinon.stub(request, 'post').callsFake(async (opts) => { if (opts.url === `https://contoso.sharepoint.com/_api/SP_CompliancePolicy_SPPolicyStoreProxy_SetComplianceTagOnBulkItems` diff --git a/src/m365/spo/commands/file/file-retentionlabel-remove.ts b/src/m365/spo/commands/file/file-retentionlabel-remove.ts index 3fa4c0cff88..dd184c6b91c 100644 --- a/src/m365/spo/commands/file/file-retentionlabel-remove.ts +++ b/src/m365/spo/commands/file/file-retentionlabel-remove.ts @@ -1,5 +1,5 @@ import * as url from 'url'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -94,7 +94,7 @@ class SpoFileRetentionLabelRemoveCommand extends SpoCommand { await this.removeFileRetentionLabel(logger, args); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the retentionlabel from file ${args.options.fileId || args.options.fileUrl} located in site ${args.options.webUrl}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the retentionlabel from file ${args.options.fileId || args.options.fileUrl} located in site ${args.options.webUrl}?` }); if (result) { await this.removeFileRetentionLabel(logger, args); diff --git a/src/m365/spo/commands/file/file-roleassignment-add.spec.ts b/src/m365/spo/commands/file/file-roleassignment-add.spec.ts index ec0cf03b8d5..d9ec2b7753e 100644 --- a/src/m365/spo/commands/file/file-roleassignment-add.spec.ts +++ b/src/m365/spo/commands/file/file-roleassignment-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -22,19 +22,17 @@ describe(commands.FILE_ROLEASSIGNMENT_ADD, () => { const webUrl = 'https://contoso.sharepoint.com/sites/project-x'; const fileUrl = '/sites/project-x/documents/Test1.docx'; const fileId = 'b2307a39-e878-458b-bc90-03bc578531d6'; - let cli: Cli; let log: any[]; let logger: Logger; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -54,7 +52,7 @@ describe(commands.FILE_ROLEASSIGNMENT_ADD, () => { afterEach(() => { sinonUtil.restore([ - Cli.executeCommandWithOutput, + cli.executeCommandWithOutput, request.post, cli.getSettingWithDefaultValue ]); @@ -144,7 +142,7 @@ describe(commands.FILE_ROLEASSIGNMENT_ADD, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoRoleDefinitionListCommand) { return { stdout: '[{"BasePermissions": {"High": "2147483647","Low": "4294967295"},"Description": "Has full control.","Hidden": false,"Id": 1073741827,"Name": "Full Control","Order": 1,"RoleTypeKind": 5}]' @@ -173,7 +171,7 @@ describe(commands.FILE_ROLEASSIGNMENT_ADD, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoFileGetCommand) { return ({ stdout: '{"LinkingUri": "https://contoso.sharepoint.com/sites/project-x/documents/Test1.docx?d=wc39926a80d2c4067afa6cff9902eb866","Name": "Test1.docx","ServerRelativeUrl": "/sites/project-x/documents/Test1.docx","UniqueId": "b2307a39-e878-458b-bc90-03bc578531d6"}' @@ -207,7 +205,7 @@ describe(commands.FILE_ROLEASSIGNMENT_ADD, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoUserGetCommand) { return { stdout: '{"Id": 11,"IsHiddenInUI": false,"LoginName": "i:0#.f|membership|someaccount@tenant.onmicrosoft.com","Title": "Some Account","PrincipalType": 1,"Email": "someaccount@tenant.onmicrosoft.com","Expiration": "","IsEmailAuthenticationGuestUser": false,"IsShareByEmailGuestUser": false,"IsSiteAdmin": true,"UserId": {"NameId": "1003200097d06dd6","NameIdIssuer": "urn:federation:microsoftonline"},"UserPrincipalName": "someaccount@tenant.onmicrosoft.com"}' @@ -229,7 +227,7 @@ describe(commands.FILE_ROLEASSIGNMENT_ADD, () => { it('correctly handles error when upn does not exist', async () => { const error = 'no user found'; - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoUserGetCommand) { throw error; } @@ -256,7 +254,7 @@ describe(commands.FILE_ROLEASSIGNMENT_ADD, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoGroupGetCommand) { return { stdout: '{"Id": 5,"IsHiddenInUI": false,"LoginName": "Group A","Title": "Group A","PrincipalType": 8,"AllowMembersEditMembership": false,"AllowRequestToJoinLeave": false,"AutoAcceptRequestToJoinLeave": false,"Description": "","OnlyAllowMembersViewMembership": true,"OwnerTitle": "Some Account","RequestToJoinLeaveEmailSetting": null}' @@ -278,7 +276,7 @@ describe(commands.FILE_ROLEASSIGNMENT_ADD, () => { it('correctly handles error when role definition does not exist', async () => { const error = 'no role definition found'; - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command) => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command) => { if (command === spoRoleDefinitionListCommand) { throw error; } @@ -298,7 +296,7 @@ describe(commands.FILE_ROLEASSIGNMENT_ADD, () => { it('correctly handles error when group does not exist', async () => { const error = 'no group found'; - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoGroupGetCommand) { throw error; } diff --git a/src/m365/spo/commands/file/file-roleassignment-add.ts b/src/m365/spo/commands/file/file-roleassignment-add.ts index 252b36e5707..6820a8bda40 100644 --- a/src/m365/spo/commands/file/file-roleassignment-add.ts +++ b/src/m365/spo/commands/file/file-roleassignment-add.ts @@ -1,4 +1,4 @@ -import { Cli, CommandOutput } from '../../../../cli/Cli.js'; +import { cli, CommandOutput } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import Command from '../../../../Command.js'; import GlobalOptions from '../../../../GlobalOptions.js'; @@ -173,7 +173,7 @@ class SpoFileRoleAssignmentAddCommand extends SpoCommand { verbose: this.verbose }; - const output: CommandOutput = await Cli.executeCommandWithOutput(spoRoleDefinitionListCommand as Command, { options: { ...roleDefinitionListCommandOptions, _: [] } }); + const output: CommandOutput = await cli.executeCommandWithOutput(spoRoleDefinitionListCommand as Command, { options: { ...roleDefinitionListCommandOptions, _: [] } }); const getRoleDefinitionListOutput = JSON.parse(output.stdout); const roleDefinitionId: number = getRoleDefinitionListOutput.find((role: RoleDefinition) => role.Name === options.roleDefinitionName).Id; return roleDefinitionId; @@ -188,7 +188,7 @@ class SpoFileRoleAssignmentAddCommand extends SpoCommand { verbose: this.verbose }; - const output: CommandOutput = await Cli.executeCommandWithOutput(spoGroupGetCommand as Command, { options: { ...groupGetCommandOptions, _: [] } }); + const output: CommandOutput = await cli.executeCommandWithOutput(spoGroupGetCommand as Command, { options: { ...groupGetCommandOptions, _: [] } }); const getGroupOutput = JSON.parse(output.stdout); return getGroupOutput.Id; } @@ -203,7 +203,7 @@ class SpoFileRoleAssignmentAddCommand extends SpoCommand { verbose: this.verbose }; - const output: CommandOutput = await Cli.executeCommandWithOutput(spoUserGetCommand as Command, { options: { ...userGetCommandOptions, _: [] } }); + const output: CommandOutput = await cli.executeCommandWithOutput(spoUserGetCommand as Command, { options: { ...userGetCommandOptions, _: [] } }); const getUserOutput = JSON.parse(output.stdout); return getUserOutput.Id; } @@ -221,7 +221,7 @@ class SpoFileRoleAssignmentAddCommand extends SpoCommand { verbose: this.verbose }; - const output = await Cli.executeCommandWithOutput(spoFileGetCommand as Command, { options: { ...options, _: [] } }); + const output = await cli.executeCommandWithOutput(spoFileGetCommand as Command, { options: { ...options, _: [] } }); const getFileOutput = JSON.parse(output.stdout); return getFileOutput.ServerRelativeUrl; } diff --git a/src/m365/spo/commands/file/file-roleassignment-remove.spec.ts b/src/m365/spo/commands/file/file-roleassignment-remove.spec.ts index d1e23759375..19463419d85 100644 --- a/src/m365/spo/commands/file/file-roleassignment-remove.spec.ts +++ b/src/m365/spo/commands/file/file-roleassignment-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -37,7 +37,7 @@ describe(commands.FILE_ROLEASSIGNMENT_REMOVE, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -53,7 +53,7 @@ describe(commands.FILE_ROLEASSIGNMENT_REMOVE, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -63,8 +63,8 @@ describe(commands.FILE_ROLEASSIGNMENT_REMOVE, () => { afterEach(() => { sinonUtil.restore([ - Cli.promptForConfirmation, - Cli.executeCommandWithOutput, + cli.promptForConfirmation, + cli.executeCommandWithOutput, request.post ]); }); @@ -139,8 +139,8 @@ describe(commands.FILE_ROLEASSIGNMENT_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -153,7 +153,7 @@ describe(commands.FILE_ROLEASSIGNMENT_REMOVE, () => { }); it('remove role assignment from the file by Id and upn', async () => { - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoFileGetCommand) { return { stdout: `{"LinkingUri": "https://contoso.sharepoint.com/sites/contoso-sales/documents/Test1.docx?d=wc39926a80d2c4067afa6cff9902eb866","Name": "Test1.docx","ServerRelativeUrl": "/sites/contoso-sales/documents/Test1.docx","UniqueId": "b2307a39-e878-458b-bc90-03bc578531d6"}` @@ -190,7 +190,7 @@ describe(commands.FILE_ROLEASSIGNMENT_REMOVE, () => { }); it('remove role assignment from the file by Id and group name', async () => { - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoFileGetCommand) { return { stdout: `{"LinkingUri": "https://contoso.sharepoint.com/sites/contoso-sales/documents/Test1.docx?d=wc39926a80d2c4067afa6cff9902eb866","Name": "Test1.docx","ServerRelativeUrl": "/sites/contoso-sales/documents/Test1.docx","UniqueId": "b2307a39-e878-458b-bc90-03bc578531d6"}` diff --git a/src/m365/spo/commands/file/file-roleassignment-remove.ts b/src/m365/spo/commands/file/file-roleassignment-remove.ts index 9ecd78e916a..cfc52e3c515 100644 --- a/src/m365/spo/commands/file/file-roleassignment-remove.ts +++ b/src/m365/spo/commands/file/file-roleassignment-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import Command from '../../../../Command.js'; import GlobalOptions from '../../../../GlobalOptions.js'; @@ -151,7 +151,7 @@ class SpoFileRoleAssignmentRemoveCommand extends SpoCommand { await removeRoleAssignment(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove role assignment from file ${args.options.fileUrl || args.options.fileId} from site ${args.options.webUrl}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove role assignment from file ${args.options.fileUrl || args.options.fileId} from site ${args.options.webUrl}?` }); if (result) { await removeRoleAssignment(); @@ -172,7 +172,7 @@ class SpoFileRoleAssignmentRemoveCommand extends SpoCommand { verbose: this.verbose }; - const output = await Cli.executeCommandWithOutput(spoFileGetCommand as Command, { options: { ...options, _: [] } }); + const output = await cli.executeCommandWithOutput(spoFileGetCommand as Command, { options: { ...options, _: [] } }); const getFileOutput = JSON.parse(output.stdout); return getFileOutput.ServerRelativeUrl; } @@ -187,7 +187,7 @@ class SpoFileRoleAssignmentRemoveCommand extends SpoCommand { verbose: this.verbose }; - const output = await Cli.executeCommandWithOutput(spoUserGetCommand as Command, { options: { ...userGetCommandOptions, _: [] } }); + const output = await cli.executeCommandWithOutput(spoUserGetCommand as Command, { options: { ...userGetCommandOptions, _: [] } }); const getUserOutput = JSON.parse(output.stdout); return getUserOutput.Id; } @@ -201,7 +201,7 @@ class SpoFileRoleAssignmentRemoveCommand extends SpoCommand { verbose: this.verbose }; - const output = await Cli.executeCommandWithOutput(spoGroupGetCommand as Command, { options: { ...groupGetCommandOptions, _: [] } }); + const output = await cli.executeCommandWithOutput(spoGroupGetCommand as Command, { options: { ...groupGetCommandOptions, _: [] } }); const getGroupOutput = JSON.parse(output.stdout); return getGroupOutput.Id; } diff --git a/src/m365/spo/commands/file/file-roleinheritance-break.spec.ts b/src/m365/spo/commands/file/file-roleinheritance-break.spec.ts index aca0fe778f7..2d9441838cc 100644 --- a/src/m365/spo/commands/file/file-roleinheritance-break.spec.ts +++ b/src/m365/spo/commands/file/file-roleinheritance-break.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -31,7 +31,7 @@ describe(commands.FILE_ROLEINHERITANCE_RESET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -47,7 +47,7 @@ describe(commands.FILE_ROLEINHERITANCE_RESET, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -57,8 +57,8 @@ describe(commands.FILE_ROLEINHERITANCE_RESET, () => { afterEach(() => { sinonUtil.restore([ - Cli.promptForConfirmation, - Cli.executeCommandWithOutput, + cli.promptForConfirmation, + cli.executeCommandWithOutput, request.post ]); }); @@ -157,7 +157,7 @@ describe(commands.FILE_ROLEINHERITANCE_RESET, () => { }); it('breaks role inheritance on file by Id when prompt confirmed', async () => { - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoFileGetCommand) { return ({ stdout: '{"LinkingUri": "https://contoso.sharepoint.com/sites/project-x/documents/Test1.docx?d=wc39926a80d2c4067afa6cff9902eb866","Name": "Test1.docx","ServerRelativeUrl": "/sites/project-x/documents/Test1.docx","UniqueId": "b2307a39-e878-458b-bc90-03bc578531d6"}' @@ -175,8 +175,8 @@ describe(commands.FILE_ROLEINHERITANCE_RESET, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { diff --git a/src/m365/spo/commands/file/file-roleinheritance-break.ts b/src/m365/spo/commands/file/file-roleinheritance-break.ts index 92709fdc4f3..7f74f2b05bb 100644 --- a/src/m365/spo/commands/file/file-roleinheritance-break.ts +++ b/src/m365/spo/commands/file/file-roleinheritance-break.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import Command from '../../../../Command.js'; import GlobalOptions from '../../../../GlobalOptions.js'; @@ -121,7 +121,7 @@ class SpoFileRoleInheritanceBreakCommand extends SpoCommand { await breakFileRoleInheritance(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to break the role inheritance of file ${args.options.fileUrl || args.options.fileId} located in site ${args.options.webUrl}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to break the role inheritance of file ${args.options.fileUrl || args.options.fileId} located in site ${args.options.webUrl}?` }); if (result) { await breakFileRoleInheritance(); @@ -142,7 +142,7 @@ class SpoFileRoleInheritanceBreakCommand extends SpoCommand { verbose: this.verbose }; - const output = await Cli.executeCommandWithOutput(spoFileGetCommand as Command, { options: { ...options, _: [] } }); + const output = await cli.executeCommandWithOutput(spoFileGetCommand as Command, { options: { ...options, _: [] } }); const getFileOutput = JSON.parse(output.stdout); return getFileOutput.ServerRelativeUrl; } diff --git a/src/m365/spo/commands/file/file-roleinheritance-reset.spec.ts b/src/m365/spo/commands/file/file-roleinheritance-reset.spec.ts index 05a9c7f00dc..d7aa2898728 100644 --- a/src/m365/spo/commands/file/file-roleinheritance-reset.spec.ts +++ b/src/m365/spo/commands/file/file-roleinheritance-reset.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -31,7 +31,7 @@ describe(commands.FILE_ROLEINHERITANCE_RESET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -47,7 +47,7 @@ describe(commands.FILE_ROLEINHERITANCE_RESET, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -57,7 +57,7 @@ describe(commands.FILE_ROLEINHERITANCE_RESET, () => { afterEach(() => { sinonUtil.restore([ - Cli.promptForConfirmation, + cli.promptForConfirmation, request.post ]); }); @@ -135,7 +135,7 @@ describe(commands.FILE_ROLEINHERITANCE_RESET, () => { }); it('resets role inheritance on file by Id when prompt confirmed', async () => { - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoFileGetCommand) { return ({ stdout: '{"LinkingUri": "https://contoso.sharepoint.com/sites/project-x/documents/Test1.docx?d=wc39926a80d2c4067afa6cff9902eb866","Name": "Test1.docx","ServerRelativeUrl": "/sites/project-x/documents/Test1.docx","UniqueId": "b2307a39-e878-458b-bc90-03bc578531d6"}' @@ -153,8 +153,8 @@ describe(commands.FILE_ROLEINHERITANCE_RESET, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { diff --git a/src/m365/spo/commands/file/file-roleinheritance-reset.ts b/src/m365/spo/commands/file/file-roleinheritance-reset.ts index c1de75f76c3..065c9f95ffc 100644 --- a/src/m365/spo/commands/file/file-roleinheritance-reset.ts +++ b/src/m365/spo/commands/file/file-roleinheritance-reset.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import Command from '../../../../Command.js'; import GlobalOptions from '../../../../GlobalOptions.js'; @@ -114,7 +114,7 @@ class SpoFileRoleInheritanceResetCommand extends SpoCommand { await resetFileRoleInheritance(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to reset the role inheritance of file ${args.options.fileUrl || args.options.fileId} located in site ${args.options.webUrl}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to reset the role inheritance of file ${args.options.fileUrl || args.options.fileId} located in site ${args.options.webUrl}?` }); if (result) { await resetFileRoleInheritance(); @@ -135,7 +135,7 @@ class SpoFileRoleInheritanceResetCommand extends SpoCommand { verbose: this.verbose }; - const output = await Cli.executeCommandWithOutput(spoFileGetCommand as Command, { options: { ...options, _: [] } }); + const output = await cli.executeCommandWithOutput(spoFileGetCommand as Command, { options: { ...options, _: [] } }); const getFileOutput = JSON.parse(output.stdout); return getFileOutput.ServerRelativeUrl; } diff --git a/src/m365/spo/commands/file/file-sharinginfo-get.spec.ts b/src/m365/spo/commands/file/file-sharinginfo-get.spec.ts index 54bde9391ed..f5282a08df1 100644 --- a/src/m365/spo/commands/file/file-sharinginfo-get.spec.ts +++ b/src/m365/spo/commands/file/file-sharinginfo-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,7 +15,6 @@ import command from './file-sharinginfo-get.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.FILE_SHARINGINFO_GET, () => { - let cli: Cli; let log: any[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; @@ -466,13 +465,12 @@ describe(commands.FILE_SHARINGINFO_GET, () => { }; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/file/file-sharinginfo-get.ts b/src/m365/spo/commands/file/file-sharinginfo-get.ts index 8d0bd52f847..2b2eb84086c 100644 --- a/src/m365/spo/commands/file/file-sharinginfo-get.ts +++ b/src/m365/spo/commands/file/file-sharinginfo-get.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -139,7 +139,7 @@ class SpoFileSharingInfoGetCommand extends SpoCommand { // typically, we don't do this, but in this case, we need to due to // the complexity of the retrieved object and the fact that we can't // use the generic way of simplifying the output - if (!Cli.shouldTrimOutput(args.options.output)) { + if (!cli.shouldTrimOutput(args.options.output)) { await logger.log(res); } else { diff --git a/src/m365/spo/commands/file/file-sharinglink-add.spec.ts b/src/m365/spo/commands/file/file-sharinglink-add.spec.ts index c5902d6b390..dcbabe3079a 100644 --- a/src/m365/spo/commands/file/file-sharinglink-add.spec.ts +++ b/src/m365/spo/commands/file/file-sharinglink-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -67,7 +67,7 @@ describe(commands.FILE_SHARINGLINK_ADD, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/file/file-sharinglink-clear.spec.ts b/src/m365/spo/commands/file/file-sharinglink-clear.spec.ts index 34712ce6714..e8756e7156a 100644 --- a/src/m365/spo/commands/file/file-sharinglink-clear.spec.ts +++ b/src/m365/spo/commands/file/file-sharinglink-clear.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -43,7 +43,7 @@ describe(commands.FILE_SHARINGLINK_CLEAR, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -59,7 +59,7 @@ describe(commands.FILE_SHARINGLINK_CLEAR, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -71,8 +71,8 @@ describe(commands.FILE_SHARINGLINK_CLEAR, () => { sinonUtil.restore([ request.delete, request.get, - Cli.promptForConfirmation, - Cli.executeCommandWithOutput + cli.promptForConfirmation, + cli.executeCommandWithOutput ]); }); @@ -116,8 +116,8 @@ describe(commands.FILE_SHARINGLINK_CLEAR, () => { it('aborts clearing the sharing links to a file when force option not passed and prompt not confirmed', async () => { const postSpy = sinon.spy(request, 'post'); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { webUrl: webUrl, fileUrl: fileUrl } }); @@ -133,8 +133,8 @@ describe(commands.FILE_SHARINGLINK_CLEAR, () => { it('clears sharing links from a specific file retrieved by url', async () => { const fileServerRelativeUrl: string = urlUtil.getServerRelativePath(webUrl, fileUrl); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); sinon.stub(request, 'get').callsFake(async (opts) => { if (opts.url === `${webUrl}/_api/web/GetFileByServerRelativePath(decodedUrl='${formatting.encodeQueryParameter(fileServerRelativeUrl)}')?$select=SiteId,VroomItemId,VroomDriveId`) { @@ -144,7 +144,7 @@ describe(commands.FILE_SHARINGLINK_CLEAR, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoFileSharingLinkListCommand) { return sharingLinksListCommandResponse; } @@ -164,8 +164,8 @@ describe(commands.FILE_SHARINGLINK_CLEAR, () => { }); it('clears sharing links of type anonymous from a specific file retrieved by id', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); sinon.stub(request, 'get').callsFake(async (opts) => { if (opts.url === `${webUrl}/_api/web/GetFileById('${fileId}')?$select=SiteId,VroomItemId,VroomDriveId`) { @@ -175,7 +175,7 @@ describe(commands.FILE_SHARINGLINK_CLEAR, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoFileSharingLinkListCommand) { return sharingLinksListCommandResponse; } @@ -195,8 +195,8 @@ describe(commands.FILE_SHARINGLINK_CLEAR, () => { }); it('throws error when file not found by id', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); sinon.stub(request, 'get').callsFake(async (opts) => { if (opts.url === `${webUrl}/_api/web/GetFileById('${fileId}')?$select=SiteId,VroomItemId,VroomDriveId`) { diff --git a/src/m365/spo/commands/file/file-sharinglink-clear.ts b/src/m365/spo/commands/file/file-sharinglink-clear.ts index a67d48f782e..7f25b5ad31f 100644 --- a/src/m365/spo/commands/file/file-sharinglink-clear.ts +++ b/src/m365/spo/commands/file/file-sharinglink-clear.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import Command from '../../../../Command.js'; import GlobalOptions from '../../../../GlobalOptions.js'; @@ -129,7 +129,7 @@ class SpoFileSharingLinkClearCommand extends SpoCommand { await clearSharingLinks(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to clear the sharing links of file ${args.options.fileUrl || args.options.fileId}${args.options.scope ? ` with scope ${args.options.scope}` : ''}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to clear the sharing links of file ${args.options.fileUrl || args.options.fileId}${args.options.scope ? ` with scope ${args.options.scope}` : ''}?` }); if (result) { await clearSharingLinks(); @@ -147,7 +147,7 @@ class SpoFileSharingLinkClearCommand extends SpoCommand { verbose: this.verbose }; - const commandOutput = await Cli.executeCommandWithOutput(spoFileSharingLinkListCommand as Command, { options: { ...sharingLinkListOptions, _: [] } }); + const commandOutput = await cli.executeCommandWithOutput(spoFileSharingLinkListCommand as Command, { options: { ...sharingLinkListOptions, _: [] } }); const outputParsed = JSON.parse(commandOutput.stdout); return outputParsed; } diff --git a/src/m365/spo/commands/file/file-sharinglink-get.spec.ts b/src/m365/spo/commands/file/file-sharinglink-get.spec.ts index 509e86b2f70..f2e89ec44b4 100644 --- a/src/m365/spo/commands/file/file-sharinglink-get.spec.ts +++ b/src/m365/spo/commands/file/file-sharinglink-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -59,7 +59,7 @@ describe(commands.FILE_SHARINGLINK_GET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/file/file-sharinglink-list.spec.ts b/src/m365/spo/commands/file/file-sharinglink-list.spec.ts index f6a17207124..81ad74e2d62 100644 --- a/src/m365/spo/commands/file/file-sharinglink-list.spec.ts +++ b/src/m365/spo/commands/file/file-sharinglink-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -113,7 +113,7 @@ describe(commands.FILE_SHARINGLINK_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/file/file-sharinglink-list.ts b/src/m365/spo/commands/file/file-sharinglink-list.ts index a218a9e38c1..34577582b02 100644 --- a/src/m365/spo/commands/file/file-sharinglink-list.ts +++ b/src/m365/spo/commands/file/file-sharinglink-list.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import { odata } from '../../../../utils/odata.js'; @@ -109,7 +109,7 @@ class SpoFileSharingLinkListCommand extends SpoCommand { const sharingLinks = await odata.getAllItems(url); - if (!args.options.output || !Cli.shouldTrimOutput(args.options.output)) { + if (!args.options.output || !cli.shouldTrimOutput(args.options.output)) { await logger.log(sharingLinks); } else { diff --git a/src/m365/spo/commands/file/file-sharinglink-remove.spec.ts b/src/m365/spo/commands/file/file-sharinglink-remove.spec.ts index 4efbeb6faf1..94e50f076fa 100644 --- a/src/m365/spo/commands/file/file-sharinglink-remove.spec.ts +++ b/src/m365/spo/commands/file/file-sharinglink-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -39,7 +39,7 @@ describe(commands.FILE_SHARINGLINK_REMOVE, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -55,7 +55,7 @@ describe(commands.FILE_SHARINGLINK_REMOVE, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -67,7 +67,7 @@ describe(commands.FILE_SHARINGLINK_REMOVE, () => { sinonUtil.restore([ request.get, request.delete, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -114,8 +114,8 @@ describe(commands.FILE_SHARINGLINK_REMOVE, () => { it('aborts removing the specified sharing link to a file when force option not passed and prompt not confirmed', async () => { const deleteSpy = sinon.spy(request, 'delete'); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { @@ -145,8 +145,8 @@ describe(commands.FILE_SHARINGLINK_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { diff --git a/src/m365/spo/commands/file/file-sharinglink-remove.ts b/src/m365/spo/commands/file/file-sharinglink-remove.ts index a49b2b9ef50..5d596789719 100644 --- a/src/m365/spo/commands/file/file-sharinglink-remove.ts +++ b/src/m365/spo/commands/file/file-sharinglink-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -115,7 +115,7 @@ class SpoFileSharingLinkRemoveCommand extends SpoCommand { await removeSharingLink(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove sharing link ${args.options.id} of file ${args.options.fileUrl || args.options.fileId}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove sharing link ${args.options.id} of file ${args.options.fileUrl || args.options.fileId}?` }); if (result) { await removeSharingLink(); diff --git a/src/m365/spo/commands/file/file-sharinglink-set.spec.ts b/src/m365/spo/commands/file/file-sharinglink-set.spec.ts index 920f6f16589..83675d50cca 100644 --- a/src/m365/spo/commands/file/file-sharinglink-set.spec.ts +++ b/src/m365/spo/commands/file/file-sharinglink-set.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -53,7 +53,7 @@ describe(commands.FILE_SHARINGLINK_SET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/file/file-version-clear.spec.ts b/src/m365/spo/commands/file/file-version-clear.spec.ts index 19629501b38..cb5c122baaa 100644 --- a/src/m365/spo/commands/file/file-version-clear.spec.ts +++ b/src/m365/spo/commands/file/file-version-clear.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -30,7 +30,7 @@ describe(commands.FILE_VERSION_CLEAR, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -47,7 +47,7 @@ describe(commands.FILE_VERSION_CLEAR, () => { } }; loggerLogToStderrSpy = sinon.spy(logger, 'logToStderr'); - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -58,7 +58,7 @@ describe(commands.FILE_VERSION_CLEAR, () => { afterEach(() => { sinonUtil.restore([ request.post, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -113,8 +113,8 @@ describe(commands.FILE_VERSION_CLEAR, () => { it('aborts removing all file history when force option not passed and prompt not confirmed', async () => { const postSpy = sinon.spy(request, 'post'); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { @@ -171,8 +171,8 @@ describe(commands.FILE_VERSION_CLEAR, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -192,8 +192,8 @@ describe(commands.FILE_VERSION_CLEAR, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { diff --git a/src/m365/spo/commands/file/file-version-clear.ts b/src/m365/spo/commands/file/file-version-clear.ts index 1fb8ef44ec6..e397e499a8e 100644 --- a/src/m365/spo/commands/file/file-version-clear.ts +++ b/src/m365/spo/commands/file/file-version-clear.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -90,7 +90,7 @@ class SpoFileVersionClearCommand extends SpoCommand { await this.clearVersions(args); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to delete all version history for file ${args.options.fileId || args.options.fileUrl}'?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to delete all version history for file ${args.options.fileId || args.options.fileUrl}'?` }); if (result) { await this.clearVersions(args); diff --git a/src/m365/spo/commands/file/file-version-get.spec.ts b/src/m365/spo/commands/file/file-version-get.spec.ts index 2cacb3bce5d..90218712d6c 100644 --- a/src/m365/spo/commands/file/file-version-get.spec.ts +++ b/src/m365/spo/commands/file/file-version-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -44,7 +44,7 @@ describe(commands.FILE_VERSION_GET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/file/file-version-list.spec.ts b/src/m365/spo/commands/file/file-version-list.spec.ts index 6a2dd626ea9..0c1af8c0e8b 100644 --- a/src/m365/spo/commands/file/file-version-list.spec.ts +++ b/src/m365/spo/commands/file/file-version-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -53,7 +53,7 @@ describe(commands.FILE_VERSION_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/file/file-version-remove.spec.ts b/src/m365/spo/commands/file/file-version-remove.spec.ts index 01b3ad0e772..84ed92a7382 100644 --- a/src/m365/spo/commands/file/file-version-remove.spec.ts +++ b/src/m365/spo/commands/file/file-version-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -31,7 +31,7 @@ describe(commands.FILE_VERSION_REMOVE, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -48,7 +48,7 @@ describe(commands.FILE_VERSION_REMOVE, () => { } }; loggerLogToStderrSpy = sinon.spy(logger, 'logToStderr'); - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -59,7 +59,7 @@ describe(commands.FILE_VERSION_REMOVE, () => { afterEach(() => { sinonUtil.restore([ request.delete, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -116,8 +116,8 @@ describe(commands.FILE_VERSION_REMOVE, () => { it('aborts removing the specified version when force option not passed and prompt not confirmed', async () => { const postSpy = sinon.spy(request, 'delete'); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { @@ -177,8 +177,8 @@ describe(commands.FILE_VERSION_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -199,8 +199,8 @@ describe(commands.FILE_VERSION_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { diff --git a/src/m365/spo/commands/file/file-version-remove.ts b/src/m365/spo/commands/file/file-version-remove.ts index 8e8b3789e3e..405b276ff75 100644 --- a/src/m365/spo/commands/file/file-version-remove.ts +++ b/src/m365/spo/commands/file/file-version-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -99,7 +99,7 @@ class SpoFileVersionRemoveCommand extends SpoCommand { await this.removeVersion(args); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the version ${args.options.label} from file ${args.options.fileId || args.options.fileUrl}'?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the version ${args.options.label} from file ${args.options.fileId || args.options.fileUrl}'?` }); if (result) { await this.removeVersion(args); diff --git a/src/m365/spo/commands/file/file-version-restore.spec.ts b/src/m365/spo/commands/file/file-version-restore.spec.ts index 45e79d3e0ea..9e1c64156a6 100644 --- a/src/m365/spo/commands/file/file-version-restore.spec.ts +++ b/src/m365/spo/commands/file/file-version-restore.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -31,7 +31,7 @@ describe(commands.FILE_VERSION_RESTORE, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -48,7 +48,7 @@ describe(commands.FILE_VERSION_RESTORE, () => { } }; loggerLogToStderrSpy = sinon.spy(logger, 'logToStderr'); - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -59,7 +59,7 @@ describe(commands.FILE_VERSION_RESTORE, () => { afterEach(() => { sinonUtil.restore([ request.post, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -116,8 +116,8 @@ describe(commands.FILE_VERSION_RESTORE, () => { it('aborts restoring the specified version when force option not passed and prompt not confirmed', async () => { const postSpy = sinon.spy(request, 'post'); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { @@ -177,8 +177,8 @@ describe(commands.FILE_VERSION_RESTORE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -199,8 +199,8 @@ describe(commands.FILE_VERSION_RESTORE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { diff --git a/src/m365/spo/commands/file/file-version-restore.ts b/src/m365/spo/commands/file/file-version-restore.ts index 78835bd4027..f3281970716 100644 --- a/src/m365/spo/commands/file/file-version-restore.ts +++ b/src/m365/spo/commands/file/file-version-restore.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -99,7 +99,7 @@ class SpoFileVersionRestoreCommand extends SpoCommand { await this.restoreVersion(args); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to restore the version ${args.options.label} from file ${args.options.fileId || args.options.fileUrl}'?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to restore the version ${args.options.label} from file ${args.options.fileId || args.options.fileUrl}'?` }); if (result) { await this.restoreVersion(args); diff --git a/src/m365/spo/commands/folder/folder-add.spec.ts b/src/m365/spo/commands/folder/folder-add.spec.ts index 441d15742b0..6accaa8b2c5 100644 --- a/src/m365/spo/commands/folder/folder-add.spec.ts +++ b/src/m365/spo/commands/folder/folder-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -42,7 +42,7 @@ describe(commands.FOLDER_ADD, () => { throw 'Invalid request'; }); }; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/folder/folder-copy.spec.ts b/src/m365/spo/commands/folder/folder-copy.spec.ts index 57ecb5a14df..a97091ff09d 100644 --- a/src/m365/spo/commands/folder/folder-copy.spec.ts +++ b/src/m365/spo/commands/folder/folder-copy.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -35,7 +35,7 @@ describe(commands.FOLDER_COPY, () => { sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/folder/folder-get.spec.ts b/src/m365/spo/commands/folder/folder-get.spec.ts index 69efdb842a8..1adfb8de740 100644 --- a/src/m365/spo/commands/folder/folder-get.spec.ts +++ b/src/m365/spo/commands/folder/folder-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -379,7 +379,7 @@ describe(commands.FOLDER_GET, () => { throw 'Invalid request'; }); }; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/folder/folder-list.spec.ts b/src/m365/spo/commands/folder/folder-list.spec.ts index fd82247298a..573c6c94bcd 100644 --- a/src/m365/spo/commands/folder/folder-list.spec.ts +++ b/src/m365/spo/commands/folder/folder-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -54,7 +54,7 @@ describe(commands.FOLDER_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/folder/folder-move.spec.ts b/src/m365/spo/commands/folder/folder-move.spec.ts index 159ad66bada..acb27972ef3 100644 --- a/src/m365/spo/commands/folder/folder-move.spec.ts +++ b/src/m365/spo/commands/folder/folder-move.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -35,7 +35,7 @@ describe(commands.FOLDER_MOVE, () => { sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/folder/folder-remove.spec.ts b/src/m365/spo/commands/folder/folder-remove.spec.ts index 7d6ecd87795..86c35867e8d 100644 --- a/src/m365/spo/commands/folder/folder-remove.spec.ts +++ b/src/m365/spo/commands/folder/folder-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -27,7 +27,7 @@ describe(commands.FOLDER_REMOVE, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -52,7 +52,7 @@ describe(commands.FOLDER_REMOVE, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -64,7 +64,7 @@ describe(commands.FOLDER_REMOVE, () => { afterEach(() => { sinonUtil.restore([ request.post, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -88,15 +88,15 @@ describe(commands.FOLDER_REMOVE, () => { }); it('aborts removing folder when prompt not confirmed', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { webUrl: 'https://contoso.sharepoint.com', url: '/Shared Documents' } }); assert(requests.length === 0); }); it('removes the folder when prompt confirmed', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -124,8 +124,8 @@ describe(commands.FOLDER_REMOVE, () => { }); it('should send params for remove request for sites/test1', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: @@ -142,8 +142,8 @@ describe(commands.FOLDER_REMOVE, () => { }); it('should send params for recycle request when recycle is set to true', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: @@ -175,8 +175,8 @@ describe(commands.FOLDER_REMOVE, () => { sinonUtil.restore(request.post); sinon.stub(request, 'post').rejects(error); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await assert.rejects(command.action(logger, { options: diff --git a/src/m365/spo/commands/folder/folder-remove.ts b/src/m365/spo/commands/folder/folder-remove.ts index 99fc997f3fc..4f8b12a4e22 100644 --- a/src/m365/spo/commands/folder/folder-remove.ts +++ b/src/m365/spo/commands/folder/folder-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -77,7 +77,7 @@ class SpoFolderRemoveCommand extends SpoCommand { await this.removeFolder(logger, args.options); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to ${args.options.recycle ? "recycle" : "remove"} the folder ${args.options.url} located in site ${args.options.webUrl}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to ${args.options.recycle ? "recycle" : "remove"} the folder ${args.options.url} located in site ${args.options.webUrl}?` }); if (result) { await this.removeFolder(logger, args.options); diff --git a/src/m365/spo/commands/folder/folder-rename.spec.ts b/src/m365/spo/commands/folder/folder-rename.spec.ts index 90eabe37882..7b45b7fd011 100644 --- a/src/m365/spo/commands/folder/folder-rename.spec.ts +++ b/src/m365/spo/commands/folder/folder-rename.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -32,7 +32,7 @@ describe(commands.FOLDER_RENAME, () => { sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/folder/folder-retentionlabel-ensure.spec.ts b/src/m365/spo/commands/folder/folder-retentionlabel-ensure.spec.ts index 6dfeee6333f..39d76fb1d5e 100644 --- a/src/m365/spo/commands/folder/folder-retentionlabel-ensure.spec.ts +++ b/src/m365/spo/commands/folder/folder-retentionlabel-ensure.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -33,19 +33,17 @@ describe(commands.FOLDER_RETENTIONLABEL_ENSURE, () => { } }; - let cli: Cli; let log: any[]; let logger: Logger; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -67,7 +65,7 @@ describe(commands.FOLDER_RETENTIONLABEL_ENSURE, () => { sinonUtil.restore([ request.get, request.post, - Cli.executeCommandWithOutput, + cli.executeCommandWithOutput, cli.getSettingWithDefaultValue ]); }); diff --git a/src/m365/spo/commands/folder/folder-retentionlabel-remove.spec.ts b/src/m365/spo/commands/folder/folder-retentionlabel-remove.spec.ts index bf7de26e065..b2295d1c3bf 100644 --- a/src/m365/spo/commands/folder/folder-retentionlabel-remove.spec.ts +++ b/src/m365/spo/commands/folder/folder-retentionlabel-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -31,20 +31,18 @@ describe(commands.FOLDER_RETENTIONLABEL_REMOVE, () => { } } }; - let cli: Cli; let log: any[]; let logger: Logger; let commandInfo: CommandInfo; let promptIssued: boolean = false; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -60,7 +58,7 @@ describe(commands.FOLDER_RETENTIONLABEL_REMOVE, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -71,8 +69,8 @@ describe(commands.FOLDER_RETENTIONLABEL_REMOVE, () => { sinonUtil.restore([ request.get, request.post, - Cli.promptForConfirmation, - Cli.executeCommandWithOutput, + cli.promptForConfirmation, + cli.executeCommandWithOutput, cli.getSettingWithDefaultValue ]); }); @@ -98,8 +96,8 @@ describe(commands.FOLDER_RETENTIONLABEL_REMOVE, () => { it('aborts removing folder retention label when prompt not confirmed', async () => { const postSpy = sinon.spy(request, 'delete'); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { folderUrl: folderUrl, @@ -118,8 +116,8 @@ describe(commands.FOLDER_RETENTIONLABEL_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); sinon.stub(request, 'post').callsFake(async (opts) => { if (opts.url === `https://contoso.sharepoint.com/_api/SP_CompliancePolicy_SPPolicyStoreProxy_SetComplianceTagOnBulkItems` @@ -147,8 +145,8 @@ describe(commands.FOLDER_RETENTIONLABEL_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); sinon.stub(request, 'post').callsFake(async (opts) => { if (opts.url === `https://contoso.sharepoint.com/_api/SP_CompliancePolicy_SPPolicyStoreProxy_SetComplianceTagOnBulkItems` diff --git a/src/m365/spo/commands/folder/folder-retentionlabel-remove.ts b/src/m365/spo/commands/folder/folder-retentionlabel-remove.ts index 44f440021fe..656527f9f61 100644 --- a/src/m365/spo/commands/folder/folder-retentionlabel-remove.ts +++ b/src/m365/spo/commands/folder/folder-retentionlabel-remove.ts @@ -1,6 +1,6 @@ import * as url from 'url'; import GlobalOptions from '../../../../GlobalOptions.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import request, { CliRequestOptions } from '../../../../request.js'; import { formatting } from '../../../../utils/formatting.js'; @@ -94,7 +94,7 @@ class SpoFolderRetentionLabelRemoveCommand extends SpoCommand { await this.removeFolderRetentionLabel(logger, args); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the retentionlabel from folder ${args.options.folderId || args.options.folderUrl} located in site ${args.options.webUrl}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the retentionlabel from folder ${args.options.folderId || args.options.folderUrl} located in site ${args.options.webUrl}?` }); if (result) { await this.removeFolderRetentionLabel(logger, args); diff --git a/src/m365/spo/commands/folder/folder-roleassignment-add.spec.ts b/src/m365/spo/commands/folder/folder-roleassignment-add.spec.ts index e9d232c95a2..abbf6034d98 100644 --- a/src/m365/spo/commands/folder/folder-roleassignment-add.spec.ts +++ b/src/m365/spo/commands/folder/folder-roleassignment-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -28,7 +28,7 @@ describe(commands.FOLDER_ROLEASSIGNMENT_ADD, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -49,7 +49,7 @@ describe(commands.FOLDER_ROLEASSIGNMENT_ADD, () => { afterEach(() => { sinonUtil.restore([ request.post, - Cli.executeCommandWithOutput + cli.executeCommandWithOutput ]); }); @@ -139,7 +139,7 @@ describe(commands.FOLDER_ROLEASSIGNMENT_ADD, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoFolderGetCommand) { return { "Exists": true, "IsWOPIEnabled": false, "ItemCount": 0, "Name": "test1", "ProgID": null, "ServerRelativeUrl": "/Shared Documents/FolderPermission", "TimeCreated": "2018-05-02T23:21:45Z", "TimeLastModified": "2018-05-02T23:21:45Z", "UniqueId": "0ac3da45-cacf-4c31-9b38-9ef3697d5a66", "WelcomePage": "" }; } @@ -177,7 +177,7 @@ describe(commands.FOLDER_ROLEASSIGNMENT_ADD, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoFolderGetCommand) { return { "Exists": true, "IsWOPIEnabled": false, "ItemCount": 0, "Name": "test1", "ProgID": null, "ServerRelativeUrl": "/Shared Documents/FolderPermission", "TimeCreated": "2018-05-02T23:21:45Z", "TimeLastModified": "2018-05-02T23:21:45Z", "UniqueId": "0ac3da45-cacf-4c31-9b38-9ef3697d5a66", "WelcomePage": "" }; } @@ -209,7 +209,7 @@ describe(commands.FOLDER_ROLEASSIGNMENT_ADD, () => { }); const error = 'no user found'; - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoFolderGetCommand) { return { "Exists": true, "IsWOPIEnabled": false, "ItemCount": 0, "Name": "test1", "ProgID": null, "ServerRelativeUrl": "/Shared Documents/FolderPermission", "TimeCreated": "2018-05-02T23:21:45Z", "TimeLastModified": "2018-05-02T23:21:45Z", "UniqueId": "0ac3da45-cacf-4c31-9b38-9ef3697d5a66", "WelcomePage": "" }; } @@ -246,7 +246,7 @@ describe(commands.FOLDER_ROLEASSIGNMENT_ADD, () => { }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoFolderGetCommand) { return { "Exists": true, "IsWOPIEnabled": false, "ItemCount": 0, "Name": "test1", "ProgID": null, "ServerRelativeUrl": "/Shared Documents/FolderPermission", "TimeCreated": "2018-05-02T23:21:45Z", "TimeLastModified": "2018-05-02T23:21:45Z", "UniqueId": "0ac3da45-cacf-4c31-9b38-9ef3697d5a66", "WelcomePage": "" }; } @@ -285,7 +285,7 @@ describe(commands.FOLDER_ROLEASSIGNMENT_ADD, () => { }); const error = 'no group found'; - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoFolderGetCommand) { return { "Exists": true, "IsWOPIEnabled": false, "ItemCount": 0, "Name": "test1", "ProgID": null, "ServerRelativeUrl": "/Shared Documents/FolderPermission", "TimeCreated": "2018-05-02T23:21:45Z", "TimeLastModified": "2018-05-02T23:21:45Z", "UniqueId": "0ac3da45-cacf-4c31-9b38-9ef3697d5a66", "WelcomePage": "" }; } @@ -322,7 +322,7 @@ describe(commands.FOLDER_ROLEASSIGNMENT_ADD, () => { }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoFolderGetCommand) { return { "Exists": true, "IsWOPIEnabled": false, "ItemCount": 0, "Name": "test1", "ProgID": null, "ServerRelativeUrl": "/Shared Documents/FolderPermission", "TimeCreated": "2018-05-02T23:21:45Z", "TimeLastModified": "2018-05-02T23:21:45Z", "UniqueId": "0ac3da45-cacf-4c31-9b38-9ef3697d5a66", "WelcomePage": "" }; } @@ -361,7 +361,7 @@ describe(commands.FOLDER_ROLEASSIGNMENT_ADD, () => { }); const error = "The specified role definition name 'Full Control1' does not exist."; - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoFolderGetCommand) { return { "Exists": true, "IsWOPIEnabled": false, "ItemCount": 0, "Name": "test1", "ProgID": null, "ServerRelativeUrl": "/Shared Documents/FolderPermission", "TimeCreated": "2018-05-02T23:21:45Z", "TimeLastModified": "2018-05-02T23:21:45Z", "UniqueId": "0ac3da45-cacf-4c31-9b38-9ef3697d5a66", "WelcomePage": "" }; } diff --git a/src/m365/spo/commands/folder/folder-roleassignment-add.ts b/src/m365/spo/commands/folder/folder-roleassignment-add.ts index 75c6908c72c..025b6207a97 100644 --- a/src/m365/spo/commands/folder/folder-roleassignment-add.ts +++ b/src/m365/spo/commands/folder/folder-roleassignment-add.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import Command from '../../../../Command.js'; import GlobalOptions from '../../../../GlobalOptions.js'; @@ -200,7 +200,7 @@ class SpoFolderRoleAssignmentAddCommand extends SpoCommand { verbose: this.verbose }; - const output = await Cli.executeCommandWithOutput(spoRoleDefinitionFolderCommand as Command, { options: { ...roleDefinitionFolderCommandOptions, _: [] } }); + const output = await cli.executeCommandWithOutput(spoRoleDefinitionFolderCommand as Command, { options: { ...roleDefinitionFolderCommandOptions, _: [] } }); const getRoleDefinitionFolderOutput = JSON.parse(output.stdout); const roleDefinition = getRoleDefinitionFolderOutput.find((role: RoleDefinition) => role.Name === options.roleDefinitionName); if (roleDefinition) { @@ -221,7 +221,7 @@ class SpoFolderRoleAssignmentAddCommand extends SpoCommand { verbose: this.verbose }; - const output = await Cli.executeCommandWithOutput(spoGroupGetCommand as Command, { options: { ...groupGetCommandOptions, _: [] } }); + const output = await cli.executeCommandWithOutput(spoGroupGetCommand as Command, { options: { ...groupGetCommandOptions, _: [] } }); const getGroupOutput = JSON.parse(output.stdout); return getGroupOutput.Id as number; } @@ -236,7 +236,7 @@ class SpoFolderRoleAssignmentAddCommand extends SpoCommand { verbose: this.verbose }; - const output = await Cli.executeCommandWithOutput(spoUserGetCommand as Command, { options: { ...userGetCommandOptions, _: [] } }); + const output = await cli.executeCommandWithOutput(spoUserGetCommand as Command, { options: { ...userGetCommandOptions, _: [] } }); const getUserOutput = JSON.parse(output.stdout); return getUserOutput.Id as number; } diff --git a/src/m365/spo/commands/folder/folder-roleassignment-remove.spec.ts b/src/m365/spo/commands/folder/folder-roleassignment-remove.spec.ts index a8a47c2fbcb..7c0ffa8b031 100644 --- a/src/m365/spo/commands/folder/folder-roleassignment-remove.spec.ts +++ b/src/m365/spo/commands/folder/folder-roleassignment-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -17,7 +17,6 @@ import command from './folder-roleassignment-remove.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.FOLDER_ROLEASSIGNMENT_REMOVE, () => { - let cli: Cli; let log: any[]; let logger: Logger; let commandInfo: CommandInfo; @@ -25,13 +24,12 @@ describe(commands.FOLDER_ROLEASSIGNMENT_REMOVE, () => { let promptIssued: boolean = false; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -48,7 +46,7 @@ describe(commands.FOLDER_ROLEASSIGNMENT_REMOVE, () => { } }; requests = []; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -58,8 +56,8 @@ describe(commands.FOLDER_ROLEASSIGNMENT_REMOVE, () => { afterEach(() => { sinonUtil.restore([ request.post, - Cli.executeCommandWithOutput, - Cli.promptForConfirmation, + cli.executeCommandWithOutput, + cli.promptForConfirmation, cli.getSettingWithDefaultValue ]); }); @@ -159,7 +157,7 @@ describe(commands.FOLDER_ROLEASSIGNMENT_REMOVE, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoUserGetCommand) { return { stdout: '{"Id": 11,"IsHiddenInUI": false,"LoginName": "i:0#.f|membership|someaccount@tenant.onmicrosoft.com","Title": "Some Account","PrincipalType": 1,"Email": "someaccount@tenant.onmicrosoft.com","Expiration": "","IsEmailAuthenticationGuestUser": false,"IsShareByEmailGuestUser": false,"IsSiteAdmin": true,"UserId": {"NameId": "1003200097d06dd6","NameIdIssuer": "urn:federation:microsoftonline"},"UserPrincipalName": "someaccount@tenant.onmicrosoft.com"}' @@ -190,7 +188,7 @@ describe(commands.FOLDER_ROLEASSIGNMENT_REMOVE, () => { }); const error = 'no user found'; - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoUserGetCommand) { throw error; } @@ -218,7 +216,7 @@ describe(commands.FOLDER_ROLEASSIGNMENT_REMOVE, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoGroupGetCommand) { return { stdout: '{"Id": 11,"IsHiddenInUI": false,"LoginName": "otherGroup","Title": "otherGroup","PrincipalType": 8,"AllowMembersEditMembership": false,"AllowRequestToJoinLeave": false,"AutoAcceptRequestToJoinLeave": false,"Description": "","OnlyAllowMembersViewMembership": true,"OwnerTitle": "Some Account","RequestToJoinLeaveEmailSetting": null}' @@ -249,7 +247,7 @@ describe(commands.FOLDER_ROLEASSIGNMENT_REMOVE, () => { }); const error = 'no group found'; - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoGroupGetCommand) { throw error; } @@ -302,7 +300,7 @@ describe(commands.FOLDER_ROLEASSIGNMENT_REMOVE, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoGroupGetCommand) { return { stdout: '{"Id": 11,"IsHiddenInUI": false,"LoginName": "otherGroup","Title": "otherGroup","PrincipalType": 8,"AllowMembersEditMembership": false,"AllowRequestToJoinLeave": false,"AutoAcceptRequestToJoinLeave": false,"Description": "","OnlyAllowMembersViewMembership": true,"OwnerTitle": "Some Account","RequestToJoinLeaveEmailSetting": null}' @@ -312,8 +310,8 @@ describe(commands.FOLDER_ROLEASSIGNMENT_REMOVE, () => { throw new CommandError('Unknown case'); }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { debug: true, diff --git a/src/m365/spo/commands/folder/folder-roleassignment-remove.ts b/src/m365/spo/commands/folder/folder-roleassignment-remove.ts index ae4a2746acf..059e5119eb2 100644 --- a/src/m365/spo/commands/folder/folder-roleassignment-remove.ts +++ b/src/m365/spo/commands/folder/folder-roleassignment-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import Command from '../../../../Command.js'; import GlobalOptions from '../../../../GlobalOptions.js'; @@ -131,7 +131,7 @@ class SpoFolderRoleAssignmentRemoveCommand extends SpoCommand { await removeRoleAssignment(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove a role assignment from the folder with url '${args.options.folderUrl}'?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove a role assignment from the folder with url '${args.options.folderUrl}'?` }); if (result) { await removeRoleAssignment(); @@ -162,7 +162,7 @@ class SpoFolderRoleAssignmentRemoveCommand extends SpoCommand { verbose: this.verbose }; - const output = await Cli.executeCommandWithOutput(spoGroupGetCommand as Command, { options: { ...groupGetCommandOptions, _: [] } }); + const output = await cli.executeCommandWithOutput(spoGroupGetCommand as Command, { options: { ...groupGetCommandOptions, _: [] } }); const getGroupOutput = JSON.parse(output.stdout); return getGroupOutput.Id as number; } @@ -177,7 +177,7 @@ class SpoFolderRoleAssignmentRemoveCommand extends SpoCommand { verbose: this.verbose }; - const output = await Cli.executeCommandWithOutput(spoUserGetCommand as Command, { options: { ...userGetCommandOptions, _: [] } }); + const output = await cli.executeCommandWithOutput(spoUserGetCommand as Command, { options: { ...userGetCommandOptions, _: [] } }); const getUserOutput = JSON.parse(output.stdout); return getUserOutput.Id as number; } diff --git a/src/m365/spo/commands/folder/folder-roleinheritance-break.spec.ts b/src/m365/spo/commands/folder/folder-roleinheritance-break.spec.ts index d767f805ff5..2ce9c54f1ff 100644 --- a/src/m365/spo/commands/folder/folder-roleinheritance-break.spec.ts +++ b/src/m365/spo/commands/folder/folder-roleinheritance-break.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -31,7 +31,7 @@ describe(commands.FOLDER_ROLEINHERITANCE_BREAK, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -47,7 +47,7 @@ describe(commands.FOLDER_ROLEINHERITANCE_BREAK, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -57,7 +57,7 @@ describe(commands.FOLDER_ROLEINHERITANCE_BREAK, () => { afterEach(() => { sinonUtil.restore([ - Cli.promptForConfirmation, + cli.promptForConfirmation, request.post ]); }); @@ -140,8 +140,8 @@ describe(commands.FOLDER_ROLEINHERITANCE_BREAK, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -161,8 +161,8 @@ describe(commands.FOLDER_ROLEINHERITANCE_BREAK, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -181,8 +181,8 @@ describe(commands.FOLDER_ROLEINHERITANCE_BREAK, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { diff --git a/src/m365/spo/commands/folder/folder-roleinheritance-break.ts b/src/m365/spo/commands/folder/folder-roleinheritance-break.ts index 02a72325234..78acc3d60d7 100644 --- a/src/m365/spo/commands/folder/folder-roleinheritance-break.ts +++ b/src/m365/spo/commands/folder/folder-roleinheritance-break.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -100,7 +100,7 @@ class SpoFolderRoleInheritanceBreakCommand extends SpoCommand { await breakFolderRoleInheritance(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to break the role inheritance of folder ${args.options.folderUrl} located in site ${args.options.webUrl}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to break the role inheritance of folder ${args.options.folderUrl} located in site ${args.options.webUrl}?` }); if (result) { await breakFolderRoleInheritance(); diff --git a/src/m365/spo/commands/folder/folder-roleinheritance-reset.spec.ts b/src/m365/spo/commands/folder/folder-roleinheritance-reset.spec.ts index c9c509a0c1c..de66f1f5acc 100644 --- a/src/m365/spo/commands/folder/folder-roleinheritance-reset.spec.ts +++ b/src/m365/spo/commands/folder/folder-roleinheritance-reset.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -29,7 +29,7 @@ describe(commands.FOLDER_ROLEINHERITANCE_RESET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -45,7 +45,7 @@ describe(commands.FOLDER_ROLEINHERITANCE_RESET, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -55,7 +55,7 @@ describe(commands.FOLDER_ROLEINHERITANCE_RESET, () => { afterEach(() => { sinonUtil.restore([ - Cli.promptForConfirmation, + cli.promptForConfirmation, request.post ]); }); @@ -136,8 +136,8 @@ describe(commands.FOLDER_ROLEINHERITANCE_RESET, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -156,8 +156,8 @@ describe(commands.FOLDER_ROLEINHERITANCE_RESET, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { diff --git a/src/m365/spo/commands/folder/folder-roleinheritance-reset.ts b/src/m365/spo/commands/folder/folder-roleinheritance-reset.ts index 32cfc2b4ede..54a735b38ab 100644 --- a/src/m365/spo/commands/folder/folder-roleinheritance-reset.ts +++ b/src/m365/spo/commands/folder/folder-roleinheritance-reset.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -95,7 +95,7 @@ class SpoFolderRoleInheritanceResetCommand extends SpoCommand { await resetFolderRoleInheritance(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to reset the role inheritance of folder ${args.options.folderUrl} located in site ${args.options.webUrl}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to reset the role inheritance of folder ${args.options.folderUrl} located in site ${args.options.webUrl}?` }); if (result) { await resetFolderRoleInheritance(); diff --git a/src/m365/spo/commands/group/group-add.spec.ts b/src/m365/spo/commands/group/group-add.spec.ts index 7d4da79d766..abd431065c2 100644 --- a/src/m365/spo/commands/group/group-add.spec.ts +++ b/src/m365/spo/commands/group/group-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -39,7 +39,7 @@ describe(commands.GROUP_ADD, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/group/group-get.spec.ts b/src/m365/spo/commands/group/group-get.spec.ts index 990216dc97b..9953f407ef7 100644 --- a/src/m365/spo/commands/group/group-get.spec.ts +++ b/src/m365/spo/commands/group/group-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,20 +15,18 @@ import command from './group-get.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.GROUP_GET, () => { - let cli: Cli; let log: any[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/group/group-list.spec.ts b/src/m365/spo/commands/group/group-list.spec.ts index 2495a6585ea..d12f9db0d0f 100644 --- a/src/m365/spo/commands/group/group-list.spec.ts +++ b/src/m365/spo/commands/group/group-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -93,7 +93,7 @@ describe(commands.GROUP_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/group/group-list.ts b/src/m365/spo/commands/group/group-list.ts index c2bf0a8bc6c..3d0858fffac 100644 --- a/src/m365/spo/commands/group/group-list.ts +++ b/src/m365/spo/commands/group/group-list.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -100,7 +100,7 @@ class SpoGroupListCommand extends SpoCommand { const groupProperties = await request.get(requestOptions); - if (!options.output || !Cli.shouldTrimOutput(options.output)) { + if (!options.output || !cli.shouldTrimOutput(options.output)) { await logger.log(groupProperties); } else { diff --git a/src/m365/spo/commands/group/group-member-add.spec.ts b/src/m365/spo/commands/group/group-member-add.spec.ts index 7458e4b6506..854604c1016 100644 --- a/src/m365/spo/commands/group/group-member-add.spec.ts +++ b/src/m365/spo/commands/group/group-member-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,7 +15,6 @@ import command from './group-member-add.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.GROUP_MEMBER_ADD, () => { - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; @@ -66,13 +65,12 @@ describe(commands.GROUP_MEMBER_ADD, () => { }; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -96,7 +94,7 @@ describe(commands.GROUP_MEMBER_ADD, () => { request.get, request.post, cli.getSettingWithDefaultValue, - Cli.handleMultipleResultsFound + cli.handleMultipleResultsFound ]); }); @@ -618,7 +616,7 @@ describe(commands.GROUP_MEMBER_ADD, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves({ id: '9b1b1e42-794b-4c71-93ac-5ed92488b67f' }); + sinon.stub(cli, 'handleMultipleResultsFound').resolves({ id: '9b1b1e42-794b-4c71-93ac-5ed92488b67f' }); sinon.stub(request, 'post').callsFake(async opts => { if (opts.url === 'https://contoso.sharepoint.com/sites/SiteA/_api/SP.Web.ShareObject' && diff --git a/src/m365/spo/commands/group/group-member-list.spec.ts b/src/m365/spo/commands/group/group-member-list.spec.ts index c2067ece6cb..b51dd311dbb 100644 --- a/src/m365/spo/commands/group/group-member-list.spec.ts +++ b/src/m365/spo/commands/group/group-member-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,7 +15,6 @@ import command from './group-member-list.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.GROUP_MEMBER_LIST, () => { - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; @@ -64,13 +63,12 @@ describe(commands.GROUP_MEMBER_LIST, () => { }; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -92,7 +90,7 @@ describe(commands.GROUP_MEMBER_LIST, () => { afterEach(() => { sinonUtil.restore([ request.get, - Cli.executeCommandWithOutput, + cli.executeCommandWithOutput, cli.getSettingWithDefaultValue ]); }); diff --git a/src/m365/spo/commands/group/group-member-remove.spec.ts b/src/m365/spo/commands/group/group-member-remove.spec.ts index c1db039c411..641ea7b3838 100644 --- a/src/m365/spo/commands/group/group-member-remove.spec.ts +++ b/src/m365/spo/commands/group/group-member-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -17,7 +17,6 @@ import command from './group-member-remove.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.GROUP_MEMBER_REMOVE, () => { - let cli: Cli; let log: string[]; let logger: Logger; let commandInfo: CommandInfo; @@ -51,13 +50,12 @@ describe(commands.GROUP_MEMBER_REMOVE, () => { }; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').callsFake(() => Promise.resolve()); sinon.stub(telemetry, 'trackEvent').callsFake(() => { }); sinon.stub(pid, 'getProcessName').callsFake(() => ''); sinon.stub(session, 'getId').callsFake(() => ''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -79,8 +77,8 @@ describe(commands.GROUP_MEMBER_REMOVE, () => { sinonUtil.restore([ request.get, request.post, - Cli.promptForConfirmation, - Cli.executeCommandWithOutput, + cli.promptForConfirmation, + cli.executeCommandWithOutput, cli.getSettingWithDefaultValue ]); }); @@ -99,10 +97,10 @@ describe(commands.GROUP_MEMBER_REMOVE, () => { }); it('Removes Azure AD group from SharePoint group using Azure AD Group Name', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoGroupMemberListCommand) { return ({ stdout: spoGroupMemberListCommandOutput @@ -131,7 +129,7 @@ describe(commands.GROUP_MEMBER_REMOVE, () => { }); it('Removes Azure AD group from SharePoint group using Azure AD Group ID - Without Confirmation Prompt', async () => { - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoGroupMemberListCommand) { return ({ stdout: spoGroupMemberListCommandOutput @@ -161,10 +159,10 @@ describe(commands.GROUP_MEMBER_REMOVE, () => { }); it('Removes Azure AD group from SharePoint group using Azure AD Group ID and SharePoint Group ID', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoGroupMemberListCommand) { return ({ stdout: spoGroupMemberListCommandOutput @@ -193,7 +191,7 @@ describe(commands.GROUP_MEMBER_REMOVE, () => { }); it('Throws error when Azure AD group not found', async () => { - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoGroupMemberListCommand) { return ({ stdout: spoGroupMemberListCommandOutput @@ -449,8 +447,8 @@ describe(commands.GROUP_MEMBER_REMOVE, () => { }); it('removes user from SharePoint group by groupId and userName when force option not passed', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); const postStub = sinon.stub(request, 'post').callsFake(async (opts) => { const loginName: string = `i:0#.f|membership|${userName}`; @@ -475,8 +473,8 @@ describe(commands.GROUP_MEMBER_REMOVE, () => { }); it('removes user from SharePoint group by groupId and userId when force option not passed', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); const postStub = sinon.stub(request, 'post').callsFake(async (opts) => { if (opts.url === `${webUrl}/_api/web/sitegroups/GetById('${groupId}')/users/removeById(${userId})`) { @@ -500,10 +498,10 @@ describe(commands.GROUP_MEMBER_REMOVE, () => { }); it('removes user from SharePoint group by groupId and email when force option not passed', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(() => Promise.resolve({ + sinon.stub(cli, 'executeCommandWithOutput').callsFake(() => Promise.resolve({ stdout: JSON.stringify(userInformation), stderr: '' })); @@ -553,7 +551,7 @@ describe(commands.GROUP_MEMBER_REMOVE, () => { }); it('removes user from SharePoint group by groupName and email with force option', async () => { - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(() => Promise.resolve({ + sinon.stub(cli, 'executeCommandWithOutput').callsFake(() => Promise.resolve({ stdout: JSON.stringify(userInformation), stderr: '' })); @@ -582,8 +580,8 @@ describe(commands.GROUP_MEMBER_REMOVE, () => { it('aborts removing user from SharePoint group when prompt not confirmed', async () => { const postSpy = sinon.spy(request, 'post'); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { diff --git a/src/m365/spo/commands/group/group-member-remove.ts b/src/m365/spo/commands/group/group-member-remove.ts index 951badb2078..6f78593b1e6 100644 --- a/src/m365/spo/commands/group/group-member-remove.ts +++ b/src/m365/spo/commands/group/group-member-remove.ts @@ -1,4 +1,4 @@ -import { Cli, CommandOutput } from '../../../../cli/Cli.js'; +import { cli, CommandOutput } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import Command from '../../../../Command.js'; import GlobalOptions from '../../../../GlobalOptions.js'; @@ -142,7 +142,7 @@ class SpoGroupMemberRemoveCommand extends SpoCommand { verbose: args.options.verbose }; - const userGetOutput: CommandOutput = await Cli.executeCommandWithOutput(aadUserGetCommand as Command, { options: { ...options, _: [] } }); + const userGetOutput: CommandOutput = await cli.executeCommandWithOutput(aadUserGetCommand as Command, { options: { ...options, _: [] } }); const userOutput = JSON.parse(userGetOutput.stdout); return userOutput.userPrincipalName; } @@ -155,7 +155,7 @@ class SpoGroupMemberRemoveCommand extends SpoCommand { await this.removeUserfromSPGroup(logger, args); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove user ${args.options.userName || args.options.userId || args.options.email || args.options.aadGroupId || args.options.aadGroupName} from the SharePoint group?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove user ${args.options.userName || args.options.userId || args.options.email || args.options.aadGroupId || args.options.aadGroupName} from the SharePoint group?` }); if (result) { await this.removeUserfromSPGroup(logger, args); @@ -216,23 +216,23 @@ class SpoGroupMemberRemoveCommand extends SpoCommand { options.groupName = args.options.groupName; } - const output = await Cli.executeCommandWithOutput(SpoGroupMemberListCommand as Command, { options: { ...options, _: [] } }); + const output = await cli.executeCommandWithOutput(SpoGroupMemberListCommand as Command, { options: { ...options, _: [] } }); const getGroupMemberListOutput = JSON.parse(output.stdout); - let foundgroups: any; + let foundGroups: any; if (args.options.aadGroupId) { - foundgroups = getGroupMemberListOutput.filter((x: any) => { return x.LoginName.indexOf(args.options.aadGroupId) > -1 && (x.LoginName.indexOf("c:0o.c|federateddirectoryclaimprovider|") === 0 || x.LoginName.indexOf("c:0t.c|tenant|") === 0); }); + foundGroups = getGroupMemberListOutput.filter((x: any) => { return x.LoginName.indexOf(args.options.aadGroupId) > -1 && (x.LoginName.indexOf("c:0o.c|federateddirectoryclaimprovider|") === 0 || x.LoginName.indexOf("c:0t.c|tenant|") === 0); }); } else { - foundgroups = getGroupMemberListOutput.filter((x: any) => { return x.Title === args.options.aadGroupName && (x.LoginName.indexOf("c:0o.c|federateddirectoryclaimprovider|") === 0 || x.LoginName.indexOf("c:0t.c|tenant|") === 0); }); + foundGroups = getGroupMemberListOutput.filter((x: any) => { return x.Title === args.options.aadGroupName && (x.LoginName.indexOf("c:0o.c|federateddirectoryclaimprovider|") === 0 || x.LoginName.indexOf("c:0t.c|tenant|") === 0); }); } - if (foundgroups.length === 0) { + if (foundGroups.length === 0) { throw `The Azure AD group ${args.options.aadGroupId || args.options.aadGroupName} is not found in SharePoint group ${args.options.groupId || args.options.groupName}`; } - return foundgroups[0].Id; + return foundGroups[0].Id; } } diff --git a/src/m365/spo/commands/group/group-remove.spec.ts b/src/m365/spo/commands/group/group-remove.spec.ts index 3a275251a28..dd827edfd17 100755 --- a/src/m365/spo/commands/group/group-remove.spec.ts +++ b/src/m365/spo/commands/group/group-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,20 +15,18 @@ import command from './group-remove.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.GROUP_REMOVE, () => { - let cli: Cli; let log: any[]; let logger: Logger; let commandInfo: CommandInfo; let promptIssued: boolean = false; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -44,7 +42,7 @@ describe(commands.GROUP_REMOVE, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -55,7 +53,7 @@ describe(commands.GROUP_REMOVE, () => { sinonUtil.restore([ request.post, request.get, - Cli.promptForConfirmation, + cli.promptForConfirmation, cli.getSettingWithDefaultValue ]); }); @@ -126,8 +124,8 @@ describe(commands.GROUP_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { webUrl: 'https://contoso.sharepoint.com/mysite', id: 7, debug: true } }); assert(requestPostSpy.called); diff --git a/src/m365/spo/commands/group/group-remove.ts b/src/m365/spo/commands/group/group-remove.ts index e19c478f3b5..78c36ca85ad 100755 --- a/src/m365/spo/commands/group/group-remove.ts +++ b/src/m365/spo/commands/group/group-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -129,7 +129,7 @@ class SpoGroupRemoveCommand extends SpoCommand { await removeGroup(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the group ${args.options.id || args.options.name} from web ${args.options.webUrl}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the group ${args.options.id || args.options.name} from web ${args.options.webUrl}?` }); if (result) { await removeGroup(); diff --git a/src/m365/spo/commands/group/group-set.spec.ts b/src/m365/spo/commands/group/group-set.spec.ts index 90a9d9b8a10..b410d479642 100644 --- a/src/m365/spo/commands/group/group-set.spec.ts +++ b/src/m365/spo/commands/group/group-set.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -38,7 +38,7 @@ describe(commands.GROUP_SET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -61,7 +61,7 @@ describe(commands.GROUP_SET, () => { sinonUtil.restore([ request.post, request.patch, - Cli.executeCommandWithOutput + cli.executeCommandWithOutput ]); }); @@ -160,7 +160,7 @@ describe(commands.GROUP_SET, () => { }); it('successfully updates group owner by ownerEmail, retrieves group by id', async () => { - sinon.stub(Cli, 'executeCommandWithOutput').resolves({ + sinon.stub(cli, 'executeCommandWithOutput').resolves({ stdout: JSON.stringify(userInfoResponse), stderr: '' }); @@ -194,7 +194,7 @@ describe(commands.GROUP_SET, () => { }); it('successfully updates group owner by ownerUserName, retrieves group by name', async () => { - sinon.stub(Cli, 'executeCommandWithOutput').resolves({ + sinon.stub(cli, 'executeCommandWithOutput').resolves({ stdout: JSON.stringify(userInfoResponse), stderr: '' }); diff --git a/src/m365/spo/commands/group/group-set.ts b/src/m365/spo/commands/group/group-set.ts index a50a54b3517..3e6ce7ded6a 100644 --- a/src/m365/spo/commands/group/group-set.ts +++ b/src/m365/spo/commands/group/group-set.ts @@ -1,4 +1,4 @@ -import { Cli, CommandOutput } from '../../../../cli/Cli.js'; +import { cli, CommandOutput } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import Command from '../../../../Command.js'; import GlobalOptions from '../../../../GlobalOptions.js'; @@ -196,7 +196,7 @@ class SpoGroupSetCommand extends SpoCommand { verbose: options.verbose }; - const output: CommandOutput = await Cli.executeCommandWithOutput(aadUserGetCommand as Command, { options: { ...cmdOptions, _: [] } }); + const output: CommandOutput = await cli.executeCommandWithOutput(aadUserGetCommand as Command, { options: { ...cmdOptions, _: [] } }); const getUserOutput = JSON.parse(output.stdout); const requestOptions: CliRequestOptions = { diff --git a/src/m365/spo/commands/hidedefaultthemes/hidedefaultthemes-set.spec.ts b/src/m365/spo/commands/hidedefaultthemes/hidedefaultthemes-set.spec.ts index d350e5153e7..85875f9bf61 100644 --- a/src/m365/spo/commands/hidedefaultthemes/hidedefaultthemes-set.spec.ts +++ b/src/m365/spo/commands/hidedefaultthemes/hidedefaultthemes-set.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,22 +15,20 @@ import command from './hidedefaultthemes-set.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.HIDEDEFAULTTHEMES_SET, () => { - let cli: Cli; let log: string[]; let logger: Logger; let commandInfo: CommandInfo; let requests: any[]; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); - sinon.stub(Cli.getInstance(), 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { + commandInfo = cli.getCommandInfo(command); + sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { if (settingName === 'prompt') { return false; } diff --git a/src/m365/spo/commands/homesite/homesite-remove.spec.ts b/src/m365/spo/commands/homesite/homesite-remove.spec.ts index c8052ed9f80..330ca4c1ae1 100644 --- a/src/m365/spo/commands/homesite/homesite-remove.spec.ts +++ b/src/m365/spo/commands/homesite/homesite-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; import config from '../../../../config.js'; @@ -47,7 +47,7 @@ describe(commands.HOMESITE_REMOVE, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -58,7 +58,7 @@ describe(commands.HOMESITE_REMOVE, () => { afterEach(() => { sinonUtil.restore([ request.post, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -85,8 +85,8 @@ describe(commands.HOMESITE_REMOVE, () => { it('aborts removing Home Site when force option is not passed and prompt not confirmed', async () => { const postSpy = sinon.spy(request, 'post'); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: {} }); assert(postSpy.notCalled); @@ -114,8 +114,8 @@ describe(commands.HOMESITE_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: {} }); assert(homeSiteRemoveCallIssued); diff --git a/src/m365/spo/commands/homesite/homesite-remove.ts b/src/m365/spo/commands/homesite/homesite-remove.ts index a006c4aa90c..7f2108a12a0 100644 --- a/src/m365/spo/commands/homesite/homesite-remove.ts +++ b/src/m365/spo/commands/homesite/homesite-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import config from '../../../../config.js'; import GlobalOptions from '../../../../GlobalOptions.js'; @@ -83,7 +83,7 @@ class SpoHomeSiteRemoveCommand extends SpoCommand { await removeHomeSite(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the Home Site?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the Home Site?` }); if (result) { await removeHomeSite(); diff --git a/src/m365/spo/commands/homesite/homesite-set.spec.ts b/src/m365/spo/commands/homesite/homesite-set.spec.ts index 45afb907dd4..2745d33b275 100644 --- a/src/m365/spo/commands/homesite/homesite-set.spec.ts +++ b/src/m365/spo/commands/homesite/homesite-set.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -48,7 +48,7 @@ describe(commands.HOMESITE_SET, () => { sinon.stub(session, 'getId').returns(''); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/hubsite/hubsite-connect.spec.ts b/src/m365/spo/commands/hubsite/hubsite-connect.spec.ts index 33d13230f09..41c77e2d1a5 100644 --- a/src/m365/spo/commands/hubsite/hubsite-connect.spec.ts +++ b/src/m365/spo/commands/hubsite/hubsite-connect.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -16,7 +16,6 @@ import command from './hubsite-connect.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.HUBSITE_CONNECT, () => { - let cli: Cli; const spoAdminUrl = 'https://contoso-admin.sharepoint.com'; const id = '55b979e7-36b6-4968-b3af-6ae221a3483f'; const parentId = 'f7510a39-8423-43fd-aed8-e3b11d043e0f'; @@ -49,13 +48,12 @@ describe(commands.HUBSITE_CONNECT, () => { let patchStub: sinon.SinonStub<[options: CliRequestOptions]>; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); sinon.stub(spo, 'getSpoAdminUrl').resolves(spoAdminUrl); patchStub = sinon.stub(request, 'patch').callsFake(async (opts) => { @@ -65,7 +63,7 @@ describe(commands.HUBSITE_CONNECT, () => { throw 'Invalid requet URL: ' + opts.url; }); - sinon.stub(Cli.getInstance(), 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { + sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { if (settingName === 'prompt') { return false; } @@ -93,7 +91,7 @@ describe(commands.HUBSITE_CONNECT, () => { sinonUtil.restore([ request.get, cli.getSettingWithDefaultValue, - Cli.handleMultipleResultsFound + cli.handleMultipleResultsFound ]); }); @@ -308,7 +306,7 @@ describe(commands.HUBSITE_CONNECT, () => { throw 'Invalid request URL: ' + opts.url; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves({ + sinon.stub(cli, 'handleMultipleResultsFound').resolves({ Title: title, ID: id, 'odata.etag': etagValue diff --git a/src/m365/spo/commands/hubsite/hubsite-connect.ts b/src/m365/spo/commands/hubsite/hubsite-connect.ts index 52934591367..45e64cecb92 100644 --- a/src/m365/spo/commands/hubsite/hubsite-connect.ts +++ b/src/m365/spo/commands/hubsite/hubsite-connect.ts @@ -6,7 +6,7 @@ import { validation } from '../../../../utils/validation.js'; import SpoCommand from '../../../base/SpoCommand.js'; import commands from '../../commands.js'; import { HubSite } from './HubSite.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { formatting } from '../../../../utils/formatting.js'; interface CommandArgs { @@ -177,7 +177,7 @@ class SpoHubSiteConnectCommand extends SpoCommand { } if (filteredHubSites.length > 1) { const resultAsKeyValuePair = formatting.convertArrayToHashTable('ID', filteredHubSites); - return await Cli.handleMultipleResultsFound(`Multiple hub sites with name '${title}' found.`, resultAsKeyValuePair); + return await cli.handleMultipleResultsFound(`Multiple hub sites with name '${title}' found.`, resultAsKeyValuePair); } return filteredHubSites[0]; diff --git a/src/m365/spo/commands/hubsite/hubsite-data-get.spec.ts b/src/m365/spo/commands/hubsite/hubsite-data-get.spec.ts index ea406ef99d9..f856090ba9c 100644 --- a/src/m365/spo/commands/hubsite/hubsite-data-get.spec.ts +++ b/src/m365/spo/commands/hubsite/hubsite-data-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -26,7 +26,7 @@ describe(commands.HUBSITE_DATA_GET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/hubsite/hubsite-disconnect.spec.ts b/src/m365/spo/commands/hubsite/hubsite-disconnect.spec.ts index 2a6b16ba15e..28a5a096a3c 100644 --- a/src/m365/spo/commands/hubsite/hubsite-disconnect.spec.ts +++ b/src/m365/spo/commands/hubsite/hubsite-disconnect.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -16,7 +16,6 @@ import command from './hubsite-disconnect.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.HUBSITE_DISCONNECT, () => { - let cli: Cli; const spoAdminUrl = 'https://contoso-admin.sharepoint.com'; const id = '55b979e7-36b6-4968-b3af-6ae221a3483f'; const title = 'Hub Site'; @@ -49,13 +48,12 @@ describe(commands.HUBSITE_DISCONNECT, () => { let patchStub: sinon.SinonStub<[options: CliRequestOptions]>; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); sinon.stub(spo, 'getSpoAdminUrl').resolves(spoAdminUrl); patchStub = sinon.stub(request, 'patch').callsFake(async (opts) => { @@ -65,7 +63,7 @@ describe(commands.HUBSITE_DISCONNECT, () => { throw 'Invalid requet URL: ' + opts.url; }); - sinon.stub(Cli.getInstance(), 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { + sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { if (settingName === 'prompt') { return false; } @@ -87,7 +85,7 @@ describe(commands.HUBSITE_DISCONNECT, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -99,8 +97,8 @@ describe(commands.HUBSITE_DISCONNECT, () => { sinonUtil.restore([ request.get, cli.getSettingWithDefaultValue, - Cli.promptForConfirmation, - Cli.handleMultipleResultsFound + cli.promptForConfirmation, + cli.handleMultipleResultsFound ]); }); @@ -237,8 +235,8 @@ describe(commands.HUBSITE_DISCONNECT, () => { throw 'Invalid request URL: ' + opts.url; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -311,7 +309,7 @@ describe(commands.HUBSITE_DISCONNECT, () => { throw 'Invalid request URL: ' + opts.url; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves({ + sinon.stub(cli, 'handleMultipleResultsFound').resolves({ Title: title, ID: id, 'odata.etag': etagValue diff --git a/src/m365/spo/commands/hubsite/hubsite-disconnect.ts b/src/m365/spo/commands/hubsite/hubsite-disconnect.ts index 03400480e18..a82e1404590 100644 --- a/src/m365/spo/commands/hubsite/hubsite-disconnect.ts +++ b/src/m365/spo/commands/hubsite/hubsite-disconnect.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -124,7 +124,7 @@ class SpoHubSiteDisconnectCommand extends SpoCommand { await disconnectHubSite(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want disconnect hub site '${args.options.id || args.options.title || args.options.url}' from its parent hub site?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want disconnect hub site '${args.options.id || args.options.title || args.options.url}' from its parent hub site?` }); if (result) { await disconnectHubSite(); @@ -165,7 +165,7 @@ class SpoHubSiteDisconnectCommand extends SpoCommand { if (filteredHubSites.length > 1) { const resultAsKeyValuePair = formatting.convertArrayToHashTable('ID', filteredHubSites); - const result = await Cli.handleMultipleResultsFound(`Multiple hub sites with name '${options.title}' found.`, resultAsKeyValuePair); + const result = await cli.handleMultipleResultsFound(`Multiple hub sites with name '${options.title}' found.`, resultAsKeyValuePair); return result as { 'odata.etag': string, ID: string }; } diff --git a/src/m365/spo/commands/hubsite/hubsite-get.spec.ts b/src/m365/spo/commands/hubsite/hubsite-get.spec.ts index 2f64e934178..672ab9c7ddb 100644 --- a/src/m365/spo/commands/hubsite/hubsite-get.spec.ts +++ b/src/m365/spo/commands/hubsite/hubsite-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -16,7 +16,6 @@ import command from './hubsite-get.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.HUBSITE_GET, () => { - let cli: Cli; const validId = '9ff01368-1183-4cbb-82f2-92e7e9a3f4ce'; const validTitle = 'Hub Site'; const validUrl = 'https://contoso.sharepoint.com'; @@ -34,15 +33,14 @@ describe(commands.HUBSITE_GET, () => { let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); - sinon.stub(Cli.getInstance(), 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { + commandInfo = cli.getCommandInfo(command); + sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { if (settingName === 'prompt') { return false; } @@ -70,9 +68,9 @@ describe(commands.HUBSITE_GET, () => { afterEach(() => { sinonUtil.restore([ request.get, - Cli.executeCommandWithOutput, + cli.executeCommandWithOutput, cli.getSettingWithDefaultValue, - Cli.handleMultipleResultsFound + cli.handleMultipleResultsFound ]); }); @@ -206,7 +204,7 @@ describe(commands.HUBSITE_GET, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves(hubsiteResponse); + sinon.stub(cli, 'handleMultipleResultsFound').resolves(hubsiteResponse); await command.action(logger, { options: { title: validTitle } }); assert(loggerLogSpy.calledWith(hubsiteResponse)); @@ -265,7 +263,7 @@ describe(commands.HUBSITE_GET, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoListItemListCommand) { return { stdout: JSON.stringify([ diff --git a/src/m365/spo/commands/hubsite/hubsite-get.ts b/src/m365/spo/commands/hubsite/hubsite-get.ts index 052811dd040..7f9b8aa63f8 100644 --- a/src/m365/spo/commands/hubsite/hubsite-get.ts +++ b/src/m365/spo/commands/hubsite/hubsite-get.ts @@ -1,4 +1,4 @@ -import { Cli, CommandOutput } from '../../../../cli/Cli.js'; +import { cli, CommandOutput } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import Command from '../../../../Command.js'; import GlobalOptions from '../../../../GlobalOptions.js'; @@ -90,7 +90,7 @@ class SpoHubSiteGetCommand extends SpoCommand { throw 'includeAssociatedSites option is only allowed with json output mode'; } - if (args.options.includeAssociatedSites === true && args.options.output && !Cli.shouldTrimOutput(args.options.output)) { + if (args.options.includeAssociatedSites === true && args.options.output && !cli.shouldTrimOutput(args.options.output)) { const spoAdminUrl = await spo.getSpoAdminUrl(logger, this.debug); const associatedSitesCommandOutput = await this.getAssociatedSites(spoAdminUrl, hubSite.SiteId, logger, args); const associatedSites: AssociatedSite[] = JSON.parse((associatedSitesCommandOutput as CommandOutput).stdout) as AssociatedSite[]; @@ -115,7 +115,7 @@ class SpoHubSiteGetCommand extends SpoCommand { fields: 'Title,SiteUrl,SiteId' }; - return Cli.executeCommandWithOutput(spoListItemListCommand as Command, { options: { ...options, _: [] } }); + return cli.executeCommandWithOutput(spoListItemListCommand as Command, { options: { ...options, _: [] } }); } private async getHubSiteById(spoUrl: string, options: Options): Promise { @@ -154,7 +154,7 @@ class SpoHubSiteGetCommand extends SpoCommand { if (hubSites.length > 1) { const resultAsKeyValuePair = formatting.convertArrayToHashTable('ID', hubSites); - return await Cli.handleMultipleResultsFound(`Multiple hub sites with ${options.title || options.url} found.`, resultAsKeyValuePair); + return await cli.handleMultipleResultsFound(`Multiple hub sites with ${options.title || options.url} found.`, resultAsKeyValuePair); } return hubSites[0]; diff --git a/src/m365/spo/commands/hubsite/hubsite-register.spec.ts b/src/m365/spo/commands/hubsite/hubsite-register.spec.ts index 5207b2dcdc0..f8b0d809491 100644 --- a/src/m365/spo/commands/hubsite/hubsite-register.spec.ts +++ b/src/m365/spo/commands/hubsite/hubsite-register.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -32,7 +32,7 @@ describe(commands.HUBSITE_REGISTER, () => { WebFullUrl: 'https://contoso.sharepoint.com' }); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/hubsite/hubsite-rights-grant.spec.ts b/src/m365/spo/commands/hubsite/hubsite-rights-grant.spec.ts index c7c871ad225..231b0759262 100644 --- a/src/m365/spo/commands/hubsite/hubsite-rights-grant.spec.ts +++ b/src/m365/spo/commands/hubsite/hubsite-rights-grant.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -35,7 +35,7 @@ describe(commands.HUBSITE_RIGHTS_GRANT, () => { }); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/hubsite/hubsite-rights-revoke.spec.ts b/src/m365/spo/commands/hubsite/hubsite-rights-revoke.spec.ts index 2191c031b84..a02375c00a7 100644 --- a/src/m365/spo/commands/hubsite/hubsite-rights-revoke.spec.ts +++ b/src/m365/spo/commands/hubsite/hubsite-rights-revoke.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -36,7 +36,7 @@ describe(commands.HUBSITE_RIGHTS_REVOKE, () => { }); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -54,7 +54,7 @@ describe(commands.HUBSITE_RIGHTS_REVOKE, () => { }; loggerLogSpy = sinon.spy(logger, 'log'); loggerLogToStderrSpy = sinon.spy(logger, 'logToStderr'); - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -65,7 +65,7 @@ describe(commands.HUBSITE_RIGHTS_REVOKE, () => { afterEach(() => { sinonUtil.restore([ request.post, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -131,8 +131,8 @@ describe(commands.HUBSITE_RIGHTS_REVOKE, () => { it('aborts revoking rights when prompt not confirmed', async () => { const postSpy = sinon.spy(request, 'post'); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { hubSiteUrl: 'https://contoso.sharepoint.com/sites/Sales', principals: 'admin' } }); assert(postSpy.notCalled); }); @@ -145,8 +145,8 @@ describe(commands.HUBSITE_RIGHTS_REVOKE, () => { "IsNull": false } ]))); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { hubSiteUrl: 'https://contoso.sharepoint.com/sites/Sales', principals: 'admin' } }); assert(postStub.called); }); diff --git a/src/m365/spo/commands/hubsite/hubsite-rights-revoke.ts b/src/m365/spo/commands/hubsite/hubsite-rights-revoke.ts index 22166f8f661..956147bcfe0 100644 --- a/src/m365/spo/commands/hubsite/hubsite-rights-revoke.ts +++ b/src/m365/spo/commands/hubsite/hubsite-rights-revoke.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import config from '../../../../config.js'; import GlobalOptions from '../../../../GlobalOptions.js'; @@ -104,7 +104,7 @@ class SpoHubSiteRightsRevokeCommand extends SpoCommand { await revokeRights(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to revoke rights to join sites to the hub site ${args.options.hubSiteUrl} from the specified users?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to revoke rights to join sites to the hub site ${args.options.hubSiteUrl} from the specified users?` }); if (result) { await revokeRights(); diff --git a/src/m365/spo/commands/hubsite/hubsite-set.spec.ts b/src/m365/spo/commands/hubsite/hubsite-set.spec.ts index d9614f4289e..285def554d9 100644 --- a/src/m365/spo/commands/hubsite/hubsite-set.spec.ts +++ b/src/m365/spo/commands/hubsite/hubsite-set.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -34,7 +34,7 @@ describe(commands.HUBSITE_SET, () => { }); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/hubsite/hubsite-unregister.spec.ts b/src/m365/spo/commands/hubsite/hubsite-unregister.spec.ts index d5ae9fb6d91..43db1a0b8d1 100644 --- a/src/m365/spo/commands/hubsite/hubsite-unregister.spec.ts +++ b/src/m365/spo/commands/hubsite/hubsite-unregister.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -34,7 +34,7 @@ describe(commands.HUBSITE_UNREGISTER, () => { WebFullUrl: 'https://contoso.sharepoint.com' }); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -52,7 +52,7 @@ describe(commands.HUBSITE_UNREGISTER, () => { }; loggerLogSpy = sinon.spy(logger, 'log'); requests = []; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -63,7 +63,7 @@ describe(commands.HUBSITE_UNREGISTER, () => { afterEach(() => { sinonUtil.restore([ request.post, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -105,8 +105,8 @@ describe(commands.HUBSITE_UNREGISTER, () => { }); it('aborts unregistering hub site when prompt not confirmed', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { url: 'https://contoso.sharepoint.com/sites/sales' } }); assert(requests.length === 0); @@ -126,8 +126,8 @@ describe(commands.HUBSITE_UNREGISTER, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { debug: true, url: 'https://contoso.sharepoint.com/sites/sales' } }); }); diff --git a/src/m365/spo/commands/hubsite/hubsite-unregister.ts b/src/m365/spo/commands/hubsite/hubsite-unregister.ts index b4fa565e50e..059736c7ca2 100644 --- a/src/m365/spo/commands/hubsite/hubsite-unregister.ts +++ b/src/m365/spo/commands/hubsite/hubsite-unregister.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -87,7 +87,7 @@ class SpoHubSiteUnregisterCommand extends SpoCommand { await unregisterHubSite(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to unregister the site collection ${args.options.url} as a hub site?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to unregister the site collection ${args.options.url} as a hub site?` }); if (result) { await unregisterHubSite(); diff --git a/src/m365/spo/commands/knowledgehub/knowledgehub-remove.spec.ts b/src/m365/spo/commands/knowledgehub/knowledgehub-remove.spec.ts index 43748b40e93..795d5fabe99 100644 --- a/src/m365/spo/commands/knowledgehub/knowledgehub-remove.spec.ts +++ b/src/m365/spo/commands/knowledgehub/knowledgehub-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; import config from '../../../../config.js'; @@ -65,7 +65,7 @@ describe(commands.KNOWLEDGEHUB_REMOVE, () => { } }; requests = []; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -74,7 +74,7 @@ describe(commands.KNOWLEDGEHUB_REMOVE, () => { }); afterEach(() => { - sinonUtil.restore(Cli.promptForConfirmation); + sinonUtil.restore(cli.promptForConfirmation); }); after(() => { @@ -127,16 +127,16 @@ describe(commands.KNOWLEDGEHUB_REMOVE, () => { }); it('aborts removing Knowledge Hub settings from tenant when prompt not confirmed', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { debug: true } }); assert(requests.length === 0); }); it('removes removing Knowledge Hub settings from tenant when prompt confirmed', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { debug: true } }); }); diff --git a/src/m365/spo/commands/knowledgehub/knowledgehub-remove.ts b/src/m365/spo/commands/knowledgehub/knowledgehub-remove.ts index 91a0af6adfc..6a94f4fae05 100644 --- a/src/m365/spo/commands/knowledgehub/knowledgehub-remove.ts +++ b/src/m365/spo/commands/knowledgehub/knowledgehub-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import config from '../../../../config.js'; import GlobalOptions from '../../../../GlobalOptions.js'; @@ -87,7 +87,7 @@ class SpoKnowledgehubRemoveCommand extends SpoCommand { await removeKnowledgehub(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove Knowledge Hub Site from your tenant?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove Knowledge Hub Site from your tenant?` }); if (result) { await removeKnowledgehub(); diff --git a/src/m365/spo/commands/knowledgehub/knowledgehub-set.spec.ts b/src/m365/spo/commands/knowledgehub/knowledgehub-set.spec.ts index 54d496c4da2..c1a91fdfe91 100644 --- a/src/m365/spo/commands/knowledgehub/knowledgehub-set.spec.ts +++ b/src/m365/spo/commands/knowledgehub/knowledgehub-set.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -49,7 +49,7 @@ describe(commands.KNOWLEDGEHUB_SET, () => { throw 'Invalid request'; }); - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/list/list-add.spec.ts b/src/m365/spo/commands/list/list-add.spec.ts index c47679abcb6..82fae5203d6 100644 --- a/src/m365/spo/commands/list/list-add.spec.ts +++ b/src/m365/spo/commands/list/list-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -25,7 +25,7 @@ describe(commands.LIST_ADD, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/list/list-contenttype-add.spec.ts b/src/m365/spo/commands/list/list-contenttype-add.spec.ts index 36aa68b4757..131c3a0762c 100644 --- a/src/m365/spo/commands/list/list-contenttype-add.spec.ts +++ b/src/m365/spo/commands/list/list-contenttype-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -42,20 +42,18 @@ describe(commands.LIST_CONTENTTYPE_ADD, () => { "StringId": "0x0120000EAD53EDAD7C6647B0D976EEC953F99E" }; - let cli: Cli; let log: any[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/list/list-contenttype-default-set.spec.ts b/src/m365/spo/commands/list/list-contenttype-default-set.spec.ts index a7dd0f2b2e1..a0d95f2092a 100644 --- a/src/m365/spo/commands/list/list-contenttype-default-set.spec.ts +++ b/src/m365/spo/commands/list/list-contenttype-default-set.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,7 +15,6 @@ import command from './list-contenttype-default-set.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.LIST_CONTENTTYPE_DEFAULT_SET, () => { - let cli: Cli; let log: any[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; @@ -23,13 +22,12 @@ describe(commands.LIST_CONTENTTYPE_DEFAULT_SET, () => { let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/list/list-contenttype-list.spec.ts b/src/m365/spo/commands/list/list-contenttype-list.spec.ts index 867f706c8bd..1736aa6664b 100644 --- a/src/m365/spo/commands/list/list-contenttype-list.spec.ts +++ b/src/m365/spo/commands/list/list-contenttype-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -71,20 +71,18 @@ describe(commands.LIST_CONTENTTYPE_LIST, () => { } ] }; - let cli: Cli; let log: any[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/list/list-contenttype-remove.spec.ts b/src/m365/spo/commands/list/list-contenttype-remove.spec.ts index ca405fb6b50..f8d3bab2e7c 100644 --- a/src/m365/spo/commands/list/list-contenttype-remove.spec.ts +++ b/src/m365/spo/commands/list/list-contenttype-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,7 +15,6 @@ import command from './list-contenttype-remove.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.LIST_CONTENTTYPE_REMOVE, () => { - let cli: Cli; const webUrl: string = 'https://contoso.sharepoint.com'; const listId: string = 'dfddade1-4729-428d-881e-7fedf3cae50d'; const listTitle: string = 'Documents'; @@ -28,13 +27,12 @@ describe(commands.LIST_CONTENTTYPE_REMOVE, () => { let promptIssued: boolean = false; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -51,7 +49,7 @@ describe(commands.LIST_CONTENTTYPE_REMOVE, () => { } }; loggerLogSpy = sinon.spy(logger, 'log'); - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -61,7 +59,7 @@ describe(commands.LIST_CONTENTTYPE_REMOVE, () => { afterEach(() => { sinonUtil.restore([ request.post, - Cli.promptForConfirmation, + cli.promptForConfirmation, cli.getSettingWithDefaultValue ]); }); @@ -104,8 +102,8 @@ describe(commands.LIST_CONTENTTYPE_REMOVE, () => { }); it('aborts removing content type from list when prompt not confirmed', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { listId: listId, @@ -128,8 +126,8 @@ describe(commands.LIST_CONTENTTYPE_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -156,8 +154,8 @@ describe(commands.LIST_CONTENTTYPE_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -184,8 +182,8 @@ describe(commands.LIST_CONTENTTYPE_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -212,8 +210,8 @@ describe(commands.LIST_CONTENTTYPE_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -239,8 +237,8 @@ describe(commands.LIST_CONTENTTYPE_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -266,8 +264,8 @@ describe(commands.LIST_CONTENTTYPE_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { diff --git a/src/m365/spo/commands/list/list-contenttype-remove.ts b/src/m365/spo/commands/list/list-contenttype-remove.ts index 56eb09cc77c..47732a3fa44 100644 --- a/src/m365/spo/commands/list/list-contenttype-remove.ts +++ b/src/m365/spo/commands/list/list-contenttype-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -143,7 +143,7 @@ class SpoListContentTypeRemoveCommand extends SpoCommand { await removeContentTypeFromList(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the content type ${args.options.id} from the list ${args.options.listId ? args.options.listId : args.options.listTitle ? args.options.listTitle : args.options.listUrl} in site ${args.options.webUrl}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the content type ${args.options.id} from the list ${args.options.listId ? args.options.listId : args.options.listTitle ? args.options.listTitle : args.options.listUrl} in site ${args.options.webUrl}?` }); if (result) { await removeContentTypeFromList(); diff --git a/src/m365/spo/commands/list/list-get.spec.ts b/src/m365/spo/commands/list/list-get.spec.ts index c39b3dd2ba9..06331f3a655 100644 --- a/src/m365/spo/commands/list/list-get.spec.ts +++ b/src/m365/spo/commands/list/list-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -25,7 +25,7 @@ describe(commands.LIST_GET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/list/list-list.spec.ts b/src/m365/spo/commands/list/list-list.spec.ts index dd5b406094d..4c6e003d8a9 100644 --- a/src/m365/spo/commands/list/list-list.spec.ts +++ b/src/m365/spo/commands/list/list-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -80,7 +80,7 @@ describe(commands.LIST_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/list/list-remove.spec.ts b/src/m365/spo/commands/list/list-remove.spec.ts index 797efdbb1b6..7421195c738 100644 --- a/src/m365/spo/commands/list/list-remove.spec.ts +++ b/src/m365/spo/commands/list/list-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,7 +15,6 @@ import command from './list-remove.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.LIST_REMOVE, () => { - let cli: Cli; let log: any[]; let logger: Logger; let commandInfo: CommandInfo; @@ -23,13 +22,12 @@ describe(commands.LIST_REMOVE, () => { let promptIssued: boolean = false; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -46,7 +44,7 @@ describe(commands.LIST_REMOVE, () => { } }; requests = []; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -56,7 +54,7 @@ describe(commands.LIST_REMOVE, () => { afterEach(() => { sinonUtil.restore([ request.post, - Cli.promptForConfirmation, + cli.promptForConfirmation, cli.getSettingWithDefaultValue ]); }); @@ -87,8 +85,8 @@ describe(commands.LIST_REMOVE, () => { }); it('aborts removing list when prompt not confirmed', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { id: 'b2307a39-e878-458b-bc90-03bc578531d6', webUrl: 'https://contoso.sharepoint.com' } }); assert(requests.length === 0); }); @@ -108,8 +106,8 @@ describe(commands.LIST_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { id: 'b2307a39-e878-458b-bc90-03bc578531d6', webUrl: 'https://contoso.sharepoint.com' } }); let correctRequestIssued = false; requests.forEach(r => { diff --git a/src/m365/spo/commands/list/list-remove.ts b/src/m365/spo/commands/list/list-remove.ts index 3bf8949a5ea..1c45a3185a8 100644 --- a/src/m365/spo/commands/list/list-remove.ts +++ b/src/m365/spo/commands/list/list-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -123,7 +123,7 @@ class SpoListRemoveCommand extends SpoCommand { await removeList(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the list ${args.options.id || args.options.title} from site ${args.options.webUrl}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the list ${args.options.id || args.options.title} from site ${args.options.webUrl}?` }); if (result) { await removeList(); diff --git a/src/m365/spo/commands/list/list-retentionlabel-ensure.spec.ts b/src/m365/spo/commands/list/list-retentionlabel-ensure.spec.ts index f75aec5411a..af1f2cf2b31 100644 --- a/src/m365/spo/commands/list/list-retentionlabel-ensure.spec.ts +++ b/src/m365/spo/commands/list/list-retentionlabel-ensure.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -15,19 +15,17 @@ import command from './list-retentionlabel-ensure.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.LIST_RETENTIONLABEL_ENSURE, () => { - let cli: Cli; let log: any[]; let logger: Logger; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/list/list-retentionlabel-get.spec.ts b/src/m365/spo/commands/list/list-retentionlabel-get.spec.ts index 96e9c4f1ec0..00cfef217d4 100644 --- a/src/m365/spo/commands/list/list-retentionlabel-get.spec.ts +++ b/src/m365/spo/commands/list/list-retentionlabel-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -25,7 +25,7 @@ describe(commands.LIST_RETENTIONLABEL_GET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/list/list-retentionlabel-remove.spec.ts b/src/m365/spo/commands/list/list-retentionlabel-remove.spec.ts index 4421d024c47..31514e2c732 100644 --- a/src/m365/spo/commands/list/list-retentionlabel-remove.spec.ts +++ b/src/m365/spo/commands/list/list-retentionlabel-remove.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -15,7 +15,6 @@ import command from './list-retentionlabel-remove.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.LIST_RETENTIONLABEL_REMOVE, () => { - let cli: Cli; let log: any[]; let logger: Logger; let commandInfo: CommandInfo; @@ -26,14 +25,13 @@ describe(commands.LIST_RETENTIONLABEL_REMOVE, () => { }; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); - sinon.stub(Cli.getInstance(), 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { + commandInfo = cli.getCommandInfo(command); + sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { if (settingName === 'prompt') { return false; } @@ -61,7 +59,7 @@ describe(commands.LIST_RETENTIONLABEL_REMOVE, () => { sinonUtil.restore([ request.get, request.post, - Cli.promptForConfirmation, + cli.promptForConfirmation, cli.getSettingWithDefaultValue ]); }); @@ -80,7 +78,7 @@ describe(commands.LIST_RETENTIONLABEL_REMOVE, () => { }); it('prompts before removing the retentionlabel on the specified list when force option not passed (listTitle)', async () => { - const confirmationStub = sinon.stub(Cli, 'promptForConfirmation').resolves(false); + const confirmationStub = sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { @@ -93,7 +91,7 @@ describe(commands.LIST_RETENTIONLABEL_REMOVE, () => { }); it('prompts before removing the retentionlabel on the specified list when force option not passed (listId)', async () => { - const confirmationStub = sinon.stub(Cli, 'promptForConfirmation').resolves(false); + const confirmationStub = sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { @@ -106,7 +104,7 @@ describe(commands.LIST_RETENTIONLABEL_REMOVE, () => { }); it('prompts before removing the retentionlabel on the specified list when force option not passed (listUrl)', async () => { - const confirmationStub = sinon.stub(Cli, 'promptForConfirmation').resolves(false); + const confirmationStub = sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { @@ -119,7 +117,7 @@ describe(commands.LIST_RETENTIONLABEL_REMOVE, () => { }); it('aborts removing list retentionlabel when prompt not confirmed', async () => { - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinon.stub(cli, 'promptForConfirmation').resolves(false); const getSpy = sinon.spy(request, 'get'); await command.action(logger, { @@ -277,8 +275,8 @@ describe(commands.LIST_RETENTIONLABEL_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await assert.doesNotReject(command.action(logger, { options: { diff --git a/src/m365/spo/commands/list/list-retentionlabel-remove.ts b/src/m365/spo/commands/list/list-retentionlabel-remove.ts index fead790ce4b..4d696a76485 100644 --- a/src/m365/spo/commands/list/list-retentionlabel-remove.ts +++ b/src/m365/spo/commands/list/list-retentionlabel-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -92,7 +92,7 @@ class SpoListRetentionLabelRemoveCommand extends SpoCommand { await this.removeListRetentionLabel(logger, args); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the retention label from list '${args.options.listId || args.options.listTitle || args.options.listUrl}'?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the retention label from list '${args.options.listId || args.options.listTitle || args.options.listUrl}'?` }); if (result) { await this.removeListRetentionLabel(logger, args); diff --git a/src/m365/spo/commands/list/list-roleassignment-add.spec.ts b/src/m365/spo/commands/list/list-roleassignment-add.spec.ts index fc9d06d78ee..1bce6e01c9f 100644 --- a/src/m365/spo/commands/list/list-roleassignment-add.spec.ts +++ b/src/m365/spo/commands/list/list-roleassignment-add.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -85,7 +85,7 @@ describe(commands.LIST_ROLEASSIGNMENT_ADD, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/list/list-roleassignment-remove.spec.ts b/src/m365/spo/commands/list/list-roleassignment-remove.spec.ts index 3709775b429..a82bf5dc14c 100644 --- a/src/m365/spo/commands/list/list-roleassignment-remove.spec.ts +++ b/src/m365/spo/commands/list/list-roleassignment-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -28,8 +28,8 @@ describe(commands.LIST_ROLEASSIGNMENT_REMOVE, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); - sinon.stub(Cli.getInstance(), 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { + commandInfo = cli.getCommandInfo(command); + sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { if (settingName === 'prompt') { return false; } @@ -52,7 +52,7 @@ describe(commands.LIST_ROLEASSIGNMENT_REMOVE, () => { } }; requests = []; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -63,8 +63,8 @@ describe(commands.LIST_ROLEASSIGNMENT_REMOVE, () => { afterEach(() => { sinonUtil.restore([ request.post, - Cli.executeCommandWithOutput, - Cli.promptForConfirmation + cli.executeCommandWithOutput, + cli.promptForConfirmation ]); }); @@ -180,7 +180,7 @@ describe(commands.LIST_ROLEASSIGNMENT_REMOVE, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoUserGetCommand) { return { stdout: '{"Id": 11,"IsHiddenInUI": false,"LoginName": "i:0#.f|membership|someaccount@tenant.onmicrosoft.com","Title": "Some Account","PrincipalType": 1,"Email": "someaccount@tenant.onmicrosoft.com","Expiration": "","IsEmailAuthenticationGuestUser": false,"IsShareByEmailGuestUser": false,"IsSiteAdmin": true,"UserId": {"NameId": "1003200097d06dd6","NameIdIssuer": "urn:federation:microsoftonline"},"UserPrincipalName": "someaccount@tenant.onmicrosoft.com"}' @@ -211,7 +211,7 @@ describe(commands.LIST_ROLEASSIGNMENT_REMOVE, () => { }); const error = 'no user found'; - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoUserGetCommand) { throw error; } @@ -239,7 +239,7 @@ describe(commands.LIST_ROLEASSIGNMENT_REMOVE, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoGroupGetCommand) { return { stdout: '{"Id": 11,"IsHiddenInUI": false,"LoginName": "otherGroup","Title": "otherGroup","PrincipalType": 8,"AllowMembersEditMembership": false,"AllowRequestToJoinLeave": false,"AutoAcceptRequestToJoinLeave": false,"Description": "","OnlyAllowMembersViewMembership": true,"OwnerTitle": "Some Account","RequestToJoinLeaveEmailSetting": null}' @@ -270,7 +270,7 @@ describe(commands.LIST_ROLEASSIGNMENT_REMOVE, () => { }); const error = 'no group found'; - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoGroupGetCommand) { throw error; } @@ -338,7 +338,7 @@ describe(commands.LIST_ROLEASSIGNMENT_REMOVE, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoGroupGetCommand) { return { stdout: '{"Id": 11,"IsHiddenInUI": false,"LoginName": "otherGroup","Title": "otherGroup","PrincipalType": 8,"AllowMembersEditMembership": false,"AllowRequestToJoinLeave": false,"AutoAcceptRequestToJoinLeave": false,"Description": "","OnlyAllowMembersViewMembership": true,"OwnerTitle": "Some Account","RequestToJoinLeaveEmailSetting": null}' @@ -348,8 +348,8 @@ describe(commands.LIST_ROLEASSIGNMENT_REMOVE, () => { throw new CommandError('Unknown case'); }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { diff --git a/src/m365/spo/commands/list/list-roleassignment-remove.ts b/src/m365/spo/commands/list/list-roleassignment-remove.ts index 77e5c0ac168..b07920a9338 100644 --- a/src/m365/spo/commands/list/list-roleassignment-remove.ts +++ b/src/m365/spo/commands/list/list-roleassignment-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import Command from '../../../../Command.js'; import GlobalOptions from '../../../../GlobalOptions.js'; @@ -155,7 +155,7 @@ class SpoListRoleAssignmentRemoveCommand extends SpoCommand { await removeRoleAssignment(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove role assignment from list ${args.options.listId || args.options.listTitle} from site ${args.options.webUrl}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove role assignment from list ${args.options.listId || args.options.listTitle} from site ${args.options.webUrl}?` }); if (result) { await removeRoleAssignment(); @@ -186,7 +186,7 @@ class SpoListRoleAssignmentRemoveCommand extends SpoCommand { verbose: this.verbose }; - const output = await Cli.executeCommandWithOutput(spoGroupGetCommand as Command, { options: { ...groupGetCommandOptions, _: [] } }); + const output = await cli.executeCommandWithOutput(spoGroupGetCommand as Command, { options: { ...groupGetCommandOptions, _: [] } }); const getGroupOutput = JSON.parse(output.stdout); return getGroupOutput.Id; } @@ -201,7 +201,7 @@ class SpoListRoleAssignmentRemoveCommand extends SpoCommand { verbose: this.verbose }; - const output = await Cli.executeCommandWithOutput(spoUserGetCommand as Command, { options: { ...userGetCommandOptions, _: [] } }); + const output = await cli.executeCommandWithOutput(spoUserGetCommand as Command, { options: { ...userGetCommandOptions, _: [] } }); const getUserOutput = JSON.parse(output.stdout); return getUserOutput.Id; diff --git a/src/m365/spo/commands/list/list-roleinheritance-break.spec.ts b/src/m365/spo/commands/list/list-roleinheritance-break.spec.ts index 3a80c1fc93b..d5d78b79e80 100644 --- a/src/m365/spo/commands/list/list-roleinheritance-break.spec.ts +++ b/src/m365/spo/commands/list/list-roleinheritance-break.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,20 +15,18 @@ import command from './list-roleinheritance-break.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.LIST_ROLEINHERITANCE_BREAK, () => { - let cli: Cli; let log: any[]; let logger: Logger; let commandInfo: CommandInfo; let promptIssued: boolean = false; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -44,7 +42,7 @@ describe(commands.LIST_ROLEINHERITANCE_BREAK, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -54,7 +52,7 @@ describe(commands.LIST_ROLEINHERITANCE_BREAK, () => { afterEach(() => { sinonUtil.restore([ request.post, - Cli.promptForConfirmation, + cli.promptForConfirmation, cli.getSettingWithDefaultValue ]); }); @@ -273,8 +271,8 @@ describe(commands.LIST_ROLEINHERITANCE_BREAK, () => { }); it('aborts breaking role inheritance when prompt not confirmed', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); const postSpy = sinon.spy(request, 'post'); await command.action(logger, { @@ -318,8 +316,8 @@ describe(commands.LIST_ROLEINHERITANCE_BREAK, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { diff --git a/src/m365/spo/commands/list/list-roleinheritance-break.ts b/src/m365/spo/commands/list/list-roleinheritance-break.ts index cb49d30c6d9..c24d1bdac7d 100644 --- a/src/m365/spo/commands/list/list-roleinheritance-break.ts +++ b/src/m365/spo/commands/list/list-roleinheritance-break.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -140,7 +140,7 @@ class SpoListRoleInheritanceBreakCommand extends SpoCommand { await breakListRoleInheritance(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to break the role inheritance of ${args.options.listId ?? args.options.listTitle}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to break the role inheritance of ${args.options.listId ?? args.options.listTitle}?` }); if (result) { await breakListRoleInheritance(); diff --git a/src/m365/spo/commands/list/list-roleinheritance-reset.spec.ts b/src/m365/spo/commands/list/list-roleinheritance-reset.spec.ts index 3e5ddb95a9f..7fd2821c2b6 100644 --- a/src/m365/spo/commands/list/list-roleinheritance-reset.spec.ts +++ b/src/m365/spo/commands/list/list-roleinheritance-reset.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,20 +15,18 @@ import command from './list-roleinheritance-reset.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.LIST_ROLEINHERITANCE_RESET, () => { - let cli: Cli; let log: any[]; let logger: Logger; let commandInfo: CommandInfo; let promptIssued: boolean = false; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -44,7 +42,7 @@ describe(commands.LIST_ROLEINHERITANCE_RESET, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -54,7 +52,7 @@ describe(commands.LIST_ROLEINHERITANCE_RESET, () => { afterEach(() => { sinonUtil.restore([ request.post, - Cli.promptForConfirmation, + cli.promptForConfirmation, cli.getSettingWithDefaultValue ]); }); @@ -223,8 +221,8 @@ describe(commands.LIST_ROLEINHERITANCE_RESET, () => { it('aborts resetting role inheritance when prompt not confirmed', async () => { const postSpy = sinon.spy(request, 'post'); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { debug: true, @@ -267,8 +265,8 @@ describe(commands.LIST_ROLEINHERITANCE_RESET, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { diff --git a/src/m365/spo/commands/list/list-roleinheritance-reset.ts b/src/m365/spo/commands/list/list-roleinheritance-reset.ts index fb60bdbb238..d74b37e05c3 100644 --- a/src/m365/spo/commands/list/list-roleinheritance-reset.ts +++ b/src/m365/spo/commands/list/list-roleinheritance-reset.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -130,7 +130,7 @@ class SpoListRoleInheritanceResetCommand extends SpoCommand { await resetListRoleInheritance(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to reset the role inheritance of ${args.options.listId ?? args.options.listTitle}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to reset the role inheritance of ${args.options.listId ?? args.options.listTitle}?` }); if (result) { await resetListRoleInheritance(); diff --git a/src/m365/spo/commands/list/list-sensitivitylabel-ensure.spec.ts b/src/m365/spo/commands/list/list-sensitivitylabel-ensure.spec.ts index 8a74ce0d959..5bd9e23fe47 100644 --- a/src/m365/spo/commands/list/list-sensitivitylabel-ensure.spec.ts +++ b/src/m365/spo/commands/list/list-sensitivitylabel-ensure.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -36,20 +36,18 @@ describe(commands.LIST_SENSITIVITYLABEL_ENSURE, () => { ] }; - let cli: Cli; let log: any[]; let logger: Logger; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); - sinon.stub(Cli.getInstance(), 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { + commandInfo = cli.getCommandInfo(command); + sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { if (settingName === 'prompt') { return false; } diff --git a/src/m365/spo/commands/list/list-set.spec.ts b/src/m365/spo/commands/list/list-set.spec.ts index 8003ae14541..e24a3e8c2f2 100644 --- a/src/m365/spo/commands/list/list-set.spec.ts +++ b/src/m365/spo/commands/list/list-set.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,19 +15,17 @@ import command from './list-set.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.LIST_SET, () => { - let cli: Cli; let log: any[]; let logger: Logger; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/list/list-sitescript-get.spec.ts b/src/m365/spo/commands/list/list-sitescript-get.spec.ts index 0d3b3b26ea4..49cc5a3bc43 100644 --- a/src/m365/spo/commands/list/list-sitescript-get.spec.ts +++ b/src/m365/spo/commands/list/list-sitescript-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -24,7 +24,7 @@ describe(commands.LIST_SITESCRIPT_GET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/list/list-view-add.spec.ts b/src/m365/spo/commands/list/list-view-add.spec.ts index 4d25e5de75c..ae01b7b0b82 100644 --- a/src/m365/spo/commands/list/list-view-add.spec.ts +++ b/src/m365/spo/commands/list/list-view-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -54,7 +54,7 @@ describe(commands.LIST_VIEW_ADD, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/list/list-view-field-add.spec.ts b/src/m365/spo/commands/list/list-view-field-add.spec.ts index 699470e89c5..d42cac32873 100644 --- a/src/m365/spo/commands/list/list-view-field-add.spec.ts +++ b/src/m365/spo/commands/list/list-view-field-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -84,7 +84,7 @@ describe(commands.LIST_VIEW_FIELD_ADD, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/list/list-view-field-remove.spec.ts b/src/m365/spo/commands/list/list-view-field-remove.spec.ts index cd74e6c89b2..d6f377135c1 100644 --- a/src/m365/spo/commands/list/list-view-field-remove.spec.ts +++ b/src/m365/spo/commands/list/list-view-field-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -86,7 +86,7 @@ describe(commands.LIST_VIEW_FIELD_REMOVE, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -103,7 +103,7 @@ describe(commands.LIST_VIEW_FIELD_REMOVE, () => { } }; requests = []; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -115,7 +115,7 @@ describe(commands.LIST_VIEW_FIELD_REMOVE, () => { sinonUtil.restore([ request.get, request.post, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -175,8 +175,8 @@ describe(commands.LIST_VIEW_FIELD_REMOVE, () => { }); it('aborts removing field by title from list view when prompt not confirmed', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { webUrl: 'https://contoso.sharepoint.com/sites/ninja', listTitle: 'Documents', viewId: 'cc27a922-8224-4296-90a5-ebbc54da2e81', title: 'Created By' } }); assert(requests.length === 0); }); @@ -198,8 +198,8 @@ describe(commands.LIST_VIEW_FIELD_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { debug: true, webUrl: 'https://contoso.sharepoint.com/sites/ninja', listTitle: 'Documents', viewId: 'cc27a922-8224-4296-90a5-ebbc54da2e81', title: 'Created By' } }); let correctRequestIssued = false; requests.forEach(r => { @@ -258,8 +258,8 @@ describe(commands.LIST_VIEW_FIELD_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { webUrl: 'https://contoso.sharepoint.com/sites/ninja', listId: '0cd891ef-afce-4e55-b836-fce03286cccf', viewTitle: 'MyView', title: 'Created By' } }); let correctRequestIssued = false; @@ -290,8 +290,8 @@ describe(commands.LIST_VIEW_FIELD_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { webUrl: 'https://contoso.sharepoint.com/sites/ninja', listId: '0cd891ef-afce-4e55-b836-fce03286cccf', viewId: 'cc27a922-8224-4296-90a5-ebbc54da2e81', title: 'Created By' } }); let correctRequestIssued = false; @@ -322,8 +322,8 @@ describe(commands.LIST_VIEW_FIELD_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { verbose: true, webUrl: 'https://contoso.sharepoint.com/sites/ninja', listTitle: 'Documents', viewId: 'cc27a922-8224-4296-90a5-ebbc54da2e81', id: '330f29c5-5c4c-465f-9f4b-7903020ae1ce' } }); let correctRequestIssued = false; @@ -354,8 +354,8 @@ describe(commands.LIST_VIEW_FIELD_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { webUrl: 'https://contoso.sharepoint.com/sites/ninja', listTitle: 'Documents', viewTitle: 'MyView', id: '330f29c5-5c4c-465f-9f4b-7903020ae1ce' } }); let correctRequestIssued = false; @@ -386,8 +386,8 @@ describe(commands.LIST_VIEW_FIELD_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { webUrl: 'https://contoso.sharepoint.com/sites/ninja', listId: '0cd891ef-afce-4e55-b836-fce03286cccf', viewTitle: 'MyView', id: '330f29c5-5c4c-465f-9f4b-7903020ae1ce' } }); let correctRequestIssued = false; @@ -418,8 +418,8 @@ describe(commands.LIST_VIEW_FIELD_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { webUrl: 'https://contoso.sharepoint.com/sites/ninja', listId: '0cd891ef-afce-4e55-b836-fce03286cccf', viewId: 'cc27a922-8224-4296-90a5-ebbc54da2e81', id: '330f29c5-5c4c-465f-9f4b-7903020ae1ce' } }); let correctRequestIssued = false; @@ -450,8 +450,8 @@ describe(commands.LIST_VIEW_FIELD_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { webUrl: 'https://contoso.sharepoint.com/sites/ninja', listUrl: '/sites/ninja/Shared Documents', viewId: 'cc27a922-8224-4296-90a5-ebbc54da2e81', id: '330f29c5-5c4c-465f-9f4b-7903020ae1ce' } }); let correctRequestIssued = false; diff --git a/src/m365/spo/commands/list/list-view-field-remove.ts b/src/m365/spo/commands/list/list-view-field-remove.ts index e50cb448724..0f40d78872c 100644 --- a/src/m365/spo/commands/list/list-view-field-remove.ts +++ b/src/m365/spo/commands/list/list-view-field-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -175,7 +175,7 @@ class SpoListViewFieldRemoveCommand extends SpoCommand { await removeFieldFromView(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the field ${args.options.id || args.options.title} from the view ${args.options.viewId || args.options.viewTitle} from list ${args.options.listId || args.options.listTitle} in site ${args.options.webUrl}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the field ${args.options.id || args.options.title} from the view ${args.options.viewId || args.options.viewTitle} from list ${args.options.listId || args.options.listTitle} in site ${args.options.webUrl}?` }); if (result) { await removeFieldFromView(); diff --git a/src/m365/spo/commands/list/list-view-field-set.spec.ts b/src/m365/spo/commands/list/list-view-field-set.spec.ts index 92412ee7f95..a08ff64beac 100644 --- a/src/m365/spo/commands/list/list-view-field-set.spec.ts +++ b/src/m365/spo/commands/list/list-view-field-set.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -85,7 +85,7 @@ describe(commands.LIST_VIEW_FIELD_SET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/list/list-view-get.spec.ts b/src/m365/spo/commands/list/list-view-get.spec.ts index c5b3634c8f6..c934b63777e 100644 --- a/src/m365/spo/commands/list/list-view-get.spec.ts +++ b/src/m365/spo/commands/list/list-view-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,20 +15,18 @@ import command from './list-view-get.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.LIST_VIEW_GET, () => { - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/list/list-view-list.spec.ts b/src/m365/spo/commands/list/list-view-list.spec.ts index 409bd881f3a..2386cb223d1 100644 --- a/src/m365/spo/commands/list/list-view-list.spec.ts +++ b/src/m365/spo/commands/list/list-view-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -37,7 +37,7 @@ describe(commands.LIST_VIEW_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/list/list-view-remove.spec.ts b/src/m365/spo/commands/list/list-view-remove.spec.ts index 4a2a81cd5b8..f3f22d62802 100644 --- a/src/m365/spo/commands/list/list-view-remove.spec.ts +++ b/src/m365/spo/commands/list/list-view-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -33,7 +33,7 @@ describe(commands.LIST_VIEW_REMOVE, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -49,13 +49,13 @@ describe(commands.LIST_VIEW_REMOVE, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinon.stub(cli, 'promptForConfirmation').resolves(false); }); afterEach(() => { sinonUtil.restore([ request.post, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -93,8 +93,8 @@ describe(commands.LIST_VIEW_REMOVE, () => { }); it('prompts before removing the specified view from list by id and listTitle when force option not passed', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - const confirmationStub = sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + const confirmationStub = sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { @@ -108,8 +108,8 @@ describe(commands.LIST_VIEW_REMOVE, () => { }); it('prompts before removing the specified view from list by title and listId when force option not passed', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - const confirmationStub = sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + const confirmationStub = sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { @@ -123,8 +123,8 @@ describe(commands.LIST_VIEW_REMOVE, () => { }); it('prompts before removing the specified view from list by title and listUrl when force option not passed', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - const confirmationStub = sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + const confirmationStub = sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { @@ -161,8 +161,8 @@ describe(commands.LIST_VIEW_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -183,8 +183,8 @@ describe(commands.LIST_VIEW_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -206,8 +206,8 @@ describe(commands.LIST_VIEW_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -229,8 +229,8 @@ describe(commands.LIST_VIEW_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -251,8 +251,8 @@ describe(commands.LIST_VIEW_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -274,8 +274,8 @@ describe(commands.LIST_VIEW_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { diff --git a/src/m365/spo/commands/list/list-view-remove.ts b/src/m365/spo/commands/list/list-view-remove.ts index e39af2c24fb..fb700102ddc 100644 --- a/src/m365/spo/commands/list/list-view-remove.ts +++ b/src/m365/spo/commands/list/list-view-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -156,7 +156,7 @@ class SpoListViewRemoveCommand extends SpoCommand { await removeViewFromList(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the view ${args.options.id || args.options.title} from the list ${args.options.listId || args.options.listTitle || args.options.listUrl} in site ${args.options.webUrl}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the view ${args.options.id || args.options.title} from the list ${args.options.listId || args.options.listTitle || args.options.listUrl} in site ${args.options.webUrl}?` }); if (result) { await removeViewFromList(); diff --git a/src/m365/spo/commands/list/list-view-set.spec.ts b/src/m365/spo/commands/list/list-view-set.spec.ts index 22c6c554f1f..98833d8ed33 100644 --- a/src/m365/spo/commands/list/list-view-set.spec.ts +++ b/src/m365/spo/commands/list/list-view-set.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -41,7 +41,7 @@ describe(commands.LIST_VIEW_SET, () => { WebFullUrl: webUrl }); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/list/list-webhook-add.spec.ts b/src/m365/spo/commands/list/list-webhook-add.spec.ts index 2c1bac2286b..d703555acfd 100644 --- a/src/m365/spo/commands/list/list-webhook-add.spec.ts +++ b/src/m365/spo/commands/list/list-webhook-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -26,7 +26,7 @@ describe(commands.LIST_WEBHOOK_ADD, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/list/list-webhook-get.spec.ts b/src/m365/spo/commands/list/list-webhook-get.spec.ts index 424d191ca00..9a4eca55048 100644 --- a/src/m365/spo/commands/list/list-webhook-get.spec.ts +++ b/src/m365/spo/commands/list/list-webhook-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -24,20 +24,18 @@ describe(commands.LIST_WEBHOOK_GET, () => { "resource": "dfddade1-4729-428d-881e-7fedf3cae50d", "resourceData": null }; - let cli: Cli; let log: any[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/list/list-webhook-list.spec.ts b/src/m365/spo/commands/list/list-webhook-list.spec.ts index 61c263a87fa..c0a1568df9e 100644 --- a/src/m365/spo/commands/list/list-webhook-list.spec.ts +++ b/src/m365/spo/commands/list/list-webhook-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -47,7 +47,7 @@ describe(commands.LIST_WEBHOOK_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/list/list-webhook-remove.spec.ts b/src/m365/spo/commands/list/list-webhook-remove.spec.ts index 5af1374221b..a69fdd9682a 100644 --- a/src/m365/spo/commands/list/list-webhook-remove.spec.ts +++ b/src/m365/spo/commands/list/list-webhook-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -16,7 +16,6 @@ import command from './list-webhook-remove.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.LIST_WEBHOOK_REMOVE, () => { - let cli: Cli; let log: any[]; let logger: Logger; let commandInfo: CommandInfo; @@ -24,13 +23,12 @@ describe(commands.LIST_WEBHOOK_REMOVE, () => { let promptIssued: boolean = false; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -47,7 +45,7 @@ describe(commands.LIST_WEBHOOK_REMOVE, () => { } }; requests = []; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -57,7 +55,7 @@ describe(commands.LIST_WEBHOOK_REMOVE, () => { afterEach(() => { sinonUtil.restore([ request.delete, - Cli.promptForConfirmation, + cli.promptForConfirmation, cli.getSettingWithDefaultValue ]); }); @@ -94,8 +92,8 @@ describe(commands.LIST_WEBHOOK_REMOVE, () => { }); it('aborts removing list when prompt not confirmed', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { webUrl: 'https://contoso.sharepoint.com/sites/ninja', listTitle: 'Documents', id: 'cc27a922-8224-4296-90a5-ebbc54da2e81' } }); assert(requests.length === 0); }); @@ -115,8 +113,8 @@ describe(commands.LIST_WEBHOOK_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { debug: true, webUrl: 'https://contoso.sharepoint.com/sites/ninja', listTitle: 'Documents', id: 'cc27a922-8224-4296-90a5-ebbc54da2e81' } }); let correctRequestIssued = false; @@ -145,8 +143,8 @@ describe(commands.LIST_WEBHOOK_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { webUrl: 'https://contoso.sharepoint.com/sites/ninja', listTitle: 'Documents', id: 'cc27a922-8224-4296-90a5-ebbc54da2e81' } }); let correctRequestIssued = false; @@ -175,8 +173,8 @@ describe(commands.LIST_WEBHOOK_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { webUrl: 'https://contoso.sharepoint.com/sites/ninja', listId: 'dfddade1-4729-428d-881e-7fedf3cae50d', id: 'cc27a922-8224-4296-90a5-ebbc54da2e81' } }); let correctRequestIssued = false; @@ -205,8 +203,8 @@ describe(commands.LIST_WEBHOOK_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { debug: true, webUrl: 'https://contoso.sharepoint.com/sites/ninja', listId: 'dfddade1-4729-428d-881e-7fedf3cae50d', id: 'cc27a922-8224-4296-90a5-ebbc54da2e81' } }); let correctRequestIssued = false; @@ -289,8 +287,8 @@ describe(commands.LIST_WEBHOOK_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { webUrl: 'https://contoso.sharepoint.com/sites/ninja', listUrl: '/sites/ninja/lists/Documents', id: 'cc27a922-8224-4296-90a5-ebbc54da2e81' } }); let correctRequestIssued = false; @@ -319,8 +317,8 @@ describe(commands.LIST_WEBHOOK_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { debug: true, webUrl: 'https://contoso.sharepoint.com/sites/ninja', listUrl: '/sites/ninja/lists/Documents', id: 'cc27a922-8224-4296-90a5-ebbc54da2e81' } }); let correctRequestIssued = false; diff --git a/src/m365/spo/commands/list/list-webhook-remove.ts b/src/m365/spo/commands/list/list-webhook-remove.ts index 639b66c514c..e98e651d0f6 100644 --- a/src/m365/spo/commands/list/list-webhook-remove.ts +++ b/src/m365/spo/commands/list/list-webhook-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -143,7 +143,7 @@ class SpoListWebhookRemoveCommand extends SpoCommand { await removeWebhook(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove webhook ${args.options.id} from list ${args.options.listTitle || args.options.listId || args.options.listUrl} located at site ${args.options.webUrl}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove webhook ${args.options.id} from list ${args.options.listTitle || args.options.listId || args.options.listUrl} located at site ${args.options.webUrl}?` }); if (result) { await removeWebhook(); diff --git a/src/m365/spo/commands/list/list-webhook-set.spec.ts b/src/m365/spo/commands/list/list-webhook-set.spec.ts index 7237583f7a4..1a79b4127c6 100644 --- a/src/m365/spo/commands/list/list-webhook-set.spec.ts +++ b/src/m365/spo/commands/list/list-webhook-set.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -16,19 +16,17 @@ import command from './list-webhook-set.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.LIST_WEBHOOK_SET, () => { - let cli: Cli; let log: any[]; let logger: Logger; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/listitem/listitem-add.spec.ts b/src/m365/spo/commands/listitem/listitem-add.spec.ts index 67f9bf22fc7..51d5737efe5 100644 --- a/src/m365/spo/commands/listitem/listitem-add.spec.ts +++ b/src/m365/spo/commands/listitem/listitem-add.spec.ts @@ -3,7 +3,7 @@ import os from 'os'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -19,7 +19,6 @@ import command from './listitem-add.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.LISTITEM_ADD, () => { - let cli: Cli; let log: any[]; let logger: Logger; let commandInfo: CommandInfo; @@ -101,14 +100,13 @@ describe(commands.LISTITEM_ADD, () => { }; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').callsFake(() => Promise.resolve()); sinon.stub(telemetry, 'trackEvent').callsFake(() => { }); sinon.stub(pid, 'getProcessName').callsFake(() => ''); sinon.stub(session, 'getId').callsFake(() => ''); ensureFolderStub = sinon.stub(spo, 'ensureFolder').resolves(); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/listitem/listitem-attachment-add.spec.ts b/src/m365/spo/commands/listitem/listitem-attachment-add.spec.ts index 5a7d75fcd32..3a1f3a68a95 100644 --- a/src/m365/spo/commands/listitem/listitem-attachment-add.spec.ts +++ b/src/m365/spo/commands/listitem/listitem-attachment-add.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import { telemetry } from '../../../../telemetry.js'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -28,20 +28,18 @@ describe(commands.LISTITEM_ATTACHMENT_ADD, () => { const response = { 'FileName': 'CLIRocks.pdf', 'FileNameAsPath': { 'DecodedUrl': 'Testje.pdf' }, 'ServerRelativePath': { 'DecodedUrl': '/Lists/aaaaaa/Attachments/743/Testje.pdf' }, 'ServerRelativeUrl': '/Lists/aaaaaa/Attachments/743/Testje.pdf' }; - let cli: Cli; let log: any[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/listitem/listitem-attachment-get.spec.ts b/src/m365/spo/commands/listitem/listitem-attachment-get.spec.ts index 6870188a31c..5620007c408 100644 --- a/src/m365/spo/commands/listitem/listitem-attachment-get.spec.ts +++ b/src/m365/spo/commands/listitem/listitem-attachment-get.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import { telemetry } from '../../../../telemetry.js'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -24,7 +24,6 @@ describe(commands.LISTITEM_ATTACHMENT_GET, () => { const fileName = 'File1.jpg'; const listServerRelativeUrl: string = urlUtil.getServerRelativePath(webUrl, listUrl); - let cli: Cli; let log: any[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; @@ -54,13 +53,12 @@ describe(commands.LISTITEM_ATTACHMENT_GET, () => { }; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/listitem/listitem-attachment-list.spec.ts b/src/m365/spo/commands/listitem/listitem-attachment-list.spec.ts index 0f4a278d1af..a07af77ca11 100644 --- a/src/m365/spo/commands/listitem/listitem-attachment-list.spec.ts +++ b/src/m365/spo/commands/listitem/listitem-attachment-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -21,7 +21,6 @@ describe(commands.LISTITEM_ATTACHMENT_LIST, () => { const webUrl = 'https://contoso.sharepoint.com/sites/project-x'; const listServerRelativeUrl: string = urlUtil.getServerRelativePath(webUrl, listUrl); - let cli: Cli; let log: any[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; @@ -54,13 +53,12 @@ describe(commands.LISTITEM_ATTACHMENT_LIST, () => { }; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').callsFake(() => Promise.resolve()); sinon.stub(telemetry, 'trackEvent').callsFake(() => { }); sinon.stub(pid, 'getProcessName').callsFake(() => ''); sinon.stub(session, 'getId').callsFake(() => ''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/listitem/listitem-attachment-remove.spec.ts b/src/m365/spo/commands/listitem/listitem-attachment-remove.spec.ts index 352bf344344..f92074c6b62 100644 --- a/src/m365/spo/commands/listitem/listitem-attachment-remove.spec.ts +++ b/src/m365/spo/commands/listitem/listitem-attachment-remove.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import { telemetry } from '../../../../telemetry.js'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -21,7 +21,6 @@ describe(commands.LISTITEM_ATTACHMENT_REMOVE, () => { const listItemId = 147; const fileName = 'File1.jpg'; - let cli: Cli; let log: any[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; @@ -29,13 +28,12 @@ describe(commands.LISTITEM_ATTACHMENT_REMOVE, () => { let promptIssued: boolean; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -52,7 +50,7 @@ describe(commands.LISTITEM_ATTACHMENT_REMOVE, () => { } }; loggerLogSpy = sinon.spy(logger, 'log'); - sinon.stub(Cli, 'promptForConfirmation').callsFake(async () => { + sinon.stub(cli, 'promptForConfirmation').callsFake(async () => { promptIssued = true; return false; }); @@ -65,7 +63,7 @@ describe(commands.LISTITEM_ATTACHMENT_REMOVE, () => { afterEach(() => { sinonUtil.restore([ request.post, - Cli.promptForConfirmation, + cli.promptForConfirmation, cli.getSettingWithDefaultValue ]); }); @@ -146,8 +144,8 @@ describe(commands.LISTITEM_ATTACHMENT_REMOVE, () => { }); it('aborts removing attachment from list item when prompt not confirmed', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { webUrl: webUrl, @@ -171,8 +169,8 @@ describe(commands.LISTITEM_ATTACHMENT_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -200,8 +198,8 @@ describe(commands.LISTITEM_ATTACHMENT_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -229,8 +227,8 @@ describe(commands.LISTITEM_ATTACHMENT_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { diff --git a/src/m365/spo/commands/listitem/listitem-attachment-remove.ts b/src/m365/spo/commands/listitem/listitem-attachment-remove.ts index 4d0c46f9340..e646c58e002 100644 --- a/src/m365/spo/commands/listitem/listitem-attachment-remove.ts +++ b/src/m365/spo/commands/listitem/listitem-attachment-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -144,7 +144,7 @@ class SpoListItemAttachmentRemoveCommand extends SpoCommand { await removeListItemAttachment(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the attachment ${args.options.fileName} of item with id ${args.options.listItemId} from the list ${args.options.listId ? args.options.listId : args.options.listTitle ? args.options.listTitle : args.options.listUrl} in site ${args.options.webUrl}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the attachment ${args.options.fileName} of item with id ${args.options.listItemId} from the list ${args.options.listId ? args.options.listId : args.options.listTitle ? args.options.listTitle : args.options.listUrl} in site ${args.options.webUrl}?` }); if (result) { await removeListItemAttachment(); diff --git a/src/m365/spo/commands/listitem/listitem-attachment-set.spec.ts b/src/m365/spo/commands/listitem/listitem-attachment-set.spec.ts index 517496a46a5..785afcb7662 100644 --- a/src/m365/spo/commands/listitem/listitem-attachment-set.spec.ts +++ b/src/m365/spo/commands/listitem/listitem-attachment-set.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import { telemetry } from '../../../../telemetry.js'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -26,19 +26,17 @@ describe(commands.LISTITEM_ATTACHMENT_SET, () => { const filePath = 'C:\\Temp\\Test.pdf'; const fileName = 'CLIRocks.pdf'; - let cli: Cli; let log: any[]; let logger: Logger; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/listitem/listitem-batch-add.spec.ts b/src/m365/spo/commands/listitem/listitem-batch-add.spec.ts index 530668ee5a3..252a179497a 100644 --- a/src/m365/spo/commands/listitem/listitem-batch-add.spec.ts +++ b/src/m365/spo/commands/listitem/listitem-batch-add.spec.ts @@ -4,7 +4,7 @@ import os from 'os'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -41,7 +41,7 @@ describe(commands.LISTITEM_BATCH_ADD, () => { sinon.stub(pid, 'getProcessName').callsFake(() => ''); sinon.stub(session, 'getId').callsFake(() => ''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/listitem/listitem-batch-set.spec.ts b/src/m365/spo/commands/listitem/listitem-batch-set.spec.ts index da66df64f99..2af43a0bdab 100644 --- a/src/m365/spo/commands/listitem/listitem-batch-set.spec.ts +++ b/src/m365/spo/commands/listitem/listitem-batch-set.spec.ts @@ -3,7 +3,7 @@ import fs from 'fs'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -48,7 +48,7 @@ describe(commands.LISTITEM_BATCH_SET, () => { sinon.stub(telemetry, 'trackEvent').callsFake(() => { }); sinon.stub(pid, 'getProcessName').callsFake(() => ''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/listitem/listitem-get.spec.ts b/src/m365/spo/commands/listitem/listitem-get.spec.ts index 4b45baf1da3..ca9573d04da 100644 --- a/src/m365/spo/commands/listitem/listitem-get.spec.ts +++ b/src/m365/spo/commands/listitem/listitem-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -22,7 +22,6 @@ describe(commands.LISTITEM_GET, () => { const listTitle = 'Demo List'; const listServerRelativeUrl: string = urlUtil.getServerRelativePath(webUrl, listUrl); - let cli: Cli; let log: any[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; @@ -125,13 +124,12 @@ describe(commands.LISTITEM_GET, () => { }; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').callsFake(() => Promise.resolve()); sinon.stub(telemetry, 'trackEvent').callsFake(() => { }); sinon.stub(pid, 'getProcessName').callsFake(() => ''); sinon.stub(session, 'getId').callsFake(() => ''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/listitem/listitem-isrecord.spec.ts b/src/m365/spo/commands/listitem/listitem-isrecord.spec.ts index 73b82a18bf8..3c3f80ca96b 100644 --- a/src/m365/spo/commands/listitem/listitem-isrecord.spec.ts +++ b/src/m365/spo/commands/listitem/listitem-isrecord.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -23,7 +23,6 @@ describe(commands.LISTITEM_ISRECORD, () => { const listServerRelativeUrl: string = urlUtil.getServerRelativePath(webUrl, listUrl); const listIdResponse = { Id: '81f0ecee-75a8-46f0-b384-c8f4f9f31d99' }; - let cli: Cli; let log: any[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; @@ -97,7 +96,6 @@ describe(commands.LISTITEM_ISRECORD, () => { }; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').callsFake(() => Promise.resolve()); sinon.stub(telemetry, 'trackEvent').callsFake(() => { }); sinon.stub(pid, 'getProcessName').callsFake(() => ''); @@ -109,7 +107,7 @@ describe(commands.LISTITEM_ISRECORD, () => { WebFullUrl: 'https://contoso.sharepoint.com' })); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/listitem/listitem-list.spec.ts b/src/m365/spo/commands/listitem/listitem-list.spec.ts index f0456abeed8..dbd2e21fd6f 100644 --- a/src/m365/spo/commands/listitem/listitem-list.spec.ts +++ b/src/m365/spo/commands/listitem/listitem-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -98,7 +98,7 @@ describe(commands.LISTITEM_LIST, () => { WebFullUrl: 'https://contoso.sharepoint.com' })); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/listitem/listitem-list.ts b/src/m365/spo/commands/listitem/listitem-list.ts index 00ca98efa4a..662fe4c3ea3 100644 --- a/src/m365/spo/commands/listitem/listitem-list.ts +++ b/src/m365/spo/commands/listitem/listitem-list.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -186,7 +186,7 @@ class SpoListItemListCommand extends SpoCommand { const queryParams = []; const fieldsArray: string[] = options.fields ? options.fields.split(",") - : (!options.output || Cli.shouldTrimOutput(options.output)) ? ["Title", "Id"] : []; + : (!options.output || cli.shouldTrimOutput(options.output)) ? ["Title", "Id"] : []; const expandFieldsArray: string[] = this.getExpandFieldsArray(fieldsArray); const skipTokenId = await this.getLastItemIdForPage(logger, options, listApiUrl); diff --git a/src/m365/spo/commands/listitem/listitem-record-declare.spec.ts b/src/m365/spo/commands/listitem/listitem-record-declare.spec.ts index fb807f9e559..a07b3e57cba 100644 --- a/src/m365/spo/commands/listitem/listitem-record-declare.spec.ts +++ b/src/m365/spo/commands/listitem/listitem-record-declare.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -18,7 +18,6 @@ import command from './listitem-record-declare.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.LISTITEM_RECORD_DECLARE, () => { - let cli: Cli; let log: any[]; let logger: Logger; let commandInfo: CommandInfo; @@ -99,7 +98,6 @@ describe(commands.LISTITEM_RECORD_DECLARE, () => { }; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').callsFake(() => Promise.resolve()); sinon.stub(telemetry, 'trackEvent').callsFake(() => { }); sinon.stub(pid, 'getProcessName').callsFake(() => ''); @@ -111,7 +109,7 @@ describe(commands.LISTITEM_RECORD_DECLARE, () => { WebFullUrl: 'https://contoso.sharepoint.com' })); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/listitem/listitem-record-lock.spec.ts b/src/m365/spo/commands/listitem/listitem-record-lock.spec.ts index 9130aae0530..70e2fab81ac 100644 --- a/src/m365/spo/commands/listitem/listitem-record-lock.spec.ts +++ b/src/m365/spo/commands/listitem/listitem-record-lock.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -15,7 +15,6 @@ import commands from '../../commands.js'; import command from './listitem-record-lock.js'; describe(commands.LISTITEM_RECORD_LOCK, () => { - let cli: Cli; let log: any[]; let logger: Logger; let commandInfo: CommandInfo; @@ -39,13 +38,12 @@ describe(commands.LISTITEM_RECORD_LOCK, () => { }; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').callsFake(() => Promise.resolve()); sinon.stub(telemetry, 'trackEvent').callsFake(() => { }); sinon.stub(pid, 'getProcessName').callsFake(() => ''); sinon.stub(session, 'getId').callsFake(() => ''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/listitem/listitem-record-undeclare.spec.ts b/src/m365/spo/commands/listitem/listitem-record-undeclare.spec.ts index 05ea64db68b..04c941abcd7 100644 --- a/src/m365/spo/commands/listitem/listitem-record-undeclare.spec.ts +++ b/src/m365/spo/commands/listitem/listitem-record-undeclare.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -22,7 +22,6 @@ describe(commands.LISTITEM_RECORD_UNDECLARE, () => { const listUrl = '/sites/project-x/lists/TestList'; const listServerRelativeUrl: string = urlUtil.getServerRelativePath(webUrl, listUrl); - let cli: Cli; let log: any[]; let logger: Logger; let commandInfo: CommandInfo; @@ -73,7 +72,6 @@ describe(commands.LISTITEM_RECORD_UNDECLARE, () => { }; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').callsFake(() => Promise.resolve()); sinon.stub(telemetry, 'trackEvent').callsFake(() => { }); sinon.stub(pid, 'getProcessName').callsFake(() => ''); @@ -85,7 +83,7 @@ describe(commands.LISTITEM_RECORD_UNDECLARE, () => { WebFullUrl: 'https://contoso.sharepoint.com' })); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/listitem/listitem-record-unlock.spec.ts b/src/m365/spo/commands/listitem/listitem-record-unlock.spec.ts index bcbbfc8ae94..2d41b70e5c7 100644 --- a/src/m365/spo/commands/listitem/listitem-record-unlock.spec.ts +++ b/src/m365/spo/commands/listitem/listitem-record-unlock.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,7 +15,6 @@ import command from './listitem-record-unlock.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.LISTITEM_RECORD_UNLOCK, () => { - let cli: Cli; let log: any[]; let logger: Logger; let commandInfo: CommandInfo; @@ -39,13 +38,12 @@ describe(commands.LISTITEM_RECORD_UNLOCK, () => { }; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').callsFake(() => Promise.resolve()); sinon.stub(telemetry, 'trackEvent').callsFake(() => { }); sinon.stub(pid, 'getProcessName').callsFake(() => ''); sinon.stub(session, 'getId').callsFake(() => ''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/listitem/listitem-remove.spec.ts b/src/m365/spo/commands/listitem/listitem-remove.spec.ts index c0499c2f785..50dc8520615 100644 --- a/src/m365/spo/commands/listitem/listitem-remove.spec.ts +++ b/src/m365/spo/commands/listitem/listitem-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -17,7 +17,6 @@ import command from './listitem-remove.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.LISTITEM_REMOVE, () => { - let cli: Cli; const webUrl = 'https://contoso.sharepoint.com/sites/project-x'; const listUrl = 'sites/project-x/documents'; const listServerRelativeUrl: string = urlUtil.getServerRelativePath(webUrl, listUrl); @@ -29,13 +28,12 @@ describe(commands.LISTITEM_REMOVE, () => { let promptIssued: boolean = false; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').callsFake(() => Promise.resolve()); sinon.stub(telemetry, 'trackEvent').callsFake(() => { }); sinon.stub(pid, 'getProcessName').callsFake(() => ''); sinon.stub(session, 'getId').callsFake(() => ''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -52,7 +50,7 @@ describe(commands.LISTITEM_REMOVE, () => { } }; requests = []; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -62,7 +60,7 @@ describe(commands.LISTITEM_REMOVE, () => { afterEach(() => { sinonUtil.restore([ request.post, - Cli.promptForConfirmation, + cli.promptForConfirmation, cli.getSettingWithDefaultValue ]); }); @@ -93,8 +91,8 @@ describe(commands.LISTITEM_REMOVE, () => { }); it('aborts removing list item when prompt not confirmed', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { listTitle: 'My list', webUrl: 'https://contoso.sharepoint.com', id: 1 } }); assert(requests.length === 0); }); @@ -114,8 +112,8 @@ describe(commands.LISTITEM_REMOVE, () => { return Promise.reject('Invalid request'); }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { listId: 'b2307a39-e878-458b-bc90-03bc578531d6', webUrl: 'https://contoso.sharepoint.com', id: 1 } }); let correctRequestIssued = false; requests.forEach(r => { @@ -141,8 +139,8 @@ describe(commands.LISTITEM_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { verbose: true, listUrl: listUrl, webUrl: webUrl, id: 1 } }); let correctRequestIssued = false; requests.forEach(r => { @@ -171,8 +169,8 @@ describe(commands.LISTITEM_REMOVE, () => { return Promise.reject('Invalid request'); }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { listId: 'b2307a39-e878-458b-bc90-03bc578531d6', webUrl: 'https://contoso.sharepoint.com', id: 1, recycle: true } }); let correctRequestIssued = false; requests.forEach(r => { diff --git a/src/m365/spo/commands/listitem/listitem-remove.ts b/src/m365/spo/commands/listitem/listitem-remove.ts index 200b8c66001..131eb8dc910 100644 --- a/src/m365/spo/commands/listitem/listitem-remove.ts +++ b/src/m365/spo/commands/listitem/listitem-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -154,7 +154,7 @@ class SpoListItemRemoveCommand extends SpoCommand { await removeListItem(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to ${args.options.recycle ? "recycle" : "remove"} the list item ${args.options.id} from list ${args.options.listId || args.options.listTitle || args.options.listUrl} located in site ${args.options.webUrl}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to ${args.options.recycle ? "recycle" : "remove"} the list item ${args.options.id} from list ${args.options.listId || args.options.listTitle || args.options.listUrl} located in site ${args.options.webUrl}?` }); if (result) { await removeListItem(); diff --git a/src/m365/spo/commands/listitem/listitem-retentionlabel-ensure.spec.ts b/src/m365/spo/commands/listitem/listitem-retentionlabel-ensure.spec.ts index 65979c72df1..0016641255a 100644 --- a/src/m365/spo/commands/listitem/listitem-retentionlabel-ensure.spec.ts +++ b/src/m365/spo/commands/listitem/listitem-retentionlabel-ensure.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -66,20 +66,18 @@ describe(commands.LISTITEM_RETENTIONLABEL_ENSURE, () => { const labelName = 'Some label'; const labelId = 'def61080-111c-4aea-b72f-5b60e516e36c'; - let cli: Cli; let log: any[]; let logger: Logger; let commandInfo: CommandInfo; let loggerLogStderrSpy: sinon.SinonSpy; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').callsFake(() => Promise.resolve()); sinon.stub(telemetry, 'trackEvent').callsFake(() => { }); sinon.stub(pid, 'getProcessName').callsFake(() => ''); sinon.stub(session, 'getId').callsFake(() => ''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/listitem/listitem-retentionlabel-remove.spec.ts b/src/m365/spo/commands/listitem/listitem-retentionlabel-remove.spec.ts index 90eadcb33f6..2860bd0bd5d 100644 --- a/src/m365/spo/commands/listitem/listitem-retentionlabel-remove.spec.ts +++ b/src/m365/spo/commands/listitem/listitem-retentionlabel-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -30,7 +30,6 @@ describe(commands.LISTITEM_RETENTIONLABEL_REMOVE, () => { const listTitle = 'test'; const listId = 'b2307a39-e878-458b-bc90-03bc578531d6'; - let cli: Cli; let log: any[]; let logger: Logger; let loggerLogToStderrSpy: sinon.SinonSpy; @@ -38,13 +37,12 @@ describe(commands.LISTITEM_RETENTIONLABEL_REMOVE, () => { let promptIssued: boolean = false; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').callsFake(() => Promise.resolve()); sinon.stub(telemetry, 'trackEvent').callsFake(() => { }); sinon.stub(pid, 'getProcessName').callsFake(() => ''); sinon.stub(session, 'getId').callsFake(() => ''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -61,7 +59,7 @@ describe(commands.LISTITEM_RETENTIONLABEL_REMOVE, () => { } }; loggerLogToStderrSpy = sinon.spy(logger, 'logToStderr'); - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -72,7 +70,7 @@ describe(commands.LISTITEM_RETENTIONLABEL_REMOVE, () => { sinonUtil.restore([ request.post, request.get, - Cli.promptForConfirmation, + cli.promptForConfirmation, cli.getSettingWithDefaultValue ]); }); @@ -97,8 +95,8 @@ describe(commands.LISTITEM_RETENTIONLABEL_REMOVE, () => { }); it('aborts removing list item when prompt not confirmed', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { listTitle: listTitle, @@ -110,8 +108,8 @@ describe(commands.LISTITEM_RETENTIONLABEL_REMOVE, () => { }); it('removes the retentionlabel based on listId when prompt confirmed', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); sinon.stub(request, 'get').callsFake(async (opts) => { if (opts.url === `https://contoso.sharepoint.com/sites/project-x/_api/web/lists(guid'${listId}')?$expand=RootFolder&$select=RootFolder/ServerRelativeUrl`) { return listDetailsMock; @@ -139,8 +137,8 @@ describe(commands.LISTITEM_RETENTIONLABEL_REMOVE, () => { }); it('removes the retentionlabel based on listTitle when prompt confirmed', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); sinon.stub(request, 'get').callsFake(async (opts) => { if (opts.url === `https://contoso.sharepoint.com/sites/project-x/_api/web/lists/getByTitle('${formatting.encodeQueryParameter(listTitle)}')?$expand=RootFolder&$select=RootFolder/ServerRelativeUrl`) { return listDetailsMock; @@ -189,8 +187,8 @@ describe(commands.LISTITEM_RETENTIONLABEL_REMOVE, () => { }); it('removes the retentionlabel based on listUrl when prompt confirmed (debug)', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); sinon.stub(request, 'post').callsFake(async (opts) => { if (opts.url === `https://contoso.sharepoint.com/sites/project-x/_api/SP_CompliancePolicy_SPPolicyStoreProxy_SetComplianceTagOnBulkItems` diff --git a/src/m365/spo/commands/listitem/listitem-retentionlabel-remove.ts b/src/m365/spo/commands/listitem/listitem-retentionlabel-remove.ts index dbecdcb8c2b..e29d97e73ac 100644 --- a/src/m365/spo/commands/listitem/listitem-retentionlabel-remove.ts +++ b/src/m365/spo/commands/listitem/listitem-retentionlabel-remove.ts @@ -1,5 +1,5 @@ import * as url from 'url'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -107,7 +107,7 @@ class SpoListItemRetentionLabelRemoveCommand extends SpoCommand { await this.removeListItemRetentionLabel(logger, args); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the retentionlabel from list item ${args.options.listItemId} from list '${args.options.listId || args.options.listTitle || args.options.listUrl}' located in site ${args.options.webUrl}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the retentionlabel from list item ${args.options.listItemId} from list '${args.options.listId || args.options.listTitle || args.options.listUrl}' located in site ${args.options.webUrl}?` }); if (result) { await this.removeListItemRetentionLabel(logger, args); diff --git a/src/m365/spo/commands/listitem/listitem-roleassignment-add.spec.ts b/src/m365/spo/commands/listitem/listitem-roleassignment-add.spec.ts index 50c15eb22c7..283f0c57319 100644 --- a/src/m365/spo/commands/listitem/listitem-roleassignment-add.spec.ts +++ b/src/m365/spo/commands/listitem/listitem-roleassignment-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -18,19 +18,17 @@ import command from './listitem-roleassignment-add.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.LISTITEM_ROLEASSIGNMENT_ADD, () => { - let cli: Cli; let log: any[]; let logger: Logger; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -51,7 +49,7 @@ describe(commands.LISTITEM_ROLEASSIGNMENT_ADD, () => { afterEach(() => { sinonUtil.restore([ request.post, - Cli.executeCommandWithOutput, + cli.executeCommandWithOutput, cli.getSettingWithDefaultValue ]); }); @@ -249,7 +247,7 @@ describe(commands.LISTITEM_ROLEASSIGNMENT_ADD, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoUserGetCommand) { return { stdout: '{"Id": 11,"IsHiddenInUI": false,"LoginName": "i:0#.f|membership|someaccount@tenant.onmicrosoft.com","Title": "Some Account","PrincipalType": 1,"Email": "someaccount@tenant.onmicrosoft.com","Expiration": "","IsEmailAuthenticationGuestUser": false,"IsShareByEmailGuestUser": false,"IsSiteAdmin": true,"UserId": {"NameId": "1003200097d06dd6","NameIdIssuer": "urn:federation:microsoftonline"},"UserPrincipalName": "someaccount@tenant.onmicrosoft.com"}' @@ -281,7 +279,7 @@ describe(commands.LISTITEM_ROLEASSIGNMENT_ADD, () => { }); const error = 'no user found'; - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoUserGetCommand) { throw error; } @@ -310,7 +308,7 @@ describe(commands.LISTITEM_ROLEASSIGNMENT_ADD, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoGroupGetCommand) { return { stdout: '{"Id": 11,"IsHiddenInUI": false,"LoginName": "otherGroup","Title": "otherGroup","PrincipalType": 8,"AllowMembersEditMembership": false,"AllowRequestToJoinLeave": false,"AutoAcceptRequestToJoinLeave": false,"Description": "","OnlyAllowMembersViewMembership": true,"OwnerTitle": "Some Account","RequestToJoinLeaveEmailSetting": null}' @@ -342,7 +340,7 @@ describe(commands.LISTITEM_ROLEASSIGNMENT_ADD, () => { }); const error = 'no group found'; - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoGroupGetCommand) { throw error; } @@ -371,7 +369,7 @@ describe(commands.LISTITEM_ROLEASSIGNMENT_ADD, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoRoleDefinitionListCommand) { return { stdout: '[{"BasePermissions": {"High": "2147483647","Low": "4294967295"},"Description": "Has full control.","Hidden": false,"Id": 1073741827,"Name": "Full Control","Order": 1,"RoleTypeKind": 5}]' @@ -403,7 +401,7 @@ describe(commands.LISTITEM_ROLEASSIGNMENT_ADD, () => { }); const error = 'no role definition found'; - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoRoleDefinitionListCommand) { throw error; } diff --git a/src/m365/spo/commands/listitem/listitem-roleassignment-add.ts b/src/m365/spo/commands/listitem/listitem-roleassignment-add.ts index 72b658ff2a7..db806953b60 100644 --- a/src/m365/spo/commands/listitem/listitem-roleassignment-add.ts +++ b/src/m365/spo/commands/listitem/listitem-roleassignment-add.ts @@ -1,4 +1,4 @@ -import { Cli, CommandOutput } from '../../../../cli/Cli.js'; +import { cli, CommandOutput } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import Command from '../../../../Command.js'; import GlobalOptions from '../../../../GlobalOptions.js'; @@ -219,7 +219,7 @@ class SpoListItemRoleAssignmentAddCommand extends SpoCommand { verbose: this.verbose }; - const output: CommandOutput = await Cli.executeCommandWithOutput(spoRoleDefinitionListCommand as Command, { options: { ...roleDefinitionListCommandOptions, _: [] } }); + const output: CommandOutput = await cli.executeCommandWithOutput(spoRoleDefinitionListCommand as Command, { options: { ...roleDefinitionListCommandOptions, _: [] } }); const getRoleDefinitionListOutput = JSON.parse(output.stdout); const roleDefinitionId: number = getRoleDefinitionListOutput.find((role: RoleDefinition) => role.Name === options.roleDefinitionName).Id; return roleDefinitionId; @@ -234,7 +234,7 @@ class SpoListItemRoleAssignmentAddCommand extends SpoCommand { verbose: this.verbose }; - const output: CommandOutput = await Cli.executeCommandWithOutput(spoGroupGetCommand as Command, { options: { ...groupGetCommandOptions, _: [] } }); + const output: CommandOutput = await cli.executeCommandWithOutput(spoGroupGetCommand as Command, { options: { ...groupGetCommandOptions, _: [] } }); const getGroupOutput = JSON.parse(output.stdout); return getGroupOutput.Id; } @@ -249,7 +249,7 @@ class SpoListItemRoleAssignmentAddCommand extends SpoCommand { verbose: this.verbose }; - const output: CommandOutput = await Cli.executeCommandWithOutput(spoUserGetCommand as Command, { options: { ...userGetCommandOptions, _: [] } }); + const output: CommandOutput = await cli.executeCommandWithOutput(spoUserGetCommand as Command, { options: { ...userGetCommandOptions, _: [] } }); const getUserOutput = JSON.parse(output.stdout); return getUserOutput.Id; } diff --git a/src/m365/spo/commands/listitem/listitem-roleassignment-remove.spec.ts b/src/m365/spo/commands/listitem/listitem-roleassignment-remove.spec.ts index ebd34335e45..bf389470186 100644 --- a/src/m365/spo/commands/listitem/listitem-roleassignment-remove.spec.ts +++ b/src/m365/spo/commands/listitem/listitem-roleassignment-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -28,7 +28,7 @@ describe(commands.LISTITEM_ROLEASSIGNMENT_REMOVE, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -45,7 +45,7 @@ describe(commands.LISTITEM_ROLEASSIGNMENT_REMOVE, () => { } }; requests = []; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -56,8 +56,8 @@ describe(commands.LISTITEM_ROLEASSIGNMENT_REMOVE, () => { afterEach(() => { sinonUtil.restore([ request.post, - Cli.executeCommandWithOutput, - Cli.promptForConfirmation + cli.executeCommandWithOutput, + cli.promptForConfirmation ]); }); @@ -186,7 +186,7 @@ describe(commands.LISTITEM_ROLEASSIGNMENT_REMOVE, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoUserGetCommand) { return { stdout: '{"Id": 11,"IsHiddenInUI": false,"LoginName": "i:0#.f|membership|someaccount@tenant.onmicrosoft.com","Title": "Some Account","PrincipalType": 1,"Email": "someaccount@tenant.onmicrosoft.com","Expiration": "","IsEmailAuthenticationGuestUser": false,"IsShareByEmailGuestUser": false,"IsSiteAdmin": true,"UserId": {"NameId": "1003200097d06dd6","NameIdIssuer": "urn:federation:microsoftonline"},"UserPrincipalName": "someaccount@tenant.onmicrosoft.com"}' @@ -218,7 +218,7 @@ describe(commands.LISTITEM_ROLEASSIGNMENT_REMOVE, () => { }); const error = 'no user found'; - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoUserGetCommand) { throw error; } @@ -247,7 +247,7 @@ describe(commands.LISTITEM_ROLEASSIGNMENT_REMOVE, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoGroupGetCommand) { return { stdout: '{"Id": 11,"IsHiddenInUI": false,"LoginName": "otherGroup","Title": "otherGroup","PrincipalType": 8,"AllowMembersEditMembership": false,"AllowRequestToJoinLeave": false,"AutoAcceptRequestToJoinLeave": false,"Description": "","OnlyAllowMembersViewMembership": true,"OwnerTitle": "Some Account","RequestToJoinLeaveEmailSetting": null}' @@ -279,7 +279,7 @@ describe(commands.LISTITEM_ROLEASSIGNMENT_REMOVE, () => { }); const error = 'no group found'; - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoGroupGetCommand) { throw error; } @@ -349,7 +349,7 @@ describe(commands.LISTITEM_ROLEASSIGNMENT_REMOVE, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoGroupGetCommand) { return { stdout: '{"Id": 11,"IsHiddenInUI": false,"LoginName": "otherGroup","Title": "otherGroup","PrincipalType": 8,"AllowMembersEditMembership": false,"AllowRequestToJoinLeave": false,"AutoAcceptRequestToJoinLeave": false,"Description": "","OnlyAllowMembersViewMembership": true,"OwnerTitle": "Some Account","RequestToJoinLeaveEmailSetting": null}' @@ -359,8 +359,8 @@ describe(commands.LISTITEM_ROLEASSIGNMENT_REMOVE, () => { throw new CommandError('Unknown case'); }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { debug: true, diff --git a/src/m365/spo/commands/listitem/listitem-roleassignment-remove.ts b/src/m365/spo/commands/listitem/listitem-roleassignment-remove.ts index d3f902bf257..326f832220a 100644 --- a/src/m365/spo/commands/listitem/listitem-roleassignment-remove.ts +++ b/src/m365/spo/commands/listitem/listitem-roleassignment-remove.ts @@ -1,4 +1,4 @@ -import { Cli, CommandOutput } from '../../../../cli/Cli.js'; +import { cli, CommandOutput } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import Command from '../../../../Command.js'; import GlobalOptions from '../../../../GlobalOptions.js'; @@ -128,7 +128,7 @@ class SpoListItemRoleAssignmentRemoveCommand extends SpoCommand { await this.removeRoleAssignment(logger, args.options); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove role assignment from listitem ${args.options.listItemId} from list ${args.options.listId || args.options.listTitle} from site ${args.options.webUrl}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove role assignment from listitem ${args.options.listItemId} from list ${args.options.listId || args.options.listTitle} from site ${args.options.webUrl}?` }); if (result) { await this.removeRoleAssignment(logger, args.options); @@ -196,7 +196,7 @@ class SpoListItemRoleAssignmentRemoveCommand extends SpoCommand { verbose: this.verbose }; - const output: CommandOutput = await Cli.executeCommandWithOutput(spoGroupGetCommand as Command, { options: { ...groupGetCommandOptions, _: [] } }); + const output: CommandOutput = await cli.executeCommandWithOutput(spoGroupGetCommand as Command, { options: { ...groupGetCommandOptions, _: [] } }); const getGroupOutput = JSON.parse(output.stdout); return getGroupOutput.Id; @@ -212,7 +212,7 @@ class SpoListItemRoleAssignmentRemoveCommand extends SpoCommand { verbose: this.verbose }; - const output: CommandOutput = await Cli.executeCommandWithOutput(spoUserGetCommand as Command, { options: { ...userGetCommandOptions, _: [] } }); + const output: CommandOutput = await cli.executeCommandWithOutput(spoUserGetCommand as Command, { options: { ...userGetCommandOptions, _: [] } }); const getUserOutput = JSON.parse(output.stdout); return getUserOutput.Id; } diff --git a/src/m365/spo/commands/listitem/listitem-roleinheritance-break.spec.ts b/src/m365/spo/commands/listitem/listitem-roleinheritance-break.spec.ts index 42a5a4d5a1b..2b80c2d3f47 100644 --- a/src/m365/spo/commands/listitem/listitem-roleinheritance-break.spec.ts +++ b/src/m365/spo/commands/listitem/listitem-roleinheritance-break.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -27,7 +27,7 @@ describe(commands.LISTITEM_ROLEINHERITANCE_BREAK, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -43,7 +43,7 @@ describe(commands.LISTITEM_ROLEINHERITANCE_BREAK, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -54,7 +54,7 @@ describe(commands.LISTITEM_ROLEINHERITANCE_BREAK, () => { afterEach(() => { sinonUtil.restore([ request.post, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -240,8 +240,8 @@ describe(commands.LISTITEM_ROLEINHERITANCE_BREAK, () => { it('aborts breaking role inheritance when prompt not confirmed', async () => { const postSpy = sinon.spy(request, 'post'); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { debug: true, @@ -314,8 +314,8 @@ describe(commands.LISTITEM_ROLEINHERITANCE_BREAK, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { debug: true, diff --git a/src/m365/spo/commands/listitem/listitem-roleinheritance-break.ts b/src/m365/spo/commands/listitem/listitem-roleinheritance-break.ts index 9fe3031f34a..feb8bfb8201 100644 --- a/src/m365/spo/commands/listitem/listitem-roleinheritance-break.ts +++ b/src/m365/spo/commands/listitem/listitem-roleinheritance-break.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -112,7 +112,7 @@ class SpoListItemRoleInheritanceBreakCommand extends SpoCommand { await this.breakListItemRoleInheritance(args.options); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to break the role inheritance of ${args.options.listItemId} in list ${args.options.listId ?? args.options.listTitle}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to break the role inheritance of ${args.options.listItemId} in list ${args.options.listId ?? args.options.listTitle}?` }); if (result) { await this.breakListItemRoleInheritance(args.options); diff --git a/src/m365/spo/commands/listitem/listitem-roleinheritance-reset.spec.ts b/src/m365/spo/commands/listitem/listitem-roleinheritance-reset.spec.ts index 53fc784bd8f..f0b4a6096d8 100644 --- a/src/m365/spo/commands/listitem/listitem-roleinheritance-reset.spec.ts +++ b/src/m365/spo/commands/listitem/listitem-roleinheritance-reset.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -27,7 +27,7 @@ describe(commands.LISTITEM_ROLEINHERITANCE_RESET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -43,7 +43,7 @@ describe(commands.LISTITEM_ROLEINHERITANCE_RESET, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -54,7 +54,7 @@ describe(commands.LISTITEM_ROLEINHERITANCE_RESET, () => { afterEach(() => { sinonUtil.restore([ request.post, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -224,8 +224,8 @@ describe(commands.LISTITEM_ROLEINHERITANCE_RESET, () => { it('aborts resetting role inheritance when prompt not confirmed', async () => { const postSpy = sinon.spy(request, 'post'); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { debug: true, @@ -274,8 +274,8 @@ describe(commands.LISTITEM_ROLEINHERITANCE_RESET, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { debug: true, diff --git a/src/m365/spo/commands/listitem/listitem-roleinheritance-reset.ts b/src/m365/spo/commands/listitem/listitem-roleinheritance-reset.ts index e7f6327d803..5765fb6168c 100644 --- a/src/m365/spo/commands/listitem/listitem-roleinheritance-reset.ts +++ b/src/m365/spo/commands/listitem/listitem-roleinheritance-reset.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -107,7 +107,7 @@ class SpoListItemRoleInheritanceResetCommand extends SpoCommand { await this.resetListItemRoleInheritance(args.options); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to reset the role inheritance of ${args.options.listItemId} in list ${args.options.listId ?? args.options.listTitle}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to reset the role inheritance of ${args.options.listItemId} in list ${args.options.listId ?? args.options.listTitle}?` }); if (result) { await this.resetListItemRoleInheritance(args.options); diff --git a/src/m365/spo/commands/listitem/listitem-set.spec.ts b/src/m365/spo/commands/listitem/listitem-set.spec.ts index 941427a3ea4..e43cb95fa64 100644 --- a/src/m365/spo/commands/listitem/listitem-set.spec.ts +++ b/src/m365/spo/commands/listitem/listitem-set.spec.ts @@ -3,7 +3,7 @@ import os from 'os'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -19,7 +19,6 @@ import command from './listitem-set.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.LISTITEM_SET, () => { - let cli: Cli; let log: any[]; let logger: Logger; let commandInfo: CommandInfo; @@ -151,7 +150,6 @@ describe(commands.LISTITEM_SET, () => { }; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); @@ -163,7 +161,7 @@ describe(commands.LISTITEM_SET, () => { WebFullUrl: 'https://contoso.sharepoint.com' }); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/mail/mail-send.spec.ts b/src/m365/spo/commands/mail/mail-send.spec.ts index 0d74f55bc37..2f9b2e7282c 100644 --- a/src/m365/spo/commands/mail/mail-send.spec.ts +++ b/src/m365/spo/commands/mail/mail-send.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -25,7 +25,7 @@ describe(commands.MAIL_SEND, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -56,7 +56,7 @@ describe(commands.MAIL_SEND, () => { }); it('has correct name', () => { - assert.strictEqual(command.name,commands.MAIL_SEND); + assert.strictEqual(command.name, commands.MAIL_SEND); }); it('has a description', () => { diff --git a/src/m365/spo/commands/navigation/navigation-node-add.spec.ts b/src/m365/spo/commands/navigation/navigation-node-add.spec.ts index dac6abb2854..09a9e337252 100644 --- a/src/m365/spo/commands/navigation/navigation-node-add.spec.ts +++ b/src/m365/spo/commands/navigation/navigation-node-add.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -33,7 +33,7 @@ describe(commands.NAVIGATION_NODE_ADD, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/navigation/navigation-node-get.spec.ts b/src/m365/spo/commands/navigation/navigation-node-get.spec.ts index 567890c2d8d..27f7322034f 100644 --- a/src/m365/spo/commands/navigation/navigation-node-get.spec.ts +++ b/src/m365/spo/commands/navigation/navigation-node-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -39,7 +39,7 @@ describe(commands.NAVIGATION_NODE_GET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/navigation/navigation-node-list.spec.ts b/src/m365/spo/commands/navigation/navigation-node-list.spec.ts index ac09f3d0825..5578a8c25ef 100644 --- a/src/m365/spo/commands/navigation/navigation-node-list.spec.ts +++ b/src/m365/spo/commands/navigation/navigation-node-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -47,7 +47,7 @@ describe(commands.NAVIGATION_NODE_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/navigation/navigation-node-remove.spec.ts b/src/m365/spo/commands/navigation/navigation-node-remove.spec.ts index 753d4b0aa96..51887b77f01 100644 --- a/src/m365/spo/commands/navigation/navigation-node-remove.spec.ts +++ b/src/m365/spo/commands/navigation/navigation-node-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -34,7 +34,7 @@ describe(commands.NAVIGATION_NODE_REMOVE, () => { WebFullUrl: 'https://contoso.sharepoint.com' }); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -52,7 +52,7 @@ describe(commands.NAVIGATION_NODE_REMOVE, () => { }; loggerLogSpy = sinon.spy(logger, 'log'); loggerLogToStderrSpy = sinon.spy(logger, 'logToStderr'); - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -64,7 +64,7 @@ describe(commands.NAVIGATION_NODE_REMOVE, () => { sinonUtil.restore([ request.delete, request.post, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -117,8 +117,8 @@ describe(commands.NAVIGATION_NODE_REMOVE, () => { sinon.stub(request, 'delete').callsFake(() => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { webUrl: 'https://contoso.sharepoint.com/sites/team-a', location: 'TopNavigationBar', id: '2003' } }); }); @@ -131,8 +131,8 @@ describe(commands.NAVIGATION_NODE_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { webUrl: 'https://contoso.sharepoint.com/sites/team-a', location: 'TopNavigationBar', id: '2003' } }); assert(loggerLogSpy.notCalled); }); diff --git a/src/m365/spo/commands/navigation/navigation-node-remove.ts b/src/m365/spo/commands/navigation/navigation-node-remove.ts index 3d2a6b7e91a..eeb89e529de 100644 --- a/src/m365/spo/commands/navigation/navigation-node-remove.ts +++ b/src/m365/spo/commands/navigation/navigation-node-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request from '../../../../request.js'; @@ -90,7 +90,7 @@ class SpoNavigationNodeRemoveCommand extends SpoCommand { await this.removeNode(logger, args.options); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the node ${args.options.id} from the navigation?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the node ${args.options.id} from the navigation?` }); if (result) { await this.removeNode(logger, args.options); diff --git a/src/m365/spo/commands/navigation/navigation-node-set.spec.ts b/src/m365/spo/commands/navigation/navigation-node-set.spec.ts index c09ed3fc995..906d91730af 100644 --- a/src/m365/spo/commands/navigation/navigation-node-set.spec.ts +++ b/src/m365/spo/commands/navigation/navigation-node-set.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -35,7 +35,7 @@ describe(commands.NAVIGATION_NODE_SET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/orgassetslibrary/orgassetslibrary-add.spec.ts b/src/m365/spo/commands/orgassetslibrary/orgassetslibrary-add.spec.ts index df01b47d1eb..28da94fe4d0 100644 --- a/src/m365/spo/commands/orgassetslibrary/orgassetslibrary-add.spec.ts +++ b/src/m365/spo/commands/orgassetslibrary/orgassetslibrary-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -33,7 +33,7 @@ describe(commands.ORGASSETSLIBRARY_ADD, () => { }); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/orgassetslibrary/orgassetslibrary-remove.spec.ts b/src/m365/spo/commands/orgassetslibrary/orgassetslibrary-remove.spec.ts index 60c29276426..a895ecfadda 100644 --- a/src/m365/spo/commands/orgassetslibrary/orgassetslibrary-remove.spec.ts +++ b/src/m365/spo/commands/orgassetslibrary/orgassetslibrary-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; import config from '../../../../config.js'; @@ -47,7 +47,7 @@ describe(commands.ORGASSETSLIBRARY_REMOVE, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -58,7 +58,7 @@ describe(commands.ORGASSETSLIBRARY_REMOVE, () => { afterEach(() => { sinonUtil.restore([ request.post, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -85,8 +85,8 @@ describe(commands.ORGASSETSLIBRARY_REMOVE, () => { it('aborts removing the Org Assets Library when force option is not passed and prompt not confirmed', async () => { const postSpy = sinon.spy(request, 'post'); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: {} }); assert(postSpy.notCalled); @@ -114,8 +114,8 @@ describe(commands.ORGASSETSLIBRARY_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { libraryUrl: '/sites/branding/assets' } }); assert(orgAssetLibRemoveCallIssued); }); @@ -168,8 +168,8 @@ describe(commands.ORGASSETSLIBRARY_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { libraryUrl: '/sites/branding/assets', output: 'json' } }); assert(orgAssetLibRemoveCallIssued); }); diff --git a/src/m365/spo/commands/orgassetslibrary/orgassetslibrary-remove.ts b/src/m365/spo/commands/orgassetslibrary/orgassetslibrary-remove.ts index 3ca519a8b94..aeaa5df417d 100644 --- a/src/m365/spo/commands/orgassetslibrary/orgassetslibrary-remove.ts +++ b/src/m365/spo/commands/orgassetslibrary/orgassetslibrary-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import config from '../../../../config.js'; import GlobalOptions from '../../../../GlobalOptions.js'; @@ -47,7 +47,7 @@ class SpoOrgAssetsLibraryRemoveCommand extends SpoCommand { await this.removeLibrary(logger, args.options.libraryUrl); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the library ${args.options.libraryUrl} as a central location for organization assets?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the library ${args.options.libraryUrl} as a central location for organization assets?` }); if (result) { await this.removeLibrary(logger, args.options.libraryUrl); diff --git a/src/m365/spo/commands/orgnewssite/orgnewssite-remove.spec.ts b/src/m365/spo/commands/orgnewssite/orgnewssite-remove.spec.ts index 8a0f296f150..59adf867eef 100644 --- a/src/m365/spo/commands/orgnewssite/orgnewssite-remove.spec.ts +++ b/src/m365/spo/commands/orgnewssite/orgnewssite-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -33,7 +33,7 @@ describe(commands.ORGNEWSSITE_REMOVE, () => { }); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -49,7 +49,7 @@ describe(commands.ORGNEWSSITE_REMOVE, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -60,7 +60,7 @@ describe(commands.ORGNEWSSITE_REMOVE, () => { afterEach(() => { sinonUtil.restore([ request.post, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -112,8 +112,8 @@ describe(commands.ORGNEWSSITE_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { verbose: true, @@ -168,8 +168,8 @@ describe(commands.ORGNEWSSITE_REMOVE, () => { const postStub = sinon.stub(request, 'post').callsFake(() => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { debug: true, verbose: true, force: false, url: 'https://contoso.sharepoint.com/sites/test1' } }); assert(postStub.notCalled); }); diff --git a/src/m365/spo/commands/orgnewssite/orgnewssite-remove.ts b/src/m365/spo/commands/orgnewssite/orgnewssite-remove.ts index 463579d24af..638dfb75416 100644 --- a/src/m365/spo/commands/orgnewssite/orgnewssite-remove.ts +++ b/src/m365/spo/commands/orgnewssite/orgnewssite-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import config from '../../../../config.js'; import GlobalOptions from '../../../../GlobalOptions.js'; @@ -65,7 +65,7 @@ class SpoOrgNewsSiteRemoveCommand extends SpoCommand { await this.removeOrgNewsSite(logger, args.options.url); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove ${args.options.url} from the list of organizational news sites?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove ${args.options.url} from the list of organizational news sites?` }); if (result) { await this.removeOrgNewsSite(logger, args.options.url); diff --git a/src/m365/spo/commands/orgnewssite/orgnewssite-set.spec.ts b/src/m365/spo/commands/orgnewssite/orgnewssite-set.spec.ts index 217dc352a72..8e4cf4a8819 100644 --- a/src/m365/spo/commands/orgnewssite/orgnewssite-set.spec.ts +++ b/src/m365/spo/commands/orgnewssite/orgnewssite-set.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -32,7 +32,7 @@ describe(commands.ORGNEWSSITE_SET, () => { }); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/page/page-add.spec.ts b/src/m365/spo/commands/page/page-add.spec.ts index 45a4ccfc845..7a2e2cb9da3 100644 --- a/src/m365/spo/commands/page/page-add.spec.ts +++ b/src/m365/spo/commands/page/page-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -34,7 +34,7 @@ describe(commands.PAGE_ADD, () => { WebFullUrl: 'https://contoso.sharepoint.com' }); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -56,8 +56,8 @@ describe(commands.PAGE_ADD, () => { afterEach(() => { sinonUtil.restore([ request.post, - Cli.executeCommand, - Cli.executeCommandWithOutput + cli.executeCommand, + cli.executeCommandWithOutput ]); }); @@ -128,13 +128,13 @@ describe(commands.PAGE_ADD, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommand').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommand').callsFake(async (command): Promise => { if (command === spoListItemSetCommand) { return; } throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoFileGetCommand) { return { 'stdout': '{\"FileSystemObjectType\":0,\"Id\":6,\"ServerRedirectedEmbedUri\":null,\"ServerRedirectedEmbedUrl\":\"\",\"ContentTypeId\":\"0x0101009D1CB255DA76424F860D91F20E6C411800E2DAFA6353688E488147257C551A63BD\",\"ComplianceAssetId\":null,\"WikiField\":null,\"Title\":\"zzzz\",\"CanvasContent1\":\"
<\/div><\/div>\",\"BannerImageUrl\":{\"Description\":\"https:\/\/contoso.sharepoint.com\/_layouts\/15\/images\/sitepagethumbnail.png\",\"Url\":\"https:\/\/contoso.sharepoint.com\/_layouts\/15\/images\/sitepagethumbnail.png\"},\"Description\":null,\"PromotedState\":0,\"FirstPublishedDate\":\"2022-11-11T15:48:15\",\"LayoutWebpartsContent\":\"
<\/div><\/div>\",\"OData__AuthorBylineId\":[9],\"_AuthorBylineStringId\":[\"9\"],\"OData__TopicHeader\":null,\"OData__SPSitePageFlags\":null,\"OData__SPCallToAction\":null,\"OData__OriginalSourceUrl\":null,\"OData__OriginalSourceSiteId\":null,\"OData__OriginalSourceWebId\":null,\"OData__OriginalSourceListId\":null,\"OData__OriginalSourceItemId\":null,\"ID\":6,\"Created\":\"2022-11-11T15:48:00\",\"AuthorId\":9,\"Modified\":\"2022-11-12T02:03:12\",\"EditorId\":9,\"OData__CopySource\":null,\"CheckoutUserId\":9,\"OData__UIVersionString\":\"2.19\",\"GUID\":\"9a94cb88-019b-4a66-abd6-be7f5337f659\"}' }; } @@ -215,13 +215,13 @@ describe(commands.PAGE_ADD, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommand').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommand').callsFake(async (command): Promise => { if (command === spoListItemSetCommand) { return; } throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoFileGetCommand) { return { 'stdout': '{\"FileSystemObjectType\":0,\"Id\":6,\"ServerRedirectedEmbedUri\":null,\"ServerRedirectedEmbedUrl\":\"\",\"ContentTypeId\":\"0x0101009D1CB255DA76424F860D91F20E6C411800E2DAFA6353688E488147257C551A63BD\",\"ComplianceAssetId\":null,\"WikiField\":null,\"Title\":\"zzzz\",\"CanvasContent1\":\"
<\/div><\/div>\",\"BannerImageUrl\":{\"Description\":\"https:\/\/contoso.sharepoint.com\/_layouts\/15\/images\/sitepagethumbnail.png\",\"Url\":\"https:\/\/contoso.sharepoint.com\/_layouts\/15\/images\/sitepagethumbnail.png\"},\"Description\":null,\"PromotedState\":0,\"FirstPublishedDate\":\"2022-11-11T15:48:15\",\"LayoutWebpartsContent\":\"
<\/div><\/div>\",\"OData__AuthorBylineId\":[9],\"_AuthorBylineStringId\":[\"9\"],\"OData__TopicHeader\":null,\"OData__SPSitePageFlags\":null,\"OData__SPCallToAction\":null,\"OData__OriginalSourceUrl\":null,\"OData__OriginalSourceSiteId\":null,\"OData__OriginalSourceWebId\":null,\"OData__OriginalSourceListId\":null,\"OData__OriginalSourceItemId\":null,\"ID\":6,\"Created\":\"2022-11-11T15:48:00\",\"AuthorId\":9,\"Modified\":\"2022-11-12T02:03:12\",\"EditorId\":9,\"OData__CopySource\":null,\"CheckoutUserId\":9,\"OData__UIVersionString\":\"2.19\",\"GUID\":\"9a94cb88-019b-4a66-abd6-be7f5337f659\"}' }; } @@ -300,13 +300,13 @@ describe(commands.PAGE_ADD, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommand').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommand').callsFake(async (command): Promise => { if (command === spoListItemSetCommand) { return; } throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoFileGetCommand) { return { 'stdout': '{\"FileSystemObjectType\":0,\"Id\":6,\"ServerRedirectedEmbedUri\":null,\"ServerRedirectedEmbedUrl\":\"\",\"ContentTypeId\":\"0x0101009D1CB255DA76424F860D91F20E6C411800E2DAFA6353688E488147257C551A63BD\",\"ComplianceAssetId\":null,\"WikiField\":null,\"Title\":\"zzzz\",\"CanvasContent1\":\"
<\/div><\/div>\",\"BannerImageUrl\":{\"Description\":\"https:\/\/contoso.sharepoint.com\/_layouts\/15\/images\/sitepagethumbnail.png\",\"Url\":\"https:\/\/contoso.sharepoint.com\/_layouts\/15\/images\/sitepagethumbnail.png\"},\"Description\":null,\"PromotedState\":0,\"FirstPublishedDate\":\"2022-11-11T15:48:15\",\"LayoutWebpartsContent\":\"
<\/div><\/div>\",\"OData__AuthorBylineId\":[9],\"_AuthorBylineStringId\":[\"9\"],\"OData__TopicHeader\":null,\"OData__SPSitePageFlags\":null,\"OData__SPCallToAction\":null,\"OData__OriginalSourceUrl\":null,\"OData__OriginalSourceSiteId\":null,\"OData__OriginalSourceWebId\":null,\"OData__OriginalSourceListId\":null,\"OData__OriginalSourceItemId\":null,\"ID\":6,\"Created\":\"2022-11-11T15:48:00\",\"AuthorId\":9,\"Modified\":\"2022-11-12T02:03:12\",\"EditorId\":9,\"OData__CopySource\":null,\"CheckoutUserId\":9,\"OData__UIVersionString\":\"2.19\",\"GUID\":\"9a94cb88-019b-4a66-abd6-be7f5337f659\"}' }; } @@ -496,13 +496,13 @@ describe(commands.PAGE_ADD, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommand').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommand').callsFake(async (command): Promise => { if (command === spoListItemSetCommand) { return; } throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoFileGetCommand) { return { 'stdout': '{\"FileSystemObjectType\":0,\"Id\":6,\"ServerRedirectedEmbedUri\":null,\"ServerRedirectedEmbedUrl\":\"\",\"ContentTypeId\":\"0x0101009D1CB255DA76424F860D91F20E6C411800E2DAFA6353688E488147257C551A63BD\",\"ComplianceAssetId\":null,\"WikiField\":null,\"Title\":\"zzzz\",\"CanvasContent1\":\"
<\/div><\/div>\",\"BannerImageUrl\":{\"Description\":\"https:\/\/contoso.sharepoint.com\/_layouts\/15\/images\/sitepagethumbnail.png\",\"Url\":\"https:\/\/contoso.sharepoint.com\/_layouts\/15\/images\/sitepagethumbnail.png\"},\"Description\":null,\"PromotedState\":0,\"FirstPublishedDate\":\"2022-11-11T15:48:15\",\"LayoutWebpartsContent\":\"
<\/div><\/div>\",\"OData__AuthorBylineId\":[9],\"_AuthorBylineStringId\":[\"9\"],\"OData__TopicHeader\":null,\"OData__SPSitePageFlags\":null,\"OData__SPCallToAction\":null,\"OData__OriginalSourceUrl\":null,\"OData__OriginalSourceSiteId\":null,\"OData__OriginalSourceWebId\":null,\"OData__OriginalSourceListId\":null,\"OData__OriginalSourceItemId\":null,\"ID\":6,\"Created\":\"2022-11-11T15:48:00\",\"AuthorId\":9,\"Modified\":\"2022-11-12T02:03:12\",\"EditorId\":9,\"OData__CopySource\":null,\"CheckoutUserId\":9,\"OData__UIVersionString\":\"2.19\",\"GUID\":\"9a94cb88-019b-4a66-abd6-be7f5337f659\"}' }; } @@ -588,13 +588,13 @@ describe(commands.PAGE_ADD, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommand').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommand').callsFake(async (command): Promise => { if (command === spoListItemSetCommand) { return; } throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoFileGetCommand) { return { 'stdout': '{\"FileSystemObjectType\":0,\"Id\":6,\"ServerRedirectedEmbedUri\":null,\"ServerRedirectedEmbedUrl\":\"\",\"ContentTypeId\":\"0x0101009D1CB255DA76424F860D91F20E6C411800E2DAFA6353688E488147257C551A63BD\",\"ComplianceAssetId\":null,\"WikiField\":null,\"Title\":\"zzzz\",\"CanvasContent1\":\"
<\/div><\/div>\",\"BannerImageUrl\":{\"Description\":\"https:\/\/contoso.sharepoint.com\/_layouts\/15\/images\/sitepagethumbnail.png\",\"Url\":\"https:\/\/contoso.sharepoint.com\/_layouts\/15\/images\/sitepagethumbnail.png\"},\"Description\":null,\"PromotedState\":0,\"FirstPublishedDate\":\"2022-11-11T15:48:15\",\"LayoutWebpartsContent\":\"
<\/div><\/div>\",\"OData__AuthorBylineId\":[9],\"_AuthorBylineStringId\":[\"9\"],\"OData__TopicHeader\":null,\"OData__SPSitePageFlags\":null,\"OData__SPCallToAction\":null,\"OData__OriginalSourceUrl\":null,\"OData__OriginalSourceSiteId\":null,\"OData__OriginalSourceWebId\":null,\"OData__OriginalSourceListId\":null,\"OData__OriginalSourceItemId\":null,\"ID\":6,\"Created\":\"2022-11-11T15:48:00\",\"AuthorId\":9,\"Modified\":\"2022-11-12T02:03:12\",\"EditorId\":9,\"OData__CopySource\":null,\"CheckoutUserId\":9,\"OData__UIVersionString\":\"2.19\",\"GUID\":\"9a94cb88-019b-4a66-abd6-be7f5337f659\"}' }; } @@ -687,13 +687,13 @@ describe(commands.PAGE_ADD, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommand').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommand').callsFake(async (command): Promise => { if (command === spoListItemSetCommand) { return; } throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoFileGetCommand) { return { 'stdout': '{\"FileSystemObjectType\":0,\"Id\":6,\"ServerRedirectedEmbedUri\":null,\"ServerRedirectedEmbedUrl\":\"\",\"ContentTypeId\":\"0x0101009D1CB255DA76424F860D91F20E6C411800E2DAFA6353688E488147257C551A63BD\",\"ComplianceAssetId\":null,\"WikiField\":null,\"Title\":\"zzzz\",\"CanvasContent1\":\"
<\/div><\/div>\",\"BannerImageUrl\":{\"Description\":\"https:\/\/contoso.sharepoint.com\/_layouts\/15\/images\/sitepagethumbnail.png\",\"Url\":\"https:\/\/contoso.sharepoint.com\/_layouts\/15\/images\/sitepagethumbnail.png\"},\"Description\":null,\"PromotedState\":0,\"FirstPublishedDate\":\"2022-11-11T15:48:15\",\"LayoutWebpartsContent\":\"
<\/div><\/div>\",\"OData__AuthorBylineId\":[9],\"_AuthorBylineStringId\":[\"9\"],\"OData__TopicHeader\":null,\"OData__SPSitePageFlags\":null,\"OData__SPCallToAction\":null,\"OData__OriginalSourceUrl\":null,\"OData__OriginalSourceSiteId\":null,\"OData__OriginalSourceWebId\":null,\"OData__OriginalSourceListId\":null,\"OData__OriginalSourceItemId\":null,\"ID\":6,\"Created\":\"2022-11-11T15:48:00\",\"AuthorId\":9,\"Modified\":\"2022-11-12T02:03:12\",\"EditorId\":9,\"OData__CopySource\":null,\"CheckoutUserId\":9,\"OData__UIVersionString\":\"2.19\",\"GUID\":\"9a94cb88-019b-4a66-abd6-be7f5337f659\"}' }; } @@ -773,13 +773,13 @@ describe(commands.PAGE_ADD, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommand').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommand').callsFake(async (command): Promise => { if (command === spoListItemSetCommand) { return; } throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoFileGetCommand) { return { 'stdout': '{\"FileSystemObjectType\":0,\"Id\":6,\"ServerRedirectedEmbedUri\":null,\"ServerRedirectedEmbedUrl\":\"\",\"ContentTypeId\":\"0x0101009D1CB255DA76424F860D91F20E6C411800E2DAFA6353688E488147257C551A63BD\",\"ComplianceAssetId\":null,\"WikiField\":null,\"Title\":\"zzzz\",\"CanvasContent1\":\"
<\/div><\/div>\",\"BannerImageUrl\":{\"Description\":\"https:\/\/contoso.sharepoint.com\/_layouts\/15\/images\/sitepagethumbnail.png\",\"Url\":\"https:\/\/contoso.sharepoint.com\/_layouts\/15\/images\/sitepagethumbnail.png\"},\"Description\":null,\"PromotedState\":0,\"FirstPublishedDate\":\"2022-11-11T15:48:15\",\"LayoutWebpartsContent\":\"
<\/div><\/div>\",\"OData__AuthorBylineId\":[9],\"_AuthorBylineStringId\":[\"9\"],\"OData__TopicHeader\":null,\"OData__SPSitePageFlags\":null,\"OData__SPCallToAction\":null,\"OData__OriginalSourceUrl\":null,\"OData__OriginalSourceSiteId\":null,\"OData__OriginalSourceWebId\":null,\"OData__OriginalSourceListId\":null,\"OData__OriginalSourceItemId\":null,\"ID\":6,\"Created\":\"2022-11-11T15:48:00\",\"AuthorId\":9,\"Modified\":\"2022-11-12T02:03:12\",\"EditorId\":9,\"OData__CopySource\":null,\"CheckoutUserId\":9,\"OData__UIVersionString\":\"2.19\",\"GUID\":\"9a94cb88-019b-4a66-abd6-be7f5337f659\"}' }; } @@ -923,13 +923,13 @@ describe(commands.PAGE_ADD, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommand').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommand').callsFake(async (command): Promise => { if (command === spoListItemSetCommand) { return; } throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoFileGetCommand) { return { 'stdout': '{\"FileSystemObjectType\":0,\"Id\":6,\"ServerRedirectedEmbedUri\":null,\"ServerRedirectedEmbedUrl\":\"\",\"ContentTypeId\":\"0x0101009D1CB255DA76424F860D91F20E6C411800E2DAFA6353688E488147257C551A63BD\",\"ComplianceAssetId\":null,\"WikiField\":null,\"Title\":\"zzzz\",\"CanvasContent1\":\"
<\/div><\/div>\",\"BannerImageUrl\":{\"Description\":\"https:\/\/contoso.sharepoint.com\/_layouts\/15\/images\/sitepagethumbnail.png\",\"Url\":\"https:\/\/contoso.sharepoint.com\/_layouts\/15\/images\/sitepagethumbnail.png\"},\"Description\":null,\"PromotedState\":0,\"FirstPublishedDate\":\"2022-11-11T15:48:15\",\"LayoutWebpartsContent\":\"
<\/div><\/div>\",\"OData__AuthorBylineId\":[9],\"_AuthorBylineStringId\":[\"9\"],\"OData__TopicHeader\":null,\"OData__SPSitePageFlags\":null,\"OData__SPCallToAction\":null,\"OData__OriginalSourceUrl\":null,\"OData__OriginalSourceSiteId\":null,\"OData__OriginalSourceWebId\":null,\"OData__OriginalSourceListId\":null,\"OData__OriginalSourceItemId\":null,\"ID\":6,\"Created\":\"2022-11-11T15:48:00\",\"AuthorId\":9,\"Modified\":\"2022-11-12T02:03:12\",\"EditorId\":9,\"OData__CopySource\":null,\"CheckoutUserId\":9,\"OData__UIVersionString\":\"2.19\",\"GUID\":\"9a94cb88-019b-4a66-abd6-be7f5337f659\"}' }; } @@ -1013,13 +1013,13 @@ describe(commands.PAGE_ADD, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommand').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommand').callsFake(async (command): Promise => { if (command === spoListItemSetCommand) { return; } throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoFileGetCommand) { return { 'stdout': '{\"FileSystemObjectType\":0,\"Id\":6,\"ServerRedirectedEmbedUri\":null,\"ServerRedirectedEmbedUrl\":\"\",\"ContentTypeId\":\"0x0101009D1CB255DA76424F860D91F20E6C411800E2DAFA6353688E488147257C551A63BD\",\"ComplianceAssetId\":null,\"WikiField\":null,\"Title\":\"zzzz\",\"CanvasContent1\":\"
<\/div><\/div>\",\"BannerImageUrl\":{\"Description\":\"https:\/\/contoso.sharepoint.com\/_layouts\/15\/images\/sitepagethumbnail.png\",\"Url\":\"https:\/\/contoso.sharepoint.com\/_layouts\/15\/images\/sitepagethumbnail.png\"},\"Description\":null,\"PromotedState\":0,\"FirstPublishedDate\":\"2022-11-11T15:48:15\",\"LayoutWebpartsContent\":\"
<\/div><\/div>\",\"OData__AuthorBylineId\":[9],\"_AuthorBylineStringId\":[\"9\"],\"OData__TopicHeader\":null,\"OData__SPSitePageFlags\":null,\"OData__SPCallToAction\":null,\"OData__OriginalSourceUrl\":null,\"OData__OriginalSourceSiteId\":null,\"OData__OriginalSourceWebId\":null,\"OData__OriginalSourceListId\":null,\"OData__OriginalSourceItemId\":null,\"ID\":6,\"Created\":\"2022-11-11T15:48:00\",\"AuthorId\":9,\"Modified\":\"2022-11-12T02:03:12\",\"EditorId\":9,\"OData__CopySource\":null,\"CheckoutUserId\":9,\"OData__UIVersionString\":\"2.19\",\"GUID\":\"9a94cb88-019b-4a66-abd6-be7f5337f659\"}' }; } @@ -1103,13 +1103,13 @@ describe(commands.PAGE_ADD, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommand').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommand').callsFake(async (command): Promise => { if (command === spoListItemSetCommand) { return; } throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoFileGetCommand) { return { 'stdout': '{\"FileSystemObjectType\":0,\"Id\":6,\"ServerRedirectedEmbedUri\":null,\"ServerRedirectedEmbedUrl\":\"\",\"ContentTypeId\":\"0x0101009D1CB255DA76424F860D91F20E6C411800E2DAFA6353688E488147257C551A63BD\",\"ComplianceAssetId\":null,\"WikiField\":null,\"Title\":\"zzzz\",\"CanvasContent1\":\"
<\/div><\/div>\",\"BannerImageUrl\":{\"Description\":\"https:\/\/contoso.sharepoint.com\/_layouts\/15\/images\/sitepagethumbnail.png\",\"Url\":\"https:\/\/contoso.sharepoint.com\/_layouts\/15\/images\/sitepagethumbnail.png\"},\"Description\":null,\"PromotedState\":0,\"FirstPublishedDate\":\"2022-11-11T15:48:15\",\"LayoutWebpartsContent\":\"
<\/div><\/div>\",\"OData__AuthorBylineId\":[9],\"_AuthorBylineStringId\":[\"9\"],\"OData__TopicHeader\":null,\"OData__SPSitePageFlags\":null,\"OData__SPCallToAction\":null,\"OData__OriginalSourceUrl\":null,\"OData__OriginalSourceSiteId\":null,\"OData__OriginalSourceWebId\":null,\"OData__OriginalSourceListId\":null,\"OData__OriginalSourceItemId\":null,\"ID\":6,\"Created\":\"2022-11-11T15:48:00\",\"AuthorId\":9,\"Modified\":\"2022-11-12T02:03:12\",\"EditorId\":9,\"OData__CopySource\":null,\"CheckoutUserId\":9,\"OData__UIVersionString\":\"2.19\",\"GUID\":\"9a94cb88-019b-4a66-abd6-be7f5337f659\"}' }; } diff --git a/src/m365/spo/commands/page/page-add.ts b/src/m365/spo/commands/page/page-add.ts index a147ccc180f..20004e6d1d2 100644 --- a/src/m365/spo/commands/page/page-add.ts +++ b/src/m365/spo/commands/page/page-add.ts @@ -1,5 +1,5 @@ import { Auth } from '../../../../Auth.js'; -import { Cli, CommandOutput } from '../../../../cli/Cli.js'; +import { cli, CommandOutput } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import Command from '../../../../Command.js'; import GlobalOptions from '../../../../GlobalOptions.js'; @@ -184,7 +184,7 @@ class SpoPageAddCommand extends SpoCommand { listItemSetOptions.PromotedState = 0; listItemSetOptions.BannerImageUrl = `${resource}/_layouts/15/images/sitepagethumbnail.png, /_layouts/15/images/sitepagethumbnail.png`; } - await Cli.executeCommand(spoListItemSetCommand as Command, { options: { ...listItemSetOptions, _: [] } }); + await cli.executeCommand(spoListItemSetCommand as Command, { options: { ...listItemSetOptions, _: [] } }); const pageProps = await Page.checkout(pageName, args.options.webUrl, logger, this.debug, this.verbose); if (pageProps) { @@ -226,7 +226,7 @@ class SpoPageAddCommand extends SpoCommand { verbose: this.verbose, debug: this.debug }; - await Cli.executeCommand(spoListItemSetCommand as Command, { options: { ...listItemSetOptions, _: [] } }); + await cli.executeCommand(spoListItemSetCommand as Command, { options: { ...listItemSetOptions, _: [] } }); break; case 'Template': requestOptions.url = `${args.options.webUrl}/_api/SitePages/Pages(${listItemId})/SavePageAsTemplate`; @@ -357,7 +357,7 @@ class SpoPageAddCommand extends SpoCommand { verbose: this.verbose, debug: this.debug }; - const fileGetOutput: CommandOutput = await Cli.executeCommandWithOutput(spoFileGetCommand as Command, { options: { ...fileGetOptions, _: [] } }); + const fileGetOutput: CommandOutput = await cli.executeCommandWithOutput(spoFileGetCommand as Command, { options: { ...fileGetOptions, _: [] } }); const fileGetOutputJson = JSON.parse(fileGetOutput.stdout); return fileGetOutputJson.Id; } diff --git a/src/m365/spo/commands/page/page-clientsidewebpart-add.spec.ts b/src/m365/spo/commands/page/page-clientsidewebpart-add.spec.ts index 3efb892a5a2..cac5b2e8cfe 100644 --- a/src/m365/spo/commands/page/page-clientsidewebpart-add.spec.ts +++ b/src/m365/spo/commands/page/page-clientsidewebpart-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -51,7 +51,7 @@ describe(commands.PAGE_CLIENTSIDEWEBPART_ADD, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/page/page-column-get.spec.ts b/src/m365/spo/commands/page/page-column-get.spec.ts index ad7dd75e343..060cbfdcedb 100644 --- a/src/m365/spo/commands/page/page-column-get.spec.ts +++ b/src/m365/spo/commands/page/page-column-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -16,7 +16,6 @@ import command from './page-column-get.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.PAGE_COLUMN_GET, () => { - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; @@ -83,13 +82,12 @@ describe(commands.PAGE_COLUMN_GET, () => { }; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/page/page-column-get.ts b/src/m365/spo/commands/page/page-column-get.ts index 08eb1206eae..2ea70197d6b 100644 --- a/src/m365/spo/commands/page/page-column-get.ts +++ b/src/m365/spo/commands/page/page-column-get.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import { validation } from '../../../../utils/validation.js'; @@ -75,7 +75,7 @@ class SpoPageColumnGetCommand extends SpoCommand { .filter(section => section.order === args.options.section); if (sections.length) { - const isJSONOutput = !Cli.shouldTrimOutput(args.options.output); + const isJSONOutput = !cli.shouldTrimOutput(args.options.output); const columns = sections[0].columns.filter(col => col.order === args.options.column); if (columns.length) { const column = Page.getColumnsInformation(columns[0], isJSONOutput); diff --git a/src/m365/spo/commands/page/page-column-list.spec.ts b/src/m365/spo/commands/page/page-column-list.spec.ts index db7566df08f..b51ee84cf28 100644 --- a/src/m365/spo/commands/page/page-column-list.spec.ts +++ b/src/m365/spo/commands/page/page-column-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -16,7 +16,6 @@ import command from './page-column-list.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.PAGE_COLUMN_LIST, () => { - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; @@ -83,13 +82,12 @@ describe(commands.PAGE_COLUMN_LIST, () => { }; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/page/page-column-list.ts b/src/m365/spo/commands/page/page-column-list.ts index 63eb334ec09..d34b9a90123 100644 --- a/src/m365/spo/commands/page/page-column-list.ts +++ b/src/m365/spo/commands/page/page-column-list.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import { validation } from '../../../../utils/validation.js'; @@ -66,7 +66,7 @@ class SpoPageColumnListCommand extends SpoCommand { .filter(section => section.order === args.options.section); if (sections.length) { - const isJSONOutput = !Cli.shouldTrimOutput(args.options.output); + const isJSONOutput = !cli.shouldTrimOutput(args.options.output); await logger.log(sections[0].columns.map(c => { const column = Page.getColumnsInformation(c, isJSONOutput); column.controls = c.controls.length; diff --git a/src/m365/spo/commands/page/page-control-get.spec.ts b/src/m365/spo/commands/page/page-control-get.spec.ts index 696fbb94e9b..c1698397d4f 100644 --- a/src/m365/spo/commands/page/page-control-get.spec.ts +++ b/src/m365/spo/commands/page/page-control-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -28,7 +28,7 @@ describe(commands.PAGE_CONTROL_GET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/page/page-control-list.spec.ts b/src/m365/spo/commands/page/page-control-list.spec.ts index 78f85a895b1..0decd13dc55 100644 --- a/src/m365/spo/commands/page/page-control-list.spec.ts +++ b/src/m365/spo/commands/page/page-control-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -27,7 +27,7 @@ describe(commands.PAGE_CONTROL_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/page/page-control-set.spec.ts b/src/m365/spo/commands/page/page-control-set.spec.ts index 20e6b6b3087..b132f007eef 100644 --- a/src/m365/spo/commands/page/page-control-set.spec.ts +++ b/src/m365/spo/commands/page/page-control-set.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -26,7 +26,7 @@ describe(commands.PAGE_CONTROL_SET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/page/page-copy.spec.ts b/src/m365/spo/commands/page/page-copy.spec.ts index 72f77ba1e8b..bfe9a592a37 100644 --- a/src/m365/spo/commands/page/page-copy.spec.ts +++ b/src/m365/spo/commands/page/page-copy.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import chalk from 'chalk'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -28,7 +28,7 @@ describe(commands.PAGE_COPY, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/page/page-get.spec.ts b/src/m365/spo/commands/page/page-get.spec.ts index d0bd06c72f0..970521f4787 100644 --- a/src/m365/spo/commands/page/page-get.spec.ts +++ b/src/m365/spo/commands/page/page-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -26,7 +26,7 @@ describe(commands.PAGE_GET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/page/page-header-set.spec.ts b/src/m365/spo/commands/page/page-header-set.spec.ts index 3c2c47a7bd6..f7a58fcf446 100644 --- a/src/m365/spo/commands/page/page-header-set.spec.ts +++ b/src/m365/spo/commands/page/page-header-set.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -26,7 +26,7 @@ describe(commands.PAGE_HEADER_SET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/page/page-list.spec.ts b/src/m365/spo/commands/page/page-list.spec.ts index 055124bb835..638eb1737bc 100644 --- a/src/m365/spo/commands/page/page-list.spec.ts +++ b/src/m365/spo/commands/page/page-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -26,7 +26,7 @@ describe(commands.PAGE_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/page/page-remove.spec.ts b/src/m365/spo/commands/page/page-remove.spec.ts index ae919be9a6c..c68730c16ef 100644 --- a/src/m365/spo/commands/page/page-remove.spec.ts +++ b/src/m365/spo/commands/page/page-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -45,7 +45,7 @@ describe(commands.PAGE_REMOVE, () => { WebFullUrl: 'https://contoso.sharepoint.com' }); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -63,7 +63,7 @@ describe(commands.PAGE_REMOVE, () => { }; loggerLogSpy = sinon.spy(logger, 'log'); loggerLogToStderrSpy = sinon.spy(logger, 'logToStderr'); - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -74,7 +74,7 @@ describe(commands.PAGE_REMOVE, () => { afterEach(() => { sinonUtil.restore([ request.post, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -141,8 +141,8 @@ describe(commands.PAGE_REMOVE, () => { it('removes a modern page with confirm prompt', async () => { fakeRestCalls(); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -155,8 +155,8 @@ describe(commands.PAGE_REMOVE, () => { it('removes a modern page (debug) with confirm prompt', async () => { fakeRestCalls(); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -184,8 +184,8 @@ describe(commands.PAGE_REMOVE, () => { it('should abort page removal when prompt not confirmed', async () => { const postCallSpy = fakeRestCalls(); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { @@ -199,8 +199,8 @@ describe(commands.PAGE_REMOVE, () => { it('automatically appends the .aspx extension', async () => { fakeRestCalls(); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { @@ -217,8 +217,8 @@ describe(commands.PAGE_REMOVE, () => { throw { error: { 'odata.error': { message: { value: 'An error has occurred' } } } }; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await assert.rejects(command.action(logger, { options: { diff --git a/src/m365/spo/commands/page/page-remove.ts b/src/m365/spo/commands/page/page-remove.ts index c2f89ac56fb..7059804f9a3 100644 --- a/src/m365/spo/commands/page/page-remove.ts +++ b/src/m365/spo/commands/page/page-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -59,7 +59,7 @@ class SpoPageRemoveCommand extends SpoCommand { await this.removePage(logger, args); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the page '${args.options.name}'?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the page '${args.options.name}'?` }); if (result) { await this.removePage(logger, args); diff --git a/src/m365/spo/commands/page/page-section-add.spec.ts b/src/m365/spo/commands/page/page-section-add.spec.ts index 2cc8ed23e5a..458f839358c 100644 --- a/src/m365/spo/commands/page/page-section-add.spec.ts +++ b/src/m365/spo/commands/page/page-section-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -24,7 +24,7 @@ describe(commands.PAGE_SECTION_ADD, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/page/page-section-get.spec.ts b/src/m365/spo/commands/page/page-section-get.spec.ts index 66f895974de..47c3f7ee8ef 100644 --- a/src/m365/spo/commands/page/page-section-get.spec.ts +++ b/src/m365/spo/commands/page/page-section-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -16,7 +16,6 @@ import command from './page-section-get.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.PAGE_SECTION_GET, () => { - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; @@ -83,13 +82,12 @@ describe(commands.PAGE_SECTION_GET, () => { }; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/page/page-section-get.ts b/src/m365/spo/commands/page/page-section-get.ts index c98fe304521..21f8396f66b 100644 --- a/src/m365/spo/commands/page/page-section-get.ts +++ b/src/m365/spo/commands/page/page-section-get.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import { validation } from '../../../../utils/validation.js'; @@ -66,7 +66,7 @@ class SpoPageSectionGetCommand extends SpoCommand { const sections: CanvasSection[] = clientSidePage.sections .filter(section => section.order === args.options.section); - const isJSONOutput = !Cli.shouldTrimOutput(args.options.output); + const isJSONOutput = !cli.shouldTrimOutput(args.options.output); if (sections.length) { await logger.log(Page.getSectionInformation(sections[0], isJSONOutput)); } diff --git a/src/m365/spo/commands/page/page-section-list.spec.ts b/src/m365/spo/commands/page/page-section-list.spec.ts index 5dc3e1040e4..9c03cfb9893 100644 --- a/src/m365/spo/commands/page/page-section-list.spec.ts +++ b/src/m365/spo/commands/page/page-section-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -86,7 +86,7 @@ describe(commands.PAGE_SECTION_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/page/page-section-list.ts b/src/m365/spo/commands/page/page-section-list.ts index 2f11e757ff4..ac7b97269d0 100644 --- a/src/m365/spo/commands/page/page-section-list.ts +++ b/src/m365/spo/commands/page/page-section-list.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import { validation } from '../../../../utils/validation.js'; @@ -55,7 +55,7 @@ class SpoPageSectionListCommand extends SpoCommand { const clientSidePage = await Page.getPage(args.options.pageName, args.options.webUrl, logger, this.debug, this.verbose); const sections: CanvasSection[] = clientSidePage.sections; - const isJSONOutput = !Cli.shouldTrimOutput(args.options.output); + const isJSONOutput = !cli.shouldTrimOutput(args.options.output); if (sections.length) { const output = sections.map(section => Page.getSectionInformation(section, isJSONOutput)); if (isJSONOutput) { diff --git a/src/m365/spo/commands/page/page-set.spec.ts b/src/m365/spo/commands/page/page-set.spec.ts index 598cda19a00..e82fdbcf85a 100644 --- a/src/m365/spo/commands/page/page-set.spec.ts +++ b/src/m365/spo/commands/page/page-set.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -35,7 +35,7 @@ describe(commands.PAGE_SET, () => { WebFullUrl: 'https://contoso.sharepoint.com' }); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -99,8 +99,8 @@ describe(commands.PAGE_SET, () => { sinonUtil.restore([ request.get, request.post, - Cli.executeCommand, - Cli.executeCommandWithOutput + cli.executeCommand, + cli.executeCommandWithOutput ]); }); @@ -118,13 +118,13 @@ describe(commands.PAGE_SET, () => { }); it('updates page layout to Article', async () => { - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoFileGetCommand) { return { 'stdout': '{\"FileSystemObjectType\":0,\"Id\":6,\"ServerRedirectedEmbedUri\":null,\"ServerRedirectedEmbedUrl\":\"\",\"ContentTypeId\":\"0x0101009D1CB255DA76424F860D91F20E6C411800E2DAFA6353688E488147257C551A63BD\",\"ComplianceAssetId\":null,\"WikiField\":null,\"Title\":\"zzzz\",\"CanvasContent1\":\"
<\/div><\/div>\",\"BannerImageUrl\":{\"Description\":\"https:\/\/contoso.sharepoint.com\/_layouts\/15\/images\/sitepagethumbnail.png\",\"Url\":\"https:\/\/contoso.sharepoint.com\/_layouts\/15\/images\/sitepagethumbnail.png\"},\"Description\":null,\"PromotedState\":0,\"FirstPublishedDate\":\"2022-11-11T15:48:15\",\"LayoutWebpartsContent\":\"
<\/div><\/div>\",\"OData__AuthorBylineId\":[9],\"_AuthorBylineStringId\":[\"9\"],\"OData__TopicHeader\":null,\"OData__SPSitePageFlags\":null,\"OData__SPCallToAction\":null,\"OData__OriginalSourceUrl\":null,\"OData__OriginalSourceSiteId\":null,\"OData__OriginalSourceWebId\":null,\"OData__OriginalSourceListId\":null,\"OData__OriginalSourceItemId\":null,\"ID\":6,\"Created\":\"2022-11-11T15:48:00\",\"AuthorId\":9,\"Modified\":\"2022-11-12T02:03:12\",\"EditorId\":9,\"OData__CopySource\":null,\"CheckoutUserId\":9,\"OData__UIVersionString\":\"2.19\",\"GUID\":\"9a94cb88-019b-4a66-abd6-be7f5337f659\"}' }; } throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommand').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommand').callsFake(async (command): Promise => { if (command === spoListItemSetCommand) { return; } @@ -135,13 +135,13 @@ describe(commands.PAGE_SET, () => { }); it('updates page layout to Article (debug)', async () => { - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoFileGetCommand) { return { 'stdout': '{\"FileSystemObjectType\":0,\"Id\":6,\"ServerRedirectedEmbedUri\":null,\"ServerRedirectedEmbedUrl\":\"\",\"ContentTypeId\":\"0x0101009D1CB255DA76424F860D91F20E6C411800E2DAFA6353688E488147257C551A63BD\",\"ComplianceAssetId\":null,\"WikiField\":null,\"Title\":\"zzzz\",\"CanvasContent1\":\"
<\/div><\/div>\",\"BannerImageUrl\":{\"Description\":\"https:\/\/contoso.sharepoint.com\/_layouts\/15\/images\/sitepagethumbnail.png\",\"Url\":\"https:\/\/contoso.sharepoint.com\/_layouts\/15\/images\/sitepagethumbnail.png\"},\"Description\":null,\"PromotedState\":0,\"FirstPublishedDate\":\"2022-11-11T15:48:15\",\"LayoutWebpartsContent\":\"
<\/div><\/div>\",\"OData__AuthorBylineId\":[9],\"_AuthorBylineStringId\":[\"9\"],\"OData__TopicHeader\":null,\"OData__SPSitePageFlags\":null,\"OData__SPCallToAction\":null,\"OData__OriginalSourceUrl\":null,\"OData__OriginalSourceSiteId\":null,\"OData__OriginalSourceWebId\":null,\"OData__OriginalSourceListId\":null,\"OData__OriginalSourceItemId\":null,\"ID\":6,\"Created\":\"2022-11-11T15:48:00\",\"AuthorId\":9,\"Modified\":\"2022-11-12T02:03:12\",\"EditorId\":9,\"OData__CopySource\":null,\"CheckoutUserId\":9,\"OData__UIVersionString\":\"2.19\",\"GUID\":\"9a94cb88-019b-4a66-abd6-be7f5337f659\"}' }; } throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommand').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommand').callsFake(async (command): Promise => { if (command === spoListItemSetCommand) { return; } @@ -151,13 +151,13 @@ describe(commands.PAGE_SET, () => { }); it('updates page layout to Article on root of tenant (debug)', async () => { - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoFileGetCommand) { return { 'stdout': '{\"FileSystemObjectType\":0,\"Id\":6,\"ServerRedirectedEmbedUri\":null,\"ServerRedirectedEmbedUrl\":\"\",\"ContentTypeId\":\"0x0101009D1CB255DA76424F860D91F20E6C411800E2DAFA6353688E488147257C551A63BD\",\"ComplianceAssetId\":null,\"WikiField\":null,\"Title\":\"zzzz\",\"CanvasContent1\":\"
<\/div><\/div>\",\"BannerImageUrl\":{\"Description\":\"https:\/\/contoso.sharepoint.com\/_layouts\/15\/images\/sitepagethumbnail.png\",\"Url\":\"https:\/\/contoso.sharepoint.com\/_layouts\/15\/images\/sitepagethumbnail.png\"},\"Description\":null,\"PromotedState\":0,\"FirstPublishedDate\":\"2022-11-11T15:48:15\",\"LayoutWebpartsContent\":\"
<\/div><\/div>\",\"OData__AuthorBylineId\":[9],\"_AuthorBylineStringId\":[\"9\"],\"OData__TopicHeader\":null,\"OData__SPSitePageFlags\":null,\"OData__SPCallToAction\":null,\"OData__OriginalSourceUrl\":null,\"OData__OriginalSourceSiteId\":null,\"OData__OriginalSourceWebId\":null,\"OData__OriginalSourceListId\":null,\"OData__OriginalSourceItemId\":null,\"ID\":6,\"Created\":\"2022-11-11T15:48:00\",\"AuthorId\":9,\"Modified\":\"2022-11-12T02:03:12\",\"EditorId\":9,\"OData__CopySource\":null,\"CheckoutUserId\":9,\"OData__UIVersionString\":\"2.19\",\"GUID\":\"9a94cb88-019b-4a66-abd6-be7f5337f659\"}' }; } throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommand').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommand').callsFake(async (command): Promise => { if (command === spoListItemSetCommand) { return; } @@ -167,13 +167,13 @@ describe(commands.PAGE_SET, () => { }); it('automatically appends the .aspx extension', async () => { - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoFileGetCommand) { return { 'stdout': '{\"FileSystemObjectType\":0,\"Id\":6,\"ServerRedirectedEmbedUri\":null,\"ServerRedirectedEmbedUrl\":\"\",\"ContentTypeId\":\"0x0101009D1CB255DA76424F860D91F20E6C411800E2DAFA6353688E488147257C551A63BD\",\"ComplianceAssetId\":null,\"WikiField\":null,\"Title\":\"zzzz\",\"CanvasContent1\":\"
<\/div><\/div>\",\"BannerImageUrl\":{\"Description\":\"https:\/\/contoso.sharepoint.com\/_layouts\/15\/images\/sitepagethumbnail.png\",\"Url\":\"https:\/\/contoso.sharepoint.com\/_layouts\/15\/images\/sitepagethumbnail.png\"},\"Description\":null,\"PromotedState\":0,\"FirstPublishedDate\":\"2022-11-11T15:48:15\",\"LayoutWebpartsContent\":\"
<\/div><\/div>\",\"OData__AuthorBylineId\":[9],\"_AuthorBylineStringId\":[\"9\"],\"OData__TopicHeader\":null,\"OData__SPSitePageFlags\":null,\"OData__SPCallToAction\":null,\"OData__OriginalSourceUrl\":null,\"OData__OriginalSourceSiteId\":null,\"OData__OriginalSourceWebId\":null,\"OData__OriginalSourceListId\":null,\"OData__OriginalSourceItemId\":null,\"ID\":6,\"Created\":\"2022-11-11T15:48:00\",\"AuthorId\":9,\"Modified\":\"2022-11-12T02:03:12\",\"EditorId\":9,\"OData__CopySource\":null,\"CheckoutUserId\":9,\"OData__UIVersionString\":\"2.19\",\"GUID\":\"9a94cb88-019b-4a66-abd6-be7f5337f659\"}' }; } throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommand').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommand').callsFake(async (command): Promise => { if (command === spoListItemSetCommand) { return; } @@ -217,14 +217,14 @@ describe(commands.PAGE_SET, () => { it('promotes the page as NewsPage', async () => { sinonUtil.restore([request.post]); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoFileGetCommand) { return { 'stdout': '{\"FileSystemObjectType\":0,\"Id\":6,\"ServerRedirectedEmbedUri\":null,\"ServerRedirectedEmbedUrl\":\"\",\"ContentTypeId\":\"0x0101009D1CB255DA76424F860D91F20E6C411800E2DAFA6353688E488147257C551A63BD\",\"ComplianceAssetId\":null,\"WikiField\":null,\"Title\":\"zzzz\",\"CanvasContent1\":\"
<\/div><\/div>\",\"BannerImageUrl\":{\"Description\":\"https:\/\/contoso.sharepoint.com\/_layouts\/15\/images\/sitepagethumbnail.png\",\"Url\":\"https:\/\/contoso.sharepoint.com\/_layouts\/15\/images\/sitepagethumbnail.png\"},\"Description\":null,\"PromotedState\":0,\"FirstPublishedDate\":\"2022-11-11T15:48:15\",\"LayoutWebpartsContent\":\"
<\/div><\/div>\",\"OData__AuthorBylineId\":[9],\"_AuthorBylineStringId\":[\"9\"],\"OData__TopicHeader\":null,\"OData__SPSitePageFlags\":null,\"OData__SPCallToAction\":null,\"OData__OriginalSourceUrl\":null,\"OData__OriginalSourceSiteId\":null,\"OData__OriginalSourceWebId\":null,\"OData__OriginalSourceListId\":null,\"OData__OriginalSourceItemId\":null,\"ID\":6,\"Created\":\"2022-11-11T15:48:00\",\"AuthorId\":9,\"Modified\":\"2022-11-12T02:03:12\",\"EditorId\":9,\"OData__CopySource\":null,\"CheckoutUserId\":9,\"OData__UIVersionString\":\"2.19\",\"GUID\":\"9a94cb88-019b-4a66-abd6-be7f5337f659\"}' }; } throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommand').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommand').callsFake(async (command): Promise => { if (command === spoListItemSetCommand) { return; } @@ -252,14 +252,14 @@ describe(commands.PAGE_SET, () => { it('promotes the page as Template', async () => { sinonUtil.restore([request.post]); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoFileGetCommand) { return { 'stdout': '{\"FileSystemObjectType\":0,\"Id\":6,\"ServerRedirectedEmbedUri\":null,\"ServerRedirectedEmbedUrl\":\"\",\"ContentTypeId\":\"0x0101009D1CB255DA76424F860D91F20E6C411800E2DAFA6353688E488147257C551A63BD\",\"ComplianceAssetId\":null,\"WikiField\":null,\"Title\":\"zzzz\",\"CanvasContent1\":\"
<\/div><\/div>\",\"BannerImageUrl\":{\"Description\":\"https:\/\/contoso.sharepoint.com\/_layouts\/15\/images\/sitepagethumbnail.png\",\"Url\":\"https:\/\/contoso.sharepoint.com\/_layouts\/15\/images\/sitepagethumbnail.png\"},\"Description\":null,\"PromotedState\":0,\"FirstPublishedDate\":\"2022-11-11T15:48:15\",\"LayoutWebpartsContent\":\"
<\/div><\/div>\",\"OData__AuthorBylineId\":[9],\"_AuthorBylineStringId\":[\"9\"],\"OData__TopicHeader\":null,\"OData__SPSitePageFlags\":null,\"OData__SPCallToAction\":null,\"OData__OriginalSourceUrl\":null,\"OData__OriginalSourceSiteId\":null,\"OData__OriginalSourceWebId\":null,\"OData__OriginalSourceListId\":null,\"OData__OriginalSourceItemId\":null,\"ID\":6,\"Created\":\"2022-11-11T15:48:00\",\"AuthorId\":9,\"Modified\":\"2022-11-12T02:03:12\",\"EditorId\":9,\"OData__CopySource\":null,\"CheckoutUserId\":9,\"OData__UIVersionString\":\"2.19\",\"GUID\":\"9a94cb88-019b-4a66-abd6-be7f5337f659\"}' }; } throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommand').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommand').callsFake(async (command): Promise => { if (command === spoListItemSetCommand) { return; } @@ -293,13 +293,13 @@ describe(commands.PAGE_SET, () => { it('updates page layout to Home and promotes it as HomePage (debug)', async () => { sinonUtil.restore([request.post]); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoFileGetCommand) { return { 'stdout': '{\"FileSystemObjectType\":0,\"Id\":6,\"ServerRedirectedEmbedUri\":null,\"ServerRedirectedEmbedUrl\":\"\",\"ContentTypeId\":\"0x0101009D1CB255DA76424F860D91F20E6C411800E2DAFA6353688E488147257C551A63BD\",\"ComplianceAssetId\":null,\"WikiField\":null,\"Title\":\"zzzz\",\"CanvasContent1\":\"
<\/div><\/div>\",\"BannerImageUrl\":{\"Description\":\"https:\/\/contoso.sharepoint.com\/_layouts\/15\/images\/sitepagethumbnail.png\",\"Url\":\"https:\/\/contoso.sharepoint.com\/_layouts\/15\/images\/sitepagethumbnail.png\"},\"Description\":null,\"PromotedState\":0,\"FirstPublishedDate\":\"2022-11-11T15:48:15\",\"LayoutWebpartsContent\":\"
<\/div><\/div>\",\"OData__AuthorBylineId\":[9],\"_AuthorBylineStringId\":[\"9\"],\"OData__TopicHeader\":null,\"OData__SPSitePageFlags\":null,\"OData__SPCallToAction\":null,\"OData__OriginalSourceUrl\":null,\"OData__OriginalSourceSiteId\":null,\"OData__OriginalSourceWebId\":null,\"OData__OriginalSourceListId\":null,\"OData__OriginalSourceItemId\":null,\"ID\":6,\"Created\":\"2022-11-11T15:48:00\",\"AuthorId\":9,\"Modified\":\"2022-11-12T02:03:12\",\"EditorId\":9,\"OData__CopySource\":null,\"CheckoutUserId\":9,\"OData__UIVersionString\":\"2.19\",\"GUID\":\"9a94cb88-019b-4a66-abd6-be7f5337f659\"}' }; } throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommand').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommand').callsFake(async (command): Promise => { if (command === spoListItemSetCommand) { return; } @@ -423,7 +423,7 @@ describe(commands.PAGE_SET, () => { it('demotes news page to a regular page', async () => { sinonUtil.restore([request.post]); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoFileGetCommand) { return { 'stdout': '{\"FileSystemObjectType\":0,\"Id\":6,\"ServerRedirectedEmbedUri\":null,\"ServerRedirectedEmbedUrl\":\"\",\"ContentTypeId\":\"0x0101009D1CB255DA76424F860D91F20E6C411800E2DAFA6353688E488147257C551A63BD\",\"ComplianceAssetId\":null,\"WikiField\":null,\"Title\":\"zzzz\",\"CanvasContent1\":\"
<\/div><\/div>\",\"BannerImageUrl\":{\"Description\":\"https:\/\/contoso.sharepoint.com\/_layouts\/15\/images\/sitepagethumbnail.png\",\"Url\":\"https:\/\/contoso.sharepoint.com\/_layouts\/15\/images\/sitepagethumbnail.png\"},\"Description\":null,\"PromotedState\":0,\"FirstPublishedDate\":\"2022-11-11T15:48:15\",\"LayoutWebpartsContent\":\"
<\/div><\/div>\",\"OData__AuthorBylineId\":[9],\"_AuthorBylineStringId\":[\"9\"],\"OData__TopicHeader\":null,\"OData__SPSitePageFlags\":null,\"OData__SPCallToAction\":null,\"OData__OriginalSourceUrl\":null,\"OData__OriginalSourceSiteId\":null,\"OData__OriginalSourceWebId\":null,\"OData__OriginalSourceListId\":null,\"OData__OriginalSourceItemId\":null,\"ID\":6,\"Created\":\"2022-11-11T15:48:00\",\"AuthorId\":9,\"Modified\":\"2022-11-12T02:03:12\",\"EditorId\":9,\"OData__CopySource\":null,\"CheckoutUserId\":9,\"OData__UIVersionString\":\"2.19\",\"GUID\":\"9a94cb88-019b-4a66-abd6-be7f5337f659\"}' }; } diff --git a/src/m365/spo/commands/page/page-set.ts b/src/m365/spo/commands/page/page-set.ts index 995514c0a35..a3d8aac1102 100644 --- a/src/m365/spo/commands/page/page-set.ts +++ b/src/m365/spo/commands/page/page-set.ts @@ -1,5 +1,5 @@ import { Auth } from '../../../../Auth.js'; -import { Cli, CommandOutput } from '../../../../cli/Cli.js'; +import { cli, CommandOutput } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import Command from '../../../../Command.js'; import GlobalOptions from '../../../../GlobalOptions.js'; @@ -210,7 +210,7 @@ class SpoPageSetCommand extends SpoCommand { listItemSetOptions.PromotedState = 0; listItemSetOptions.BannerImageUrl = `${resource}/_layouts/15/images/sitepagethumbnail.png, /_layouts/15/images/sitepagethumbnail.png`; } - await Cli.executeCommand(spoListItemSetCommand as Command, { options: { ...listItemSetOptions, _: [] } }); + await cli.executeCommand(spoListItemSetCommand as Command, { options: { ...listItemSetOptions, _: [] } }); } if (args.options.promoteAs) { const requestOptions: CliRequestOptions = { @@ -244,7 +244,7 @@ class SpoPageSetCommand extends SpoCommand { verbose: this.verbose, debug: this.debug }; - await Cli.executeCommand(spoListItemSetCommand as Command, { options: { ...listItemSetOptions, _: [] } }); + await cli.executeCommand(spoListItemSetCommand as Command, { options: { ...listItemSetOptions, _: [] } }); break; case 'Template': const templateItemId = await this.getFileListItemId(args.options.webUrl, serverRelativeFileUrl); @@ -360,7 +360,7 @@ class SpoPageSetCommand extends SpoCommand { verbose: this.verbose, debug: this.debug }; - await Cli.executeCommandWithOutput(spoListItemSetCommand as Command, { options: { ...listItemSetOptions, _: [] } }); + await cli.executeCommandWithOutput(spoListItemSetCommand as Command, { options: { ...listItemSetOptions, _: [] } }); } let requestOptions: CliRequestOptions; @@ -407,7 +407,7 @@ class SpoPageSetCommand extends SpoCommand { verbose: this.verbose, debug: this.debug }; - const fileGetOutput: CommandOutput = await Cli.executeCommandWithOutput(spoFileGetCommand as Command, { options: { ...fileGetOptions, _: [] } }); + const fileGetOutput: CommandOutput = await cli.executeCommandWithOutput(spoFileGetCommand as Command, { options: { ...fileGetOptions, _: [] } }); const fileGetOutputJson = JSON.parse(fileGetOutput.stdout); return fileGetOutputJson.Id; } diff --git a/src/m365/spo/commands/page/page-template-list.spec.ts b/src/m365/spo/commands/page/page-template-list.spec.ts index fc5d25de42b..04fd3ad0dd0 100644 --- a/src/m365/spo/commands/page/page-template-list.spec.ts +++ b/src/m365/spo/commands/page/page-template-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -26,7 +26,7 @@ describe(commands.PAGE_TEMPLATE_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/page/page-text-add.spec.ts b/src/m365/spo/commands/page/page-text-add.spec.ts index a49aefd101d..3b143157b52 100644 --- a/src/m365/spo/commands/page/page-text-add.spec.ts +++ b/src/m365/spo/commands/page/page-text-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -33,7 +33,7 @@ describe(commands.PAGE_TEXT_ADD, () => { WebFullUrl: 'https://contoso.sharepoint.com' }); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/propertybag/propertybag-get.spec.ts b/src/m365/spo/commands/propertybag/propertybag-get.spec.ts index 82a7425a73e..d8ac3d8549c 100644 --- a/src/m365/spo/commands/propertybag/propertybag-get.spec.ts +++ b/src/m365/spo/commands/propertybag/propertybag-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -102,7 +102,7 @@ describe(commands.PROPERTYBAG_GET, () => { WebFullUrl: 'https://contoso.sharepoint.com' }); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/propertybag/propertybag-list.spec.ts b/src/m365/spo/commands/propertybag/propertybag-list.spec.ts index 024c574f569..d74d1e14f0a 100644 --- a/src/m365/spo/commands/propertybag/propertybag-list.spec.ts +++ b/src/m365/spo/commands/propertybag/propertybag-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -100,7 +100,7 @@ describe(commands.PROPERTYBAG_LIST, () => { WebFullUrl: 'https://contoso.sharepoint.com' }); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/propertybag/propertybag-remove.spec.ts b/src/m365/spo/commands/propertybag/propertybag-remove.spec.ts index 64cb31c545d..e2445cc4b89 100644 --- a/src/m365/spo/commands/propertybag/propertybag-remove.spec.ts +++ b/src/m365/spo/commands/propertybag/propertybag-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -17,7 +17,6 @@ import command from './propertybag-remove.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.PROPERTYBAG_REMOVE, () => { - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; @@ -92,7 +91,6 @@ describe(commands.PROPERTYBAG_REMOVE, () => { }; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); @@ -104,7 +102,7 @@ describe(commands.PROPERTYBAG_REMOVE, () => { WebFullUrl: 'https://contoso.sharepoint.com' }); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -121,7 +119,7 @@ describe(commands.PROPERTYBAG_REMOVE, () => { } }; loggerLogSpy = sinon.spy(logger, 'log'); - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -133,7 +131,7 @@ describe(commands.PROPERTYBAG_REMOVE, () => { request.post, (command as any).removePropertyWithIdentityResp, (command as any).removeProperty, - Cli.promptForConfirmation, + cli.promptForConfirmation, cli.getSettingWithDefaultValue ]); }); @@ -180,8 +178,8 @@ describe(commands.PROPERTYBAG_REMOVE, () => { it('should abort property remove when prompt not confirmed', async () => { const postCallsSpy: sinon.SinonStub = stubAllPostRequests(); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { webUrl: 'https://contoso.sharepoint.com', @@ -195,8 +193,8 @@ describe(commands.PROPERTYBAG_REMOVE, () => { const postCallsSpy: sinon.SinonStub = stubAllPostRequests(); const removePropertySpy = sinon.spy((command as any), 'removeProperty'); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { webUrl: 'https://contoso.sharepoint.com', diff --git a/src/m365/spo/commands/propertybag/propertybag-remove.ts b/src/m365/spo/commands/propertybag/propertybag-remove.ts index 2ef06cd0202..3ba629b43d5 100644 --- a/src/m365/spo/commands/propertybag/propertybag-remove.ts +++ b/src/m365/spo/commands/propertybag/propertybag-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import config from '../../../../config.js'; import GlobalOptions from '../../../../GlobalOptions.js'; @@ -74,7 +74,7 @@ class SpoPropertyBagRemoveCommand extends SpoPropertyBagBaseCommand { await this.removeProperty(args); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the ${args.options.key} property?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the ${args.options.key} property?` }); if (result) { await this.removeProperty(args); diff --git a/src/m365/spo/commands/propertybag/propertybag-set.spec.ts b/src/m365/spo/commands/propertybag/propertybag-set.spec.ts index f7900a915a9..264837b86b3 100644 --- a/src/m365/spo/commands/propertybag/propertybag-set.spec.ts +++ b/src/m365/spo/commands/propertybag/propertybag-set.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -17,7 +17,6 @@ import command from './propertybag-set.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.PROPERTYBAG_SET, () => { - let cli: Cli; let log: string[]; let logger: Logger; let commandInfo: CommandInfo; @@ -116,7 +115,6 @@ describe(commands.PROPERTYBAG_SET, () => { }; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); @@ -128,7 +126,7 @@ describe(commands.PROPERTYBAG_SET, () => { WebFullUrl: 'https://contoso.sharepoint.com' }); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/roledefinition/roledefinition-add.spec.ts b/src/m365/spo/commands/roledefinition/roledefinition-add.spec.ts index 21657b7578b..e1221eeffe4 100644 --- a/src/m365/spo/commands/roledefinition/roledefinition-add.spec.ts +++ b/src/m365/spo/commands/roledefinition/roledefinition-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -24,7 +24,7 @@ describe(commands.ROLEDEFINITION_ADD, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/roledefinition/roledefinition-get.spec.ts b/src/m365/spo/commands/roledefinition/roledefinition-get.spec.ts index 37cee0a3824..e7ceaa358b0 100644 --- a/src/m365/spo/commands/roledefinition/roledefinition-get.spec.ts +++ b/src/m365/spo/commands/roledefinition/roledefinition-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -25,7 +25,7 @@ describe(commands.ROLEDEFINITION_GET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/roledefinition/roledefinition-list.spec.ts b/src/m365/spo/commands/roledefinition/roledefinition-list.spec.ts index e9fc62bcda9..b0bf3ca7df6 100644 --- a/src/m365/spo/commands/roledefinition/roledefinition-list.spec.ts +++ b/src/m365/spo/commands/roledefinition/roledefinition-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -25,7 +25,7 @@ describe(commands.ROLEDEFINITION_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/roledefinition/roledefinition-remove.spec.ts b/src/m365/spo/commands/roledefinition/roledefinition-remove.spec.ts index 0587744649b..b67f5410e0a 100644 --- a/src/m365/spo/commands/roledefinition/roledefinition-remove.spec.ts +++ b/src/m365/spo/commands/roledefinition/roledefinition-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -26,7 +26,7 @@ describe(commands.ROLEDEFINITION_REMOVE, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -43,7 +43,7 @@ describe(commands.ROLEDEFINITION_REMOVE, () => { } }; requests = []; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -54,7 +54,7 @@ describe(commands.ROLEDEFINITION_REMOVE, () => { afterEach(() => { sinonUtil.restore([ request.delete, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -118,8 +118,8 @@ describe(commands.ROLEDEFINITION_REMOVE, () => { }); it('aborts removing role definition when prompt not confirmed', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { webUrl: 'https://contoso.sharepoint.com', id: 1 } }); assert(requests.length === 0); }); @@ -139,8 +139,8 @@ describe(commands.ROLEDEFINITION_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { debug: true, webUrl: 'https://contoso.sharepoint.com', id: 1 } }); let correctRequestIssued = false; requests.forEach(r => { diff --git a/src/m365/spo/commands/roledefinition/roledefinition-remove.ts b/src/m365/spo/commands/roledefinition/roledefinition-remove.ts index e01e5aa38e2..c4f1bc6d3d0 100644 --- a/src/m365/spo/commands/roledefinition/roledefinition-remove.ts +++ b/src/m365/spo/commands/roledefinition/roledefinition-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -73,7 +73,7 @@ class SpoRoleDefinitionRemoveCommand extends SpoCommand { await this.removeRoleDefinition(logger, args); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the role definition with id ${args.options.id} from site ${args.options.webUrl}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the role definition with id ${args.options.id} from site ${args.options.webUrl}?` }); if (result) { await this.removeRoleDefinition(logger, args); diff --git a/src/m365/spo/commands/serviceprincipal/serviceprincipal-permissionrequest-approve.spec.ts b/src/m365/spo/commands/serviceprincipal/serviceprincipal-permissionrequest-approve.spec.ts index 301270eba89..07617ebbeb5 100644 --- a/src/m365/spo/commands/serviceprincipal/serviceprincipal-permissionrequest-approve.spec.ts +++ b/src/m365/spo/commands/serviceprincipal/serviceprincipal-permissionrequest-approve.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -36,7 +36,7 @@ describe(commands.SERVICEPRINCIPAL_PERMISSIONREQUEST_APPROVE, () => { }); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -58,7 +58,7 @@ describe(commands.SERVICEPRINCIPAL_PERMISSIONREQUEST_APPROVE, () => { afterEach(() => { sinonUtil.restore([ request.post, - Cli.executeCommandWithOutput + cli.executeCommandWithOutput ]); }); @@ -149,7 +149,7 @@ describe(commands.SERVICEPRINCIPAL_PERMISSIONREQUEST_APPROVE, () => { }); it('approves all the specified permission request', async () => { - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoServicePrincipalPermissionRequestListCommand) { return ({ stdout: `[ @@ -234,7 +234,7 @@ describe(commands.SERVICEPRINCIPAL_PERMISSIONREQUEST_APPROVE, () => { }); it('approves all the permission request by resource', async () => { - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoServicePrincipalPermissionRequestListCommand) { return ({ stdout: `[ diff --git a/src/m365/spo/commands/serviceprincipal/serviceprincipal-permissionrequest-approve.ts b/src/m365/spo/commands/serviceprincipal/serviceprincipal-permissionrequest-approve.ts index 687332d7a0d..d3e4d89720d 100644 --- a/src/m365/spo/commands/serviceprincipal/serviceprincipal-permissionrequest-approve.ts +++ b/src/m365/spo/commands/serviceprincipal/serviceprincipal-permissionrequest-approve.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import Command from '../../../../Command.js'; import config from '../../../../config.js'; @@ -120,7 +120,7 @@ class SpoServicePrincipalPermissionRequestApproveCommand extends SpoCommand { verbose: this.verbose }; - const output = await Cli.executeCommandWithOutput(spoServicePrincipalPermissionRequestListCommand as Command, { options: { ...options, _: [] } }); + const output = await cli.executeCommandWithOutput(spoServicePrincipalPermissionRequestListCommand as Command, { options: { ...options, _: [] } }); const getPermissionRequestsOutput = JSON.parse(output.stdout); if (args.options.resource) { return getPermissionRequestsOutput.filter((x: any) => x.Resource === args.options.resource).map((x: any) => { return x.Id; }); diff --git a/src/m365/spo/commands/serviceprincipal/serviceprincipal-permissionrequest-deny.spec.ts b/src/m365/spo/commands/serviceprincipal/serviceprincipal-permissionrequest-deny.spec.ts index 9c468979d73..9d0dca8b5f1 100644 --- a/src/m365/spo/commands/serviceprincipal/serviceprincipal-permissionrequest-deny.spec.ts +++ b/src/m365/spo/commands/serviceprincipal/serviceprincipal-permissionrequest-deny.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -35,7 +35,7 @@ describe(commands.SERVICEPRINCIPAL_PERMISSIONREQUEST_DENY, () => { }); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/serviceprincipal/serviceprincipal-set.spec.ts b/src/m365/spo/commands/serviceprincipal/serviceprincipal-set.spec.ts index 3cbb369d6b5..08c9b882230 100644 --- a/src/m365/spo/commands/serviceprincipal/serviceprincipal-set.spec.ts +++ b/src/m365/spo/commands/serviceprincipal/serviceprincipal-set.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -35,7 +35,7 @@ describe(commands.SERVICEPRINCIPAL_SET, () => { }); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -52,7 +52,7 @@ describe(commands.SERVICEPRINCIPAL_SET, () => { } }; loggerLogSpy = sinon.spy(logger, 'log'); - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -63,7 +63,7 @@ describe(commands.SERVICEPRINCIPAL_SET, () => { afterEach(() => { sinonUtil.restore([ request.post, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -202,8 +202,8 @@ describe(commands.SERVICEPRINCIPAL_SET, () => { it('aborts enabling service principal when prompt not confirmed', async () => { const requestPostSpy = sinon.spy(request, 'post'); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { enabled: true } }); assert(requestPostSpy.notCalled); }); @@ -221,8 +221,8 @@ describe(commands.SERVICEPRINCIPAL_SET, () => { } ])); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { enabled: true } }); assert(loggerLogSpy.calledWith({ AccountEnabled: true, diff --git a/src/m365/spo/commands/serviceprincipal/serviceprincipal-set.ts b/src/m365/spo/commands/serviceprincipal/serviceprincipal-set.ts index d2ffaa35160..1205c96b85f 100644 --- a/src/m365/spo/commands/serviceprincipal/serviceprincipal-set.ts +++ b/src/m365/spo/commands/serviceprincipal/serviceprincipal-set.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import config from '../../../../config.js'; import GlobalOptions from '../../../../GlobalOptions.js'; @@ -66,7 +66,7 @@ class SpoServicePrincipalSetCommand extends SpoCommand { await this.toggleServicePrincipal(logger, args); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to ${args.options.enabled ? 'enable' : 'disable'} the service principal?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to ${args.options.enabled ? 'enable' : 'disable'} the service principal?` }); if (result) { await this.toggleServicePrincipal(logger, args); diff --git a/src/m365/spo/commands/site/site-add.spec.ts b/src/m365/spo/commands/site/site-add.spec.ts index b1cd42fa37f..12b6db0ad13 100644 --- a/src/m365/spo/commands/site/site-add.spec.ts +++ b/src/m365/spo/commands/site/site-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { @@ -31,7 +31,7 @@ describe(commands.SITE_ADD, () => { sinon.stub(session, 'getId').callsFake(() => ''); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/site/site-appcatalog-add.spec.ts b/src/m365/spo/commands/site/site-appcatalog-add.spec.ts index 6e24feaa086..9bdc8eb4b06 100644 --- a/src/m365/spo/commands/site/site-appcatalog-add.spec.ts +++ b/src/m365/spo/commands/site/site-appcatalog-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -17,14 +17,12 @@ import command from './site-appcatalog-add.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.SITE_APPCATALOG_ADD, () => { - let cli: Cli; let log: any[]; let logger: Logger; let loggerLogToStderrSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); @@ -37,7 +35,7 @@ describe(commands.SITE_APPCATALOG_ADD, () => { }); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/site/site-appcatalog-remove.spec.ts b/src/m365/spo/commands/site/site-appcatalog-remove.spec.ts index 26870e6cea4..6d606bade96 100644 --- a/src/m365/spo/commands/site/site-appcatalog-remove.spec.ts +++ b/src/m365/spo/commands/site/site-appcatalog-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -17,14 +17,12 @@ import command from './site-appcatalog-remove.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.SITE_APPCATALOG_REMOVE, () => { - let cli: Cli; let log: any[]; let logger: Logger; let loggerLogToStderrSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); @@ -37,7 +35,7 @@ describe(commands.SITE_APPCATALOG_REMOVE, () => { }); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/site/site-apppermission-add.spec.ts b/src/m365/spo/commands/site/site-apppermission-add.spec.ts index ab257dd4731..d6a2fd57619 100644 --- a/src/m365/spo/commands/site/site-apppermission-add.spec.ts +++ b/src/m365/spo/commands/site/site-apppermission-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,7 +15,6 @@ import command from './site-apppermission-add.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.SITE_APPPERMISSION_ADD, () => { - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; @@ -26,14 +25,13 @@ describe(commands.SITE_APPPERMISSION_ADD, () => { //#endregion before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/site/site-apppermission-get.spec.ts b/src/m365/spo/commands/site/site-apppermission-get.spec.ts index 3bba5b37049..955b306e5ef 100644 --- a/src/m365/spo/commands/site/site-apppermission-get.spec.ts +++ b/src/m365/spo/commands/site/site-apppermission-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -25,7 +25,7 @@ describe(commands.SITE_APPPERMISSION_GET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/site/site-apppermission-list.spec.ts b/src/m365/spo/commands/site/site-apppermission-list.spec.ts index 27068fae3c5..891514d97e6 100644 --- a/src/m365/spo/commands/site/site-apppermission-list.spec.ts +++ b/src/m365/spo/commands/site/site-apppermission-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -25,7 +25,7 @@ describe(commands.SITE_APPPERMISSION_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/site/site-apppermission-remove.spec.ts b/src/m365/spo/commands/site/site-apppermission-remove.spec.ts index fceacce1211..6569a9ca44a 100644 --- a/src/m365/spo/commands/site/site-apppermission-remove.spec.ts +++ b/src/m365/spo/commands/site/site-apppermission-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,7 +15,6 @@ import command from './site-apppermission-remove.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.SITE_APPPERMISSION_REMOVE, () => { - let cli: Cli; let log: string[]; let logger: Logger; let commandInfo: CommandInfo; @@ -60,13 +59,12 @@ describe(commands.SITE_APPPERMISSION_REMOVE, () => { }; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -83,7 +81,7 @@ describe(commands.SITE_APPPERMISSION_REMOVE, () => { } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -103,7 +101,7 @@ describe(commands.SITE_APPPERMISSION_REMOVE, () => { request.get, request.delete, global.setTimeout, - Cli.promptForConfirmation, + cli.promptForConfirmation, cli.getSettingWithDefaultValue ]); }); @@ -263,9 +261,9 @@ describe(commands.SITE_APPPERMISSION_REMOVE, () => { }); it('aborts removing the site apppermission when prompt not confirmed', async () => { - sinonUtil.restore(Cli.promptForConfirmation); + sinonUtil.restore(cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { @@ -277,9 +275,9 @@ describe(commands.SITE_APPPERMISSION_REMOVE, () => { }); it('removes site apppermission when prompt confirmed (debug)', async () => { - sinonUtil.restore(Cli.promptForConfirmation); + sinonUtil.restore(cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinon.stub(cli, 'promptForConfirmation').resolves(true); const getRequestStub = sinon.stub(request, 'get'); getRequestStub.onCall(0) @@ -309,9 +307,9 @@ describe(commands.SITE_APPPERMISSION_REMOVE, () => { }); it('removes site apppermission with specified appId', async () => { - sinonUtil.restore(Cli.promptForConfirmation); + sinonUtil.restore(cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinon.stub(cli, 'promptForConfirmation').resolves(true); const getRequestStub = sinon.stub(request, 'get'); getRequestStub.onCall(0) @@ -341,9 +339,9 @@ describe(commands.SITE_APPPERMISSION_REMOVE, () => { }); it('removes site apppermission with specified appDisplayName', async () => { - sinonUtil.restore(Cli.promptForConfirmation); + sinonUtil.restore(cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinon.stub(cli, 'promptForConfirmation').resolves(true); const getRequestStub = sinon.stub(request, 'get'); getRequestStub.onCall(0) diff --git a/src/m365/spo/commands/site/site-apppermission-remove.ts b/src/m365/spo/commands/site/site-apppermission-remove.ts index e8e496b1113..0893d069d66 100644 --- a/src/m365/spo/commands/site/site-apppermission-remove.ts +++ b/src/m365/spo/commands/site/site-apppermission-remove.ts @@ -1,5 +1,5 @@ import { IdentitySet, Permission } from '@microsoft/microsoft-graph-types'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request from '../../../../request.js'; @@ -144,7 +144,7 @@ class SpoSiteAppPermissionRemoveCommand extends GraphCommand { await this.removeSiteAppPermission(logger, args.options); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the specified application permission from site ${args.options.siteUrl}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the specified application permission from site ${args.options.siteUrl}?` }); if (result) { await this.removeSiteAppPermission(logger, args.options); diff --git a/src/m365/spo/commands/site/site-apppermission-set.spec.ts b/src/m365/spo/commands/site/site-apppermission-set.spec.ts index 30059f5dbed..767a419d76e 100644 --- a/src/m365/spo/commands/site/site-apppermission-set.spec.ts +++ b/src/m365/spo/commands/site/site-apppermission-set.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,21 +15,19 @@ import command from './site-apppermission-set.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.SITE_APPPERMISSION_SET, () => { - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/site/site-chrome-set.spec.ts b/src/m365/spo/commands/site/site-chrome-set.spec.ts index d4c9c3bca53..3f859732454 100644 --- a/src/m365/spo/commands/site/site-chrome-set.spec.ts +++ b/src/m365/spo/commands/site/site-chrome-set.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -24,7 +24,7 @@ describe(commands.SITE_CHROME_SET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/site/site-commsite-enable.spec.ts b/src/m365/spo/commands/site/site-commsite-enable.spec.ts index b49cb0130c7..4262ba91085 100644 --- a/src/m365/spo/commands/site/site-commsite-enable.spec.ts +++ b/src/m365/spo/commands/site/site-commsite-enable.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -15,20 +15,18 @@ import command from './site-commsite-enable.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.SITE_COMMSITE_ENABLE, () => { - let cli: Cli; let log: any[]; let logger: Logger; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').resolves(); sinon.stub(pid, 'getProcessName').resolves(); sinon.stub(session, 'getId').resolves(); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); - sinon.stub(Cli.getInstance(), 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { + commandInfo = cli.getCommandInfo(command); + sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { if (settingName === 'prompt') { return false; } diff --git a/src/m365/spo/commands/site/site-get.spec.ts b/src/m365/spo/commands/site/site-get.spec.ts index 097f18ebcba..ae029d16a6d 100644 --- a/src/m365/spo/commands/site/site-get.spec.ts +++ b/src/m365/spo/commands/site/site-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -25,7 +25,7 @@ describe(commands.SITE_GET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/site/site-groupify.spec.ts b/src/m365/spo/commands/site/site-groupify.spec.ts index 4c856c96c82..eff6a5700e5 100644 --- a/src/m365/spo/commands/site/site-groupify.spec.ts +++ b/src/m365/spo/commands/site/site-groupify.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -25,7 +25,7 @@ describe(commands.SITE_GROUPIFY, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/site/site-hubsite-connect.spec.ts b/src/m365/spo/commands/site/site-hubsite-connect.spec.ts index 0d376d5875a..4ee1d732ff0 100644 --- a/src/m365/spo/commands/site/site-hubsite-connect.spec.ts +++ b/src/m365/spo/commands/site/site-hubsite-connect.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -32,7 +32,7 @@ describe(commands.SITE_HUBSITE_CONNECT, () => { WebFullUrl: 'https://contoso.sharepoint.com' }); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/site/site-hubsite-disconnect.spec.ts b/src/m365/spo/commands/site/site-hubsite-disconnect.spec.ts index 93246bc3caa..21176ab6b3f 100644 --- a/src/m365/spo/commands/site/site-hubsite-disconnect.spec.ts +++ b/src/m365/spo/commands/site/site-hubsite-disconnect.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -34,7 +34,7 @@ describe(commands.SITE_HUBSITE_DISCONNECT, () => { WebFullUrl: 'https://contoso.sharepoint.com' }); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -52,7 +52,7 @@ describe(commands.SITE_HUBSITE_DISCONNECT, () => { }; loggerLogSpy = sinon.spy(logger, 'log'); loggerLogToStderrSpy = sinon.spy(logger, 'logToStderr'); - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -63,7 +63,7 @@ describe(commands.SITE_HUBSITE_DISCONNECT, () => { afterEach(() => { sinonUtil.restore([ request.post, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -118,8 +118,8 @@ describe(commands.SITE_HUBSITE_DISCONNECT, () => { it('aborts disconnecting site from its hub site when prompt not confirmed', async () => { const postSpy = sinon.spy(request, 'post'); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { siteUrl: 'https://contoso.sharepoint.com/sites/Sales' } }); assert(postSpy.notCalled); }); @@ -130,8 +130,8 @@ describe(commands.SITE_HUBSITE_DISCONNECT, () => { "odata.null": true }); }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { siteUrl: 'https://contoso.sharepoint.com/sites/Sales' } }); assert(postStub.called); }); diff --git a/src/m365/spo/commands/site/site-hubsite-disconnect.ts b/src/m365/spo/commands/site/site-hubsite-disconnect.ts index b9f6f7132fe..ae2527879d5 100644 --- a/src/m365/spo/commands/site/site-hubsite-disconnect.ts +++ b/src/m365/spo/commands/site/site-hubsite-disconnect.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -63,7 +63,7 @@ class SpoSiteHubSiteDisconnectCommand extends SpoCommand { await this.disconnectHubSite(logger, args); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to disconnect the site collection ${args.options.siteUrl} from its hub site?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to disconnect the site collection ${args.options.siteUrl} from its hub site?` }); if (result) { await this.disconnectHubSite(logger, args); diff --git a/src/m365/spo/commands/site/site-hubsite-theme-sync.spec.ts b/src/m365/spo/commands/site/site-hubsite-theme-sync.spec.ts index 4546f5bc89a..9b29f40d18e 100644 --- a/src/m365/spo/commands/site/site-hubsite-theme-sync.spec.ts +++ b/src/m365/spo/commands/site/site-hubsite-theme-sync.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -26,7 +26,7 @@ describe(commands.SITE_HUBSITE_THEME_SYNC, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/site/site-inplacerecordsmanagement-set.spec.ts b/src/m365/spo/commands/site/site-inplacerecordsmanagement-set.spec.ts index 7881be49e9c..e0f0d47439e 100644 --- a/src/m365/spo/commands/site/site-inplacerecordsmanagement-set.spec.ts +++ b/src/m365/spo/commands/site/site-inplacerecordsmanagement-set.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -24,7 +24,7 @@ describe(commands.SITE_INPLACERECORDSMANAGEMENT_SET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/site/site-list.spec.ts b/src/m365/spo/commands/site/site-list.spec.ts index fa11fcf5de8..2b4509ba641 100644 --- a/src/m365/spo/commands/site/site-list.spec.ts +++ b/src/m365/spo/commands/site/site-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -29,7 +29,7 @@ describe(commands.SITE_LIST, () => { sinon.stub(spo, 'getRequestDigest').resolves({ FormDigestValue: 'abc', FormDigestTimeoutSeconds: 1800, FormDigestExpiresAt: new Date(), WebFullUrl: 'https://contoso.sharepoint.com' }); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/site/site-recyclebinitem-clear.spec.ts b/src/m365/spo/commands/site/site-recyclebinitem-clear.spec.ts index f3ac0ab9ff4..15e1cf9e1b8 100644 --- a/src/m365/spo/commands/site/site-recyclebinitem-clear.spec.ts +++ b/src/m365/spo/commands/site/site-recyclebinitem-clear.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -26,7 +26,7 @@ describe(commands.SITE_RECYCLEBINITEM_CLEAR, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -42,7 +42,7 @@ describe(commands.SITE_RECYCLEBINITEM_CLEAR, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -53,7 +53,7 @@ describe(commands.SITE_RECYCLEBINITEM_CLEAR, () => { afterEach(() => { sinonUtil.restore([ request.post, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -141,8 +141,8 @@ describe(commands.SITE_RECYCLEBINITEM_CLEAR, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { diff --git a/src/m365/spo/commands/site/site-recyclebinitem-clear.ts b/src/m365/spo/commands/site/site-recyclebinitem-clear.ts index 65ba01fbfa4..09f101a0643 100644 --- a/src/m365/spo/commands/site/site-recyclebinitem-clear.ts +++ b/src/m365/spo/commands/site/site-recyclebinitem-clear.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -74,7 +74,7 @@ class SpoSiteRecycleBinItemClearCommand extends SpoCommand { await this.clearRecycleBin(args, logger); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to clear the recycle bin of site ${args.options.siteUrl}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to clear the recycle bin of site ${args.options.siteUrl}?` }); if (result) { await this.clearRecycleBin(args, logger); diff --git a/src/m365/spo/commands/site/site-recyclebinitem-list.spec.ts b/src/m365/spo/commands/site/site-recyclebinitem-list.spec.ts index 4a94fc01e06..73741a302be 100644 --- a/src/m365/spo/commands/site/site-recyclebinitem-list.spec.ts +++ b/src/m365/spo/commands/site/site-recyclebinitem-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -26,7 +26,7 @@ describe(commands.SITE_RECYCLEBINITEM_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/site/site-recyclebinitem-move.spec.ts b/src/m365/spo/commands/site/site-recyclebinitem-move.spec.ts index e738f3e5880..445722c857a 100644 --- a/src/m365/spo/commands/site/site-recyclebinitem-move.spec.ts +++ b/src/m365/spo/commands/site/site-recyclebinitem-move.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -26,7 +26,7 @@ describe(commands.SITE_RECYCLEBINITEM_MOVE, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -42,7 +42,7 @@ describe(commands.SITE_RECYCLEBINITEM_MOVE, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -53,7 +53,7 @@ describe(commands.SITE_RECYCLEBINITEM_MOVE, () => { afterEach(() => { sinonUtil.restore([ request.post, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -147,8 +147,8 @@ describe(commands.SITE_RECYCLEBINITEM_MOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { diff --git a/src/m365/spo/commands/site/site-recyclebinitem-move.ts b/src/m365/spo/commands/site/site-recyclebinitem-move.ts index 632a2cbcff4..4e7b07ada01 100644 --- a/src/m365/spo/commands/site/site-recyclebinitem-move.ts +++ b/src/m365/spo/commands/site/site-recyclebinitem-move.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -90,7 +90,7 @@ class SpoSiteRecycleBinItemMoveCommand extends SpoCommand { await this.moveRecycleBinItem(args, logger); } else { - const result = await Cli.promptForConfirmation({ message: 'Are you sure you want to move these items to the second-stage recycle bin?' }); + const result = await cli.promptForConfirmation({ message: 'Are you sure you want to move these items to the second-stage recycle bin?' }); if (result) { await this.moveRecycleBinItem(args, logger); diff --git a/src/m365/spo/commands/site/site-recyclebinitem-remove.spec.ts b/src/m365/spo/commands/site/site-recyclebinitem-remove.spec.ts index b655f874ee4..58530b62044 100644 --- a/src/m365/spo/commands/site/site-recyclebinitem-remove.spec.ts +++ b/src/m365/spo/commands/site/site-recyclebinitem-remove.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -26,7 +26,7 @@ describe(commands.SITE_RECYCLEBINITEM_REMOVE, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -42,7 +42,7 @@ describe(commands.SITE_RECYCLEBINITEM_REMOVE, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -53,7 +53,7 @@ describe(commands.SITE_RECYCLEBINITEM_REMOVE, () => { afterEach(() => { sinonUtil.restore([ request.post, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -140,8 +140,8 @@ describe(commands.SITE_RECYCLEBINITEM_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { diff --git a/src/m365/spo/commands/site/site-recyclebinitem-remove.ts b/src/m365/spo/commands/site/site-recyclebinitem-remove.ts index 9baa0b6afc0..f42b00ca456 100644 --- a/src/m365/spo/commands/site/site-recyclebinitem-remove.ts +++ b/src/m365/spo/commands/site/site-recyclebinitem-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -77,7 +77,7 @@ class SpoSiteRecycleBinItemRemoveCommand extends SpoCommand { await this.removeRecycleBinItem(args, logger); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to permanently delete ${args.options.ids.split(',').length} item(s) from the site recycle bin?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to permanently delete ${args.options.ids.split(',').length} item(s) from the site recycle bin?` }); if (result) { await this.removeRecycleBinItem(args, logger); diff --git a/src/m365/spo/commands/site/site-recyclebinitem-restore.spec.ts b/src/m365/spo/commands/site/site-recyclebinitem-restore.spec.ts index b636dcd58fc..72e9ff43fc8 100644 --- a/src/m365/spo/commands/site/site-recyclebinitem-restore.spec.ts +++ b/src/m365/spo/commands/site/site-recyclebinitem-restore.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -24,7 +24,7 @@ describe(commands.SITE_RECYCLEBINITEM_RESTORE, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/site/site-remove.spec.ts b/src/m365/spo/commands/site/site-remove.spec.ts index 27643cb79ba..4f135429355 100644 --- a/src/m365/spo/commands/site/site-remove.spec.ts +++ b/src/m365/spo/commands/site/site-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -30,7 +30,7 @@ describe(commands.SITE_REMOVE, () => { sinon.stub(session, 'getId').returns(''); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -52,7 +52,7 @@ describe(commands.SITE_REMOVE, () => { loggerLogSpy = sinon.spy(logger, 'log'); loggerLogToStderrSpy = sinon.spy(logger, 'logToStderr'); requests = []; - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinon.stub(cli, 'promptForConfirmation').resolves(false); }); afterEach(() => { @@ -63,7 +63,7 @@ describe(commands.SITE_REMOVE, () => { request.delete, global.setTimeout, spo.ensureFormDigest, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -140,8 +140,8 @@ describe(commands.SITE_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { url: 'https://contoso.sharepoint.com/sites/demosite', debug: true, verbose: true } }); assert(loggerLogToStderrSpy.called); }); @@ -978,8 +978,8 @@ describe(commands.SITE_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { url: 'https://contoso.sharepoint.com/sites/demositeGrouped', debug: true, verbose: true, skipRecycleBin: true } }); }); @@ -1074,8 +1074,8 @@ describe(commands.SITE_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); sinon.stub(global, 'setTimeout').callsFake((fn) => { fn(); diff --git a/src/m365/spo/commands/site/site-remove.ts b/src/m365/spo/commands/site/site-remove.ts index cf9f02fd586..3b8cd0ffca9 100644 --- a/src/m365/spo/commands/site/site-remove.ts +++ b/src/m365/spo/commands/site/site-remove.ts @@ -1,5 +1,5 @@ import chalk from 'chalk'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import config from '../../../../config.js'; import GlobalOptions from '../../../../GlobalOptions.js'; @@ -85,7 +85,7 @@ class SpoSiteRemoveCommand extends SpoCommand { await this.removeSite(logger, args); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the site ${args.options.url}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the site ${args.options.url}?` }); if (result) { await this.removeSite(logger, args); diff --git a/src/m365/spo/commands/site/site-rename.spec.ts b/src/m365/spo/commands/site/site-rename.spec.ts index e0386c0f105..686746cde21 100644 --- a/src/m365/spo/commands/site/site-rename.spec.ts +++ b/src/m365/spo/commands/site/site-rename.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -16,7 +16,6 @@ import command from './site-rename.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.SITE_RENAME, () => { - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; @@ -24,7 +23,6 @@ describe(commands.SITE_RENAME, () => { let loggerLogToStderrSpy: sinon.SinonSpy; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); @@ -35,7 +33,7 @@ describe(commands.SITE_RENAME, () => { }); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/site/site-set.spec.ts b/src/m365/spo/commands/site/site-set.spec.ts index 7ca395c5f02..4b7d204c421 100644 --- a/src/m365/spo/commands/site/site-set.spec.ts +++ b/src/m365/spo/commands/site/site-set.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -37,7 +37,7 @@ describe(commands.SITE_SET, () => { WebFullUrl: 'https://contoso.sharepoint.com' }); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); auth.service.spoUrl = 'https://contoso.sharepoint.com'; auth.service.tenantId = 'a61d499e-50aa-5000-8242-7169ab88ce08|908bed80-a04a-4433-b4a0-883d9847d110:67753f63-bc14-4012-869e-f808a43fe023 Tenant'; }); @@ -64,7 +64,7 @@ describe(commands.SITE_SET, () => { sinonUtil.restore([ request.post, request.get, - Cli.executeCommand, + cli.executeCommand, global.setTimeout, spo.getSpoAdminUrl ]); @@ -661,7 +661,7 @@ describe(commands.SITE_SET, () => { throw 'Invalid request'; }); - executeCommandSpy = sinon.stub(Cli, 'executeCommand').callsFake(() => Promise.resolve()); + executeCommandSpy = sinon.stub(cli, 'executeCommand').callsFake(() => Promise.resolve()); sinon.stub(request, 'patch').callsFake(async (opts) => { if (opts.url === 'https://graph.microsoft.com/v1.0/groups/e10a459e-60c8-4000-8240-a68d6a12d39e') { return; @@ -2154,7 +2154,7 @@ describe(commands.SITE_SET, () => { throw 'Invalid request'; }); - executeCommandSpy = sinon.stub(Cli, 'executeCommand').callsFake(() => Promise.reject(new CommandError('An error has occurred'))); + executeCommandSpy = sinon.stub(cli, 'executeCommand').callsFake(() => Promise.reject(new CommandError('An error has occurred'))); await assert.rejects(command.action(logger, { options: { isPublic: true, url: 'https://contoso.sharepoint.com/sites/Sales' } } as any), new CommandError('An error has occurred')); @@ -2222,7 +2222,7 @@ describe(commands.SITE_SET, () => { throw 'Invalid request'; }); - executeCommandSpy = sinon.stub(Cli, 'executeCommand').callsFake(() => Promise.resolve()); + executeCommandSpy = sinon.stub(cli, 'executeCommand').callsFake(() => Promise.resolve()); await command.action(logger, { options: { siteDesignId: 'eb2f31da-9461-4fbf-9ea1-9959b134b89e', url: 'https://contoso.sharepoint.com/sites/Sales' } }); const options = { @@ -2247,7 +2247,7 @@ describe(commands.SITE_SET, () => { throw 'Invalid request'; }); - executeCommandSpy = sinon.stub(Cli, 'executeCommand').callsFake(() => Promise.resolve()); + executeCommandSpy = sinon.stub(cli, 'executeCommand').callsFake(() => Promise.resolve()); await command.action(logger, { options: { siteDesignId: 'eb2f31da-9461-4fbf-9ea1-9959b134b89e', url: 'https://contoso.sharepoint.com/sites/Sales' } }); const options = { @@ -2435,7 +2435,7 @@ describe(commands.SITE_SET, () => { throw 'Invalid request'; }); - executeCommandSpy = sinon.stub(Cli, 'executeCommand').callsFake(() => Promise.reject(new CommandError('An error has occurred'))); + executeCommandSpy = sinon.stub(cli, 'executeCommand').callsFake(() => Promise.reject(new CommandError('An error has occurred'))); await assert.rejects(command.action(logger, { options: { siteDesignId: 'eb2f31da-9461-4fbf-9ea1-9959b134b89e', url: 'https://contoso.sharepoint.com/sites/Sales' } } as any), new CommandError('An error has occurred')); diff --git a/src/m365/spo/commands/site/site-set.ts b/src/m365/spo/commands/site/site-set.ts index 928e0f832fc..4a35b8552c1 100644 --- a/src/m365/spo/commands/site/site-set.ts +++ b/src/m365/spo/commands/site/site-set.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import Command, { CommandError @@ -524,7 +524,7 @@ class SpoSiteSetCommand extends SpoCommand { debug: this.debug, verbose: this.verbose }; - promises.push(Cli.executeCommand(aadM365GroupSetCommand as Command, { options: { ...commandOptions, _: [] } })); + promises.push(cli.executeCommand(aadM365GroupSetCommand as Command, { options: { ...commandOptions, _: [] } })); } if (args.options.description) { @@ -706,7 +706,7 @@ class SpoSiteSetCommand extends SpoCommand { verbose: this.verbose }; - return Cli.executeCommand(spoSiteDesignApplyCommand as Command, { options: { ...options, _: [] } }); + return cli.executeCommand(spoSiteDesignApplyCommand as Command, { options: { ...options, _: [] } }); } private async loadSiteIds(siteUrl: string, logger: Logger): Promise { diff --git a/src/m365/spo/commands/sitedesign/sitedesign-add.spec.ts b/src/m365/spo/commands/sitedesign/sitedesign-add.spec.ts index e2a1d19be2c..d9fd04c6103 100644 --- a/src/m365/spo/commands/sitedesign/sitedesign-add.spec.ts +++ b/src/m365/spo/commands/sitedesign/sitedesign-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -33,7 +33,7 @@ describe(commands.SITEDESIGN_ADD, () => { }); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/sitedesign/sitedesign-apply.spec.ts b/src/m365/spo/commands/sitedesign/sitedesign-apply.spec.ts index 67953f60e32..eb1dd433a13 100644 --- a/src/m365/spo/commands/sitedesign/sitedesign-apply.spec.ts +++ b/src/m365/spo/commands/sitedesign/sitedesign-apply.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -26,7 +26,7 @@ describe(commands.SITEDESIGN_APPLY, () => { sinon.stub(session, 'getId').returns(''); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/sitedesign/sitedesign-get.spec.ts b/src/m365/spo/commands/sitedesign/sitedesign-get.spec.ts index 306d33727f3..974d25d9c91 100644 --- a/src/m365/spo/commands/sitedesign/sitedesign-get.spec.ts +++ b/src/m365/spo/commands/sitedesign/sitedesign-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -16,14 +16,12 @@ import command from './sitedesign-get.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.SITEDESIGN_GET, () => { - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); @@ -36,7 +34,7 @@ describe(commands.SITEDESIGN_GET, () => { }); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -59,7 +57,7 @@ describe(commands.SITEDESIGN_GET, () => { sinonUtil.restore([ request.post, cli.getSettingWithDefaultValue, - Cli.handleMultipleResultsFound + cli.handleMultipleResultsFound ]); }); @@ -248,7 +246,7 @@ describe(commands.SITEDESIGN_GET, () => { }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves({ Id: 'ca360b7e-1946-4292-b854-e0ad904f1055' }); + sinon.stub(cli, 'handleMultipleResultsFound').resolves({ Id: 'ca360b7e-1946-4292-b854-e0ad904f1055' }); await command.action(logger, { options: { title: 'Contoso Site Design' } }); assert(loggerLogSpy.calledWith({ diff --git a/src/m365/spo/commands/sitedesign/sitedesign-get.ts b/src/m365/spo/commands/sitedesign/sitedesign-get.ts index b6cc3eadc5b..5d1c61dfed2 100644 --- a/src/m365/spo/commands/sitedesign/sitedesign-get.ts +++ b/src/m365/spo/commands/sitedesign/sitedesign-get.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -97,7 +97,7 @@ class SpoSiteDesignGetCommand extends SpoCommand { if (matchingSiteDesigns.length > 1) { const resultAsKeyValuePair = formatting.convertArrayToHashTable('Id', matchingSiteDesigns); - const result = await Cli.handleMultipleResultsFound<{ Id: string }>(`Multiple site designs with title '${args.options.title}' found.`, resultAsKeyValuePair); + const result = await cli.handleMultipleResultsFound<{ Id: string }>(`Multiple site designs with title '${args.options.title}' found.`, resultAsKeyValuePair); return result.Id; } diff --git a/src/m365/spo/commands/sitedesign/sitedesign-remove.spec.ts b/src/m365/spo/commands/sitedesign/sitedesign-remove.spec.ts index 0efc244d4e6..47fac7772db 100644 --- a/src/m365/spo/commands/sitedesign/sitedesign-remove.spec.ts +++ b/src/m365/spo/commands/sitedesign/sitedesign-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -33,7 +33,7 @@ describe(commands.SITEDESIGN_REMOVE, () => { }); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -50,13 +50,13 @@ describe(commands.SITEDESIGN_REMOVE, () => { } }; loggerLogSpy = sinon.spy(logger, 'log'); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinon.stub(cli, 'promptForConfirmation').resolves(false); }); afterEach(() => { sinonUtil.restore([ request.post, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -93,8 +93,8 @@ describe(commands.SITEDESIGN_REMOVE, () => { }); it('prompts before removing the specified site design when force option not passed', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - const confirmationStub = sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + const confirmationStub = sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { id: 'b2307a39-e878-458b-bc90-03bc578531d6' } }); @@ -111,8 +111,8 @@ describe(commands.SITEDESIGN_REMOVE, () => { it('removes the app when prompt confirmed', async () => { const postStub = sinon.stub(request, 'post').resolves(); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { id: 'b2307a39-e878-458b-bc90-03bc578531d6' } }); assert(postStub.called); diff --git a/src/m365/spo/commands/sitedesign/sitedesign-remove.ts b/src/m365/spo/commands/sitedesign/sitedesign-remove.ts index 49657346f0c..1c7e0ab1162 100644 --- a/src/m365/spo/commands/sitedesign/sitedesign-remove.ts +++ b/src/m365/spo/commands/sitedesign/sitedesign-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -69,7 +69,7 @@ class SpoSiteDesignRemoveCommand extends SpoCommand { await this.removeSiteDesign(logger, args.options.id); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the site design ${args.options.id}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the site design ${args.options.id}?` }); if (result) { await this.removeSiteDesign(logger, args.options.id); diff --git a/src/m365/spo/commands/sitedesign/sitedesign-rights-grant.spec.ts b/src/m365/spo/commands/sitedesign/sitedesign-rights-grant.spec.ts index 48ca9c641f5..808f690c424 100644 --- a/src/m365/spo/commands/sitedesign/sitedesign-rights-grant.spec.ts +++ b/src/m365/spo/commands/sitedesign/sitedesign-rights-grant.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -33,7 +33,7 @@ describe(commands.SITEDESIGN_RIGHTS_GRANT, () => { }); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/sitedesign/sitedesign-rights-list.spec.ts b/src/m365/spo/commands/sitedesign/sitedesign-rights-list.spec.ts index d72b6b86d1b..59f63dafffd 100644 --- a/src/m365/spo/commands/sitedesign/sitedesign-rights-list.spec.ts +++ b/src/m365/spo/commands/sitedesign/sitedesign-rights-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -33,7 +33,7 @@ describe(commands.SITEDESIGN_RIGHTS_LIST, () => { }); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/sitedesign/sitedesign-rights-revoke.spec.ts b/src/m365/spo/commands/sitedesign/sitedesign-rights-revoke.spec.ts index 02f93c70c98..09a98578cbf 100644 --- a/src/m365/spo/commands/sitedesign/sitedesign-rights-revoke.spec.ts +++ b/src/m365/spo/commands/sitedesign/sitedesign-rights-revoke.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -34,7 +34,7 @@ describe(commands.SITEDESIGN_RIGHTS_REVOKE, () => { }); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -51,7 +51,7 @@ describe(commands.SITEDESIGN_RIGHTS_REVOKE, () => { } }; loggerLogSpy = sinon.spy(logger, 'log'); - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -62,7 +62,7 @@ describe(commands.SITEDESIGN_RIGHTS_REVOKE, () => { afterEach(() => { sinonUtil.restore([ request.post, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -170,8 +170,8 @@ describe(commands.SITEDESIGN_RIGHTS_REVOKE, () => { it('revokes site design access when prompt confirmed', async () => { const postStub = sinon.stub(request, 'post').resolves(); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { siteDesignId: 'b2307a39-e878-458b-bc90-03bc578531d6', principals: 'PattiF' } }); assert(postStub.called); diff --git a/src/m365/spo/commands/sitedesign/sitedesign-rights-revoke.ts b/src/m365/spo/commands/sitedesign/sitedesign-rights-revoke.ts index ccc27ff35b2..5686ef1f812 100644 --- a/src/m365/spo/commands/sitedesign/sitedesign-rights-revoke.ts +++ b/src/m365/spo/commands/sitedesign/sitedesign-rights-revoke.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request from '../../../../request.js'; @@ -98,7 +98,7 @@ class SpoSiteDesignRightsRevokeCommand extends SpoCommand { await revokePermissions(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to revoke access to site design ${args.options.siteDesignId} from the specified users?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to revoke access to site design ${args.options.siteDesignId} from the specified users?` }); if (result) { await revokePermissions(); diff --git a/src/m365/spo/commands/sitedesign/sitedesign-run-list.spec.ts b/src/m365/spo/commands/sitedesign/sitedesign-run-list.spec.ts index 78f9ce428a8..b42711790ce 100644 --- a/src/m365/spo/commands/sitedesign/sitedesign-run-list.spec.ts +++ b/src/m365/spo/commands/sitedesign/sitedesign-run-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -25,7 +25,7 @@ describe(commands.SITEDESIGN_RUN_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/sitedesign/sitedesign-run-status-get.spec.ts b/src/m365/spo/commands/sitedesign/sitedesign-run-status-get.spec.ts index bfbc0b96434..64c53cbc590 100644 --- a/src/m365/spo/commands/sitedesign/sitedesign-run-status-get.spec.ts +++ b/src/m365/spo/commands/sitedesign/sitedesign-run-status-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -25,7 +25,7 @@ describe(commands.SITEDESIGN_RUN_STATUS_GET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/sitedesign/sitedesign-set.spec.ts b/src/m365/spo/commands/sitedesign/sitedesign-set.spec.ts index fb1eabf061b..48886b35165 100644 --- a/src/m365/spo/commands/sitedesign/sitedesign-set.spec.ts +++ b/src/m365/spo/commands/sitedesign/sitedesign-set.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,21 +15,19 @@ import command from './sitedesign-set.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.SITEDESIGN_SET, () => { - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/sitedesign/sitedesign-task-get.spec.ts b/src/m365/spo/commands/sitedesign/sitedesign-task-get.spec.ts index 85ec1431d78..6bd3ce20c92 100644 --- a/src/m365/spo/commands/sitedesign/sitedesign-task-get.spec.ts +++ b/src/m365/spo/commands/sitedesign/sitedesign-task-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -26,7 +26,7 @@ describe(commands.SITEDESIGN_TASK_GET, () => { sinon.stub(session, 'getId').returns(''); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/sitedesign/sitedesign-task-list.spec.ts b/src/m365/spo/commands/sitedesign/sitedesign-task-list.spec.ts index 3a77770e6aa..61129ac117b 100644 --- a/src/m365/spo/commands/sitedesign/sitedesign-task-list.spec.ts +++ b/src/m365/spo/commands/sitedesign/sitedesign-task-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -25,7 +25,7 @@ describe(commands.SITEDESIGN_TASK_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/sitedesign/sitedesign-task-remove.spec.ts b/src/m365/spo/commands/sitedesign/sitedesign-task-remove.spec.ts index d079d47cd86..6c39df2049e 100644 --- a/src/m365/spo/commands/sitedesign/sitedesign-task-remove.spec.ts +++ b/src/m365/spo/commands/sitedesign/sitedesign-task-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -33,7 +33,7 @@ describe(commands.SITEDESIGN_TASK_REMOVE, () => { }); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -50,13 +50,13 @@ describe(commands.SITEDESIGN_TASK_REMOVE, () => { } }; loggerLogSpy = sinon.spy(logger, 'log'); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinon.stub(cli, 'promptForConfirmation').resolves(false); }); afterEach(() => { sinonUtil.restore([ request.post, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -92,8 +92,8 @@ describe(commands.SITEDESIGN_TASK_REMOVE, () => { }); it('prompts before removing the specified site design task when force option not passed', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - const confirmationStub = sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + const confirmationStub = sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { id: 'b2307a39-e878-458b-bc90-03bc578531d6' } }); @@ -110,8 +110,8 @@ describe(commands.SITEDESIGN_TASK_REMOVE, () => { it('removes the site design task when prompt confirmed', async () => { const postStub = sinon.stub(request, 'post').resolves(); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { id: 'b2307a39-e878-458b-bc90-03bc578531d6' } }); assert(postStub.called); }); diff --git a/src/m365/spo/commands/sitedesign/sitedesign-task-remove.ts b/src/m365/spo/commands/sitedesign/sitedesign-task-remove.ts index e645e6cc3ec..ea22ff02cef 100644 --- a/src/m365/spo/commands/sitedesign/sitedesign-task-remove.ts +++ b/src/m365/spo/commands/sitedesign/sitedesign-task-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request from '../../../../request.js'; @@ -69,7 +69,7 @@ class SpoSiteDesignTaskRemoveCommand extends SpoCommand { await this.removeSiteDesignTask(logger, args.options.id); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the site design task ${args.options.id}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the site design task ${args.options.id}?` }); if (result) { await this.removeSiteDesignTask(logger, args.options.id); diff --git a/src/m365/spo/commands/sitescript/sitescript-add.spec.ts b/src/m365/spo/commands/sitescript/sitescript-add.spec.ts index e1109a411d4..d0214d075c8 100644 --- a/src/m365/spo/commands/sitescript/sitescript-add.spec.ts +++ b/src/m365/spo/commands/sitescript/sitescript-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -33,7 +33,7 @@ describe(commands.SITESCRIPT_ADD, () => { }); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/sitescript/sitescript-get.spec.ts b/src/m365/spo/commands/sitescript/sitescript-get.spec.ts index e27bc91d5a7..9f60494e7a3 100644 --- a/src/m365/spo/commands/sitescript/sitescript-get.spec.ts +++ b/src/m365/spo/commands/sitescript/sitescript-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -33,7 +33,7 @@ describe(commands.SITESCRIPT_GET, () => { }); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/sitescript/sitescript-remove.spec.ts b/src/m365/spo/commands/sitescript/sitescript-remove.spec.ts index 7b1eb017b48..9fe2980fbd0 100644 --- a/src/m365/spo/commands/sitescript/sitescript-remove.spec.ts +++ b/src/m365/spo/commands/sitescript/sitescript-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -33,7 +33,7 @@ describe(commands.SITESCRIPT_REMOVE, () => { }); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -49,7 +49,7 @@ describe(commands.SITESCRIPT_REMOVE, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -60,7 +60,7 @@ describe(commands.SITESCRIPT_REMOVE, () => { afterEach(() => { sinonUtil.restore([ request.post, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -110,8 +110,8 @@ describe(commands.SITESCRIPT_REMOVE, () => { it('removes the app when prompt confirmed', async () => { const postStub = sinon.stub(request, 'post').resolves(); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { id: 'b2307a39-e878-458b-bc90-03bc578531d6' } }); assert(postStub.called); }); diff --git a/src/m365/spo/commands/sitescript/sitescript-remove.ts b/src/m365/spo/commands/sitescript/sitescript-remove.ts index 7061ee1a583..e096875fd3f 100644 --- a/src/m365/spo/commands/sitescript/sitescript-remove.ts +++ b/src/m365/spo/commands/sitescript/sitescript-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request from '../../../../request.js'; @@ -69,7 +69,7 @@ class SpoSiteScriptRemoveCommand extends SpoCommand { await this.removeSiteScript(logger, args.options.id); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the site script ${args.options.id}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the site script ${args.options.id}?` }); if (result) { await this.removeSiteScript(logger, args.options.id); diff --git a/src/m365/spo/commands/sitescript/sitescript-set.spec.ts b/src/m365/spo/commands/sitescript/sitescript-set.spec.ts index 16ad728b331..aef22940324 100644 --- a/src/m365/spo/commands/sitescript/sitescript-set.spec.ts +++ b/src/m365/spo/commands/sitescript/sitescript-set.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -33,7 +33,7 @@ describe(commands.SITESCRIPT_SET, () => { }); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/spo-get.spec.ts b/src/m365/spo/commands/spo-get.spec.ts index 7bd535a6a92..daf90124769 100644 --- a/src/m365/spo/commands/spo-get.spec.ts +++ b/src/m365/spo/commands/spo-get.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../Auth.js'; import { CommandError } from '../../../Command.js'; -import { Cli } from '../../../cli/Cli.js'; +import { cli } from '../../../cli/cli.js'; import { CommandInfo } from '../../../cli/CommandInfo.js'; import { Logger } from '../../../cli/Logger.js'; import { telemetry } from '../../../telemetry.js'; @@ -24,7 +24,7 @@ describe(commands.GET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/spo-search.spec.ts b/src/m365/spo/commands/spo-search.spec.ts index 0e906eed2a9..1d24fda9913 100644 --- a/src/m365/spo/commands/spo-search.spec.ts +++ b/src/m365/spo/commands/spo-search.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../Auth.js'; -import { Cli } from '../../../cli/Cli.js'; +import { cli } from '../../../cli/cli.js'; import { CommandInfo } from '../../../cli/CommandInfo.js'; import { Logger } from '../../../cli/Logger.js'; import { CommandError } from '../../../Command.js'; @@ -305,7 +305,7 @@ describe(commands.SEARCH, () => { sinon.stub(session, 'getId').returns(''); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/spo-search.ts b/src/m365/spo/commands/spo-search.ts index 61d8219e5aa..5b90ebfc241 100644 --- a/src/m365/spo/commands/spo-search.ts +++ b/src/m365/spo/commands/spo-search.ts @@ -1,5 +1,5 @@ import { isNumber } from 'util'; -import { Cli } from '../../../cli/Cli.js'; +import { cli } from '../../../cli/cli.js'; import { Logger } from '../../../cli/Logger.js'; import GlobalOptions from '../../../GlobalOptions.js'; import request from '../../../request.js'; @@ -326,7 +326,7 @@ class SpoSearchCommand extends SpoCommand { await logger.log(this.getParsedOutput(args, results)); } - if (!args.options.output || Cli.shouldTrimOutput(args.options.output)) { + if (!args.options.output || cli.shouldTrimOutput(args.options.output)) { await logger.log("# Rows: " + results[results.length - 1].PrimaryQueryResult.RelevantResults.TotalRows); await logger.log("# Rows (Including duplicates): " + results[results.length - 1].PrimaryQueryResult.RelevantResults.TotalRowsIncludingDuplicates); await logger.log("Elapsed Time: " + this.getElapsedTime(results)); diff --git a/src/m365/spo/commands/spo-set.spec.ts b/src/m365/spo/commands/spo-set.spec.ts index d86f75a4002..1e24f7aabfe 100644 --- a/src/m365/spo/commands/spo-set.spec.ts +++ b/src/m365/spo/commands/spo-set.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../Auth.js'; -import { Cli } from '../../../cli/Cli.js'; +import { cli } from '../../../cli/cli.js'; import { CommandInfo } from '../../../cli/CommandInfo.js'; import { Logger } from '../../../cli/Logger.js'; import { CommandError } from '../../../Command.js'; @@ -24,7 +24,7 @@ describe(commands.SET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/storageentity/storageentity-list.spec.ts b/src/m365/spo/commands/storageentity/storageentity-list.spec.ts index 021a1d3ab0a..12235a6bbd2 100644 --- a/src/m365/spo/commands/storageentity/storageentity-list.spec.ts +++ b/src/m365/spo/commands/storageentity/storageentity-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,20 +15,18 @@ import command from './storageentity-list.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.STORAGEENTITY_LIST, () => { - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/storageentity/storageentity-remove.spec.ts b/src/m365/spo/commands/storageentity/storageentity-remove.spec.ts index b0e02c8a1bc..640fb896b86 100644 --- a/src/m365/spo/commands/storageentity/storageentity-remove.spec.ts +++ b/src/m365/spo/commands/storageentity/storageentity-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -17,14 +17,12 @@ import command from './storageentity-remove.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.STORAGEENTITY_REMOVE, () => { - let cli: Cli; let log: string[]; let logger: Logger; let promptIssued: boolean = false; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); @@ -37,7 +35,7 @@ describe(commands.STORAGEENTITY_REMOVE, () => { }); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -53,7 +51,7 @@ describe(commands.STORAGEENTITY_REMOVE, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -63,7 +61,7 @@ describe(commands.STORAGEENTITY_REMOVE, () => { afterEach(() => { sinonUtil.restore([ request.post, - Cli.promptForConfirmation, + cli.promptForConfirmation, cli.getSettingWithDefaultValue ]); }); @@ -117,8 +115,8 @@ describe(commands.STORAGEENTITY_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { debug: true, key: 'existingproperty', appCatalogUrl: 'https://contoso.sharepoint.com/sites/appcatalog' } }); assert.strictEqual(postStub.lastCall.args[0].url, 'https://contoso-admin.sharepoint.com/_vti_bin/client.svc/ProcessQuery'); @@ -141,8 +139,8 @@ describe(commands.STORAGEENTITY_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await assert.rejects(command.action(logger, { options: { debug: true, key: 'nonexistentproperty', appCatalogUrl: 'https://contoso.sharepoint.com/sites/appcatalog' } } as any), new CommandError('File Not Found.')); assert.strictEqual(postStub.lastCall.args[0].url, 'https://contoso-admin.sharepoint.com/_vti_bin/client.svc/ProcessQuery'); @@ -216,8 +214,8 @@ describe(commands.STORAGEENTITY_REMOVE, () => { sinonUtil.restore(spo.getRequestDigest); sinon.stub(spo, 'getRequestDigest').rejects(new Error('getRequestDigest error')); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await assert.rejects(command.action(logger, { options: { debug: true, key: 'nonexistentproperty', appCatalogUrl: 'https://contoso.sharepoint.com/sites/appcatalog' } } as any), new CommandError('getRequestDigest error')); }); diff --git a/src/m365/spo/commands/storageentity/storageentity-remove.ts b/src/m365/spo/commands/storageentity/storageentity-remove.ts index 267701aa8b2..65e304fdb3a 100644 --- a/src/m365/spo/commands/storageentity/storageentity-remove.ts +++ b/src/m365/spo/commands/storageentity/storageentity-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import config from '../../../../config.js'; import GlobalOptions from '../../../../GlobalOptions.js'; @@ -69,7 +69,7 @@ class SpoStorageEntityRemoveCommand extends SpoCommand { await this.removeTenantProperty(logger, args); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to delete the ${args.options.key} tenant property?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to delete the ${args.options.key} tenant property?` }); if (result) { await this.removeTenantProperty(logger, args); diff --git a/src/m365/spo/commands/storageentity/storageentity-set.spec.ts b/src/m365/spo/commands/storageentity/storageentity-set.spec.ts index a10fd3b2308..ee82b301a12 100644 --- a/src/m365/spo/commands/storageentity/storageentity-set.spec.ts +++ b/src/m365/spo/commands/storageentity/storageentity-set.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -34,7 +34,7 @@ describe(commands.STORAGEENTITY_SET, () => { }); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/tenant/tenant-appcatalog-add.spec.ts b/src/m365/spo/commands/tenant/tenant-appcatalog-add.spec.ts index 2aa808a313f..b1a890920aa 100644 --- a/src/m365/spo/commands/tenant/tenant-appcatalog-add.spec.ts +++ b/src/m365/spo/commands/tenant/tenant-appcatalog-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError, CommandErrorWithOutput } from '../../../../Command.js'; @@ -27,7 +27,7 @@ describe(commands.TENANT_APPCATALOG_ADD, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -47,8 +47,8 @@ describe(commands.TENANT_APPCATALOG_ADD, () => { afterEach(() => { sinonUtil.restore([ - Cli.executeCommand, - Cli.executeCommandWithOutput + cli.executeCommand, + cli.executeCommandWithOutput ]); }); @@ -66,7 +66,7 @@ describe(commands.TENANT_APPCATALOG_ADD, () => { }); it('creates app catalog when app catalog and site with different URL already exist and force used', async () => { - sinon.stub(Cli, 'executeCommand').callsFake(async (command, args) => { + sinon.stub(cli, 'executeCommand').callsFake(async (command, args) => { if (command === spoSiteRemoveCommand) { if (args.options.url === 'https://contoso.sharepoint.com/sites/old-app-catalog' || args.options.url === 'https://contoso.sharepoint.com/sites/new-app-catalog') { @@ -86,7 +86,7 @@ describe(commands.TENANT_APPCATALOG_ADD, () => { throw 'Unknown case'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { if (command === spoTenantAppCatalogUrlGetCommand) { return 'https://contoso.sharepoint.com/sites/old-app-catalog'; } @@ -107,7 +107,7 @@ describe(commands.TENANT_APPCATALOG_ADD, () => { }); it('creates app catalog when app catalog and site with different URL already exist and force used (debug)', async () => { - sinon.stub(Cli, 'executeCommand').callsFake(async (command, args) => { + sinon.stub(cli, 'executeCommand').callsFake(async (command, args) => { if (command === spoSiteRemoveCommand) { if (args.options.url === 'https://contoso.sharepoint.com/sites/old-app-catalog' || args.options.url === 'https://contoso.sharepoint.com/sites/new-app-catalog') { @@ -127,7 +127,7 @@ describe(commands.TENANT_APPCATALOG_ADD, () => { throw 'Unknown case'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { if (command === spoTenantAppCatalogUrlGetCommand) { return { stdout: 'https://contoso.sharepoint.com/sites/old-app-catalog' @@ -150,7 +150,7 @@ describe(commands.TENANT_APPCATALOG_ADD, () => { }); it('handles error when creating app catalog when app catalog and site with different URL already exist and force used failed', async () => { - sinon.stub(Cli, 'executeCommand').callsFake(async (command, args) => { + sinon.stub(cli, 'executeCommand').callsFake(async (command, args) => { if (command === spoSiteRemoveCommand) { if (args.options.url === 'https://contoso.sharepoint.com/sites/old-app-catalog' || args.options.url === 'https://contoso.sharepoint.com/sites/new-app-catalog') { @@ -170,7 +170,7 @@ describe(commands.TENANT_APPCATALOG_ADD, () => { throw 'Unknown case'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { if (command === spoTenantAppCatalogUrlGetCommand) { return 'https://contoso.sharepoint.com/sites/old-app-catalog'; } @@ -191,7 +191,7 @@ describe(commands.TENANT_APPCATALOG_ADD, () => { }); it('handles error when app catalog and site with different URL already exist, force used and deleting the existing site failed', async () => { - sinon.stub(Cli, 'executeCommand').callsFake(async (command, args) => { + sinon.stub(cli, 'executeCommand').callsFake(async (command, args) => { if (command === spoSiteRemoveCommand) { if (args.options.url === 'https://contoso.sharepoint.com/sites/old-app-catalog') { return; @@ -209,7 +209,7 @@ describe(commands.TENANT_APPCATALOG_ADD, () => { throw 'Unknown case'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { if (command === spoTenantAppCatalogUrlGetCommand) { return 'https://contoso.sharepoint.com/sites/old-app-catalog'; } @@ -230,7 +230,7 @@ describe(commands.TENANT_APPCATALOG_ADD, () => { }); it('creates app catalog when app catalog already exists, site with different URL does not exist and force used', async () => { - sinon.stub(Cli, 'executeCommand').callsFake(async (command, args) => { + sinon.stub(cli, 'executeCommand').callsFake(async (command, args) => { if (command === spoSiteRemoveCommand) { if (args.options.url === 'https://contoso.sharepoint.com/sites/old-app-catalog') { return; @@ -249,7 +249,7 @@ describe(commands.TENANT_APPCATALOG_ADD, () => { throw 'Unknown case'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { if (command === spoTenantAppCatalogUrlGetCommand) { return 'https://contoso.sharepoint.com/sites/old-app-catalog'; } @@ -272,7 +272,7 @@ describe(commands.TENANT_APPCATALOG_ADD, () => { }); it('creates app catalog when app catalog already exists, site with different URL does not exist and force used (debug)', async () => { - sinon.stub(Cli, 'executeCommand').callsFake(async (command, args) => { + sinon.stub(cli, 'executeCommand').callsFake(async (command, args) => { if (command === spoSiteRemoveCommand) { if (args.options.url === 'https://contoso.sharepoint.com/sites/old-app-catalog') { return; @@ -291,7 +291,7 @@ describe(commands.TENANT_APPCATALOG_ADD, () => { throw 'Unknown case'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { if (command === spoTenantAppCatalogUrlGetCommand) { return 'https://contoso.sharepoint.com/sites/old-app-catalog'; } @@ -314,7 +314,7 @@ describe(commands.TENANT_APPCATALOG_ADD, () => { }); it('handles error when creating app catalog when app catalog already exists, site with different URL does not exist and force used', async () => { - sinon.stub(Cli, 'executeCommand').callsFake(async (command, args) => { + sinon.stub(cli, 'executeCommand').callsFake(async (command, args) => { if (command === spoSiteRemoveCommand) { if (args.options.url === 'https://contoso.sharepoint.com/sites/old-app-catalog') { return; @@ -333,7 +333,7 @@ describe(commands.TENANT_APPCATALOG_ADD, () => { throw 'Unknown case'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { if (command === spoTenantAppCatalogUrlGetCommand) { return 'https://contoso.sharepoint.com/sites/old-app-catalog'; } @@ -356,7 +356,7 @@ describe(commands.TENANT_APPCATALOG_ADD, () => { }); it('handles error when retrieving site with different URL failed and app catalog already exists, and force used', async () => { - sinon.stub(Cli, 'executeCommand').callsFake(async (command, args) => { + sinon.stub(cli, 'executeCommand').callsFake(async (command, args) => { if (command === spoSiteRemoveCommand) { if (args.options.url === 'https://contoso.sharepoint.com/sites/old-app-catalog') { return; @@ -367,7 +367,7 @@ describe(commands.TENANT_APPCATALOG_ADD, () => { throw 'Unknown case'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { if (command === spoTenantAppCatalogUrlGetCommand) { return 'https://contoso.sharepoint.com/sites/old-app-catalog'; } @@ -390,7 +390,7 @@ describe(commands.TENANT_APPCATALOG_ADD, () => { }); it('handles error when deleting existing app catalog failed', async () => { - sinon.stub(Cli, 'executeCommand').callsFake(async (command, args) => { + sinon.stub(cli, 'executeCommand').callsFake(async (command, args) => { if (command === spoSiteRemoveCommand) { if (args.options.url === 'https://contoso.sharepoint.com/sites/old-app-catalog') { throw new CommandError('An error has occurred'); @@ -401,7 +401,7 @@ describe(commands.TENANT_APPCATALOG_ADD, () => { throw 'Unknown case'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { if (command === spoTenantAppCatalogUrlGetCommand) { return { stdout: 'https://contoso.sharepoint.com/sites/old-app-catalog' @@ -423,7 +423,7 @@ describe(commands.TENANT_APPCATALOG_ADD, () => { }); it('handles error app catalog exists and no force used', async () => { - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { if (command === spoTenantAppCatalogUrlGetCommand) { return { stdout: 'https://contoso.sharepoint.com/sites/old-app-catalog' @@ -445,7 +445,7 @@ describe(commands.TENANT_APPCATALOG_ADD, () => { }); it('creates app catalog when app catalog does not exist, site with different URL already exists and force used', async () => { - sinon.stub(Cli, 'executeCommand').callsFake(async (command, args) => { + sinon.stub(cli, 'executeCommand').callsFake(async (command, args) => { if (command === spoSiteRemoveCommand) { if (args.options.url === 'https://contoso.sharepoint.com/sites/new-app-catalog') { return; @@ -464,7 +464,7 @@ describe(commands.TENANT_APPCATALOG_ADD, () => { throw 'Unknown case'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { if (command === spoTenantAppCatalogUrlGetCommand) { return 'https://contoso.sharepoint.com/sites/old-app-catalog'; } @@ -487,7 +487,7 @@ describe(commands.TENANT_APPCATALOG_ADD, () => { }); it('handles error when creating app catalog when app catalog does not exist, site with different URL already exists and force used', async () => { - sinon.stub(Cli, 'executeCommand').callsFake(async (command, args) => { + sinon.stub(cli, 'executeCommand').callsFake(async (command, args) => { if (command === spoSiteRemoveCommand) { if (args.options.url === 'https://contoso.sharepoint.com/sites/new-app-catalog') { return; @@ -506,7 +506,7 @@ describe(commands.TENANT_APPCATALOG_ADD, () => { throw 'Unknown case'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { if (command === spoTenantAppCatalogUrlGetCommand) { return 'https://contoso.sharepoint.com/sites/old-app-catalog'; } @@ -529,7 +529,7 @@ describe(commands.TENANT_APPCATALOG_ADD, () => { }); it('handles error when deleting existing site, when app catalog does not exist, site with different URL already exists and force used', async () => { - sinon.stub(Cli, 'executeCommand').callsFake(async (command, args) => { + sinon.stub(cli, 'executeCommand').callsFake(async (command, args) => { if (command === spoSiteRemoveCommand) { if (args.options.url === 'https://contoso.sharepoint.com/sites/new-app-catalog') { throw new CommandError('An error has occurred'); @@ -540,7 +540,7 @@ describe(commands.TENANT_APPCATALOG_ADD, () => { throw 'Unknown case'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { if (command === spoTenantAppCatalogUrlGetCommand) { return 'https://contoso.sharepoint.com/sites/old-app-catalog'; } @@ -563,10 +563,10 @@ describe(commands.TENANT_APPCATALOG_ADD, () => { }); it('handles error when app catalog does not exist, site with different URL already exists and force not used', async () => { - sinon.stub(Cli, 'executeCommand').callsFake(() => { + sinon.stub(cli, 'executeCommand').callsFake(() => { throw 'Unknown case'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { if (command === spoTenantAppCatalogUrlGetCommand) { return 'https://contoso.sharepoint.com/sites/old-app-catalog'; } @@ -589,7 +589,7 @@ describe(commands.TENANT_APPCATALOG_ADD, () => { }); it(`creates app catalog when app catalog and site with different URL don't exist`, async () => { - sinon.stub(Cli, 'executeCommand').callsFake(async (command, args) => { + sinon.stub(cli, 'executeCommand').callsFake(async (command, args) => { if (command === spoSiteAddCommand) { if (args.options.url === 'https://contoso.sharepoint.com/sites/new-app-catalog') { return; @@ -600,7 +600,7 @@ describe(commands.TENANT_APPCATALOG_ADD, () => { throw 'Unknown case'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { if (command === spoTenantAppCatalogUrlGetCommand) { return 'https://contoso.sharepoint.com/sites/old-app-catalog'; } @@ -621,7 +621,7 @@ describe(commands.TENANT_APPCATALOG_ADD, () => { }); it(`handles error when creating app catalog fails, when app catalog when app catalog does and site with different URL don't exist`, async () => { - sinon.stub(Cli, 'executeCommand').callsFake(async (command, args) => { + sinon.stub(cli, 'executeCommand').callsFake(async (command, args) => { if (command === spoSiteAddCommand) { if (args.options.url === 'https://contoso.sharepoint.com/sites/new-app-catalog') { throw new CommandError('An error has occurred'); @@ -632,7 +632,7 @@ describe(commands.TENANT_APPCATALOG_ADD, () => { throw 'Unknown case'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { if (command === spoTenantAppCatalogUrlGetCommand) { return 'https://contoso.sharepoint.com/sites/old-app-catalog'; } @@ -653,10 +653,10 @@ describe(commands.TENANT_APPCATALOG_ADD, () => { }); it(`handles error when checking if the app catalog site exists`, async () => { - sinon.stub(Cli, 'executeCommand').callsFake(() => { + sinon.stub(cli, 'executeCommand').callsFake(() => { throw 'Unknown case'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { if (command === spoTenantAppCatalogUrlGetCommand) { return { stdout: 'https://contoso.sharepoint.com/sites/old-app-catalog' @@ -678,7 +678,7 @@ describe(commands.TENANT_APPCATALOG_ADD, () => { }); it(`creates app catalog when app catalog not registered, site with different URL exists and force used`, async () => { - sinon.stub(Cli, 'executeCommand').callsFake(async (command, args) => { + sinon.stub(cli, 'executeCommand').callsFake(async (command, args) => { if (command === spoSiteRemoveCommand) { if (args.options.url === 'https://contoso.sharepoint.com/sites/new-app-catalog') { return; @@ -697,7 +697,7 @@ describe(commands.TENANT_APPCATALOG_ADD, () => { throw 'Unknown case'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { if (command === spoTenantAppCatalogUrlGetCommand) { return ''; } @@ -717,7 +717,7 @@ describe(commands.TENANT_APPCATALOG_ADD, () => { }); it(`creates app catalog when app catalog not registered, site with different URL exists and force used (debug)`, async () => { - sinon.stub(Cli, 'executeCommand').callsFake(async (command, args) => { + sinon.stub(cli, 'executeCommand').callsFake(async (command, args) => { if (command === spoSiteRemoveCommand) { if (args.options.url === 'https://contoso.sharepoint.com/sites/new-app-catalog') { return; @@ -736,7 +736,7 @@ describe(commands.TENANT_APPCATALOG_ADD, () => { throw 'Unknown case'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { if (command === spoTenantAppCatalogUrlGetCommand) { return ''; } @@ -756,7 +756,7 @@ describe(commands.TENANT_APPCATALOG_ADD, () => { }); it(`handles error when creating app catalog when app catalog not registered, site with different URL exists and force used`, async () => { - sinon.stub(Cli, 'executeCommand').callsFake(async (command, args) => { + sinon.stub(cli, 'executeCommand').callsFake(async (command, args) => { if (command === spoSiteRemoveCommand) { if (args.options.url === 'https://contoso.sharepoint.com/sites/new-app-catalog') { return; @@ -775,7 +775,7 @@ describe(commands.TENANT_APPCATALOG_ADD, () => { throw 'Unknown case'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { if (command === spoTenantAppCatalogUrlGetCommand) { return ''; } @@ -795,7 +795,7 @@ describe(commands.TENANT_APPCATALOG_ADD, () => { }); it(`handles error when deleting existing site when app catalog not registered, site with different URL exists and force used`, async () => { - sinon.stub(Cli, 'executeCommand').callsFake(async (command, args) => { + sinon.stub(cli, 'executeCommand').callsFake(async (command, args) => { if (command === spoSiteRemoveCommand) { if (args.options.url === 'https://contoso.sharepoint.com/sites/new-app-catalog') { throw new CommandError('An error has occurred'); @@ -806,7 +806,7 @@ describe(commands.TENANT_APPCATALOG_ADD, () => { throw 'Unknown case'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { if (command === spoTenantAppCatalogUrlGetCommand) { return ''; } @@ -826,7 +826,7 @@ describe(commands.TENANT_APPCATALOG_ADD, () => { }); it(`handles error when app catalog not registered, site with different URL exists and force not used`, async () => { - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { if (command === spoTenantAppCatalogUrlGetCommand) { return ''; } @@ -846,7 +846,7 @@ describe(commands.TENANT_APPCATALOG_ADD, () => { }); it(`creates app catalog when app catalog not registered and site with different URL doesn't exist`, async () => { - sinon.stub(Cli, 'executeCommand').callsFake(async (command, args) => { + sinon.stub(cli, 'executeCommand').callsFake(async (command, args) => { if (command === spoSiteAddCommand) { if (args.options.url === 'https://contoso.sharepoint.com/sites/new-app-catalog') { return; @@ -857,7 +857,7 @@ describe(commands.TENANT_APPCATALOG_ADD, () => { throw 'Unknown case'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { if (command === spoTenantAppCatalogUrlGetCommand) { return ''; } @@ -877,7 +877,7 @@ describe(commands.TENANT_APPCATALOG_ADD, () => { }); it(`handles error when creating app catalog when app catalog not registered and site with different URL doesn't exist`, async () => { - sinon.stub(Cli, 'executeCommand').callsFake(async (command, args) => { + sinon.stub(cli, 'executeCommand').callsFake(async (command, args) => { if (command === spoSiteAddCommand) { if (args.options.url === 'https://contoso.sharepoint.com/sites/new-app-catalog') { throw new CommandError('An error has occurred'); @@ -888,7 +888,7 @@ describe(commands.TENANT_APPCATALOG_ADD, () => { throw 'Unknown case'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { if (command === spoTenantAppCatalogUrlGetCommand) { return ''; } @@ -908,7 +908,7 @@ describe(commands.TENANT_APPCATALOG_ADD, () => { }); it(`handles error when app catalog not registered and checking if the site with different URL exists throws error`, async () => { - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { if (command === spoTenantAppCatalogUrlGetCommand) { return ''; } @@ -928,7 +928,7 @@ describe(commands.TENANT_APPCATALOG_ADD, () => { }); it(`handles error when checking if app catalog registered throws error`, async () => { - sinon.stub(Cli, 'executeCommandWithOutput').callsFake((command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake((command): Promise => { if (command === spoTenantAppCatalogUrlGetCommand) { throw new CommandError('An error has occurred'); } diff --git a/src/m365/spo/commands/tenant/tenant-appcatalog-add.ts b/src/m365/spo/commands/tenant/tenant-appcatalog-add.ts index f243c850635..42c38ad02e0 100644 --- a/src/m365/spo/commands/tenant/tenant-appcatalog-add.ts +++ b/src/m365/spo/commands/tenant/tenant-appcatalog-add.ts @@ -1,4 +1,4 @@ -import { Cli, CommandOutput } from '../../../../cli/Cli.js'; +import { cli, CommandOutput } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import Command, { CommandError } from '../../../../Command.js'; import GlobalOptions from '../../../../GlobalOptions.js'; @@ -90,7 +90,7 @@ class SpoTenantAppCatalogAddCommand extends SpoCommand { await logger.logToStderr('Checking for existing app catalog URL...'); } - const spoTenantAppCatalogUrlGetCommandOutput: CommandOutput = await Cli.executeCommandWithOutput(spoTenantAppCatalogUrlGetCommand as Command, { options: { output: 'text', _: [] } }); + const spoTenantAppCatalogUrlGetCommandOutput: CommandOutput = await cli.executeCommandWithOutput(spoTenantAppCatalogUrlGetCommand as Command, { options: { output: 'text', _: [] } }); const appCatalogUrl: string | undefined = spoTenantAppCatalogUrlGetCommandOutput.stdout; if (!appCatalogUrl) { if (this.verbose) { @@ -124,7 +124,7 @@ class SpoTenantAppCatalogAddCommand extends SpoCommand { }; try { - await Cli.executeCommandWithOutput(spoSiteGetCommand as Command, siteGetOptions); + await cli.executeCommandWithOutput(spoSiteGetCommand as Command, siteGetOptions); if (this.verbose) { await logger.logToStderr(`Found site ${url}`); @@ -147,7 +147,7 @@ class SpoTenantAppCatalogAddCommand extends SpoCommand { debug: this.debug }; - await Cli.executeCommand(spoSiteRemoveCommand as Command, { options: { ...siteRemoveOptions, _: [] } }); + await cli.executeCommand(spoSiteRemoveCommand as Command, { options: { ...siteRemoveOptions, _: [] } }); } catch (err: any) { if (err.error?.message !== 'File not Found' && err.error?.message !== '404 FILE NOT FOUND') { @@ -179,7 +179,7 @@ class SpoTenantAppCatalogAddCommand extends SpoCommand { debug: this.debug, removeDeletedSite: false } as SpoSiteAddCommandOptions; - return Cli.executeCommand(spoSiteAddCommand as Command, { options: { ...siteAddOptions, _: [] } }); + return cli.executeCommand(spoSiteAddCommand as Command, { options: { ...siteAddOptions, _: [] } }); } } diff --git a/src/m365/spo/commands/tenant/tenant-applicationcustomizer-add.spec.ts b/src/m365/spo/commands/tenant/tenant-applicationcustomizer-add.spec.ts index d5d8f43087b..d611288060b 100644 --- a/src/m365/spo/commands/tenant/tenant-applicationcustomizer-add.spec.ts +++ b/src/m365/spo/commands/tenant/tenant-applicationcustomizer-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { telemetry } from '../../../../telemetry.js'; @@ -40,7 +40,7 @@ describe(commands.TENANT_APPLICATIONCUSTOMIZER_ADD, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -60,8 +60,8 @@ describe(commands.TENANT_APPLICATIONCUSTOMIZER_ADD, () => { afterEach(() => { sinonUtil.restore([ - Cli.executeCommand, - Cli.executeCommandWithOutput + cli.executeCommand, + cli.executeCommandWithOutput ]); }); @@ -80,7 +80,7 @@ describe(commands.TENANT_APPLICATIONCUSTOMIZER_ADD, () => { it('adds a tenant-wide application customizer', async () => { let executeCommandCalled = false; - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { if (command === spoListItemListCommand) { if (args.options.listUrl === `${urlUtil.getServerRelativeSiteUrl(appCatalogUrl)}/Lists/ComponentManifests`) { return { 'stdout': JSON.stringify(solutionResponse) }; @@ -95,7 +95,7 @@ describe(commands.TENANT_APPLICATIONCUSTOMIZER_ADD, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommand').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommand').callsFake(async (command): Promise => { if (command === spoListItemAddCommand) { executeCommandCalled = true; return; @@ -109,7 +109,7 @@ describe(commands.TENANT_APPLICATIONCUSTOMIZER_ADD, () => { it('adds a tenant-wide application customizer to a specific webtemplate including clientSideComponentProperties', async () => { let executeCommandCalled = false; - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { if (command === spoListItemListCommand) { if (args.options.listUrl === `${urlUtil.getServerRelativeSiteUrl(appCatalogUrl)}/Lists/ComponentManifests`) { return { 'stdout': JSON.stringify(solutionResponse) }; @@ -124,7 +124,7 @@ describe(commands.TENANT_APPLICATIONCUSTOMIZER_ADD, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommand').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommand').callsFake(async (command): Promise => { if (command === spoListItemAddCommand) { executeCommandCalled = true; return; @@ -137,7 +137,7 @@ describe(commands.TENANT_APPLICATIONCUSTOMIZER_ADD, () => { }); it('throws an error when no app catalog is found', async () => { - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoTenantAppCatalogUrlGetCommand) { return { 'stdout': null }; } @@ -149,7 +149,7 @@ describe(commands.TENANT_APPLICATIONCUSTOMIZER_ADD, () => { }); it('throws an error when specific client side component is not found in manifest list', async () => { - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { if (command === spoListItemListCommand) { if (args.options.listUrl === `${urlUtil.getServerRelativeSiteUrl(appCatalogUrl)}/Lists/ComponentManifests`) { return { 'stdout': JSON.stringify([]) }; @@ -166,7 +166,7 @@ describe(commands.TENANT_APPLICATIONCUSTOMIZER_ADD, () => { }); it('throws an error when the manifest of a specific client side component is not of type application customizer', async () => { - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { if (command === spoListItemListCommand) { if (args.options.listUrl === `${urlUtil.getServerRelativeSiteUrl(appCatalogUrl)}/Lists/ComponentManifests`) { const faultyClientComponentManifest = "{\"id\":\"6b2a54c5-3317-49eb-8621-1bbb76263629\",\"alias\":\"HelloWorldApplicationCustomizer\",\"componentType\":\"Extension\",\"extensionType\":\"FormCustomizer\",\"version\":\"0.0.1\",\"manifestVersion\":2,\"loaderConfig\":{\"internalModuleBaseUrls\":[\"HTTPS://SPCLIENTSIDEASSETLIBRARY/\"],\"entryModuleId\":\"hello-world-application-customizer\",\"scriptResources\":{\"hello-world-application-customizer\":{\"type\":\"path\",\"path\":\"hello-world-application-customizer_b47769f9eca3d3b6c4d5.js\"},\"HelloWorldApplicationCustomizerStrings\":{\"type\":\"path\",\"path\":\"HelloWorldApplicationCustomizerStrings_en-us_72ca11838ac9bae2790a8692c260e1ac.js\"},\"@microsoft/sp-application-base\":{\"type\":\"component\",\"id\":\"4df9bb86-ab0a-4aab-ab5f-48bf167048fb\",\"version\":\"1.15.2\"},\"@microsoft/sp-core-library\":{\"type\":\"component\",\"id\":\"7263c7d0-1d6a-45ec-8d85-d4d1d234171b\",\"version\":\"1.15.2\"}}},\"mpnId\":\"Undefined-1.15.2\",\"clientComponentDeveloper\":\"\"}"; @@ -186,7 +186,7 @@ describe(commands.TENANT_APPLICATIONCUSTOMIZER_ADD, () => { }); it('throws an error when solution is not found in app catalog', async () => { - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { if (command === spoListItemListCommand) { if (args.options.listUrl === `${urlUtil.getServerRelativeSiteUrl(appCatalogUrl)}/Lists/ComponentManifests`) { return { 'stdout': JSON.stringify(solutionResponse) }; @@ -206,7 +206,7 @@ describe(commands.TENANT_APPLICATIONCUSTOMIZER_ADD, () => { }); it('throws an error when solution does not contain extension that can be deployed tenant-wide', async () => { - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { if (command === spoListItemListCommand) { if (args.options.listUrl === `${urlUtil.getServerRelativeSiteUrl(appCatalogUrl)}/Lists/ComponentManifests`) { return { 'stdout': JSON.stringify(solutionResponse) }; @@ -228,7 +228,7 @@ describe(commands.TENANT_APPLICATIONCUSTOMIZER_ADD, () => { }); it('throws an error when solution is not deployed globally', async () => { - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { if (command === spoListItemListCommand) { if (args.options.listUrl === `${urlUtil.getServerRelativeSiteUrl(appCatalogUrl)}/Lists/ComponentManifests`) { return { 'stdout': JSON.stringify(solutionResponse) }; diff --git a/src/m365/spo/commands/tenant/tenant-applicationcustomizer-add.ts b/src/m365/spo/commands/tenant/tenant-applicationcustomizer-add.ts index 95c2a33bbb1..1e901a884ec 100644 --- a/src/m365/spo/commands/tenant/tenant-applicationcustomizer-add.ts +++ b/src/m365/spo/commands/tenant/tenant-applicationcustomizer-add.ts @@ -1,4 +1,4 @@ -import { Cli, CommandOutput } from '../../../../cli/Cli.js'; +import { cli, CommandOutput } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import Command from '../../../../Command.js'; import GlobalOptions from '../../../../GlobalOptions.js'; @@ -104,7 +104,7 @@ class SpoTenantApplicationCustomizerAddCommand extends SpoCommand { } private async getAppCatalogUrl(logger: Logger): Promise { - const spoTenantAppCatalogUrlGetCommandOutput: CommandOutput = await Cli.executeCommandWithOutput(spoTenantAppCatalogUrlGetCommand as Command, { options: { output: 'text', _: [] } }); + const spoTenantAppCatalogUrlGetCommandOutput: CommandOutput = await cli.executeCommandWithOutput(spoTenantAppCatalogUrlGetCommand as Command, { options: { output: 'text', _: [] } }); if (this.verbose) { await logger.logToStderr(spoTenantAppCatalogUrlGetCommandOutput.stderr); } @@ -135,7 +135,7 @@ class SpoTenantApplicationCustomizerAddCommand extends SpoCommand { output: 'json' }; - const output = await Cli.executeCommandWithOutput(spoListItemListCommand as Command, { options: { ...commandOptions, _: [] } }); + const output = await cli.executeCommandWithOutput(spoListItemListCommand as Command, { options: { ...commandOptions, _: [] } }); if (this.verbose) { await logger.logToStderr(output.stderr); } @@ -163,7 +163,7 @@ class SpoTenantApplicationCustomizerAddCommand extends SpoCommand { output: 'json' }; - const output = await Cli.executeCommandWithOutput(spoListItemListCommand as Command, { options: { ...commandOptions, _: [] } }); + const output = await cli.executeCommandWithOutput(spoListItemListCommand as Command, { options: { ...commandOptions, _: [] } }); if (this.verbose) { await logger.logToStderr(output.stderr); } @@ -197,7 +197,7 @@ class SpoTenantApplicationCustomizerAddCommand extends SpoCommand { output: options.output }; - await Cli.executeCommand(spoListItemAddCommand as Command, { options: { ...commandOptions, _: [] } }); + await cli.executeCommand(spoListItemAddCommand as Command, { options: { ...commandOptions, _: [] } }); } } diff --git a/src/m365/spo/commands/tenant/tenant-applicationcustomizer-get.spec.ts b/src/m365/spo/commands/tenant/tenant-applicationcustomizer-get.spec.ts index bc4e898e619..91cd6db3669 100644 --- a/src/m365/spo/commands/tenant/tenant-applicationcustomizer-get.spec.ts +++ b/src/m365/spo/commands/tenant/tenant-applicationcustomizer-get.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -48,21 +48,19 @@ describe(commands.TENANT_APPLICATIONCUSTOMIZER_GET, () => { }] }; - let cli: Cli; let log: any[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; auth.service.spoUrl = spoUrl; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -85,7 +83,7 @@ describe(commands.TENANT_APPLICATIONCUSTOMIZER_GET, () => { sinonUtil.restore([ request.get, cli.getSettingWithDefaultValue, - Cli.handleMultipleResultsFound + cli.handleMultipleResultsFound ]); }); @@ -327,7 +325,7 @@ describe(commands.TENANT_APPLICATIONCUSTOMIZER_GET, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves(applicationCustomizerResponse.value[0]); + sinon.stub(cli, 'handleMultipleResultsFound').resolves(applicationCustomizerResponse.value[0]); await command.action(logger, { options: { diff --git a/src/m365/spo/commands/tenant/tenant-applicationcustomizer-get.ts b/src/m365/spo/commands/tenant/tenant-applicationcustomizer-get.ts index 79cf227d370..acae0da8fd2 100644 --- a/src/m365/spo/commands/tenant/tenant-applicationcustomizer-get.ts +++ b/src/m365/spo/commands/tenant/tenant-applicationcustomizer-get.ts @@ -7,7 +7,7 @@ import { urlUtil } from '../../../../utils/urlUtil.js'; import { validation } from '../../../../utils/validation.js'; import SpoCommand from '../../../base/SpoCommand.js'; import commands from '../../commands.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { ListItemInstance } from '../listitem/ListItemInstance.js'; interface CommandArgs { @@ -113,7 +113,7 @@ class SpoTenantApplicationCustomizerGetCommand extends SpoCommand { if (listItemInstances.length > 1) { const resultAsKeyValuePair = formatting.convertArrayToHashTable('Id', listItemInstances); - const result = await Cli.handleMultipleResultsFound(`Multiple application customizers with ${args.options.title || args.options.clientSideComponentId} were found.`, resultAsKeyValuePair); + const result = await cli.handleMultipleResultsFound(`Multiple application customizers with ${args.options.title || args.options.clientSideComponentId} were found.`, resultAsKeyValuePair); await logger.log(result); } else { diff --git a/src/m365/spo/commands/tenant/tenant-applicationcustomizer-remove.spec.ts b/src/m365/spo/commands/tenant/tenant-applicationcustomizer-remove.spec.ts index 3babeaa1839..d08e10cb548 100644 --- a/src/m365/spo/commands/tenant/tenant-applicationcustomizer-remove.spec.ts +++ b/src/m365/spo/commands/tenant/tenant-applicationcustomizer-remove.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -49,22 +49,20 @@ describe(commands.TENANT_APPLICATIONCUSTOMIZER_REMOVE, () => { }] }; - let cli: Cli; let log: any[]; let logger: Logger; let commandInfo: CommandInfo; let promptIssued: boolean = false; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; auth.service.spoUrl = spoUrl; - commandInfo = Cli.getCommandInfo(command); - sinon.stub(Cli.getInstance(), 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { + commandInfo = cli.getCommandInfo(command); + sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { if (settingName === 'prompt') { return false; } @@ -86,7 +84,7 @@ describe(commands.TENANT_APPLICATIONCUSTOMIZER_REMOVE, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -99,8 +97,8 @@ describe(commands.TENANT_APPLICATIONCUSTOMIZER_REMOVE, () => { request.get, request.post, cli.getSettingWithDefaultValue, - Cli.promptForConfirmation, - Cli.handleMultipleResultsFound + cli.promptForConfirmation, + cli.handleMultipleResultsFound ]); }); @@ -244,8 +242,8 @@ describe(commands.TENANT_APPLICATIONCUSTOMIZER_REMOVE, () => { it('aborts removing the specified tenant applicationcustomizer when force option not passed and prompt not confirmed', async () => { const postSpy = sinon.spy(request, 'delete'); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { id: id @@ -313,8 +311,8 @@ describe(commands.TENANT_APPLICATIONCUSTOMIZER_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -346,8 +344,8 @@ describe(commands.TENANT_APPLICATIONCUSTOMIZER_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -379,8 +377,8 @@ describe(commands.TENANT_APPLICATIONCUSTOMIZER_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -412,8 +410,8 @@ describe(commands.TENANT_APPLICATIONCUSTOMIZER_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -478,7 +476,7 @@ describe(commands.TENANT_APPLICATIONCUSTOMIZER_REMOVE, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves(applicationCustomizerResponse.value[0]); + sinon.stub(cli, 'handleMultipleResultsFound').resolves(applicationCustomizerResponse.value[0]); const postSpy = sinon.stub(request, 'post').callsFake(async (opts) => { if (opts.url === `https://contoso.sharepoint.com/sites/apps/_api/web/GetList('%2Fsites%2Fapps%2Flists%2FTenantWideExtensions')/items(4)`) { @@ -488,8 +486,8 @@ describe(commands.TENANT_APPLICATIONCUSTOMIZER_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { diff --git a/src/m365/spo/commands/tenant/tenant-applicationcustomizer-remove.ts b/src/m365/spo/commands/tenant/tenant-applicationcustomizer-remove.ts index 5bef07a24ac..1e0cd593caa 100644 --- a/src/m365/spo/commands/tenant/tenant-applicationcustomizer-remove.ts +++ b/src/m365/spo/commands/tenant/tenant-applicationcustomizer-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -98,7 +98,7 @@ class SpoTenantApplicationCustomizerRemoveCommand extends SpoCommand { return await this.removeTenantApplicationCustomizer(logger, args); } - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the tenant applicationcustomizer ${args.options.id || args.options.title || args.options.clientSideComponentId}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the tenant applicationcustomizer ${args.options.id || args.options.title || args.options.clientSideComponentId}?` }); if (result) { await this.removeTenantApplicationCustomizer(logger, args); @@ -133,7 +133,7 @@ class SpoTenantApplicationCustomizerRemoveCommand extends SpoCommand { if (listItemInstances.length > 1) { const resultAsKeyValuePair = formatting.convertArrayToHashTable('Id', listItemInstances); - listItemInstances[0] = await Cli.handleMultipleResultsFound(`Multiple application customizers with ${args.options.title || args.options.clientSideComponentId} were found.`, resultAsKeyValuePair); + listItemInstances[0] = await cli.handleMultipleResultsFound(`Multiple application customizers with ${args.options.title || args.options.clientSideComponentId} were found.`, resultAsKeyValuePair); } return listItemInstances[0].Id; diff --git a/src/m365/spo/commands/tenant/tenant-applicationcustomizer-set.spec.ts b/src/m365/spo/commands/tenant/tenant-applicationcustomizer-set.spec.ts index 47ae3539f50..f31ea22cba0 100644 --- a/src/m365/spo/commands/tenant/tenant-applicationcustomizer-set.spec.ts +++ b/src/m365/spo/commands/tenant/tenant-applicationcustomizer-set.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -66,7 +66,6 @@ describe(commands.TENANT_APPLICATIONCUSTOMIZER_SET, () => { { Title: title, Id: 4, TenantWideExtensionComponentId: clientSideComponentId } ] }; - let cli: Cli; let log: any[]; let logger: Logger; let commandInfo: CommandInfo; @@ -120,14 +119,13 @@ describe(commands.TENANT_APPLICATIONCUSTOMIZER_SET, () => { }; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; auth.service.spoUrl = spoUrl; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -150,9 +148,9 @@ describe(commands.TENANT_APPLICATIONCUSTOMIZER_SET, () => { request.get, request.post, cli.getSettingWithDefaultValue, - Cli.handleMultipleResultsFound, - Cli.executeCommand, - Cli.executeCommandWithOutput + cli.handleMultipleResultsFound, + cli.executeCommand, + cli.executeCommandWithOutput ]); }); @@ -328,7 +326,7 @@ describe(commands.TENANT_APPLICATIONCUSTOMIZER_SET, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves(applicationCustomizerResponse.value[0]); + sinon.stub(cli, 'handleMultipleResultsFound').resolves(applicationCustomizerResponse.value[0]); const executeCallsStub: sinon.SinonStub = defaultPostCallsStub(); await command.action(logger, { @@ -394,7 +392,7 @@ describe(commands.TENANT_APPLICATIONCUSTOMIZER_SET, () => { }); it('updates client side component id of an application customizer by title', async () => { - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { if (command === spoListItemListCommand) { if (args.options.listUrl === `${urlUtil.getServerRelativeSiteUrl(appCatalogUrl)}/Lists/ComponentManifests`) { return { 'stdout': JSON.stringify(solutionResponse) }; @@ -440,7 +438,7 @@ describe(commands.TENANT_APPLICATIONCUSTOMIZER_SET, () => { }); it('throws an error when specific client side component is not found in manifest list', async () => { - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { if (command === spoListItemListCommand) { if (args.options.listUrl === `${urlUtil.getServerRelativeSiteUrl(appCatalogUrl)}/Lists/ComponentManifests`) { return { 'stdout': JSON.stringify([]) }; @@ -458,7 +456,7 @@ describe(commands.TENANT_APPLICATIONCUSTOMIZER_SET, () => { }); it('throws an error when client side component to update is not of type application customizer', async () => { - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { if (command === spoListItemListCommand) { if (args.options.listUrl === `${urlUtil.getServerRelativeSiteUrl(appCatalogUrl)}/Lists/ComponentManifests`) { const faultyClientComponentManifest = "{\"id\":\"6b2a54c5-3317-49eb-8621-1bbb76263629\",\"alias\":\"HelloWorldApplicationCustomizer\",\"componentType\":\"Extension\",\"extensionType\":\"FormCustomizer\",\"version\":\"0.0.1\",\"manifestVersion\":2,\"loaderConfig\":{\"internalModuleBaseUrls\":[\"HTTPS://SPCLIENTSIDEASSETLIBRARY/\"],\"entryModuleId\":\"hello-world-application-customizer\",\"scriptResources\":{\"hello-world-application-customizer\":{\"type\":\"path\",\"path\":\"hello-world-application-customizer_b47769f9eca3d3b6c4d5.js\"},\"HelloWorldApplicationCustomizerStrings\":{\"type\":\"path\",\"path\":\"HelloWorldApplicationCustomizerStrings_en-us_72ca11838ac9bae2790a8692c260e1ac.js\"},\"@microsoft/sp-application-base\":{\"type\":\"component\",\"id\":\"4df9bb86-ab0a-4aab-ab5f-48bf167048fb\",\"version\":\"1.15.2\"},\"@microsoft/sp-core-library\":{\"type\":\"component\",\"id\":\"7263c7d0-1d6a-45ec-8d85-d4d1d234171b\",\"version\":\"1.15.2\"}}},\"mpnId\":\"Undefined-1.15.2\",\"clientComponentDeveloper\":\"\"}"; @@ -479,7 +477,7 @@ describe(commands.TENANT_APPLICATIONCUSTOMIZER_SET, () => { }); it('throws an error when solution is not found in app catalog', async () => { - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { if (command === spoListItemListCommand) { if (args.options.listUrl === `${urlUtil.getServerRelativeSiteUrl(appCatalogUrl)}/Lists/ComponentManifests`) { return { 'stdout': JSON.stringify(solutionResponse) }; @@ -500,7 +498,7 @@ describe(commands.TENANT_APPLICATIONCUSTOMIZER_SET, () => { }); it('throws an error when solution does not contain extension that can be deployed tenant-wide', async () => { - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { if (command === spoListItemListCommand) { if (args.options.listUrl === `${urlUtil.getServerRelativeSiteUrl(appCatalogUrl)}/Lists/ComponentManifests`) { return { 'stdout': JSON.stringify(solutionResponse) }; @@ -523,7 +521,7 @@ describe(commands.TENANT_APPLICATIONCUSTOMIZER_SET, () => { }); it('throws an error when solution is not deployed globally', async () => { - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { if (command === spoListItemListCommand) { if (args.options.listUrl === `${urlUtil.getServerRelativeSiteUrl(appCatalogUrl)}/Lists/ComponentManifests`) { return { 'stdout': JSON.stringify(solutionResponse) }; diff --git a/src/m365/spo/commands/tenant/tenant-applicationcustomizer-set.ts b/src/m365/spo/commands/tenant/tenant-applicationcustomizer-set.ts index e7767b4132d..e04e8e037ca 100644 --- a/src/m365/spo/commands/tenant/tenant-applicationcustomizer-set.ts +++ b/src/m365/spo/commands/tenant/tenant-applicationcustomizer-set.ts @@ -1,6 +1,6 @@ import Command from '../../../../Command.js'; import GlobalOptions from '../../../../GlobalOptions.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import request, { CliRequestOptions } from '../../../../request.js'; import { formatting } from '../../../../utils/formatting.js'; @@ -170,7 +170,7 @@ class SpoTenantApplicationCustomizerSetCommand extends SpoCommand { if (listItemInstances.length > 1) { const resultAsKeyValuePair = formatting.convertArrayToHashTable('Id', listItemInstances); - const result = await Cli.handleMultipleResultsFound(`Multiple application customizers with ${title ? `title '${title}'` : `ClientSideComponentId '${clientSideComponentId}'`} found.`, resultAsKeyValuePair); + const result = await cli.handleMultipleResultsFound(`Multiple application customizers with ${title ? `title '${title}'` : `ClientSideComponentId '${clientSideComponentId}'`} found.`, resultAsKeyValuePair); return result.Id; } @@ -192,7 +192,7 @@ class SpoTenantApplicationCustomizerSetCommand extends SpoCommand { output: 'json' }; - const output = await Cli.executeCommandWithOutput(spoListItemListCommand as Command, { options: { ...commandOptions, _: [] } }); + const output = await cli.executeCommandWithOutput(spoListItemListCommand as Command, { options: { ...commandOptions, _: [] } }); if (this.verbose) { logger.logToStderr(output.stderr); @@ -222,7 +222,7 @@ class SpoTenantApplicationCustomizerSetCommand extends SpoCommand { output: 'json' }; - const output = await Cli.executeCommandWithOutput(spoListItemListCommand as Command, { options: { ...commandOptions, _: [] } }); + const output = await cli.executeCommandWithOutput(spoListItemListCommand as Command, { options: { ...commandOptions, _: [] } }); if (this.verbose) { logger.logToStderr(output.stderr); diff --git a/src/m365/spo/commands/tenant/tenant-commandset-add.spec.ts b/src/m365/spo/commands/tenant/tenant-commandset-add.spec.ts index 1d95d13a106..c2aa0527357 100644 --- a/src/m365/spo/commands/tenant/tenant-commandset-add.spec.ts +++ b/src/m365/spo/commands/tenant/tenant-commandset-add.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { telemetry } from '../../../../telemetry.js'; @@ -40,7 +40,7 @@ describe(commands.TENANT_COMMANDSET_ADD, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -60,8 +60,8 @@ describe(commands.TENANT_COMMANDSET_ADD, () => { afterEach(() => { sinonUtil.restore([ - Cli.executeCommand, - Cli.executeCommandWithOutput + cli.executeCommand, + cli.executeCommandWithOutput ]); }); @@ -80,7 +80,7 @@ describe(commands.TENANT_COMMANDSET_ADD, () => { it('adds a tenant-wide ListView Command Set for lists', async () => { let executeCommandCalled = false; - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { if (command === spoListItemListCommand) { if (args.options.listUrl === `${urlUtil.getServerRelativeSiteUrl(appCatalogUrl)}/Lists/ComponentManifests`) { return { 'stdout': JSON.stringify(solutionResponse) }; @@ -95,7 +95,7 @@ describe(commands.TENANT_COMMANDSET_ADD, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommand').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommand').callsFake(async (command): Promise => { if (command === spoListItemAddCommand) { executeCommandCalled = true; return; @@ -109,7 +109,7 @@ describe(commands.TENANT_COMMANDSET_ADD, () => { it('adds a tenant-wide ListView Command Set for libraries', async () => { let executeCommandCalled = false; - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { if (command === spoListItemListCommand) { if (args.options.listUrl === `${urlUtil.getServerRelativeSiteUrl(appCatalogUrl)}/Lists/ComponentManifests`) { return { 'stdout': JSON.stringify(solutionResponse) }; @@ -124,7 +124,7 @@ describe(commands.TENANT_COMMANDSET_ADD, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommand').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommand').callsFake(async (command): Promise => { if (command === spoListItemAddCommand) { executeCommandCalled = true; return; @@ -138,7 +138,7 @@ describe(commands.TENANT_COMMANDSET_ADD, () => { it('adds a tenant-wide ListView Command Set for the SitePages library', async () => { let executeCommandCalled = false; - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { if (command === spoListItemListCommand) { if (args.options.listUrl === `${urlUtil.getServerRelativeSiteUrl(appCatalogUrl)}/Lists/ComponentManifests`) { return { 'stdout': JSON.stringify(solutionResponse) }; @@ -153,7 +153,7 @@ describe(commands.TENANT_COMMANDSET_ADD, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommand').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommand').callsFake(async (command): Promise => { if (command === spoListItemAddCommand) { executeCommandCalled = true; return; @@ -167,7 +167,7 @@ describe(commands.TENANT_COMMANDSET_ADD, () => { it('adds a tenant-wide ListView Command Set to a specific webtemplate and location including clientSideComponentProperties', async () => { let executeCommandCalled = false; - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { if (command === spoListItemListCommand) { if (args.options.listUrl === `${urlUtil.getServerRelativeSiteUrl(appCatalogUrl)}/Lists/ComponentManifests`) { return { 'stdout': JSON.stringify(solutionResponse) }; @@ -182,7 +182,7 @@ describe(commands.TENANT_COMMANDSET_ADD, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommand').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommand').callsFake(async (command): Promise => { if (command === spoListItemAddCommand) { executeCommandCalled = true; return; @@ -195,7 +195,7 @@ describe(commands.TENANT_COMMANDSET_ADD, () => { }); it('throws an error when no app catalog is found', async () => { - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoTenantAppCatalogUrlGetCommand) { return { 'stdout': null }; } @@ -207,7 +207,7 @@ describe(commands.TENANT_COMMANDSET_ADD, () => { }); it('throws an error when specific client side component is not found in manifest list', async () => { - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { if (command === spoListItemListCommand) { if (args.options.listUrl === `${urlUtil.getServerRelativeSiteUrl(appCatalogUrl)}/Lists/ComponentManifests`) { return { 'stdout': JSON.stringify([]) }; @@ -224,7 +224,7 @@ describe(commands.TENANT_COMMANDSET_ADD, () => { }); it('throws an error when the manifest of a specific client side component is not of type ListView Command Set', async () => { - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { if (command === spoListItemListCommand) { if (args.options.listUrl === `${urlUtil.getServerRelativeSiteUrl(appCatalogUrl)}/Lists/ComponentManifests`) { const faultyClientComponentManifest = "{\"id\":\"6b2a54c5-3317-49eb-8621-1bbb76263629\",\"alias\":\"HelloWorldCommandSet\",\"componentType\":\"Extension\",\"extensionType\":\"FormCustomizer\",\"version\":\"0.0.1\",\"manifestVersion\":2,\"loaderConfig\":{\"internalModuleBaseUrls\":[\"HTTPS://SPCLIENTSIDEASSETLIBRARY/\"],\"entryModuleId\":\"hello-world-command-set\",\"scriptResources\":{\"hello-world-command-set\":{\"type\":\"path\",\"path\":\"hello-world-command-set_b47769f9eca3d3b6c4d5.js\"},\"HelloWorldCommandSetStrings\":{\"type\":\"path\",\"path\":\"HelloWorldCommandSetStrings_en-us_72ca11838ac9bae2790a8692c260e1ac.js\"},\"@microsoft/sp-application-base\":{\"type\":\"component\",\"id\":\"4df9bb86-ab0a-4aab-ab5f-48bf167048fb\",\"version\":\"1.15.2\"},\"@microsoft/sp-core-library\":{\"type\":\"component\",\"id\":\"7263c7d0-1d6a-45ec-8d85-d4d1d234171b\",\"version\":\"1.15.2\"}}},\"mpnId\":\"Undefined-1.15.2\",\"clientComponentDeveloper\":\"\"}"; @@ -244,7 +244,7 @@ describe(commands.TENANT_COMMANDSET_ADD, () => { }); it('throws an error when solution is not found in app catalog', async () => { - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { if (command === spoListItemListCommand) { if (args.options.listUrl === `${urlUtil.getServerRelativeSiteUrl(appCatalogUrl)}/Lists/ComponentManifests`) { return { 'stdout': JSON.stringify(solutionResponse) }; @@ -264,7 +264,7 @@ describe(commands.TENANT_COMMANDSET_ADD, () => { }); it('throws an error when solution does not contain extension that can be deployed tenant-wide', async () => { - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { if (command === spoListItemListCommand) { if (args.options.listUrl === `${urlUtil.getServerRelativeSiteUrl(appCatalogUrl)}/Lists/ComponentManifests`) { return { 'stdout': JSON.stringify(solutionResponse) }; @@ -286,7 +286,7 @@ describe(commands.TENANT_COMMANDSET_ADD, () => { }); it('throws an error when solution is not deployed globally', async () => { - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command, args): Promise => { if (command === spoListItemListCommand) { if (args.options.listUrl === `${urlUtil.getServerRelativeSiteUrl(appCatalogUrl)}/Lists/ComponentManifests`) { return { 'stdout': JSON.stringify(solutionResponse) }; diff --git a/src/m365/spo/commands/tenant/tenant-commandset-add.ts b/src/m365/spo/commands/tenant/tenant-commandset-add.ts index 3f3f286ee99..f8934f6e242 100644 --- a/src/m365/spo/commands/tenant/tenant-commandset-add.ts +++ b/src/m365/spo/commands/tenant/tenant-commandset-add.ts @@ -1,7 +1,7 @@ import Command from '../../../../Command.js'; import GlobalOptions from '../../../../GlobalOptions.js'; -import { Cli, CommandOutput } from '../../../../cli/Cli.js'; import { Logger } from '../../../../cli/Logger.js'; +import { CommandOutput, cli } from '../../../../cli/cli.js'; import { urlUtil } from '../../../../utils/urlUtil.js'; import { validation } from '../../../../utils/validation.js'; import SpoCommand from '../../../base/SpoCommand.js'; @@ -127,7 +127,7 @@ class SpoTenantCommandSetAddCommand extends SpoCommand { } private async getAppCatalogUrl(logger: Logger): Promise { - const spoTenantAppCatalogUrlGetCommandOutput: CommandOutput = await Cli.executeCommandWithOutput(spoTenantAppCatalogUrlGetCommand as Command, { options: { output: 'text', _: [] } }); + const spoTenantAppCatalogUrlGetCommandOutput: CommandOutput = await cli.executeCommandWithOutput(spoTenantAppCatalogUrlGetCommand as Command, { options: { output: 'text', _: [] } }); if (this.verbose) { await logger.logToStderr(spoTenantAppCatalogUrlGetCommandOutput.stderr); } @@ -158,7 +158,7 @@ class SpoTenantCommandSetAddCommand extends SpoCommand { output: 'json' }; - const output = await Cli.executeCommandWithOutput(spoListItemListCommand as Command, { options: { ...commandOptions, _: [] } }); + const output = await cli.executeCommandWithOutput(spoListItemListCommand as Command, { options: { ...commandOptions, _: [] } }); if (this.verbose) { await logger.logToStderr(output.stderr); } @@ -186,7 +186,7 @@ class SpoTenantCommandSetAddCommand extends SpoCommand { output: 'json' }; - const output = await Cli.executeCommandWithOutput(spoListItemListCommand as Command, { options: { ...commandOptions, _: [] } }); + const output = await cli.executeCommandWithOutput(spoListItemListCommand as Command, { options: { ...commandOptions, _: [] } }); if (this.verbose) { await logger.logToStderr(output.stderr); } @@ -220,7 +220,7 @@ class SpoTenantCommandSetAddCommand extends SpoCommand { output: options.output }; - await Cli.executeCommand(spoListItemAddCommand as Command, { options: { ...commandOptions, _: [] } }); + await cli.executeCommand(spoListItemAddCommand as Command, { options: { ...commandOptions, _: [] } }); } private getLocation(location: string | undefined): string { diff --git a/src/m365/spo/commands/tenant/tenant-commandset-get.spec.ts b/src/m365/spo/commands/tenant/tenant-commandset-get.spec.ts index e62541cc5b3..f1f63ac0022 100644 --- a/src/m365/spo/commands/tenant/tenant-commandset-get.spec.ts +++ b/src/m365/spo/commands/tenant/tenant-commandset-get.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -48,22 +48,20 @@ describe(commands.TENANT_COMMANDSET_GET, () => { }] }; - let cli: Cli; let log: any[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; auth.service.spoUrl = spoUrl; - commandInfo = Cli.getCommandInfo(command); - sinon.stub(Cli.getInstance(), 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { + commandInfo = cli.getCommandInfo(command); + sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { if (settingName === 'prompt') { return false; } @@ -91,7 +89,7 @@ describe(commands.TENANT_COMMANDSET_GET, () => { afterEach(() => { sinonUtil.restore([ request.get, - Cli.handleMultipleResultsFound, + cli.handleMultipleResultsFound, cli.getSettingWithDefaultValue ]); }); @@ -334,7 +332,7 @@ describe(commands.TENANT_COMMANDSET_GET, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves(commandSetResponse.value[0]); + sinon.stub(cli, 'handleMultipleResultsFound').resolves(commandSetResponse.value[0]); await command.action(logger, { options: { diff --git a/src/m365/spo/commands/tenant/tenant-commandset-get.ts b/src/m365/spo/commands/tenant/tenant-commandset-get.ts index a2eb5e9499d..88e5c163c75 100644 --- a/src/m365/spo/commands/tenant/tenant-commandset-get.ts +++ b/src/m365/spo/commands/tenant/tenant-commandset-get.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; import GlobalOptions from '../../../../GlobalOptions.js'; @@ -119,7 +119,7 @@ class SpoTenantCommandSetGetCommand extends SpoCommand { if (listItemInstances.value.length > 1) { const resultAsKeyValuePair = formatting.convertArrayToHashTable('Id', listItemInstances.value); - const result = await Cli.handleMultipleResultsFound(`Multiple ListView Command Sets with ${args.options.title || args.options.clientSideComponentId} were found.`, resultAsKeyValuePair); + const result = await cli.handleMultipleResultsFound(`Multiple ListView Command Sets with ${args.options.title || args.options.clientSideComponentId} were found.`, resultAsKeyValuePair); await logger.log(result); } else { diff --git a/src/m365/spo/commands/tenant/tenant-commandset-remove.spec.ts b/src/m365/spo/commands/tenant/tenant-commandset-remove.spec.ts index 603ed6d5d2a..53e4ec21b54 100644 --- a/src/m365/spo/commands/tenant/tenant-commandset-remove.spec.ts +++ b/src/m365/spo/commands/tenant/tenant-commandset-remove.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -48,22 +48,20 @@ describe(commands.TENANT_COMMANDSET_REMOVE, () => { }] }; - let cli: Cli; let log: any[]; let logger: Logger; let commandInfo: CommandInfo; let promptIssued: boolean = false; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; auth.service.spoUrl = spoUrl; - commandInfo = Cli.getCommandInfo(command); - sinon.stub(Cli.getInstance(), 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { + commandInfo = cli.getCommandInfo(command); + sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { if (settingName === 'prompt') { return false; } @@ -86,7 +84,7 @@ describe(commands.TENANT_COMMANDSET_REMOVE, () => { } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -99,8 +97,8 @@ describe(commands.TENANT_COMMANDSET_REMOVE, () => { request.get, request.post, cli.getSettingWithDefaultValue, - Cli.promptForConfirmation, - Cli.handleMultipleResultsFound + cli.promptForConfirmation, + cli.handleMultipleResultsFound ]); }); @@ -244,8 +242,8 @@ describe(commands.TENANT_COMMANDSET_REMOVE, () => { it('aborts removing the specified tenant command set when force option not passed and prompt not confirmed', async () => { const postSpy = sinon.spy(request, 'post'); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { id: id @@ -313,8 +311,8 @@ describe(commands.TENANT_COMMANDSET_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -346,8 +344,8 @@ describe(commands.TENANT_COMMANDSET_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -379,8 +377,8 @@ describe(commands.TENANT_COMMANDSET_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -412,8 +410,8 @@ describe(commands.TENANT_COMMANDSET_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -513,7 +511,7 @@ describe(commands.TENANT_COMMANDSET_REMOVE, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves(commandSetResponse.value[0]); + sinon.stub(cli, 'handleMultipleResultsFound').resolves(commandSetResponse.value[0]); const postSpy = sinon.stub(request, 'post').callsFake(async (opts) => { if (opts.url === `https://contoso.sharepoint.com/sites/apps/_api/web/GetList('%2Fsites%2Fapps%2Flists%2FTenantWideExtensions')/items(4)`) { @@ -523,8 +521,8 @@ describe(commands.TENANT_COMMANDSET_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { diff --git a/src/m365/spo/commands/tenant/tenant-commandset-remove.ts b/src/m365/spo/commands/tenant/tenant-commandset-remove.ts index b5fa7e44f11..552a2a2184b 100644 --- a/src/m365/spo/commands/tenant/tenant-commandset-remove.ts +++ b/src/m365/spo/commands/tenant/tenant-commandset-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -98,7 +98,7 @@ class SpoTenantCommandSetRemoveCommand extends SpoCommand { return await this.removeTenantCommandSet(logger, args); } - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the tenant commandset ${args.options.id || args.options.title || args.options.clientSideComponentId}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the tenant commandset ${args.options.id || args.options.title || args.options.clientSideComponentId}?` }); if (result) { await this.removeTenantCommandSet(logger, args); @@ -163,7 +163,7 @@ class SpoTenantCommandSetRemoveCommand extends SpoCommand { if (listItemInstances.length > 1) { const resultAsKeyValuePair = formatting.convertArrayToHashTable('Id', listItemInstances); - const result = await Cli.handleMultipleResultsFound(`Multiple command sets with ${args.options.title || args.options.clientSideComponentId} were found.`, resultAsKeyValuePair); + const result = await cli.handleMultipleResultsFound(`Multiple command sets with ${args.options.title || args.options.clientSideComponentId} were found.`, resultAsKeyValuePair); return result.Id; } diff --git a/src/m365/spo/commands/tenant/tenant-commandset-set.spec.ts b/src/m365/spo/commands/tenant/tenant-commandset-set.spec.ts index c7e033d10c2..6e8e0e6681f 100644 --- a/src/m365/spo/commands/tenant/tenant-commandset-set.spec.ts +++ b/src/m365/spo/commands/tenant/tenant-commandset-set.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -57,7 +57,7 @@ describe(commands.TENANT_COMMANDSET_SET, () => { sinon.stub(session, 'getId').returns(''); auth.service.connected = true; auth.service.spoUrl = spoUrl; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/tenant/tenant-recyclebinitem-remove.spec.ts b/src/m365/spo/commands/tenant/tenant-recyclebinitem-remove.spec.ts index 7317cae0718..4ee67a5f8ff 100644 --- a/src/m365/spo/commands/tenant/tenant-recyclebinitem-remove.spec.ts +++ b/src/m365/spo/commands/tenant/tenant-recyclebinitem-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -27,7 +27,7 @@ describe(commands.TENANT_RECYCLEBINITEM_REMOVE, () => { sinon.stub(session, 'getId').returns(''); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); sinon.stub(spo, 'ensureFormDigest').resolves({ FormDigestValue: 'abc', FormDigestTimeoutSeconds: 1800, @@ -49,14 +49,14 @@ describe(commands.TENANT_RECYCLEBINITEM_REMOVE, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinon.stub(cli, 'promptForConfirmation').resolves(false); }); afterEach(() => { sinonUtil.restore([ request.post, global.setTimeout, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -110,8 +110,8 @@ describe(commands.TENANT_RECYCLEBINITEM_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { siteUrl: 'https://contoso.sharepoint.com/sites/hr' } }); sinonUtil.restore([ request.post diff --git a/src/m365/spo/commands/tenant/tenant-recyclebinitem-remove.ts b/src/m365/spo/commands/tenant/tenant-recyclebinitem-remove.ts index e6bfebcbecf..3757f1f4e6b 100644 --- a/src/m365/spo/commands/tenant/tenant-recyclebinitem-remove.ts +++ b/src/m365/spo/commands/tenant/tenant-recyclebinitem-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import config from '../../../../config.js'; import GlobalOptions from '../../../../GlobalOptions.js'; @@ -72,7 +72,7 @@ class SpoTenantRecycleBinItemRemoveCommand extends SpoCommand { await this.removeDeletedSite(logger, args); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the deleted site collection ${args.options.siteUrl} from tenant recycle bin?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the deleted site collection ${args.options.siteUrl} from tenant recycle bin?` }); if (result) { await this.removeDeletedSite(logger, args); diff --git a/src/m365/spo/commands/tenant/tenant-recyclebinitem-restore.spec.ts b/src/m365/spo/commands/tenant/tenant-recyclebinitem-restore.spec.ts index 5d5c7872079..5c5ebb3bd22 100644 --- a/src/m365/spo/commands/tenant/tenant-recyclebinitem-restore.spec.ts +++ b/src/m365/spo/commands/tenant/tenant-recyclebinitem-restore.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -26,7 +26,7 @@ describe(commands.TENANT_RECYCLEBINITEM_RESTORE, () => { sinon.stub(session, 'getId').returns(''); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/tenant/tenant-settings-set.spec.ts b/src/m365/spo/commands/tenant/tenant-settings-set.spec.ts index 40b717a8a0c..c1371aacdb6 100644 --- a/src/m365/spo/commands/tenant/tenant-settings-set.spec.ts +++ b/src/m365/spo/commands/tenant/tenant-settings-set.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import chalk from 'chalk'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -50,7 +50,7 @@ describe(commands.TENANT_SETTINGS_SET, () => { auth.service.connected = true; auth.service.spoUrl = 'https://contoso-admin.sharepoint.com'; auth.service.tenantId = '6648899e-a042-6000-ee90-5bfa05d08b79|908bed80-a04a-4433-b4a0-883d9847d11d:ea1787c6-7ce2-4e71-be47-5e0deb30f9ee Tenant'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/term/term-add.spec.ts b/src/m365/spo/commands/term/term-add.spec.ts index 9e3e907dbef..f0deed59e1c 100644 --- a/src/m365/spo/commands/term/term-add.spec.ts +++ b/src/m365/spo/commands/term/term-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -108,14 +108,12 @@ describe(commands.TERM_ADD, () => { "TermsCount": 0 }; - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); @@ -128,7 +126,7 @@ describe(commands.TERM_ADD, () => { }); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/term/term-get.spec.ts b/src/m365/spo/commands/term/term-get.spec.ts index f914bd20cbf..ee29e223960 100644 --- a/src/m365/spo/commands/term/term-get.spec.ts +++ b/src/m365/spo/commands/term/term-get.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import config from '../../../../config.js'; @@ -53,14 +53,12 @@ describe(commands.TERM_GET, () => { const csomResponseByName = [{ "SchemaVersion": "15.0.0.0", "LibraryVersion": "16.0.23325.12003", "ErrorInfo": null, "TraceCorrelationId": "47ff93a0-c06c-6000-110c-be1cdced2038" }, 2, { "IsNull": false }, 3, { "_ObjectIdentity_": "47ff93a0-c06c-6000-110c-be1cdced2038|fec14c62-7c3b-481b-851b-c80d7802b224:ss:" }, 5, { "IsNull": false }, 6, { "_ObjectIdentity_": "47ff93a0-c06c-6000-110c-be1cdced2038|fec14c62-7c3b-481b-851b-c80d7802b224:st:kTm3XibpGUiE5nxBtVMTfw==" }, 8, { "IsNull": false }, 10, { "IsNull": false }, 11, { "_ObjectIdentity_": "47ff93a0-c06c-6000-110c-be1cdced2038|fec14c62-7c3b-481b-851b-c80d7802b224:gr:kTm3XibpGUiE5nxBtVMTf25aOnte4ElDn7uvWBPvXfg=" }, 13, { "IsNull": false }, 15, { "IsNull": false }, 16, { "_ObjectIdentity_": "47ff93a0-c06c-6000-110c-be1cdced2038|fec14c62-7c3b-481b-851b-c80d7802b224:se:kTm3XibpGUiE5nxBtVMTf25aOnte4ElDn7uvWBPvXfjuQ1jPsltwT78ny15SLpmt" }, 18, { "IsNull": false }, 22, { "IsNull": false }, 23, { "_ObjectType_": "SP.Taxonomy.TermCollection", "_Child_Items_": [{ "_ObjectType_": "SP.Taxonomy.Term", "_ObjectIdentity_": "47ff93a0-c06c-6000-110c-be1cdced2038|fec14c62-7c3b-481b-851b-c80d7802b224:te:kTm3XibpGUiE5nxBtVMTf25aOnte4ElDn7uvWBPvXfjuQ1jPsltwT78ny15SLpmtK3lNMyYAhkSlk6IDG1ZBBA==", "CreatedDate": "\/Date(1675790684037)\/", "Id": "\/Guid(334d792b-0026-4486-a593-a2031b564104)\/", "LastModifiedDate": "\/Date(1675790684037)\/", "Name": "Test Term", "CustomProperties": {}, "CustomSortOrder": null, "IsAvailableForTagging": true, "Owner": "i:0#.f|membership|joe@contoso.com", "Description": "", "IsDeprecated": false, "IsKeyword": false, "IsPinned": false, "IsPinnedRoot": false, "IsReused": false, "IsRoot": true, "IsSourceTerm": true, "LocalCustomProperties": {}, "MergedTermIds": [], "PathOfTerm": "Test Term", "TermsCount": 1 }] }]; //#endregion - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); @@ -73,7 +71,7 @@ describe(commands.TERM_GET, () => { }); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -96,7 +94,7 @@ describe(commands.TERM_GET, () => { sinonUtil.restore([ request.post, cli.getSettingWithDefaultValue, - Cli.handleMultipleResultsFound + cli.handleMultipleResultsFound ]); }); @@ -276,7 +274,7 @@ describe(commands.TERM_GET, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves({ "_ObjectType_": "SP.Taxonomy.Term", "_ObjectIdentity_": "b50094a0-80a4-6000-110c-b074a0d4c336|fec14c62-7c3b-481b-851b-c80d7802b224:te:kTm3XibpGUiE5nxBtVMTf25aOnte4ElDn7uvWBPvXfjuQ1jPsltwT78ny15SLpmtEP0Wk4LJvk+y0GrLwtClew==", "CreatedDate": "\/Date(1675790717780)\/", "Id": "\/Guid(9316fd10-c982-4fbe-b2d0-6acbc2d0a57b)\/", "LastModifiedDate": "\/Date(1675790717780)\/", "Name": "Test Child Term", "CustomProperties": {}, "CustomSortOrder": null, "IsAvailableForTagging": true, "Owner": "i:0#.f|membership|joe@contoso.com", "Description": "", "IsDeprecated": false, "IsKeyword": false, "IsPinned": false, "IsPinnedRoot": false, "IsReused": false, "IsRoot": false, "IsSourceTerm": true, "LocalCustomProperties": {}, "MergedTermIds": [], "PathOfTerm": "Test Term;Test Child Term", "TermsCount": 0 }); + sinon.stub(cli, 'handleMultipleResultsFound').resolves({ "_ObjectType_": "SP.Taxonomy.Term", "_ObjectIdentity_": "b50094a0-80a4-6000-110c-b074a0d4c336|fec14c62-7c3b-481b-851b-c80d7802b224:te:kTm3XibpGUiE5nxBtVMTf25aOnte4ElDn7uvWBPvXfjuQ1jPsltwT78ny15SLpmtEP0Wk4LJvk+y0GrLwtClew==", "CreatedDate": "\/Date(1675790717780)\/", "Id": "\/Guid(9316fd10-c982-4fbe-b2d0-6acbc2d0a57b)\/", "LastModifiedDate": "\/Date(1675790717780)\/", "Name": "Test Child Term", "CustomProperties": {}, "CustomSortOrder": null, "IsAvailableForTagging": true, "Owner": "i:0#.f|membership|joe@contoso.com", "Description": "", "IsDeprecated": false, "IsKeyword": false, "IsPinned": false, "IsPinnedRoot": false, "IsReused": false, "IsRoot": false, "IsSourceTerm": true, "LocalCustomProperties": {}, "MergedTermIds": [], "PathOfTerm": "Test Term;Test Child Term", "TermsCount": 0 }); await command.action(logger, { options: { diff --git a/src/m365/spo/commands/term/term-get.ts b/src/m365/spo/commands/term/term-get.ts index 1bb781aa25a..d2b918d5b66 100644 --- a/src/m365/spo/commands/term/term-get.ts +++ b/src/m365/spo/commands/term/term-get.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import { Logger } from '../../../../cli/Logger.js'; import config from '../../../../config.js'; @@ -161,7 +161,7 @@ class SpoTermGetCommand extends SpoCommand { if (terms._Child_Items_.length > 1) { const resultAsKeyValuePair = formatting.convertArrayToHashTable('Id', terms._Child_Items_); - term = await Cli.handleMultipleResultsFound(`Multiple terms with the specific term name found.`, resultAsKeyValuePair); + term = await cli.handleMultipleResultsFound(`Multiple terms with the specific term name found.`, resultAsKeyValuePair); } else { term = terms._Child_Items_[0]; diff --git a/src/m365/spo/commands/term/term-group-add.spec.ts b/src/m365/spo/commands/term/term-group-add.spec.ts index dc3eae59547..c4fa2fb9245 100644 --- a/src/m365/spo/commands/term/term-group-add.spec.ts +++ b/src/m365/spo/commands/term/term-group-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -34,7 +34,7 @@ describe(commands.TERM_GROUP_ADD, () => { }); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/term/term-group-get.spec.ts b/src/m365/spo/commands/term/term-group-get.spec.ts index 31476156dcd..83445e17436 100644 --- a/src/m365/spo/commands/term/term-group-get.spec.ts +++ b/src/m365/spo/commands/term/term-group-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -17,14 +17,12 @@ import command from './term-group-get.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.TERM_GROUP_GET, () => { - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); @@ -37,7 +35,7 @@ describe(commands.TERM_GROUP_GET, () => { }); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/term/term-group-list.spec.ts b/src/m365/spo/commands/term/term-group-list.spec.ts index b9bd28cbaf1..9dba8d68313 100644 --- a/src/m365/spo/commands/term/term-group-list.spec.ts +++ b/src/m365/spo/commands/term/term-group-list.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import config from '../../../../config.js'; @@ -34,7 +34,7 @@ describe(commands.TERM_GROUP_LIST, () => { }); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/term/term-list.spec.ts b/src/m365/spo/commands/term/term-list.spec.ts index 3342e8f0899..efd4e19a70b 100644 --- a/src/m365/spo/commands/term/term-list.spec.ts +++ b/src/m365/spo/commands/term/term-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -390,14 +390,12 @@ describe(commands.TERM_LIST, () => { } ]; - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); @@ -410,7 +408,7 @@ describe(commands.TERM_LIST, () => { }); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/term/term-list.ts b/src/m365/spo/commands/term/term-list.ts index c96376f6d0c..184f459ce48 100644 --- a/src/m365/spo/commands/term/term-list.ts +++ b/src/m365/spo/commands/term/term-list.ts @@ -1,5 +1,5 @@ import { AxiosRequestConfig } from 'axios'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import config from '../../../../config.js'; import GlobalOptions from '../../../../GlobalOptions.js'; @@ -138,7 +138,7 @@ class SpoTermListCommand extends SpoCommand { } } - if (!args.options.output || !Cli.shouldTrimOutput(args.options.output)) { + if (!args.options.output || !cli.shouldTrimOutput(args.options.output)) { await logger.log(terms); } else if (!args.options.includeChildTerms) { diff --git a/src/m365/spo/commands/term/term-set-add.spec.ts b/src/m365/spo/commands/term/term-set-add.spec.ts index 4eefad6eba0..630ea42ec47 100644 --- a/src/m365/spo/commands/term/term-set-add.spec.ts +++ b/src/m365/spo/commands/term/term-set-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -17,14 +17,12 @@ import command from './term-set-add.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.TERM_SET_ADD, () => { - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); @@ -37,7 +35,7 @@ describe(commands.TERM_SET_ADD, () => { }); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/term/term-set-get.spec.ts b/src/m365/spo/commands/term/term-set-get.spec.ts index b2f21cd09dd..2498ee3c2b7 100644 --- a/src/m365/spo/commands/term/term-set-get.spec.ts +++ b/src/m365/spo/commands/term/term-set-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -113,14 +113,12 @@ describe(commands.TERM_SET_GET, () => { "Stakeholders": [] }; - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); @@ -133,7 +131,7 @@ describe(commands.TERM_SET_GET, () => { }); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/term/term-set-list.spec.ts b/src/m365/spo/commands/term/term-set-list.spec.ts index 7d9292b948b..04c4ca4a1d3 100644 --- a/src/m365/spo/commands/term/term-set-list.spec.ts +++ b/src/m365/spo/commands/term/term-set-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -17,14 +17,12 @@ import command from './term-set-list.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.TERM_SET_LIST, () => { - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); @@ -37,7 +35,7 @@ describe(commands.TERM_SET_LIST, () => { }); auth.service.spoUrl = 'https://contoso.sharepoint.com'; auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/theme/theme-apply.spec.ts b/src/m365/spo/commands/theme/theme-apply.spec.ts index 3161c6776c7..bc7fe76d007 100644 --- a/src/m365/spo/commands/theme/theme-apply.spec.ts +++ b/src/m365/spo/commands/theme/theme-apply.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -35,7 +35,7 @@ describe(commands.THEME_APPLY, () => { }); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/theme/theme-remove.spec.ts b/src/m365/spo/commands/theme/theme-remove.spec.ts index 81648fa2d7a..1d62d424393 100644 --- a/src/m365/spo/commands/theme/theme-remove.spec.ts +++ b/src/m365/spo/commands/theme/theme-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; import request from '../../../../request.js'; @@ -41,7 +41,7 @@ describe(commands.THEME_REMOVE, () => { } }; loggerLogSpy = sinon.spy(logger, 'log'); - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -52,7 +52,7 @@ describe(commands.THEME_REMOVE, () => { afterEach(() => { sinonUtil.restore([ request.post, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -130,8 +130,8 @@ describe(commands.THEME_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -154,8 +154,8 @@ describe(commands.THEME_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await assert.rejects(command.action(logger, { options: { diff --git a/src/m365/spo/commands/theme/theme-remove.ts b/src/m365/spo/commands/theme/theme-remove.ts index 5acf46dd6f7..f5f8843da4b 100644 --- a/src/m365/spo/commands/theme/theme-remove.ts +++ b/src/m365/spo/commands/theme/theme-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -55,7 +55,7 @@ class SpoThemeRemoveCommand extends SpoCommand { await this.removeTheme(logger, args.options); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the theme` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the theme` }); if (result) { await this.removeTheme(logger, args.options); diff --git a/src/m365/spo/commands/theme/theme-set.spec.ts b/src/m365/spo/commands/theme/theme-set.spec.ts index 217486ec6ab..21cebe0085e 100644 --- a/src/m365/spo/commands/theme/theme-set.spec.ts +++ b/src/m365/spo/commands/theme/theme-set.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -35,7 +35,7 @@ describe(commands.THEME_SET, () => { }); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/user/user-ensure.spec.ts b/src/m365/spo/commands/user/user-ensure.spec.ts index 67466ee5ae3..7eb5e0264b8 100644 --- a/src/m365/spo/commands/user/user-ensure.spec.ts +++ b/src/m365/spo/commands/user/user-ensure.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -47,7 +47,7 @@ describe(commands.USER_ENSURE, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/user/user-get.spec.ts b/src/m365/spo/commands/user/user-get.spec.ts index 65bf8a262af..527f3bc3d44 100644 --- a/src/m365/spo/commands/user/user-get.spec.ts +++ b/src/m365/spo/commands/user/user-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,20 +15,18 @@ import command from './user-get.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.USER_GET, () => { - let cli: Cli; let log: any[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/user/user-list.spec.ts b/src/m365/spo/commands/user/user-list.spec.ts index 9d62a950344..92743d13a46 100644 --- a/src/m365/spo/commands/user/user-list.spec.ts +++ b/src/m365/spo/commands/user/user-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -25,7 +25,7 @@ describe(commands.USER_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/user/user-remove.spec.ts b/src/m365/spo/commands/user/user-remove.spec.ts index 2519885c2fd..47b94328283 100644 --- a/src/m365/spo/commands/user/user-remove.spec.ts +++ b/src/m365/spo/commands/user/user-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,7 +15,6 @@ import command from './user-remove.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.USER_REMOVE, () => { - let cli: Cli; let log: any[]; let requests: any[]; let logger: Logger; @@ -23,13 +22,12 @@ describe(commands.USER_REMOVE, () => { let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -46,7 +44,7 @@ describe(commands.USER_REMOVE, () => { } }; requests = []; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -56,7 +54,7 @@ describe(commands.USER_REMOVE, () => { afterEach(() => { sinonUtil.restore([ request.post, - Cli.promptForConfirmation, + cli.promptForConfirmation, cli.getSettingWithDefaultValue ]); }); @@ -206,8 +204,8 @@ describe(commands.USER_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { webUrl: "https://contoso.sharepoint.com/subsite", @@ -233,8 +231,8 @@ describe(commands.USER_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { webUrl: "https://contoso.sharepoint.com/subsite", diff --git a/src/m365/spo/commands/user/user-remove.ts b/src/m365/spo/commands/user/user-remove.ts index 84b8d0d570f..944b5f0e5fc 100644 --- a/src/m365/spo/commands/user/user-remove.ts +++ b/src/m365/spo/commands/user/user-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -80,7 +80,7 @@ class SpoUserRemoveCommand extends SpoCommand { await this.removeUser(logger, args.options); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove specified user from the site ${args.options.webUrl}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove specified user from the site ${args.options.webUrl}?` }); if (result) { await this.removeUser(logger, args.options); diff --git a/src/m365/spo/commands/userprofile/userprofile-get.spec.ts b/src/m365/spo/commands/userprofile/userprofile-get.spec.ts index 8fd61ac8807..4d8fa1c602f 100644 --- a/src/m365/spo/commands/userprofile/userprofile-get.spec.ts +++ b/src/m365/spo/commands/userprofile/userprofile-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -33,7 +33,7 @@ describe(commands.USERPROFILE_GET, () => { }); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/userprofile/userprofile-get.ts b/src/m365/spo/commands/userprofile/userprofile-get.ts index 9b320601a2b..a6ef3fc9e38 100644 --- a/src/m365/spo/commands/userprofile/userprofile-get.ts +++ b/src/m365/spo/commands/userprofile/userprofile-get.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request from '../../../../request.js'; @@ -65,7 +65,7 @@ class SpoUserProfileGetCommand extends SpoCommand { }; const res: { UserProfileProperties: { Key: string; Value: string }[] } = await request.get<{ UserProfileProperties: { Key: string; Value: string }[] }>(requestOptions); - if (!args.options.output || Cli.shouldTrimOutput(args.options.output)) { + if (!args.options.output || cli.shouldTrimOutput(args.options.output)) { res.UserProfileProperties = JSON.stringify(res.UserProfileProperties) as any; } diff --git a/src/m365/spo/commands/web/web-add.spec.ts b/src/m365/spo/commands/web/web-add.spec.ts index 140114b90f4..02891631e22 100644 --- a/src/m365/spo/commands/web/web-add.spec.ts +++ b/src/m365/spo/commands/web/web-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -16,14 +16,12 @@ import command from './web-add.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.WEB_ADD, () => { - let cli: Cli; let log: any[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); @@ -35,7 +33,7 @@ describe(commands.WEB_ADD, () => { WebFullUrl: 'https://contoso.sharepoint.com' }); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/web/web-clientsidewebpart-list.spec.ts b/src/m365/spo/commands/web/web-clientsidewebpart-list.spec.ts index 6a4b0b7b46f..50b6f35e2c1 100644 --- a/src/m365/spo/commands/web/web-clientsidewebpart-list.spec.ts +++ b/src/m365/spo/commands/web/web-clientsidewebpart-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -26,7 +26,7 @@ describe(commands.WEB_CLIENTSIDEWEBPART_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/web/web-get.spec.ts b/src/m365/spo/commands/web/web-get.spec.ts index 84e1c1eb45a..42ba148a113 100644 --- a/src/m365/spo/commands/web/web-get.spec.ts +++ b/src/m365/spo/commands/web/web-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -322,7 +322,7 @@ describe(commands.WEB_GET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/web/web-installedlanguage-list.spec.ts b/src/m365/spo/commands/web/web-installedlanguage-list.spec.ts index a0828a2013b..17171fbab68 100644 --- a/src/m365/spo/commands/web/web-installedlanguage-list.spec.ts +++ b/src/m365/spo/commands/web/web-installedlanguage-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -25,7 +25,7 @@ describe(commands.WEB_INSTALLEDLANGUAGE_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/web/web-list.spec.ts b/src/m365/spo/commands/web/web-list.spec.ts index db66cd48b32..a5c38662479 100644 --- a/src/m365/spo/commands/web/web-list.spec.ts +++ b/src/m365/spo/commands/web/web-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -25,7 +25,7 @@ describe(commands.WEB_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/web/web-reindex.spec.ts b/src/m365/spo/commands/web/web-reindex.spec.ts index fc5faf51d29..b673e2e80d2 100644 --- a/src/m365/spo/commands/web/web-reindex.spec.ts +++ b/src/m365/spo/commands/web/web-reindex.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -34,7 +34,7 @@ describe(commands.WEB_REINDEX, () => { WebFullUrl: 'https://contoso.sharepoint.com' }); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/web/web-remove.spec.ts b/src/m365/spo/commands/web/web-remove.spec.ts index 777e785f552..db066991189 100644 --- a/src/m365/spo/commands/web/web-remove.spec.ts +++ b/src/m365/spo/commands/web/web-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -26,7 +26,7 @@ describe(commands.WEB_REMOVE, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -43,7 +43,7 @@ describe(commands.WEB_REMOVE, () => { } }; requests = []; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(true); }); @@ -54,7 +54,7 @@ describe(commands.WEB_REMOVE, () => { afterEach(() => { sinonUtil.restore([ request.post, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -141,8 +141,8 @@ describe(commands.WEB_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { diff --git a/src/m365/spo/commands/web/web-remove.ts b/src/m365/spo/commands/web/web-remove.ts index a505973b13e..bb909b0acf2 100644 --- a/src/m365/spo/commands/web/web-remove.ts +++ b/src/m365/spo/commands/web/web-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request from '../../../../request.js'; @@ -62,7 +62,7 @@ class SpoWebRemoveCommand extends SpoCommand { await this.removeWeb(logger, args.options.url); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the subsite ${args.options.url}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the subsite ${args.options.url}?` }); if (result) { await this.removeWeb(logger, args.options.url); diff --git a/src/m365/spo/commands/web/web-retentionlabel-list.spec.ts b/src/m365/spo/commands/web/web-retentionlabel-list.spec.ts index 40a4c27f47c..50564124f98 100644 --- a/src/m365/spo/commands/web/web-retentionlabel-list.spec.ts +++ b/src/m365/spo/commands/web/web-retentionlabel-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -63,7 +63,7 @@ describe(commands.WEB_RETENTIONLABEL_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/spo/commands/web/web-roleassignment-add.spec.ts b/src/m365/spo/commands/web/web-roleassignment-add.spec.ts index b4c42851ea7..e44cd68acbc 100644 --- a/src/m365/spo/commands/web/web-roleassignment-add.spec.ts +++ b/src/m365/spo/commands/web/web-roleassignment-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -27,7 +27,7 @@ describe(commands.WEB_ROLEASSIGNMENT_ADD, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -48,7 +48,7 @@ describe(commands.WEB_ROLEASSIGNMENT_ADD, () => { afterEach(() => { sinonUtil.restore([ request.post, - Cli.executeCommandWithOutput + cli.executeCommandWithOutput ]); }); @@ -123,7 +123,7 @@ describe(commands.WEB_ROLEASSIGNMENT_ADD, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoUserGetCommand) { return { stdout: '{"Id": 11,"IsHiddenInUI": false,"LoginName": "i:0#.f|membership|someaccount@tenant.onmicrosoft.com","Title": "Some Account","PrincipalType": 1,"Email": "someaccount@tenant.onmicrosoft.com","Expiration": "","IsEmailAuthenticationGuestUser": false,"IsShareByEmailGuestUser": false,"IsSiteAdmin": true,"UserId": {"NameId": "1003200097d06dd6","NameIdIssuer": "urn:federation:microsoftonline"},"UserPrincipalName": "someaccount@tenant.onmicrosoft.com"}' @@ -153,7 +153,7 @@ describe(commands.WEB_ROLEASSIGNMENT_ADD, () => { }); const error = 'no user found'; - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoUserGetCommand) { throw error; } @@ -180,7 +180,7 @@ describe(commands.WEB_ROLEASSIGNMENT_ADD, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoGroupGetCommand) { return { stdout: '{"Id": 11,"IsHiddenInUI": false,"LoginName": "otherGroup","Title": "otherGroup","PrincipalType": 8,"AllowMembersEditMembership": false,"AllowRequestToJoinLeave": false,"AutoAcceptRequestToJoinLeave": false,"Description": "","OnlyAllowMembersViewMembership": true,"OwnerTitle": "Some Account","RequestToJoinLeaveEmailSetting": null}' @@ -210,7 +210,7 @@ describe(commands.WEB_ROLEASSIGNMENT_ADD, () => { }); const error = 'no group found'; - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoGroupGetCommand) { throw error; } @@ -237,7 +237,7 @@ describe(commands.WEB_ROLEASSIGNMENT_ADD, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoRoleDefinitionListCommand) { return { stdout: '[{"BasePermissions": {"High": "2147483647","Low": "4294967295"},"Description": "Has full control.","Hidden": false,"Id": 1073741827,"Name": "Full Control","Order": 1,"RoleTypeKind": 5}]' @@ -267,7 +267,7 @@ describe(commands.WEB_ROLEASSIGNMENT_ADD, () => { }); const error = 'no role definition found'; - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoRoleDefinitionListCommand) { throw error; } diff --git a/src/m365/spo/commands/web/web-roleassignment-add.ts b/src/m365/spo/commands/web/web-roleassignment-add.ts index 188ef38d276..6e9978d488b 100644 --- a/src/m365/spo/commands/web/web-roleassignment-add.ts +++ b/src/m365/spo/commands/web/web-roleassignment-add.ts @@ -1,4 +1,4 @@ -import { Cli, CommandOutput } from '../../../../cli/Cli.js'; +import { cli, CommandOutput } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import Command from '../../../../Command.js'; import GlobalOptions from '../../../../GlobalOptions.js'; @@ -156,7 +156,7 @@ class SpoWebRoleAssignmentAddCommand extends SpoCommand { verbose: this.verbose }; - const output: CommandOutput = await Cli.executeCommandWithOutput(spoRoleDefinitionListCommand as Command, { options: { ...roleDefinitionListCommandOptions, _: [] } }); + const output: CommandOutput = await cli.executeCommandWithOutput(spoRoleDefinitionListCommand as Command, { options: { ...roleDefinitionListCommandOptions, _: [] } }); const getRoleDefinitionListOutput = JSON.parse(output.stdout); const roleDefinitionId: number = getRoleDefinitionListOutput.find((role: RoleDefinition) => role.Name === options.roleDefinitionName).Id; return roleDefinitionId; @@ -171,7 +171,7 @@ class SpoWebRoleAssignmentAddCommand extends SpoCommand { verbose: this.verbose }; - const output: CommandOutput = await Cli.executeCommandWithOutput(spoGroupGetCommand as Command, { options: { ...groupGetCommandOptions, _: [] } }); + const output: CommandOutput = await cli.executeCommandWithOutput(spoGroupGetCommand as Command, { options: { ...groupGetCommandOptions, _: [] } }); const getGroupOutput = JSON.parse(output.stdout); return getGroupOutput.Id; @@ -187,7 +187,7 @@ class SpoWebRoleAssignmentAddCommand extends SpoCommand { verbose: this.verbose }; - const output: CommandOutput = await Cli.executeCommandWithOutput(spoUserGetCommand as Command, { options: { ...userGetCommandOptions, _: [] } }); + const output: CommandOutput = await cli.executeCommandWithOutput(spoUserGetCommand as Command, { options: { ...userGetCommandOptions, _: [] } }); const getUserOutput = JSON.parse(output.stdout); return getUserOutput.Id; } diff --git a/src/m365/spo/commands/web/web-roleassignment-remove.spec.ts b/src/m365/spo/commands/web/web-roleassignment-remove.spec.ts index 2157c19a637..22fcad32409 100644 --- a/src/m365/spo/commands/web/web-roleassignment-remove.spec.ts +++ b/src/m365/spo/commands/web/web-roleassignment-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -28,7 +28,7 @@ describe(commands.WEB_ROLEASSIGNMENT_REMOVE, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -45,7 +45,7 @@ describe(commands.WEB_ROLEASSIGNMENT_REMOVE, () => { } }; requests = []; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -56,8 +56,8 @@ describe(commands.WEB_ROLEASSIGNMENT_REMOVE, () => { afterEach(() => { sinonUtil.restore([ request.post, - Cli.executeCommandWithOutput, - Cli.promptForConfirmation + cli.executeCommandWithOutput, + cli.promptForConfirmation ]); }); @@ -122,7 +122,7 @@ describe(commands.WEB_ROLEASSIGNMENT_REMOVE, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoUserGetCommand) { return { stdout: '{"Id": 11,"IsHiddenInUI": false,"LoginName": "i:0#.f|membership|someaccount@tenant.onmicrosoft.com","Title": "Some Account","PrincipalType": 1,"Email": "someaccount@tenant.onmicrosoft.com","Expiration": "","IsEmailAuthenticationGuestUser": false,"IsShareByEmailGuestUser": false,"IsSiteAdmin": true,"UserId": {"NameId": "1003200097d06dd6","NameIdIssuer": "urn:federation:microsoftonline"},"UserPrincipalName": "someaccount@tenant.onmicrosoft.com"}' @@ -152,7 +152,7 @@ describe(commands.WEB_ROLEASSIGNMENT_REMOVE, () => { }); const error = 'no user found'; - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoUserGetCommand) { throw error; } @@ -179,7 +179,7 @@ describe(commands.WEB_ROLEASSIGNMENT_REMOVE, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoGroupGetCommand) { return { stdout: '{"Id": 11,"IsHiddenInUI": false,"LoginName": "otherGroup","Title": "otherGroup","PrincipalType": 8,"AllowMembersEditMembership": false,"AllowRequestToJoinLeave": false,"AutoAcceptRequestToJoinLeave": false,"Description": "","OnlyAllowMembersViewMembership": true,"OwnerTitle": "Some Account","RequestToJoinLeaveEmailSetting": null}' @@ -209,7 +209,7 @@ describe(commands.WEB_ROLEASSIGNMENT_REMOVE, () => { }); const error = 'no group found'; - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoGroupGetCommand) { throw error; } @@ -259,7 +259,7 @@ describe(commands.WEB_ROLEASSIGNMENT_REMOVE, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === spoGroupGetCommand) { return { stdout: '{"Id": 11,"IsHiddenInUI": false,"LoginName": "otherGroup","Title": "otherGroup","PrincipalType": 8,"AllowMembersEditMembership": false,"AllowRequestToJoinLeave": false,"AutoAcceptRequestToJoinLeave": false,"Description": "","OnlyAllowMembersViewMembership": true,"OwnerTitle": "Some Account","RequestToJoinLeaveEmailSetting": null}' @@ -269,8 +269,8 @@ describe(commands.WEB_ROLEASSIGNMENT_REMOVE, () => { throw new CommandError('Unknown case'); }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { diff --git a/src/m365/spo/commands/web/web-roleassignment-remove.ts b/src/m365/spo/commands/web/web-roleassignment-remove.ts index 8d0281088f8..06212312c08 100644 --- a/src/m365/spo/commands/web/web-roleassignment-remove.ts +++ b/src/m365/spo/commands/web/web-roleassignment-remove.ts @@ -1,4 +1,4 @@ -import { Cli, CommandOutput } from '../../../../cli/Cli.js'; +import { cli, CommandOutput } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import Command from '../../../../Command.js'; import GlobalOptions from '../../../../GlobalOptions.js'; @@ -98,7 +98,7 @@ class SpoWebRoleAssignmentRemoveCommand extends SpoCommand { await this.removeRoleAssignment(logger, args.options); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove role assignment from web ${args.options.webUrl}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove role assignment from web ${args.options.webUrl}?` }); if (result) { await this.removeRoleAssignment(logger, args.options); @@ -153,7 +153,7 @@ class SpoWebRoleAssignmentRemoveCommand extends SpoCommand { verbose: this.verbose }; - const output: CommandOutput = await Cli.executeCommandWithOutput(spoGroupGetCommand as Command, { options: { ...groupGetCommandOptions, _: [] } }); + const output: CommandOutput = await cli.executeCommandWithOutput(spoGroupGetCommand as Command, { options: { ...groupGetCommandOptions, _: [] } }); const getGroupOutput = JSON.parse(output.stdout); return getGroupOutput.Id; } @@ -168,7 +168,7 @@ class SpoWebRoleAssignmentRemoveCommand extends SpoCommand { verbose: this.verbose }; - const output: CommandOutput = await Cli.executeCommandWithOutput(spoUserGetCommand as Command, { options: { ...userGetCommandOptions, _: [] } }); + const output: CommandOutput = await cli.executeCommandWithOutput(spoUserGetCommand as Command, { options: { ...userGetCommandOptions, _: [] } }); const getUserOutput = JSON.parse(output.stdout); return getUserOutput.Id; } diff --git a/src/m365/spo/commands/web/web-roleinheritance-break.spec.ts b/src/m365/spo/commands/web/web-roleinheritance-break.spec.ts index 339607eabea..e447f9c9007 100644 --- a/src/m365/spo/commands/web/web-roleinheritance-break.spec.ts +++ b/src/m365/spo/commands/web/web-roleinheritance-break.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -25,7 +25,7 @@ describe(commands.WEB_ROLEINHERITANCE_BREAK, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -41,7 +41,7 @@ describe(commands.WEB_ROLEINHERITANCE_BREAK, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -52,7 +52,7 @@ describe(commands.WEB_ROLEINHERITANCE_BREAK, () => { afterEach(() => { sinonUtil.restore([ request.post, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -105,8 +105,8 @@ describe(commands.WEB_ROLEINHERITANCE_BREAK, () => { throw 'Invalid request URL: ' + opts.url; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { diff --git a/src/m365/spo/commands/web/web-roleinheritance-break.ts b/src/m365/spo/commands/web/web-roleinheritance-break.ts index 35c7d511cbd..c915aa0e0e3 100644 --- a/src/m365/spo/commands/web/web-roleinheritance-break.ts +++ b/src/m365/spo/commands/web/web-roleinheritance-break.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -78,7 +78,7 @@ class SpoWebRoleInheritanceBreakCommand extends SpoCommand { await this.breakRoleInheritance(args.options); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to break the role inheritance of subsite ${args.options.webUrl}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to break the role inheritance of subsite ${args.options.webUrl}?` }); if (result) { await this.breakRoleInheritance(args.options); diff --git a/src/m365/spo/commands/web/web-roleinheritance-reset.spec.ts b/src/m365/spo/commands/web/web-roleinheritance-reset.spec.ts index b6448b0be62..e80ef16fe39 100644 --- a/src/m365/spo/commands/web/web-roleinheritance-reset.spec.ts +++ b/src/m365/spo/commands/web/web-roleinheritance-reset.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -25,7 +25,7 @@ describe(commands.WEB_ROLEINHERITANCE_RESET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -41,7 +41,7 @@ describe(commands.WEB_ROLEINHERITANCE_RESET, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -52,7 +52,7 @@ describe(commands.WEB_ROLEINHERITANCE_RESET, () => { afterEach(() => { sinonUtil.restore([ request.post, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -149,8 +149,8 @@ describe(commands.WEB_ROLEINHERITANCE_RESET, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { debug: true, webUrl: 'https://contoso.sharepoint.com' } }); assert(resetInheritanceCallIssued); }); diff --git a/src/m365/spo/commands/web/web-roleinheritance-reset.ts b/src/m365/spo/commands/web/web-roleinheritance-reset.ts index f8b6329d56e..5d39c2e6351 100644 --- a/src/m365/spo/commands/web/web-roleinheritance-reset.ts +++ b/src/m365/spo/commands/web/web-roleinheritance-reset.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -68,7 +68,7 @@ class SpoWebRoleInheritanceResetCommand extends SpoCommand { await this.resetWebRoleInheritance(args.options); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to reset the role inheritance of ${args.options.webUrl}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to reset the role inheritance of ${args.options.webUrl}?` }); if (result) { await this.resetWebRoleInheritance(args.options); diff --git a/src/m365/spo/commands/web/web-set.spec.ts b/src/m365/spo/commands/web/web-set.spec.ts index 79251cd4fec..bdcb2fb007f 100644 --- a/src/m365/spo/commands/web/web-set.spec.ts +++ b/src/m365/spo/commands/web/web-set.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -24,7 +24,7 @@ describe(commands.WEB_SET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/teams/commands/app/app-install.spec.ts b/src/m365/teams/commands/app/app-install.spec.ts index f01853f6a9b..05b87611fde 100644 --- a/src/m365/teams/commands/app/app-install.spec.ts +++ b/src/m365/teams/commands/app/app-install.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,19 +15,17 @@ import command from './app-install.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.APP_INSTALL, () => { - let cli: Cli; let log: string[]; let logger: Logger; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/teams/commands/app/app-install.ts b/src/m365/teams/commands/app/app-install.ts index 7712be448a2..a8190f66fc7 100644 --- a/src/m365/teams/commands/app/app-install.ts +++ b/src/m365/teams/commands/app/app-install.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import Command from '../../../../Command.js'; import GlobalOptions from '../../../../GlobalOptions.js'; @@ -132,7 +132,7 @@ class TeamsAppInstallCommand extends GraphCommand { verbose: args.options.verbose }; try { - const res = await Cli.executeCommandWithOutput(aadUserGetCommand as Command, { options: { ...options, _: [] } }); + const res = await cli.executeCommandWithOutput(aadUserGetCommand as Command, { options: { ...options, _: [] } }); if (this.verbose) { await logger.logToStderr(res.stderr); diff --git a/src/m365/teams/commands/app/app-list.spec.ts b/src/m365/teams/commands/app/app-list.spec.ts index 82eb67cdaea..56114cea44b 100644 --- a/src/m365/teams/commands/app/app-list.spec.ts +++ b/src/m365/teams/commands/app/app-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -25,7 +25,7 @@ describe(commands.APP_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/teams/commands/app/app-publish.spec.ts b/src/m365/teams/commands/app/app-publish.spec.ts index 5c58edf39fd..2110041e2c5 100644 --- a/src/m365/teams/commands/app/app-publish.spec.ts +++ b/src/m365/teams/commands/app/app-publish.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import fs from 'fs'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -32,7 +32,7 @@ describe(commands.APP_PUBLISH, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/teams/commands/app/app-remove.spec.ts b/src/m365/teams/commands/app/app-remove.spec.ts index 1bfd9e7425d..3b1aa13b7f4 100644 --- a/src/m365/teams/commands/app/app-remove.spec.ts +++ b/src/m365/teams/commands/app/app-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,20 +15,18 @@ import command from './app-remove.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.APP_REMOVE, () => { - let cli: Cli; let log: string[]; let logger: Logger; let requests: any[]; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -53,8 +51,8 @@ describe(commands.APP_REMOVE, () => { request.get, request.delete, cli.getSettingWithDefaultValue, - Cli.handleMultipleResultsFound, - Cli.promptForConfirmation + cli.handleMultipleResultsFound, + cli.promptForConfirmation ]); }); @@ -147,14 +145,14 @@ describe(commands.APP_REMOVE, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { debug: true, filePath: 'teamsapp.zip', id: `e3e29acb-8c79-412b-b746-e6c39ff4cd22` } }); assert(removeTeamsAppCalled); }); it('aborts removing Teams app when prompt not confirmed', async () => { - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinon.stub(cli, 'promptForConfirmation').resolves(false); command.action(logger, { options: { id: `e3e29acb-8c79-412b-b746-e6c39ff4cd22` } }); assert(requests.length === 0); @@ -186,8 +184,8 @@ describe(commands.APP_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await assert.doesNotReject(command.action(logger, { options: { debug: true, name: 'TeamsApp' } })); assert(removeTeamsAppCalled); @@ -217,9 +215,9 @@ describe(commands.APP_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves({ id: 'e3e29acb-8c79-412b-b746-e6c39ff4cd22' }); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'handleMultipleResultsFound').resolves({ id: 'e3e29acb-8c79-412b-b746-e6c39ff4cd22' }); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await assert.doesNotReject(command.action(logger, { options: { debug: true, name: 'TeamsApp' } })); assert(removeTeamsAppCalled); diff --git a/src/m365/teams/commands/app/app-remove.ts b/src/m365/teams/commands/app/app-remove.ts index ed19de93090..ac075d163fa 100644 --- a/src/m365/teams/commands/app/app-remove.ts +++ b/src/m365/teams/commands/app/app-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -102,7 +102,7 @@ class TeamsAppRemoveCommand extends GraphCommand { await removeApp(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the Teams app ${args.options.id || args.options.name} from the app catalog?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the Teams app ${args.options.id || args.options.name} from the app catalog?` }); if (result) { await removeApp(); @@ -136,7 +136,7 @@ class TeamsAppRemoveCommand extends GraphCommand { if (response.value.length > 1) { const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', response.value); - const result = await Cli.handleMultipleResultsFound<{ id: string; }>(`Multiple Teams apps with name '${options.name}' found.`, resultAsKeyValuePair); + const result = await cli.handleMultipleResultsFound<{ id: string; }>(`Multiple Teams apps with name '${options.name}' found.`, resultAsKeyValuePair); return result.id; } diff --git a/src/m365/teams/commands/app/app-uninstall.spec.ts b/src/m365/teams/commands/app/app-uninstall.spec.ts index c926118a659..22463f389db 100644 --- a/src/m365/teams/commands/app/app-uninstall.spec.ts +++ b/src/m365/teams/commands/app/app-uninstall.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -25,7 +25,7 @@ describe(commands.APP_UNINSTALL, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -48,7 +48,7 @@ describe(commands.APP_UNINSTALL, () => { afterEach(() => { sinonUtil.restore([ request.delete, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -104,7 +104,7 @@ describe(commands.APP_UNINSTALL, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { teamId: 'c527a470-a882-481c-981c-ee6efaba85c7', @@ -115,7 +115,7 @@ describe(commands.APP_UNINSTALL, () => { }); it('aborts uninstalling an app from a Microsoft Teams team when prompt not confirmed', async () => { - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinon.stub(cli, 'promptForConfirmation').resolves(false); command.action(logger, { options: { teamId: 'c527a470-a882-481c-981c-ee6efaba85c7', diff --git a/src/m365/teams/commands/app/app-uninstall.ts b/src/m365/teams/commands/app/app-uninstall.ts index a09822a3559..2c815077d44 100644 --- a/src/m365/teams/commands/app/app-uninstall.ts +++ b/src/m365/teams/commands/app/app-uninstall.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -92,7 +92,7 @@ class TeamsAppUninstallCommand extends GraphCommand { await uninstallApp(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to uninstall the app with id ${args.options.id} from the Microsoft Teams team ${args.options.teamId}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to uninstall the app with id ${args.options.id} from the Microsoft Teams team ${args.options.teamId}?` }); if (result) { await uninstallApp(); diff --git a/src/m365/teams/commands/app/app-update.spec.ts b/src/m365/teams/commands/app/app-update.spec.ts index 2d85d4b2f9e..aada703ae04 100644 --- a/src/m365/teams/commands/app/app-update.spec.ts +++ b/src/m365/teams/commands/app/app-update.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import fs from 'fs'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -16,19 +16,17 @@ import command from './app-update.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.APP_UPDATE, () => { - let cli: Cli; let log: string[]; let logger: Logger; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -54,7 +52,7 @@ describe(commands.APP_UPDATE, () => { fs.readFileSync, fs.existsSync, cli.getSettingWithDefaultValue, - Cli.handleMultipleResultsFound + cli.handleMultipleResultsFound ]); }); @@ -230,7 +228,7 @@ describe(commands.APP_UPDATE, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves({ id: '5b31c38c-2584-42f0-aa47-657fb3a84230' }); + sinon.stub(cli, 'handleMultipleResultsFound').resolves({ id: '5b31c38c-2584-42f0-aa47-657fb3a84230' }); let updateTeamsAppCalled = false; sinon.stub(request, 'put').callsFake(async (opts) => { diff --git a/src/m365/teams/commands/app/app-update.ts b/src/m365/teams/commands/app/app-update.ts index 1f07fd68263..4d555c97e9c 100644 --- a/src/m365/teams/commands/app/app-update.ts +++ b/src/m365/teams/commands/app/app-update.ts @@ -7,7 +7,7 @@ import { formatting } from '../../../../utils/formatting.js'; import { validation } from '../../../../utils/validation.js'; import GraphCommand from '../../../base/GraphCommand.js'; import commands from '../../commands.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; interface CommandArgs { options: Options; @@ -133,7 +133,7 @@ class TeamsAppUpdateCommand extends GraphCommand { if (response.value.length > 1) { const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', response.value); - const result = await Cli.handleMultipleResultsFound<{ id: string; }>(`Multiple Teams apps with name ${options.name} found.`, resultAsKeyValuePair); + const result = await cli.handleMultipleResultsFound<{ id: string; }>(`Multiple Teams apps with name ${options.name} found.`, resultAsKeyValuePair); return result.id; } diff --git a/src/m365/teams/commands/cache/cache-remove.spec.ts b/src/m365/teams/commands/cache/cache-remove.spec.ts index ab6aabc378e..fc408839bac 100644 --- a/src/m365/teams/commands/cache/cache-remove.spec.ts +++ b/src/m365/teams/commands/cache/cache-remove.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import fs from 'fs'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -28,8 +28,8 @@ describe(commands.CACHE_REMOVE, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - sinon.stub(Cli.getInstance().config, 'all').value({}); - commandInfo = Cli.getCommandInfo(command); + sinon.stub(cli.getConfig(), 'all').value({}); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -46,13 +46,13 @@ describe(commands.CACHE_REMOVE, () => { } }; - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinon.stub(cli, 'promptForConfirmation').resolves(true); }); afterEach(() => { sinonUtil.restore([ fs.existsSync, - Cli.promptForConfirmation, + cli.promptForConfirmation, (command as any).exec, (process as any).kill ]); @@ -75,8 +75,8 @@ describe(commands.CACHE_REMOVE, () => { sinon.stub(process, 'platform').value('win32'); sinon.stub(process, 'env').value({ 'CLIMICROSOFT365_ENV': '' }); - sinonUtil.restore(Cli.promptForConfirmation); - const confirmationStub = sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + const confirmationStub = sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: {} @@ -240,8 +240,8 @@ describe(commands.CACHE_REMOVE, () => { sinon.stub(process, 'platform').value('darwin'); sinon.stub(process, 'env').value({ 'CLIMICROSOFT365_ENV': '' }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: {} }); assert(execStub.notCalled); diff --git a/src/m365/teams/commands/cache/cache-remove.ts b/src/m365/teams/commands/cache/cache-remove.ts index 7f41277071e..8b8db97eb23 100644 --- a/src/m365/teams/commands/cache/cache-remove.ts +++ b/src/m365/teams/commands/cache/cache-remove.ts @@ -2,7 +2,7 @@ import child_process from 'child_process'; import fs from 'fs'; import { homedir } from 'os'; import util from 'util'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import { formatting } from '../../../../utils/formatting.js'; @@ -80,7 +80,7 @@ class TeamsCacheRemoveCommand extends AnonymousCommand { await logger.logToStderr('- Stop the Microsoft Teams client.'); await logger.logToStderr('- Clear the Microsoft Teams cached files.'); - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to clear your Microsoft Teams cache?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to clear your Microsoft Teams cache?` }); if (result) { await this.clearTeamsCache(logger); diff --git a/src/m365/teams/commands/channel/channel-add.spec.ts b/src/m365/teams/commands/channel/channel-add.spec.ts index 74d1bb3a630..3fc9242fbc3 100644 --- a/src/m365/teams/commands/channel/channel-add.spec.ts +++ b/src/m365/teams/commands/channel/channel-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,20 +15,18 @@ import command from './channel-add.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.CHANNEL_ADD, () => { - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -53,7 +51,7 @@ describe(commands.CHANNEL_ADD, () => { request.get, request.post, cli.getSettingWithDefaultValue, - Cli.handleMultipleResultsFound + cli.handleMultipleResultsFound ]); }); @@ -348,7 +346,7 @@ describe(commands.CHANNEL_ADD, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves({ + sinon.stub(cli, 'handleMultipleResultsFound').resolves({ "id": "00000000-0000-0000-0000-000000000000", "createdDateTime": null, "displayName": "Team Name", diff --git a/src/m365/teams/commands/channel/channel-add.ts b/src/m365/teams/commands/channel/channel-add.ts index 63467f7767b..386b6e638fe 100644 --- a/src/m365/teams/commands/channel/channel-add.ts +++ b/src/m365/teams/commands/channel/channel-add.ts @@ -5,7 +5,7 @@ import request, { CliRequestOptions } from '../../../../request.js'; import { validation } from '../../../../utils/validation.js'; import GraphCommand from "../../../base/GraphCommand.js"; import commands from '../../commands.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { formatting } from '../../../../utils/formatting.js'; interface CommandArgs { @@ -128,7 +128,7 @@ class TeamsChannelAddCommand extends GraphCommand { if (matchingTeams.length > 1) { const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', response.value); - const result = await Cli.handleMultipleResultsFound(`Multiple Microsoft Teams teams with name ${args.options.teamName} found.`, resultAsKeyValuePair); + const result = await cli.handleMultipleResultsFound(`Multiple Microsoft Teams teams with name ${args.options.teamName} found.`, resultAsKeyValuePair); return result.id!; } diff --git a/src/m365/teams/commands/channel/channel-get.spec.ts b/src/m365/teams/commands/channel/channel-get.spec.ts index 3c5096d3f12..f300165fd24 100644 --- a/src/m365/teams/commands/channel/channel-get.spec.ts +++ b/src/m365/teams/commands/channel/channel-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,20 +15,18 @@ import command from './channel-get.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.CHANNEL_GET, () => { - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/teams/commands/channel/channel-list.spec.ts b/src/m365/teams/commands/channel/channel-list.spec.ts index 9343f2d6bc2..55ef5d73db3 100644 --- a/src/m365/teams/commands/channel/channel-list.spec.ts +++ b/src/m365/teams/commands/channel/channel-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,20 +15,18 @@ import command from './channel-list.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.CHANNEL_LIST, () => { - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/teams/commands/channel/channel-member-add.spec.ts b/src/m365/teams/commands/channel/channel-member-add.spec.ts index eb5d70e3587..c47933763cc 100644 --- a/src/m365/teams/commands/channel/channel-member-add.spec.ts +++ b/src/m365/teams/commands/channel/channel-member-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -179,21 +179,19 @@ describe(commands.CHANNEL_MEMBER_ADD, () => { }; //#endregion - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); - sinon.stub(Cli.getInstance(), 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { + commandInfo = cli.getCommandInfo(command); + sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { if (settingName === 'prompt') { return false; } @@ -249,7 +247,7 @@ describe(commands.CHANNEL_MEMBER_ADD, () => { request.get, request.post, cli.getSettingWithDefaultValue, - Cli.handleMultipleResultsFound + cli.handleMultipleResultsFound ]); }); @@ -572,7 +570,7 @@ describe(commands.CHANNEL_MEMBER_ADD, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves(singleUserResponse); + sinon.stub(cli, 'handleMultipleResultsFound').resolves(singleUserResponse); await command.action(logger, { options: { diff --git a/src/m365/teams/commands/channel/channel-member-add.ts b/src/m365/teams/commands/channel/channel-member-add.ts index e06babd9dbf..71173464998 100644 --- a/src/m365/teams/commands/channel/channel-member-add.ts +++ b/src/m365/teams/commands/channel/channel-member-add.ts @@ -7,7 +7,7 @@ import { formatting } from '../../../../utils/formatting.js'; import { validation } from '../../../../utils/validation.js'; import GraphCommand from '../../../base/GraphCommand.js'; import commands from '../../commands.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; interface ExtendedGroup extends Group { resourceProvisioningOptions: string[]; @@ -220,7 +220,7 @@ class TeamsChannelMemberAddCommand extends GraphCommand { if (response.value.length > 1) { const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', response.value); - const result = await Cli.handleMultipleResultsFound(`Multiple users with display name '${userDisplayName}' found.`, resultAsKeyValuePair); + const result = await cli.handleMultipleResultsFound(`Multiple users with display name '${userDisplayName}' found.`, resultAsKeyValuePair); return result.id; } diff --git a/src/m365/teams/commands/channel/channel-member-list.spec.ts b/src/m365/teams/commands/channel/channel-member-list.spec.ts index 56fdcf995bc..fe3feb52450 100644 --- a/src/m365/teams/commands/channel/channel-member-list.spec.ts +++ b/src/m365/teams/commands/channel/channel-member-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,20 +15,18 @@ import command from './channel-member-list.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.CHANNEL_MEMBER_LIST, () => { - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/teams/commands/channel/channel-member-remove.spec.ts b/src/m365/teams/commands/channel/channel-member-remove.spec.ts index 9e8f42b2f0c..57a77cdb60e 100644 --- a/src/m365/teams/commands/channel/channel-member-remove.spec.ts +++ b/src/m365/teams/commands/channel/channel-member-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -27,20 +27,18 @@ describe(commands.CHANNEL_MEMBER_REMOVE, () => { ] }; - let cli: Cli; let log: string[]; let logger: Logger; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); - sinon.stub(Cli.getInstance(), 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { + commandInfo = cli.getCommandInfo(command); + sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((settingName: string, defaultValue: any) => { if (settingName === 'prompt') { return false; } @@ -63,18 +61,18 @@ describe(commands.CHANNEL_MEMBER_REMOVE, () => { } }; - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinon.stub(cli, 'promptForConfirmation').resolves(true); (command as any).items = []; }); afterEach(() => { sinonUtil.restore([ - Cli.promptForConfirmation, + cli.promptForConfirmation, request.get, request.delete, cli.getSettingWithDefaultValue, - Cli.handleMultipleResultsFound + cli.handleMultipleResultsFound ]); }); @@ -456,7 +454,7 @@ describe(commands.CHANNEL_MEMBER_REMOVE, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves({ + sinon.stub(cli, 'handleMultipleResultsFound').resolves({ "id": "00000", "displayName": "User", "userId": "00000000-0000-0000-0000-000000000000", @@ -598,8 +596,8 @@ describe(commands.CHANNEL_MEMBER_REMOVE, () => { it('aborts user removal when prompt not confirmed', async () => { const postSpy = sinon.spy(request, 'delete'); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { @@ -612,8 +610,8 @@ describe(commands.CHANNEL_MEMBER_REMOVE, () => { }); it('prompts before user removal when force option not passed', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - const confirmationStub = sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + const confirmationStub = sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { diff --git a/src/m365/teams/commands/channel/channel-member-remove.ts b/src/m365/teams/commands/channel/channel-member-remove.ts index 4da61b800ca..3c7394dd007 100644 --- a/src/m365/teams/commands/channel/channel-member-remove.ts +++ b/src/m365/teams/commands/channel/channel-member-remove.ts @@ -1,5 +1,5 @@ import { Channel, ConversationMember, Group } from '@microsoft/microsoft-graph-types'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -146,7 +146,7 @@ class TeamsChannelMemberRemoveCommand extends GraphCommand { const userName = args.options.userName || args.options.userId || args.options.id; const teamName = args.options.teamName || args.options.teamId; const channelName = args.options.channelName || args.options.channelId; - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the member ${userName} from the channel ${channelName} in team ${teamName}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the member ${userName} from the channel ${channelName} in team ${teamName}?` }); if (result) { await removeMember(); @@ -241,7 +241,7 @@ class TeamsChannelMemberRemoveCommand extends GraphCommand { if (conversationMembers.length > 1) { const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', conversationMembers); - const result = await Cli.handleMultipleResultsFound(`Multiple Microsoft Teams channel members with name ${args.options.userName} found.`, resultAsKeyValuePair); + const result = await cli.handleMultipleResultsFound(`Multiple Microsoft Teams channel members with name ${args.options.userName} found.`, resultAsKeyValuePair); return result.id; } diff --git a/src/m365/teams/commands/channel/channel-member-set.spec.ts b/src/m365/teams/commands/channel/channel-member-set.spec.ts index cf5cebb7158..daa15462840 100644 --- a/src/m365/teams/commands/channel/channel-member-set.spec.ts +++ b/src/m365/teams/commands/channel/channel-member-set.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -35,20 +35,18 @@ describe(commands.CHANNEL_MEMBER_SET, () => { ] }; - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -73,7 +71,7 @@ describe(commands.CHANNEL_MEMBER_SET, () => { request.get, request.patch, cli.getSettingWithDefaultValue, - Cli.handleMultipleResultsFound + cli.handleMultipleResultsFound ]); }); @@ -667,7 +665,7 @@ describe(commands.CHANNEL_MEMBER_SET, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves({ + sinon.stub(cli, 'handleMultipleResultsFound').resolves({ "id": "00000", "displayName": "User", "userId": "00000000-0000-0000-0000-000000000000", diff --git a/src/m365/teams/commands/channel/channel-member-set.ts b/src/m365/teams/commands/channel/channel-member-set.ts index beec3128b99..14cc778bc3e 100644 --- a/src/m365/teams/commands/channel/channel-member-set.ts +++ b/src/m365/teams/commands/channel/channel-member-set.ts @@ -7,7 +7,7 @@ import { formatting } from '../../../../utils/formatting.js'; import { validation } from '../../../../utils/validation.js'; import GraphCommand from '../../../base/GraphCommand.js'; import commands from '../../commands.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; interface ExtendedConversationMember extends ConversationMember { userId?: string; @@ -225,7 +225,7 @@ class TeamsChannelMemberSetCommand extends GraphCommand { if (conversationMembers.length > 1) { const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', conversationMembers); - const result = await Cli.handleMultipleResultsFound(`Multiple Microsoft Teams channel members with name ${args.options.userName} found.`, resultAsKeyValuePair); + const result = await cli.handleMultipleResultsFound(`Multiple Microsoft Teams channel members with name ${args.options.userName} found.`, resultAsKeyValuePair); return result.id!; } diff --git a/src/m365/teams/commands/channel/channel-remove.spec.ts b/src/m365/teams/commands/channel/channel-remove.spec.ts index ca5559c30e2..8e028cb6104 100644 --- a/src/m365/teams/commands/channel/channel-remove.spec.ts +++ b/src/m365/teams/commands/channel/channel-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -31,7 +31,7 @@ describe(commands.CHANNEL_REMOVE, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -47,7 +47,7 @@ describe(commands.CHANNEL_REMOVE, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -59,7 +59,7 @@ describe(commands.CHANNEL_REMOVE, () => { sinonUtil.restore([ request.get, request.delete, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -211,8 +211,8 @@ describe(commands.CHANNEL_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -247,8 +247,8 @@ describe(commands.CHANNEL_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -287,8 +287,8 @@ describe(commands.CHANNEL_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { diff --git a/src/m365/teams/commands/channel/channel-remove.ts b/src/m365/teams/commands/channel/channel-remove.ts index 6b2a1d07bab..ca373aee712 100644 --- a/src/m365/teams/commands/channel/channel-remove.ts +++ b/src/m365/teams/commands/channel/channel-remove.ts @@ -1,6 +1,6 @@ import { Channel, Group } from '@microsoft/microsoft-graph-types'; import GlobalOptions from '../../../../GlobalOptions.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import request, { CliRequestOptions } from '../../../../request.js'; import { aadGroup } from '../../../../utils/aadGroup.js'; @@ -130,7 +130,7 @@ class TeamsChannelRemoveCommand extends GraphCommand { } else { const channel = args.options.name ? args.options.name : args.options.id; - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the channel ${channel} from team ${args.options.teamId || args.options.teamName}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the channel ${channel} from team ${args.options.teamId || args.options.teamName}?` }); if (result) { await removeChannel(); diff --git a/src/m365/teams/commands/channel/channel-set.spec.ts b/src/m365/teams/commands/channel/channel-set.spec.ts index 4dd8d66c0e8..bb8e5741cab 100644 --- a/src/m365/teams/commands/channel/channel-set.spec.ts +++ b/src/m365/teams/commands/channel/channel-set.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -32,7 +32,7 @@ describe(commands.CHANNEL_SET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/teams/commands/chat/chat-get.spec.ts b/src/m365/teams/commands/chat/chat-get.spec.ts index f3dc22d7299..ba65fc65735 100644 --- a/src/m365/teams/commands/chat/chat-get.spec.ts +++ b/src/m365/teams/commands/chat/chat-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -33,14 +33,12 @@ describe(commands.CHAT_GET, () => { const noChatByNameResponse: any = { "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#chats(id,topic,createdDateTime,chatType,members())", "value": [] }; //#endregion - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); @@ -53,7 +51,7 @@ describe(commands.CHAT_GET, () => { accessToken: 'abc' }; } - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -103,7 +101,7 @@ describe(commands.CHAT_GET, () => { sinonUtil.restore([ request.get, cli.getSettingWithDefaultValue, - Cli.handleMultipleResultsFound + cli.handleMultipleResultsFound ]); }); @@ -360,7 +358,7 @@ describe(commands.CHAT_GET, () => { }); it('handles selecting single result when multiple chats with the specified name found and cli is set to prompt', async () => { - sinon.stub(Cli, 'handleMultipleResultsFound').resolves(singleGroupChatResponse); + sinon.stub(cli, 'handleMultipleResultsFound').resolves(singleGroupChatResponse); await command.action(logger, { options: { @@ -387,7 +385,7 @@ describe(commands.CHAT_GET, () => { }); it('handles selecting single result when multiple chats conversations by participants found and cli is set to prompt', async () => { - sinon.stub(Cli, 'handleMultipleResultsFound').resolves(singleGroupChatResponse); + sinon.stub(cli, 'handleMultipleResultsFound').resolves(singleGroupChatResponse); await command.action(logger, { options: { diff --git a/src/m365/teams/commands/chat/chat-get.ts b/src/m365/teams/commands/chat/chat-get.ts index 951903c1dbc..80de609687b 100644 --- a/src/m365/teams/commands/chat/chat-get.ts +++ b/src/m365/teams/commands/chat/chat-get.ts @@ -9,7 +9,7 @@ import { validation } from '../../../../utils/validation.js'; import GraphCommand from '../../../base/GraphCommand.js'; import commands from '../../commands.js'; import { chatUtil } from './chatUtil.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; interface CommandArgs { options: Options; @@ -133,7 +133,7 @@ class TeamsChatGetCommand extends GraphCommand { } const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', existingChats); - const result = await Cli.handleMultipleResultsFound(`Multiple chat conversations with these participants found.`, resultAsKeyValuePair); + const result = await cli.handleMultipleResultsFound(`Multiple chat conversations with these participants found.`, resultAsKeyValuePair); return result.id!; } @@ -149,7 +149,7 @@ class TeamsChatGetCommand extends GraphCommand { } const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', existingChats); - const result = await Cli.handleMultipleResultsFound(`Multiple chat conversations with this name found.`, resultAsKeyValuePair); + const result = await cli.handleMultipleResultsFound(`Multiple chat conversations with this name found.`, resultAsKeyValuePair); return result.id!; } } diff --git a/src/m365/teams/commands/chat/chat-list.spec.ts b/src/m365/teams/commands/chat/chat-list.spec.ts index edcc7a096db..7f166264e75 100644 --- a/src/m365/teams/commands/chat/chat-list.spec.ts +++ b/src/m365/teams/commands/chat/chat-list.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -55,7 +55,7 @@ describe(commands.CHAT_LIST, () => { accessToken: 'abc', expiresOn: new Date() }; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/teams/commands/chat/chat-member-add.spec.ts b/src/m365/teams/commands/chat/chat-member-add.spec.ts index 204581d1d08..8ea8dba660c 100644 --- a/src/m365/teams/commands/chat/chat-member-add.spec.ts +++ b/src/m365/teams/commands/chat/chat-member-add.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -29,7 +29,7 @@ describe(commands.CHAT_MEMBER_ADD, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/teams/commands/chat/chat-member-list.spec.ts b/src/m365/teams/commands/chat/chat-member-list.spec.ts index e4f01fba46c..c8ccbac44d2 100644 --- a/src/m365/teams/commands/chat/chat-member-list.spec.ts +++ b/src/m365/teams/commands/chat/chat-member-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,20 +15,18 @@ import command from './chat-member-list.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.CHAT_MEMBER_LIST, () => { - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/teams/commands/chat/chat-member-remove.spec.ts b/src/m365/teams/commands/chat/chat-member-remove.spec.ts index c88983be7b8..7e39b4aad48 100644 --- a/src/m365/teams/commands/chat/chat-member-remove.spec.ts +++ b/src/m365/teams/commands/chat/chat-member-remove.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -51,7 +51,7 @@ describe(commands.CHAT_MEMBER_REMOVE, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -67,7 +67,7 @@ describe(commands.CHAT_MEMBER_REMOVE, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -79,7 +79,7 @@ describe(commands.CHAT_MEMBER_REMOVE, () => { sinonUtil.restore([ odata.getAllItems, request.delete, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -146,8 +146,8 @@ describe(commands.CHAT_MEMBER_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { chatId: chatId, userName: userPrincipalName, verbose: true } }); assert(deleteStub.called); diff --git a/src/m365/teams/commands/chat/chat-member-remove.ts b/src/m365/teams/commands/chat/chat-member-remove.ts index c19430e5864..273934ae134 100644 --- a/src/m365/teams/commands/chat/chat-member-remove.ts +++ b/src/m365/teams/commands/chat/chat-member-remove.ts @@ -5,7 +5,7 @@ import { odata } from '../../../../utils/odata.js'; import { validation } from '../../../../utils/validation.js'; import GraphCommand from '../../../base/GraphCommand.js'; import commands from '../../commands.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import request, { CliRequestOptions } from '../../../../request.js'; interface CommandArgs { @@ -118,7 +118,7 @@ class TeamsChatMemberRemoveCommand extends GraphCommand { await removeUserFromChat(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove member ${args.options.id || args.options.userId || args.options.userName} from chat with id ${args.options.chatId}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove member ${args.options.id || args.options.userId || args.options.userName} from chat with id ${args.options.chatId}?` }); if (result) { await removeUserFromChat(); diff --git a/src/m365/teams/commands/chat/chat-message-list.spec.ts b/src/m365/teams/commands/chat/chat-message-list.spec.ts index b008b3015b5..d123736aa50 100644 --- a/src/m365/teams/commands/chat/chat-message-list.spec.ts +++ b/src/m365/teams/commands/chat/chat-message-list.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -15,20 +15,18 @@ import command from './chat-message-list.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.CHAT_MESSAGE_LIST, () => { - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/teams/commands/chat/chat-message-send.spec.ts b/src/m365/teams/commands/chat/chat-message-send.spec.ts index 08b1a147d84..a13992a582f 100644 --- a/src/m365/teams/commands/chat/chat-message-send.spec.ts +++ b/src/m365/teams/commands/chat/chat-message-send.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -35,14 +35,12 @@ describe(commands.CHAT_MESSAGE_SEND, () => { const messageSentResponse: any = { "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#chats('19%3A2da4c29f6d7041eca70b638b43d45437%40thread.v2')/messages/$entity", "id": "1616991463150", "replyToId": null, "etag": "1616991463150", "messageType": "message", "createdDateTime": "2021-03-29T04:17:43.15Z", "lastModifiedDateTime": "2021-03-29T04:17:43.15Z", "lastEditedDateTime": null, "deletedDateTime": null, "subject": null, "summary": null, "chatId": "19:2da4c29f6d7041eca70b638b43d45437@thread.v2", "importance": "normal", "locale": "en-us", "webUrl": null, "channelIdentity": null, "policyViolation": null, "eventDetail": null, "from": { "application": null, "device": null, "conversation": null, "user": { "id": "8ea0e38b-efb3-4757-924a-5f94061cf8c2", "displayName": "Robin Kline", "userIdentityType": "aadUser" } }, "body": { "contentType": "text", "content": "Hello World" }, "attachments": [], "mentions": [], "reactions": [] }; //#endregion - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); @@ -54,7 +52,7 @@ describe(commands.CHAT_MESSAGE_SEND, () => { accessToken: 'abc' }; } - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -109,7 +107,7 @@ describe(commands.CHAT_MESSAGE_SEND, () => { request.post, accessToken.getUserNameFromAccessToken, cli.getSettingWithDefaultValue, - Cli.handleMultipleResultsFound + cli.handleMultipleResultsFound ]); }); @@ -428,7 +426,7 @@ describe(commands.CHAT_MESSAGE_SEND, () => { }); it('handles selecting single result when multiple chats with the specified name found and cli is set to prompt', async () => { - sinon.stub(Cli, 'handleMultipleResultsFound').resolves(singleChatByNameResponse.value[0]); + sinon.stub(cli, 'handleMultipleResultsFound').resolves(singleChatByNameResponse.value[0]); await command.action(logger, { options: { @@ -457,7 +455,7 @@ describe(commands.CHAT_MESSAGE_SEND, () => { }); it('handles selecting single result when multiple chats by user email found and cli is set to prompt', async () => { - sinon.stub(Cli, 'handleMultipleResultsFound').resolves(chatCreatedResponse); + sinon.stub(cli, 'handleMultipleResultsFound').resolves(chatCreatedResponse); sinonUtil.restore(request.post); sinon.stub(request, 'post').callsFake((opts) => { diff --git a/src/m365/teams/commands/chat/chat-message-send.ts b/src/m365/teams/commands/chat/chat-message-send.ts index 82d8bd4aad7..52af4750a36 100644 --- a/src/m365/teams/commands/chat/chat-message-send.ts +++ b/src/m365/teams/commands/chat/chat-message-send.ts @@ -8,7 +8,7 @@ import { validation } from '../../../../utils/validation.js'; import GraphCommand from '../../../base/GraphCommand.js'; import commands from '../../commands.js'; import { chatUtil } from './chatUtil.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { formatting } from '../../../../utils/formatting.js'; interface CommandArgs { @@ -125,7 +125,7 @@ class TeamsChatMessageSendCommand extends GraphCommand { } const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', existingChats); - const result = await Cli.handleMultipleResultsFound(`Multiple chat conversations with this name found.`, resultAsKeyValuePair); + const result = await cli.handleMultipleResultsFound(`Multiple chat conversations with this name found.`, resultAsKeyValuePair); return result.id!; } @@ -141,7 +141,7 @@ class TeamsChatMessageSendCommand extends GraphCommand { } const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', existingChats); - const result = await Cli.handleMultipleResultsFound(`Multiple chat conversations with this name found.`, resultAsKeyValuePair); + const result = await cli.handleMultipleResultsFound(`Multiple chat conversations with this name found.`, resultAsKeyValuePair); return result.id!; } diff --git a/src/m365/teams/commands/funsettings/funsettings-list.spec.ts b/src/m365/teams/commands/funsettings/funsettings-list.spec.ts index cd3875f3833..fb574ffb0ef 100644 --- a/src/m365/teams/commands/funsettings/funsettings-list.spec.ts +++ b/src/m365/teams/commands/funsettings/funsettings-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -25,7 +25,7 @@ describe(commands.FUNSETTINGS_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/teams/commands/funsettings/funsettings-set.spec.ts b/src/m365/teams/commands/funsettings/funsettings-set.spec.ts index 54dc7e183b6..570a865f714 100644 --- a/src/m365/teams/commands/funsettings/funsettings-set.spec.ts +++ b/src/m365/teams/commands/funsettings/funsettings-set.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -24,7 +24,7 @@ describe(commands.FUNSETTINGS_SET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/teams/commands/guestsettings/guestsettings-list.spec.ts b/src/m365/teams/commands/guestsettings/guestsettings-list.spec.ts index ff47bf86eb9..148e8305864 100644 --- a/src/m365/teams/commands/guestsettings/guestsettings-list.spec.ts +++ b/src/m365/teams/commands/guestsettings/guestsettings-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -25,7 +25,7 @@ describe(commands.GUESTSETTINGS_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/teams/commands/guestsettings/guestsettings-set.spec.ts b/src/m365/teams/commands/guestsettings/guestsettings-set.spec.ts index 512188eca26..e7eb8a88bcd 100644 --- a/src/m365/teams/commands/guestsettings/guestsettings-set.spec.ts +++ b/src/m365/teams/commands/guestsettings/guestsettings-set.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -24,7 +24,7 @@ describe(commands.GUESTSETTINGS_SET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/teams/commands/meeting/meeting-add.spec.ts b/src/m365/teams/commands/meeting/meeting-add.spec.ts index 5028f8d4f94..5fa81581ebd 100644 --- a/src/m365/teams/commands/meeting/meeting-add.spec.ts +++ b/src/m365/teams/commands/meeting/meeting-add.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon, { SinonFakeTimers } from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -42,7 +42,7 @@ describe(commands.MEETING_ADD, () => { expiresOn: 'abc', accessToken: 'abc' }; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); sinon.stub(accessToken, 'isAppOnlyAccessToken').returns(false); }); diff --git a/src/m365/teams/commands/meeting/meeting-attendancereport-list.spec.ts b/src/m365/teams/commands/meeting/meeting-attendancereport-list.spec.ts index 9455069307f..07210f9758a 100644 --- a/src/m365/teams/commands/meeting/meeting-attendancereport-list.spec.ts +++ b/src/m365/teams/commands/meeting/meeting-attendancereport-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -56,7 +56,7 @@ describe(commands.MEETING_ATTENDANCEREPORT_LIST, () => { expiresOn: 'abc', accessToken: 'abc' }; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -79,7 +79,7 @@ describe(commands.MEETING_ATTENDANCEREPORT_LIST, () => { sinonUtil.restore([ accessToken.isAppOnlyAccessToken, request.get, - Cli.executeCommandWithOutput + cli.executeCommandWithOutput ]); }); @@ -162,7 +162,7 @@ describe(commands.MEETING_ATTENDANCEREPORT_LIST, () => { throw 'Invalid request.'; }); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === userGetCommand) { return { stdout: JSON.stringify({ id: userId }) }; } @@ -183,7 +183,7 @@ describe(commands.MEETING_ATTENDANCEREPORT_LIST, () => { it('retrieves meeting attendace reports correctly by userEmail', async () => { sinon.stub(accessToken, 'isAppOnlyAccessToken').returns(true); - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === userGetCommand) { return { stdout: JSON.stringify({ id: userId }) }; } diff --git a/src/m365/teams/commands/meeting/meeting-attendancereport-list.ts b/src/m365/teams/commands/meeting/meeting-attendancereport-list.ts index 498b9441e17..90b3654a9c9 100644 --- a/src/m365/teams/commands/meeting/meeting-attendancereport-list.ts +++ b/src/m365/teams/commands/meeting/meeting-attendancereport-list.ts @@ -1,5 +1,5 @@ import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import Command from '../../../../Command.js'; import GlobalOptions from '../../../../GlobalOptions.js'; @@ -130,7 +130,7 @@ class TeamsMeetingAttendancereportListCommand extends GraphCommand { verbose: this.verbose }; - const output = await Cli.executeCommandWithOutput(aadUserGetCommand as Command, { options: { ...options, _: [] } }); + const output = await cli.executeCommandWithOutput(aadUserGetCommand as Command, { options: { ...options, _: [] } }); const getUserOutput = JSON.parse(output.stdout); return getUserOutput.id; } diff --git a/src/m365/teams/commands/meeting/meeting-get.spec.ts b/src/m365/teams/commands/meeting/meeting-get.spec.ts index f3a39612d83..28af0bb229f 100644 --- a/src/m365/teams/commands/meeting/meeting-get.spec.ts +++ b/src/m365/teams/commands/meeting/meeting-get.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -121,7 +121,7 @@ describe(commands.MEETING_GET, () => { expiresOn: 'abc', accessToken: 'abc' }; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/teams/commands/meeting/meeting-list.spec.ts b/src/m365/teams/commands/meeting/meeting-list.spec.ts index 48f5c53e1df..09e85b76360 100644 --- a/src/m365/teams/commands/meeting/meeting-list.spec.ts +++ b/src/m365/teams/commands/meeting/meeting-list.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -153,7 +153,7 @@ describe(commands.MEETING_LIST, () => { expiresOn: 'abc', accessToken: 'abc' }; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); sinon.stub(accessToken, 'isAppOnlyAccessToken').returns(false); }); diff --git a/src/m365/teams/commands/meeting/meeting-transcript-list.spec.ts b/src/m365/teams/commands/meeting/meeting-transcript-list.spec.ts index f754ca4e91f..e17d450e9e4 100644 --- a/src/m365/teams/commands/meeting/meeting-transcript-list.spec.ts +++ b/src/m365/teams/commands/meeting/meeting-transcript-list.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -37,14 +37,12 @@ describe(commands.MEETING_TRANSCRIPT_LIST, () => { } ]; - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); @@ -54,7 +52,7 @@ describe(commands.MEETING_TRANSCRIPT_LIST, () => { expiresOn: 'abc', accessToken: 'abc' }; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -77,7 +75,7 @@ describe(commands.MEETING_TRANSCRIPT_LIST, () => { sinonUtil.restore([ accessToken.isAppOnlyAccessToken, request.get, - Cli.executeCommandWithOutput, + cli.executeCommandWithOutput, cli.getSettingWithDefaultValue ]); }); diff --git a/src/m365/teams/commands/membersettings/membersettings-list.spec.ts b/src/m365/teams/commands/membersettings/membersettings-list.spec.ts index 2b0570715eb..c44f9b6fe7d 100644 --- a/src/m365/teams/commands/membersettings/membersettings-list.spec.ts +++ b/src/m365/teams/commands/membersettings/membersettings-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -25,7 +25,7 @@ describe(commands.MEMBERSETTINGS_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/teams/commands/membersettings/membersettings-set.spec.ts b/src/m365/teams/commands/membersettings/membersettings-set.spec.ts index 885f4a1d980..636e4e78d4e 100644 --- a/src/m365/teams/commands/membersettings/membersettings-set.spec.ts +++ b/src/m365/teams/commands/membersettings/membersettings-set.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -24,7 +24,7 @@ describe(commands.MEMBERSETTINGS_SET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/teams/commands/message/message-get.spec.ts b/src/m365/teams/commands/message/message-get.spec.ts index ece7e4dc4e6..c73090751b6 100644 --- a/src/m365/teams/commands/message/message-get.spec.ts +++ b/src/m365/teams/commands/message/message-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,20 +15,18 @@ import command from './message-get.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.MESSAGE_GET, () => { - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/teams/commands/message/message-list.spec.ts b/src/m365/teams/commands/message/message-list.spec.ts index 680754c4b2a..8dc3190cdf2 100644 --- a/src/m365/teams/commands/message/message-list.spec.ts +++ b/src/m365/teams/commands/message/message-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,20 +15,18 @@ import command from './message-list.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.MESSAGE_LIST, () => { - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/teams/commands/message/message-reply-list.spec.ts b/src/m365/teams/commands/message/message-reply-list.spec.ts index faa2f499c39..545a36024ab 100644 --- a/src/m365/teams/commands/message/message-reply-list.spec.ts +++ b/src/m365/teams/commands/message/message-reply-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,20 +15,18 @@ import command from './message-reply-list.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.MESSAGE_REPLY_LIST, () => { - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/teams/commands/message/message-send.spec.ts b/src/m365/teams/commands/message/message-send.spec.ts index fe6e38476be..72e6c1a755f 100644 --- a/src/m365/teams/commands/message/message-send.spec.ts +++ b/src/m365/teams/commands/message/message-send.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -68,7 +68,7 @@ describe(commands.MESSAGE_SEND, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/teams/commands/messagingsettings/messagingsettings-list.spec.ts b/src/m365/teams/commands/messagingsettings/messagingsettings-list.spec.ts index 74c01e0b683..06dd923731c 100644 --- a/src/m365/teams/commands/messagingsettings/messagingsettings-list.spec.ts +++ b/src/m365/teams/commands/messagingsettings/messagingsettings-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -25,7 +25,7 @@ describe(commands.MESSAGINGSETTINGS_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/teams/commands/messagingsettings/messagingsettings-set.spec.ts b/src/m365/teams/commands/messagingsettings/messagingsettings-set.spec.ts index 9a3a8fd3b74..6bf02e12861 100644 --- a/src/m365/teams/commands/messagingsettings/messagingsettings-set.spec.ts +++ b/src/m365/teams/commands/messagingsettings/messagingsettings-set.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -24,7 +24,7 @@ describe(commands.MESSAGINGSETTINGS_SET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/teams/commands/report/report-directroutingcalls.spec.ts b/src/m365/teams/commands/report/report-directroutingcalls.spec.ts index dec81969a59..28c12833b55 100644 --- a/src/m365/teams/commands/report/report-directroutingcalls.spec.ts +++ b/src/m365/teams/commands/report/report-directroutingcalls.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -54,7 +54,7 @@ describe(commands.REPORT_DIRECTROUTINGCALLS, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/teams/commands/report/report-pstncalls.spec.ts b/src/m365/teams/commands/report/report-pstncalls.spec.ts index c3bdbf7a772..18711e4915b 100644 --- a/src/m365/teams/commands/report/report-pstncalls.spec.ts +++ b/src/m365/teams/commands/report/report-pstncalls.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -54,7 +54,7 @@ describe(commands.REPORT_PSTNCALLS, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/teams/commands/tab/tab-add.spec.ts b/src/m365/teams/commands/tab/tab-add.spec.ts index 9e911cdd259..caa7dfd97c5 100644 --- a/src/m365/teams/commands/tab/tab-add.spec.ts +++ b/src/m365/teams/commands/tab/tab-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import Sinon, * as sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -25,7 +25,7 @@ describe(commands.TAB_ADD, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/teams/commands/tab/tab-get.spec.ts b/src/m365/teams/commands/tab/tab-get.spec.ts index 142bc28ff3c..2b314e54364 100644 --- a/src/m365/teams/commands/tab/tab-get.spec.ts +++ b/src/m365/teams/commands/tab/tab-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,20 +15,18 @@ import command from './tab-get.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.TAB_GET, () => { - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/teams/commands/tab/tab-list.spec.ts b/src/m365/teams/commands/tab/tab-list.spec.ts index a3810cede35..08184e5f697 100644 --- a/src/m365/teams/commands/tab/tab-list.spec.ts +++ b/src/m365/teams/commands/tab/tab-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -25,7 +25,7 @@ describe(commands.TAB_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/teams/commands/tab/tab-remove.spec.ts b/src/m365/teams/commands/tab/tab-remove.spec.ts index ab3dfb542b0..e4a53a4ef65 100644 --- a/src/m365/teams/commands/tab/tab-remove.spec.ts +++ b/src/m365/teams/commands/tab/tab-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,20 +15,18 @@ import command from './tab-remove.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.TAB_REMOVE, () => { - let cli: Cli; let log: string[]; let logger: Logger; let promptIssued: boolean = false; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -44,7 +42,7 @@ describe(commands.TAB_REMOVE, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -54,7 +52,7 @@ describe(commands.TAB_REMOVE, () => { afterEach(() => { sinonUtil.restore([ request.delete, - Cli.promptForConfirmation, + cli.promptForConfirmation, cli.getSettingWithDefaultValue ]); }); @@ -193,8 +191,8 @@ describe(commands.TAB_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { diff --git a/src/m365/teams/commands/tab/tab-remove.ts b/src/m365/teams/commands/tab/tab-remove.ts index 52b4b553c5f..e30dd4928c4 100644 --- a/src/m365/teams/commands/tab/tab-remove.ts +++ b/src/m365/teams/commands/tab/tab-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -101,7 +101,7 @@ class TeamsTabRemoveCommand extends GraphCommand { await removeTab(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the tab with id ${args.options.id} from channel ${args.options.channelId} in team ${args.options.teamId}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the tab with id ${args.options.id} from channel ${args.options.channelId} in team ${args.options.teamId}?` }); if (result) { await removeTab(); diff --git a/src/m365/teams/commands/team/team-add.spec.ts b/src/m365/teams/commands/team/team-add.spec.ts index f8dda980bee..b2e96d85317 100644 --- a/src/m365/teams/commands/team/team-add.spec.ts +++ b/src/m365/teams/commands/team/team-add.spec.ts @@ -2,7 +2,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import request from '../../../../request.js'; @@ -26,7 +26,7 @@ describe(commands.TEAM_ADD, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/teams/commands/team/team-app-list.spec.ts b/src/m365/teams/commands/team/team-app-list.spec.ts index 69755849904..dc03a03626a 100644 --- a/src/m365/teams/commands/team/team-app-list.spec.ts +++ b/src/m365/teams/commands/team/team-app-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -31,7 +31,7 @@ describe(commands.TEAM_APP_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -54,7 +54,7 @@ describe(commands.TEAM_APP_LIST, () => { afterEach(() => { sinonUtil.restore([ odata.getAllItems, - Cli.executeCommandWithOutput + cli.executeCommandWithOutput ]); }); @@ -82,7 +82,7 @@ describe(commands.TEAM_APP_LIST, () => { }); it('fails when team does not exist in tenant', async () => { - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === teamGetCommand) { throw 'The specified team does not exist in the Microsoft Teams'; } @@ -94,7 +94,7 @@ describe(commands.TEAM_APP_LIST, () => { }); it('lists team apps for team specified by name with output json', async () => { - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise => { if (command === teamGetCommand) { return { "stdout": JSON.stringify({ id: teamId }) }; } diff --git a/src/m365/teams/commands/team/team-app-list.ts b/src/m365/teams/commands/team/team-app-list.ts index e12871ce5a2..25c8a661715 100644 --- a/src/m365/teams/commands/team/team-app-list.ts +++ b/src/m365/teams/commands/team/team-app-list.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import Command from '../../../../Command.js'; import GlobalOptions from '../../../../GlobalOptions.js'; @@ -84,7 +84,7 @@ class TeamsTeamAppListCommand extends GraphCommand { const teamId: string = await this.getTeamId(args); const res = await odata.getAllItems(`${this.resource}/v1.0/teams/${teamId}/installedApps?$expand=teamsApp,teamsAppDefinition`); - if (!Cli.shouldTrimOutput(args.options.output)) { + if (!cli.shouldTrimOutput(args.options.output)) { await logger.log(res); } else { @@ -114,7 +114,7 @@ class TeamsTeamAppListCommand extends GraphCommand { verbose: this.verbose }; - const commandOutput = await Cli.executeCommandWithOutput(teamGetCommand as Command, { options: { ...teamGetOptions, _: [] } }); + const commandOutput = await cli.executeCommandWithOutput(teamGetCommand as Command, { options: { ...teamGetOptions, _: [] } }); const team = JSON.parse(commandOutput.stdout); return team.id; } diff --git a/src/m365/teams/commands/team/team-archive.spec.ts b/src/m365/teams/commands/team/team-archive.spec.ts index c02fd9b912e..1d7ffd2cf03 100644 --- a/src/m365/teams/commands/team/team-archive.spec.ts +++ b/src/m365/teams/commands/team/team-archive.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,19 +15,17 @@ import command from './team-archive.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.TEAM_ARCHIVE, () => { - let cli: Cli; let log: string[]; let logger: Logger; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/teams/commands/team/team-clone.spec.ts b/src/m365/teams/commands/team/team-clone.spec.ts index c1c7ce5a2f9..a00fe616d90 100644 --- a/src/m365/teams/commands/team/team-clone.spec.ts +++ b/src/m365/teams/commands/team/team-clone.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,19 +15,17 @@ import command from './team-clone.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.TEAM_CLONE, () => { - let cli: Cli; let log: string[]; let logger: Logger; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/teams/commands/team/team-get.spec.ts b/src/m365/teams/commands/team/team-get.spec.ts index 306d48a6540..44a62dd2cc3 100644 --- a/src/m365/teams/commands/team/team-get.spec.ts +++ b/src/m365/teams/commands/team/team-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,20 +15,18 @@ import command from './team-get.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.TEAM_GET, () => { - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/teams/commands/team/team-list.spec.ts b/src/m365/teams/commands/team/team-list.spec.ts index 02244a9f444..9d3d939c341 100644 --- a/src/m365/teams/commands/team/team-list.spec.ts +++ b/src/m365/teams/commands/team/team-list.spec.ts @@ -8,7 +8,7 @@ import { telemetry } from '../../../../telemetry.js'; import { pid } from '../../../../utils/pid.js'; import { session } from '../../../../utils/session.js'; import { sinonUtil } from '../../../../utils/sinonUtil.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import commands from '../../commands.js'; import { formatting } from '../../../../utils/formatting.js'; @@ -16,7 +16,6 @@ import command from './team-list.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.TEAM_LIST, () => { - let cli: Cli; const userId = '2630257f-11d4-4244-b4a1-3707b79f142d'; const userName = 'john.doe@contoso.com'; @@ -211,8 +210,7 @@ describe(commands.TEAM_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); - cli = Cli.getInstance(); + commandInfo = cli.getCommandInfo(command); sinon.stub(cli, 'getSettingWithDefaultValue').returnsArg(1); }); diff --git a/src/m365/teams/commands/team/team-remove.spec.ts b/src/m365/teams/commands/team/team-remove.spec.ts index 2a61330d951..a652f84acc3 100644 --- a/src/m365/teams/commands/team/team-remove.spec.ts +++ b/src/m365/teams/commands/team/team-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -25,7 +25,7 @@ describe(commands.TEAM_REMOVE, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -42,7 +42,7 @@ describe(commands.TEAM_REMOVE, () => { } }; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -54,7 +54,7 @@ describe(commands.TEAM_REMOVE, () => { sinonUtil.restore([ request.get, request.delete, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -148,8 +148,8 @@ describe(commands.TEAM_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { debug: true, id: "00000000-0000-0000-0000-000000000000" } }); assert(teamsDeleteCallIssued); @@ -211,8 +211,8 @@ describe(commands.TEAM_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await assert.rejects(command.action(logger, { options: { id: '8231f9f2-701f-4c6e-93ce-ecb563e3c1ee' } } as any), new CommandError('No team found with Group Id 8231f9f2-701f-4c6e-93ce-ecb563e3c1ee')); }); diff --git a/src/m365/teams/commands/team/team-remove.ts b/src/m365/teams/commands/team/team-remove.ts index 1bbdc1fbbea..39d4d11307f 100644 --- a/src/m365/teams/commands/team/team-remove.ts +++ b/src/m365/teams/commands/team/team-remove.ts @@ -1,5 +1,5 @@ import { Group } from '@microsoft/microsoft-graph-types'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -115,7 +115,7 @@ class TeamsTeamRemoveCommand extends GraphCommand { await removeTeam(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the team ${args.options.id ? args.options.id : args.options.name}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the team ${args.options.id ? args.options.id : args.options.name}?` }); if (result) { await removeTeam(); diff --git a/src/m365/teams/commands/team/team-set.spec.ts b/src/m365/teams/commands/team/team-set.spec.ts index 9c829daf6fb..a3a8c4a8696 100644 --- a/src/m365/teams/commands/team/team-set.spec.ts +++ b/src/m365/teams/commands/team/team-set.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -24,7 +24,7 @@ describe(commands.TEAM_SET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/teams/commands/team/team-unarchive.spec.ts b/src/m365/teams/commands/team/team-unarchive.spec.ts index feae6080fc7..705ababc8c0 100644 --- a/src/m365/teams/commands/team/team-unarchive.spec.ts +++ b/src/m365/teams/commands/team/team-unarchive.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,19 +15,17 @@ import command from './team-unarchive.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.TEAM_UNARCHIVE, () => { - let cli: Cli; let log: string[]; let logger: Logger; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/teams/commands/user/user-app-add.spec.ts b/src/m365/teams/commands/user/user-app-add.spec.ts index 42e8a77488c..ff4c09d0f9d 100644 --- a/src/m365/teams/commands/user/user-app-add.spec.ts +++ b/src/m365/teams/commands/user/user-app-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -24,7 +24,7 @@ describe(commands.USER_APP_ADD, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/teams/commands/user/user-app-list.spec.ts b/src/m365/teams/commands/user/user-app-list.spec.ts index 1537ce4f684..c2ddd047163 100644 --- a/src/m365/teams/commands/user/user-app-list.spec.ts +++ b/src/m365/teams/commands/user/user-app-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -63,20 +63,18 @@ describe(commands.USER_APP_LIST, () => { ] }; - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/teams/commands/user/user-app-list.ts b/src/m365/teams/commands/user/user-app-list.ts index 0f89813a60b..73dfb2dc1bc 100644 --- a/src/m365/teams/commands/user/user-app-list.ts +++ b/src/m365/teams/commands/user/user-app-list.ts @@ -1,5 +1,5 @@ import { TeamsAppDefinition, TeamsAppInstallation } from '@microsoft/microsoft-graph-types'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -88,7 +88,7 @@ class TeamsUserAppListCommand extends GraphCommand { (i as any).appId = appId; }); - if (!Cli.shouldTrimOutput(args.options.output)) { + if (!cli.shouldTrimOutput(args.options.output)) { await logger.log(items); } else { diff --git a/src/m365/teams/commands/user/user-app-remove.spec.ts b/src/m365/teams/commands/user/user-app-remove.spec.ts index e8c8d37c489..0e6d13eef4c 100644 --- a/src/m365/teams/commands/user/user-app-remove.spec.ts +++ b/src/m365/teams/commands/user/user-app-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -18,20 +18,18 @@ describe(commands.USER_APP_REMOVE, () => { const userId = '15d7a78e-fd77-4599-97a5-dbb6372846c6'; const userName = 'contoso@contoso.onmicrosoft.com'; const appId = 'YzUyN2E0NzAtYTg4Mi00ODFjLTk4MWMtZWU2ZWZhYmE4NWM3IyM0ZDFlYTA0Ny1mMTk2LTQ1MGQtYjJlOS0wZDI4NTViYTA1YTY='; - let cli: Cli; let log: string[]; let logger: Logger; let promptIssued: boolean = false; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -48,7 +46,7 @@ describe(commands.USER_APP_REMOVE, () => { } }; (command as any).items = []; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -60,9 +58,9 @@ describe(commands.USER_APP_REMOVE, () => { sinonUtil.restore([ request.get, request.delete, - Cli.promptForConfirmation, + cli.promptForConfirmation, cli.getSettingWithDefaultValue, - Cli.handleMultipleResultsFound + cli.handleMultipleResultsFound ]); }); @@ -185,8 +183,8 @@ describe(commands.USER_APP_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -237,8 +235,8 @@ describe(commands.USER_APP_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { @@ -290,7 +288,7 @@ describe(commands.USER_APP_REMOVE, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves({ id: "ZDczZWVjZmQtYzFkNS00MzY2LWJkMjEtZDUyOTM1ZThkYjkxIyMxLjYuMC4wIyNQdWJsaXNoZWQ=" }); + sinon.stub(cli, 'handleMultipleResultsFound').resolves({ id: "ZDczZWVjZmQtYzFkNS00MzY2LWJkMjEtZDUyOTM1ZThkYjkxIyMxLjYuMC4wIyNQdWJsaXNoZWQ=" }); sinon.stub(request, 'delete').callsFake((opts) => { if (opts.url === `https://graph.microsoft.com/v1.0/users/c527a470-a882-481c-981c-ee6efaba85c7/teamwork/installedApps/ZDczZWVjZmQtYzFkNS00MzY2LWJkMjEtZDUyOTM1ZThkYjkxIyMxLjYuMC4wIyNQdWJsaXNoZWQ=`) { diff --git a/src/m365/teams/commands/user/user-app-remove.ts b/src/m365/teams/commands/user/user-app-remove.ts index af0025fe198..8ba38718de2 100644 --- a/src/m365/teams/commands/user/user-app-remove.ts +++ b/src/m365/teams/commands/user/user-app-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -121,7 +121,7 @@ class TeamsUserAppRemoveCommand extends GraphCommand { await removeApp(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the app with id ${args.options.id} for user ${args.options.userId ?? args.options.userName}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the app with id ${args.options.id} for user ${args.options.userId ?? args.options.userName}?` }); if (result) { await removeApp(); @@ -153,7 +153,7 @@ class TeamsUserAppRemoveCommand extends GraphCommand { } const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', response.value); - const result: { id: string } = (await Cli.handleMultipleResultsFound(`Multiple Teams apps with name '${args.options.name}' found.`, resultAsKeyValuePair)) as { id: string }; + const result: { id: string } = (await cli.handleMultipleResultsFound(`Multiple Teams apps with name '${args.options.name}' found.`, resultAsKeyValuePair)) as { id: string }; return result.id; } } diff --git a/src/m365/teams/commands/user/user-list.spec.ts b/src/m365/teams/commands/user/user-list.spec.ts index a953d31bc7a..f1dd05ce18b 100644 --- a/src/m365/teams/commands/user/user-list.spec.ts +++ b/src/m365/teams/commands/user/user-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -25,7 +25,7 @@ describe(commands.USER_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/tenant/commands/info/info-get.spec.ts b/src/m365/tenant/commands/info/info-get.spec.ts index cf70d172d0c..a58a819506f 100644 --- a/src/m365/tenant/commands/info/info-get.spec.ts +++ b/src/m365/tenant/commands/info/info-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -35,7 +35,7 @@ describe(commands.INFO_GET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); if (!auth.service.accessTokens[auth.defaultResource]) { auth.service.accessTokens[auth.defaultResource] = { expiresOn: '123', diff --git a/src/m365/tenant/commands/people/people-profilecardproperty-add.spec.ts b/src/m365/tenant/commands/people/people-profilecardproperty-add.spec.ts index 92b5f60b7e0..73ce67933d2 100644 --- a/src/m365/tenant/commands/people/people-profilecardproperty-add.spec.ts +++ b/src/m365/tenant/commands/people/people-profilecardproperty-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -54,7 +54,7 @@ describe(commands.PEOPLE_PROFILECARDPROPERTY_ADD, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/tenant/commands/people/people-profilecardproperty-get.spec.ts b/src/m365/tenant/commands/people/people-profilecardproperty-get.spec.ts index e2dd8f88699..0336a3cfc47 100644 --- a/src/m365/tenant/commands/people/people-profilecardproperty-get.spec.ts +++ b/src/m365/tenant/commands/people/people-profilecardproperty-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -44,7 +44,7 @@ describe(commands.PEOPLE_PROFILECARDPROPERTY_GET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/tenant/commands/people/people-profilecardproperty-remove.spec.ts b/src/m365/tenant/commands/people/people-profilecardproperty-remove.spec.ts index a3a5b1746ca..62f0e82b022 100644 --- a/src/m365/tenant/commands/people/people-profilecardproperty-remove.spec.ts +++ b/src/m365/tenant/commands/people/people-profilecardproperty-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -24,7 +24,7 @@ describe(commands.PEOPLE_PROFILECARDPROPERTY_REMOVE, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -40,13 +40,13 @@ describe(commands.PEOPLE_PROFILECARDPROPERTY_REMOVE, () => { log.push(msg); } }; - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinon.stub(cli, 'promptForConfirmation').resolves(true); }); afterEach(() => { sinonUtil.restore([ request.delete, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); diff --git a/src/m365/tenant/commands/people/people-profilecardproperty-remove.ts b/src/m365/tenant/commands/people/people-profilecardproperty-remove.ts index 8798d9688f7..18377ea174d 100644 --- a/src/m365/tenant/commands/people/people-profilecardproperty-remove.ts +++ b/src/m365/tenant/commands/people/people-profilecardproperty-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -92,7 +92,7 @@ class TenantPeopleProfileCardPropertyRemoveCommand extends GraphCommand { await removeProfileCardProperty(); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the profile card property '${directoryPropertyName}'?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the profile card property '${directoryPropertyName}'?` }); if (result) { await removeProfileCardProperty(); diff --git a/src/m365/tenant/commands/people/people-profilecardproperty-set.spec.ts b/src/m365/tenant/commands/people/people-profilecardproperty-set.spec.ts index f124601b3b1..5c4ecb9c3b4 100644 --- a/src/m365/tenant/commands/people/people-profilecardproperty-set.spec.ts +++ b/src/m365/tenant/commands/people/people-profilecardproperty-set.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -61,7 +61,7 @@ describe(commands.PEOPLE_PROFILECARDPROPERTY_SET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/tenant/commands/serviceannouncement/serviceannouncement-health-get.spec.ts b/src/m365/tenant/commands/serviceannouncement/serviceannouncement-health-get.spec.ts index 75335727bb2..59c19cb4fc4 100644 --- a/src/m365/tenant/commands/serviceannouncement/serviceannouncement-health-get.spec.ts +++ b/src/m365/tenant/commands/serviceannouncement/serviceannouncement-health-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -70,7 +70,7 @@ describe(commands.SERVICEANNOUNCEMENT_HEALTH_GET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/tenant/commands/serviceannouncement/serviceannouncement-health-list.spec.ts b/src/m365/tenant/commands/serviceannouncement/serviceannouncement-health-list.spec.ts index 8e4ad877324..69425053148 100644 --- a/src/m365/tenant/commands/serviceannouncement/serviceannouncement-health-list.spec.ts +++ b/src/m365/tenant/commands/serviceannouncement/serviceannouncement-health-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -110,7 +110,7 @@ describe(commands.SERVICEANNOUNCEMENT_HEALTH_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/tenant/commands/serviceannouncement/serviceannouncement-message-get.spec.ts b/src/m365/tenant/commands/serviceannouncement/serviceannouncement-message-get.spec.ts index aa6fc96c71b..1d6c6a277e4 100644 --- a/src/m365/tenant/commands/serviceannouncement/serviceannouncement-message-get.spec.ts +++ b/src/m365/tenant/commands/serviceannouncement/serviceannouncement-message-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -77,7 +77,7 @@ describe(commands.SERVICEANNOUNCEMENT_MESSAGE_GET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/todo/commands/list/list-get.spec.ts b/src/m365/todo/commands/list/list-get.spec.ts index f7eadbad92c..7e3ee81c6cb 100644 --- a/src/m365/todo/commands/list/list-get.spec.ts +++ b/src/m365/todo/commands/list/list-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -40,7 +40,7 @@ describe(commands.LIST_GET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/todo/commands/list/list-remove.spec.ts b/src/m365/todo/commands/list/list-remove.spec.ts index 9f7767b52d9..1f414febec8 100644 --- a/src/m365/todo/commands/list/list-remove.spec.ts +++ b/src/m365/todo/commands/list/list-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,20 +15,18 @@ import command from './list-remove.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.LIST_REMOVE, () => { - let cli: Cli; let log: string[]; let logger: Logger; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - sinon.stub(Cli, 'promptForConfirmation').resolves(true); - commandInfo = Cli.getCommandInfo(command); + sinon.stub(cli, 'promptForConfirmation').resolves(true); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -247,8 +245,8 @@ describe(commands.LIST_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - const confirmationStub = sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + const confirmationStub = sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { diff --git a/src/m365/todo/commands/list/list-remove.ts b/src/m365/todo/commands/list/list-remove.ts index d1786156a99..bcc9ba7d847 100644 --- a/src/m365/todo/commands/list/list-remove.ts +++ b/src/m365/todo/commands/list/list-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request from '../../../../request.js'; @@ -65,7 +65,7 @@ class TodoListRemoveCommand extends GraphCommand { await this.removeList(args); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the task list ${args.options.id || args.options.name}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the task list ${args.options.id || args.options.name}?` }); if (result) { await this.removeList(args); diff --git a/src/m365/todo/commands/list/list-set.spec.ts b/src/m365/todo/commands/list/list-set.spec.ts index d774c682f26..4e914419bee 100644 --- a/src/m365/todo/commands/list/list-set.spec.ts +++ b/src/m365/todo/commands/list/list-set.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,19 +15,17 @@ import command from './list-set.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.LIST_SET, () => { - let cli: Cli; let log: string[]; let logger: Logger; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/todo/commands/task/task-add.spec.ts b/src/m365/todo/commands/task/task-add.spec.ts index c92bc040003..d32f52a4d5d 100644 --- a/src/m365/todo/commands/task/task-add.spec.ts +++ b/src/m365/todo/commands/task/task-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -45,7 +45,7 @@ describe(commands.TASK_ADD, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/todo/commands/task/task-get.spec.ts b/src/m365/todo/commands/task/task-get.spec.ts index 8f0e76406b8..0233d1cb50f 100644 --- a/src/m365/todo/commands/task/task-get.spec.ts +++ b/src/m365/todo/commands/task/task-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,7 +15,6 @@ import command from './task-get.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.TASK_GET, () => { - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; @@ -42,13 +41,12 @@ describe(commands.TASK_GET, () => { }; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/todo/commands/task/task-get.ts b/src/m365/todo/commands/task/task-get.ts index dd12309a2a2..04bc03606cd 100644 --- a/src/m365/todo/commands/task/task-get.ts +++ b/src/m365/todo/commands/task/task-get.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -100,7 +100,7 @@ class TodoTaskGetCommand extends GraphCommand { const item: ToDoTask = await request.get(requestOptions); - if (!Cli.shouldTrimOutput(args.options.output)) { + if (!cli.shouldTrimOutput(args.options.output)) { await logger.log(item); } else { diff --git a/src/m365/todo/commands/task/task-list.spec.ts b/src/m365/todo/commands/task/task-list.spec.ts index 49f64f1e443..239c0c3a287 100644 --- a/src/m365/todo/commands/task/task-list.spec.ts +++ b/src/m365/todo/commands/task/task-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,20 +15,18 @@ import command from './task-list.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.TASK_LIST, () => { - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/todo/commands/task/task-list.ts b/src/m365/todo/commands/task/task-list.ts index b7a35e27af5..166c743447b 100644 --- a/src/m365/todo/commands/task/task-list.ts +++ b/src/m365/todo/commands/task/task-list.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request from '../../../../request.js'; @@ -90,7 +90,7 @@ class TodoTaskListCommand extends GraphCommand { const endpoint: string = `${this.resource}/v1.0/me/todo/lists/${listId}/tasks`; const items: ToDoTask[] = await odata.getAllItems(endpoint); - if (!Cli.shouldTrimOutput(args.options.output)) { + if (!cli.shouldTrimOutput(args.options.output)) { await logger.log(items); } else { diff --git a/src/m365/todo/commands/task/task-remove.spec.ts b/src/m365/todo/commands/task/task-remove.spec.ts index 32239db639e..96090f8cb97 100644 --- a/src/m365/todo/commands/task/task-remove.spec.ts +++ b/src/m365/todo/commands/task/task-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,20 +15,18 @@ import command from './task-remove.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.TASK_REMOVE, () => { - let cli: Cli; let log: string[]; let logger: Logger; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - sinon.stub(Cli, 'promptForConfirmation').resolves(true); - commandInfo = Cli.getCommandInfo(command); + sinon.stub(cli, 'promptForConfirmation').resolves(true); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -237,8 +235,8 @@ describe(commands.TASK_REMOVE, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - const confirmationStub = sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + const confirmationStub = sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { id: "AAMkAGI3NDhlZmQzLWQxYjAtNGJjNy04NmYwLWQ0M2IzZTNlMDUwNAAuAAAAAACQ1l2jfH6VSZraktP8Z7auAQCbV93BagWITZhL3J6BMqhjAAD9pHIhAAA=", diff --git a/src/m365/todo/commands/task/task-remove.ts b/src/m365/todo/commands/task/task-remove.ts index d6599b75888..3417f316cd2 100644 --- a/src/m365/todo/commands/task/task-remove.ts +++ b/src/m365/todo/commands/task/task-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -69,7 +69,7 @@ class TodoTaskRemoveCommand extends GraphCommand { await this.removeToDoTask(args.options); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the task ${args.options.id} from list ${args.options.listId || args.options.listName}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the task ${args.options.id} from list ${args.options.listId || args.options.listName}?` }); if (result) { await this.removeToDoTask(args.options); diff --git a/src/m365/todo/commands/task/task-set.spec.ts b/src/m365/todo/commands/task/task-set.spec.ts index df72eae0dce..dc09ee18cc1 100644 --- a/src/m365/todo/commands/task/task-set.spec.ts +++ b/src/m365/todo/commands/task/task-set.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,7 +15,6 @@ import command from './task-set.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.TASK_SET, () => { - let cli: Cli; let log: string[]; let logger: Logger; let commandInfo: CommandInfo; @@ -49,13 +48,12 @@ describe(commands.TASK_SET, () => { }; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/viva/commands/connections/connections-app-create.spec.ts b/src/m365/viva/commands/connections/connections-app-create.spec.ts index 5412c021a62..6dfcf7237aa 100644 --- a/src/m365/viva/commands/connections/connections-app-create.spec.ts +++ b/src/m365/viva/commands/connections/connections-app-create.spec.ts @@ -3,7 +3,7 @@ import fs from 'fs'; import path from 'path'; import sinon from 'sinon'; import { CommandError } from '../../../../Command.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { telemetry } from '../../../../telemetry.js'; @@ -32,7 +32,7 @@ describe(commands.CONNECTIONS_APP_CREATE, () => { sinon.stub(pid, 'getProcessName').callsFake(() => ''); sinon.stub(session, 'getId').callsFake(() => ''); (command as any).archive = admZipMock; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -53,7 +53,7 @@ describe(commands.CONNECTIONS_APP_CREATE, () => { afterEach(() => { sinonUtil.restore([ fs.existsSync, - Cli.executeCommandWithOutput, + cli.executeCommandWithOutput, admZipMock.addFile, admZipMock.addLocalFile, admZipMock.writeZip @@ -74,7 +74,7 @@ describe(commands.CONNECTIONS_APP_CREATE, () => { }); it('creates app package for the specified communication site (root site)', async () => { - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async () => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async () => { return { stdout: JSON.stringify({ Configuration: 0, @@ -106,7 +106,7 @@ describe(commands.CONNECTIONS_APP_CREATE, () => { }); it('creates app package for the specified communication site (/sites)', async () => { - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async () => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async () => { return { stdout: JSON.stringify({ Configuration: 0, @@ -139,7 +139,7 @@ describe(commands.CONNECTIONS_APP_CREATE, () => { }); it('creates app package for the specified communication site (/teams + query string)', async () => { - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async () => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async () => { return { stdout: JSON.stringify({ Configuration: 0, @@ -171,7 +171,7 @@ describe(commands.CONNECTIONS_APP_CREATE, () => { }); it(`fails with an error if the specified site doesn't exist`, async () => { - sinon.stub(Cli, 'executeCommandWithOutput').rejects({ + sinon.stub(cli, 'executeCommandWithOutput').rejects({ error: '404 - FILE NOT FOUND', stderr: '404 - FILE NOT FOUND' }); @@ -193,7 +193,7 @@ describe(commands.CONNECTIONS_APP_CREATE, () => { }); it(`fails with an error if the specified site doesn't exist (debug)`, async () => { - sinon.stub(Cli, 'executeCommandWithOutput').rejects({ + sinon.stub(cli, 'executeCommandWithOutput').rejects({ error: '404 - FILE NOT FOUND', stderr: '404 - FILE NOT FOUND stderr' }); @@ -214,7 +214,7 @@ describe(commands.CONNECTIONS_APP_CREATE, () => { }); it('fails with an error if the specified site is not a communication site', async () => { - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async () => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async () => { return { stdout: JSON.stringify({ Configuration: 0, @@ -240,7 +240,7 @@ describe(commands.CONNECTIONS_APP_CREATE, () => { }); it(`fails with an error if creating the zip file failed`, async () => { - sinon.stub(Cli, 'executeCommandWithOutput').callsFake(async () => { + sinon.stub(cli, 'executeCommandWithOutput').callsFake(async () => { return { stdout: JSON.stringify({ Configuration: 0, diff --git a/src/m365/viva/commands/connections/connections-app-create.ts b/src/m365/viva/commands/connections/connections-app-create.ts index 5fa0a1b4d97..ab0e0ab9cad 100644 --- a/src/m365/viva/commands/connections/connections-app-create.ts +++ b/src/m365/viva/commands/connections/connections-app-create.ts @@ -2,10 +2,10 @@ import AdmZip from 'adm-zip'; import fs from 'fs'; import path from 'path'; import { v4 } from 'uuid'; -import { Cli, CommandOutput } from '../../../../cli/Cli.js'; -import { Logger } from '../../../../cli/Logger.js'; import Command from '../../../../Command.js'; import GlobalOptions from '../../../../GlobalOptions.js'; +import { Logger } from '../../../../cli/Logger.js'; +import { CommandOutput, cli } from '../../../../cli/cli.js'; import AnonymousCommand from '../../../base/AnonymousCommand.js'; import spoWebGetCommand, { Options as SpoWebGetCommandOptions } from '../../../spo/commands/web/web-get.js'; import commands from '../../commands.js'; @@ -230,7 +230,7 @@ class VivaConnectionsAppCreateCommand extends AnonymousCommand { debug: this.debug, verbose: this.verbose }; - return Cli.executeCommandWithOutput(spoWebGetCommand as Command, { options: { ...options, _: [] } }); + return cli.executeCommandWithOutput(spoWebGetCommand as Command, { options: { ...options, _: [] } }); } } diff --git a/src/m365/yammer/commands/group/group-list.spec.ts b/src/m365/yammer/commands/group/group-list.spec.ts index ec56a159d6d..9425ad2fce6 100644 --- a/src/m365/yammer/commands/group/group-list.spec.ts +++ b/src/m365/yammer/commands/group/group-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -189,7 +189,7 @@ describe(commands.GROUP_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/yammer/commands/group/group-user-add.spec.ts b/src/m365/yammer/commands/group/group-user-add.spec.ts index 438a33979d7..d43ab84ae06 100644 --- a/src/m365/yammer/commands/group/group-user-add.spec.ts +++ b/src/m365/yammer/commands/group/group-user-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -24,7 +24,7 @@ describe(commands.GROUP_USER_ADD, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -45,7 +45,7 @@ describe(commands.GROUP_USER_ADD, () => { afterEach(() => { sinonUtil.restore([ request.post, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -97,7 +97,7 @@ describe(commands.GROUP_USER_ADD, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { debug: true, groupId: 1231231 } }); diff --git a/src/m365/yammer/commands/group/group-user-remove.spec.ts b/src/m365/yammer/commands/group/group-user-remove.spec.ts index de48c2fb2d3..4dd0791feae 100644 --- a/src/m365/yammer/commands/group/group-user-remove.spec.ts +++ b/src/m365/yammer/commands/group/group-user-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -25,7 +25,7 @@ describe(commands.GROUP_USER_REMOVE, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -47,7 +47,7 @@ describe(commands.GROUP_USER_REMOVE, () => { afterEach(() => { sinonUtil.restore([ request.delete, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -73,7 +73,7 @@ describe(commands.GROUP_USER_REMOVE, () => { }; }); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await assert.rejects(command.action(logger, { options: {} } as any), new CommandError('An error has occurred.')); }); @@ -101,7 +101,7 @@ describe(commands.GROUP_USER_REMOVE, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { debug: true, groupId: 1231231 } }); @@ -129,7 +129,7 @@ describe(commands.GROUP_USER_REMOVE, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { debug: true, groupId: 1231231, id: 989998789 } }); @@ -137,7 +137,7 @@ describe(commands.GROUP_USER_REMOVE, () => { }); it('prompts before removal when confirmation argument not passed', async () => { - const promptStub: sinon.SinonStub = sinon.stub(Cli, 'promptForConfirmation').resolves(false); + const promptStub: sinon.SinonStub = sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { groupId: 1231231, id: 989998789 } }); @@ -145,7 +145,7 @@ describe(commands.GROUP_USER_REMOVE, () => { }); it('aborts execution when prompt not confirmed', async () => { - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { groupId: 1231231, id: 989998789 } }); diff --git a/src/m365/yammer/commands/group/group-user-remove.ts b/src/m365/yammer/commands/group/group-user-remove.ts index 06d1bd2fb3b..8c9dd7afc7b 100644 --- a/src/m365/yammer/commands/group/group-user-remove.ts +++ b/src/m365/yammer/commands/group/group-user-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -81,7 +81,7 @@ class YammerGroupUserRemoveCommand extends YammerCommand { messagePrompt = `Are you sure you want to remove the user ${args.options.id} from the group ${args.options.groupId}?`; } - const result = await Cli.promptForConfirmation({ message: messagePrompt }); + const result = await cli.promptForConfirmation({ message: messagePrompt }); if (result) { await this.executeRemoveAction(args.options); diff --git a/src/m365/yammer/commands/message/message-add.spec.ts b/src/m365/yammer/commands/message/message-add.spec.ts index 420f8026482..18493ef8676 100644 --- a/src/m365/yammer/commands/message/message-add.spec.ts +++ b/src/m365/yammer/commands/message/message-add.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -26,7 +26,7 @@ describe(commands.MESSAGE_ADD, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/yammer/commands/message/message-get.spec.ts b/src/m365/yammer/commands/message/message-get.spec.ts index de8c420007c..6ceaa4c9889 100644 --- a/src/m365/yammer/commands/message/message-get.spec.ts +++ b/src/m365/yammer/commands/message/message-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,7 +15,6 @@ import command from './message-get.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.MESSAGE_GET, () => { - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; @@ -24,13 +23,12 @@ describe(commands.MESSAGE_GET, () => { const secondMessage: any = { "sender_id": 1496550640, "replied_to_id": "", "id": 10123190123124, "thread_id": "", group_id: "", created_at: "2019/09/08 07:53:18 +0000", "content_excerpt": "message2" }; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/yammer/commands/message/message-like-set.spec.ts b/src/m365/yammer/commands/message/message-like-set.spec.ts index 4b83aeefac9..a20c4a68582 100644 --- a/src/m365/yammer/commands/message/message-like-set.spec.ts +++ b/src/m365/yammer/commands/message/message-like-set.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -26,7 +26,7 @@ describe(commands.MESSAGE_LIKE_SET, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -43,7 +43,7 @@ describe(commands.MESSAGE_LIKE_SET, () => { } }; requests = []; - sinon.stub(Cli, 'promptForConfirmation').callsFake(() => { + sinon.stub(cli, 'promptForConfirmation').callsFake(() => { promptIssued = true; return Promise.resolve(false); }); @@ -55,7 +55,7 @@ describe(commands.MESSAGE_LIKE_SET, () => { sinonUtil.restore([ request.delete, request.post, - Cli.promptForConfirmation + cli.promptForConfirmation ]); }); @@ -172,16 +172,16 @@ describe(commands.MESSAGE_LIKE_SET, () => { throw 'Invalid request'; }); - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { debug: true, messageId: 1231231, enable: false } }); assert(requestDeleteStub.called); }); it('Aborts execution when enabled set to false and confirmation is not given', async () => { - sinonUtil.restore(Cli.promptForConfirmation); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinonUtil.restore(cli.promptForConfirmation); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { messageId: 1231231, enable: false } }); assert(requests.length === 0); diff --git a/src/m365/yammer/commands/message/message-like-set.ts b/src/m365/yammer/commands/message/message-like-set.ts index 05a7bd6dad2..c10d99cd7c2 100644 --- a/src/m365/yammer/commands/message/message-like-set.ts +++ b/src/m365/yammer/commands/message/message-like-set.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -81,7 +81,7 @@ class YammerMessageLikeSetCommand extends YammerCommand { else { const message = `Are you sure you want to unlike message ${args.options.messageId}?`; - const result = await Cli.promptForConfirmation({ message }); + const result = await cli.promptForConfirmation({ message }); if (result) { await this.executeLikeAction(args.options); diff --git a/src/m365/yammer/commands/message/message-list.spec.ts b/src/m365/yammer/commands/message/message-list.spec.ts index a20a4033486..10f01c06669 100644 --- a/src/m365/yammer/commands/message/message-list.spec.ts +++ b/src/m365/yammer/commands/message/message-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -45,7 +45,7 @@ describe(commands.MESSAGE_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/yammer/commands/message/message-remove.spec.ts b/src/m365/yammer/commands/message/message-remove.spec.ts index 7ca68435641..85318e0dd6d 100644 --- a/src/m365/yammer/commands/message/message-remove.spec.ts +++ b/src/m365/yammer/commands/message/message-remove.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -15,19 +15,17 @@ import command from './message-remove.js'; import { settingsNames } from '../../../../settingsNames.js'; describe(commands.MESSAGE_REMOVE, () => { - let cli: Cli; let log: string[]; let logger: Logger; let commandInfo: CommandInfo; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { @@ -49,7 +47,7 @@ describe(commands.MESSAGE_REMOVE, () => { afterEach(() => { sinonUtil.restore([ request.delete, - Cli.promptForConfirmation, + cli.promptForConfirmation, cli.getSettingWithDefaultValue ]); }); @@ -104,7 +102,7 @@ describe(commands.MESSAGE_REMOVE, () => { } throw 'Invalid request'; }); - sinon.stub(Cli, 'promptForConfirmation').resolves(true); + sinon.stub(cli, 'promptForConfirmation').resolves(true); await command.action(logger, { options: { debug: true, id: 10123190123123, force: false } }); assert.strictEqual(requestDeleteStub.lastCall.args[0].url, 'https://www.yammer.com/api/v1/messages/10123190123123.json'); @@ -118,7 +116,7 @@ describe(commands.MESSAGE_REMOVE, () => { throw 'Invalid request'; }); - sinon.stub(Cli, 'promptForConfirmation').resolves(false); + sinon.stub(cli, 'promptForConfirmation').resolves(false); await command.action(logger, { options: { debug: true, id: 10123190123123, force: false } }); assert(requestDeleteStub.notCalled); diff --git a/src/m365/yammer/commands/message/message-remove.ts b/src/m365/yammer/commands/message/message-remove.ts index cca745bdca0..698dce46c48 100644 --- a/src/m365/yammer/commands/message/message-remove.ts +++ b/src/m365/yammer/commands/message/message-remove.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { Logger } from '../../../../cli/Logger.js'; import GlobalOptions from '../../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../../request.js'; @@ -67,7 +67,7 @@ class YammerMessageRemoveCommand extends YammerCommand { await this.removeMessage(args.options); } else { - const result = await Cli.promptForConfirmation({ message: `Are you sure you want to remove the Yammer message ${args.options.id}?` }); + const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the Yammer message ${args.options.id}?` }); if (result) { await this.removeMessage(args.options); diff --git a/src/m365/yammer/commands/network/network-list.spec.ts b/src/m365/yammer/commands/network/network-list.spec.ts index 6798f067f4f..7fc1b8d8bf2 100644 --- a/src/m365/yammer/commands/network/network-list.spec.ts +++ b/src/m365/yammer/commands/network/network-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -25,7 +25,7 @@ describe(commands.NETWORK_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/yammer/commands/user/user-get.spec.ts b/src/m365/yammer/commands/user/user-get.spec.ts index d3f253ed482..1e4c586b865 100644 --- a/src/m365/yammer/commands/user/user-get.spec.ts +++ b/src/m365/yammer/commands/user/user-get.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -25,7 +25,7 @@ describe(commands.USER_GET, () => { sinon.stub(pid, 'getProcessName').callsFake(() => ''); sinon.stub(session, 'getId').callsFake(() => ''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/yammer/commands/user/user-list.spec.ts b/src/m365/yammer/commands/user/user-list.spec.ts index af7d134b0d0..29f7da4c65a 100644 --- a/src/m365/yammer/commands/user/user-list.spec.ts +++ b/src/m365/yammer/commands/user/user-list.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../../Auth.js'; -import { Cli } from '../../../../cli/Cli.js'; +import { cli } from '../../../../cli/cli.js'; import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; @@ -25,7 +25,7 @@ describe(commands.USER_LIST, () => { sinon.stub(pid, 'getProcessName').callsFake(() => ''); sinon.stub(session, 'getId').callsFake(() => ''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/yammer/commands/yammer-search.spec.ts b/src/m365/yammer/commands/yammer-search.spec.ts index 2f45f37b289..267ae812593 100644 --- a/src/m365/yammer/commands/yammer-search.spec.ts +++ b/src/m365/yammer/commands/yammer-search.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import auth from '../../../Auth.js'; -import { Cli } from '../../../cli/Cli.js'; +import { cli } from '../../../cli/cli.js'; import { CommandInfo } from '../../../cli/CommandInfo.js'; import { Logger } from '../../../cli/Logger.js'; import { CommandError } from '../../../Command.js'; @@ -15,7 +15,6 @@ import command from './yammer-search.js'; import { settingsNames } from '../../../settingsNames.js'; describe(commands.SEARCH, () => { - let cli: Cli; let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; @@ -203,13 +202,12 @@ describe(commands.SEARCH, () => { }; before(() => { - cli = Cli.getInstance(); sinon.stub(auth, 'restoreAuth').resolves(); sinon.stub(telemetry, 'trackEvent').returns(); sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.service.connected = true; - commandInfo = Cli.getCommandInfo(command); + commandInfo = cli.getCommandInfo(command); }); beforeEach(() => { diff --git a/src/m365/yammer/commands/yammer-search.ts b/src/m365/yammer/commands/yammer-search.ts index a69f548c93b..b6046e7ccd4 100644 --- a/src/m365/yammer/commands/yammer-search.ts +++ b/src/m365/yammer/commands/yammer-search.ts @@ -1,4 +1,4 @@ -import { Cli } from '../../../cli/Cli.js'; +import { cli } from '../../../cli/cli.js'; import { Logger } from '../../../cli/Logger.js'; import GlobalOptions from '../../../GlobalOptions.js'; import request, { CliRequestOptions } from '../../../request.js'; @@ -254,7 +254,7 @@ class YammerSearchCommand extends YammerCommand { try { await this.getAllItems(logger, args, 1); - if (!Cli.shouldTrimOutput(args.options.output)) { + if (!cli.shouldTrimOutput(args.options.output)) { await logger.log( { summary: this.summary, diff --git a/src/telemetry.spec.ts b/src/telemetry.spec.ts index 700ee7b8793..7fe0e6e0466 100644 --- a/src/telemetry.spec.ts +++ b/src/telemetry.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import child_process from 'child_process'; import sinon from 'sinon'; -import { Cli } from "./cli/Cli.js"; +import { cli } from "./cli/cli.js"; import { settingsNames } from './settingsNames.js'; import { telemetry } from './telemetry.js'; import { pid } from './utils/pid.js'; @@ -30,7 +30,7 @@ describe('Telemetry', () => { afterEach(() => { sinonUtil.restore([ - Cli.getInstance().getSettingWithDefaultValue, + cli.getSettingWithDefaultValue, (telemetry as any).trackTelemetry ]); spawnStub.resetHistory(); @@ -42,7 +42,7 @@ describe('Telemetry', () => { }); it(`doesn't log an event when disableTelemetry is set`, () => { - sinon.stub(Cli.getInstance(), 'getSettingWithDefaultValue').callsFake((settingName, defaultValue) => { + sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((settingName, defaultValue) => { if (settingName === settingsNames.disableTelemetry) { return true; } @@ -54,7 +54,7 @@ describe('Telemetry', () => { }); it('logs an event when disableTelemetry is not set', () => { - sinon.stub(Cli.getInstance(), 'getSettingWithDefaultValue').callsFake((settingName, defaultValue) => { + sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((settingName, defaultValue) => { if (settingName === settingsNames.disableTelemetry) { return false; } @@ -66,7 +66,7 @@ describe('Telemetry', () => { }); it(`logs an empty string for shell if it couldn't resolve shell process name`, () => { - sinon.stub(Cli.getInstance(), 'getSettingWithDefaultValue').callsFake((settingName, defaultValue) => { + sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((settingName, defaultValue) => { if (settingName === settingsNames.disableTelemetry) { return false; } @@ -81,7 +81,7 @@ describe('Telemetry', () => { }); it(`silently handles exception if an error occurs while spawning telemetry runner`, (done) => { - sinon.stub(Cli.getInstance(), 'getSettingWithDefaultValue').callsFake((settingName, defaultValue) => { + sinon.stub(cli, 'getSettingWithDefaultValue').callsFake((settingName, defaultValue) => { if (settingName === settingsNames.disableTelemetry) { return false; } diff --git a/src/telemetry.ts b/src/telemetry.ts index b309a39b7ae..c04a1ac8faa 100644 --- a/src/telemetry.ts +++ b/src/telemetry.ts @@ -1,7 +1,7 @@ import child_process from 'child_process'; import path from 'path'; import url from 'url'; -import { Cli } from './cli/Cli.js'; +import { cli } from './cli/cli.js'; import { settingsNames } from './settingsNames.js'; import { pid } from './utils/pid.js'; import { session } from './utils/session.js'; @@ -27,7 +27,7 @@ function trackTelemetry(object: any): void { export const telemetry = { trackEvent: (commandName: string, properties: any): void => { - if (Cli.getInstance().getSettingWithDefaultValue(settingsNames.disableTelemetry, false)) { + if (cli.getSettingWithDefaultValue(settingsNames.disableTelemetry, false)) { return; } diff --git a/src/utils/aadAdministrativeUnit.spec.ts b/src/utils/aadAdministrativeUnit.spec.ts index 9209924025c..ebd450ca877 100644 --- a/src/utils/aadAdministrativeUnit.spec.ts +++ b/src/utils/aadAdministrativeUnit.spec.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import sinon from 'sinon'; import { aadAdministrativeUnit } from './aadAdministrativeUnit.js'; -import { Cli } from "../cli/Cli.js"; +import { cli } from "../cli/cli.js"; import request from "../request.js"; import { sinonUtil } from "./sinonUtil.js"; import { formatting } from './formatting.js'; @@ -15,17 +15,11 @@ describe('utils/aadAdministrativeUnit', () => { const secondDisplayName = 'Asian Division'; const invalidDisplayName = 'European'; - let cli: Cli; - - before(() => { - cli = Cli.getInstance(); - }); - afterEach(() => { sinonUtil.restore([ request.get, cli.getSettingWithDefaultValue, - Cli.handleMultipleResultsFound + cli.handleMultipleResultsFound ]); }); @@ -63,7 +57,7 @@ describe('utils/aadAdministrativeUnit', () => { return 'Invalid Request'; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves({ id: administrativeUnitId, displayName: displayName }); + sinon.stub(cli, 'handleMultipleResultsFound').resolves({ id: administrativeUnitId, displayName: displayName }); const actual = await aadAdministrativeUnit.getAdministrativeUnitByDisplayName(displayName); assert.deepStrictEqual(actual, { id: administrativeUnitId, displayName: displayName }); diff --git a/src/utils/aadAdministrativeUnit.ts b/src/utils/aadAdministrativeUnit.ts index 3a506c86791..78acf76a02f 100644 --- a/src/utils/aadAdministrativeUnit.ts +++ b/src/utils/aadAdministrativeUnit.ts @@ -1,7 +1,7 @@ import { AdministrativeUnit } from "@microsoft/microsoft-graph-types"; import { odata } from "./odata.js"; import { formatting } from "./formatting.js"; -import { Cli } from "../cli/Cli.js"; +import { cli } from "../cli/cli.js"; const graphResource = 'https://graph.microsoft.com'; @@ -21,7 +21,7 @@ export const aadAdministrativeUnit = { if (administrativeUnits.length > 1) { const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', administrativeUnits); - const selectedAdministrativeUnit = await Cli.handleMultipleResultsFound(`Multiple administrative units with name '${displayName}' found.`, resultAsKeyValuePair); + const selectedAdministrativeUnit = await cli.handleMultipleResultsFound(`Multiple administrative units with name '${displayName}' found.`, resultAsKeyValuePair); return selectedAdministrativeUnit; } diff --git a/src/utils/aadGroup.spec.ts b/src/utils/aadGroup.spec.ts index 08cca1dca47..4ecf7859e0e 100644 --- a/src/utils/aadGroup.spec.ts +++ b/src/utils/aadGroup.spec.ts @@ -5,7 +5,7 @@ import { aadGroup } from './aadGroup.js'; import { formatting } from './formatting.js'; import { sinonUtil } from "./sinonUtil.js"; import { Logger } from '../cli/Logger.js'; -import { Cli } from '../cli/Cli.js'; +import { cli } from '../cli/cli.js'; import { settingsNames } from '../settingsNames.js'; const validGroupName = 'Group name'; @@ -17,14 +17,9 @@ const singleGroupResponse = { }; describe('utils/aadGroup', () => { - let cli: Cli; let logger: Logger; let log: string[]; - before(() => { - cli = Cli.getInstance(); - }); - beforeEach(() => { log = []; logger = { @@ -45,7 +40,7 @@ describe('utils/aadGroup', () => { request.get, request.patch, cli.getSettingWithDefaultValue, - Cli.handleMultipleResultsFound + cli.handleMultipleResultsFound ]); }); @@ -184,7 +179,7 @@ describe('utils/aadGroup', () => { return 'Invalid Request'; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves({ id: validGroupId }); + sinon.stub(cli, 'handleMultipleResultsFound').resolves({ id: validGroupId }); const actual = await aadGroup.getGroupIdByDisplayName(validGroupName); assert.deepStrictEqual(actual, validGroupId); @@ -230,7 +225,7 @@ describe('utils/aadGroup', () => { return 'Invalid Request'; }); - sinon.stub(Cli, 'handleMultipleResultsFound').resolves({ id: validGroupId, displayName: validGroupName }); + sinon.stub(cli, 'handleMultipleResultsFound').resolves({ id: validGroupId, displayName: validGroupName }); const actual = await aadGroup.getGroupByDisplayName(validGroupName); assert.deepStrictEqual(actual, singleGroupResponse); diff --git a/src/utils/aadGroup.ts b/src/utils/aadGroup.ts index b2c54a3b464..43dd3018359 100644 --- a/src/utils/aadGroup.ts +++ b/src/utils/aadGroup.ts @@ -3,7 +3,7 @@ import request, { CliRequestOptions } from "../request.js"; import { formatting } from "./formatting.js"; import { odata } from "./odata.js"; import { Logger } from '../cli/Logger.js'; -import { Cli } from '../cli/Cli.js'; +import { cli } from '../cli/cli.js'; const graphResource = 'https://graph.microsoft.com'; @@ -47,7 +47,7 @@ export const aadGroup = { if (groups.length > 1) { const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', groups); - return await Cli.handleMultipleResultsFound(`Multiple groups with name '${displayName}' found.`, resultAsKeyValuePair); + return await cli.handleMultipleResultsFound(`Multiple groups with name '${displayName}' found.`, resultAsKeyValuePair); } return groups[0]; @@ -68,7 +68,7 @@ export const aadGroup = { if (groups.length > 1) { const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', groups); - const result = await Cli.handleMultipleResultsFound(`Multiple groups with name '${displayName}' found.`, resultAsKeyValuePair); + const result = await cli.handleMultipleResultsFound(`Multiple groups with name '${displayName}' found.`, resultAsKeyValuePair); return result.id!; } diff --git a/src/utils/prompt.ts b/src/utils/prompt.ts index 0ed82975ef1..bdc801fe9ee 100644 --- a/src/utils/prompt.ts +++ b/src/utils/prompt.ts @@ -1,6 +1,6 @@ import { Separator } from '@inquirer/core'; import { settingsNames } from '../settingsNames.js'; -import { Cli } from '../cli/Cli.js'; +import { cli } from '../cli/cli.js'; let inquirerInput: typeof import('@inquirer/input') | undefined; let inquirerConfirm: typeof import('@inquirer/confirm') | undefined; @@ -34,37 +34,34 @@ export interface SelectionConfig { } export const prompt = { - /* c8 ignore next 10 */ + /* c8 ignore next 9 */ async forInput(config: InputConfig): Promise { if (!inquirerInput) { inquirerInput = await import('@inquirer/input'); } - const cli = Cli.getInstance(); const errorOutput: string = cli.getSettingWithDefaultValue(settingsNames.errorOutput, 'stderr'); return inquirerInput.default(config, { output: errorOutput === 'stderr' ? process.stderr : process.stdout }); }, - /* c8 ignore next 10 */ + /* c8 ignore next 9 */ async forConfirmation(config: ConfirmationConfig): Promise { if (!inquirerConfirm) { inquirerConfirm = await import('@inquirer/confirm'); } - const cli = Cli.getInstance(); const errorOutput: string = cli.getSettingWithDefaultValue(settingsNames.errorOutput, 'stderr'); return inquirerConfirm.default(config, { output: errorOutput === 'stderr' ? process.stderr : process.stdout }); }, - /* c8 ignore next 15 */ + /* c8 ignore next 14 */ async forSelection(config: SelectionConfig): Promise { if (!inquirerSelect) { inquirerSelect = await import('@inquirer/select'); } - const cli = Cli.getInstance(); const errorOutput: string = cli.getSettingWithDefaultValue(settingsNames.errorOutput, 'stderr'); const promptPageSizeCap: number = cli.getSettingWithDefaultValue(settingsNames.promptListPageSize, 7);