Skip to content

Commit

Permalink
v0.1rc
Browse files Browse the repository at this point in the history
  • Loading branch information
zhitkoff committed Sep 17, 2024
1 parent df88c04 commit ff27371
Show file tree
Hide file tree
Showing 5 changed files with 101 additions and 426 deletions.
11 changes: 7 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# graphql-codegen-default-documents

Plugin for graphql-codegen to generate default documents (fragments, queries, mutations, subscriptions) from GraphQL schema.
Plugin for graphql-codegen to generate default documents (queries, mutations, subscriptions and 'AllFields' fragments) from GraphQL schema.

Inspired by <https://github.com/argano/graphql-codegen-documents>

Expand Down Expand Up @@ -29,8 +29,8 @@ const config = {
'path/to/generated-docs.graphql': {
plugins: [ 'graphql-codegen-default-documents' ],
config: {
docsToGenerate: [ 'fragments', 'queries', 'mutations', 'subscriptions' ]
recursionLimit: 5
docsToGenerate: [ 'fragment', 'query', 'mutation', 'subscription' ]
fragmentMinimumFields: 5
},
},
},
Expand All @@ -52,4 +52,7 @@ const config = {

## TODO

- TBD
- Handle Unions and Abstract Types
- A bit of cosmetics (indents and new lines)
- Optional __typename
- Test cases
12 changes: 6 additions & 6 deletions src/config.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { RawConfig } from '@graphql-codegen/visitor-plugin-common';

export const DEFAULT_DOCS_TO_GENERATE = ['fragment', 'query', 'mutation', 'subscription'];
export const DEFAULT_FRAGMENT_MINIMUM_FIELDS = 2;
export const DEFAULT_FRAGMENT_MINIMUM_FIELDS = 3;

export interface DefaultDocsPluginConfig extends RawConfig {
/**
Expand All @@ -22,10 +22,10 @@ export interface DefaultDocsPluginConfig extends RawConfig {
*/
docsToGenerate?: [ string ];
/**
* @name fragmentMininumFields
* @name fragmentMinimumFields
* @type number
* @description Minimum number of fields a fragment must have to be included in the generated documents
* @default 2
* @default 3
*
* @example
* ```yml
Expand All @@ -34,8 +34,8 @@ export interface DefaultDocsPluginConfig extends RawConfig {
* plugins:
* - graphql-codegen-documents
* config:
* fragmentMininumFields: 3
* fragmentMinimumFields: 5
* ```
*/
fragmentMininumFields?: number;
}
fragmentMinimumFields?: number;
}
13 changes: 5 additions & 8 deletions src/index.ts
Original file line number Diff line number Diff line change
@@ -1,17 +1,14 @@
import {
CodegenPlugin,
PluginFunction,
PluginValidateFn,
Types,
getCachedDocumentNodeFromSchema,
oldVisit,
} from '@graphql-codegen/plugin-helpers';
import { GraphQLSchema, parse, printSchema, concatAST } from 'graphql';
import { GraphQLSchema, concatAST } from 'graphql';
import { DefaultDocsPluginConfig, DEFAULT_DOCS_TO_GENERATE } from './config';
import { DefaultDocsVisitor } from './visitor';
import { ProvidedDocsVisitor } from './provided-docs-visitor';
// export * from './visitor';
// export { DocumentsGeneratorVisitor };

export const plugin: PluginFunction<DefaultDocsPluginConfig> = (
schema: GraphQLSchema,
Expand Down Expand Up @@ -44,11 +41,11 @@ export const plugin: PluginFunction<DefaultDocsPluginConfig> = (
};

export const validate: PluginValidateFn<DefaultDocsPluginConfig> = async (
schema: GraphQLSchema,
documents: Types.DocumentFile[],
_schema: GraphQLSchema,
_documents: Types.DocumentFile[],
config: DefaultDocsPluginConfig,
outputFile: string,
allPlugins: Types.ConfiguredPlugin[]
_outputFile: string,
_allPlugins: Types.ConfiguredPlugin[]
) => {
if (!config.docsToGenerate.every((doc) => DEFAULT_DOCS_TO_GENERATE.includes(doc))) {
throw new Error(`Invalid value for docsToGenerate value, please use the following values: ${DEFAULT_DOCS_TO_GENERATE.join(', ')}`);
Expand Down
2 changes: 1 addition & 1 deletion src/provided-docs-visitor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ export class ProvidedDocsVisitor {

FragmentDefinition(node: FragmentDefinitionNode) {
this.fragments.push(node.name.value);
}
}

getNames(): {queries: string[]; mutations: string[]; subscriptions: string[]; fragments: string[]} {
return {
Expand Down
Loading

0 comments on commit ff27371

Please # to comment.