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

fix circular imports, add test script for circular imports #1450

Merged
merged 12 commits into from
Mar 20, 2025

Conversation

rgon
Copy link
Contributor

@rgon rgon commented Mar 15, 2025

Best practice. Related: #1304 (see comment below)

This PR fixes several circular dependencies that surfaced when testing, and a few that I found manually. The majority were caused by calling import {obj} from './index' from within files that were exported by that same index.

`madge --circular` (ignoring circular type imports):
✖ Found 12 circular dependencies!
  1. src/houdini/packages/houdini-react/src/plugin/index.ts > src/houdini/packages/houdini-react/src/plugin/vite.tsx
  2. src/houdini/packages/houdini-react/src/runtime/routing/Router.tsx > src/houdini/packages/houdini-react/src/runtime/hooks/useDocumentHandle.ts
  3. src/houdini/packages/houdini-react/src/runtime/hooks/useDocumentStore.ts > src/houdini/packages/houdini-react/src/runtime/routing/index.ts > src/houdini/packages/houdini-react/src/runtime/routing/Router.tsx
  4. src/houdini/packages/houdini-svelte/src/plugin/kit.ts > src/houdini/packages/houdini-svelte/src/plugin/extract.ts
  5. src/houdini/packages/houdini-svelte/src/plugin/kit.ts > src/houdini/packages/houdini-svelte/src/plugin/extractLoadFunction.ts
  6. src/houdini/packages/houdini-svelte/src/plugin/index.ts > src/houdini/packages/houdini-svelte/src/plugin/fsPatch.ts
  7. src/houdini/packages/houdini/src/lib/index.ts > src/houdini/packages/houdini/src/lib/config.ts > src/houdini/packages/houdini/src/lib/router/index.ts > src/houdini/packages/houdini/src/lib/router/conventions.ts
  8. src/houdini/packages/houdini/src/lib/index.ts > src/houdini/packages/houdini/src/lib/config.ts > src/houdini/packages/houdini/src/lib/router/index.ts > src/houdini/packages/houdini/src/lib/router/manifest.ts
  9. src/houdini/packages/houdini/src/lib/index.ts > src/houdini/packages/houdini/src/lib/config.ts > src/houdini/packages/houdini/src/lib/router/index.ts > src/houdini/packages/houdini/src/lib/router/server.ts
  10. src/houdini/packages/houdini/src/lib/index.ts > src/houdini/packages/houdini/src/lib/detectTools.ts
  11. src/houdini/packages/houdini/src/lib/index.ts > src/houdini/packages/houdini/src/lib/typescript.ts
  12. src/houdini/packages/houdini/src/codegen/generators/runtime/index.ts > src/houdini/packages/houdini/src/codegen/generators/runtime/pluginRuntime.ts

Since the erratic [1] nature of circular dependencies throws Vite HMR [2] and other quite hard-to-debug errors with cryptic [3] messages, IMHO it is best practice to fix them, even if the issue rarely comes up on large projects (as raised in #1304 (comment)) (note that this erratic nature means I cannot confirm yet if its fixed!). EDIT: it does make vite HMR subjectively more stable, but is otherwise unrelated to my comment.

As the 'adding tests' section prescribes, I have added the pnpm check-circular-deps command on the root, requiring and configuring madge, for the task. It should probable be wise to run this on the Github Actions workflow on PRs, to prevent future issues.


To help everyone out, please make sure your PR does the following:

  • Update the first line to point to the ticket that this PR fixes
  • Add a message that clearly describes the fix
  • If applicable, add a test that would fail without this fix: pnpm check-circular-deps
  • Make sure the unit and integration tests pass locally with pnpm run tests and cd integration && pnpm run tests -> please note that master currently has 2 failed tests @ packages/houdini-react/src/plugin/codegen/entries/entries.test.ts (that was an issue on my part)
  • Includes a changeset if your fix affects the user with pnpm changeset

Gonzalo Ruiz added 8 commits March 15, 2025 15:39
houdini-svelte/src/plugin/kit.ts -> index.ts (not caught by madge)
houdini-svelte/src/plugin/kit.ts -> houdini-svelte/src/plugin/extract.ts
houdini-svelte/src/plugin/kit.ts -> houdini-svelte/src/plugin/extractLoadFunction.ts
houdini-svelte/src/plugin/index.ts > houdini-svelte/src/plugin/fsPatch.ts
houdini-svelte/src/plugin/kit.ts -> houdini-svelte/src/plugin/extractLoadFunction.ts
houdini/src/lib/index.ts -> houdini/src/lib/detectTools.ts
houdini/src/lib/index.ts -> houdini/src/lib/typescript.ts
houdini/src/codegen/generators/runtime/index.ts -> houdini/src/lib/pluginRuntime.ts
houdini/src/lib/index.ts -> houdini/src/lib/router/server.ts
houdini/src/lib/index.ts -> houdini/src/lib/router/manifest.ts
houdini/src/lib/index.ts -> houdini/src/lib/router/conventions.ts
houdini-react/src/plugin/index.ts -> houdini-react/src/plugin/vite.tsx
houdini-react/src/runtime/routing/Router.tsx -> houdini-react/src/runtime/hooks/useDocumentHandle.ts
houdini-react/src/runtime/hooks/useDocumentStore.ts -> index -> houdini-react/src/runtime/routing/Router.tsx
Copy link

changeset-bot bot commented Mar 15, 2025

🦋 Changeset detected

Latest commit: b57412e

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 8 packages
Name Type
houdini-plugin-svelte-global-stores Patch
houdini-svelte Patch
houdini-react Patch
houdini Patch
houdini-adapter-auto Patch
houdini-adapter-cloudflare Patch
houdini-adapter-node Patch
houdini-adapter-static Patch

Not sure what this means? Click here to learn what changesets are.

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

Copy link

netlify bot commented Mar 15, 2025

Deploy Preview for houdini-docs-next canceled.

Name Link
🔨 Latest commit b57412e
🔍 Latest deploy log https://app.netlify.com/sites/houdini-docs-next/deploys/67daa9732461dc0008b7a424

Copy link

netlify bot commented Mar 15, 2025

Deploy Preview for houdinigraphql canceled.

Name Link
🔨 Latest commit b57412e
🔍 Latest deploy log https://app.netlify.com/sites/houdinigraphql/deploys/67daa97393d64b00084d262a

@AlecAivazis
Copy link
Collaborator

Thanks so much for digging into this! I appreciate the work

@rgon
Copy link
Contributor Author

rgon commented Mar 19, 2025

Sorry about the formatting issues, I was totally unaware of the checks. Submitted a PR to remind other new contributors to check as well!

@AlecAivazis
Copy link
Collaborator

Oh no problem. Thanks for taking care of them

@AlecAivazis AlecAivazis merged commit 09bef6c into HoudiniGraphql:main Mar 20, 2025
15 checks passed
@github-actions github-actions bot mentioned this pull request Mar 20, 2025
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.

2 participants