Add type-usage and reachability analysis module#71
Draft
FionaBronwen wants to merge 1 commit intofionabronwen/graphql-migrate-test-hostfrom
Draft
Add type-usage and reachability analysis module#71FionaBronwen wants to merge 1 commit intofionabronwen/graphql-migrate-test-hostfrom
FionaBronwen wants to merge 1 commit intofionabronwen/graphql-migrate-test-hostfrom
Conversation
resolveTypeUsage walks all operations in a namespace tree and tracks which types are reachable from operation parameters (Input) vs return types (Output). Handles circular references, array elements, base models, union variants, enums, and scalars. When omitUnreachableTypes is false, all declared types are marked reachable without adding spurious Input/Output flags. Includes 13 unit tests covering all reachability scenarios.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
src/type-usage.ts— determines which types should be included in the emitted GraphQL schema based upon reachability and classifies them as Input, Output, or both based on operation signaturestest/type-usage.test.ts— 15 unit testssrc/visibility-usage.ts— previous approachThis approach implements a custom usage tracker instead of the TypeSpec compiler's
resolveUsagesbecause we need to account for custom scalars.resolveUsagesskips scalars and therefore, any custom scalar in the schema would be automatically considered "unreachable".Test plan
omitUnreachableTypesbehavior