@smartive/graphql-magic 9.1.2 → 10.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/.eslintrc +2 -10
- package/.github/workflows/release.yml +1 -1
- package/.gqmrc.json +6 -0
- package/CHANGELOG.md +2 -2
- package/README.md +1 -1
- package/dist/bin/gqm.cjs +684 -330
- package/dist/cjs/index.cjs +998 -554
- package/dist/esm/api/execute.js +1 -1
- package/dist/esm/api/execute.js.map +1 -1
- package/dist/esm/client/mutations.d.ts +2 -2
- package/dist/esm/client/mutations.js +5 -4
- package/dist/esm/client/mutations.js.map +1 -1
- package/dist/esm/client/queries.d.ts +12 -17
- package/dist/esm/client/queries.js +30 -50
- package/dist/esm/client/queries.js.map +1 -1
- package/dist/esm/context.d.ts +1 -2
- package/dist/esm/db/generate.d.ts +3 -3
- package/dist/esm/db/generate.js +31 -29
- package/dist/esm/db/generate.js.map +1 -1
- package/dist/esm/migrations/generate.d.ts +3 -4
- package/dist/esm/migrations/generate.js +114 -107
- package/dist/esm/migrations/generate.js.map +1 -1
- package/dist/esm/models/index.d.ts +1 -0
- package/dist/esm/models/index.js +1 -0
- package/dist/esm/models/index.js.map +1 -1
- package/dist/esm/models/model-definitions.d.ts +189 -0
- package/dist/esm/models/model-definitions.js +2 -0
- package/dist/esm/models/model-definitions.js.map +1 -0
- package/dist/esm/models/models.d.ts +128 -174
- package/dist/esm/models/models.js +411 -1
- package/dist/esm/models/models.js.map +1 -1
- package/dist/esm/models/mutation-hook.d.ts +2 -2
- package/dist/esm/models/utils.d.ts +35 -497
- package/dist/esm/models/utils.js +21 -144
- package/dist/esm/models/utils.js.map +1 -1
- package/dist/esm/permissions/check.d.ts +3 -3
- package/dist/esm/permissions/check.js +14 -7
- package/dist/esm/permissions/check.js.map +1 -1
- package/dist/esm/permissions/generate.js +6 -6
- package/dist/esm/permissions/generate.js.map +1 -1
- package/dist/esm/resolvers/filters.d.ts +8 -0
- package/dist/esm/resolvers/filters.js +28 -25
- package/dist/esm/resolvers/filters.js.map +1 -1
- package/dist/esm/resolvers/index.d.ts +1 -0
- package/dist/esm/resolvers/index.js +1 -0
- package/dist/esm/resolvers/index.js.map +1 -1
- package/dist/esm/resolvers/mutations.js +85 -21
- package/dist/esm/resolvers/mutations.js.map +1 -1
- package/dist/esm/resolvers/node.d.ts +13 -15
- package/dist/esm/resolvers/node.js +41 -36
- package/dist/esm/resolvers/node.js.map +1 -1
- package/dist/esm/resolvers/resolver.js +19 -49
- package/dist/esm/resolvers/resolver.js.map +1 -1
- package/dist/esm/resolvers/resolvers.d.ts +1 -8
- package/dist/esm/resolvers/resolvers.js +15 -7
- package/dist/esm/resolvers/resolvers.js.map +1 -1
- package/dist/esm/resolvers/selects.d.ts +3 -0
- package/dist/esm/resolvers/selects.js +50 -0
- package/dist/esm/resolvers/selects.js.map +1 -0
- package/dist/esm/resolvers/utils.d.ts +12 -4
- package/dist/esm/resolvers/utils.js +30 -22
- package/dist/esm/resolvers/utils.js.map +1 -1
- package/dist/esm/schema/generate.d.ts +4 -4
- package/dist/esm/schema/generate.js +122 -131
- package/dist/esm/schema/generate.js.map +1 -1
- package/dist/esm/schema/utils.d.ts +1 -1
- package/dist/esm/schema/utils.js +2 -1
- package/dist/esm/schema/utils.js.map +1 -1
- package/knexfile.ts +31 -0
- package/migrations/20230912185644_setup.ts +127 -0
- package/package.json +16 -14
- package/src/api/execute.ts +1 -1
- package/src/bin/gqm/gqm.ts +25 -23
- package/src/bin/gqm/parse-models.ts +5 -5
- package/src/bin/gqm/settings.ts +13 -4
- package/src/bin/gqm/static-eval.ts +5 -0
- package/src/bin/gqm/templates.ts +23 -3
- package/src/client/mutations.ts +11 -5
- package/src/client/queries.ts +43 -80
- package/src/context.ts +1 -2
- package/src/db/generate.ts +41 -41
- package/src/migrations/generate.ts +165 -146
- package/src/models/index.ts +1 -0
- package/src/models/model-definitions.ts +168 -0
- package/src/models/models.ts +510 -166
- package/src/models/mutation-hook.ts +2 -2
- package/src/models/utils.ts +53 -187
- package/src/permissions/check.ts +19 -11
- package/src/permissions/generate.ts +6 -6
- package/src/resolvers/filters.ts +44 -28
- package/src/resolvers/index.ts +1 -0
- package/src/resolvers/mutations.ts +98 -36
- package/src/resolvers/node.ts +79 -51
- package/src/resolvers/resolver.ts +20 -74
- package/src/resolvers/resolvers.ts +18 -7
- package/src/resolvers/selects.ts +77 -0
- package/src/resolvers/utils.ts +41 -25
- package/src/schema/generate.ts +106 -127
- package/src/schema/utils.ts +2 -1
- package/tests/api/__snapshots__/inheritance.spec.ts.snap +83 -0
- package/tests/api/inheritance.spec.ts +130 -0
- package/tests/generated/api/index.ts +1174 -0
- package/tests/generated/client/index.ts +1163 -0
- package/tests/generated/client/mutations.ts +109 -0
- package/tests/generated/db/index.ts +291 -0
- package/tests/generated/db/knex.ts +14 -0
- package/tests/generated/models.json +675 -0
- package/tests/generated/schema.graphql +325 -0
- package/tests/unit/__snapshots__/resolve.spec.ts.snap +23 -0
- package/tests/unit/queries.spec.ts +5 -5
- package/tests/unit/resolve.spec.ts +8 -8
- package/tests/utils/database/knex.ts +5 -13
- package/tests/utils/database/seed.ts +57 -18
- package/tests/utils/models.ts +62 -7
- package/tests/utils/server.ts +5 -5
- package/tsconfig.eslint.json +1 -0
- package/tests/unit/__snapshots__/generate.spec.ts.snap +0 -128
- package/tests/unit/generate.spec.ts +0 -8
- package/tests/utils/database/schema.ts +0 -64
- package/tests/utils/generate-migration.ts +0 -24
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { isRootModel, merge, not, typeToField } from '../models/utils';
|
|
2
2
|
import { mutationResolver } from './mutations';
|
|
3
3
|
import { queryResolver } from './resolver';
|
|
4
4
|
export const getResolvers = (models) => ({
|
|
@@ -6,34 +6,42 @@ export const getResolvers = (models) => ({
|
|
|
6
6
|
{
|
|
7
7
|
me: queryResolver,
|
|
8
8
|
},
|
|
9
|
-
...models
|
|
9
|
+
...models.entities
|
|
10
10
|
.filter(({ queriable }) => queriable)
|
|
11
11
|
.map((model) => ({
|
|
12
12
|
[typeToField(model.name)]: queryResolver,
|
|
13
13
|
})),
|
|
14
|
-
...models
|
|
14
|
+
...models.entities
|
|
15
15
|
.filter(({ listQueriable }) => listQueriable)
|
|
16
16
|
.map((model) => ({
|
|
17
|
-
[
|
|
17
|
+
[model.pluralField]: queryResolver,
|
|
18
18
|
})),
|
|
19
19
|
]),
|
|
20
20
|
Mutation: merge([
|
|
21
|
-
...models
|
|
21
|
+
...models.entities
|
|
22
|
+
.filter(not(isRootModel))
|
|
22
23
|
.filter(({ creatable }) => creatable)
|
|
23
24
|
.map((model) => ({
|
|
24
25
|
[`create${model.name}`]: mutationResolver,
|
|
25
26
|
})),
|
|
26
|
-
...models
|
|
27
|
+
...models.entities
|
|
28
|
+
.filter(not(isRootModel))
|
|
27
29
|
.filter(({ updatable }) => updatable)
|
|
28
30
|
.map((model) => ({
|
|
29
31
|
[`update${model.name}`]: mutationResolver,
|
|
30
32
|
})),
|
|
31
|
-
...models
|
|
33
|
+
...models.entities
|
|
34
|
+
.filter(not(isRootModel))
|
|
32
35
|
.filter(({ deletable }) => deletable)
|
|
33
36
|
.map((model) => ({
|
|
34
37
|
[`delete${model.name}`]: mutationResolver,
|
|
35
38
|
[`restore${model.name}`]: mutationResolver,
|
|
36
39
|
})),
|
|
37
40
|
]),
|
|
41
|
+
...Object.assign({}, ...models.entities.filter(isRootModel).map((model) => ({
|
|
42
|
+
[model.name]: {
|
|
43
|
+
__resolveType: ({ TYPE }) => TYPE,
|
|
44
|
+
},
|
|
45
|
+
}))),
|
|
38
46
|
});
|
|
39
47
|
//# sourceMappingURL=resolvers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolvers.js","sourceRoot":"","sources":["../../../src/resolvers/resolvers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"resolvers.js","sourceRoot":"","sources":["../../../src/resolvers/resolvers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,CAAC;IAC/C,KAAK,EAAE,KAAK,CAAC;QACX;YACE,EAAE,EAAE,aAAa;SAClB;QACD,GAAG,MAAM,CAAC,QAAQ;aACf,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC;aACpC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,aAAa;SACzC,CAAC,CAAC;QACL,GAAG,MAAM,CAAC,QAAQ;aACf,MAAM,CAAC,CAAC,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,aAAa,CAAC;aAC5C,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,aAAa;SACnC,CAAC,CAAC;KACN,CAAC;IACF,QAAQ,EAAE,KAAK,CAAU;QACvB,GAAG,MAAM,CAAC,QAAQ;aACf,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;aACxB,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC;aACpC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,SAAS,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,gBAAgB;SAC1C,CAAC,CAAC;QACL,GAAG,MAAM,CAAC,QAAQ;aACf,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;aACxB,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC;aACpC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,SAAS,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,gBAAgB;SAC1C,CAAC,CAAC;QACL,GAAG,MAAM,CAAC,QAAQ;aACf,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;aACxB,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC;aACpC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,SAAS,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,gBAAgB;YACzC,CAAC,UAAU,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,gBAAgB;SAC3C,CAAC,CAAC;KACN,CAAC;IACF,GAAG,MAAM,CAAC,MAAM,CACd,EAAE,EACF,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACrD,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;YACZ,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI;SAClC;KACF,CAAC,CAAC,CACJ;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { ID_ALIAS, TYPE_ALIAS, addJoin, getFragmentSpreads, getInlineFragments, getJoins, getNameOrAlias, getSimpleFields, } from '.';
|
|
2
|
+
import { PermissionError, UserInputError } from '..';
|
|
3
|
+
export const applySelects = (node, query, joins) => {
|
|
4
|
+
// Simple field selects
|
|
5
|
+
void query.select(...[
|
|
6
|
+
{ tableAlias: node.rootTableAlias, resultAlias: node.resultAlias, field: 'id', fieldAlias: ID_ALIAS },
|
|
7
|
+
...(node.model.root
|
|
8
|
+
? [{ tableAlias: node.rootTableAlias, resultAlias: node.resultAlias, field: 'type', fieldAlias: TYPE_ALIAS }]
|
|
9
|
+
: []),
|
|
10
|
+
...getSimpleFields(node)
|
|
11
|
+
.filter((fieldNode) => {
|
|
12
|
+
const field = node.model.fieldsByName[fieldNode.name.value];
|
|
13
|
+
if (!field || field.kind === 'relation' || field.kind === 'custom') {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
if (typeof field.queriable === 'object' && !field.queriable.roles?.includes(node.ctx.user.role)) {
|
|
17
|
+
throw new PermissionError('READ', `${node.model.name}'s field "${field.name}"`, 'field permission not available');
|
|
18
|
+
}
|
|
19
|
+
return true;
|
|
20
|
+
})
|
|
21
|
+
.map((fieldNode) => {
|
|
22
|
+
const field = node.model.getField(fieldNode.name.value);
|
|
23
|
+
if (node.model.parent && !field.inherited) {
|
|
24
|
+
addJoin(joins, node.rootTableAlias, node.model.name, node.tableAlias, 'id', 'id');
|
|
25
|
+
}
|
|
26
|
+
const fieldAlias = getNameOrAlias(fieldNode);
|
|
27
|
+
if ([ID_ALIAS, TYPE_ALIAS].includes(fieldAlias)) {
|
|
28
|
+
throw new UserInputError(`Keyword ${fieldAlias} is reserved by graphql-magic.`);
|
|
29
|
+
}
|
|
30
|
+
return {
|
|
31
|
+
fieldNode,
|
|
32
|
+
field: fieldNode.name.value,
|
|
33
|
+
tableAlias: field.inherited ? node.rootTableAlias : node.tableAlias,
|
|
34
|
+
resultAlias: node.resultAlias,
|
|
35
|
+
fieldAlias,
|
|
36
|
+
};
|
|
37
|
+
}),
|
|
38
|
+
].map(({ tableAlias, resultAlias, field, fieldAlias }) => `${node.ctx.aliases.getShort(tableAlias)}.${field} as ${node.ctx.aliases.getShort(resultAlias)}__${fieldAlias}`));
|
|
39
|
+
for (const subNode of getInlineFragments(node)) {
|
|
40
|
+
applySelects(subNode, query, joins);
|
|
41
|
+
}
|
|
42
|
+
for (const subNode of getFragmentSpreads(node)) {
|
|
43
|
+
applySelects(subNode, query, joins);
|
|
44
|
+
}
|
|
45
|
+
for (const subNode of getJoins(node, false)) {
|
|
46
|
+
addJoin(joins, node.tableAlias, subNode.rootModel.name, subNode.rootTableAlias, subNode.foreignKey, 'id');
|
|
47
|
+
applySelects(subNode, query, joins);
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=selects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selects.js","sourceRoot":"","sources":["../../../src/resolvers/selects.ts"],"names":[],"mappings":"AACA,OAAO,EACL,QAAQ,EAGR,UAAU,EACV,OAAO,EACP,kBAAkB,EAClB,kBAAkB,EAClB,QAAQ,EACR,cAAc,EACd,eAAe,GAChB,MAAM,GAAG,CAAC;AACX,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,IAAI,CAAC;AAErD,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAkB,EAAE,KAAwB,EAAE,KAAY,EAAE,EAAE;IACzF,uBAAuB;IACvB,KAAK,KAAK,CAAC,MAAM,CACf,GAAG;QACD,EAAE,UAAU,EAAE,IAAI,CAAC,cAAc,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE;QACrG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI;YACjB,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,cAAc,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC;YAC7G,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,eAAe,CAAC,IAAI,CAAC;aACrB,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE;YACpB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC5D,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE;gBAClE,OAAO,KAAK,CAAC;aACd;YAED,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBAC/F,MAAM,IAAI,eAAe,CACvB,MAAM,EACN,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,aAAa,KAAK,CAAC,IAAI,GAAG,EAC5C,gCAAgC,CACjC,CAAC;aACH;YAED,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;aACD,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;YACjB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACxD,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;gBACzC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;aACnF;YACD,MAAM,UAAU,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;YAC7C,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;gBAC/C,MAAM,IAAI,cAAc,CAAC,WAAW,UAAU,gCAAgC,CAAC,CAAC;aACjF;YACD,OAAO;gBACL,SAAS;gBACT,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,KAAK;gBAC3B,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU;gBACnE,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,UAAU;aACX,CAAC;QACJ,CAAC,CAAC;KACL,CAAC,GAAG,CACH,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,CACjD,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,UAAU,EAAE,CAClH,CACF,CAAC;IAEF,KAAK,MAAM,OAAO,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE;QAC9C,YAAY,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;KACrC;IAED,KAAK,MAAM,OAAO,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE;QAC9C,YAAY,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;KACrC;IAED,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;QAC3C,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAE1G,YAAY,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;KACrC;AACH,CAAC,CAAC"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import type { ASTNode, FieldNode, FragmentDefinitionNode, FragmentSpreadNode, GraphQLSchema, InlineFragmentNode, TypeNode } from 'graphql';
|
|
2
2
|
import { Knex } from 'knex';
|
|
3
|
+
import { EntityField } from '..';
|
|
3
4
|
import { Value } from '../values';
|
|
4
|
-
import { FieldResolverNode } from './node';
|
|
5
|
+
import { FieldResolverNode, ResolverNode } from './node';
|
|
5
6
|
export declare const ID_ALIAS = "ID";
|
|
7
|
+
export declare const TYPE_ALIAS = "TYPE";
|
|
6
8
|
export type VariableValues = {
|
|
7
9
|
[variableName: string]: Value;
|
|
8
10
|
};
|
|
@@ -25,19 +27,25 @@ export declare const ors: (query: Knex.QueryBuilder, [first, ...rest]: ((query:
|
|
|
25
27
|
export declare const getNameOrAlias: (node: FieldNode) => string;
|
|
26
28
|
export type Ops<T> = ((target: T) => T)[];
|
|
27
29
|
export declare const apply: <T>(target: T, ops: ((target: T) => T)[]) => T;
|
|
28
|
-
|
|
30
|
+
type Join = {
|
|
29
31
|
table1Alias: string;
|
|
30
32
|
column1: string;
|
|
33
|
+
table2Name: string;
|
|
34
|
+
table2Alias: string;
|
|
31
35
|
column2: string;
|
|
32
|
-
}
|
|
36
|
+
};
|
|
37
|
+
export type Joins = Join[];
|
|
33
38
|
export declare const applyJoins: (aliases: AliasGenerator, query: Knex.QueryBuilder, joins: Joins) => void;
|
|
34
39
|
/**
|
|
35
40
|
* Note: modifies the join parameter.
|
|
36
41
|
*/
|
|
37
|
-
export declare const addJoin: (joins: Joins, table1Alias: string,
|
|
42
|
+
export declare const addJoin: (joins: Joins, table1Alias: string, table2Name: string, table2Alias: string, column1: string, column2: string) => void;
|
|
38
43
|
export declare class AliasGenerator {
|
|
39
44
|
private reverse;
|
|
40
45
|
getShort(long?: string): string;
|
|
41
46
|
getLong(short: string): string;
|
|
42
47
|
}
|
|
43
48
|
export declare const hash: (s: any) => string;
|
|
49
|
+
export declare const getColumnName: (field: EntityField) => string;
|
|
50
|
+
export declare const getColumn: (node: Pick<ResolverNode, 'model' | 'ctx' | 'rootTableAlias' | 'tableAlias'>, key: string) => string;
|
|
51
|
+
export {};
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { createHash } from 'crypto';
|
|
2
2
|
import { Kind } from 'graphql';
|
|
3
|
+
import { isEqual } from 'lodash';
|
|
3
4
|
import { UserInputError } from '../errors';
|
|
4
5
|
import { get, it } from '../models/utils';
|
|
5
6
|
export const ID_ALIAS = 'ID';
|
|
7
|
+
export const TYPE_ALIAS = 'TYPE';
|
|
6
8
|
export const getTypeName = (t) => {
|
|
7
9
|
switch (t.kind) {
|
|
8
10
|
case 'ListType':
|
|
@@ -28,17 +30,15 @@ export const isFragmentSpreadNode = (n) => n.kind === Kind.FRAGMENT_SPREAD;
|
|
|
28
30
|
export const getType = (schema, name) => get(schema.getType(name), 'astNode');
|
|
29
31
|
export const getFragmentTypeName = (node) => get(get(node.typeCondition, 'name'), 'value');
|
|
30
32
|
export function hydrate(node, raw) {
|
|
31
|
-
const
|
|
33
|
+
const resultAlias = node.resultAlias;
|
|
32
34
|
const res = raw.map((entry) => {
|
|
33
35
|
const res = {};
|
|
34
36
|
outer: for (const [column, value] of Object.entries(entry)) {
|
|
35
37
|
let current = res;
|
|
36
|
-
const
|
|
37
|
-
const fieldName = shortParts.pop();
|
|
38
|
-
const columnWithoutField = shortParts.join('__');
|
|
38
|
+
const [, columnWithoutField, fieldName] = column.match(/^(.*\w)__(\w+)$/);
|
|
39
39
|
const longColumn = node.ctx.aliases.getLong(columnWithoutField);
|
|
40
|
-
const longColumnWithoutRoot = longColumn.replace(new RegExp(`^${
|
|
41
|
-
const allParts = [
|
|
40
|
+
const longColumnWithoutRoot = longColumn.replace(new RegExp(`^${resultAlias}(__)?`), '');
|
|
41
|
+
const allParts = [resultAlias, ...(longColumnWithoutRoot ? longColumnWithoutRoot.split('__') : []), fieldName];
|
|
42
42
|
for (let i = 0; i < allParts.length - 1; i++) {
|
|
43
43
|
const part = allParts[i];
|
|
44
44
|
if (!current[part]) {
|
|
@@ -52,7 +52,7 @@ export function hydrate(node, raw) {
|
|
|
52
52
|
}
|
|
53
53
|
current[it(fieldName)] = value;
|
|
54
54
|
}
|
|
55
|
-
return res[
|
|
55
|
+
return res[resultAlias];
|
|
56
56
|
});
|
|
57
57
|
return res;
|
|
58
58
|
}
|
|
@@ -61,16 +61,12 @@ export const ors = (query, [first, ...rest]) => {
|
|
|
61
61
|
return query;
|
|
62
62
|
}
|
|
63
63
|
return query.where((subQuery) => {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
// eslint-disable-next-line @typescript-eslint/no-floating-promises -- we do not need to await knex here
|
|
67
|
-
first(subSubQuery);
|
|
64
|
+
void subQuery.where((subSubQuery) => {
|
|
65
|
+
void first(subSubQuery);
|
|
68
66
|
});
|
|
69
67
|
for (const cb of rest) {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
// eslint-disable-next-line @typescript-eslint/no-floating-promises -- we do not need to await knex here
|
|
73
|
-
cb(subSubQuery);
|
|
68
|
+
void subQuery.orWhere((subSubQuery) => {
|
|
69
|
+
void cb(subSubQuery);
|
|
74
70
|
});
|
|
75
71
|
}
|
|
76
72
|
});
|
|
@@ -84,19 +80,26 @@ export const getNameOrAlias = (node) => {
|
|
|
84
80
|
};
|
|
85
81
|
export const apply = (target, ops) => ops.reduce((target, op) => op(target), target);
|
|
86
82
|
export const applyJoins = (aliases, query, joins) => {
|
|
87
|
-
for (const
|
|
88
|
-
const [table, alias] = tableName.split(':');
|
|
83
|
+
for (const { table1Alias, table2Name, table2Alias, column1, column2 } of joins) {
|
|
89
84
|
const table1ShortAlias = aliases.getShort(table1Alias);
|
|
90
|
-
const table2ShortAlias = aliases.getShort(
|
|
91
|
-
|
|
92
|
-
query.leftJoin(`${table} as ${table2ShortAlias}`, `${table1ShortAlias}.${column1}`, `${table2ShortAlias}.${column2}`);
|
|
85
|
+
const table2ShortAlias = aliases.getShort(table2Alias);
|
|
86
|
+
void query.leftJoin(`${table2Name} as ${table2ShortAlias}`, `${table1ShortAlias}.${column1}`, `${table2ShortAlias}.${column2}`);
|
|
93
87
|
}
|
|
94
88
|
};
|
|
95
89
|
/**
|
|
96
90
|
* Note: modifies the join parameter.
|
|
97
91
|
*/
|
|
98
|
-
export const addJoin = (joins, table1Alias,
|
|
99
|
-
|
|
92
|
+
export const addJoin = (joins, table1Alias, table2Name, table2Alias, column1, column2) => {
|
|
93
|
+
const join = { table1Alias, table2Name, table2Alias, column1, column2 };
|
|
94
|
+
const existingJoin = joins.find((j) => j.table2Alias === join.table2Alias);
|
|
95
|
+
if (existingJoin) {
|
|
96
|
+
if (!isEqual(existingJoin, join)) {
|
|
97
|
+
throw new Error(`Join collision: ${existingJoin}, ${join}`);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
joins.push(join);
|
|
102
|
+
}
|
|
100
103
|
};
|
|
101
104
|
export class AliasGenerator {
|
|
102
105
|
reverse = {};
|
|
@@ -122,4 +125,9 @@ export class AliasGenerator {
|
|
|
122
125
|
}
|
|
123
126
|
}
|
|
124
127
|
export const hash = (s) => createHash('md5').update(JSON.stringify(s)).digest('hex');
|
|
128
|
+
export const getColumnName = (field) => field.kind === 'relation' ? field.foreignKey || `${field.name}Id` : field.name;
|
|
129
|
+
export const getColumn = (node, key) => {
|
|
130
|
+
const field = node.model.fields.find((field) => getColumnName(field) === key);
|
|
131
|
+
return `${node.ctx.aliases.getShort(field.inherited ? node.rootTableAlias : node.tableAlias)}.${key}`;
|
|
132
|
+
};
|
|
125
133
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/resolvers/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAWpC,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE/B,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAI1C,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/resolvers/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { DefinitionNode, DocumentNode, GraphQLSchema } from 'graphql';
|
|
2
|
-
import {
|
|
3
|
-
export declare const generateDefinitions: (
|
|
4
|
-
export declare const generate: (
|
|
2
|
+
import { Models } from '../models/models';
|
|
3
|
+
export declare const generateDefinitions: ({ scalars, rawEnums, enums, inputs, interfaces, entities, objects, }: Models) => DefinitionNode[];
|
|
4
|
+
export declare const generate: (models: Models) => DocumentNode;
|
|
5
5
|
export declare const printSchema: (schema: GraphQLSchema) => string;
|
|
6
6
|
export declare const printSchemaFromDocument: (document: DocumentNode) => string;
|
|
7
|
-
export declare const printSchemaFromModels: (models:
|
|
7
|
+
export declare const printSchemaFromModels: (models: Models) => string;
|