Is your feature request related to a problem? Please describe the problem.
Follow-up of #3345.
All of Microsoft.Graph.* depends on Microsoft.Graph.Authentication, weighing in at a whopping 42.1 MB on-disk with version 2.28.
Serverless environments frequently limit customers' space to deploy dependencies in. The PowerShell runtime+MS.Graph.Authentication is over 200MB of dependencies without having written any code, which poses several challenges for hosting/deployment.
There's been a lot of good discourse about the size of this SDK over the years (#692 #2475 #2516) - these have focused on either:
- The total size of the SDK, across all modules
- (MSGraph isn't that much bigger than
AWS.Tools or Az)
- Individual modules hitting landmark size limits
- (Not everyone uses those specific modules)
Even outside those two scenarios, module size is still a problem.
Comparing 3 separate auto-generated families of PowerShell modules:
| Metric |
Az |
AWS.Tools |
Microsoft.Graph |
| Total Module Count |
93 |
410 |
47 |
| Total Installed Size1 |
514 |
737 |
1060 |
| Median Module Size |
3.1 |
1.2 |
9.5 |
| Core2 Module Size |
28.6 |
16.7 |
42.1 |
| Core : Total Module Size |
5.6% |
2.3% |
3.9% |
| "Average" Install3 Size |
31.7 |
17.9 |
51.6 |
1: All sizes in MB
2: Az.Accounts, AWS.Tools.Common, Microsoft.Graph.Authentication
3: Core module, plus single non-core (represented by median)
One "average" MSGraph module (with dependencies) is ~30% the size of the entire PowerShell Runtime on Linux. (~172MB)
Currently, Microsoft.Graph.Authentication has ~25MB of JSON used for Find-MgGraphCommand and Find-MgGraphPermission. These cmdlets appear to be for human-focused discovery/investigation and not required for authentication/API calls. Moving these off the critical dependency-path could save a ton of space for non-interactive scenarios.
Describe the solution you'd like.
TL;DR: Reduce .Authentication footprint to strict requirements for Invoke-MgGraphRequest or the other Microsoft.Graph.* modules. Move Find-MgGraph* to a separate module for interactive discovery.
Some options (neither exhaustive nor mutually exclusive) for making this work could look like:
- Move
Find-MgGraphCommand and Find-MgGraphPermission to a separate module and add the module as a dependency of Microsoft.Graph.
- Replace
Find-MgGraphCommand and Find-MgGraphPermission in Microsoft.Graph.Authentication with stubs to call corresponding commands in Microsoft.Graph.CommandDiscovery, without setting explicit dependency relationships.
- De-couple
Find-MgGraph* entirely from the rest of .Authentication.
- Split
Microsoft.Graph.Authentication into two modules (.Common and .CommandDiscovery, perhaps)
- Update
.Authentication depend on .Common and .CommandDiscovery
- Update other child modules to depend on
.Common
Additional context?
No response
Is your feature request related to a problem? Please describe the problem.
Follow-up of #3345.
All of
Microsoft.Graph.*depends onMicrosoft.Graph.Authentication, weighing in at a whopping 42.1 MB on-disk with version 2.28.Serverless environments frequently limit customers' space to deploy dependencies in. The PowerShell runtime+MS.Graph.Authentication is over 200MB of dependencies without having written any code, which poses several challenges for hosting/deployment.
There's been a lot of good discourse about the size of this SDK over the years (#692 #2475 #2516) - these have focused on either:
AWS.ToolsorAz)Even outside those two scenarios, module size is still a problem.
Comparing 3 separate auto-generated families of PowerShell modules:
AzAWS.ToolsMicrosoft.Graph1: All sizes in MB
2:
Az.Accounts,AWS.Tools.Common,Microsoft.Graph.Authentication3: Core module, plus single non-core (represented by median)
One "average" MSGraph module (with dependencies) is ~30% the size of the entire PowerShell Runtime on Linux. (~172MB)
Currently,
Microsoft.Graph.Authenticationhas ~25MB of JSON used forFind-MgGraphCommandandFind-MgGraphPermission. These cmdlets appear to be for human-focused discovery/investigation and not required for authentication/API calls. Moving these off the critical dependency-path could save a ton of space for non-interactive scenarios.Describe the solution you'd like.
TL;DR: Reduce
.Authenticationfootprint to strict requirements forInvoke-MgGraphRequestor the otherMicrosoft.Graph.*modules. MoveFind-MgGraph*to a separate module for interactive discovery.Some options (neither exhaustive nor mutually exclusive) for making this work could look like:
Find-MgGraphCommandandFind-MgGraphPermissionto a separate module and add the module as a dependency ofMicrosoft.Graph.Find-MgGraphCommandandFind-MgGraphPermissioninMicrosoft.Graph.Authenticationwith stubs to call corresponding commands inMicrosoft.Graph.CommandDiscovery, without setting explicit dependency relationships.Find-MgGraph*entirely from the rest of.Authentication.Microsoft.Graph.Authenticationinto two modules (.Commonand.CommandDiscovery, perhaps).Authenticationdepend on.Commonand.CommandDiscovery.CommonAdditional context?
No response