@devticon-os/graphql-codegen-axios 0.2.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devticon-os/graphql-codegen-axios",
3
- "version": "0.2.0",
3
+ "version": "0.2.2",
4
4
  "license": "MIT",
5
5
  "main": "src/index.js",
6
6
  "repository": "https://github.com/devticon/graphql-codegen-axios",
package/src/fragments.js CHANGED
@@ -1,29 +1,23 @@
1
1
  const { GraphQLObjectType } = require('graphql/type');
2
2
  const { getGraphqlTypeInfo } = require('./types');
3
+ const { getField } = require('./results');
3
4
  const findUsageFragments = (documents, schema) => {
4
5
  const fragments = [];
5
6
  for (let { document } of documents) {
6
7
  for (const definition of document.definitions) {
7
8
  if (definition.kind === 'FragmentDefinition') {
9
+ const name = definition.name.value;
8
10
  const parentName = definition.typeCondition.name.value;
9
11
  const parent = findObjectTypeInSchema(schema, parentName);
12
+ const nestedFragments = definition.selectionSet.selections.filter(s => s.kind === 'FragmentSpread');
13
+ const fields = definition.selectionSet.selections.filter(s => s.kind !== 'FragmentSpread');
14
+ const union = nestedFragments.map(f => f.name.value);
15
+
10
16
  fragments.push({
11
- name: definition.name.value,
17
+ name,
12
18
  type: definition,
13
- fields: definition.selectionSet.selections.map(f => {
14
- const selections = f.selectionSet?.selections || [];
15
- const fragments = selections.filter(s => s.kind === 'FragmentSpread');
16
- const union = fragments.map(f => f.name.value);
17
- const parentField = parent._fields[f.name.value];
18
- const typeInfo = getGraphqlTypeInfo(parentField.type);
19
- return {
20
- name: f.name.value,
21
- ...typeInfo,
22
- fields: [],
23
- typeName: union.length ? '{}' : typeInfo.typeName,
24
- union,
25
- };
26
- }),
19
+ union,
20
+ fields: fields.map(f => getField(parent, f, schema)),
27
21
  });
28
22
  }
29
23
  }
package/src/index.js CHANGED
@@ -1,12 +1,10 @@
1
1
  const fs = require('fs');
2
2
  const path = require('path');
3
- const { print } = require('graphql');
4
- const { GraphQLList, GraphQLNonNull, GraphQLInputObjectType } = require('graphql/type');
5
3
  const { findUsageInputs } = require('./input');
6
4
  const { getVariablesFields } = require('./variables');
7
5
  const { getResultsFields } = require('./results');
8
6
  const { findScalars } = require('./scalar');
9
- const { renderType, renderQuery, renderSdk, renderScalars, renderEnum } = require('./render');
7
+ const { renderType, renderQuery, renderSdk, renderScalars, renderEnum, renderHeader } = require('./render');
10
8
  const { findUsageEnums } = require('./enums');
11
9
  const { findUsageFragments } = require('./fragments');
12
10
 
@@ -80,10 +78,15 @@ module.exports = {
80
78
 
81
79
  const enums = findUsageEnums(types, schema);
82
80
  return [
81
+ renderHeader('HELPERS'),
83
82
  helpers,
83
+ renderHeader('Scalars'),
84
84
  renderScalars(scalars),
85
+ renderHeader('Enum'),
85
86
  ...enums.map(e => renderEnum(e)),
87
+ renderHeader('TYPES'),
86
88
  ...types.map(t => renderType(t)),
89
+ renderHeader('QUERIES'),
87
90
  ...queries.map(q => renderQuery(q)),
88
91
  renderSdk(functions),
89
92
  ].join('\n');
package/src/input.js CHANGED
@@ -7,7 +7,8 @@ const findUsageInputs = (document, schema) => {
7
7
  continue;
8
8
  }
9
9
  for (const variableDefinition of definition.variableDefinitions) {
10
- const name = variableDefinition.type.name.value;
10
+ const type = unpackVariableType(variableDefinition.type);
11
+ const name = type.name.value;
11
12
  const input = findInputInSchema(name, schema);
12
13
  if (input) {
13
14
  inputs.push(input);
@@ -45,6 +46,7 @@ const getInputFields = input => {
45
46
  name: field.name,
46
47
  fields: [],
47
48
  ...typeInfo,
49
+ inLine: !typeInfo.isScalar,
48
50
  };
49
51
  });
50
52
  };
@@ -59,4 +61,14 @@ const unpackInputType = type => {
59
61
  return type;
60
62
  };
61
63
 
64
+ const unpackVariableType = type => {
65
+ if (type.kind === 'ListType') {
66
+ return unpackVariableType(type.type);
67
+ }
68
+ if (type.kind === 'NonNullType') {
69
+ return unpackVariableType(type.type);
70
+ }
71
+ return type;
72
+ };
73
+
62
74
  module.exports = { findUsageInputs, findInputInSchema };
package/src/render.js CHANGED
@@ -1,22 +1,27 @@
1
1
  const { print } = require('graphql/index');
2
2
  const { getUsedFragments } = require('./query');
3
- const renderType = ({ name, fields }) => {
4
- return `export type ${name} = { ${renderTypeField(fields)} };`;
3
+ const { GraphQLInputObjectType } = require('graphql/type');
4
+ const renderType = ({ name, fields, union }) => {
5
+ return `export type ${name} = ${union ? union.join('&') + '&' : ''} { ${renderTypeField(fields)} };`;
5
6
  };
7
+
8
+ const renderHeader = text => `/** \n ${text} \n **/`;
6
9
  const renderTypeField = fields => {
7
10
  return fields
8
- .map(({ isList, isNullable, typeName, name, fields, isScalar, union }) => {
11
+ .map(({ isList, isNullable, typeName, name, fields, isScalar, union, type, inLine }) => {
9
12
  let tsType = '';
10
13
  if (union && union.length) {
11
14
  tsType += [...union, ''].join(' & ');
12
15
  }
13
16
  if (isScalar) {
14
17
  tsType += getScalarTsType(typeName);
18
+ } else if (inLine) {
19
+ tsType += typeName;
15
20
  } else {
16
- if (fields.length) {
17
- tsType += `{${renderTypeField(fields)}}`;
18
- } else {
21
+ if (type instanceof GraphQLInputObjectType) {
19
22
  tsType += typeName;
23
+ } else {
24
+ tsType += `{${renderTypeField(fields)}}`;
20
25
  }
21
26
  }
22
27
  return `${name}${isNullable ? '?' : ''}: ${tsType}${isList ? '[]' : ''}`;
@@ -71,4 +76,4 @@ const renderScalars = (scalars, map = {}) => {
71
76
  })
72
77
  .join(',')}};`;
73
78
  };
74
- module.exports = { renderType, renderQuery, renderSdk, renderScalars, renderEnum };
79
+ module.exports = { renderType, renderQuery, renderSdk, renderScalars, renderEnum, renderHeader };
package/src/results.js CHANGED
@@ -31,4 +31,4 @@ const getField = (parent, field, schema, document) => {
31
31
  };
32
32
  };
33
33
 
34
- module.exports = { getResultsFields };
34
+ module.exports = { getResultsFields, getField };
package/src/variables.js CHANGED
@@ -18,7 +18,7 @@ const getVariableType = (type, schema, isList = false, isNullable = true) => {
18
18
  }
19
19
  const typeName = type.name.value;
20
20
  const isScalar = !findInputInSchema(typeName, schema);
21
- return { type: type.type, isList, isNullable, typeName, isScalar };
21
+ return { type: type.type, isList, isNullable, typeName, isScalar, inLine: !isScalar };
22
22
  };
23
23
 
24
24
  module.exports = { getVariablesFields };