-
-
Notifications
You must be signed in to change notification settings - Fork 824
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix: link merging #6964
base: master
Are you sure you want to change the base?
fix: link merging #6964
Conversation
|
WalkthroughThis pull request enhances directive handling by introducing several utility functions specifically for the Changes
Sequence Diagram(s)sequenceDiagram
participant MD as mergeDirectives
participant MM as isMatchingDirective
participant DA as isDirectiveDistinctByArguments
participant L as {isLinkDirective & getLinkDirectiveURL}
MD->>MM: Compare two directives
MM->>DA: Check directive distinctness (for @link)
DA->>L: Validate @link type and retrieve URL
L-->>DA: Return URL or undefined
DA-->>MM: Return distinctness result
MM-->>MD: Return match validation
sequenceDiagram
participant S1 as Schema1
participant S2 as Schema2
participant MD as mergeDirectives
participant R as Merged Schema
S1->>MD: Provide schema with @link (imports: composeDirective, external, foo)
S2->>MD: Provide schema with @link (unique URL & import)
MD->>R: Merge directives using enhanced checks
R-->>S1: Output merged schema with combined directives
Poem
Warning There were issues while running some tools. Please review the errors and either fix the tool’s configuration or disable the tool if it’s a critical failure. 🔧 ESLint
packages/merge/tests/merge-typedefs.spec.tsOops! Something went wrong! :( ESLint: 9.20.1 ESLint couldn't find an eslint.config.(js|mjs|cjs) file. From ESLint v9.0.0, the default configuration file is now eslint.config.js. https://eslint.org/docs/latest/use/configure/migration-guide If you still have problems after following the migration guide, please stop by packages/merge/src/typedefs-mergers/directives.tsOops! Something went wrong! :( ESLint: 9.20.1 ESLint couldn't find an eslint.config.(js|mjs|cjs) file. From ESLint v9.0.0, the default configuration file is now eslint.config.js. https://eslint.org/docs/latest/use/configure/migration-guide If you still have problems after following the migration guide, please stop by ✨ Finishing Touches
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
@@ -8,11 +8,35 @@ import { | |||
import { isSome } from '@graphql-tools/utils'; | |||
import { Config } from './merge-typedefs.js'; | |||
|
|||
const isLinkDirective = (directive: DirectiveNode): boolean => directive.name.value === 'link'; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
not sure if we already have AST narrowing fns. Further, I didn't see a LinkDirective
type, which woulda been nice. Not going to add anything like that without discussion :)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (2)
packages/merge/src/typedefs-mergers/directives.ts (2)
13-18
: Consider handling non-string URL arguments
Currently, the function only checks for aStringValue
. If there's a scenario whereurl
could be of a different type, the function might silently ignore it.
20-29
: Potential extension to handle arguments for other directives
Right now, non-@link
directives are never considered distinct by their arguments. If future requirements demand argument-based distinctness checks across all directives, consider generalizing this logic.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (2)
packages/merge/src/typedefs-mergers/directives.ts
(2 hunks)packages/merge/tests/merge-typedefs.spec.ts
(1 hunks)
⏰ Context from checks skipped due to timeout of 90000ms (9)
- GitHub Check: Unit Test on Node 18 (windows-latest) and GraphQL v16
- GitHub Check: Unit Test on Node 23 (ubuntu-latest) and GraphQL v16
- GitHub Check: Unit Test on Node 23 (ubuntu-latest) and GraphQL v15
- GitHub Check: Unit Test on Node 22 (ubuntu-latest) and GraphQL v16
- GitHub Check: Unit Test on Node 22 (ubuntu-latest) and GraphQL v15
- GitHub Check: Unit Test on Node 20 (ubuntu-latest) and GraphQL v16
- GitHub Check: Unit Test on Node 20 (ubuntu-latest) and GraphQL v15
- GitHub Check: Unit Test on Node 18 (ubuntu-latest) and GraphQL v16
- GitHub Check: Unit Test on Node 18 (ubuntu-latest) and GraphQL v15
🔇 Additional comments (5)
packages/merge/src/typedefs-mergers/directives.ts (4)
11-12
: Straightforward name check for@link
directive
Implementation is concise and does what it says—no issues identified.
30-30
: Simple, readable matching predicate
This helper improves clarity by centralizing the directive name comparison.
36-39
: Consistent logic for directive existence check
By deferring arguments-based distinctness toisDirectiveDistinctByArguments
, this function cleanly separates concerns.
125-125
: Confirm handling of multiple matching directives
findIndex
returns the first matching directive. If the schema contains multiple directives with the same name, confirm that this logic is appropriate.packages/merge/tests/merge-typedefs.spec.ts (1)
1707-1738
: Excellent validation of@link
directive merging
This test thoroughly ensures that identical directives are merged while distinct ones (i.e., those with different URLs) are preserved.
🚨 IMPORTANT: Please do not create a Pull Request without creating an issue first.
Any change needs to be discussed before proceeding. Failure to do so may result in the rejection of
the pull request.
Description
Link directives are not correctly merged correctly when the URL matches.
Related # (issue)
#6929 (comment)
Type of change
Please delete options that are not relevant.
expected)
Screenshots/Sandbox (if appropriate/relevant):
Adding links to sandbox or providing screenshots can help us understand more about this PR and take
action on it as appropriate
How Has This Been Tested?
Please describe the tests that you ran to verify your changes. Provide instructions so we can
reproduce. Please also list any relevant details for your test configuration
Test Environment:
@graphql-tools/...
:Checklist:
CONTRIBUTING doc and the
style guidelines of this project
Further comments
If this is a relatively large or complex change, kick off the discussion by explaining why you chose
the solution you did and what alternatives you considered, etc...
Summary by CodeRabbit