@smartive/graphql-magic 13.0.1 → 14.0.1

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 CHANGED
@@ -1,6 +1,6 @@
1
- ## [13.0.1](https://github.com/smartive/graphql-magic/compare/v13.0.0...v13.0.1) (2024-02-14)
1
+ ## [14.0.1](https://github.com/smartive/graphql-magic/compare/v14.0.0...v14.0.1) (2024-02-21)
2
2
 
3
3
 
4
4
  ### Bug Fixes
5
5
 
6
- * getEntityListQuery ([#136](https://github.com/smartive/graphql-magic/issues/136)) ([0b77042](https://github.com/smartive/graphql-magic/commit/0b770422e5a16ddef9b692747e037b383dd3ad4c))
6
+ * Remove unused param ([900ed1a](https://github.com/smartive/graphql-magic/commit/900ed1a7c35b44d932f779ceee57280b957d5a48))
@@ -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, visibleRelationsByRole, typesWithSubRelations, additionalFields = "", root) => `query ${model.plural}List(
853
- ${root ? "$id: ID!," : ""}
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
- ${root ? `root: ${typeToField(root.model.name)}(where: { id: $id }) {` : ""}
859
- data: ${root ? root.reverseRelationName : model.pluralField}(limit: $limit, where: $where, ${model.fields.some(({ searchable }) => searchable) ? ", search: $search" : ""}) {
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
- ${additionalFields}
861
+ ${fragment}
863
862
  ${queryRelations(
864
863
  model.models,
865
- model.relations.filter(isVisibleRelation(visibleRelationsByRole, model.name, role)),
866
- role,
867
- typesWithSubRelations
864
+ model.relations.filter((relation) => !relations || relations.includes(relation.name))
868
865
  )}
869
- ${additionalFields}
866
+ ${fragment}
870
867
  }
871
- ${root ? "}" : ""}
868
+ ${reverseRelation ? "}" : ""}
872
869
  }`;
873
- var isVisibleRelation = (visibleRelationsByRole, modelName, role) => {
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, 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(isVisibleRelation(visibleRelationsByRole, model.name, role)),
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) && isVisibleRelation(visibleRelationsByRole, model.name, role)(reverseRelation)
891
- ),
892
- role,
893
- typesWithSubRelations
881
+ (reverseRelation) => isToOneRelation(reverseRelation.field) && relations.includes(reverseRelation.name)
882
+ )
894
883
  )}
895
- ${additionalFields}
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, role, typesWithSubRelations) => relations.map((relation) => {
904
- const subRelations = typesWithSubRelations.includes(relation.targetModel.name) ? relation.targetModel.relations : [];
905
- return `${relation.name} {
892
+ var queryRelations = (models, relations) => relations.map(
893
+ (relation) => `${relation.name} {
906
894
  id
907
895
  ${displayField(relation.targetModel)}
908
- ${subRelations.length > 0 ? queryRelations(models, subRelations, role, typesWithSubRelations) : ""}
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, visibleRelationsByRole: VisibleRelationsByRole, typesWithSubRelations: string[], additionalFields?: string, root?: {
16
- model: EntityModel;
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[], fragment?: string) => string;
23
17
  export declare const getFindEntityQuery: (model: EntityModel, role: string) => string;
24
- export declare const queryRelations: (models: Models, relations: Relation[], role: string, typesWithSubRelations: string[]) => string;
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, visibleRelationsByRole, typesWithSubRelations, additionalFields = '', root) => `query ${model.plural}List(
110
- ${root ? '$id: ID!,' : ''}
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
- ${root ? `root: ${typeToField(root.model.name)}(where: { id: $id }) {` : ''}
116
- data: ${root ? root.reverseRelationName : model.pluralField}(limit: $limit, where: $where, ${model.fields.some(({ searchable }) => searchable) ? ', search: $search' : ''}) {
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
- ${additionalFields}
120
- ${queryRelations(model.models, model.relations.filter(isVisibleRelation(visibleRelationsByRole, model.name, role)), role, typesWithSubRelations)}
121
- ${additionalFields}
119
+ ${fragment}
120
+ ${queryRelations(model.models, model.relations.filter((relation) => !relations || relations.includes(relation.name)))}
121
+ ${fragment}
122
122
  }
123
- ${root ? '}' : ''}
123
+ ${reverseRelation ? '}' : ''}
124
124
  }`;
125
- export const isVisibleRelation = (visibleRelationsByRole, modelName, role) => {
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, 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(isVisibleRelation(visibleRelationsByRole, model.name, role)), role, typesWithSubRelations)}
134
- ${queryRelations(model.models, model.reverseRelations.filter((reverseRelation) => isToOneRelation(reverseRelation.field) &&
135
- isVisibleRelation(visibleRelationsByRole, model.name, role)(reverseRelation)), role, typesWithSubRelations)}
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, role, typesWithSubRelations) => 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
- ${subRelations.length > 0 ? queryRelations(models, subRelations, role, typesWithSubRelations) : ''}
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": "13.0.1",
3
+ "version": "14.0.1",
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.0",
80
+ "esbuild": "0.20.1",
81
81
  "eslint": "8.56.0",
82
82
  "graphql-request": "6.1.0",
83
83
  "jest": "29.7.0",
@@ -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,48 @@ ${model.displayField ? `display: ${model.displayField}` : ''}
160
160
  export const getEntityListQuery = (
161
161
  model: EntityModel,
162
162
  role: string,
163
- visibleRelationsByRole: VisibleRelationsByRole,
164
- typesWithSubRelations: string[],
165
- additionalFields = '',
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
- ${root ? '$id: ID!,' : ''}
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
- ${root ? `root: ${typeToField(root.model.name)}(where: { id: $id }) {` : ''}
179
- data: ${root ? root.reverseRelationName : model.pluralField}(limit: $limit, where: $where, ${
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
- ${additionalFields}
178
+ ${fragment}
185
179
  ${queryRelations(
186
180
  model.models,
187
- model.relations.filter(isVisibleRelation(visibleRelationsByRole, model.name, role)),
188
- role,
189
- typesWithSubRelations
181
+ model.relations.filter((relation) => !relations || relations.includes(relation.name))
190
182
  )}
191
- ${additionalFields}
183
+ ${fragment}
192
184
  }
193
- ${root ? '}' : ''}
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
- export const getEntityQuery = (
204
- model: EntityModel,
205
- role: string,
206
- visibleRelationsByRole: VisibleRelationsByRole,
207
- typesWithSubRelations: string[],
208
- additionalFields = ''
209
- ) => `query Get${model.name}Entity ($id: ID!) {
188
+ export const getEntityQuery = (model: EntityModel, role: string, relations?: string[], fragment = '') => `query Get${
189
+ model.name
190
+ }Entity ($id: ID!) {
210
191
  data: ${typeToField(model.name)}(where: { id: $id }) {
211
192
  ${displayField(model)}
212
193
  ${model.fields.filter(and(isSimpleField, isQueriableBy(role))).map(({ name }) => name)}
213
194
  ${queryRelations(
214
195
  model.models,
215
- model.relations.filter(isVisibleRelation(visibleRelationsByRole, model.name, role)),
216
- role,
217
- typesWithSubRelations
196
+ model.relations.filter((relation) => !relations || relations.includes(relation.name))
218
197
  )}
219
198
  ${queryRelations(
220
199
  model.models,
221
200
  model.reverseRelations.filter(
222
- (reverseRelation) =>
223
- isToOneRelation(reverseRelation.field) &&
224
- isVisibleRelation(visibleRelationsByRole, model.name, role)(reverseRelation)
225
- ),
226
- role,
227
- typesWithSubRelations
201
+ (reverseRelation) => isToOneRelation(reverseRelation.field) && relations.includes(reverseRelation.name)
202
+ )
228
203
  )}
229
- ${additionalFields}
204
+ ${fragment}
230
205
  }
231
206
  }`;
232
207
 
@@ -238,15 +213,12 @@ export const getFindEntityQuery = (model: EntityModel, role: string) => `query F
238
213
  }
239
214
  }`;
240
215
 
241
- export const queryRelations = (models: Models, relations: Relation[], role: string, typesWithSubRelations: string[]) =>
216
+ export const queryRelations = (models: Models, relations: Relation[]) =>
242
217
  relations
243
- .map((relation): string => {
244
- const subRelations = typesWithSubRelations.includes(relation.targetModel.name) ? relation.targetModel.relations : [];
245
-
246
- return `${relation.name} {
218
+ .map(
219
+ (relation): string => `${relation.name} {
247
220
  id
248
221
  ${displayField(relation.targetModel)}
249
- ${subRelations.length > 0 ? queryRelations(models, subRelations, role, typesWithSubRelations) : ''}
250
- }`;
251
- })
222
+ }`
223
+ )
252
224
  .join('\n');