Working through a directives api

This commit is contained in:
Tim Griesser 2018-11-12 14:54:29 -05:00
parent f7b00a0980
commit 2b8b5c0902
24 changed files with 805 additions and 396 deletions

View File

@ -5,7 +5,8 @@
"**/.hg": true, "**/.hg": true,
"**/CVS": true, "**/CVS": true,
"**/.DS_Store": true, "**/.DS_Store": true,
"**/node_modules": true "**/node_modules": true,
"**/dist/**": true
}, },
"typescript.tsdk": "node_modules/typescript/lib" "typescript.tsdk": "node_modules/typescript/lib"
} }

View File

@ -34,22 +34,22 @@ The schema requires that an Object named `Query` be provided at the top-level.
const Query = GQLiteralObject("Query", (t) => { const Query = GQLiteralObject("Query", (t) => {
t.field("account", "Account", { t.field("account", "Account", {
args: { args: {
name: GQLiteralArg("String", { name: t.stringArg({
description: description:
"Providing the name of the account holder will search for accounts matching that name", "Providing the name of the account holder will search for accounts matching that name",
}), }),
status: GQLiteralArg("StatusEnum"), status: t.fieldArg("StatusEnum"),
}, },
}); });
t.field("accountsById", "Account", { t.field("accountsById", "Account", {
list: true, list: true,
args: { args: {
ids: GQLiteralArg("Int", { list: true }), ids: t.intArg({ list: true }),
}, },
}); });
t.field("accounts", "AccountConnection", { t.field("accounts", "AccountConnection", {
args: { args: {
limit: GQLiteralArg("Int", { required: true }), limit: t.intArg({ required: true }),
}, },
}); });
}); });

View File

@ -1,3 +1,8 @@
### ---
### This file was autogenerated by gqliteral
### Do not edit the contents directly
### ---
type Launch { type Launch {
id: ID! id: ID!
isBooked: Boolean! isBooked: Boolean!

View File

@ -11,6 +11,7 @@
"author": "", "author": "",
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"gqliteral": "^0.1.0",
"apollo-datasource": "^0.2.0", "apollo-datasource": "^0.2.0",
"apollo-datasource-rest": "^0.2.0", "apollo-datasource-rest": "^0.2.0",
"apollo-server": "2.2.0-alpha.2", "apollo-server": "2.2.0-alpha.2",

View File

@ -299,15 +299,11 @@ export interface GeneratedSchema {
unions: GeneratedUnions; unions: GeneratedUnions;
scalars: GeneratedScalars; scalars: GeneratedScalars;
interfaces: GeneratedInterfaces; interfaces: GeneratedInterfaces;
allInputTypes:
// For simplicity in autocomplete:
availableInputTypes:
| BaseScalarNames
| Extract<keyof GeneratedInputObjects, string> | Extract<keyof GeneratedInputObjects, string>
| Extract<keyof GeneratedEnums, string> | Extract<keyof GeneratedEnums, string>
| Extract<keyof GeneratedScalars, string>; | Extract<keyof GeneratedScalars, string>;
availableOutputTypes: allOutputTypes:
| BaseScalarNames
| Extract<keyof GeneratedObjects, string> | Extract<keyof GeneratedObjects, string>
| Extract<keyof GeneratedEnums, string> | Extract<keyof GeneratedEnums, string>
| Extract<keyof GeneratedUnions, string> | Extract<keyof GeneratedUnions, string>

View File

View File

@ -1,3 +1,8 @@
### ---
### This file was autogenerated by gqliteral
### Do not edit the contents directly
### ---
"""A comment about an entry, submitted by a user""" """A comment about an entry, submitted by a user"""
type Comment { type Comment {
"""The text of the comment""" """The text of the comment"""

View File

@ -1,9 +1,8 @@
/** /**
* This file is autogenerated. Do not edit directly. * This file is automatically generated by gqliteral
* Do not make changes directly
*/ */
export type BaseScalarNames = "String" | "Int" | "Float" | "ID" | "Boolean";
export interface Generated_Type_Query_Field_currentUser { export interface Generated_Type_Query_Field_currentUser {
returnType: returnType:
| Generated_Type_User["backingType"] | Generated_Type_User["backingType"]
@ -334,15 +333,11 @@ export interface GeneratedSchema {
unions: GeneratedUnions; unions: GeneratedUnions;
scalars: GeneratedScalars; scalars: GeneratedScalars;
interfaces: GeneratedInterfaces; interfaces: GeneratedInterfaces;
allInputTypes:
// For simplicity in autocomplete:
availableInputTypes:
| BaseScalarNames
| Extract<keyof GeneratedInputObjects, string> | Extract<keyof GeneratedInputObjects, string>
| Extract<keyof GeneratedEnums, string> | Extract<keyof GeneratedEnums, string>
| Extract<keyof GeneratedScalars, string>; | Extract<keyof GeneratedScalars, string>;
availableOutputTypes: allOutputTypes:
| BaseScalarNames
| Extract<keyof GeneratedObjects, string> | Extract<keyof GeneratedObjects, string>
| Extract<keyof GeneratedEnums, string> | Extract<keyof GeneratedEnums, string>
| Extract<keyof GeneratedUnions, string> | Extract<keyof GeneratedUnions, string>

View File

@ -1,6 +1,8 @@
{ {
"name": "gqliteral-githunt-api", "name": "gqliteral-githunt-api",
"dependencies": { "dependencies": {
"gqliteral": "^0.1.0",
"graphql": "^14.0.2",
"apollo-server": "2.2.0-alpha.2", "apollo-server": "2.2.0-alpha.2",
"githunt-api": "apollographql/GitHunt-API.git" "githunt-api": "apollographql/GitHunt-API.git"
}, },

View File

@ -5,8 +5,20 @@ const {
GQLiteralObject, GQLiteralObject,
GQLiteralArg, GQLiteralArg,
GQLiteralAbstractType, GQLiteralAbstractType,
GQLiteralDirective,
} = require("gqliteral"); } = require("gqliteral");
exports.CacheControl = GQLiteralDirective("cacheControl", (t) => {
t.int("maxAge");
t.field("scope", "CacheControlScope");
t.locations("OBJECT", "FIELD_DEFINITION");
});
exports.CacheControlScope = GQLiteralEnum("CacheControlScope", [
"PUBLIC",
"PRIVATE",
]);
exports.FeedType = GQLiteralEnum("FeedType", (t) => { exports.FeedType = GQLiteralEnum("FeedType", (t) => {
t.description("A list of options for the sort order of the feed"); t.description("A list of options for the sort order of the feed");
t.member("HOT", { t.member("HOT", {
@ -49,6 +61,14 @@ exports.Query = GQLiteralObject("Query", (t) => {
t.field("currentUser", "User", { t.field("currentUser", "User", {
description: description:
"Return the currently logged in user, or null if nobody is logged in", "Return the currently logged in user, or null if nobody is logged in",
directives: [
{
name: "cacheControl",
args: {
scope: "PRIVATE",
},
},
],
}); });
}); });
@ -102,9 +122,10 @@ const CommonFields = GQLiteralAbstractType((t) => {
exports.Comment = GQLiteralObject("Comment", (t) => { exports.Comment = GQLiteralObject("Comment", (t) => {
t.description("A comment about an entry, submitted by a user"); t.description("A comment about an entry, submitted by a user");
// t.directive("@cacheControl(maxAge: 240)"); t.directive("cacheControl", { maxAge: 240 });
t.mix(CommonFields); t.mix(CommonFields);
t.float("createdAt", { t.float("createdAt", {
property: "created_at",
description: "A timestamp of when the comment was posted", description: "A timestamp of when the comment was posted",
}); });
t.string("content", { t.string("content", {
@ -123,7 +144,7 @@ exports.Vote = GQLiteralObject("Vote", (t) => {
// # Information about a GitHub repository submitted to GitHunt // # Information about a GitHub repository submitted to GitHunt
exports.Entry = GQLiteralObject("Entry", (t) => { exports.Entry = GQLiteralObject("Entry", (t) => {
t.mix(CommonFields); t.mix(CommonFields);
// t.directive(@cacheControl(maxAge: 240)) t.directive("cacheControl", { maxAge: 240 });
t.field("repository", "Repository", { t.field("repository", "Repository", {
description: "Information about the repository from GitHub", description: "Information about the repository from GitHub",
}); });
@ -133,7 +154,10 @@ exports.Entry = GQLiteralObject("Entry", (t) => {
t.int("score", { t.int("score", {
description: "The score of this repository, upvotes - downvotes", description: "The score of this repository, upvotes - downvotes",
}); });
t.float("hotScore", { description: "The hot score of this repository" }); t.float("hotScore", {
property: "hot_score",
description: "The hot score of this repository",
});
t.field("comments", "Comment", { t.field("comments", "Comment", {
list: true, list: true,
args: { args: {
@ -153,7 +177,9 @@ exports.Repository = GQLiteralObject("Repository", (t) => {
A repository object from the GitHub API. This uses the exact field names returned by the A repository object from the GitHub API. This uses the exact field names returned by the
GitHub API for simplicity, even though the convention for GraphQL is usually to camel case. GitHub API for simplicity, even though the convention for GraphQL is usually to camel case.
`); `);
// t.directive @cacheControl(maxAge:240) t.directive("cacheControl", {
maxAge: 240,
});
t.string("name", { t.string("name", {
description: "Just the name of the repository, e.g. GitHunt-API", description: "Just the name of the repository, e.g. GitHunt-API",
}); });
@ -184,7 +210,9 @@ exports.User = GQLiteralObject("User", (t) => {
t.description( t.description(
"A user object from the GitHub API. This uses the exact field names returned from the GitHub API." "A user object from the GitHub API. This uses the exact field names returned from the GitHub API."
); );
// t.directive @cacheControl(maxAge:240) t.directive("cacheControl", {
maxAge: 240,
});
t.string("login", { description: "The name of the user, e.g. apollostack" }); t.string("login", { description: "The name of the user, e.g. apollostack" });
t.string("avatar_url", { t.string("avatar_url", {
description: description:

View File

@ -5,6 +5,7 @@
"start": "ts-node-dev --no-notify --respawn ./src" "start": "ts-node-dev --no-notify --respawn ./src"
}, },
"dependencies": { "dependencies": {
"gqliteral": "^0.1.0",
"graphql": "^14.0.2", "graphql": "^14.0.2",
"apollo-server": "^2.2.0", "apollo-server": "^2.2.0",
"ts-node": "^7.0.1", "ts-node": "^7.0.1",

View File

@ -1,18 +1,19 @@
/** /**
* This file is autogenerated. Do not edit directly. * This file is automatically generated by gqliteral
* Do not make changes directly
*/ */
import * as swapi from "./gqliteral/backingTypes"; import * as swapi from "./gqliteral/backingTypes";
export type BaseScalarNames = "String" | "Int" | "Float" | "ID" | "Boolean";
export interface Generated_Interface_Character_Fields { export interface Generated_Interface_Character_Fields {
appearsIn: { appearsIn: {
returnType: returnType:
| GeneratedEnums["Episode"][] | GeneratedEnums["Episode"][]
| PromiseLike<GeneratedEnums["Episode"][]> | PromiseLike<GeneratedEnums["Episode"][]>
| PromiseLike<GeneratedEnums["Episode"]>[]; | PromiseLike<GeneratedEnums["Episode"]>[];
args: {}; args: {
id: string;
};
}; };
friends: { friends: {
returnType: returnType:
@ -138,15 +139,11 @@ export interface GeneratedSchema {
unions: GeneratedUnions; unions: GeneratedUnions;
scalars: GeneratedScalars; scalars: GeneratedScalars;
interfaces: GeneratedInterfaces; interfaces: GeneratedInterfaces;
allInputTypes:
// For simplicity in autocomplete:
availableInputTypes:
| BaseScalarNames
| Extract<keyof GeneratedInputObjects, string> | Extract<keyof GeneratedInputObjects, string>
| Extract<keyof GeneratedEnums, string> | Extract<keyof GeneratedEnums, string>
| Extract<keyof GeneratedScalars, string>; | Extract<keyof GeneratedScalars, string>;
availableOutputTypes: allOutputTypes:
| BaseScalarNames
| Extract<keyof GeneratedObjects, string> | Extract<keyof GeneratedObjects, string>
| Extract<keyof GeneratedEnums, string> | Extract<keyof GeneratedEnums, string>
| Extract<keyof GeneratedUnions, string> | Extract<keyof GeneratedUnions, string>

View File

@ -1,4 +1,4 @@
import { GQLiteralInterface } from "gqliteral"; import { GQLiteralInterface, GQLiteralArg } from "gqliteral";
import { getFriends } from "../data"; import { getFriends } from "../data";
export const Character = GQLiteralInterface("Character", (t) => { export const Character = GQLiteralInterface("Character", (t) => {
@ -15,6 +15,9 @@ export const Character = GQLiteralInterface("Character", (t) => {
list: true, list: true,
description: "Which movies they appear in.", description: "Which movies they appear in.",
property: "appears_in", property: "appears_in",
args: {
id: GQLiteralArg("ID", { required: true }),
},
}); });
t.resolveType((character) => character.type); t.resolveType((character) => character.type);
}); });

View File

@ -1,7 +1,12 @@
### ---
### This file was autogenerated by gqliteral
### Do not edit the contents directly
### ---
"""A character in the Star Wars Trilogy""" """A character in the Star Wars Trilogy"""
interface Character { interface Character {
"""Which movies they appear in.""" """Which movies they appear in."""
appearsIn: [Episode!]! appearsIn(id: ID!): [Episode!]!
"""The friends of the character, or an empty list if they have none.""" """The friends of the character, or an empty list if they have none."""
friends: [Character!]! friends: [Character!]!
@ -16,7 +21,7 @@ interface Character {
"""A mechanical creature in the Star Wars universe.""" """A mechanical creature in the Star Wars universe."""
type Droid implements Character { type Droid implements Character {
"""Which movies they appear in.""" """Which movies they appear in."""
appearsIn: [Episode!]! appearsIn(id: ID!): [Episode!]!
"""The friends of the character, or an empty list if they have none.""" """The friends of the character, or an empty list if they have none."""
friends: [Character!]! friends: [Character!]!
@ -45,7 +50,7 @@ enum Episode {
"""A humanoid creature in the Star Wars universe.""" """A humanoid creature in the Star Wars universe."""
type Human implements Character { type Human implements Character {
"""Which movies they appear in.""" """Which movies they appear in."""
appearsIn: [Episode!]! appearsIn(id: ID!): [Episode!]!
"""The friends of the character, or an empty list if they have none.""" """The friends of the character, or an empty list if they have none."""
friends: [Character!]! friends: [Character!]!

View File

@ -123,6 +123,10 @@
"@types/express-serve-static-core" "*" "@types/express-serve-static-core" "*"
"@types/serve-static" "*" "@types/serve-static" "*"
"@types/handlebars@4.0.39":
version "4.0.39"
resolved "https://registry.yarnpkg.com/@types/handlebars/-/handlebars-4.0.39.tgz#961fb54db68030890942e6aeffe9f93a957807bd"
"@types/long@^4.0.0": "@types/long@^4.0.0":
version "4.0.0" version "4.0.0"
resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.0.tgz#719551d2352d301ac8b81db732acb6bdc28dbdef" resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.0.tgz#719551d2352d301ac8b81db732acb6bdc28dbdef"
@ -453,7 +457,7 @@ async-retry@^1.2.1:
dependencies: dependencies:
retry "0.12.0" retry "0.12.0"
async@^2.1.4, async@^2.5.0: async@^2.1.4, async@^2.5.0, async@^2.6.0:
version "2.6.1" version "2.6.1"
resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610"
dependencies: dependencies:
@ -750,6 +754,13 @@ callsites@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50"
camel-case@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73"
dependencies:
no-case "^2.2.0"
upper-case "^1.1.1"
camelcase-keys@^2.0.0: camelcase-keys@^2.0.0:
version "2.1.0" version "2.1.0"
resolved "http://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" resolved "http://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7"
@ -782,6 +793,14 @@ caseless@~0.12.0:
version "0.12.0" version "0.12.0"
resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
chalk@2.4.1, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.1:
version "2.4.1"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e"
dependencies:
ansi-styles "^3.2.1"
escape-string-regexp "^1.0.5"
supports-color "^5.3.0"
chalk@^1.1.3: chalk@^1.1.3:
version "1.1.3" version "1.1.3"
resolved "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" resolved "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
@ -792,13 +811,28 @@ chalk@^1.1.3:
strip-ansi "^3.0.0" strip-ansi "^3.0.0"
supports-color "^2.0.0" supports-color "^2.0.0"
chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.1: change-case@3.0.2:
version "2.4.1" version "3.0.2"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" resolved "https://registry.yarnpkg.com/change-case/-/change-case-3.0.2.tgz#fd48746cce02f03f0a672577d1d3a8dc2eceb037"
dependencies: dependencies:
ansi-styles "^3.2.1" camel-case "^3.0.0"
escape-string-regexp "^1.0.5" constant-case "^2.0.0"
supports-color "^5.3.0" dot-case "^2.1.0"
header-case "^1.0.0"
is-lower-case "^1.1.0"
is-upper-case "^1.1.0"
lower-case "^1.1.1"
lower-case-first "^1.0.0"
no-case "^2.3.2"
param-case "^2.1.0"
pascal-case "^2.0.0"
path-case "^2.1.0"
sentence-case "^2.1.0"
snake-case "^2.1.0"
swap-case "^1.1.0"
title-case "^2.1.0"
upper-case "^1.1.1"
upper-case-first "^1.1.0"
chownr@^1.1.1: chownr@^1.1.1:
version "1.1.1" version "1.1.1"
@ -853,7 +887,7 @@ collection-visit@^1.0.0:
map-visit "^1.0.0" map-visit "^1.0.0"
object-visit "^1.0.0" object-visit "^1.0.0"
color-convert@^1.9.0: color-convert@^1.9.0, color-convert@^1.9.1:
version "1.9.3" version "1.9.3"
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
dependencies: dependencies:
@ -863,10 +897,43 @@ color-name@1.1.3:
version "1.1.3" version "1.1.3"
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
color-name@^1.0.0:
version "1.1.4"
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
color-string@^1.5.2:
version "1.5.3"
resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc"
dependencies:
color-name "^1.0.0"
simple-swizzle "^0.2.2"
color@3.0.x:
version "3.0.0"
resolved "https://registry.yarnpkg.com/color/-/color-3.0.0.tgz#d920b4328d534a3ac8295d68f7bd4ba6c427be9a"
dependencies:
color-convert "^1.9.1"
color-string "^1.5.2"
colornames@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/colornames/-/colornames-1.1.1.tgz#f8889030685c7c4ff9e2a559f5077eb76a816f96"
colors@1.0.3: colors@1.0.3:
version "1.0.3" version "1.0.3"
resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b"
colors@^1.2.1:
version "1.3.2"
resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.2.tgz#2df8ff573dfbf255af562f8ce7181d6b971a359b"
colorspace@1.1.x:
version "1.1.1"
resolved "https://registry.yarnpkg.com/colorspace/-/colorspace-1.1.1.tgz#9ac2491e1bc6f8fb690e2176814f8d091636d972"
dependencies:
color "3.0.x"
text-hex "1.0.x"
combined-stream@^1.0.6, combined-stream@~1.0.6: combined-stream@^1.0.6, combined-stream@~1.0.6:
version "1.0.7" version "1.0.7"
resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828"
@ -877,6 +944,10 @@ commander@~2.17.1:
version "2.17.1" version "2.17.1"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf"
common-tags@1.8.0:
version "1.8.0"
resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937"
component-emitter@^1.2.1: component-emitter@^1.2.1:
version "1.2.1" version "1.2.1"
resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6"
@ -889,6 +960,13 @@ console-control-strings@^1.0.0, console-control-strings@~1.1.0:
version "1.1.0" version "1.1.0"
resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
constant-case@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/constant-case/-/constant-case-2.0.0.tgz#4175764d389d3fa9c8ecd29186ed6005243b6a46"
dependencies:
snake-case "^2.1.0"
upper-case "^1.1.1"
content-disposition@0.5.2: content-disposition@0.5.2:
version "0.5.2" version "0.5.2"
resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4"
@ -1072,6 +1150,14 @@ detect-newline@^2.1.0:
version "2.1.0" version "2.1.0"
resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2"
diagnostics@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/diagnostics/-/diagnostics-1.1.1.tgz#cab6ac33df70c9d9a727490ae43ac995a769b22a"
dependencies:
colorspace "1.1.x"
enabled "1.0.x"
kuler "1.0.x"
dicer@0.2.5: dicer@0.2.5:
version "0.2.5" version "0.2.5"
resolved "https://registry.yarnpkg.com/dicer/-/dicer-0.2.5.tgz#5996c086bb33218c812c090bddc09cd12facb70f" resolved "https://registry.yarnpkg.com/dicer/-/dicer-0.2.5.tgz#5996c086bb33218c812c090bddc09cd12facb70f"
@ -1089,6 +1175,12 @@ domexception@^1.0.1:
dependencies: dependencies:
webidl-conversions "^4.0.2" webidl-conversions "^4.0.2"
dot-case@^2.1.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-2.1.1.tgz#34dcf37f50a8e93c2b3bca8bb7fb9155c7da3bee"
dependencies:
no-case "^2.2.0"
dynamic-dedupe@^0.2.0: dynamic-dedupe@^0.2.0:
version "0.2.0" version "0.2.0"
resolved "https://registry.yarnpkg.com/dynamic-dedupe/-/dynamic-dedupe-0.2.0.tgz#50f7c28684831ecf1c170aab67a1d5311cdd76ce" resolved "https://registry.yarnpkg.com/dynamic-dedupe/-/dynamic-dedupe-0.2.0.tgz#50f7c28684831ecf1c170aab67a1d5311cdd76ce"
@ -1106,10 +1198,20 @@ ee-first@1.1.1:
version "1.1.1" version "1.1.1"
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
enabled@1.0.x:
version "1.0.2"
resolved "http://registry.npmjs.org/enabled/-/enabled-1.0.2.tgz#965f6513d2c2d1c5f4652b64a2e3396467fc2f93"
dependencies:
env-variable "0.0.x"
encodeurl@~1.0.2: encodeurl@~1.0.2:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
env-variable@0.0.x:
version "0.0.5"
resolved "https://registry.yarnpkg.com/env-variable/-/env-variable-0.0.5.tgz#913dd830bef11e96a039c038d4130604eba37f88"
error-ex@^1.2.0: error-ex@^1.2.0:
version "1.3.2" version "1.3.2"
resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
@ -1325,12 +1427,20 @@ fast-levenshtein@~2.0.4:
version "2.0.6" version "2.0.6"
resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
fast-safe-stringify@^2.0.4:
version "2.0.6"
resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.0.6.tgz#04b26106cc56681f51a044cfc0d76cf0008ac2c2"
fb-watchman@^2.0.0: fb-watchman@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58"
dependencies: dependencies:
bser "^2.0.0" bser "^2.0.0"
fecha@^2.3.3:
version "2.3.3"
resolved "http://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz#948e74157df1a32fd1b12c3a3c3cdcb6ec9d96cd"
filename-regex@^2.0.0: filename-regex@^2.0.0:
version "2.0.1" version "2.0.1"
resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26"
@ -1516,10 +1626,40 @@ globals@^9.18.0:
version "9.18.0" version "9.18.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"
gqliteral@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/gqliteral/-/gqliteral-0.1.0.tgz#b001728a57bbaeeba15f9d4c875675734bb278eb"
dependencies:
graphql-codegen-compiler "0.13.0"
graphql-codegen-core "0.13.0"
graceful-fs@^4.1.11, graceful-fs@^4.1.2: graceful-fs@^4.1.11, graceful-fs@^4.1.2:
version "4.1.15" version "4.1.15"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00"
graphql-codegen-compiler@0.13.0:
version "0.13.0"
resolved "https://registry.yarnpkg.com/graphql-codegen-compiler/-/graphql-codegen-compiler-0.13.0.tgz#5d7787849ce5b109f2ca7af681f428a1633c6b39"
dependencies:
"@types/handlebars" "4.0.39"
change-case "3.0.2"
common-tags "1.8.0"
graphql-codegen-core "0.13.0"
handlebars "4.0.12"
moment "2.22.2"
graphql-codegen-core@0.13.0:
version "0.13.0"
resolved "https://registry.yarnpkg.com/graphql-codegen-core/-/graphql-codegen-core-0.13.0.tgz#c288b2e263ea73724215c10712116f05c7ce02cd"
dependencies:
chalk "2.4.1"
change-case "3.0.2"
common-tags "1.8.0"
graphql-tag "2.10.0"
graphql-tools "4.0.3"
ts-log "2.1.3"
winston "3.1.0"
graphql-extensions@0.3.0: graphql-extensions@0.3.0:
version "0.3.0" version "0.3.0"
resolved "https://registry.yarnpkg.com/graphql-extensions/-/graphql-extensions-0.3.0.tgz#49e3a77986e34d0dc0af0c07fc51e48dcdec8b0c" resolved "https://registry.yarnpkg.com/graphql-extensions/-/graphql-extensions-0.3.0.tgz#49e3a77986e34d0dc0af0c07fc51e48dcdec8b0c"
@ -1530,11 +1670,11 @@ graphql-subscriptions@^1.0.0:
dependencies: dependencies:
iterall "^1.2.1" iterall "^1.2.1"
graphql-tag@^2.9.2: graphql-tag@2.10.0, graphql-tag@^2.9.2:
version "2.10.0" version "2.10.0"
resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.10.0.tgz#87da024be863e357551b2b8700e496ee2d4353ae" resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.10.0.tgz#87da024be863e357551b2b8700e496ee2d4353ae"
graphql-tools@^4.0.0: graphql-tools@4.0.3, graphql-tools@^4.0.0:
version "4.0.3" version "4.0.3"
resolved "https://registry.yarnpkg.com/graphql-tools/-/graphql-tools-4.0.3.tgz#23b5cb52c519212b1b2e4630a361464396ad264b" resolved "https://registry.yarnpkg.com/graphql-tools/-/graphql-tools-4.0.3.tgz#23b5cb52c519212b1b2e4630a361464396ad264b"
dependencies: dependencies:
@ -1554,7 +1694,7 @@ growly@^1.2.0, growly@^1.3.0:
version "1.3.0" version "1.3.0"
resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081"
handlebars@^4.0.3: handlebars@4.0.12, handlebars@^4.0.3:
version "4.0.12" version "4.0.12"
resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.12.tgz#2c15c8a96d46da5e266700518ba8cb8d919d5bc5" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.12.tgz#2c15c8a96d46da5e266700518ba8cb8d919d5bc5"
dependencies: dependencies:
@ -1630,6 +1770,13 @@ has@^1.0.1:
dependencies: dependencies:
function-bind "^1.1.1" function-bind "^1.1.1"
header-case@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/header-case/-/header-case-1.0.1.tgz#9535973197c144b09613cd65d317ef19963bd02d"
dependencies:
no-case "^2.2.0"
upper-case "^1.1.3"
home-or-tmp@^2.0.0: home-or-tmp@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8"
@ -1748,6 +1895,10 @@ is-arrayish@^0.2.1:
version "0.2.1" version "0.2.1"
resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
is-arrayish@^0.3.1:
version "0.3.2"
resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03"
is-buffer@^1.1.5: is-buffer@^1.1.5:
version "1.1.6" version "1.1.6"
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
@ -1850,6 +2001,12 @@ is-glob@^2.0.0, is-glob@^2.0.1:
dependencies: dependencies:
is-extglob "^1.0.0" is-extglob "^1.0.0"
is-lower-case@^1.1.0:
version "1.1.3"
resolved "https://registry.yarnpkg.com/is-lower-case/-/is-lower-case-1.1.3.tgz#7e147be4768dc466db3bfb21cc60b31e6ad69393"
dependencies:
lower-case "^1.1.0"
is-number@^2.1.0: is-number@^2.1.0:
version "2.1.0" version "2.1.0"
resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
@ -1904,6 +2061,12 @@ is-typedarray@~1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
is-upper-case@^1.1.0:
version "1.1.2"
resolved "https://registry.yarnpkg.com/is-upper-case/-/is-upper-case-1.1.2.tgz#8d0b1fa7e7933a1e58483600ec7d9661cbaf756f"
dependencies:
upper-case "^1.1.0"
is-utf8@^0.2.0: is-utf8@^0.2.0:
version "0.2.1" version "0.2.1"
resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
@ -2418,6 +2581,12 @@ kleur@^2.0.1:
version "2.0.2" version "2.0.2"
resolved "https://registry.yarnpkg.com/kleur/-/kleur-2.0.2.tgz#b704f4944d95e255d038f0cb05fb8a602c55a300" resolved "https://registry.yarnpkg.com/kleur/-/kleur-2.0.2.tgz#b704f4944d95e255d038f0cb05fb8a602c55a300"
kuler@1.0.x:
version "1.0.1"
resolved "https://registry.yarnpkg.com/kuler/-/kuler-1.0.1.tgz#ef7c784f36c9fb6e16dd3150d152677b2b0228a6"
dependencies:
colornames "^1.1.1"
lcid@^1.0.0: lcid@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835"
@ -2537,6 +2706,16 @@ lodash@^4.13.1, lodash@^4.17.10, lodash@^4.17.4:
version "4.17.11" version "4.17.11"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d"
logform@^1.9.1:
version "1.10.0"
resolved "https://registry.yarnpkg.com/logform/-/logform-1.10.0.tgz#c9d5598714c92b546e23f4e78147c40f1e02012e"
dependencies:
colors "^1.2.1"
fast-safe-stringify "^2.0.4"
fecha "^2.3.3"
ms "^2.1.1"
triple-beam "^1.2.0"
long@^4.0.0: long@^4.0.0:
version "4.0.0" version "4.0.0"
resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28"
@ -2554,6 +2733,16 @@ loud-rejection@^1.0.0:
currently-unhandled "^0.4.1" currently-unhandled "^0.4.1"
signal-exit "^3.0.0" signal-exit "^3.0.0"
lower-case-first@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/lower-case-first/-/lower-case-first-1.0.2.tgz#e5da7c26f29a7073be02d52bac9980e5922adfa1"
dependencies:
lower-case "^1.1.2"
lower-case@^1.1.0, lower-case@^1.1.1, lower-case@^1.1.2:
version "1.1.4"
resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac"
lru-cache@^4.0.1, lru-cache@^4.1.3: lru-cache@^4.0.1, lru-cache@^4.1.3:
version "4.1.3" version "4.1.3"
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.3.tgz#a1175cf3496dfc8436c156c334b4955992bce69c" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.3.tgz#a1175cf3496dfc8436c156c334b4955992bce69c"
@ -2744,6 +2933,10 @@ mkdirp@0.x, mkdirp@^0.5.0, mkdirp@^0.5.1:
dependencies: dependencies:
minimist "0.0.8" minimist "0.0.8"
moment@2.22.2:
version "2.22.2"
resolved "https://registry.yarnpkg.com/moment/-/moment-2.22.2.tgz#3c257f9839fc0e93ff53149632239eb90783ff66"
ms@2.0.0: ms@2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
@ -2788,6 +2981,12 @@ negotiator@0.6.1:
version "0.6.1" version "0.6.1"
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9"
no-case@^2.2.0, no-case@^2.3.2:
version "2.3.2"
resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac"
dependencies:
lower-case "^1.1.1"
node-emoji@^1.4.1: node-emoji@^1.4.1:
version "1.8.1" version "1.8.1"
resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.8.1.tgz#6eec6bfb07421e2148c75c6bba72421f8530a826" resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.8.1.tgz#6eec6bfb07421e2148c75c6bba72421f8530a826"
@ -2964,6 +3163,10 @@ once@^1.3.0, once@^1.4.0:
dependencies: dependencies:
wrappy "1" wrappy "1"
one-time@0.0.4:
version "0.0.4"
resolved "https://registry.yarnpkg.com/one-time/-/one-time-0.0.4.tgz#f8cdf77884826fe4dff93e3a9cc37b1e4480742e"
optimist@^0.6.1: optimist@^0.6.1:
version "0.6.1" version "0.6.1"
resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
@ -3025,6 +3228,12 @@ p-try@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
param-case@^2.1.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247"
dependencies:
no-case "^2.2.0"
parse-glob@^3.0.4: parse-glob@^3.0.4:
version "3.0.4" version "3.0.4"
resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
@ -3048,10 +3257,23 @@ parseurl@~1.3.2:
version "1.3.2" version "1.3.2"
resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3"
pascal-case@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-2.0.1.tgz#2d578d3455f660da65eca18ef95b4e0de912761e"
dependencies:
camel-case "^3.0.0"
upper-case-first "^1.1.0"
pascalcase@^0.1.1: pascalcase@^0.1.1:
version "0.1.1" version "0.1.1"
resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
path-case@^2.1.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/path-case/-/path-case-2.1.1.tgz#94b8037c372d3fe2906e465bb45e25d226e8eea5"
dependencies:
no-case "^2.2.0"
path-exists@^2.0.0: path-exists@^2.0.0:
version "2.1.0" version "2.1.0"
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
@ -3247,7 +3469,7 @@ readable-stream@1.1.x:
isarray "0.0.1" isarray "0.0.1"
string_decoder "~0.10.x" string_decoder "~0.10.x"
readable-stream@^2.0.1, readable-stream@^2.0.6: readable-stream@^2.0.1, readable-stream@^2.0.6, readable-stream@^2.3.6:
version "2.3.6" version "2.3.6"
resolved "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" resolved "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
dependencies: dependencies:
@ -3461,6 +3683,13 @@ send@0.16.2:
range-parser "~1.2.0" range-parser "~1.2.0"
statuses "~1.4.0" statuses "~1.4.0"
sentence-case@^2.1.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/sentence-case/-/sentence-case-2.1.1.tgz#1f6e2dda39c168bf92d13f86d4a918933f667ed4"
dependencies:
no-case "^2.2.0"
upper-case-first "^1.1.2"
serve-static@1.13.2: serve-static@1.13.2:
version "1.13.2" version "1.13.2"
resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1"
@ -3514,6 +3743,12 @@ signal-exit@^3.0.0, signal-exit@^3.0.2:
version "3.0.2" version "3.0.2"
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
simple-swizzle@^0.2.2:
version "0.2.2"
resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a"
dependencies:
is-arrayish "^0.3.1"
sisteransi@^0.1.1: sisteransi@^0.1.1:
version "0.1.1" version "0.1.1"
resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-0.1.1.tgz#5431447d5f7d1675aac667ccd0b865a4994cb3ce" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-0.1.1.tgz#5431447d5f7d1675aac667ccd0b865a4994cb3ce"
@ -3522,6 +3757,12 @@ slash@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
snake-case@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-2.1.0.tgz#41bdb1b73f30ec66a04d4e2cad1b76387d4d6d9f"
dependencies:
no-case "^2.2.0"
snapdragon-node@^2.0.1: snapdragon-node@^2.0.1:
version "2.1.1" version "2.1.1"
resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
@ -3630,6 +3871,10 @@ sshpk@^1.7.0:
safer-buffer "^2.0.2" safer-buffer "^2.0.2"
tweetnacl "~0.14.0" tweetnacl "~0.14.0"
stack-trace@0.0.x:
version "0.0.10"
resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0"
stack-utils@^1.0.1: stack-utils@^1.0.1:
version "1.0.1" version "1.0.1"
resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.1.tgz#d4f33ab54e8e38778b0ca5cfd3b3afb12db68620" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.1.tgz#d4f33ab54e8e38778b0ca5cfd3b3afb12db68620"
@ -3751,6 +3996,13 @@ supports-color@^5.3.0:
dependencies: dependencies:
has-flag "^3.0.0" has-flag "^3.0.0"
swap-case@^1.1.0:
version "1.1.2"
resolved "https://registry.yarnpkg.com/swap-case/-/swap-case-1.1.2.tgz#c39203a4587385fad3c850a0bd1bcafa081974e3"
dependencies:
lower-case "^1.1.1"
upper-case "^1.1.1"
symbol-observable@^1.0.4: symbol-observable@^1.0.4:
version "1.2.0" version "1.2.0"
resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"
@ -3781,10 +4033,21 @@ test-exclude@^4.2.1:
read-pkg-up "^1.0.1" read-pkg-up "^1.0.1"
require-main-filename "^1.0.1" require-main-filename "^1.0.1"
text-hex@1.0.x:
version "1.0.0"
resolved "https://registry.yarnpkg.com/text-hex/-/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5"
throat@^4.0.0: throat@^4.0.0:
version "4.1.0" version "4.1.0"
resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a"
title-case@^2.1.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/title-case/-/title-case-2.1.1.tgz#3e127216da58d2bc5becf137ab91dae3a7cd8faa"
dependencies:
no-case "^2.2.0"
upper-case "^1.0.3"
tmpl@1.0.x: tmpl@1.0.x:
version "1.0.4" version "1.0.4"
resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1"
@ -3836,6 +4099,10 @@ trim-right@^1.0.1:
version "1.0.1" version "1.0.1"
resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
triple-beam@^1.2.0, triple-beam@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.3.0.tgz#a595214c7298db8339eeeee083e4d10bd8cb8dd9"
ts-jest@^23.10.4: ts-jest@^23.10.4:
version "23.10.4" version "23.10.4"
resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-23.10.4.tgz#a7a953f55c9165bcaa90ff91014a178e87fe0df8" resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-23.10.4.tgz#a7a953f55c9165bcaa90ff91014a178e87fe0df8"
@ -3849,6 +4116,10 @@ ts-jest@^23.10.4:
semver "^5.5" semver "^5.5"
yargs-parser "10.x" yargs-parser "10.x"
ts-log@2.1.3:
version "2.1.3"
resolved "https://registry.yarnpkg.com/ts-log/-/ts-log-2.1.3.tgz#9e30aca1baffe7693a2e4142b8f07ecb01cb8340"
ts-node-dev@^1.0.0-pre.30: ts-node-dev@^1.0.0-pre.30:
version "1.0.0-pre.30" version "1.0.0-pre.30"
resolved "https://registry.yarnpkg.com/ts-node-dev/-/ts-node-dev-1.0.0-pre.30.tgz#11446f273d8adee9fa4b8de6661ef5885abb5431" resolved "https://registry.yarnpkg.com/ts-node-dev/-/ts-node-dev-1.0.0-pre.30.tgz#11446f273d8adee9fa4b8de6661ef5885abb5431"
@ -3936,6 +4207,16 @@ unset-value@^1.0.0:
has-value "^0.3.1" has-value "^0.3.1"
isobject "^3.0.0" isobject "^3.0.0"
upper-case-first@^1.1.0, upper-case-first@^1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/upper-case-first/-/upper-case-first-1.1.2.tgz#5d79bedcff14419518fd2edb0a0507c9b6859115"
dependencies:
upper-case "^1.1.1"
upper-case@^1.0.3, upper-case@^1.1.0, upper-case@^1.1.1, upper-case@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598"
uri-js@^4.2.2: uri-js@^4.2.2:
version "4.2.2" version "4.2.2"
resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0"
@ -4053,6 +4334,27 @@ wide-align@^1.1.0:
dependencies: dependencies:
string-width "^1.0.2 || 2" string-width "^1.0.2 || 2"
winston-transport@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/winston-transport/-/winston-transport-4.2.0.tgz#a20be89edf2ea2ca39ba25f3e50344d73e6520e5"
dependencies:
readable-stream "^2.3.6"
triple-beam "^1.2.0"
winston@3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/winston/-/winston-3.1.0.tgz#80724376aef164e024f316100d5b178d78ac5331"
dependencies:
async "^2.6.0"
diagnostics "^1.1.1"
is-stream "^1.1.0"
logform "^1.9.1"
one-time "0.0.4"
readable-stream "^2.3.6"
stack-trace "0.0.x"
triple-beam "^1.3.0"
winston-transport "^4.2.0"
wordwrap@~0.0.2: wordwrap@~0.0.2:
version "0.0.3" version "0.0.3"
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"

View File

@ -4,6 +4,7 @@
"main": "dist/index.js", "main": "dist/index.js",
"types": "src/index.ts", "types": "src/index.ts",
"license": "MIT", "license": "MIT",
"description": "Scalable, strongly typed GraphQL schema development",
"scripts": { "scripts": {
"dev": "tsc -w", "dev": "tsc -w",
"test": "jest" "test": "jest"

View File

@ -30,11 +30,14 @@ import {
isObjectType, isObjectType,
isOutputType, isOutputType,
isUnionType, isUnionType,
DirectiveLocationEnum,
GraphQLDirective,
isDirective,
} from "graphql"; } from "graphql";
import { GQLiteralTypeWrapper } from "./definitions"; import { GQLiteralTypeWrapper } from "./definitions";
import * as Types from "./types"; import * as Types from "./types";
import suggestionList, { propertyFieldResolver } from "./utils"; import suggestionList, { propertyFieldResolver } from "./utils";
import { GQLiteralAbstract } from "./objects"; import { GQLiteralAbstract, GQLiteralDirectiveType } from "./objects";
const isPromise = (val: any): val is Promise<any> => const isPromise = (val: any): val is Promise<any> =>
Boolean(val && typeof val.then === "function"); Boolean(val && typeof val.then === "function");
@ -62,9 +65,32 @@ const SCALARS: Record<string, GraphQLScalarType> = {
* circular references at this step, while fields will guard for it during lazy evaluation. * circular references at this step, while fields will guard for it during lazy evaluation.
*/ */
export class SchemaBuilder { export class SchemaBuilder {
/**
* Used to check for circular references.
*/
protected buildingTypes = new Set(); protected buildingTypes = new Set();
/**
* The "final type" map contains all types as they are built.
*/
protected finalTypeMap: Record<string, GraphQLNamedType> = {}; protected finalTypeMap: Record<string, GraphQLNamedType> = {};
/**
* The "defined type" map keeps track of all of the types that were
* defined directly as `GraphQL*Type` objects, so we don't accidentally
* overwrite any.
*/
protected definedTypeMap: Record<string, GraphQLNamedType> = {};
/**
* The "pending type" map keeps track of all types that
*/
protected pendingTypeMap: Record<string, GQLiteralTypeWrapper> = {}; protected pendingTypeMap: Record<string, GQLiteralTypeWrapper> = {};
protected pendingDirectiveMap: Record<
string,
GQLiteralDirectiveType<any>
> = {};
protected directiveMap: Record<string, GraphQLDirective> = {};
protected directiveUseMap: {
[K in DirectiveLocationEnum]?: Types.DirectiveUse
} = {};
constructor( constructor(
protected schemaConfig: Pick< protected schemaConfig: Pick<
@ -84,7 +110,15 @@ export class SchemaBuilder {
} }
} }
getFinalTypeMap(): Record<string, GraphQLNamedType> { addDirective(directiveDef: GQLiteralDirectiveType<any> | GraphQLDirective) {
if (isDirective(directiveDef)) {
this.directiveMap[directiveDef.name] = directiveDef;
} else {
this.pendingDirectiveMap[directiveDef.name] = directiveDef;
}
}
getFinalTypeMap(): Types.BuildTypes {
Object.keys(this.pendingTypeMap).forEach((key) => { Object.keys(this.pendingTypeMap).forEach((key) => {
// If we've already constructed the type by this point, // If we've already constructed the type by this point,
// via circular dependency resolution don't worry about building it. // via circular dependency resolution don't worry about building it.
@ -94,7 +128,22 @@ export class SchemaBuilder {
this.finalTypeMap[key] = this.getOrBuildType(key); this.finalTypeMap[key] = this.getOrBuildType(key);
this.buildingTypes.clear(); this.buildingTypes.clear();
}); });
return this.finalTypeMap; Object.keys(this.pendingDirectiveMap).forEach((key) => {});
return {
types: this.finalTypeMap,
directives: {
definitions: [],
uses: {},
hasUses: false,
},
};
}
directiveType(config: Types.DirectiveTypeConfig) {
return new GraphQLDirective({
name: config.name,
locations: [],
});
} }
inputObjectType(config: Types.InputTypeConfig): GraphQLInputObjectType { inputObjectType(config: Types.InputTypeConfig): GraphQLInputObjectType {
@ -147,8 +196,6 @@ export class SchemaBuilder {
fields: () => this.buildObjectFields(config), fields: () => this.buildObjectFields(config),
resolveType, resolveType,
description, description,
// astNode?: Maybe<InterfaceTypeDefinitionNode>;
// extensionASTNodes?: Maybe<ReadonlyArray<InterfaceTypeExtensionNode>>;
}); });
} }
@ -262,6 +309,7 @@ export class SchemaBuilder {
switch (field.item) { switch (field.item) {
case Types.NodeType.MIX: case Types.NodeType.MIX:
throw new Error("TODO"); throw new Error("TODO");
break;
case Types.NodeType.MIX_ABSTRACT: case Types.NodeType.MIX_ABSTRACT:
this.mixAbstractOuput( this.mixAbstractOuput(
typeConfig, typeConfig,
@ -289,6 +337,7 @@ export class SchemaBuilder {
switch (field.item) { switch (field.item) {
case Types.NodeType.MIX: case Types.NodeType.MIX:
throw new Error("TODO"); throw new Error("TODO");
break;
case Types.NodeType.MIX_ABSTRACT: case Types.NodeType.MIX_ABSTRACT:
this.mixAbstractInput( this.mixAbstractInput(
typeConfig, typeConfig,
@ -360,7 +409,6 @@ export class SchemaBuilder {
args: this.buildArgs(fieldConfig.args || {}, typeConfig), args: this.buildArgs(fieldConfig.args || {}, typeConfig),
// subscribe?: GraphQLFieldResolver<TSource, TContext, TArgs>; // subscribe?: GraphQLFieldResolver<TSource, TContext, TArgs>;
// deprecationReason?: Maybe<string>; // deprecationReason?: Maybe<string>;
// astNode?: Maybe<FieldDefinitionNode>;
}; };
} }

View File

@ -5,6 +5,7 @@ import {
lexicographicSortSchema, lexicographicSortSchema,
printSchema, printSchema,
GraphQLScalarType, GraphQLScalarType,
GraphQLObjectType,
} from "graphql"; } from "graphql";
import * as Types from "./types"; import * as Types from "./types";
import { import {
@ -15,8 +16,14 @@ import {
GQLiteralInputObjectType, GQLiteralInputObjectType,
GQLiteralAbstract, GQLiteralAbstract,
GQLiteralUnionType, GQLiteralUnionType,
GQLiteralDirectiveType,
} from "./objects"; } from "./objects";
import { enumShorthandMembers, buildTypes } from "./utils"; import {
enumShorthandMembers,
buildTypes,
dedent,
addDirectives,
} from "./utils";
import { typegen } from "./typegen"; import { typegen } from "./typegen";
/** /**
@ -148,10 +155,7 @@ export function GQLiteralEnum<
export function GQLiteralInputObject< export function GQLiteralInputObject<
GenTypes = GQLiteralGen, GenTypes = GQLiteralGen,
TypeName extends string = any TypeName extends string = any
>( >(name: TypeName, fn: (arg: GQLiteralInputObjectType<GenTypes>) => void) {
name: TypeName,
fn: (arg: GQLiteralInputObjectType<GenTypes, TypeName>) => void
) {
const factory = new GQLiteralInputObjectType<GenTypes>(name); const factory = new GQLiteralInputObjectType<GenTypes>(name);
fn(factory); fn(factory);
return new GQLiteralTypeWrapper(name, factory); return new GQLiteralTypeWrapper(name, factory);
@ -185,7 +189,7 @@ export function GQLiteralAbstractType<GenTypes = GQLiteralGen>(
* `__Arg` methods: `fieldArg`, `stringArg`, `intArg`, etc. * `__Arg` methods: `fieldArg`, `stringArg`, `intArg`, etc.
*/ */
export function GQLiteralArg<GenTypes = GQLiteralGen>( export function GQLiteralArg<GenTypes = GQLiteralGen>(
type: Types.AllInputTypes<GenTypes>, type: Types.AllInputTypes<GenTypes> | Types.BaseScalars,
options?: Types.ArgOpts options?: Types.ArgOpts
): Readonly<Types.ArgDefinition> { ): Readonly<Types.ArgDefinition> {
// This isn't wrapped for now because it's not a named type, it's really // This isn't wrapped for now because it's not a named type, it's really
@ -196,6 +200,28 @@ export function GQLiteralArg<GenTypes = GQLiteralGen>(
}; };
} }
/**
* Defines a directive that can be used by the schema. Directives should
* be rarely used, as they only function for external consumers of the schema.
*/
export function GQLiteralDirective<
GenTypes = GQLiteralGen,
DirectiveName extends string = any
>(
name: DirectiveName,
config:
| Types.DirectiveConfig<GenTypes, DirectiveName>
| ((arg: GQLiteralDirectiveType<GenTypes>) => void)
) {
const directive = new GQLiteralDirectiveType<GenTypes>(name);
if (typeof config === "function") {
config(directive);
} else {
directive.locations(...config.locations);
}
return directive;
}
/** /**
* Defines the GraphQL schema, by combining the GraphQL types defined * Defines the GraphQL schema, by combining the GraphQL types defined
* by the GQLiteral layer or any manually defined GraphQLType objects. * by the GQLiteral layer or any manually defined GraphQLType objects.
@ -204,16 +230,17 @@ export function GQLiteralArg<GenTypes = GQLiteralGen>(
* root query type. * root query type.
*/ */
export function GQLiteralSchema(options: Types.SchemaConfig) { export function GQLiteralSchema(options: Types.SchemaConfig) {
const typeMap = buildTypes(options.types, options); const { types: typeMap, directives } = buildTypes(options.types, options);
if (!isObjectType(typeMap["Query"])) { if (!isObjectType(typeMap["Query"])) {
throw new Error("Missing a Query type"); throw new Error("Missing a Query type");
} }
const schema = new GraphQLSchema({ const schema = new GraphQLSchema({
query: typeMap["Query"] as any, query: typeMap["Query"] as Types.Maybe<GraphQLObjectType>,
mutation: typeMap["Mutation"] as any, mutation: typeMap["Mutation"] as Types.Maybe<GraphQLObjectType>,
subscription: typeMap["Subscription"] as any, subscription: typeMap["Subscription"] as Types.Maybe<GraphQLObjectType>,
directives: directives.definitions,
types: Object.keys(typeMap).reduce((result: GraphQLNamedType[], key) => { types: Object.keys(typeMap).reduce((result: GraphQLNamedType[], key) => {
result.push(typeMap[key]); result.push(typeMap[key]);
return result; return result;
@ -224,11 +251,20 @@ export function GQLiteralSchema(options: Types.SchemaConfig) {
// schema definition and/or generated types. // schema definition and/or generated types.
if (process.env.NODE_ENV !== "production") { if (process.env.NODE_ENV !== "production") {
const sortedSchema = lexicographicSortSchema(schema); const sortedSchema = lexicographicSortSchema(schema);
const generatedSchema = printSchema(sortedSchema); const generatedSchema = addDirectives(
printSchema(sortedSchema),
directives
);
const fs = require("fs"); const fs = require("fs");
const header = dedent(`
### ---
### This file was autogenerated by gqliteral
### Do not edit the contents directly
### ---
`);
fs.writeFile( fs.writeFile(
options.definitionFilePath, options.definitionFilePath,
generatedSchema, [header, generatedSchema].join("\n\n"),
(err: Error | null) => { (err: Error | null) => {
if (err) { if (err) {
return console.error(err); return console.error(err);

View File

@ -8,4 +8,5 @@ export {
GQLiteralSchema, GQLiteralSchema,
GQLiteralScalar, GQLiteralScalar,
GQLiteralAbstractType, GQLiteralAbstractType,
GQLiteralDirective,
} from "./definitions"; } from "./definitions";

View File

@ -6,9 +6,8 @@ import {
GraphQLUnionType, GraphQLUnionType,
GraphQLEnumType, GraphQLEnumType,
GraphQLIsTypeOfFn, GraphQLIsTypeOfFn,
GraphQLInputFieldConfigMap,
GraphQLFieldConfigMap,
GraphQLResolveInfo, GraphQLResolveInfo,
DirectiveLocationEnum,
} from "graphql"; } from "graphql";
import { addMix, dedent } from "./utils"; import { addMix, dedent } from "./utils";
import { SchemaBuilder } from "./builder"; import { SchemaBuilder } from "./builder";
@ -23,7 +22,7 @@ export type GQLiteralNamedType =
| GQLiteralObjectType<any, any> | GQLiteralObjectType<any, any>
| GQLiteralInterfaceType<any, any> | GQLiteralInterfaceType<any, any>
| GQLiteralUnionType<any, any> | GQLiteralUnionType<any, any>
| GQLiteralInputObjectType<any, any>; | GQLiteralInputObjectType<any>;
/** /**
* Backing type for an enum member. * Backing type for an enum member.
@ -35,6 +34,7 @@ export class GQLiteralEnumType<GenTypes = GQLiteralGen> {
this.typeConfig = { this.typeConfig = {
name, name,
members: [], members: [],
directives: [],
}; };
} }
@ -85,6 +85,17 @@ export class GQLiteralEnumType<GenTypes = GQLiteralGen> {
this.typeConfig.description = dedent(description); this.typeConfig.description = dedent(description);
} }
/**
* Should be used very rarely, adds a directive directly to the
* enum definition - for interpretation by other schema consumers.
*/
directive(name: string, args?: Record<string, any>) {
this.typeConfig.directives.push({
name,
args: args || {},
});
}
/** /**
* Internal use only. Creates the configuration to create * Internal use only. Creates the configuration to create
* the GraphQL named type. * the GraphQL named type.
@ -108,6 +119,7 @@ export class GQLiteralUnionType<
this.typeConfig = { this.typeConfig = {
name, name,
members: [], members: [],
directives: [],
}; };
} }
@ -136,11 +148,21 @@ export class GQLiteralUnionType<
* the default implementation will call `isTypeOf` on each implementing * the default implementation will call `isTypeOf` on each implementing
* Object type. * Object type.
*/ */
resolveType(typeResolver: Types.ResolveType<GenTypes, TypeName>) { resolveType(typeResolver: Types.TypeResolver<GenTypes, TypeName>) {
// @ts-ignore
this.typeConfig.resolveType = typeResolver; this.typeConfig.resolveType = typeResolver;
} }
/**
* Should be used very rarely, adds a directive directly to the
* union definition - for interpretation by other schema consumers.
*/
directive(name: string, args?: Record<string, any>) {
this.typeConfig.directives.push({
name,
args: args || {},
});
}
/** /**
* Internal use only. Creates the configuration to create * Internal use only. Creates the configuration to create
* the GraphQL named type. * the GraphQL named type.
@ -152,27 +174,22 @@ export class GQLiteralUnionType<
abstract class FieldsArgs<GenTypes = GQLiteralGen> { abstract class FieldsArgs<GenTypes = GQLiteralGen> {
idArg(options?: Types.ArgOpts) { idArg(options?: Types.ArgOpts) {
// @ts-ignore
return GQLiteralArg<GenTypes>("ID", options); return GQLiteralArg<GenTypes>("ID", options);
} }
intArg(options?: Types.ArgOpts) { intArg(options?: Types.ArgOpts) {
// @ts-ignore
return GQLiteralArg<GenTypes>("Int", options); return GQLiteralArg<GenTypes>("Int", options);
} }
floatArg(options?: Types.ArgOpts) { floatArg(options?: Types.ArgOpts) {
// @ts-ignore
return GQLiteralArg<GenTypes>("Float", options); return GQLiteralArg<GenTypes>("Float", options);
} }
boolArg(options?: Types.ArgOpts) { boolArg(options?: Types.ArgOpts) {
// @ts-ignore return GQLiteralArg<GenTypes>("Boolean", options);
return GQLiteralArg<GenTypes>("Bool", options);
} }
stringArg(options?: Types.ArgOpts) { stringArg(options?: Types.ArgOpts) {
// @ts-ignore
return GQLiteralArg<GenTypes>("String", options); return GQLiteralArg<GenTypes>("String", options);
} }
@ -196,6 +213,7 @@ export class GQLiteralObjectType<
name, name,
fields: [], fields: [],
interfaces: [], interfaces: [],
directives: [],
}; };
} }
@ -217,7 +235,6 @@ export class GQLiteralObjectType<
name: FieldName, name: FieldName,
options?: Types.OutputFieldOpts<GenTypes, TypeName, FieldName> options?: Types.OutputFieldOpts<GenTypes, TypeName, FieldName>
) { ) {
// @ts-ignore
this.field(name, "ID", options); this.field(name, "ID", options);
} }
@ -228,7 +245,6 @@ export class GQLiteralObjectType<
name: FieldName, name: FieldName,
options?: Types.OutputFieldOpts<GenTypes, TypeName, FieldName> options?: Types.OutputFieldOpts<GenTypes, TypeName, FieldName>
) { ) {
// @ts-ignore
this.field(name, "Int", options); this.field(name, "Int", options);
} }
@ -239,7 +255,6 @@ export class GQLiteralObjectType<
name: FieldName, name: FieldName,
options?: Types.OutputFieldOpts<GenTypes, TypeName, FieldName> options?: Types.OutputFieldOpts<GenTypes, TypeName, FieldName>
) { ) {
// @ts-ignore
this.field(name, "Float", options); this.field(name, "Float", options);
} }
@ -250,7 +265,6 @@ export class GQLiteralObjectType<
name: FieldName, name: FieldName,
options?: Types.OutputFieldOpts<GenTypes, TypeName, FieldName> options?: Types.OutputFieldOpts<GenTypes, TypeName, FieldName>
) { ) {
// @ts-ignore
this.field(name, "String", options); this.field(name, "String", options);
} }
@ -261,7 +275,6 @@ export class GQLiteralObjectType<
name: FieldName, name: FieldName,
options?: Types.OutputFieldOpts<GenTypes, TypeName, FieldName> options?: Types.OutputFieldOpts<GenTypes, TypeName, FieldName>
) { ) {
// @ts-ignore
this.field(name, "Boolean", options); this.field(name, "Boolean", options);
} }
@ -270,7 +283,7 @@ export class GQLiteralObjectType<
*/ */
field<FieldName extends string>( field<FieldName extends string>(
name: FieldName, name: FieldName,
type: Types.AllOutputTypes<GenTypes>, type: Types.AllOutputTypes<GenTypes> | Types.BaseScalars,
options?: Types.OutputFieldOpts<GenTypes, TypeName, FieldName> options?: Types.OutputFieldOpts<GenTypes, TypeName, FieldName>
) { ) {
this.typeConfig.fields.push({ this.typeConfig.fields.push({
@ -322,10 +335,12 @@ export class GQLiteralObjectType<
* At this point the type will not change, but the resolver, * At this point the type will not change, but the resolver,
* defaultValue, property, or description fields can. * defaultValue, property, or description fields can.
*/ */
modify<FieldName extends string>( modify<FieldName extends Types.ObjectTypeFields<GenTypes, TypeName>>(
field: FieldName, field: FieldName,
options?: Types.ModifyFieldOpts<GenTypes, TypeName, FieldName> options?: Types.ModifyFieldOpts<GenTypes, TypeName, FieldName>
) {} ) {
throw new Error("TODO");
}
/** /**
* Supply the default field resolver for all members of this type * Supply the default field resolver for all members of this type
@ -339,6 +354,17 @@ export class GQLiteralObjectType<
this.typeConfig.defaultResolver = resolverFn; this.typeConfig.defaultResolver = resolverFn;
} }
/**
* Should be used very rarely, adds a directive directly to the
* object definition - for interpretation by other schema consumers.
*/
directive(name: string, args?: Record<string, any>) {
this.typeConfig.directives.push({
name,
args: args || {},
});
}
/** /**
* Internal use only. Creates the configuration to create * Internal use only. Creates the configuration to create
* the GraphQL named type. * the GraphQL named type.
@ -361,6 +387,7 @@ export class GQLiteralInterfaceType<
this.typeConfig = { this.typeConfig = {
name, name,
fields: [], fields: [],
directives: [],
}; };
} }
@ -382,7 +409,6 @@ export class GQLiteralInterfaceType<
name: FieldName, name: FieldName,
options?: Types.OutputFieldOpts<GenTypes, TypeName, FieldName> options?: Types.OutputFieldOpts<GenTypes, TypeName, FieldName>
) { ) {
// @ts-ignore
this.field(name, "ID", options); this.field(name, "ID", options);
} }
@ -393,7 +419,6 @@ export class GQLiteralInterfaceType<
name: FieldName, name: FieldName,
options?: Types.OutputFieldOpts<GenTypes, TypeName, FieldName> options?: Types.OutputFieldOpts<GenTypes, TypeName, FieldName>
) { ) {
// @ts-ignore
this.field(name, "Int", options); this.field(name, "Int", options);
} }
@ -404,7 +429,6 @@ export class GQLiteralInterfaceType<
name: FieldName, name: FieldName,
options?: Types.OutputFieldOpts<GenTypes, TypeName, FieldName> options?: Types.OutputFieldOpts<GenTypes, TypeName, FieldName>
) { ) {
// @ts-ignore
this.field(name, "Float", options); this.field(name, "Float", options);
} }
@ -415,7 +439,6 @@ export class GQLiteralInterfaceType<
name: FieldName, name: FieldName,
options?: Types.OutputFieldOpts<GenTypes, TypeName, FieldName> options?: Types.OutputFieldOpts<GenTypes, TypeName, FieldName>
) { ) {
// @ts-ignore
this.field(name, "String", options); this.field(name, "String", options);
} }
@ -426,7 +449,6 @@ export class GQLiteralInterfaceType<
name: FieldName, name: FieldName,
options?: Types.OutputFieldOpts<GenTypes, TypeName, FieldName> options?: Types.OutputFieldOpts<GenTypes, TypeName, FieldName>
) { ) {
// @ts-ignore
this.field(name, "Boolean", options); this.field(name, "Boolean", options);
} }
@ -435,7 +457,7 @@ export class GQLiteralInterfaceType<
*/ */
field<FieldName extends string>( field<FieldName extends string>(
name: FieldName, name: FieldName,
type: Types.AllOutputTypes<GenTypes>, type: Types.AllOutputTypes<GenTypes> | Types.BaseScalars,
options?: Types.OutputFieldOpts<GenTypes, TypeName, FieldName> options?: Types.OutputFieldOpts<GenTypes, TypeName, FieldName>
) { ) {
this.typeConfig.fields.push({ this.typeConfig.fields.push({
@ -460,11 +482,21 @@ export class GQLiteralInterfaceType<
* the default implementation will call `isTypeOf` on each implementing * the default implementation will call `isTypeOf` on each implementing
* Object type. * Object type.
*/ */
resolveType(typeResolver: Types.ResolveType<GenTypes, TypeName>) { resolveType(typeResolver: Types.TypeResolver<GenTypes, TypeName>) {
// @ts-ignore
this.typeConfig.resolveType = typeResolver; this.typeConfig.resolveType = typeResolver;
} }
/**
* Should be used very rarely, adds a directive directly to the
* interface definition - for interpretation by other schema consumers.
*/
directive(name: string, args?: Record<string, any>) {
this.typeConfig.directives.push({
name,
args: args || {},
});
}
/** /**
* Internal use only. Creates the configuration to create * Internal use only. Creates the configuration to create
* the GraphQL named type. * the GraphQL named type.
@ -474,16 +506,14 @@ export class GQLiteralInterfaceType<
} }
} }
export class GQLiteralInputObjectType< export class GQLiteralInputObjectType<GenTypes = GQLiteralGen> {
GenTypes = GQLiteralGen,
TypeName extends string = any
> {
protected typeConfig: Types.InputTypeConfig; protected typeConfig: Types.InputTypeConfig;
constructor(name: string) { constructor(name: string) {
this.typeConfig = { this.typeConfig = {
name, name,
fields: [], fields: [],
directives: [],
}; };
} }
@ -492,9 +522,8 @@ export class GQLiteralInputObjectType<
*/ */
id<FieldName extends string>( id<FieldName extends string>(
name: FieldName, name: FieldName,
options?: Types.OutputFieldOpts<GenTypes, TypeName, FieldName> options?: Types.InputFieldOpts
) { ) {
// @ts-ignore
this.field(name, "ID", options); this.field(name, "ID", options);
} }
@ -503,9 +532,8 @@ export class GQLiteralInputObjectType<
*/ */
int<FieldName extends string>( int<FieldName extends string>(
name: FieldName, name: FieldName,
options?: Types.OutputFieldOpts<GenTypes, TypeName, FieldName> options?: Types.InputFieldOpts
) { ) {
// @ts-ignore
this.field(name, "Int", options); this.field(name, "Int", options);
} }
@ -514,9 +542,8 @@ export class GQLiteralInputObjectType<
*/ */
float<FieldName extends string>( float<FieldName extends string>(
name: FieldName, name: FieldName,
options?: Types.OutputFieldOpts<GenTypes, TypeName, FieldName> options?: Types.InputFieldOpts
) { ) {
// @ts-ignore
this.field(name, "Float", options); this.field(name, "Float", options);
} }
@ -525,9 +552,8 @@ export class GQLiteralInputObjectType<
*/ */
string<FieldName extends string>( string<FieldName extends string>(
name: FieldName, name: FieldName,
options?: Types.OutputFieldOpts<GenTypes, TypeName, FieldName> options?: Types.InputFieldOpts
) { ) {
// @ts-ignore
this.field(name, "String", options); this.field(name, "String", options);
} }
@ -536,9 +562,8 @@ export class GQLiteralInputObjectType<
*/ */
boolean<FieldName extends string>( boolean<FieldName extends string>(
name: FieldName, name: FieldName,
options?: Types.OutputFieldOpts<GenTypes, TypeName, FieldName> options?: Types.InputFieldOpts
) { ) {
// @ts-ignore
this.field(name, "Boolean", options); this.field(name, "Boolean", options);
} }
@ -547,8 +572,8 @@ export class GQLiteralInputObjectType<
*/ */
field<FieldName extends string>( field<FieldName extends string>(
name: FieldName, name: FieldName,
type: Types.AllInputTypes<GenTypes>, type: Types.AllInputTypes<GenTypes> | Types.BaseScalars,
options?: Types.OutputFieldOpts<GenTypes, TypeName, FieldName> options?: Types.InputFieldOpts
) { ) {
this.typeConfig.fields.push({ this.typeConfig.fields.push({
item: Types.NodeType.FIELD, item: Types.NodeType.FIELD,
@ -564,6 +589,17 @@ export class GQLiteralInputObjectType<
this.typeConfig.description = dedent(description); this.typeConfig.description = dedent(description);
} }
/**
* Should be used very rarely, adds a directive directly to the
* input object definition - for interpretation by other schema consumers.
*/
directive(name: string, args?: Record<string, any>) {
this.typeConfig.directives.push({
name,
args: args || {},
});
}
/** /**
* Internal use only. Creates the configuration to create * Internal use only. Creates the configuration to create
* the GraphQL named type. * the GraphQL named type.
@ -596,7 +632,6 @@ export class GQLiteralAbstract<GenTypes> extends FieldsArgs {
name: FieldName, name: FieldName,
options?: Types.AbstractFieldOpts<GenTypes, FieldName> options?: Types.AbstractFieldOpts<GenTypes, FieldName>
) { ) {
// @ts-ignore
this.field(name, "ID", options); this.field(name, "ID", options);
} }
@ -607,7 +642,6 @@ export class GQLiteralAbstract<GenTypes> extends FieldsArgs {
name: FieldName, name: FieldName,
options?: Types.AbstractFieldOpts<GenTypes, FieldName> options?: Types.AbstractFieldOpts<GenTypes, FieldName>
) { ) {
// @ts-ignore
this.field(name, "Int", options); this.field(name, "Int", options);
} }
@ -618,7 +652,6 @@ export class GQLiteralAbstract<GenTypes> extends FieldsArgs {
name: FieldName, name: FieldName,
options?: Types.AbstractFieldOpts<GenTypes, FieldName> options?: Types.AbstractFieldOpts<GenTypes, FieldName>
) { ) {
// @ts-ignore
this.field(name, "Float", options); this.field(name, "Float", options);
} }
@ -629,7 +662,6 @@ export class GQLiteralAbstract<GenTypes> extends FieldsArgs {
name: FieldName, name: FieldName,
options?: Types.AbstractFieldOpts<GenTypes, FieldName> options?: Types.AbstractFieldOpts<GenTypes, FieldName>
) { ) {
// @ts-ignore
this.field(name, "String", options); this.field(name, "String", options);
} }
@ -640,7 +672,6 @@ export class GQLiteralAbstract<GenTypes> extends FieldsArgs {
name: FieldName, name: FieldName,
options?: Types.AbstractFieldOpts<GenTypes, FieldName> options?: Types.AbstractFieldOpts<GenTypes, FieldName>
) { ) {
// @ts-ignore
this.field(name, "Boolean", options); this.field(name, "Boolean", options);
} }
@ -649,7 +680,7 @@ export class GQLiteralAbstract<GenTypes> extends FieldsArgs {
*/ */
field<FieldName extends string>( field<FieldName extends string>(
name: FieldName, name: FieldName,
type: Types.AllInputTypes<GenTypes>, type: Types.AllInputTypes<GenTypes> | Types.BaseScalars,
options?: Types.AbstractFieldOpts<GenTypes, FieldName> options?: Types.AbstractFieldOpts<GenTypes, FieldName>
) { ) {
this.typeConfig.fields.push({ this.typeConfig.fields.push({
@ -663,3 +694,92 @@ export class GQLiteralAbstract<GenTypes> extends FieldsArgs {
return this.typeConfig; return this.typeConfig;
} }
} }
export class GQLiteralDirectiveType<GenTypes = GQLiteralGen> {
protected typeConfig: Types.DirectiveTypeConfig;
constructor(readonly name: string) {
this.typeConfig = {
name,
locations: [],
args: [],
};
}
description(description: string) {
this.typeConfig.description = dedent(description);
}
locations(...location: DirectiveLocationEnum[]) {
this.typeConfig.locations.push(...location);
}
/**
* Add an ID field type to the object schema.
*/
id<FieldName extends string>(
name: FieldName,
options?: Types.InputFieldOpts
) {
this.field(name, "ID", options);
}
/**
* Add an Int field type to the object schema.
*/
int<FieldName extends string>(
name: FieldName,
options?: Types.InputFieldOpts
) {
this.field(name, "Int", options);
}
/**
* Add a Float field type to the object schema.
*/
float<FieldName extends string>(
name: FieldName,
options?: Types.InputFieldOpts
) {
this.field(name, "Float", options);
}
/**
* Add a String field type to the object schema.
*/
string<FieldName extends string>(
name: FieldName,
options?: Types.InputFieldOpts
) {
this.field(name, "String", options);
}
/**
* Add a Boolean field type to the object schema.
*/
boolean<FieldName extends string>(
name: FieldName,
options?: Types.InputFieldOpts
) {
this.field(name, "Boolean", options);
}
/**
* Adds a new field to the input object type
*/
field<FieldName extends string>(
name: FieldName,
type: Types.AllInputTypes<GenTypes> | Types.BaseScalars,
options?: Types.InputFieldOpts
) {
this.typeConfig.args.push({
name,
type,
...options,
});
}
buildType(builder: SchemaBuilder) {
return builder.directiveType(this.typeConfig);
}
}

View File

@ -80,7 +80,8 @@ export const makeTypes = (
}; };
const tmpl = ` const tmpl = `
/** /**
* This file is autogenerated. Do not edit directly. * This file is automatically generated by gqliteral
* Do not make changes directly
*/ */
${headerPrefix.join("\n")} ${headerPrefix.join("\n")}
@ -91,8 +92,6 @@ export const makeTypes = (
.replace(/.tsx?$/, "")}"`; .replace(/.tsx?$/, "")}"`;
})} })}
export type BaseScalarNames = "String" | "Int" | "Float" | "ID" | "Boolean";
${map(context.interfaces, (i) => { ${map(context.interfaces, (i) => {
const typeName = `${prefix}_Interface_${i.name}`; const typeName = `${prefix}_Interface_${i.name}`;
@ -172,7 +171,7 @@ export const makeTypes = (
} }
export interface ${prefix}InputObjects { export interface ${prefix}InputObjects {
${map(context.inputTypes, (i) => { ${map(context.inputTypes, (i) => {
return `${i.name}: any;`; return `${i.name}: any; // TODO!!`;
})} })}
} }
export interface ${prefix}Objects { export interface ${prefix}Objects {
@ -187,13 +186,11 @@ export const makeTypes = (
unions: ${prefix}Unions; unions: ${prefix}Unions;
scalars: ${prefix}Scalars; scalars: ${prefix}Scalars;
interfaces: ${prefix}Interfaces; interfaces: ${prefix}Interfaces;
allInputTypes:
// For simplicity in autocomplete:
availableInputTypes: BaseScalarNames
| Extract<keyof ${prefix}InputObjects, string> | Extract<keyof ${prefix}InputObjects, string>
| Extract<keyof ${prefix}Enums, string> | Extract<keyof ${prefix}Enums, string>
| Extract<keyof ${prefix}Scalars, string>; | Extract<keyof ${prefix}Scalars, string>;
availableOutputTypes: BaseScalarNames allOutputTypes:
| Extract<keyof ${prefix}Objects, string> | Extract<keyof ${prefix}Objects, string>
| Extract<keyof ${prefix}Enums, string> | Extract<keyof ${prefix}Enums, string>
| Extract<keyof ${prefix}Unions, string> | Extract<keyof ${prefix}Unions, string>

View File

@ -2,9 +2,10 @@ import {
GraphQLFieldResolver, GraphQLFieldResolver,
GraphQLScalarTypeConfig, GraphQLScalarTypeConfig,
GraphQLNamedType, GraphQLNamedType,
GraphQLTypeResolver,
GraphQLIsTypeOfFn, GraphQLIsTypeOfFn,
GraphQLResolveInfo, GraphQLResolveInfo,
DirectiveLocationEnum,
GraphQLDirective,
} from "graphql"; } from "graphql";
import { GQLiteralAbstract } from "./objects"; import { GQLiteralAbstract } from "./objects";
import { GQLiteralTypegenOptions } from "./typegen"; import { GQLiteralTypegenOptions } from "./typegen";
@ -19,6 +20,12 @@ export enum NodeType {
export type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>; export type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;
export type BaseScalars = "String" | "Int" | "Float" | "ID" | "Boolean";
export type MaybePromise<T> = Promise<T> | T;
export type Maybe<T> = T | null;
export type MixDef = { export type MixDef = {
item: NodeType.MIX; item: NodeType.MIX;
typeName: string; typeName: string;
@ -62,6 +69,25 @@ export interface EnumMemberConfig {
description?: string; description?: string;
} }
export interface BuildTypes {
types: Record<string, GraphQLNamedType>;
directives: BuildTypesDirectives;
}
export interface BuildTypesDirectives {
definitions: GraphQLDirective[];
uses: { [K in DirectiveLocationEnum]?: DirectiveUse };
hasUses: boolean;
}
export interface DirectiveUse {
location: DirectiveLocationEnum;
typeName: string;
args: [];
argName?: string;
fieldName?: string;
}
/** /**
* When you're mixing types/partials, you can pick or omit * When you're mixing types/partials, you can pick or omit
* fields from the types you're mixing in. * fields from the types you're mixing in.
@ -93,20 +119,20 @@ export interface CommonOpts {
* object definition * object definition
*/ */
description?: string; description?: string;
/**
* Whether the field / property is even considered to be defined on the schema.
* Useful if you want to feature-flag
*/
availableIf?: any;
/** /**
* Info about a field deprecation. Formatted as a string and provided with the * Info about a field deprecation. Formatted as a string and provided with the
* deprecated directive on field/enum types and as a comment on input fields. * deprecated directive on field/enum types and as a comment on input fields.
*/ */
deprecation?: string | DeprecationInfo; deprecation?: string | DeprecationInfo;
/** /**
* Any directives for the type * Any directives for the field or argument
*/ */
directives?: any[]; directives?: DirectiveOption[];
}
export interface DirectiveOption {
name: string;
args: Record<string, any>;
} }
export interface FieldOpts extends CommonOpts { export interface FieldOpts extends CommonOpts {
@ -144,6 +170,13 @@ export type ArgDefinition = Readonly<
} }
>; >;
export type DirectiveArgDefinition = Readonly<
ArgOpts & {
name: string;
type: any; // TODO: Make type safe
}
>;
export type OutputFieldArgs = Record<string, ArgDefinition>; export type OutputFieldArgs = Record<string, ArgDefinition>;
export interface OutputFieldOpts< export interface OutputFieldOpts<
@ -178,7 +211,7 @@ export interface AbstractFieldOpts<GenTypes, FieldName> extends FieldOpts {}
export type ModifyFieldOpts<GenTypes, TypeName, FieldName> = Omit< export type ModifyFieldOpts<GenTypes, TypeName, FieldName> = Omit<
OutputFieldOpts<GenTypes, TypeName, FieldName>, OutputFieldOpts<GenTypes, TypeName, FieldName>,
"args" | "list" | "listItemNullable" | "nullable" | "availableIf" "args" | "list" | "listItemNullable" | "nullable"
>; >;
export interface InputFieldOpts extends FieldOpts {} export interface InputFieldOpts extends FieldOpts {}
@ -199,7 +232,7 @@ interface HasFields {
} }
interface HasDirectives { interface HasDirectives {
directives: any[]; directives: DirectiveOption[];
} }
interface Named { interface Named {
@ -232,29 +265,34 @@ export interface Nullability {
nullability?: NullabilityConfig; nullability?: NullabilityConfig;
} }
export interface EnumTypeConfig extends Named, SharedTypeConfig { export interface EnumTypeConfig extends Named, HasDirectives, SharedTypeConfig {
members: EnumDefType[]; members: EnumDefType[];
} }
export interface UnionTypeConfig extends Named, SharedTypeConfig { export interface UnionTypeConfig
extends Named,
HasDirectives,
SharedTypeConfig {
members: UnionDefType[]; members: UnionDefType[];
/** /**
* Optionally provide a custom type resolver function. If one is not provided, * Optionally provide a custom type resolver function. If one is not provided,
* the default implementation will call `isTypeOf` on each implementing * the default implementation will call `isTypeOf` on each implementing
* Object type. * Object type.
*/ */
resolveType?: GraphQLTypeResolver<any, any>; resolveType?: TypeResolver<any, any>;
} }
export interface InputTypeConfig export interface InputTypeConfig
extends Named, extends Named,
HasFields, HasFields,
HasDirectives,
SharedTypeConfig, SharedTypeConfig,
Nullability {} Nullability {}
export interface ObjectTypeConfig export interface ObjectTypeConfig
extends Named, extends Named,
HasFields, HasFields,
HasDirectives,
SharedTypeConfig, SharedTypeConfig,
Nullability, Nullability,
DefaultResolver { DefaultResolver {
@ -273,9 +311,16 @@ export interface AbstractTypeConfig {
fields: FieldConfig[]; fields: FieldConfig[];
} }
export interface DirectiveTypeConfig extends Named {
description?: string;
locations: DirectiveLocationEnum[];
args: DirectiveArgDefinition[];
}
export interface InterfaceTypeConfig export interface InterfaceTypeConfig
extends Named, extends Named,
HasFields, HasFields,
HasDirectives,
SharedTypeConfig, SharedTypeConfig,
Nullability, Nullability,
DefaultResolver { DefaultResolver {
@ -284,7 +329,7 @@ export interface InterfaceTypeConfig
* the default implementation will call `isTypeOf` on each implementing * the default implementation will call `isTypeOf` on each implementing
* Object type. * Object type.
*/ */
resolveType?: GraphQLTypeResolver<any, any>; resolveType?: TypeResolver<any, any>;
} }
export interface SchemaConfig extends Nullability, DefaultResolver { export interface SchemaConfig extends Nullability, DefaultResolver {
@ -299,13 +344,9 @@ export interface SchemaConfig extends Nullability, DefaultResolver {
*/ */
definitionFilePath: string | false; definitionFilePath: string | false;
/** /**
* Generates the types for intellisense/typescript * Generates the types for Intellisense/TypeScript
*/ */
typeGeneration?: GQLiteralTypegenOptions; typeGeneration?: GQLiteralTypegenOptions;
/**
* Forces type-safety by not falling back to strings
*/
forceTypeSafety?: boolean;
} }
export type NullabilityConfig = { export type NullabilityConfig = {
@ -371,19 +412,15 @@ export type NullabilityConfig = {
inputListItem?: boolean; inputListItem?: boolean;
}; };
export type GetTypeFn = (t: string) => GraphQLNamedType; /**
* Generated type helpers:
*/
export type ResolveType<GenTypes, TypeName> = ( export type TypeResolver<GenTypes, TypeName> = (
root: RootValue<GenTypes, TypeName> root: RootValue<GenTypes, TypeName>,
) => InterfaceName<GenTypes, TypeName>; context: ContextValue<GenTypes>,
info: GraphQLResolveInfo
type GenTypesFieldsShape = Record< ) => MaybePromise<Maybe<InterfaceName<GenTypes, TypeName>>>;
string,
{
returnType: any;
args: any;
}
>;
/** /**
* Helpers for handling the generated schema * Helpers for handling the generated schema
@ -396,8 +433,8 @@ export type GenTypesShape = {
inputObjects: Record<string, any>; inputObjects: Record<string, any>;
unions: Record<string, any>; unions: Record<string, any>;
scalars: Record<string, any>; scalars: Record<string, any>;
availableInputTypes: string; allInputTypes: string;
availableOutputTypes: string; allOutputTypes: string;
}; };
export type OutputNames<GenTypes> = GenTypes extends GenTypesShape export type OutputNames<GenTypes> = GenTypes extends GenTypesShape
@ -418,6 +455,15 @@ export type UnionName<GenTypes> = GenTypes extends GenTypesShape
? Extract<keyof GenTypes["unions"], string> ? Extract<keyof GenTypes["unions"], string>
: never; : never;
export type ObjectTypeFields<
GenTypes,
TypeName
> = GenTypes extends GenTypesShape
? TypeName extends keyof GenTypes["objects"]
? Extract<keyof GenTypes["objects"][TypeName]["fields"], string>
: never
: unknown;
export type EnumMembers< export type EnumMembers<
GenTypes, GenTypes,
EnumName extends string EnumName extends string
@ -440,18 +486,18 @@ export type InputObjectTypeDef<
? TypeName extends keyof GenTypes["inputObjects"] ? TypeName extends keyof GenTypes["inputObjects"]
? GenTypes["inputObjects"][TypeName] ? GenTypes["inputObjects"][TypeName]
: never : never
: string; : unknown;
export type AllInterfaces<GenTypes> = GenTypes extends GenTypesShape export type AllInterfaces<GenTypes> = GenTypes extends GenTypesShape
? Extract<keyof GenTypes["interfaces"], string> ? Extract<keyof GenTypes["interfaces"], string>
: never; : never;
export type AllInputTypes<GenTypes> = GenTypes extends GenTypesShape export type AllInputTypes<GenTypes> = GenTypes extends GenTypesShape
? GenTypes["availableInputTypes"] ? GenTypes["allInputTypes"]
: never; : never;
export type AllOutputTypes<GenTypes> = GenTypes extends GenTypesShape export type AllOutputTypes<GenTypes> = GenTypes extends GenTypesShape
? GenTypes["availableOutputTypes"] ? GenTypes["allOutputTypes"]
: never; : never;
export type RootValue<GenTypes, TypeName> = GenTypes extends GenTypesShape export type RootValue<GenTypes, TypeName> = GenTypes extends GenTypesShape
@ -497,3 +543,8 @@ export type ResultValue<
: never : never
: never : never
: never; : never;
export type DirectiveConfig<GenTypes, DirectiveName> = {
locations: DirectiveLocationEnum[];
args?: [];
};

View File

@ -1,8 +1,15 @@
import { GraphQLFieldResolver, GraphQLNamedType, isNamedType } from "graphql"; import {
GraphQLFieldResolver,
isNamedType,
parse,
visit,
print,
isDirective,
} from "graphql";
import { SchemaBuilder } from "./builder"; import { SchemaBuilder } from "./builder";
import * as Types from "./types"; import * as Types from "./types";
import { GQLiteralTypeWrapper } from "./definitions"; import { GQLiteralTypeWrapper } from "./definitions";
import { GQLiteralAbstract } from "./objects"; import { GQLiteralAbstract, GQLiteralDirectiveType } from "./objects";
/** /**
* Builds the types, normalizing the "types" passed into the schema for a * Builds the types, normalizing the "types" passed into the schema for a
@ -11,7 +18,7 @@ import { GQLiteralAbstract } from "./objects";
export function buildTypes( export function buildTypes(
types: any, types: any,
config?: Pick<Types.SchemaConfig, "nullability" | "defaultResolver"> config?: Pick<Types.SchemaConfig, "nullability" | "defaultResolver">
): Record<string, GraphQLNamedType> { ): Types.BuildTypes {
const builder = new SchemaBuilder(config || {}); const builder = new SchemaBuilder(config || {});
addTypes(builder, types); addTypes(builder, types);
return builder.getFinalTypeMap(); return builder.getFinalTypeMap();
@ -40,8 +47,13 @@ export function addMix(
} }
function addTypes(builder: SchemaBuilder, types: any) { function addTypes(builder: SchemaBuilder, types: any) {
if (!types) {
return;
}
if (types instanceof GQLiteralTypeWrapper || isNamedType(types)) { if (types instanceof GQLiteralTypeWrapper || isNamedType(types)) {
builder.addType(types); builder.addType(types);
} else if (types instanceof GQLiteralDirectiveType || isDirective(types)) {
builder.addDirective(types);
} else if (Array.isArray(types)) { } else if (Array.isArray(types)) {
types.forEach((typeDef) => addTypes(builder, typeDef)); types.forEach((typeDef) => addTypes(builder, typeDef));
} else if (isObject(types)) { } else if (isObject(types)) {
@ -90,6 +102,26 @@ export const propertyFieldResolver = (
} }
}; };
/**
* If there are directives defined to be used on the types,
* we need to add these manually to the AST. Directives shouldn't
* be too common, since we're defining the schema programatically
* rather than by hand.
*/
export function addDirectives(
schema: string,
directives: Types.BuildTypesDirectives
) {
if (Object.keys(directives.uses).length > 0) {
return print(
visit(parse(schema), {
// TODO: Add directives
})
);
}
return schema;
}
// ---------------------------- // ----------------------------
/** /**

244
yarn.lock
View File

@ -16,44 +16,12 @@
esutils "^2.0.2" esutils "^2.0.2"
js-tokens "^4.0.0" js-tokens "^4.0.0"
"@graphql-modules/epoxy@0.1.9":
version "0.1.9"
resolved "https://registry.yarnpkg.com/@graphql-modules/epoxy/-/epoxy-0.1.9.tgz#291879d517ba4473ea334edbb137a2cc6aed384c"
dependencies:
"@graphql-modules/logger" "0.1.9"
"@types/deepmerge" "2.1.0"
deepmerge "2.2.1"
graphql-tools "4.0.2"
tslib "1.9.3"
"@graphql-modules/logger@0.1.9":
version "0.1.9"
resolved "https://registry.yarnpkg.com/@graphql-modules/logger/-/logger-0.1.9.tgz#768186df12ad488623ef7231d1bf096fe1610b76"
dependencies:
moment "2.22.2"
tslib "1.9.3"
winston "3.1.0"
"@samverschueren/stream-to-observable@^0.3.0": "@samverschueren/stream-to-observable@^0.3.0":
version "0.3.0" version "0.3.0"
resolved "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz#ecdf48d532c58ea477acfcab80348424f8d0662f" resolved "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz#ecdf48d532c58ea477acfcab80348424f8d0662f"
dependencies: dependencies:
any-observable "^0.3.0" any-observable "^0.3.0"
"@types/babel-types@*":
version "7.0.4"
resolved "https://registry.yarnpkg.com/@types/babel-types/-/babel-types-7.0.4.tgz#bfd5b0d0d1ba13e351dff65b6e52783b816826c8"
"@types/babylon@6.16.3":
version "6.16.3"
resolved "https://registry.yarnpkg.com/@types/babylon/-/babylon-6.16.3.tgz#c2937813a89fcb5e79a00062fc4a8b143e7237bb"
dependencies:
"@types/babel-types" "*"
"@types/deepmerge@2.1.0":
version "2.1.0"
resolved "http://registry.npmjs.org/@types/deepmerge/-/deepmerge-2.1.0.tgz#22f175e5cb55874fe818caa6fd50a1d98fc3d748"
"@types/graphql@14.0.3": "@types/graphql@14.0.3":
version "14.0.3" version "14.0.3"
resolved "https://registry.yarnpkg.com/@types/graphql/-/graphql-14.0.3.tgz#389e2e5b83ecdb376d9f98fae2094297bc112c1c" resolved "https://registry.yarnpkg.com/@types/graphql/-/graphql-14.0.3.tgz#389e2e5b83ecdb376d9f98fae2094297bc112c1c"
@ -62,10 +30,6 @@
version "4.0.39" version "4.0.39"
resolved "https://registry.yarnpkg.com/@types/handlebars/-/handlebars-4.0.39.tgz#961fb54db68030890942e6aeffe9f93a957807bd" resolved "https://registry.yarnpkg.com/@types/handlebars/-/handlebars-4.0.39.tgz#961fb54db68030890942e6aeffe9f93a957807bd"
"@types/is-glob@4.0.0":
version "4.0.0"
resolved "https://registry.yarnpkg.com/@types/is-glob/-/is-glob-4.0.0.tgz#fb8a2bff539025d4dcd6d5efe7689e03341b876d"
"@types/jest@^23.3.7": "@types/jest@^23.3.7":
version "23.3.7" version "23.3.7"
resolved "https://registry.yarnpkg.com/@types/jest/-/jest-23.3.7.tgz#77f9a4332ccf8db680a31818ade3ee454c831a79" resolved "https://registry.yarnpkg.com/@types/jest/-/jest-23.3.7.tgz#77f9a4332ccf8db680a31818ade3ee454c831a79"
@ -74,14 +38,6 @@
version "10.12.2" version "10.12.2"
resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.2.tgz#d77f9faa027cadad9c912cd47f4f8b07b0fb0864" resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.2.tgz#d77f9faa027cadad9c912cd47f4f8b07b0fb0864"
"@types/prettier@1.13.2":
version "1.13.2"
resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-1.13.2.tgz#ffe96278e712a8d4e467e367a338b05e22872646"
"@types/valid-url@1.0.2":
version "1.0.2"
resolved "http://registry.npmjs.org/@types/valid-url/-/valid-url-1.0.2.tgz#60fa435ce24bfd5ba107b8d2a80796aeaf3a8f45"
abab@^2.0.0: abab@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.0.tgz#aba0ab4c5eee2d4c79d3487d85450fb2376ebb0f" resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.0.tgz#aba0ab4c5eee2d4c79d3487d85450fb2376ebb0f"
@ -401,14 +357,6 @@ babel-traverse@^6.0.0, babel-traverse@^6.18.0, babel-traverse@^6.26.0:
invariant "^2.2.2" invariant "^2.2.2"
lodash "^4.17.4" lodash "^4.17.4"
babel-types@7.0.0-beta.3:
version "7.0.0-beta.3"
resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-7.0.0-beta.3.tgz#cd927ca70e0ae8ab05f4aab83778cfb3e6eb20b4"
dependencies:
esutils "^2.0.2"
lodash "^4.2.0"
to-fast-properties "^2.0.0"
babel-types@^6.0.0, babel-types@^6.18.0, babel-types@^6.26.0: babel-types@^6.0.0, babel-types@^6.18.0, babel-types@^6.26.0:
version "6.26.0" version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497"
@ -418,10 +366,6 @@ babel-types@^6.0.0, babel-types@^6.18.0, babel-types@^6.26.0:
lodash "^4.17.4" lodash "^4.17.4"
to-fast-properties "^1.0.3" to-fast-properties "^1.0.3"
babylon@7.0.0-beta.47:
version "7.0.0-beta.47"
resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.47.tgz#6d1fa44f0abec41ab7c780481e62fd9aafbdea80"
babylon@^6.18.0: babylon@^6.18.0:
version "6.18.0" version "6.18.0"
resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3"
@ -611,16 +555,6 @@ cli-cursor@^1.0.2:
dependencies: dependencies:
restore-cursor "^1.0.1" restore-cursor "^1.0.1"
cli-cursor@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
dependencies:
restore-cursor "^2.0.0"
cli-spinners@^1.1.0:
version "1.3.1"
resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-1.3.1.tgz#002c1990912d0d59580c93bd36c056de99e4259a"
cli-truncate@^0.2.1: cli-truncate@^0.2.1:
version "0.2.1" version "0.2.1"
resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574"
@ -636,10 +570,6 @@ cliui@^4.0.0:
strip-ansi "^4.0.0" strip-ansi "^4.0.0"
wrap-ansi "^2.0.0" wrap-ansi "^2.0.0"
clone@^1.0.2:
version "1.0.4"
resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
co@^4.6.0: co@^4.6.0:
version "4.6.0" version "4.6.0"
resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
@ -704,7 +634,7 @@ combined-stream@^1.0.6, combined-stream@~1.0.6:
dependencies: dependencies:
delayed-stream "~1.0.0" delayed-stream "~1.0.0"
commander@2.19.0, commander@^2.12.1, commander@^2.14.1, commander@^2.9.0: commander@^2.12.1, commander@^2.14.1, commander@^2.9.0:
version "2.19.0" version "2.19.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a"
@ -761,13 +691,6 @@ cosmiconfig@^5.0.2, cosmiconfig@^5.0.6:
js-yaml "^3.9.0" js-yaml "^3.9.0"
parse-json "^4.0.0" parse-json "^4.0.0"
cross-fetch@2.2.2:
version "2.2.2"
resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-2.2.2.tgz#a47ff4f7fc712daba8f6a695a11c948440d45723"
dependencies:
node-fetch "2.1.2"
whatwg-fetch "2.0.4"
cross-spawn@^5.0.1: cross-spawn@^5.0.1:
version "5.1.0" version "5.1.0"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
@ -836,22 +759,12 @@ deep-is@~0.1.3:
version "0.1.3" version "0.1.3"
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
deepmerge@2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.2.1.tgz#5d3ff22a01c00f645405a2fbc17d0778a1801170"
default-require-extensions@^1.0.0: default-require-extensions@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8" resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8"
dependencies: dependencies:
strip-bom "^2.0.0" strip-bom "^2.0.0"
defaults@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d"
dependencies:
clone "^1.0.2"
define-properties@^1.1.2: define-properties@^1.1.2:
version "1.1.3" version "1.1.3"
resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
@ -1136,7 +1049,7 @@ fast-safe-stringify@^2.0.4:
version "2.0.6" version "2.0.6"
resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.0.6.tgz#04b26106cc56681f51a044cfc0d76cf0008ac2c2" resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.0.6.tgz#04b26106cc56681f51a044cfc0d76cf0008ac2c2"
fb-watchman@2.0.0, fb-watchman@^2.0.0: fb-watchman@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58"
dependencies: dependencies:
@ -1307,7 +1220,7 @@ glob-parent@^2.0.0:
dependencies: dependencies:
is-glob "^2.0.0" is-glob "^2.0.0"
glob@7.1.3, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2: glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2:
version "7.1.3" version "7.1.3"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1"
dependencies: dependencies:
@ -1326,34 +1239,6 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.2:
version "4.1.11" version "4.1.11"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
graphql-code-generator@^0.13.0:
version "0.13.0"
resolved "https://registry.yarnpkg.com/graphql-code-generator/-/graphql-code-generator-0.13.0.tgz#fd71fe9cd913f5ca14eedd7ce39c4e2ff6053ee1"
dependencies:
"@graphql-modules/epoxy" "0.1.9"
"@types/babylon" "6.16.3"
"@types/is-glob" "4.0.0"
"@types/prettier" "1.13.2"
"@types/valid-url" "1.0.2"
babel-types "7.0.0-beta.3"
babylon "7.0.0-beta.47"
chalk "2.4.1"
commander "2.19.0"
fb-watchman "2.0.0"
glob "7.1.3"
graphql-codegen-compiler "0.13.0"
graphql-codegen-core "0.13.0"
graphql-config "2.2.1"
graphql-import "0.7.1"
is-glob "4.0.0"
is-valid-path "0.1.1"
mkdirp "0.5.1"
ora "3.0.0"
pify "4.0.1"
prettier "1.14.3"
request "2.88.0"
valid-url "1.0.9"
graphql-codegen-compiler@0.13.0: graphql-codegen-compiler@0.13.0:
version "0.13.0" version "0.13.0"
resolved "https://registry.yarnpkg.com/graphql-codegen-compiler/-/graphql-codegen-compiler-0.13.0.tgz#5d7787849ce5b109f2ca7af681f428a1633c6b39" resolved "https://registry.yarnpkg.com/graphql-codegen-compiler/-/graphql-codegen-compiler-0.13.0.tgz#5d7787849ce5b109f2ca7af681f428a1633c6b39"
@ -1377,47 +1262,10 @@ graphql-codegen-core@0.13.0:
ts-log "2.1.3" ts-log "2.1.3"
winston "3.1.0" winston "3.1.0"
graphql-codegen-typescript-template@^0.13.0:
version "0.13.0"
resolved "https://registry.yarnpkg.com/graphql-codegen-typescript-template/-/graphql-codegen-typescript-template-0.13.0.tgz#41398687cbf279f1d97d8cfb8aa7c412bf0e7192"
graphql-config@2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/graphql-config/-/graphql-config-2.2.1.tgz#5fd0ec77ac7428ca5fb2026cf131be10151a0cb2"
dependencies:
graphql-import "^0.7.1"
graphql-request "^1.5.0"
js-yaml "^3.10.0"
lodash "^4.17.4"
minimatch "^3.0.4"
graphql-import@0.7.1, graphql-import@^0.7.1:
version "0.7.1"
resolved "https://registry.yarnpkg.com/graphql-import/-/graphql-import-0.7.1.tgz#4add8d91a5f752d764b0a4a7a461fcd93136f223"
dependencies:
lodash "^4.17.4"
resolve-from "^4.0.0"
graphql-request@^1.5.0:
version "1.8.2"
resolved "https://registry.yarnpkg.com/graphql-request/-/graphql-request-1.8.2.tgz#398d10ae15c585676741bde3fc01d5ca948f8fbe"
dependencies:
cross-fetch "2.2.2"
graphql-tag@2.10.0: graphql-tag@2.10.0:
version "2.10.0" version "2.10.0"
resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.10.0.tgz#87da024be863e357551b2b8700e496ee2d4353ae" resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.10.0.tgz#87da024be863e357551b2b8700e496ee2d4353ae"
graphql-tools@4.0.2:
version "4.0.2"
resolved "https://registry.yarnpkg.com/graphql-tools/-/graphql-tools-4.0.2.tgz#9da22974cc6bf6524ed4f4af35556fd15aa6516d"
dependencies:
apollo-link "^1.2.3"
apollo-utilities "^1.0.1"
deprecated-decorator "^0.1.6"
iterall "^1.1.3"
uuid "^3.1.0"
graphql-tools@4.0.3: graphql-tools@4.0.3:
version "4.0.3" version "4.0.3"
resolved "https://registry.yarnpkg.com/graphql-tools/-/graphql-tools-4.0.3.tgz#23b5cb52c519212b1b2e4630a361464396ad264b" resolved "https://registry.yarnpkg.com/graphql-tools/-/graphql-tools-4.0.3.tgz#23b5cb52c519212b1b2e4630a361464396ad264b"
@ -1737,23 +1585,17 @@ is-generator-fn@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-1.0.0.tgz#969d49e1bb3329f6bb7f09089be26578b2ddd46a" resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-1.0.0.tgz#969d49e1bb3329f6bb7f09089be26578b2ddd46a"
is-glob@4.0.0, is-glob@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0"
dependencies:
is-extglob "^2.1.1"
is-glob@^2.0.0, is-glob@^2.0.1: is-glob@^2.0.0, is-glob@^2.0.1:
version "2.0.1" version "2.0.1"
resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
dependencies: dependencies:
is-extglob "^1.0.0" is-extglob "^1.0.0"
is-invalid-path@^0.1.0: is-glob@^4.0.0:
version "0.1.0" version "4.0.0"
resolved "https://registry.yarnpkg.com/is-invalid-path/-/is-invalid-path-0.1.0.tgz#307a855b3cf1a938b44ea70d2c61106053714f34" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0"
dependencies: dependencies:
is-glob "^2.0.0" is-extglob "^2.1.1"
is-lower-case@^1.1.0: is-lower-case@^1.1.0:
version "1.1.3" version "1.1.3"
@ -1839,12 +1681,6 @@ is-utf8@^0.2.0:
version "0.2.1" version "0.2.1"
resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
is-valid-path@0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/is-valid-path/-/is-valid-path-0.1.1.tgz#110f9ff74c37f663e1ec7915eb451f2db93ac9df"
dependencies:
is-invalid-path "^0.1.0"
is-windows@^1.0.2: is-windows@^1.0.2:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
@ -2236,7 +2072,7 @@ js-tokens@^3.0.2:
version "3.0.2" version "3.0.2"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
js-yaml@^3.10.0, js-yaml@^3.7.0, js-yaml@^3.9.0: js-yaml@^3.7.0, js-yaml@^3.9.0:
version "3.12.0" version "3.12.0"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1"
dependencies: dependencies:
@ -2463,7 +2299,7 @@ lodash.sortby@^4.7.0:
version "4.7.0" version "4.7.0"
resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
lodash@^4.13.1, lodash@^4.17.10, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0: lodash@^4.13.1, lodash@^4.17.10, lodash@^4.17.4, lodash@^4.17.5:
version "4.17.11" version "4.17.11"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d"
@ -2647,7 +2483,7 @@ mixin-deep@^1.2.0:
for-in "^1.0.2" for-in "^1.0.2"
is-extendable "^1.0.1" is-extendable "^1.0.1"
mkdirp@0.5.1, mkdirp@0.x, mkdirp@^0.5.0, mkdirp@^0.5.1: mkdirp@0.x, mkdirp@^0.5.0, mkdirp@^0.5.1:
version "0.5.1" version "0.5.1"
resolved "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" resolved "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
dependencies: dependencies:
@ -2703,10 +2539,6 @@ no-case@^2.2.0, no-case@^2.3.2:
dependencies: dependencies:
lower-case "^1.1.1" lower-case "^1.1.1"
node-fetch@2.1.2:
version "2.1.2"
resolved "http://registry.npmjs.org/node-fetch/-/node-fetch-2.1.2.tgz#ab884e8e7e57e38a944753cec706f788d1768bb5"
node-int64@^0.4.0: node-int64@^0.4.0:
version "0.4.0" version "0.4.0"
resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
@ -2865,12 +2697,6 @@ onetime@^1.0.0:
version "1.1.0" version "1.1.0"
resolved "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" resolved "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789"
onetime@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4"
dependencies:
mimic-fn "^1.0.0"
optimist@^0.6.1: optimist@^0.6.1:
version "0.6.1" version "0.6.1"
resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
@ -2889,17 +2715,6 @@ optionator@^0.8.1:
type-check "~0.3.2" type-check "~0.3.2"
wordwrap "~1.0.0" wordwrap "~1.0.0"
ora@3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/ora/-/ora-3.0.0.tgz#8179e3525b9aafd99242d63cc206fd64732741d0"
dependencies:
chalk "^2.3.1"
cli-cursor "^2.1.0"
cli-spinners "^1.1.0"
log-symbols "^2.2.0"
strip-ansi "^4.0.0"
wcwidth "^1.0.1"
os-homedir@^1.0.0: os-homedir@^1.0.0:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
@ -3050,10 +2865,6 @@ performance-now@^2.1.0:
version "2.1.0" version "2.1.0"
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
pify@4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
pify@^2.0.0: pify@^2.0.0:
version "2.3.0" version "2.3.0"
resolved "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" resolved "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
@ -3106,7 +2917,7 @@ preserve@^0.2.0:
version "0.2.0" version "0.2.0"
resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
prettier@1.14.3, prettier@^1.14.3: prettier@^1.14.3:
version "1.14.3" version "1.14.3"
resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.14.3.tgz#90238dd4c0684b7edce5f83b0fb7328e48bd0895" resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.14.3.tgz#90238dd4c0684b7edce5f83b0fb7328e48bd0895"
@ -3259,7 +3070,7 @@ request-promise-native@^1.0.5:
stealthy-require "^1.1.0" stealthy-require "^1.1.0"
tough-cookie ">=2.3.3" tough-cookie ">=2.3.3"
request@2.88.0, request@^2.87.0: request@^2.87.0:
version "2.88.0" version "2.88.0"
resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef"
dependencies: dependencies:
@ -3302,10 +3113,6 @@ resolve-from@^3.0.0:
version "3.0.0" version "3.0.0"
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748"
resolve-from@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
resolve-url@^0.2.1: resolve-url@^0.2.1:
version "0.2.1" version "0.2.1"
resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
@ -3327,13 +3134,6 @@ restore-cursor@^1.0.1:
exit-hook "^1.0.0" exit-hook "^1.0.0"
onetime "^1.0.0" onetime "^1.0.0"
restore-cursor@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
dependencies:
onetime "^2.0.0"
signal-exit "^3.0.2"
ret@~0.1.10: ret@~0.1.10:
version "0.1.15" version "0.1.15"
resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
@ -3751,10 +3551,6 @@ to-fast-properties@^1.0.3:
version "1.0.3" version "1.0.3"
resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47"
to-fast-properties@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
to-object-path@^0.3.0: to-object-path@^0.3.0:
version "0.3.0" version "0.3.0"
resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
@ -3815,7 +3611,7 @@ ts-log@2.1.3:
version "2.1.3" version "2.1.3"
resolved "https://registry.yarnpkg.com/ts-log/-/ts-log-2.1.3.tgz#9e30aca1baffe7693a2e4142b8f07ecb01cb8340" resolved "https://registry.yarnpkg.com/ts-log/-/ts-log-2.1.3.tgz#9e30aca1baffe7693a2e4142b8f07ecb01cb8340"
tslib@1.9.3, tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0: tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0:
version "1.9.3" version "1.9.3"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286"
@ -3918,10 +3714,6 @@ uuid@^3.1.0, uuid@^3.3.2:
version "3.3.2" version "3.3.2"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131"
valid-url@1.0.9:
version "1.0.9"
resolved "https://registry.yarnpkg.com/valid-url/-/valid-url-1.0.9.tgz#1c14479b40f1397a75782f115e4086447433a200"
validate-npm-package-license@^3.0.1: validate-npm-package-license@^3.0.1:
version "3.0.4" version "3.0.4"
resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
@ -3956,12 +3748,6 @@ watch@~0.18.0:
exec-sh "^0.2.0" exec-sh "^0.2.0"
minimist "^1.2.0" minimist "^1.2.0"
wcwidth@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8"
dependencies:
defaults "^1.0.3"
webidl-conversions@^4.0.2: webidl-conversions@^4.0.2:
version "4.0.2" version "4.0.2"
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
@ -3972,10 +3758,6 @@ whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3:
dependencies: dependencies:
iconv-lite "0.4.24" iconv-lite "0.4.24"
whatwg-fetch@2.0.4:
version "2.0.4"
resolved "http://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f"
whatwg-mimetype@^2.1.0: whatwg-mimetype@^2.1.0:
version "2.2.0" version "2.2.0"
resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.2.0.tgz#a3d58ef10b76009b042d03e25591ece89b88d171" resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.2.0.tgz#a3d58ef10b76009b042d03e25591ece89b88d171"