npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

gatsby-plugin-generate-types

v0.1.0

Published

Generate Typescript types for Gatsby Page and Template Components

Downloads

6

Readme

gatsby-plugin-generate-types

Experimental gatsby plugin that generate typescript types for pages / templates with graphql data. Designed to work well for VSCode users without actually making your project typescript.

It works by generating a schema.json with the method from gatsby-plugin-extract-schema. It then runs apollo codegen insidegatsby develop/gatsby build.

How to use

Install

yarn add gatsby-plugin-generate-types

Edit gatsby-config.js

module.exports = {
  plugins: ["gatsby-plugin-generate-types"]
};

or, if you want to generate types as part of productio builds

module.exports = {
  plugins: [
    {
      resolve: "gatsby-plugin-generate-types",
      options: {
        inProduction: true
      }
    }
  ]
};

Add type imports

Type files will be generated in a _types folder relative to your source files.

The package includes a helper page Type which takes the imported graphql type as an argument. You can use it in javascript files for function page / template components by adding just one line like this:

/** @type {import("gatsby-plugin-generate-types").page<import("./_types/IndexQuery").IndexQuery>} */
const IndexPage = ({ data }) => {
  //...
};

export const pageQuery = graphql`
  query IndexQuery {
    ...
  }
`;

Use Apollo VSCode

The apollo VSCode extension, combined with this plugin (or just gatsby-plugin-extract-schema) can provide validation and autocomplete for all your page and static queries.

Install the extension from the Marketplace and add the following apollo.config.js to your project:

module.exports = {
  client: {
    tagName: "graphql",
    service: {
      name: "your-gatsby-site",
      localSchemaFile: "./schema.json"
    }
  }
};

gitignore generated files

It's a matter of taste wether you want to commit the generated types and schema to git or not. If you don't, add this to your .gitignore

schema.json
_types

Roadmap

  • generate directly usable page component types
  • maybe: add type annotations directly to files
  • don't run apollo codegen as shell command but use apollo-codegen-typescript package and maybe rely on gatsby watching

Changelog

1.0

  • skip running in production build by default, unless inProduction option is specified

0.01

HI