
Product
Socket Now Supports pylock.toml Files
Socket now supports pylock.toml, enabling secure, reproducible Python builds with advanced scanning and full alignment with PEP 751's new standard.
gatsby-plugin-typegen
Advanced tools
Gatsby plugin that watch your static/page queries and automatically generates TypeScript/Flow definitions.
Watch your queries and automatically generates TypeScript/Flow definitions out-of-box.
<StaticQuery>
and useStaticQuery()
in code with generated type name.gatsby-node.js
.yarn add gatsby-plugin-typegen
# or
# npm install --save gatsby-plugin-typegen
// In your gatsby-config.js
plugins: [`gatsby-plugin-typegen`]
import type { PluginOptions as TypegenPluginOptions } from 'gatsby-plugin-typegen/types';
type Plugin = (
| string
| { resolve: string, options: object }
| { resolve: `gatsby-plugin-typegen`, options: TypegenPluginOptions }
);
const plugins: Plugin[] = [
{
resolve: `gatsby-plugin-typegen`,
options: {
// ... customize options here
},
},
];
module.exports = {
plugins,
};
{
options: {
outputPath: `src/__generated__/gatsby-types.d.ts`,
},
}
{
options: {
language: `flow`,
outputPath: `src/__generated__/gatsby-types.flow.js`,
},
}
Add generated typedefs to .flowconfig
:
[lib]
./src/__generated__/gatsby-types.flow.js
{
options: {
emitSchema: {
'src/__generated__/gatsby-schema.graphql': true,
},
},
}
Visualized via GraphQL Voyager.
You can use the extracted schema file for eslint-plugin-graphql!
// gatsby-config.js
module.exports = {
plugins: [
// ...
{
resolve: `gatsby-plugin-typegen`,
options: {
emitSchema: {
'src/__generated__/gatsby-introspection.json': true,
},
},
},
],
};
// .eslintrc.js
const path = require('path');
module.exports = {
plugins: [
'graphql'
],
rules: {
'graphql/template-strings': ['error', {
env: 'relay',
tagName: 'graphql',
schemaJsonFilepath: path.resolve(__dirname, 'src/__generated__gatsby-introspection.json'),
}],
},
};
I recommend to use Apollo GraphQL extension.
(YES, even this isn't Apollo project)
Install the extension.
Configure plugin to emit schema and plugin documents.
// gatsby-config.js
module.exports = {
plugins: [
// ...
{
resolve: `gatsby-plugin-typegen`,
options: {
emitSchema: {
'src/__generated__/gatsby-introspection.json': true,
},
emitPluginDocuments: {
'src/__generated__/gatsby-plugin-documents.graphql': true,
},
},
},
],
};
Create apollo.config.js
file in project root.
// apollo.config.js
module.exports = {
client: {
name: 'your-project-name',
tagName: 'graphql',
includes: [
'./src/**/*.{ts,tsx}',
'./src/__generated__/gatsby-plugin-documents.graphql',
],
service: {
name: 'GatsbyJS',
localSchemaFile: './src/__generated__/gatsby-schema.graphql',
}
},
}
Reload VSCode & Enjoy!
The extracted schema file can also be used for ts-graphql-plugin. Using the config defined in Emit schema as GraphQL SDL:
// tsconfig.json
{
"compilerOptions": {
// ...
"plugins": [
{
"name": "ts-graphql-plugin",
"schema": "src/__generated__/gatsby-schema.graphql",
"tag": "graphql"
}
]
},
}
Checkout the full documentation of plugin options from src/types.ts
.
This plugin is a bit opinionated about how integrate GatsbyJS and codegen.
You cannot customize plugins and its options of graphql-codegen because this plugin is built for ONLY GatsbyJS.
If you wanna use codegen with other plugins (e.g. React Apollo), you can use @graphql-codegen/cli
for it.
Or gatsby-plugin-graphql-codegen gives you a more flex options.
Error: Cannot use GraphQLSchema "[object GraphQLSchema]" from another module or realm.
See https://github.com/cometkim/gatsby-plugin-typegen/issues/120
string
type for the GatsbyJS's Date
scalar by default. (#73)GatsbyTypes
).Thanks goes to these wonderful people (emoji key):
This project follows the all-contributors specification. Contributions of any kind welcome!
graphql-code-generator by @dotansimha
The where this plugin started from.
gatsby-plugin-graphql-codegen by @d4rekanguok
Has almost same goal, but little bit different how handle GraphQL documents. @d4rekanguok also makes great contribution to this plugin as well!
gatsby-plugin-extract-code by @NickyMeuleman
Gives me an idea of ESLint integraiton.
FAQs
Gatsby plugin to play with extream type-safety
The npm package gatsby-plugin-typegen receives a total of 3,731 weekly downloads. As such, gatsby-plugin-typegen popularity was classified as popular.
We found that gatsby-plugin-typegen demonstrated a not healthy version release cadence and project activity because the last version was released a year ago.Β It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Product
Socket now supports pylock.toml, enabling secure, reproducible Python builds with advanced scanning and full alignment with PEP 751's new standard.
Security News
Research
Socket uncovered two npm packages that register hidden HTTP endpoints to delete all files on command.
Research
Security News
Malicious Ruby gems typosquat Fastlane plugins to steal Telegram bot tokens, messages, and files, exploiting demand after Vietnamβs Telegram ban.