Convert executable graphql schema to JSON.
Usage
import { schemaToJS } from "../src/schema";
import { makeExecutableSchema } from "graphql-tools";
const typeDefs = `
type Person {
name: String!
age: Int! @range(min: 0, max: 130)
gender: Gender!
}
enum Gender {
male
female
}
`;
const schema = makeExecutableSchema({ typeDefs, resolvers: {} });
const jsSchema = schemaToJS(schema);
console.log(jsSchema);
See the /examples
folder.
Run person.ts
:
$ ts-node examples/person.ts
See Also
- GraphQL Gen TypeORM - auto graphql generation of typeorm Entity-Schema, Resolvers, graphql mutation/queries.
type Person {
name: String!
age: Int! @range(min: 0, max: 130)
gender: Gender!
}
enum Gender {
male
female
}
{
__Schema: {
},
Person: {
fields: {
name: {
type: 'String',
directives: {},
isNullable: false,
isList: false
},
age: {
type: 'Int',
directives: {
range: {
min: 0,
max: 130
}
},
isNullable: false,
isList: false
},
gender: {
type: 'Gender',
directives: {},
isNullable: false,
isList: false
}
},
directives: {},
type: 'Object',
implements: []
},
Gender: {
fields: ['male', 'female'],
directives: {},
type: 'Enum'
}
}
import { schemaToJS } from "../src/schema";
import { accessor } from "graph-schema-json-writer";
const { schemaByType, filteredSchema } = accessor;
/// ... generate JSON schema
const jsSchema = schemaToJS(schema);
// schema where all entries with keys starting with __ are filtered out
const filteredMap = filteredSchema(jsSchema);
// soreted by type
const typeMap = schemaByType(jsSchema);
console.log(typeMap);
{
Object: {
Person: {
// ....
}
},
Enum: {
Gender: {
// ...
}
}
}
import { schemaToJS } from "../src/schema";
import { writer } from "graph-schema-json-writer";
const { writeToTypeDef } = writer;
/// ... generate JSON schema
const jsSchema = schemaToJS(schema);
// schema where all entries with keys starting with __ are filtered out
const typeDef = writeToTypeDef(jsSchema);
console.log(typeDef);
Should output the (original) GraphqL type def, nicely formatted:
type Person {
name: String!
age: Int! @range(min: 0, max: 130)
gender: Gender!
}
enum Gender {
male
female
}
Note: The writer now also supports writing a TypeScript class
, complete with extends
class, implements interfaces
, decorators for class itself and fields and properties.
This class writer could be used for writing classed for TypeORM, NestJS or TypeGraphQL etc.
Note that the class writer supports passing decorators
in place of directives
.
- Add
directivesKeys: string[]
tofields
since directives order matters. - Figure out better way to use
astNodes
than all the guards and guessing. - Clean up codebase.