0.0.20 • Published 6 years ago

@cliquelabs/types v0.0.20

Weekly downloads
2
License
MIT
Repository
-
Last release
6 years ago

@cliquelabs/types

Schema generation for clique

Tools

Contributing Root Types

All new Root Types should be written in the src/Schemas directory. If the GraphQL Schema is backend only, place it in the backend folder. If you GraphQL is user-facing, place it in the presentation folder.

Contributing new types

All new types should be written in the src/typeDefs directory. All types are written in .graphql files.

Contributing Queries/Mutations/Subscription

All new queries should be written in the src/queries directory. All queries are written in .graphql files.

Mock Server

The types repo exports a mock resolver map. You can use this to explore the server.

To run the mock server:

npm run mock-server

Navigate to http://localhost:4000/graphql to access the GraphQL server.

Build Process

When types builds it runs these commands:

  • generate-types Takes all type definitions from the typeDefs folder and exports them to the typeDefintions file. This makes each type exportable by type name.
import { Note } from '@cliquelabs/types/lib/typeDefintions';
  • generate-schema-exports Takes all Root types from the Schemas folder and exports them to Schemas/index. This makes each Root type exportable by file name. The convention for Root Types is: __DOMAIN_NAME__RootType.graphql.
import { NoteRootType } from '@cliquelabs/types/lib/Schemas';
  • merge-roottypes Takes all Root types from the Schemas folder, merges them into a single Root type, and exports it to src/RootType. This can be used for the explorer-schema or even in a GraphQL gateway like Roxy.
import RootType from '@cliquelabs/types/lib/RootType';
  • generate-schema-json Runs the mock server and generates a schema.json file at src/queries/schema.json. This file is primarily used to generate types for iOS and Android. Additionally it can be used for local GraphQL tools like graphql-config or eslint-graphql.

  • generate-ts Takes schema generated by generate-schema-json and all queries in src/queries and generates TypeScript types in src/typescript.

  • lint:graphql Lint all GraphQL files with query/mutation/subscription in src/queries and ensure they are valid with the schema.json file generated by the build process.

  • generate-service-bindings Takes each Schema from the Schemas folder and creates a GraphQL Binding Factory. You can then import them in your service or pass it to Roxy to create a GraphQL gateway.

import createNoteBinding from '@clique/types/lib/ServiceBindings/NoteBinding';

const noteBinding = createNoteBinding({
  url: 'http://note-svc/graphql',
  headersToForward: ['userid']
});

const projection = `
      {
          id
      }
  `;

noteBinding.query.notes({}, projection);

Caveats

TypeScript types

Currently, apollo-cli can generate types for GraphQL fragments, but it will not use them to define types for queries with the fragment. Suppose you have the following query:

fragment TodoFragment on Todo {
  _id
  content
  status
}

mutation addTodo($content: String!) {
  addTodo(content: $content) {
    ...TodoFragment
  }
}

apollo-cli will generate the following types:

import { TodoStatus } from "./globalTypes";

export interface TodoFragment {
  __typename: "Todo";
  _id: string;
  content: string;
  status: TodoStatus | null;
}

export interface addTodo_addTodo {
  __typename: "Todo";
  _id: string;
  content: string;
  status: TodoStatus | null;
}

export interface addTodo {
  addTodo: addTodo_addTodo | null;
}

export interface addTodoVariables {
  content: string;
}

As you can see, TodoFragment is successfully generated, but it is not used by addTodo_addTodo interface.

Here's the thread on this issue.

0.0.20

6 years ago

0.0.19

6 years ago

0.0.18

6 years ago

0.0.17

6 years ago

0.0.16

6 years ago

0.0.15

6 years ago

0.0.14

6 years ago

0.0.13

6 years ago

0.0.12

6 years ago

0.0.11

6 years ago

0.0.10

6 years ago

0.0.9

6 years ago

0.0.8

6 years ago

0.0.7

6 years ago

0.0.6

6 years ago

0.0.5

6 years ago

0.0.3

6 years ago

0.0.2

6 years ago

0.0.1

6 years ago