Skip to content
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

Add SWC plugin imports after "use client" directive (#9445) #9603

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

victorandree
Copy link

Description

When adding a "use client" directive to a module, it must come before any other expressions. Instead of always inserting import declarations as the first item, the SWC plugin now checks if the first expression in a module's body is a "use client" directive and inserts its imports after it, if that's the case.

Related: #9445

Type of change

  • Bug fix (non-breaking change which fixes an issue)

How Has This Been Tested?

I've tested this by using it with a Next.js app directory project where I defined a query in the same module as a "use client" directive; verifying that it would not build before but would with this fix.

I have not updated the unit tests for the Rust plugin, to verify that imports are inserted after the "use client" directive. Should probably add that.

Test Environment:

  • OS: macOS Ventura 13.5
  • @graphql-codegen/cli: ^5.0.0
  • @graphql-codegen/client-preset: ^4.1.0
  • NodeJS: v20.5.1

Checklist:

  • I have followed the CONTRIBUTING doc and the style guidelines of this project
  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas
  • I have made corresponding changes to the documentation
  • My changes generate no new warnings
  • I have added tests that prove my fix is effective or that my feature works
  • New and existing unit tests pass locally with my changes
  • Any dependent changes have been merged and published in downstream modules

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...

When adding a "use client" directive to a module, it must come before
any other expressions. Instead of always inserting import declarations
as the first item, the SWC plugin now checks if the first expression in
a module's body is a "use client" directive and inserts its imports
after it, if that's the case.

Closes: dotansimha#9445
@changeset-bot
Copy link

changeset-bot bot commented Aug 18, 2023

⚠️ No Changeset found

Latest commit: a84403c

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

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.

1 participant