# graphql-tag-pluck

> Pluck graphql-tag template literals

Latest version **0.8.7** (published 2019-11-03) · MIT license · 0 weekly downloads

## Install

```sh
npm install graphql-tag-pluck
pnpm add graphql-tag-pluck
yarn add graphql-tag-pluck
bun add graphql-tag-pluck
```

## Health

**Score 30/100 (F)** — status: abandoned.

Positive: has types; esm support; no vulnerabilities; high quality score.

Warnings: low downloads; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.8.7 |
| Published | 2019-11-03 |
| First published | 2018-11-21 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Dependencies | 4 |
| Unpacked size | 106.9 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 25 |
| Maintainers | ardatan, dab0mb, dotansimha, kamilkisiela, urigo |

## Links

- npm: https://www.npmjs.com/package/graphql-tag-pluck
- Repository: https://github.com/DAB0mB/graphql-tag-pluck
- Homepage: https://github.com/DAB0mB/graphql-tag-pluck#readme
- Issues: https://github.com/DAB0mB/graphql-tag-pluck/issues
- npm.io page: https://npm.io/package/graphql-tag-pluck

## Dependencies (4)

- [@babel/types](https://npm.io/package/@babel/types.md) ^7.4.4
- [@babel/parser](https://npm.io/package/@babel/parser.md) ^7.4.4
- [@babel/traverse](https://npm.io/package/@babel/traverse.md) ^7.4.4
- [source-map-support](https://npm.io/package/source-map-support.md) ^0.5.12

## Recent versions

- 0.8.7 (latest) — 2019-11-03
- 0.8.6 — 2019-10-15
- 0.8.5 — 2019-09-22
- 0.8.4 — 2019-08-06
- 0.8.3 — 2019-07-02
- 0.8.2 — 2019-06-18
- 0.8.1 — 2019-04-30
- 0.8.0 — 2019-03-25
- 0.7.0 — 2019-03-07
- 0.6.0 — 2019-02-27
- 0.5.0 — 2019-01-12
- 0.4.4 — 2018-12-19
- 0.4.3 — 2018-12-19
- 0.4.2 — 2018-12-18
- 0.4.1 — 2018-12-17
- … 12 more at https://npm.io/package/graphql-tag-pluck/versions

## README

[![CircleCI](https://circleci.com/gh/DAB0mB/graphql-tag-pluck/tree/master.svg?style=svg)](https://circleci.com/gh/DAB0mB/graphql-tag-pluck/tree/master)
[![Discord Chat](https://img.shields.io/discord/625400653321076807)](https://discord.gg/xud7bH9)

# GraphQL Tag Pluck

`graphql-tag-pluck` will take JavaScript code as an input and will pluck all template literals provided to `graphql-tag`.

**Input:**

```js
import gql from 'graphql-tag'

const fragment = gql`
  fragment Foo on FooType {
    id
  }
`

const doc = gql`
  query foo {
    foo {
      ...Foo
    }
  }

  ${fragment}
`
```

**Output:**

```graphql
fragment Foo on FooType {
  id
}

query foo {
  foo {
    ...Foo
  }
}
```

Originally created because of https://graphql-code-generator.com/.

### Usage

`graphql-tag-pluck` is installable via NPM (or Yarn):

    $ npm install graphql-tag-pluck

Once installed you can pluck GraphQL template literals using one of the following methods:

```js
import gqlPluck, {
  gqlPluckFromFile,
  gqlPluckFromCodeString,
} from 'graphql-tag-pluck'

// Returns promise
gqlPluck.fromFile(filePath, {
  useSync: true, // Optional, will return string if so
})

// Returns string
gqlPluck.fromFile.sync(filePath)

// Returns string
gqlPluck.fromCodeString(codeString, {
  fileExt: '.ts', // Optional, defaults to '.js'
})
```

Template literals leaded by magic comments will also be extracted :-)

```js
/* GraphQL */ `
  enum MessageTypes {
    text
    media
    draftjs
  }
`
```

supported file extensions are: `.js`, `.jsx`, `.ts`, `.tsx`, `.flow`, `.flow.js`, `.flow.jsx`, `.graphqls`, `.graphql`, `.gqls`, `.gql`.

### Options

I recommend you to look at the [source code](src/visitor.js) for a clearer understanding of the transformation options.

- **`gqlMagicComment`**

  The magic comment anchor to look for when parsing GraphQL strings. Defaults to `graphql`, which may be translated into `/* GraphQL */` in code.

- **`globalGqlIdentifierName`**

  Allows to use a global identifier instead of a module import.

  ```js
  // `graphql` is a global function
  export const usersQuery = graphql`
    {
      users {
        id
        name
      }
    }
  `
  ```

-  **`modules`**

    An array of packages that are responsible for exporting the GraphQL string parser function. The following modules are supported by default:

    ```js
    {
        modules: [
            {
              // import gql from 'graphql-tag'
              name: 'graphql-tag',
            },
            {
              name: 'graphql-tag.macro',
            },
            {
              // import { graphql } from 'gatsby'
              name: 'gatsby',
              identifier: 'graphql',
            },
            {
              name: 'apollo-server-express',
              identifier: 'gql'
            },
            {
              name: 'apollo-server',
              identifier: 'gql'
            },
            {
              name: 'react-relay',
              identifier: 'graphql'
            },
            {
              name: 'apollo-boost',
              identifier: 'gql'
            },
            {
              name: 'apollo-server-koa',
              identifier: 'gql',
            },
            {
              name: 'apollo-server-hapi',
              identifier: 'gql',
            },
            {
              name: 'apollo-server-fastify',
              identifier: 'gql',
            },
            {
              name: ' apollo-server-lambda',
              identifier: 'gql',
            },
            {
              name: 'apollo-server-micro',
              identifier: 'gql',
            },
            {
              name: 'apollo-server-azure-functions',
              identifier: 'gql',
            },
            {
              name: 'apollo-server-cloud-functions',
              identifier: 'gql',
            },
            {
              name: 'apollo-server-cloudflare',
              identifier: 'gql',
            }
        ]
    }
    ```

### License

MIT

---
_Source: https://npm.io/package/graphql-tag-pluck · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
