GithubHelp home page GithubHelp logo

chrskerr / esbuild-graphql-loader Goto Github PK

View Code? Open in Web Editor NEW

This project forked from luckycatfactory/esbuild-graphql-loader

0.0 0.0 0.0 37.29 MB

An esbuild Plugin Allowing for GraphQL File imports

JavaScript 32.55% TypeScript 67.45%

esbuild-graphql-loader's Introduction

esbuild-graphql-loader

npm version

This is a zero-dependency esbuild plugin that allows for the importing of GraphQL files.

Requirements

This packages requires at least the following for esbuild:

>=0.8.26

Usage

To install this package:

npm install --save @luckycatfactory/esbuild-graphql-loader esbuild graphql-tag
yarn add @luckycatfactory/esbuild-graphql-loader esbuild graphql-tag

Then, use the plugin like so:

import { build } from 'esbuild';
import graphqlLoaderPlugin from '@luckycatfactory/esbuild-graphql-loader';

build({
  ...otherOptions,
  plugins: [graphqlLoaderPlugin()],
}).catch(() => {
  process.exit(1);
});

With this in place, you should now be able to import GraphQL like so:

import schema from './schema.graphql';

// Do whatever with the schema DocumentNode...

Also, all operations are named exports, so you can do things like this:

import {
  QueryA,
  QueryB,
  MutationA,
  SubscriptionA,
} from './my-operations.graphql';

// Do whatever with those operations...

GraphQL File Imports

You can import files from within GraphQL files by using imports in comments like so:

#import ./user.graphql

type Post {
  author: User!
  name: String!
}

Valid import comments are prefixed either with #import or # import and have a suffix of a path relative from the GraphQL file's path.

Recommendations

Optimize Your DocumentNodes

You can shave a bit off your bundle size by optimizing your DocumentNode instances with tools like @graphql-tools/optimize through the mapDocumentNode configuration option.

Configuration

Some configuration options are available at plugin instantiation.

filterRegex

This is the regex used to determine the files that are matches as GraphQL files. By default, this regex is /\.graphql$/. Here is how you can override that value:

import { build } from 'esbuild';
import graphqlLoaderPlugin from '@luckycatfactory/esbuild-graphql-loader';

build({
  ...otherOptions,
  plugins: [graphqlLoaderPlugin({ filterRegex: /\.gql$/ })],
}).catch(() => {
  process.exit(1);
});

mapDocumentNode

This is an optional function that you can supply to map all DocumentNode instances before they're resolved. An example of this would be:

import { build } from 'esbuild';
import graphqlLoaderPlugin from '@luckycatfactory/esbuild-graphql-loader';
import { optimizeDocumentNode } from '@graphql-tools/optimize';

build({
  ...otherOptions,
  plugins: [
    graphqlLoaderPlugin({
      mapDocumentNode: (documentNode: DocumentNode) =>
        optimizeDocumentNode(documentNode),
    }),
  ],
}).catch(() => {
  process.exit(1);
});

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.