@smartive/graphql-magic 3.1.0 → 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.
- package/CHANGELOG.md +1 -6
- package/dist/cjs/index.cjs +196 -170
- package/dist/esm/client/queries.d.ts +4 -1
- package/dist/esm/client/queries.js +7 -4
- package/dist/esm/client/queries.js.map +1 -1
- package/dist/esm/db/generate.js +21 -13
- package/dist/esm/db/generate.js.map +1 -1
- package/dist/esm/generate/generate.js +17 -22
- package/dist/esm/generate/generate.js.map +1 -1
- package/dist/esm/generate/utils.d.ts +10 -1
- package/dist/esm/generate/utils.js.map +1 -1
- package/dist/esm/migrations/generate.js +82 -89
- package/dist/esm/migrations/generate.js.map +1 -1
- package/dist/esm/models.d.ts +115 -93
- package/dist/esm/models.js +1 -26
- package/dist/esm/models.js.map +1 -1
- package/dist/esm/permissions/check.js +2 -2
- package/dist/esm/permissions/check.js.map +1 -1
- package/dist/esm/permissions/generate.js +2 -2
- package/dist/esm/permissions/generate.js.map +1 -1
- package/dist/esm/resolvers/filters.js +1 -1
- package/dist/esm/resolvers/filters.js.map +1 -1
- package/dist/esm/resolvers/mutations.js +5 -6
- package/dist/esm/resolvers/mutations.js.map +1 -1
- package/dist/esm/resolvers/node.js +4 -5
- package/dist/esm/resolvers/node.js.map +1 -1
- package/dist/esm/resolvers/resolver.js +2 -2
- package/dist/esm/resolvers/resolver.js.map +1 -1
- package/dist/esm/utils.d.ts +181 -1
- package/dist/esm/utils.js +69 -21
- package/dist/esm/utils.js.map +1 -1
- package/package.json +2 -2
- package/src/client/queries.ts +16 -10
- package/src/db/generate.ts +22 -15
- package/src/generate/generate.ts +26 -34
- package/src/generate/utils.ts +11 -1
- package/src/migrations/generate.ts +84 -82
- package/src/models.ts +113 -157
- package/src/permissions/check.ts +2 -2
- package/src/permissions/generate.ts +2 -2
- package/src/resolvers/filters.ts +1 -1
- package/src/resolvers/mutations.ts +10 -9
- package/src/resolvers/node.ts +6 -6
- package/src/resolvers/resolver.ts +2 -2
- package/src/utils.ts +158 -57
- package/tests/utils/models.ts +7 -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
|
-
{
|
|
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: '
|
|
36
|
-
|
|
37
|
-
nonNull:
|
|
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
|
-
{
|
|
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: '
|
|
49
|
-
|
|
50
|
-
nonNull:
|
|
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:
|
|
64
|
-
|
|
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: '
|
|
71
|
-
|
|
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((
|
|
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
|
|
91
|
-
|
|
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
|
-
|
|
143
|
+
typeName: model.name,
|
|
96
144
|
toOne: !!field.toOne,
|
|
97
145
|
fieldModel,
|
|
98
146
|
field,
|
package/dist/esm/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,SAAS,MAAM,kBAAkB,CAAC;AACzC,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,SAAS,MAAM,kBAAkB,CAAC;AACzC,OAAO,SAAS,MAAM,kBAAkB,CAAC;
|
|
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
|
+
"version": "4.0.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"source": "src/index.ts",
|
|
6
6
|
"type": "module",
|
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
"graphql-request": "6.1.0",
|
|
63
63
|
"jest": "29.6.2",
|
|
64
64
|
"mock-knex": "0.4.12",
|
|
65
|
-
"pg": "8.11.
|
|
65
|
+
"pg": "8.11.3",
|
|
66
66
|
"prettier": "2.8.8",
|
|
67
67
|
"simple-git": "3.19.1",
|
|
68
68
|
"ts-jest": "29.1.1",
|
package/src/client/queries.ts
CHANGED
|
@@ -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
|
-
|
|
15
|
-
|
|
16
|
-
|
|
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,8 +53,8 @@ export const getEditEntityRelationsQuery = (
|
|
|
54
53
|
!!relations.length &&
|
|
55
54
|
`query ${upperFirst(action)}${model.name}Relations {
|
|
56
55
|
${relations
|
|
57
|
-
.map(({ name,
|
|
58
|
-
const model = summonByName(models,
|
|
56
|
+
.map(({ name, typeName }) => {
|
|
57
|
+
const model = summonByName(models, typeName);
|
|
59
58
|
|
|
60
59
|
let filters = '';
|
|
61
60
|
if (model.displayField) {
|
|
@@ -206,6 +205,13 @@ export const getEntityListQuery = (
|
|
|
206
205
|
${root ? '}' : ''}
|
|
207
206
|
}`;
|
|
208
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
|
+
|
|
209
215
|
export const getEntityQuery = (
|
|
210
216
|
models: Models,
|
|
211
217
|
model: Model,
|
package/src/db/generate.ts
CHANGED
|
@@ -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((
|
|
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((
|
|
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((
|
|
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((
|
|
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 = (
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
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[] = []) => {
|
package/src/generate/generate.ts
CHANGED
|
@@ -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
|
-
|
|
5
|
+
getModelPluralField,
|
|
6
|
+
getModels,
|
|
5
7
|
isEnumModel,
|
|
6
|
-
isJsonObjectModel,
|
|
7
8
|
isQueriableField,
|
|
8
9
|
isRawEnumModel,
|
|
9
10
|
isRawObjectModel,
|
|
11
|
+
isRelation,
|
|
10
12
|
isScalarModel,
|
|
11
|
-
|
|
12
|
-
} from '../
|
|
13
|
-
import {
|
|
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
|
-
|
|
50
|
-
|
|
51
|
-
|
|
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
|
|
76
|
-
.map(({
|
|
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(
|
|
88
|
-
.
|
|
81
|
+
.filter(isRelation)
|
|
82
|
+
.filter(({ filterable }) => filterable)
|
|
83
|
+
.map(({ name, typeName }) => ({
|
|
89
84
|
name,
|
|
90
|
-
type: `${
|
|
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,
|
|
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,
|
|
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)));
|
package/src/generate/utils.ts
CHANGED
|
@@ -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'
|