@smartive/graphql-magic 3.0.1 → 4.0.0

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.
Files changed (50) hide show
  1. package/CHANGELOG.md +1 -6
  2. package/dist/cjs/index.cjs +205 -172
  3. package/dist/esm/client/queries.d.ts +4 -1
  4. package/dist/esm/client/queries.js +16 -6
  5. package/dist/esm/client/queries.js.map +1 -1
  6. package/dist/esm/db/generate.js +21 -13
  7. package/dist/esm/db/generate.js.map +1 -1
  8. package/dist/esm/generate/generate.js +17 -22
  9. package/dist/esm/generate/generate.js.map +1 -1
  10. package/dist/esm/generate/utils.d.ts +10 -1
  11. package/dist/esm/generate/utils.js.map +1 -1
  12. package/dist/esm/migrations/generate.js +82 -89
  13. package/dist/esm/migrations/generate.js.map +1 -1
  14. package/dist/esm/models.d.ts +115 -93
  15. package/dist/esm/models.js +1 -26
  16. package/dist/esm/models.js.map +1 -1
  17. package/dist/esm/permissions/check.js +2 -2
  18. package/dist/esm/permissions/check.js.map +1 -1
  19. package/dist/esm/permissions/generate.js +2 -2
  20. package/dist/esm/permissions/generate.js.map +1 -1
  21. package/dist/esm/resolvers/filters.js +1 -1
  22. package/dist/esm/resolvers/filters.js.map +1 -1
  23. package/dist/esm/resolvers/mutations.js +5 -6
  24. package/dist/esm/resolvers/mutations.js.map +1 -1
  25. package/dist/esm/resolvers/node.js +4 -5
  26. package/dist/esm/resolvers/node.js.map +1 -1
  27. package/dist/esm/resolvers/resolver.js +2 -2
  28. package/dist/esm/resolvers/resolver.js.map +1 -1
  29. package/dist/esm/utils.d.ts +181 -1
  30. package/dist/esm/utils.js +69 -21
  31. package/dist/esm/utils.js.map +1 -1
  32. package/package.json +8 -8
  33. package/src/client/queries.ts +26 -12
  34. package/src/db/generate.ts +22 -15
  35. package/src/generate/generate.ts +26 -34
  36. package/src/generate/utils.ts +11 -1
  37. package/src/migrations/generate.ts +84 -82
  38. package/src/models.ts +113 -157
  39. package/src/permissions/check.ts +2 -2
  40. package/src/permissions/generate.ts +2 -2
  41. package/src/resolvers/filters.ts +1 -1
  42. package/src/resolvers/mutations.ts +10 -9
  43. package/src/resolvers/node.ts +6 -6
  44. package/src/resolvers/resolver.ts +2 -2
  45. package/src/utils.ts +158 -57
  46. package/tests/unit/__snapshots__/generate.spec.ts.snap +3 -0
  47. package/tests/unit/__snapshots__/queries.spec.ts.snap +11 -0
  48. package/tests/unit/queries.spec.ts +10 -0
  49. package/tests/utils/database/schema.ts +2 -0
  50. package/tests/utils/models.ts +14 -6
package/dist/esm/utils.js CHANGED
@@ -4,7 +4,6 @@ import camelCase from 'lodash/camelCase';
4
4
  import lodashGet from 'lodash/get';
5
5
  import kebabCase from 'lodash/kebabCase';
6
6
  import startCase from 'lodash/startCase';
7
- import { isObjectModel } from './models';
8
7
  const isNotFalsy = (v) => typeof v !== 'undefined' && v !== null && v !== false;
9
8
  export const merge = (objects) => (objects || []).filter(isNotFalsy).reduce((i, acc) => ({ ...acc, ...i }), {});
10
9
  // Target -> target
@@ -15,6 +14,28 @@ export const getModelSlug = (model) => kebabCase(getModelPlural(model));
15
14
  export const getModelLabelPlural = (model) => getLabel(getModelPlural(model));
16
15
  export const getModelLabel = (model) => getLabel(model.name);
17
16
  export const getLabel = (s) => startCase(camelCase(s));
17
+ export const isObjectModel = (model) => model.type === 'object';
18
+ export const isEnumModel = (model) => model.type === 'enum';
19
+ export const isRawEnumModel = (model) => model.type === 'raw-enum';
20
+ export const isScalarModel = (model) => model.type === 'scalar';
21
+ export const isRawObjectModel = (model) => model.type === 'raw';
22
+ export const isEnumList = (models, field) => field?.list === true && models.find(({ name }) => name === field.type)?.type === 'enum';
23
+ export const and = (...predicates) => (field) => predicates.every((predicate) => predicate(field));
24
+ export const not = (predicate) => (field) => !predicate(field);
25
+ export const isRelation = (field) => field.type === 'relation';
26
+ export const isToOneRelation = (field) => isRelation(field) && !!field.toOne;
27
+ export const isQueriableField = ({ queriable }) => queriable !== false;
28
+ export const isRaw = (field) => field.type === 'raw';
29
+ export const isVisible = ({ hidden }) => hidden !== true;
30
+ export const isSimpleField = and(not(isRelation), not(isRaw));
31
+ export const isUpdatable = ({ updatable }) => !!updatable;
32
+ export const isCreatable = ({ creatable }) => !!creatable;
33
+ export const isQueriableBy = (role) => (field) => field.queriable !== false && (field.queriable == true || !field.queriable.roles || field.queriable.roles.includes(role));
34
+ export const isUpdatableBy = (role) => (field) => field.updatable && (field.updatable === true || !field.updatable.roles || field.updatable.roles.includes(role));
35
+ export const isCreatableBy = (role) => (field) => field.creatable && (field.creatable === true || !field.creatable.roles || field.creatable.roles.includes(role));
36
+ export const actionableRelations = (model, action) => model.fields
37
+ .filter(isRelation)
38
+ .filter((field) => field[`${action === 'filter' ? action : action.slice(0, -1)}able`]);
18
39
  export const getModels = (rawModels) => {
19
40
  const models = rawModels.filter(isObjectModel).map((model) => {
20
41
  const objectModel = {
@@ -24,32 +45,48 @@ export const getModels = (rawModels) => {
24
45
  relationsByName: {},
25
46
  reverseRelations: [],
26
47
  reverseRelationsByName: {},
27
- fields: [
48
+ fields: ([
28
49
  { name: 'id', type: 'ID', nonNull: true, unique: true, primary: true, generated: true },
29
50
  ...model.fields,
30
51
  ...(model.creatable
31
52
  ? [
32
- { name: 'createdAt', type: 'DateTime', nonNull: !model.nonStrict, orderable: true, generated: true },
53
+ {
54
+ name: 'createdAt',
55
+ type: 'DateTime',
56
+ nonNull: true,
57
+ orderable: true,
58
+ generated: true,
59
+ ...(typeof model.creatable === 'object' && model.creatable.createdAt),
60
+ },
33
61
  {
34
62
  name: 'createdBy',
35
- type: 'User',
36
- relation: true,
37
- nonNull: !model.nonStrict,
63
+ type: 'relation',
64
+ typeName: 'User',
65
+ nonNull: true,
38
66
  reverse: `created${getModelPlural(model)}`,
39
67
  generated: true,
68
+ ...(typeof model.creatable === 'object' && model.creatable.createdBy),
40
69
  },
41
70
  ]
42
71
  : []),
43
72
  ...(model.updatable
44
73
  ? [
45
- { name: 'updatedAt', type: 'DateTime', nonNull: !model.nonStrict, orderable: true, generated: true },
74
+ {
75
+ name: 'updatedAt',
76
+ type: 'DateTime',
77
+ nonNull: true,
78
+ orderable: true,
79
+ generated: true,
80
+ ...(typeof model.updatable === 'object' && model.updatable.updatedAt),
81
+ },
46
82
  {
47
83
  name: 'updatedBy',
48
- type: 'User',
49
- relation: true,
50
- nonNull: !model.nonStrict,
84
+ type: 'relation',
85
+ typeName: 'User',
86
+ nonNull: true,
51
87
  reverse: `updated${getModelPlural(model)}`,
52
88
  generated: true,
89
+ ...(typeof model.updatable === 'object' && model.updatable.updatedBy),
53
90
  },
54
91
  ]
55
92
  : []),
@@ -60,24 +97,31 @@ export const getModels = (rawModels) => {
60
97
  type: 'Boolean',
61
98
  nonNull: true,
62
99
  default: false,
63
- filterable: true,
64
- defaultFilter: false,
100
+ filterable: { default: false },
101
+ generated: true,
102
+ ...(typeof model.deletable === 'object' && model.deletable.deleted),
103
+ },
104
+ {
105
+ name: 'deletedAt',
106
+ type: 'DateTime',
107
+ orderable: true,
65
108
  generated: true,
109
+ ...(typeof model.deletable === 'object' && model.deletable.deletedAt),
66
110
  },
67
- { name: 'deletedAt', type: 'DateTime', orderable: true, generated: true },
68
111
  {
69
112
  name: 'deletedBy',
70
- type: 'User',
71
- relation: true,
113
+ type: 'relation',
114
+ typeName: 'User',
72
115
  reverse: `deleted${getModelPlural(model)}`,
73
116
  generated: true,
117
+ ...(typeof model.deletable === 'object' && model.deletable.deletedBy),
74
118
  },
75
119
  ]
76
120
  : []),
77
- ].map(({ foreignKey, ...field }) => ({
121
+ ]).map((field) => ({
78
122
  ...field,
79
- ...(field.relation && {
80
- foreignKey: foreignKey || `${field.name}Id`,
123
+ ...(field.type === 'relation' && {
124
+ foreignKey: field.foreignKey || `${field.name}Id`,
81
125
  }),
82
126
  })),
83
127
  };
@@ -87,12 +131,16 @@ export const getModels = (rawModels) => {
87
131
  return objectModel;
88
132
  });
89
133
  for (const model of models) {
90
- for (const field of model.fields.filter(({ relation }) => relation)) {
91
- const fieldModel = summonByName(models, field.type);
134
+ for (const field of model.fields) {
135
+ if (field.type !== 'relation') {
136
+ continue;
137
+ }
138
+ const fieldModel = summonByName(models, field.typeName);
92
139
  const reverseRelation = {
140
+ type: 'relation',
93
141
  name: field.reverse || (field.toOne ? typeToField(model.name) : getModelPluralField(model)),
94
142
  foreignKey: get(field, 'foreignKey'),
95
- type: model.name,
143
+ typeName: model.name,
96
144
  toOne: !!field.toOne,
97
145
  fieldModel,
98
146
  field,
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smartive/graphql-magic",
3
- "version": "3.0.1",
3
+ "version": "4.0.0",
4
4
  "description": "",
5
5
  "source": "src/index.ts",
6
6
  "type": "module",
@@ -31,7 +31,7 @@
31
31
  },
32
32
  "overrides": {
33
33
  "graphql": "$graphql",
34
- "rollup": "3.27.2"
34
+ "rollup": "3.28.0"
35
35
  },
36
36
  "browserslist": "> 0.25%, not dead",
37
37
  "publishConfig": {
@@ -52,19 +52,19 @@
52
52
  "@smartive/eslint-config": "3.2.0",
53
53
  "@smartive/prettier-config": "3.1.2",
54
54
  "@types/jest": "29.5.3",
55
- "@types/lodash": "4.14.196",
55
+ "@types/lodash": "4.14.197",
56
56
  "@types/luxon": "3.3.1",
57
57
  "@types/uuid": "9.0.2",
58
58
  "create-ts-index": "1.14.0",
59
59
  "del-cli": "5.0.0",
60
- "esbuild": "0.19.0",
61
- "eslint": "8.46.0",
62
- "graphql-request": "^6.1.0",
60
+ "esbuild": "0.19.2",
61
+ "eslint": "8.47.0",
62
+ "graphql-request": "6.1.0",
63
63
  "jest": "29.6.2",
64
64
  "mock-knex": "0.4.12",
65
- "pg": "^8.11.2",
65
+ "pg": "8.11.3",
66
66
  "prettier": "2.8.8",
67
- "simple-git": "^3.19.1",
67
+ "simple-git": "3.19.1",
68
68
  "ts-jest": "29.1.1",
69
69
  "ts-node": "10.9.1",
70
70
  "typescript": "5.1.6"
@@ -1,21 +1,20 @@
1
1
  import upperFirst from 'lodash/upperFirst';
2
+ import { Field } from '..';
3
+ import { Model, Models, Relation, ReverseRelation } from '../models';
2
4
  import {
3
5
  actionableRelations,
4
6
  and,
7
+ getModelPlural,
8
+ getModelPluralField,
5
9
  isQueriableBy,
6
10
  isRelation,
7
11
  isSimpleField,
8
12
  isToOneRelation,
9
13
  isUpdatableBy,
10
- isVisibleRelation,
11
- Model,
12
- Models,
13
14
  not,
14
- Relation,
15
- ReverseRelation,
16
- VisibleRelationsByRole,
17
- } from '../models';
18
- import { getModelPlural, getModelPluralField, summonByName, typeToField } from '../utils';
15
+ summonByName,
16
+ typeToField,
17
+ } from '../utils';
19
18
 
20
19
  export const getUpdateEntityQuery = (
21
20
  model: Model,
@@ -54,12 +53,20 @@ export const getEditEntityRelationsQuery = (
54
53
  !!relations.length &&
55
54
  `query ${upperFirst(action)}${model.name}Relations {
56
55
  ${relations
57
- .map(({ name, type }) => {
58
- const model = summonByName(models, type);
56
+ .map(({ name, typeName }) => {
57
+ const model = summonByName(models, typeName);
59
58
 
60
- return `${name}: ${getModelPluralField(model)} {
59
+ let filters = '';
60
+ if (model.displayField) {
61
+ const displayField = model.fieldsByName[model.displayField];
62
+ if (displayField.orderable) {
63
+ filters = `(orderBy: [{ ${model.displayField}: ASC }])`;
64
+ }
65
+ }
66
+
67
+ return `${name}: ${getModelPluralField(model)}${filters} {
61
68
  id
62
- display: ${model.displayField || ''}
69
+ display: ${model.displayField || 'id'}
63
70
  ${additionalFields[name] || ''}
64
71
  }`;
65
72
  })
@@ -198,6 +205,13 @@ export const getEntityListQuery = (
198
205
  ${root ? '}' : ''}
199
206
  }`;
200
207
 
208
+ export type VisibleRelationsByRole = Record<string, Record<string, string[]>>;
209
+
210
+ export const isVisibleRelation = (visibleRelationsByRole: VisibleRelationsByRole, modelName: string, role: string) => {
211
+ const whitelist = visibleRelationsByRole[role]?.[modelName];
212
+ return ({ name }: Field) => (whitelist ? whitelist.includes(name) : true);
213
+ };
214
+
201
215
  export const getEntityQuery = (
202
216
  models: Models,
203
217
  model: Model,
@@ -1,5 +1,5 @@
1
1
  import CodeBlockWriter from 'code-block-writer';
2
- import { ModelField, RawModels, getModels, isEnumModel } from '..';
2
+ import { ModelField, RawModels, get, getModels, isEnumModel, isRaw, not } from '..';
3
3
 
4
4
  const PRIMITIVE_TYPES = {
5
5
  ID: 'string',
@@ -29,14 +29,14 @@ export const generateDBModels = (rawModels: RawModels) => {
29
29
 
30
30
  for (const model of models) {
31
31
  // TODO: deprecate allowing to define foreignKey
32
- const fields = model.fields.some((field) => field.foreignKey === 'id')
32
+ const fields = model.fields.some((field) => field.type === 'relation' && field.foreignKey === 'id')
33
33
  ? model.fields.filter((field) => field.name !== 'id')
34
34
  : model.fields;
35
35
 
36
36
  writer
37
37
  .write(`export type ${model.name} = `)
38
38
  .inlineBlock(() => {
39
- for (const field of fields.filter(({ raw }) => !raw)) {
39
+ for (const field of fields.filter(not(isRaw))) {
40
40
  writer.write(`'${getFieldName(field)}': ${getFieldOutputType(field)}${field.nonNull ? '' : ' | null'},`).newLine();
41
41
  }
42
42
  })
@@ -45,7 +45,7 @@ export const generateDBModels = (rawModels: RawModels) => {
45
45
  writer
46
46
  .write(`export type ${model.name}Initializer = `)
47
47
  .inlineBlock(() => {
48
- for (const field of fields.filter(({ raw }) => !raw)) {
48
+ for (const field of fields.filter(not(isRaw))) {
49
49
  writer
50
50
  .write(
51
51
  `'${getFieldName(field)}'${field.nonNull && field.default === undefined ? '' : '?'}: ${getFieldInputType(
@@ -60,7 +60,7 @@ export const generateDBModels = (rawModels: RawModels) => {
60
60
  writer
61
61
  .write(`export type ${model.name}Mutator = `)
62
62
  .inlineBlock(() => {
63
- for (const field of fields.filter(({ raw }) => !raw)) {
63
+ for (const field of fields.filter(not(isRaw))) {
64
64
  writer.write(`'${getFieldName(field)}'?: ${getFieldInputType(field)}${field.nonNull ? '' : ' | null'},`).newLine();
65
65
  }
66
66
  })
@@ -69,7 +69,7 @@ export const generateDBModels = (rawModels: RawModels) => {
69
69
  writer
70
70
  .write(`export type ${model.name}Seed = `)
71
71
  .inlineBlock(() => {
72
- for (const field of fields.filter(({ raw }) => !raw)) {
72
+ for (const field of fields.filter(not(isRaw))) {
73
73
  const fieldName = getFieldName(field);
74
74
  writer
75
75
  .write(
@@ -95,16 +95,23 @@ export const generateDBModels = (rawModels: RawModels) => {
95
95
  return writer.toString();
96
96
  };
97
97
 
98
- const getFieldName = ({ relation, name, foreignKey }: ModelField) => {
99
- return foreignKey || `${name}${relation ? 'Id' : ''}`;
100
- };
101
-
102
- const getFieldOutputType = ({ relation, type, list, json }: ModelField) => {
103
- if (json || relation) {
104
- return 'string';
98
+ const getFieldName = (field: ModelField) => (field.type === 'relation' ? field.foreignKey || `${field.name}Id` : field.name);
99
+
100
+ const getFieldOutputType = (field: ModelField) => {
101
+ switch (field.type) {
102
+ case 'json':
103
+ // JSON data is stored as string
104
+ return 'string';
105
+ case 'relation':
106
+ // Relations are stored as ids
107
+ return 'string';
108
+ case 'enum':
109
+ return field.typeName + field.list ? '[]' : '';
110
+ case 'raw':
111
+ throw new Error(`Raw fields are not in the db.`);
112
+ default:
113
+ return get(PRIMITIVE_TYPES, field.type) + (field.list ? '[]' : '');
105
114
  }
106
-
107
- return (PRIMITIVE_TYPES[type] || type) + (list ? '[]' : '');
108
115
  };
109
116
 
110
117
  const getFieldInputType = (field: ModelField, stringTypes: string[] = []) => {
@@ -1,17 +1,18 @@
1
1
  import { buildASTSchema, DefinitionNode, DocumentNode, GraphQLSchema, print } from 'graphql';
2
2
  import flatMap from 'lodash/flatMap';
3
+ import { RawModels } from '../models';
3
4
  import {
4
- Field,
5
+ getModelPluralField,
6
+ getModels,
5
7
  isEnumModel,
6
- isJsonObjectModel,
7
8
  isQueriableField,
8
9
  isRawEnumModel,
9
10
  isRawObjectModel,
11
+ isRelation,
10
12
  isScalarModel,
11
- RawModels,
12
- } from '../models';
13
- import { getModelPluralField, getModels, typeToField } from '../utils';
14
- import { document, enm, input, object, scalar } from './utils';
13
+ typeToField,
14
+ } from '../utils';
15
+ import { document, enm, Field, input, object, scalar } from './utils';
15
16
 
16
17
  export const generateDefinitions = (rawModels: RawModels): DefinitionNode[] => {
17
18
  const models = getModels(rawModels);
@@ -26,17 +27,6 @@ export const generateDefinitions = (rawModels: RawModels): DefinitionNode[] => {
26
27
  ...rawModels.filter(isRawEnumModel).map((model) => enm(model.name, model.values)),
27
28
  ...rawModels.filter(isScalarModel).map((model) => scalar(model.name)),
28
29
  ...rawModels.filter(isRawObjectModel).map((model) => object(model.name, model.fields)),
29
- ...rawModels.filter(isJsonObjectModel).map((model) => object(model.name, model.fields)),
30
- ...rawModels
31
- .filter(isRawObjectModel)
32
- .filter(({ rawFilters }) => rawFilters)
33
- .map((model) =>
34
- input(
35
- `${model.name}Where`,
36
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- array gets filtered above to only include models with rawFilters
37
- model.rawFilters!.map(({ name, type, list = false, nonNull = false }) => ({ name, type, list, nonNull }))
38
- )
39
- ),
40
30
 
41
31
  ...flatMap(
42
32
  models.map((model) => {
@@ -46,10 +36,9 @@ export const generateDefinitions = (rawModels: RawModels): DefinitionNode[] => {
46
36
  [
47
37
  ...model.fields.filter(isQueriableField).map((field) => ({
48
38
  ...field,
49
- args: [
50
- ...(field.args || []),
51
- ...(hasRawFilters(rawModels, field.type) ? [{ name: 'where', type: `${field.type}Where` }] : []),
52
- ],
39
+ type:
40
+ field.type === 'relation' || field.type === 'enum' || field.type === 'raw' ? field.typeName : field.type,
41
+ args: [...(field.args || [])],
53
42
  directives: field.directives,
54
43
  })),
55
44
  ...model.reverseRelations.map(({ name, field, model }) => ({
@@ -72,8 +61,13 @@ export const generateDefinitions = (rawModels: RawModels): DefinitionNode[] => {
72
61
  ),
73
62
  input(`${model.name}Where`, [
74
63
  ...model.fields
75
- .filter(({ unique, filterable, relation }) => (unique || filterable) && !relation)
76
- .map(({ name, type, defaultFilter }) => ({ name, type, list: true, default: defaultFilter })),
64
+ .filter(({ type, unique, filterable }) => (unique || filterable) && type !== 'relation')
65
+ .map(({ type, name, filterable }) => ({
66
+ name,
67
+ type,
68
+ list: true,
69
+ default: typeof filterable === 'object' ? filterable.default : undefined,
70
+ })),
77
71
  ...flatMap(
78
72
  model.fields.filter(({ comparable }) => comparable),
79
73
  ({ name, type }) => [
@@ -84,10 +78,11 @@ export const generateDefinitions = (rawModels: RawModels): DefinitionNode[] => {
84
78
  ]
85
79
  ),
86
80
  ...model.fields
87
- .filter(({ filterable, relation }) => filterable && relation)
88
- .map(({ name, type }) => ({
81
+ .filter(isRelation)
82
+ .filter(({ filterable }) => filterable)
83
+ .map(({ name, typeName }) => ({
89
84
  name,
90
- type: `${type}Where`,
85
+ type: `${typeName}Where`,
91
86
  })),
92
87
  ]),
93
88
  input(
@@ -110,10 +105,10 @@ export const generateDefinitions = (rawModels: RawModels): DefinitionNode[] => {
110
105
  `Create${model.name}`,
111
106
  model.fields
112
107
  .filter(({ creatable }) => creatable)
113
- .map(({ name, relation, type, nonNull, list, default: defaultValue }) =>
114
- relation
108
+ .map(({ name, nonNull, list, default: defaultValue, ...field }) =>
109
+ field.type === 'relation'
115
110
  ? { name: `${name}Id`, type: 'ID', nonNull }
116
- : { name, type, list, nonNull: nonNull && defaultValue === undefined }
111
+ : { name, type: field.type, list, nonNull: nonNull && defaultValue === undefined }
117
112
  )
118
113
  )
119
114
  );
@@ -125,8 +120,8 @@ export const generateDefinitions = (rawModels: RawModels): DefinitionNode[] => {
125
120
  `Update${model.name}`,
126
121
  model.fields
127
122
  .filter(({ updatable }) => updatable)
128
- .map(({ name, relation, type, list }) =>
129
- relation ? { name: `${name}Id`, type: 'ID' } : { name, type, list }
123
+ .map(({ name, type, list }) =>
124
+ type === 'relation' ? { name: `${name}Id`, type: 'ID' } : { name, type, list }
130
125
  )
131
126
  )
132
127
  );
@@ -265,9 +260,6 @@ export const printSchema = (schema: GraphQLSchema): string =>
265
260
  .map((s) => `${s}\n`)
266
261
  .join('\n');
267
262
 
268
- const hasRawFilters = (models: RawModels, type: string) =>
269
- models.filter(isRawObjectModel).some(({ name, rawFilters }) => name === type && !!rawFilters);
270
-
271
263
  export const printSchemaFromDocument = (document: DocumentNode) => printSchema(buildASTSchema(document));
272
264
 
273
265
  export const printSchemaFromModels = (models: RawModels) => printSchema(buildASTSchema(generate(models)));
@@ -22,9 +22,19 @@ import {
22
22
  ValueNode,
23
23
  } from 'graphql';
24
24
  import { DateTime } from 'luxon';
25
- import { Field } from '../models';
26
25
  import { Directive, Enum, Value, Values } from '../values';
27
26
 
27
+ export type Field = {
28
+ name: string;
29
+ type: string;
30
+ description?: string;
31
+ list?: boolean;
32
+ nonNull?: boolean;
33
+ default?: Value;
34
+ args?: Field[];
35
+ directives?: Directive[];
36
+ };
37
+
28
38
  export type DirectiveLocation =
29
39
  | 'ARGUMENT_DEFINITION'
30
40
  | 'INPUT_FIELD_DEFINITION'