@smartive/graphql-magic 13.0.1 → 14.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 +17 -31
- package/dist/esm/client/queries.d.ts +4 -10
- package/dist/esm/client/queries.js +15 -24
- package/dist/esm/client/queries.js.map +1 -1
- package/package.json +2 -2
- package/src/client/queries.ts +23 -47
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
### Bug Fixes
|
|
5
|
-
|
|
6
|
-
* getEntityListQuery ([#136](https://github.com/smartive/graphql-magic/issues/136)) ([0b77042](https://github.com/smartive/graphql-magic/commit/0b770422e5a16ddef9b692747e037b383dd3ad4c))
|
|
1
|
+
# [14.0.0](https://github.com/smartive/graphql-magic/compare/v13.0.1...v14.0.0) (2024-02-21)
|
package/dist/cjs/index.cjs
CHANGED
|
@@ -140,7 +140,6 @@ __export(src_exports, {
|
|
|
140
140
|
isUpdatableField: () => isUpdatableField,
|
|
141
141
|
isUpdatableModel: () => isUpdatableModel,
|
|
142
142
|
isVisible: () => isVisible,
|
|
143
|
-
isVisibleRelation: () => isVisibleRelation,
|
|
144
143
|
it: () => it,
|
|
145
144
|
list: () => list,
|
|
146
145
|
merge: () => merge2,
|
|
@@ -849,50 +848,40 @@ var getMutationQuery = (model, action) => action === "create" ? `
|
|
|
849
848
|
var displayField = (model) => `
|
|
850
849
|
${model.displayField ? `display: ${model.displayField}` : ""}
|
|
851
850
|
`;
|
|
852
|
-
var getEntityListQuery = (model, role,
|
|
853
|
-
${
|
|
851
|
+
var getEntityListQuery = (model, role, relations, fragment = "", reverseRelation) => `query ${model.plural}List(
|
|
852
|
+
${reverseRelation ? "$id: ID!," : ""}
|
|
854
853
|
$limit: Int!,
|
|
855
854
|
$where: ${model.name}Where!,
|
|
856
855
|
${model.fields.some(({ searchable }) => searchable) ? "$search: String," : ""}
|
|
857
856
|
) {
|
|
858
|
-
${
|
|
859
|
-
data: ${
|
|
857
|
+
${reverseRelation ? `root: ${typeToField(reverseRelation.sourceModel.name)}(where: { id: $id }) {` : ""}
|
|
858
|
+
data: ${reverseRelation ? reverseRelation.name : model.pluralField}(limit: $limit, where: $where, ${model.fields.some(({ searchable }) => searchable) ? ", search: $search" : ""}) {
|
|
860
859
|
${displayField(model)}
|
|
861
860
|
${model.fields.filter(and(isSimpleField, isQueriableBy(role))).map(({ name: name2 }) => name2)}
|
|
862
|
-
${
|
|
861
|
+
${fragment}
|
|
863
862
|
${queryRelations(
|
|
864
863
|
model.models,
|
|
865
|
-
model.relations.filter(
|
|
866
|
-
role,
|
|
867
|
-
typesWithSubRelations
|
|
864
|
+
model.relations.filter((relation) => !relations || relations.includes(relation.name))
|
|
868
865
|
)}
|
|
869
|
-
${
|
|
866
|
+
${fragment}
|
|
870
867
|
}
|
|
871
|
-
${
|
|
868
|
+
${reverseRelation ? "}" : ""}
|
|
872
869
|
}`;
|
|
873
|
-
var
|
|
874
|
-
const whitelist = visibleRelationsByRole[role]?.[modelName];
|
|
875
|
-
return (relation) => whitelist ? whitelist.includes(relation.name) : true;
|
|
876
|
-
};
|
|
877
|
-
var getEntityQuery = (model, role, visibleRelationsByRole, typesWithSubRelations, additionalFields = "") => `query Get${model.name}Entity ($id: ID!) {
|
|
870
|
+
var getEntityQuery = (model, role, relations, typesWithSubRelations, fragment = "") => `query Get${model.name}Entity ($id: ID!) {
|
|
878
871
|
data: ${typeToField(model.name)}(where: { id: $id }) {
|
|
879
872
|
${displayField(model)}
|
|
880
873
|
${model.fields.filter(and(isSimpleField, isQueriableBy(role))).map(({ name: name2 }) => name2)}
|
|
881
874
|
${queryRelations(
|
|
882
875
|
model.models,
|
|
883
|
-
model.relations.filter(
|
|
884
|
-
role,
|
|
885
|
-
typesWithSubRelations
|
|
876
|
+
model.relations.filter((relation) => !relations || relations.includes(relation.name))
|
|
886
877
|
)}
|
|
887
878
|
${queryRelations(
|
|
888
879
|
model.models,
|
|
889
880
|
model.reverseRelations.filter(
|
|
890
|
-
(reverseRelation) => isToOneRelation(reverseRelation.field) &&
|
|
891
|
-
)
|
|
892
|
-
role,
|
|
893
|
-
typesWithSubRelations
|
|
881
|
+
(reverseRelation) => isToOneRelation(reverseRelation.field) && relations.includes(reverseRelation.name)
|
|
882
|
+
)
|
|
894
883
|
)}
|
|
895
|
-
${
|
|
884
|
+
${fragment}
|
|
896
885
|
}
|
|
897
886
|
}`;
|
|
898
887
|
var getFindEntityQuery = (model, role) => `query Find${model.name}($where: ${model.name}Where!, $orderBy: [${model.name}OrderBy!]) {
|
|
@@ -900,14 +889,12 @@ var getFindEntityQuery = (model, role) => `query Find${model.name}($where: ${mod
|
|
|
900
889
|
${model.fields.filter(and(isSimpleField, isQueriableBy(role))).map(({ name: name2 }) => name2)}
|
|
901
890
|
}
|
|
902
891
|
}`;
|
|
903
|
-
var queryRelations = (models, relations
|
|
904
|
-
|
|
905
|
-
return `${relation.name} {
|
|
892
|
+
var queryRelations = (models, relations) => relations.map(
|
|
893
|
+
(relation) => `${relation.name} {
|
|
906
894
|
id
|
|
907
895
|
${displayField(relation.targetModel)}
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
}).join("\n");
|
|
896
|
+
}`
|
|
897
|
+
).join("\n");
|
|
911
898
|
|
|
912
899
|
// src/db/generate.ts
|
|
913
900
|
var import_code_block_writer = __toESM(require("code-block-writer"), 1);
|
|
@@ -3344,7 +3331,6 @@ var printSchemaFromModels = (models) => printSchema((0, import_graphql5.buildAST
|
|
|
3344
3331
|
isUpdatableField,
|
|
3345
3332
|
isUpdatableModel,
|
|
3346
3333
|
isVisible,
|
|
3347
|
-
isVisibleRelation,
|
|
3348
3334
|
it,
|
|
3349
3335
|
list,
|
|
3350
3336
|
merge,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ManyToManyRelation } from '..';
|
|
1
|
+
import { ManyToManyRelation, ReverseRelation } from '..';
|
|
2
2
|
import { EntityModel, Model, Models, Relation } from '../models/models';
|
|
3
3
|
export declare const getUpdateEntityQuery: (model: EntityModel, role: any, fields?: string[] | undefined, additionalFields?: string) => string;
|
|
4
4
|
export type RelationConstraints = Record<string, (source: any) => any>;
|
|
@@ -12,13 +12,7 @@ export type MutationQuery = {
|
|
|
12
12
|
};
|
|
13
13
|
export declare const getMutationQuery: (model: Model, action: 'create' | 'update' | 'delete') => string;
|
|
14
14
|
export declare const displayField: (model: EntityModel) => string;
|
|
15
|
-
export declare const getEntityListQuery: (model: EntityModel, role: string,
|
|
16
|
-
|
|
17
|
-
entity: any;
|
|
18
|
-
reverseRelationName: string;
|
|
19
|
-
}) => string;
|
|
20
|
-
export type VisibleRelationsByRole = Record<string, Record<string, string[]>>;
|
|
21
|
-
export declare const isVisibleRelation: (visibleRelationsByRole: VisibleRelationsByRole, modelName: string, role: string) => (relation: Relation) => boolean;
|
|
22
|
-
export declare const getEntityQuery: (model: EntityModel, role: string, visibleRelationsByRole: VisibleRelationsByRole, typesWithSubRelations: string[], additionalFields?: string) => string;
|
|
15
|
+
export declare const getEntityListQuery: (model: EntityModel, role: string, relations?: string[], fragment?: string, reverseRelation?: ReverseRelation) => string;
|
|
16
|
+
export declare const getEntityQuery: (model: EntityModel, role: string, relations?: string[], typesWithSubRelations?: string[], fragment?: string) => string;
|
|
23
17
|
export declare const getFindEntityQuery: (model: EntityModel, role: string) => string;
|
|
24
|
-
export declare const queryRelations: (models: Models, relations: Relation[]
|
|
18
|
+
export declare const queryRelations: (models: Models, relations: Relation[]) => string;
|
|
@@ -106,34 +106,29 @@ export const getMutationQuery = (model, action) => action === 'create'
|
|
|
106
106
|
export const displayField = (model) => `
|
|
107
107
|
${model.displayField ? `display: ${model.displayField}` : ''}
|
|
108
108
|
`;
|
|
109
|
-
export const getEntityListQuery = (model, role,
|
|
110
|
-
${
|
|
109
|
+
export const getEntityListQuery = (model, role, relations, fragment = '', reverseRelation) => `query ${model.plural}List(
|
|
110
|
+
${reverseRelation ? '$id: ID!,' : ''}
|
|
111
111
|
$limit: Int!,
|
|
112
112
|
$where: ${model.name}Where!,
|
|
113
113
|
${model.fields.some(({ searchable }) => searchable) ? '$search: String,' : ''}
|
|
114
114
|
) {
|
|
115
|
-
${
|
|
116
|
-
data: ${
|
|
115
|
+
${reverseRelation ? `root: ${typeToField(reverseRelation.sourceModel.name)}(where: { id: $id }) {` : ''}
|
|
116
|
+
data: ${reverseRelation ? reverseRelation.name : model.pluralField}(limit: $limit, where: $where, ${model.fields.some(({ searchable }) => searchable) ? ', search: $search' : ''}) {
|
|
117
117
|
${displayField(model)}
|
|
118
118
|
${model.fields.filter(and(isSimpleField, isQueriableBy(role))).map(({ name }) => name)}
|
|
119
|
-
${
|
|
120
|
-
${queryRelations(model.models, model.relations.filter(
|
|
121
|
-
${
|
|
119
|
+
${fragment}
|
|
120
|
+
${queryRelations(model.models, model.relations.filter((relation) => !relations || relations.includes(relation.name)))}
|
|
121
|
+
${fragment}
|
|
122
122
|
}
|
|
123
|
-
${
|
|
123
|
+
${reverseRelation ? '}' : ''}
|
|
124
124
|
}`;
|
|
125
|
-
export const
|
|
126
|
-
const whitelist = visibleRelationsByRole[role]?.[modelName];
|
|
127
|
-
return (relation) => (whitelist ? whitelist.includes(relation.name) : true);
|
|
128
|
-
};
|
|
129
|
-
export const getEntityQuery = (model, role, visibleRelationsByRole, typesWithSubRelations, additionalFields = '') => `query Get${model.name}Entity ($id: ID!) {
|
|
125
|
+
export const getEntityQuery = (model, role, relations, typesWithSubRelations, fragment = '') => `query Get${model.name}Entity ($id: ID!) {
|
|
130
126
|
data: ${typeToField(model.name)}(where: { id: $id }) {
|
|
131
127
|
${displayField(model)}
|
|
132
128
|
${model.fields.filter(and(isSimpleField, isQueriableBy(role))).map(({ name }) => name)}
|
|
133
|
-
${queryRelations(model.models, model.relations.filter(
|
|
134
|
-
${queryRelations(model.models, model.reverseRelations.filter((reverseRelation) => isToOneRelation(reverseRelation.field) &&
|
|
135
|
-
|
|
136
|
-
${additionalFields}
|
|
129
|
+
${queryRelations(model.models, model.relations.filter((relation) => !relations || relations.includes(relation.name)))}
|
|
130
|
+
${queryRelations(model.models, model.reverseRelations.filter((reverseRelation) => isToOneRelation(reverseRelation.field) && relations.includes(reverseRelation.name)))}
|
|
131
|
+
${fragment}
|
|
137
132
|
}
|
|
138
133
|
}`;
|
|
139
134
|
export const getFindEntityQuery = (model, role) => `query Find${model.name}($where: ${model.name}Where!, $orderBy: [${model.name}OrderBy!]) {
|
|
@@ -141,14 +136,10 @@ export const getFindEntityQuery = (model, role) => `query Find${model.name}($whe
|
|
|
141
136
|
${model.fields.filter(and(isSimpleField, isQueriableBy(role))).map(({ name }) => name)}
|
|
142
137
|
}
|
|
143
138
|
}`;
|
|
144
|
-
export const queryRelations = (models, relations
|
|
145
|
-
.map((relation) => {
|
|
146
|
-
const subRelations = typesWithSubRelations.includes(relation.targetModel.name) ? relation.targetModel.relations : [];
|
|
147
|
-
return `${relation.name} {
|
|
139
|
+
export const queryRelations = (models, relations) => relations
|
|
140
|
+
.map((relation) => `${relation.name} {
|
|
148
141
|
id
|
|
149
142
|
${displayField(relation.targetModel)}
|
|
150
|
-
|
|
151
|
-
}`;
|
|
152
|
-
})
|
|
143
|
+
}`)
|
|
153
144
|
.join('\n');
|
|
154
145
|
//# sourceMappingURL=queries.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../../../src/client/queries.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../../../src/client/queries.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": "14.0.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"source": "src/index.ts",
|
|
6
6
|
"type": "module",
|
|
@@ -77,7 +77,7 @@
|
|
|
77
77
|
"@types/uuid": "9.0.8",
|
|
78
78
|
"create-ts-index": "1.14.0",
|
|
79
79
|
"del-cli": "5.1.0",
|
|
80
|
-
"esbuild": "0.20.
|
|
80
|
+
"esbuild": "0.20.1",
|
|
81
81
|
"eslint": "8.56.0",
|
|
82
82
|
"graphql-request": "6.1.0",
|
|
83
83
|
"jest": "29.7.0",
|
package/src/client/queries.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ManyToManyRelation } from '..';
|
|
1
|
+
import { ManyToManyRelation, ReverseRelation } from '..';
|
|
2
2
|
import { EntityModel, Model, Models, Relation } from '../models/models';
|
|
3
3
|
import {
|
|
4
4
|
and,
|
|
@@ -160,73 +160,52 @@ ${model.displayField ? `display: ${model.displayField}` : ''}
|
|
|
160
160
|
export const getEntityListQuery = (
|
|
161
161
|
model: EntityModel,
|
|
162
162
|
role: string,
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
root?: {
|
|
167
|
-
model: EntityModel;
|
|
168
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
169
|
-
entity: any;
|
|
170
|
-
reverseRelationName: string;
|
|
171
|
-
}
|
|
163
|
+
relations?: string[],
|
|
164
|
+
fragment = '',
|
|
165
|
+
reverseRelation?: ReverseRelation
|
|
172
166
|
) => `query ${model.plural}List(
|
|
173
|
-
${
|
|
167
|
+
${reverseRelation ? '$id: ID!,' : ''}
|
|
174
168
|
$limit: Int!,
|
|
175
169
|
$where: ${model.name}Where!,
|
|
176
170
|
${model.fields.some(({ searchable }) => searchable) ? '$search: String,' : ''}
|
|
177
171
|
) {
|
|
178
|
-
${
|
|
179
|
-
data: ${
|
|
172
|
+
${reverseRelation ? `root: ${typeToField(reverseRelation.sourceModel.name)}(where: { id: $id }) {` : ''}
|
|
173
|
+
data: ${reverseRelation ? reverseRelation.name : model.pluralField}(limit: $limit, where: $where, ${
|
|
180
174
|
model.fields.some(({ searchable }) => searchable) ? ', search: $search' : ''
|
|
181
175
|
}) {
|
|
182
176
|
${displayField(model)}
|
|
183
177
|
${model.fields.filter(and(isSimpleField, isQueriableBy(role))).map(({ name }) => name)}
|
|
184
|
-
${
|
|
178
|
+
${fragment}
|
|
185
179
|
${queryRelations(
|
|
186
180
|
model.models,
|
|
187
|
-
model.relations.filter(
|
|
188
|
-
role,
|
|
189
|
-
typesWithSubRelations
|
|
181
|
+
model.relations.filter((relation) => !relations || relations.includes(relation.name))
|
|
190
182
|
)}
|
|
191
|
-
${
|
|
183
|
+
${fragment}
|
|
192
184
|
}
|
|
193
|
-
${
|
|
185
|
+
${reverseRelation ? '}' : ''}
|
|
194
186
|
}`;
|
|
195
187
|
|
|
196
|
-
export type VisibleRelationsByRole = Record<string, Record<string, string[]>>;
|
|
197
|
-
|
|
198
|
-
export const isVisibleRelation = (visibleRelationsByRole: VisibleRelationsByRole, modelName: string, role: string) => {
|
|
199
|
-
const whitelist = visibleRelationsByRole[role]?.[modelName];
|
|
200
|
-
return (relation: Relation) => (whitelist ? whitelist.includes(relation.name) : true);
|
|
201
|
-
};
|
|
202
|
-
|
|
203
188
|
export const getEntityQuery = (
|
|
204
189
|
model: EntityModel,
|
|
205
190
|
role: string,
|
|
206
|
-
|
|
207
|
-
typesWithSubRelations
|
|
208
|
-
|
|
191
|
+
relations?: string[],
|
|
192
|
+
typesWithSubRelations?: string[],
|
|
193
|
+
fragment = ''
|
|
209
194
|
) => `query Get${model.name}Entity ($id: ID!) {
|
|
210
195
|
data: ${typeToField(model.name)}(where: { id: $id }) {
|
|
211
196
|
${displayField(model)}
|
|
212
197
|
${model.fields.filter(and(isSimpleField, isQueriableBy(role))).map(({ name }) => name)}
|
|
213
198
|
${queryRelations(
|
|
214
199
|
model.models,
|
|
215
|
-
model.relations.filter(
|
|
216
|
-
role,
|
|
217
|
-
typesWithSubRelations
|
|
200
|
+
model.relations.filter((relation) => !relations || relations.includes(relation.name))
|
|
218
201
|
)}
|
|
219
202
|
${queryRelations(
|
|
220
203
|
model.models,
|
|
221
204
|
model.reverseRelations.filter(
|
|
222
|
-
(reverseRelation) =>
|
|
223
|
-
|
|
224
|
-
isVisibleRelation(visibleRelationsByRole, model.name, role)(reverseRelation)
|
|
225
|
-
),
|
|
226
|
-
role,
|
|
227
|
-
typesWithSubRelations
|
|
205
|
+
(reverseRelation) => isToOneRelation(reverseRelation.field) && relations.includes(reverseRelation.name)
|
|
206
|
+
)
|
|
228
207
|
)}
|
|
229
|
-
${
|
|
208
|
+
${fragment}
|
|
230
209
|
}
|
|
231
210
|
}`;
|
|
232
211
|
|
|
@@ -238,15 +217,12 @@ export const getFindEntityQuery = (model: EntityModel, role: string) => `query F
|
|
|
238
217
|
}
|
|
239
218
|
}`;
|
|
240
219
|
|
|
241
|
-
export const queryRelations = (models: Models, relations: Relation[]
|
|
220
|
+
export const queryRelations = (models: Models, relations: Relation[]) =>
|
|
242
221
|
relations
|
|
243
|
-
.map(
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
return `${relation.name} {
|
|
222
|
+
.map(
|
|
223
|
+
(relation): string => `${relation.name} {
|
|
247
224
|
id
|
|
248
225
|
${displayField(relation.targetModel)}
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
})
|
|
226
|
+
}`
|
|
227
|
+
)
|
|
252
228
|
.join('\n');
|