@@ -69,17 +69,18 @@ function getIndent(level: number): string {
69
69
return Array ( ( level * 4 ) + 1 ) . join ( ' ' ) ;
70
70
}
71
71
72
- export function filterNonConfigFields ( fieldName : string ) {
72
+ function filterNonConfigFields ( fieldName : string , ignoreFields : string [ ] ) {
73
73
// Returns true if fieldName is not a 'configField'.
74
- return configFields . indexOf ( fieldName ) === - 1 ; // Equivalent to: return !configFields.includes (fieldName);
74
+ return configFields . indexOf ( fieldName ) == - 1 && ignoreFields . indexOf ( fieldName ) == - 1 ;
75
75
}
76
76
77
- function convertQuery ( node : any , level : number , output : Array < [ string , number ] > ) {
77
+ function convertQuery ( node : any , level : number , output : Array < [ string , number ] > , options : IJsonToGraphQLOptions ) {
78
78
Object . keys ( node )
79
- . filter ( filterNonConfigFields )
79
+ . filter ( ( key ) => filterNonConfigFields ( key , options . ignoreFields ) )
80
80
. forEach ( ( key ) => {
81
81
if ( typeof node [ key ] === 'object' ) {
82
- const fieldCount = Object . keys ( node [ key ] ) . filter ( filterNonConfigFields ) . length ;
82
+ const fieldCount = Object . keys ( node [ key ] )
83
+ . filter ( ( keyCount ) => filterNonConfigFields ( keyCount , options . ignoreFields ) ) . length ;
83
84
const subFields = fieldCount > 0 ;
84
85
let token : string ;
85
86
@@ -108,7 +109,7 @@ function convertQuery(node: any, level: number, output: Array<[ string, number ]
108
109
}
109
110
110
111
output . push ( [ token + ( fieldCount > 0 ? ' {' : '' ) , level ] ) ;
111
- convertQuery ( node [ key ] , level + 1 , output ) ;
112
+ convertQuery ( node [ key ] , level + 1 , output , options ) ;
112
113
113
114
if ( subFields ) {
114
115
output . push ( [ '}' , level ] ) ;
@@ -121,6 +122,7 @@ function convertQuery(node: any, level: number, output: Array<[ string, number ]
121
122
122
123
export interface IJsonToGraphQLOptions {
123
124
pretty ?: boolean ;
125
+ ignoreFields ?: string [ ] ;
124
126
}
125
127
126
128
export function jsonToGraphQLQuery ( query : any , options : IJsonToGraphQLOptions = { } ) {
@@ -130,9 +132,12 @@ export function jsonToGraphQLQuery(query: any, options: IJsonToGraphQLOptions =
130
132
if ( Object . keys ( query ) . length == 0 ) {
131
133
throw new Error ( 'query object has no data' ) ;
132
134
}
135
+ if ( ! ( options . ignoreFields instanceof Array ) ) {
136
+ options . ignoreFields = [ ] ;
137
+ }
133
138
134
139
const queryLines : Array < [ string , number ] > = [ ] ;
135
- convertQuery ( query , 0 , queryLines ) ;
140
+ convertQuery ( query , 0 , queryLines , options ) ;
136
141
137
142
let output = '' ;
138
143
queryLines . forEach ( ( [ line , level ] ) => {
0 commit comments