# bun-macro-relay This lets you use Facebook's [Relay](https://github.com/facebook/relay) framework (GraphQL) with bun. Specifically, this implements the bun equivalent of [`babel-plugin-relay`](https://github.com/facebook/relay/tree/main/packages/babel-plugin-relay). It parses `graphql` queries, but does not compile/save them to your artifacts directory, you still need [`relay-compiler`](https://github.com/facebook/relay/tree/main/packages/relay-compiler) for that. ## Installation ``` npm install -D bun-macro-relay ``` ## Usage With three lines in your project's `bunfig.toml`, `react-relay` works automatically with bun. Add this to your `bunfig.toml`: ```toml [macros] react-relay = {graphql = "bun-macro-relay"} relay-runtime = {graphql = "bun-macro-relay"} ``` This tells bun to automatically pretend every import statement to `react-relay` with a `graphql` import came from `macro:bun-macro-relay/bun-macro-relay.tsx`. Effectively, it applies this diff in-memory so you can use `bun-macro-relay` without making other changes to your code: ```js // bun will remap this import: import { graphql } from "react-relay"; // To this: import { graphql } from "macro:bun-macro-relay/bun-macro-relay.tsx"; ``` You can still use the other imports from `react-relay`. It only affects the `graphql` export from `react-relay`. ```js // bun will remap this import: import { graphql, useFragment } from "react-relay"; // To this: import { graphql } from "macro:bun-macro-relay/bun-macro-relay.tsx"; import { useFragment } from "react-relay"; ``` Ultimately, the `graphql` import should no longer appear in transpiled output: ```js import { useFragment } from "react-relay"; ``` If you'd rather not modify your project's `package.json`, you can do this instead: ```js import { graphql } from "macro:bun-macro-relay"; ``` ## Configuration For performance reasons, `bun-macro-relay` does not read `relay-config`. That means your Relay configuration will _not_ be honored. Fortunately, the only configuration option relevant to `bun-macro-relay` is modifying the artifacts directory (the directory where `relay-compiler` saves compiled `.graphql` files). You can still change that with `bun-macro-relay`. ### Changing the artifacts directory Pass the `BUN_MACRO_RELAY_ARTIFACT_DIRECTORY` environment variable to bun: ```bash BUN_MACRO_RELAY_ARTIFACT_DIRECTORY="__generated__" bun ``` You can also save it in `.env`, `.env.local`, or `.env.dev`. The path should be relative to the directory containing the project's package.json without a leading `.` or `./`. You can also pass it an absolute path. ## What does `bun-macro-relay` actually do? 1. Parses GraphQL (using the same `graphql` npm package as babel-plugin-relay) 2. Injects an import to the correct compiled GraphQL file in the Relay artifacts directory 3. Replaces the use of the `graphql` template literal with the `default` import from the compiled GraphQL file. Here's an example. Input: ```tsx import { graphql, useLazyLoadQuery } from "react-relay"; const Tweet = () => { const data = useLazyLoadQuery( graphql` query TweetQuery { ...Tweet_tweet } `, {} ); if (!data.tweet) return null; return ; }; ``` Output: ```jsx import TweetQuery from "../__generated__/TweetQuery.graphql.ts"; import { useLazyLoadQuery } from "react-relay"; const Tweet = () => { const data = useLazyLoadQuery(TweetQuery, {}); if (!data.tweet) return null; return ; }; ``` bun automatically transpiles JSX & TypeScript, but that's not relevant to this example. ### What does `bun-macro-relay` not do? 1. This first version doesn't hash the contents of the `graphql` query, so it won't detect when the GraphQL query is out of sync with the compiled `.graphql` file in development. However, if you're running Relay's CLI, bun's hot module reloading will automatically update. As long as you run Relay's CLI, it shouldn't matter. This will be fixed eventually (have to expose a native MD5 hashing function) 2. Compile GraphQL. You still need to use `relay-compiler` for that. dylan/fix-error-inlining Unnamed repository; edit this file 'description' to name the repository.
aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2023-03-01chore(builtins): add process builtin gen'd codeGravatar Derrick Farris 1-1/+24
2023-03-01feat(stdio): add some `tty.WriteStream` methodsGravatar Derrick Farris 1-0/+23
2023-03-01fix bun server segfault with abortsignal (#2261)Gravatar Ciro Spaciari 3-133/+79
* removed redundant tests, fixed server segfault * fix onRejectStream, safer unassign signal * fix abort Bun.serve signal.addEventListener on async * move ctx.signal null check up * keep original behavior of streams onAborted
2023-03-01fix(node:http): match Node `http.request()` GET/HEAD w/ body (#2262)Gravatar Derrick Farris 2-2/+31
2023-03-01Add a test for https request in node:httpGravatar Jarred Sumner 2-17/+28
2023-03-01fix(node:http/https): fix passing `URL` objs to `http.request`(#2253) (#2258)Gravatar Derrick Farris 2-43/+63
* fix(node:http/https): fix passing `URL` objs to `http.request`(#2253) * fix(node:http): hoist debug env var * fix(node:http): make body `undefined` when falsy
2023-03-01Revert "Update clap (#2238)"Gravatar Jarred Sumner 16-290/+1840
This reverts commit 7b9a17f9d7106ffd8e553a5192aba60d14ea5e9c.
2023-03-01Revert "Add `-D`, `--dev` flags for bun install (#2240)"Gravatar Jarred Sumner 1-9/+9
This reverts commit ec20fae57f96a835562b154730957ecc4015ba31.
2023-03-01Use GitHub action ID instead of SHA for test workflowGravatar Ashcon Partovi 1-1/+1
2023-03-01avoids segfault after aborted onReject in Bun.serve streams (#2256)Gravatar Ciro Spaciari 1-7/+8
* avoids segfault after aborted on reject * silence err on handleRejectStream after aborted
2023-03-01Run tests in CI for bun-linux-aarch64Gravatar Ashcon Partovi 2-1/+30
2023-03-01Revert spawnSync changeGravatar Jarred Sumner 1-1/+2
cc @FireTheFox
2023-03-01Update bindings.zigGravatar Jarred Sumner 1-1/+3
2023-03-01fix deinit behavior when connection is aborted using ResponseStream and ↵Gravatar Ciro Spaciari 3-34/+174
abort event behavior (#2252) * fix deinit behavior when connection is aborted using ResponseStream * fix abort handling on stream, and get better tests * avoid segfault by trying to deinit 2x when aborted * make tests more reliable * more reliable onResolveStream after aborted * add test case for not firing the abort signal
2023-03-01fix Bun.file.arrayBuffer() segmentation fault on empty file #2248 (#2249)Gravatar Ciro Spaciari 3-7/+23
* fix Bun.file.arrayBuffer() segmentation fault on empty file #2248 * cleanner this.iotask check
2023-03-01Fix async in sqliteGravatar Colin McDonnell 1-2/+2
2023-02-28Forces a specific libdir for c-ares (#2241)Gravatar Justin Whear 1-1/+5
The c-ares build expects lib/libcares.a to exist after cmake, but on my system it was being generated in lib64. This simply sets the cmake variable so that the target ends up where we expect.
2023-02-28Make Bun.gc(true) more aggressiveGravatar Jarred Sumner 1-0/+3
2023-02-28Expose JSC::Options via `BUN_JSC_` prefixGravatar Jarred Sumner 6-8/+47
Example usage: BUN_JSC_logGC=1 bun file.js
2023-02-28fixupGravatar Jarred Sumner 1-1/+1
2023-02-28Fix typecheckGravatar Colin McDonnell 2-1/+4
2023-02-28Fix incorrect Bun version in docs (#2236)Gravatar Derrick Farris 1-1/+1
2023-02-28just some comments fix (#2237)Gravatar Ciro Spaciari 1-4/+2
2023-02-28Add `-D`, `--dev` flags for bun install (#2240)Gravatar Justin Whear 1-9/+9
* remove vendored clap * Update to latest zig-clap Major changes: * Instead of vendoring zig-clap and adding changes, this uses Hejsil/zig-clap directly as a submodule * `cli.zig` and related files have been updated to use new API (no more `flag()` or `option()`) * A workaround for the Run and Auto commands has been implemented that allows us to use the official upstream Minor change: * `-i` now has the long option `--install-fallback`; I didn't spend much time thinking about this name, so suggestions weclome. * add --development and --optional to bun install * Add support for `-D`, `--dev` in bun install, fix `--save`
2023-02-28Document punningGravatar Colin McDonnell 1-1/+18