@smartive/graphql-magic 23.1.0 → 23.3.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 +2 -3
- package/dist/bin/gqm.cjs +49 -3
- package/dist/cjs/index.cjs +13 -2
- package/dist/esm/models/model-definitions.d.ts +5 -0
- package/dist/esm/models/utils.d.ts +1 -1
- package/dist/esm/models/utils.js +10 -2
- package/dist/esm/models/utils.js.map +1 -1
- package/package.json +1 -1
- package/src/bin/gqm/static-eval.ts +48 -1
- package/src/models/model-definitions.ts +6 -0
- package/src/models/utils.ts +15 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
## 23.
|
|
1
|
+
## 23.3.0 (2026-01-30)
|
|
2
2
|
|
|
3
|
-
* feat:
|
|
4
|
-
* chore(deps): update dependency prettier to v3.8.1 (#404) ([54b2866](https://github.com/smartive/graphql-magic/commit/54b2866)), closes [#404](https://github.com/smartive/graphql-magic/issues/404)
|
|
3
|
+
* feat: enhance staticEval to support destructuring and rest parameters in function arguments (#406) ([adf91c6](https://github.com/smartive/graphql-magic/commit/adf91c6)), closes [#406](https://github.com/smartive/graphql-magic/issues/406)
|
package/dist/bin/gqm.cjs
CHANGED
|
@@ -592,9 +592,20 @@ var get = (object2, key) => {
|
|
|
592
592
|
}
|
|
593
593
|
return value2;
|
|
594
594
|
};
|
|
595
|
-
var isManyToManyRelationEntityModel = ({
|
|
595
|
+
var isManyToManyRelationEntityModel = ({
|
|
596
|
+
fields: fields2,
|
|
597
|
+
manyToManyRelation
|
|
598
|
+
}) => {
|
|
596
599
|
const nonGeneratedFields = fields2.filter((field) => !field.generated);
|
|
597
|
-
|
|
600
|
+
const relationFields = nonGeneratedFields.filter((field) => field.kind === "relation");
|
|
601
|
+
if (manyToManyRelation === void 0) {
|
|
602
|
+
return nonGeneratedFields.length === 2 && nonGeneratedFields.length === relationFields.length;
|
|
603
|
+
}
|
|
604
|
+
if (manyToManyRelation === true && relationFields.length !== 2) {
|
|
605
|
+
console.trace();
|
|
606
|
+
throw new Error("Entity is marked as many-to-many relation but does not have exactly 2 relation fields.");
|
|
607
|
+
}
|
|
608
|
+
return manyToManyRelation;
|
|
598
609
|
};
|
|
599
610
|
|
|
600
611
|
// src/db/generate.ts
|
|
@@ -2314,6 +2325,7 @@ var KNOWN_IDENTIFIERS = {
|
|
|
2314
2325
|
var staticEval = (node, context) => visit(node, context, VISITOR);
|
|
2315
2326
|
var VISITOR = {
|
|
2316
2327
|
undefined: () => void 0,
|
|
2328
|
+
[import_ts_morph2.SyntaxKind.BindingElement]: (node, context) => context[node.getName()],
|
|
2317
2329
|
[import_ts_morph2.SyntaxKind.VariableDeclaration]: (node, context) => staticEval(node.getInitializer(), context),
|
|
2318
2330
|
[import_ts_morph2.SyntaxKind.ArrayLiteralExpression]: (node, context) => {
|
|
2319
2331
|
const values = [];
|
|
@@ -2409,7 +2421,41 @@ var VISITOR = {
|
|
|
2409
2421
|
const parameters = {};
|
|
2410
2422
|
let i = 0;
|
|
2411
2423
|
for (const parameter of node.getParameters()) {
|
|
2412
|
-
|
|
2424
|
+
const argument = args2[i];
|
|
2425
|
+
if (parameter.isRestParameter()) {
|
|
2426
|
+
parameters[parameter.getName()] = args2.slice(i);
|
|
2427
|
+
} else {
|
|
2428
|
+
const nameNode = parameter.getNameNode();
|
|
2429
|
+
if (import_ts_morph2.Node.isObjectBindingPattern(nameNode)) {
|
|
2430
|
+
const value2 = argument ?? {};
|
|
2431
|
+
const usedKeys = /* @__PURE__ */ new Set();
|
|
2432
|
+
for (const element of nameNode.getElements()) {
|
|
2433
|
+
if (element.getDotDotDotToken()) {
|
|
2434
|
+
const restName = element.getName();
|
|
2435
|
+
const restValue = {};
|
|
2436
|
+
for (const key in value2) {
|
|
2437
|
+
if (!usedKeys.has(key)) {
|
|
2438
|
+
restValue[key] = value2[key];
|
|
2439
|
+
}
|
|
2440
|
+
}
|
|
2441
|
+
parameters[restName] = restValue;
|
|
2442
|
+
} else {
|
|
2443
|
+
const propertyNameNode = element.getPropertyNameNode();
|
|
2444
|
+
const elementDetails = element.getNameNode();
|
|
2445
|
+
const key = propertyNameNode ? propertyNameNode.getText() : elementDetails.getText();
|
|
2446
|
+
const variableName = elementDetails.getText();
|
|
2447
|
+
usedKeys.add(key);
|
|
2448
|
+
let propertyValue = value2[key];
|
|
2449
|
+
if (propertyValue === void 0 && element.hasInitializer()) {
|
|
2450
|
+
propertyValue = staticEval(element.getInitializer(), { ...context, ...parameters });
|
|
2451
|
+
}
|
|
2452
|
+
parameters[variableName] = propertyValue;
|
|
2453
|
+
}
|
|
2454
|
+
}
|
|
2455
|
+
} else {
|
|
2456
|
+
parameters[parameter.getName()] = argument;
|
|
2457
|
+
}
|
|
2458
|
+
}
|
|
2413
2459
|
i++;
|
|
2414
2460
|
}
|
|
2415
2461
|
return staticEval(node.getBody(), { ...context, ...parameters });
|
package/dist/cjs/index.cjs
CHANGED
|
@@ -891,9 +891,20 @@ var as = (value2, type) => {
|
|
|
891
891
|
}
|
|
892
892
|
return value2;
|
|
893
893
|
};
|
|
894
|
-
var isManyToManyRelationEntityModel = ({
|
|
894
|
+
var isManyToManyRelationEntityModel = ({
|
|
895
|
+
fields: fields2,
|
|
896
|
+
manyToManyRelation
|
|
897
|
+
}) => {
|
|
895
898
|
const nonGeneratedFields = fields2.filter((field) => !field.generated);
|
|
896
|
-
|
|
899
|
+
const relationFields = nonGeneratedFields.filter((field) => field.kind === "relation");
|
|
900
|
+
if (manyToManyRelation === void 0) {
|
|
901
|
+
return nonGeneratedFields.length === 2 && nonGeneratedFields.length === relationFields.length;
|
|
902
|
+
}
|
|
903
|
+
if (manyToManyRelation === true && relationFields.length !== 2) {
|
|
904
|
+
console.trace();
|
|
905
|
+
throw new Error("Entity is marked as many-to-many relation but does not have exactly 2 relation fields.");
|
|
906
|
+
}
|
|
907
|
+
return manyToManyRelation;
|
|
897
908
|
};
|
|
898
909
|
|
|
899
910
|
// src/client/queries.ts
|
|
@@ -170,6 +170,11 @@ export type ModelDefinition = {
|
|
|
170
170
|
displayField?: string;
|
|
171
171
|
defaultOrderBy?: OrderBy[];
|
|
172
172
|
fields: EntityFieldDefinition[];
|
|
173
|
+
/**
|
|
174
|
+
* Use this field to explicitly mark/unmark an entity model as a many-to-many relation entity.
|
|
175
|
+
* If not set, graphql-magic will try to infer it based on its fields.
|
|
176
|
+
*/
|
|
177
|
+
manyToManyRelation?: boolean;
|
|
173
178
|
deleted?: true;
|
|
174
179
|
oldName?: string;
|
|
175
180
|
});
|
|
@@ -57,5 +57,5 @@ type Typeof = {
|
|
|
57
57
|
function: Function;
|
|
58
58
|
};
|
|
59
59
|
export declare const as: <T extends keyof Typeof>(value: unknown, type: T) => Typeof[T];
|
|
60
|
-
export declare const isManyToManyRelationEntityModel: ({ fields }: Pick<EntityModelDefinition, "fields">) => boolean;
|
|
60
|
+
export declare const isManyToManyRelationEntityModel: ({ fields, manyToManyRelation, }: Pick<EntityModelDefinition, "fields" | "manyToManyRelation">) => boolean;
|
|
61
61
|
export {};
|
package/dist/esm/models/utils.js
CHANGED
|
@@ -100,8 +100,16 @@ export const as = (value, type) => {
|
|
|
100
100
|
}
|
|
101
101
|
return value;
|
|
102
102
|
};
|
|
103
|
-
export const isManyToManyRelationEntityModel = ({ fields }) => {
|
|
103
|
+
export const isManyToManyRelationEntityModel = ({ fields, manyToManyRelation, }) => {
|
|
104
104
|
const nonGeneratedFields = fields.filter((field) => !field.generated);
|
|
105
|
-
|
|
105
|
+
const relationFields = nonGeneratedFields.filter((field) => field.kind === 'relation');
|
|
106
|
+
if (manyToManyRelation === undefined) {
|
|
107
|
+
return nonGeneratedFields.length === 2 && nonGeneratedFields.length === relationFields.length;
|
|
108
|
+
}
|
|
109
|
+
if (manyToManyRelation === true && relationFields.length !== 2) {
|
|
110
|
+
console.trace();
|
|
111
|
+
throw new Error('Entity is marked as many-to-many relation but does not have exactly 2 relation fields.');
|
|
112
|
+
}
|
|
113
|
+
return manyToManyRelation;
|
|
106
114
|
};
|
|
107
115
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/models/utils.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/models/utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { camelCase, Dictionary, kebabCase, lowerFirst, snakeCase, startCase, upperFirst } from 'lodash';
|
|
2
2
|
import {
|
|
3
|
+
BindingElement,
|
|
3
4
|
CaseClause,
|
|
4
5
|
ElementAccessExpression,
|
|
5
6
|
Identifier,
|
|
@@ -47,6 +48,7 @@ export const staticEval = (node: Node | undefined, context: Dictionary<unknown>)
|
|
|
47
48
|
|
|
48
49
|
const VISITOR: Visitor<unknown, Dictionary<unknown>> = {
|
|
49
50
|
undefined: () => undefined,
|
|
51
|
+
[SyntaxKind.BindingElement]: (node: BindingElement, context) => context[node.getName()],
|
|
50
52
|
[SyntaxKind.VariableDeclaration]: (node, context) => staticEval(node.getInitializer(), context),
|
|
51
53
|
[SyntaxKind.ArrayLiteralExpression]: (node, context) => {
|
|
52
54
|
const values: unknown[] = [];
|
|
@@ -146,7 +148,52 @@ const VISITOR: Visitor<unknown, Dictionary<unknown>> = {
|
|
|
146
148
|
const parameters: Dictionary<unknown> = {};
|
|
147
149
|
let i = 0;
|
|
148
150
|
for (const parameter of node.getParameters()) {
|
|
149
|
-
|
|
151
|
+
const argument = args[i];
|
|
152
|
+
|
|
153
|
+
if (parameter.isRestParameter()) {
|
|
154
|
+
parameters[parameter.getName()] = args.slice(i);
|
|
155
|
+
} else {
|
|
156
|
+
const nameNode = parameter.getNameNode();
|
|
157
|
+
if (Node.isObjectBindingPattern(nameNode)) {
|
|
158
|
+
const value = (argument ?? {}) as Dictionary<unknown>;
|
|
159
|
+
const usedKeys = new Set<string>();
|
|
160
|
+
|
|
161
|
+
for (const element of nameNode.getElements()) {
|
|
162
|
+
if (element.getDotDotDotToken()) {
|
|
163
|
+
// Handle rest element (...args)
|
|
164
|
+
const restName = element.getName();
|
|
165
|
+
const restValue: Dictionary<unknown> = {};
|
|
166
|
+
for (const key in value) {
|
|
167
|
+
if (!usedKeys.has(key)) {
|
|
168
|
+
restValue[key] = value[key];
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
parameters[restName] = restValue;
|
|
172
|
+
} else {
|
|
173
|
+
// Handle property destructuring (prop: alias = defaultValue)
|
|
174
|
+
const propertyNameNode = element.getPropertyNameNode();
|
|
175
|
+
const elementDetails = element.getNameNode();
|
|
176
|
+
|
|
177
|
+
// If "prop: alias", key is "prop". If just "alias", key is "alias".
|
|
178
|
+
const key = propertyNameNode ? propertyNameNode.getText() : elementDetails.getText();
|
|
179
|
+
const variableName = elementDetails.getText();
|
|
180
|
+
|
|
181
|
+
usedKeys.add(key);
|
|
182
|
+
|
|
183
|
+
let propertyValue = value[key];
|
|
184
|
+
|
|
185
|
+
// Handle default values (= defaultValue)
|
|
186
|
+
if (propertyValue === undefined && element.hasInitializer()) {
|
|
187
|
+
propertyValue = staticEval(element.getInitializer(), { ...context, ...parameters });
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
parameters[variableName] = propertyValue;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
} else {
|
|
194
|
+
parameters[parameter.getName()] = argument;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
150
197
|
i++;
|
|
151
198
|
}
|
|
152
199
|
return staticEval(node.getBody(), { ...context, ...parameters });
|
|
@@ -156,6 +156,12 @@ export type ModelDefinition = {
|
|
|
156
156
|
defaultOrderBy?: OrderBy[];
|
|
157
157
|
fields: EntityFieldDefinition[];
|
|
158
158
|
|
|
159
|
+
/**
|
|
160
|
+
* Use this field to explicitly mark/unmark an entity model as a many-to-many relation entity.
|
|
161
|
+
* If not set, graphql-magic will try to infer it based on its fields.
|
|
162
|
+
*/
|
|
163
|
+
manyToManyRelation?: boolean;
|
|
164
|
+
|
|
159
165
|
// temporary fields for the generation of migrations
|
|
160
166
|
deleted?: true;
|
|
161
167
|
oldName?: string;
|
package/src/models/utils.ts
CHANGED
|
@@ -199,8 +199,21 @@ export const as = <T extends keyof Typeof>(value: unknown, type: T): Typeof[T] =
|
|
|
199
199
|
return value as Typeof[T];
|
|
200
200
|
};
|
|
201
201
|
|
|
202
|
-
export const isManyToManyRelationEntityModel = ({
|
|
202
|
+
export const isManyToManyRelationEntityModel = ({
|
|
203
|
+
fields,
|
|
204
|
+
manyToManyRelation,
|
|
205
|
+
}: Pick<EntityModelDefinition, 'fields' | 'manyToManyRelation'>) => {
|
|
203
206
|
const nonGeneratedFields = fields.filter((field) => !field.generated);
|
|
207
|
+
const relationFields = nonGeneratedFields.filter((field) => field.kind === 'relation');
|
|
204
208
|
|
|
205
|
-
|
|
209
|
+
if (manyToManyRelation === undefined) {
|
|
210
|
+
return nonGeneratedFields.length === 2 && nonGeneratedFields.length === relationFields.length;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
if (manyToManyRelation === true && relationFields.length !== 2) {
|
|
214
|
+
console.trace();
|
|
215
|
+
throw new Error('Entity is marked as many-to-many relation but does not have exactly 2 relation fields.');
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
return manyToManyRelation;
|
|
206
219
|
};
|