Skip to content

feat(wrapper-generator): add deltaLink-aware pagination - #3744

Open
Joywambui-maina wants to merge 4 commits into
feat/wrapper-delta-generatorfrom
feat/wrapper-delta
Open

feat(wrapper-generator): add deltaLink-aware pagination#3744
Joywambui-maina wants to merge 4 commits into
feat/wrapper-delta-generatorfrom
feat/wrapper-delta

Conversation

@Joywambui-maina

Copy link
Copy Markdown

Changes proposed:

-Give delta operations their own emit shape: items enumerate to the pipeline, -All follows @odata.nextLink through the change set, and the terminal @odata.deltaLink is published to -DeltaLinkVariable (alias DLV) — the same idiom the published SDK uses for -CountVariable
-Clear that variable at entry, so a run that fails or stops early cannot leave the previous run's link readable and silently resume from the wrong point
-Handle every terminal state explicitly: nextLink continues only under -All; deltaLink stops and publishes; neither stops and publishes nothing; both is refused rather than guessed at
-Merge the delta(token='…') form into its parameterless sibling as a Resume parameter set reached by -DeltaLink. The published SDK folds these into the canonical command rather than shipping them separately — no oracle row exists for any token form. -DeltaLink works on all 67 delta operations; a token argument exists on only 5
-Derive the pairing from route shape, never a list of names, and fail generation naming the route if a resume form is orphaned, ambiguous, or duplicated
-Record the contract and its evidence in tools/WrapperGenerator/docs/edge-cases/delta-edge-cases.md
-Fixes #3742

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates the WrapperGenerator to treat Microsoft Graph delta() operations as a first-class, deltaLink-aware paged shape, aligning generated cmdlets with expected delta semantics (page following under -All, terminal deltaLink publication, and a unified resume experience).

Changes:

  • Adds delta operation detection/pairing in the generator and emits delta cmdlets via a dedicated delta template.
  • Updates generated delta cmdlets to enumerate items to the pipeline, follow @odata.nextLink under -All, and publish terminal @odata.deltaLink via -DeltaLinkVariable (alias DLV), with a -DeltaLink resume parameter set.
  • Adds tests and documentation describing delta-specific edge cases and the resulting contract.

Reviewed changes

Copilot reviewed 77 out of 77 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
tools/WrapperGenerator/PowerShellWrapperGenerationService.cs Detects and groups delta routes, then emits them via a dedicated delta shape.
tools/WrapperGenerator/docs/edge-cases/delta-edge-cases.md Documents the delta cmdlet contract, pairing rules, and terminal-state handling.
tools/WrapperGenerator.Tests/EmitterTests.cs Adds regression tests (“pins”) for delta resume, paging, variable publication, and terminal-state behavior.
src/Users/wrapper/v1.0/Cmdlets/GetMgUserTodoListDelta.g.cs Generated delta cmdlet now supports resume, -All paging, and deltaLink publication; outputs enumerated items.
src/Users.Functions/wrapper/v1.0/Cmdlets/GetMgUserDelta.g.cs Generated delta cmdlet now supports resume, -All paging, and deltaLink publication; outputs enumerated items.
src/Teams/wrapper/v1.0/Cmdlets/GetMgTeamPrimaryChannelMessageDelta.g.cs Generated delta cmdlet now supports resume, -All paging, and deltaLink publication; outputs enumerated items.
src/Teams/wrapper/v1.0/Cmdlets/GetMgGroupTeamPrimaryChannelMessageDelta.g.cs Generated delta cmdlet now supports resume, -All paging, and deltaLink publication; outputs enumerated items.
src/Teams/wrapper/v1.0/Cmdlets/GetMgChatMessageDelta.g.cs Generated delta cmdlet now supports resume, -All paging, and deltaLink publication; outputs enumerated items.
src/Sites/wrapper/v1.0/Cmdlets/GetMgSiteListItemDeltaWithToken.g.cs Removes the token-form cmdlet in favor of folding resume into the canonical delta cmdlet.
src/Sites/wrapper/v1.0/Cmdlets/GetMgSiteDelta.g.cs Generated delta cmdlet now supports resume, -All paging, and deltaLink publication; outputs enumerated items.
src/Sites/wrapper/v1.0/Cmdlets/GetMgGroupSiteListItemDeltaWithToken.g.cs Removes the token-form cmdlet in favor of folding resume into the canonical delta cmdlet.
src/Sites/wrapper/v1.0/Cmdlets/GetMgGroupSiteDelta.g.cs Generated delta cmdlet now supports resume, -All paging, and deltaLink publication; outputs enumerated items.
src/PersonalContacts/wrapper/v1.0/Cmdlets/GetMgUserContactFolderDelta.g.cs Generated delta cmdlet now supports resume, -All paging, and deltaLink publication; outputs enumerated items.
src/PersonalContacts/wrapper/v1.0/Cmdlets/GetMgUserContactDelta.g.cs Generated delta cmdlet now supports resume, -All paging, and deltaLink publication; outputs enumerated items.
src/Mail/wrapper/v1.0/Cmdlets/GetMgUserMessageDelta.g.cs Generated delta cmdlet now supports resume, -All paging, and deltaLink publication; outputs enumerated items.
src/Mail/wrapper/v1.0/Cmdlets/GetMgUserMailFolderDelta.g.cs Generated delta cmdlet now supports resume, -All paging, and deltaLink publication; outputs enumerated items.
src/Identity.SignIns/wrapper/v1.0/Cmdlets/GetMgOauth2PermissionGrantDelta.g.cs Generated delta cmdlet now supports resume, -All paging, and deltaLink publication; outputs enumerated items.
src/Identity.DirectoryManagement/wrapper/v1.0/Cmdlets/GetMgDirectoryRoleTemplateDelta.g.cs Generated delta cmdlet now supports resume, -All paging, and deltaLink publication; outputs enumerated items.
src/Identity.DirectoryManagement/wrapper/v1.0/Cmdlets/GetMgDirectoryRoleDelta.g.cs Generated delta cmdlet now supports resume, -All paging, and deltaLink publication; outputs enumerated items.
src/Identity.DirectoryManagement/wrapper/v1.0/Cmdlets/GetMgDirectoryAdministrativeUnitDelta.g.cs Generated delta cmdlet now supports resume, -All paging, and deltaLink publication; outputs enumerated items.
src/Identity.DirectoryManagement/wrapper/v1.0/Cmdlets/GetMgDeviceDelta.g.cs Generated delta cmdlet now supports resume, -All paging, and deltaLink publication; outputs enumerated items.
src/Identity.DirectoryManagement/wrapper/v1.0/Cmdlets/GetMgContractDelta.g.cs Generated delta cmdlet now supports resume, -All paging, and deltaLink publication; outputs enumerated items.
src/Identity.DirectoryManagement/wrapper/v1.0/Cmdlets/GetMgContactDelta.g.cs Generated delta cmdlet now supports resume, -All paging, and deltaLink publication; outputs enumerated items.
src/Groups/wrapper/v1.0/Cmdlets/GetMgGroupSettingTemplateDelta.g.cs Generated delta cmdlet now supports resume, -All paging, and deltaLink publication; outputs enumerated items.
src/Groups/wrapper/v1.0/Cmdlets/GetMgGroupDelta.g.cs Generated delta cmdlet now supports resume, -All paging, and deltaLink publication; outputs enumerated items.
src/Files/wrapper/v1.0/Cmdlets/GetMgShareListItemDeltaWithToken.g.cs Removes the token-form cmdlet in favor of folding resume into the canonical delta cmdlet.
src/Files/wrapper/v1.0/Cmdlets/GetMgShareListItemDelta.g.cs Generated delta cmdlet now supports resume, -All paging, and deltaLink publication; outputs enumerated items.
src/Files/wrapper/v1.0/Cmdlets/GetMgDriveListItemDeltaWithToken.g.cs Removes the token-form cmdlet in favor of folding resume into the canonical delta cmdlet.
src/Files/wrapper/v1.0/Cmdlets/GetMgDriveListItemDelta.g.cs Generated delta cmdlet now supports resume, -All paging, and deltaLink publication; outputs enumerated items.
src/Files/wrapper/v1.0/Cmdlets/GetMgDriveItemDeltaWithToken.g.cs Removes the token-form cmdlet in favor of folding resume into the canonical delta cmdlet.
src/Files/wrapper/v1.0/Cmdlets/GetMgDriveItemDelta.g.cs Generated delta cmdlet now supports resume, -All paging, and deltaLink publication; outputs enumerated items.
src/Education/wrapper/v1.0/Cmdlets/GetMgEducationUserDelta.g.cs Generated delta cmdlet now supports resume, -All paging, and deltaLink publication; outputs enumerated items.
src/Education/wrapper/v1.0/Cmdlets/GetMgEducationUserAssignmentDelta.g.cs Generated delta cmdlet now supports resume, -All paging, and deltaLink publication; outputs enumerated items.
src/Education/wrapper/v1.0/Cmdlets/GetMgEducationSchoolDelta.g.cs Generated delta cmdlet now supports resume, -All paging, and deltaLink publication; outputs enumerated items.
src/Education/wrapper/v1.0/Cmdlets/GetMgEducationMeAssignmentDelta.g.cs Generated delta cmdlet now supports resume, -All paging, and deltaLink publication; outputs enumerated items.
src/Education/wrapper/v1.0/Cmdlets/GetMgEducationMeAssignmentCategoryDelta.g.cs Generated delta cmdlet now supports resume, -All paging, and deltaLink publication; outputs enumerated items.
src/Education/wrapper/v1.0/Cmdlets/GetMgEducationClassDelta.g.cs Generated delta cmdlet now supports resume, -All paging, and deltaLink publication; outputs enumerated items.
src/Education/wrapper/v1.0/Cmdlets/GetMgEducationClassAssignmentDelta.g.cs Generated delta cmdlet now supports resume, -All paging, and deltaLink publication; outputs enumerated items.
src/Education/wrapper/v1.0/Cmdlets/GetMgEducationClassAssignmentCategoryDelta.g.cs Generated delta cmdlet now supports resume, -All paging, and deltaLink publication; outputs enumerated items.
src/DirectoryObjects/wrapper/v1.0/Cmdlets/GetMgDirectoryObjectDelta.g.cs Generated delta cmdlet now supports resume, -All paging, and deltaLink publication; outputs enumerated items.
src/CloudCommunications/wrapper/v1.0/Cmdlets/GetMgCommunicationOnlineMeetingTranscriptDelta.g.cs Generated delta cmdlet now supports resume, -All paging, and deltaLink publication; outputs enumerated items.
src/CloudCommunications/wrapper/v1.0/Cmdlets/GetMgCommunicationOnlineMeetingRecordingDelta.g.cs Generated delta cmdlet now supports resume, -All paging, and deltaLink publication; outputs enumerated items.
src/CloudCommunications/wrapper/v1.0/Cmdlets/GetMgCommunicationAdhocCallTranscriptDelta.g.cs Generated delta cmdlet now supports resume, -All paging, and deltaLink publication; outputs enumerated items.
src/CloudCommunications/wrapper/v1.0/Cmdlets/GetMgCommunicationAdhocCallRecordingDelta.g.cs Generated delta cmdlet now supports resume, -All paging, and deltaLink publication; outputs enumerated items.
src/Calendar/wrapper/v1.0/Cmdlets/GetMgUserEventDelta.g.cs Generated delta cmdlet now supports resume, -All paging, and deltaLink publication; outputs enumerated items.
src/Calendar/wrapper/v1.0/Cmdlets/GetMgGroupEventDelta.g.cs Generated delta cmdlet now supports resume, -All paging, and deltaLink publication; outputs enumerated items.
src/Applications/wrapper/v1.0/Cmdlets/GetMgServicePrincipalDelta.g.cs Generated delta cmdlet now supports resume, -All paging, and deltaLink publication; outputs enumerated items.
src/Applications/wrapper/v1.0/Cmdlets/GetMgApplicationDelta.g.cs Generated delta cmdlet now supports resume, -All paging, and deltaLink publication; outputs enumerated items.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread src/Users.Functions/wrapper/v1.0/Cmdlets/GetMgUserDelta.g.cs
Comment thread src/Users.Functions/wrapper/v1.0/Cmdlets/GetMgUserDelta.g.cs
…tion

Output of the delta emitter change, with no hand edits: 67 delta commands
gain -All, -DeltaLink and -DeltaLinkVariable, and the five delta(token=...)
commands disappear, folded into their parameterless siblings as a resume
parameter set. Proven against the sealed pre-change baseline: operation
inventory 11,719 to 11,714 with exactly five removals and no additions, name
parity matched unchanged at 9,548 with no-oracle down by the same five,
body-binding oracle 0 failures, and the package gate PASS.
@Joywambui-maina
Joywambui-maina force-pushed the feat/wrapper-pagination branch from bc7f1e6 to c8a833a Compare August 25, 2026 19:38
@Joywambui-maina
Joywambui-maina changed the base branch from feat/wrapper-pagination to feat/wrapper-delta-generator August 25, 2026 19:38
…ce root

-DeltaLink is caller input handed to kiota's WithUrl, which sends the URL
verbatim and ignores every other parameter, and the auth header is attached
afterwards - so an off-tenant link received the caller's Graph token.
ValidateContinuationUrl now requires an absolute URL whose scheme and host
match the request adapter's own BaseUrl, so national clouds keep working with
no host list to maintain. Regenerates the 67 delta cmdlets that call it.
A delta cmdlet writes the envelope's items to the pipeline and never the
envelope itself, but OutputType named the response type - so help, IntelliSense
and anything reading OutputType described an object the cmdlet never emits.
The item model is resolved from the response's "value" schema through the same
helpers the list cmdlets already use, and falls back to the response type when
it cannot be resolved so the attribute is never left describing nothing.
…tted text

The -DeltaLink validation changed the emitted WithUrl call without updating the
test that pins it. The terminal-state test's catch assert is pinned to the
cancellation-aware filter, which this branch only emits once the pagination
generator change merges beneath it - so that one test is red on this branch
alone and green in the assembled stack, verified by a full-stack simulation.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants