Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

gql-types-generator

Package Overview
Dependencies
Maintainers
1
Versions
48
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

gql-types-generator

``` npm install --save gql-types-generator ``` ``` yarn add gql-types-generator ```

  • 1.4.1
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
6
increased by20%
Maintainers
1
Weekly downloads
 
Created
Source

gql-types-generator

NPM version Dependencies Size Version

Package to generate TypeScript types depending on GraphQL scheme, mutations and queries.

Install

npm install --save gql-types-generator
yarn add gql-types-generator

Usage

gql-types-generator provides 2 ways of generating types:

  1. Command line interface;
  2. TypeScript / JavaScript code.

Command line interface

After installation of package is done, gql-types-generator command becomes available.

Usage: gql-types-generator [options] <schema-globs>

Options:
  --operations <globs>             globs to find queries and mutations
  --operations-file <filename>     operations file name. If passed, all operations will be placed into a single file
  --operations-wrap                wraps operations with graphql-tag, making exports from operations not strings, but graphql's DocumentNode (default: false)
  --operations-selection-separate  creates separated types for each selection set (default: false)
  --schema-file <filename>         schema file name
  --remove-description             states if description should be removed (default: false)
  --display <sort>                 how to display compiled types. Valid values are "as-is" and "default". By default, generator compiles scalars first, then enums, interfaces, inputs, unions and then types. "as-is" places types as they are placed in schema
                                   (default: "default")
  --scalars <scalars>              defines scalars types. Must be a JSON, where key is scalar name and value is its type
  --output-directory <path>        path to directory where typings will be saved
  -h, --help                       display help for command

When using CLI, each glob will be formatted as process.cwd() + glob. You can pass an array of globs using comma between them like src/schema1.graphql,src/schema2.graphql

Compilation result

Schema

Command creates a directory on passed --output-directory path, generates {schemaFile}.d.ts definition file and compiled {schemaFile}.js code.

{schemaFile}.d.ts contains all schema types and by default exports constant schema which is a text or graphql's DocumentNode representation of schema.

Each type definition consists of interface and namespace with the same name. All interface fields refers to namespace fields. So, if you want to get some Query field type you could use Query['someField'] or Query.SomeField. They return the same thing. It is recommended to use Query.*-like syntax for better experience.

If --scalars passed, compiled type of scalar will be taken from this map. If scalar not found, it will be any. Must be stringified Record<string, string | number>.

Operations

To compile operations, it is required to use --operations argument.

Library creates single file with name --operations-file if it is passed or 2 separate files d.ts and js for each command with name {operationName}{operationType} in directory on passed --output-directory. So, if operation was query getUsers { ... }, created files will be getUsersQuery.d.ts and getUsersQuery.js.]

If --operations-wrap passed, wraps each operation string with graphql-tag package making each operation not string, but graphqls Document Node. Useful when you use these operations on frontend with Apollo client.

  • d.ts exports selection and namespace with Arguments if they exist. Additionally namespace contains subselections represented as other namespaces
  • js exports representation of operation

Compiled types example

You can find library test right here. Just use command in command file and look what happens.

Programmatic control

Library provides such functions as compile, compileSchema and compileOperations to generate types.


compile(options: CompileOptions)

List of available options
NameTypeDescription
options.outputDirectorystringFull path to output directory
options.removeDescriptionboolean?Should library remove descriptions
options.displayDisplayType?How to display compiled types. Valid values are "as-is" and "default". By default, generator compiles scalars first, then enums, interfaces, inputs, unions and then types. "as-is" places types as they are placed in schema
options.schemaPathPathTypeDefines paths to schema. Watch possible values for more
options.operationsPathPathType?Defines paths to operations. Watch possible values for more
options.schemaFileNamestring?Defines schema file name. For example - schema.ts
options.operationsFileNamestring?Defines operations file name. For example - operation.ts. If passed, all operations will be placed into a single file
options.operationsWrapboolean?States of compiled types should be graphqls DocumentNode and not string
options.scalarsScalars?Defines types of scalars
Example
import {compile} from 'gql-types-generator';
import * as path from 'path';

compile({
  outputDirectory:  path.resolve(__dirname, 'compiled'),
  removeDescription: false,
  display: 'as-is',
  operationsPath: {
    glob: {
      cwd: process.cwd(),
      glob: 'gql/operations/*.graphql'
    }
  },
  schemaPath: {
    path: [
      path.resolve(__dirname, 'gql/schema/part1.graphql'),
      path.resolve(__dirname, 'gql/schema/part2.graphql'),
     ]
  },
  // Or pass schema glob
  schemaPath: {
    glob: {
      cwd: process.cwd(),
      glob: 'gql/schema/*.graphql'
    }
  },
  // Or pass schema definition directly
  schemaPath: {
    definition: 'type Query { ... }'
  },
  operationsPath: {
    path: path.resolve(__dirname, 'gql/getUsers.graphql'),
  },
  schemaFileName: 'my-compiled-schema.ts',
  operationsFileName: 'my-compiled-operations.ts',
  operationsWrap: true,
  scalars: {
    MyCustomScalar: 'Date',
    AnotherScalar: 'number | string | Record<string, string>',
    AndAnotherOneScalar: '"string literal"',
  }
});

compileSchema(options: CompileSchemaOptions)

List of available options
NameTypeDescription
options.schemastringSchema definition
options.outputDirectorystringFull path to output directory
options.fileNamestring?Output schema file name
options.displayDisplayType?How to display compiled types. Valid values are "as-is" and "default". By default, generator compiles scalars first, then enums, interfaces, inputs, unions and then types. "as-is" places types as they are placed in schema
options.removeDescriptionboolean?Should library remove descriptions
options.scalarsScalars?Defines types of scalars
Example
import {compileSchema} from 'gql-types-generator';
import * as path from 'path';

compileSchema({
  schema: 'type Query { ... }',
  outputDirectory: path.resolve(__dirname, 'gql/compiled'),
  fileName: 'my-compiled-schema.ts',
  display: 'default',
  removeDescription: true,
});

compileOperations(options: CompileOperationsOptions)

List of available options
NameTypeDescription
options.operationsstringOperations definition
options.outputDirectorystringFull path to output directory
options.schemaGraphQLSchemaBuilt GQL schema
options.schemaFileNamestringSchema file name. Used to pass in relative imports if they are required
options.removeDescriptionboolean?Should library remove descriptions
options.fileNamestring?Output operations file name. If passed, all operations will be placed into a single file
options.wrapWithTagboolean?States of compiled types should be graphqls DocumentNode and not string
Example
import {compileOperations} from 'gql-types-generator';
import * as path from 'path';

compileOperations({
  operations: 'query getUser() { ... } mutation register() { ... }',
  outputDirectory: path.resolve(__dirname, 'gql/compiled'),
  // We can get this value via compileSchema
  schema: gqlSchema,
  schemaFileName: 'my-compiled-schema.ts',
  removeDescription: true,
  fileName: 'my-compiled-operations.ts',
  wrapWithTag: false,
});

Keywords

FAQs

Package last updated on 26 Mar 2020

Did you know?

Socket

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.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc