diff --git a/packages/cli/Readme.md b/packages/cli/Readme.md index ad57f0a..d1944f0 100644 --- a/packages/cli/Readme.md +++ b/packages/cli/Readme.md @@ -5,7 +5,7 @@ npm install -g gql2ts ``` ```shell -Usage: index [options] +Usage: index [options] <**/**.gql> Options: diff --git a/packages/util/package.json b/packages/util/package.json index 9d65c9b..543cace 100644 --- a/packages/util/package.json +++ b/packages/util/package.json @@ -28,6 +28,8 @@ }, "homepage": "https://github.com/avantcredit/gql2ts#readme", "dependencies": { - "graphql": "^0.10.1" + "glob": "^7.1.2", + "graphql": "^0.10.1", + "merge-graphql-schemas": "0.0.22" } } diff --git a/packages/util/src/fileIO.ts b/packages/util/src/fileIO.ts index af3a399..bb5602e 100644 --- a/packages/util/src/fileIO.ts +++ b/packages/util/src/fileIO.ts @@ -1,6 +1,16 @@ import * as fs from 'fs'; +import * as glob from 'glob'; +import { mergeTypes } from 'merge-graphql-schemas'; export const badWriteHandler: (err?: Error) => void = err => { if (err) { throw err; } }; -export const readFile: (fileName: string) => string = fileName => JSON.parse(fs.readFileSync(fileName).toString()); +export const readFile: (fileName: string) => string = fileName => { + const isGqlFile: boolean = ['gql', 'graphql'].some(ext => fileName.includes(ext)); + if (isGqlFile) { + const globbedFilePaths: string[] = glob.sync(fileName); + const content: string[] = globbedFilePaths.map((filePath: string) => fs.readFileSync(filePath).toString()); + return mergeTypes(content); + } + return JSON.parse(fs.readFileSync(fileName).toString()); +}; export const writeToFile: (fileName: string, data: string) => void = (fileName, data) => fs.writeFile(fileName, data, badWriteHandler); diff --git a/packages/util/src/index.ts b/packages/util/src/index.ts index 8c571de..207a543 100644 --- a/packages/util/src/index.ts +++ b/packages/util/src/index.ts @@ -7,5 +7,5 @@ export { schemaFromInputs, isList, isNonNullable, - isEnum, + isEnum } from './schema'; diff --git a/test/data/products.gql b/test/data/products.gql new file mode 100644 index 0000000..b4c8771 --- /dev/null +++ b/test/data/products.gql @@ -0,0 +1,9 @@ + type Product { + id: Int! + description: String + price: Int + } + type Query { + products: [Product] + } + \ No newline at end of file diff --git a/test/data/vendor.gql b/test/data/vendor.gql new file mode 100644 index 0000000..ad82e2c --- /dev/null +++ b/test/data/vendor.gql @@ -0,0 +1,8 @@ + type Client { + id: Int! + name: String + age: Int + } + type Query { + clients: [Client] + } diff --git a/test/util.js b/test/util.js index c710c9e..1c4085c 100644 --- a/test/util.js +++ b/test/util.js @@ -36,6 +36,11 @@ describe('schema', () => { it('throws on other', () => { expect(() => utils.schemaFromInputs({})).to.throw('Invalid Schema Input'); }) + + it('should glob .gql or graphql files and return a merged schema', () => { + const schema = utils.readFile('**/*.gql'); + expect(utils.schemaFromInputs(schema)).to.be.instanceof(GraphQLSchema); + }) }); describe('IO stuff', () => {