remult 0.17.0 → 0.17.2
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/esm/graphql.js +82 -42
- package/graphql.js +165 -97
- package/package.json +1 -1
package/esm/graphql.js
CHANGED
|
@@ -1,17 +1,24 @@
|
|
|
1
1
|
import { Remult } from ".";
|
|
2
2
|
import { allEntities } from "./src/context";
|
|
3
|
-
import { getEntityKey } from "./src/remult3";
|
|
4
3
|
import { DataApi } from "./src/data-api";
|
|
5
4
|
export function remultGraphql(api) {
|
|
6
5
|
let r = new Remult();
|
|
7
|
-
let types =
|
|
6
|
+
let types = [];
|
|
7
|
+
let filterTypes = '';
|
|
8
8
|
let query = '';
|
|
9
9
|
let root = {};
|
|
10
|
+
function getType(key) {
|
|
11
|
+
let t = types.find(t => t.key === key);
|
|
12
|
+
if (!t)
|
|
13
|
+
types.push((t = ({ fields: "", key, moreFields: "", resultProcessors: [] })));
|
|
14
|
+
return t;
|
|
15
|
+
}
|
|
10
16
|
for (const e of allEntities) {
|
|
11
17
|
let meta = r.repo(e).metadata;
|
|
12
|
-
let fields = '';
|
|
13
18
|
let filterFields = '';
|
|
14
|
-
let key =
|
|
19
|
+
let key = meta.key;
|
|
20
|
+
const t = getType(key);
|
|
21
|
+
let q = "\n\t" + key + "(options: options, filter:" + key + "Filter): [" + key + "]";
|
|
15
22
|
if (key) {
|
|
16
23
|
for (const f of meta.fields) {
|
|
17
24
|
{
|
|
@@ -19,6 +26,7 @@ export function remultGraphql(api) {
|
|
|
19
26
|
switch (f.valueType) {
|
|
20
27
|
case Boolean:
|
|
21
28
|
type = "Boolean";
|
|
29
|
+
break;
|
|
22
30
|
case Number:
|
|
23
31
|
{
|
|
24
32
|
if (f.valueConverter?.fieldTypeInDb == 'integer')
|
|
@@ -26,8 +34,31 @@ export function remultGraphql(api) {
|
|
|
26
34
|
else
|
|
27
35
|
type = "Float";
|
|
28
36
|
}
|
|
37
|
+
break;
|
|
38
|
+
}
|
|
39
|
+
if (allEntities.includes(f.valueType)) {
|
|
40
|
+
const refKey = r.repo(f.valueType).metadata.key;
|
|
41
|
+
t.fields += "\n\t" + f.key + ":" + refKey;
|
|
42
|
+
t.resultProcessors.push(r => {
|
|
43
|
+
const val = r[f.key];
|
|
44
|
+
r[f.key] = async (args, req, gqlInfo) => {
|
|
45
|
+
const queryResult = await root[refKey]({ ...args.filter, filter: { id: val }, options: { limit: 1 } }, req, gqlInfo);
|
|
46
|
+
if (queryResult.length > 0)
|
|
47
|
+
return queryResult[0];
|
|
48
|
+
return null;
|
|
49
|
+
};
|
|
50
|
+
});
|
|
51
|
+
let refT = getType(refKey);
|
|
52
|
+
refT.moreFields += q;
|
|
53
|
+
refT.resultProcessors.push(r => {
|
|
54
|
+
const val = r.id;
|
|
55
|
+
r[key] = async (args, req, gqlInfo) => {
|
|
56
|
+
return await root[key]({ filter: { ...args.filter, [f.key]: val }, options: args.options }, req, gqlInfo);
|
|
57
|
+
};
|
|
58
|
+
});
|
|
29
59
|
}
|
|
30
|
-
|
|
60
|
+
else
|
|
61
|
+
t.fields += "\n\t" + f.key + ":" + type;
|
|
31
62
|
for (const operator of ["", "_ne"]) {
|
|
32
63
|
filterFields += "\n\t" + f.key + operator + ":" + type;
|
|
33
64
|
}
|
|
@@ -44,41 +75,50 @@ export function remultGraphql(api) {
|
|
|
44
75
|
filterFields += "\n\t" + f.key + "_in:[" + type + "]";
|
|
45
76
|
}
|
|
46
77
|
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
78
|
+
filterTypes += "input " + key + "Filter{" + filterFields + "\n\tOR:[" + key + "Filter]\n}\n";
|
|
79
|
+
query += q;
|
|
80
|
+
root[key] = async ({ options, filter }, req, a) => {
|
|
81
|
+
console.log({ ...a.fieldNodes });
|
|
82
|
+
return new Promise(async (res, error) => {
|
|
83
|
+
api.withRemult(req, undefined, async () => {
|
|
84
|
+
let remult = await api.getRemult(req);
|
|
85
|
+
let repo = remult.repo(e);
|
|
86
|
+
let dApi = new DataApi(repo, remult);
|
|
87
|
+
let result;
|
|
88
|
+
let err;
|
|
89
|
+
await dApi.getArray({
|
|
90
|
+
success: x => result = x.map(y => {
|
|
91
|
+
t.resultProcessors.forEach(z => z(y));
|
|
92
|
+
return y;
|
|
93
|
+
}),
|
|
94
|
+
created: undefined,
|
|
95
|
+
deleted: undefined,
|
|
96
|
+
error: x => err = x,
|
|
97
|
+
forbidden: () => err = 'forbidden',
|
|
98
|
+
notFound: () => err = 'not found',
|
|
99
|
+
progress: undefined
|
|
100
|
+
}, {
|
|
101
|
+
get: key => {
|
|
102
|
+
if (options)
|
|
103
|
+
switch (key) {
|
|
104
|
+
case "_limit":
|
|
105
|
+
return options.limit;
|
|
106
|
+
case "_page":
|
|
107
|
+
return options.page;
|
|
108
|
+
case "_sort":
|
|
109
|
+
return options.sort;
|
|
110
|
+
case "_order":
|
|
111
|
+
return options.order;
|
|
112
|
+
}
|
|
76
113
|
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
114
|
+
}, filter);
|
|
115
|
+
if (err) {
|
|
116
|
+
error(err);
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
res(result);
|
|
120
|
+
});
|
|
121
|
+
});
|
|
82
122
|
};
|
|
83
123
|
}
|
|
84
124
|
}
|
|
@@ -88,15 +128,15 @@ export function remultGraphql(api) {
|
|
|
88
128
|
}
|
|
89
129
|
return {
|
|
90
130
|
rootValue: root,
|
|
91
|
-
schema:
|
|
131
|
+
schema: `${types.map(({ key, fields, moreFields }) => "type " + key + "{" + fields + moreFields + "\n}\n").join('')}
|
|
132
|
+
${query}
|
|
133
|
+
${filterTypes}
|
|
92
134
|
input options{
|
|
93
135
|
limit:Int
|
|
94
136
|
page:Int
|
|
95
137
|
sort:String
|
|
96
138
|
order:String
|
|
97
139
|
}
|
|
98
|
-
${types}
|
|
99
|
-
${query}
|
|
100
140
|
`
|
|
101
141
|
};
|
|
102
142
|
}
|
package/graphql.js
CHANGED
|
@@ -4,137 +4,202 @@ exports.remultGraphql = void 0;
|
|
|
4
4
|
var tslib_1 = require("tslib");
|
|
5
5
|
var _1 = require(".");
|
|
6
6
|
var context_1 = require("./src/context");
|
|
7
|
-
var remult3_1 = require("./src/remult3");
|
|
8
7
|
var data_api_1 = require("./src/data-api");
|
|
9
8
|
function remultGraphql(api) {
|
|
10
9
|
var e_1, _a;
|
|
11
10
|
var _this = this;
|
|
12
11
|
var _b;
|
|
13
12
|
var r = new _1.Remult();
|
|
14
|
-
var types =
|
|
13
|
+
var types = [];
|
|
14
|
+
var filterTypes = '';
|
|
15
15
|
var query = '';
|
|
16
16
|
var root = {};
|
|
17
|
+
function getType(key) {
|
|
18
|
+
var t = types.find(function (t) { return t.key === key; });
|
|
19
|
+
if (!t)
|
|
20
|
+
types.push((t = ({ fields: "", key: key, moreFields: "", resultProcessors: [] })));
|
|
21
|
+
return t;
|
|
22
|
+
}
|
|
17
23
|
var _loop_1 = function (e) {
|
|
18
|
-
var e_2, _a
|
|
24
|
+
var e_2, _a;
|
|
19
25
|
var meta = r.repo(e).metadata;
|
|
20
|
-
var fields = '';
|
|
21
26
|
var filterFields = '';
|
|
22
|
-
var key =
|
|
27
|
+
var key = meta.key;
|
|
28
|
+
var t = getType(key);
|
|
29
|
+
var q = "\n\t" + key + "(options: options, filter:" + key + "Filter): [" + key + "]";
|
|
23
30
|
if (key) {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
31
|
+
var _loop_2 = function (f) {
|
|
32
|
+
var e_3, _a, e_4, _b, e_5, _c;
|
|
33
|
+
{
|
|
34
|
+
var type = "String";
|
|
35
|
+
switch (f.valueType) {
|
|
36
|
+
case Boolean:
|
|
37
|
+
type = "Boolean";
|
|
38
|
+
break;
|
|
39
|
+
case Number:
|
|
40
|
+
{
|
|
41
|
+
if (((_b = f.valueConverter) === null || _b === void 0 ? void 0 : _b.fieldTypeInDb) == 'integer')
|
|
42
|
+
type = "Int";
|
|
43
|
+
else
|
|
44
|
+
type = "Float";
|
|
45
|
+
}
|
|
46
|
+
break;
|
|
47
|
+
}
|
|
48
|
+
if (context_1.allEntities.includes(f.valueType)) {
|
|
49
|
+
var refKey_1 = r.repo(f.valueType).metadata.key;
|
|
50
|
+
t.fields += "\n\t" + f.key + ":" + refKey_1;
|
|
51
|
+
t.resultProcessors.push(function (r) {
|
|
52
|
+
var val = r[f.key];
|
|
53
|
+
r[f.key] = function (args, req, gqlInfo) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
54
|
+
var queryResult;
|
|
55
|
+
return tslib_1.__generator(this, function (_a) {
|
|
56
|
+
switch (_a.label) {
|
|
57
|
+
case 0: return [4 /*yield*/, root[refKey_1](tslib_1.__assign(tslib_1.__assign({}, args.filter), { filter: { id: val }, options: { limit: 1 } }), req, gqlInfo)];
|
|
58
|
+
case 1:
|
|
59
|
+
queryResult = _a.sent();
|
|
60
|
+
if (queryResult.length > 0)
|
|
61
|
+
return [2 /*return*/, queryResult[0]];
|
|
62
|
+
return [2 /*return*/, null];
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
}); };
|
|
66
|
+
});
|
|
67
|
+
var refT = getType(refKey_1);
|
|
68
|
+
refT.moreFields += q;
|
|
69
|
+
refT.resultProcessors.push(function (r) {
|
|
70
|
+
var val = r.id;
|
|
71
|
+
r[key] = function (args, req, gqlInfo) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
72
|
+
var _a;
|
|
73
|
+
return tslib_1.__generator(this, function (_b) {
|
|
74
|
+
switch (_b.label) {
|
|
75
|
+
case 0: return [4 /*yield*/, root[key]({ filter: tslib_1.__assign(tslib_1.__assign({}, args.filter), (_a = {}, _a[f.key] = val, _a)), options: args.options }, req, gqlInfo)];
|
|
76
|
+
case 1: return [2 /*return*/, _b.sent()];
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
}); };
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
else
|
|
83
|
+
t.fields += "\n\t" + f.key + ":" + type;
|
|
84
|
+
try {
|
|
85
|
+
for (var _d = (e_3 = void 0, tslib_1.__values(["", "_ne"])), _e = _d.next(); !_e.done; _e = _d.next()) {
|
|
86
|
+
var operator = _e.value;
|
|
87
|
+
filterFields += "\n\t" + f.key + operator + ":" + type;
|
|
39
88
|
}
|
|
40
|
-
|
|
89
|
+
}
|
|
90
|
+
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
91
|
+
finally {
|
|
41
92
|
try {
|
|
42
|
-
|
|
43
|
-
|
|
93
|
+
if (_e && !_e.done && (_a = _d.return)) _a.call(_d);
|
|
94
|
+
}
|
|
95
|
+
finally { if (e_3) throw e_3.error; }
|
|
96
|
+
}
|
|
97
|
+
if (f.valueType === String || f.valueType === Number)
|
|
98
|
+
try {
|
|
99
|
+
for (var _f = (e_4 = void 0, tslib_1.__values(["_gt", "_gte", "_lt", "_lte"])), _g = _f.next(); !_g.done; _g = _f.next()) {
|
|
100
|
+
var operator = _g.value;
|
|
44
101
|
filterFields += "\n\t" + f.key + operator + ":" + type;
|
|
45
102
|
}
|
|
46
103
|
}
|
|
47
|
-
catch (
|
|
104
|
+
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
48
105
|
finally {
|
|
49
106
|
try {
|
|
50
|
-
if (
|
|
107
|
+
if (_g && !_g.done && (_b = _f.return)) _b.call(_f);
|
|
51
108
|
}
|
|
52
|
-
finally { if (
|
|
109
|
+
finally { if (e_4) throw e_4.error; }
|
|
53
110
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
62
|
-
finally {
|
|
63
|
-
try {
|
|
64
|
-
if (_k && !_k.done && (_c = _j.return)) _c.call(_j);
|
|
65
|
-
}
|
|
66
|
-
finally { if (e_4) throw e_4.error; }
|
|
111
|
+
if (f.valueType === String)
|
|
112
|
+
try {
|
|
113
|
+
for (var _h = (e_5 = void 0, tslib_1.__values(["_st", "_contains"])), _j = _h.next(); !_j.done; _j = _h.next()) {
|
|
114
|
+
var operator = _j.value;
|
|
115
|
+
filterFields += "\n\t" + f.key + operator + ":" + type;
|
|
67
116
|
}
|
|
68
|
-
|
|
117
|
+
}
|
|
118
|
+
catch (e_5_1) { e_5 = { error: e_5_1 }; }
|
|
119
|
+
finally {
|
|
69
120
|
try {
|
|
70
|
-
|
|
71
|
-
var operator = _m.value;
|
|
72
|
-
filterFields += "\n\t" + f.key + operator + ":" + type;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
catch (e_5_1) { e_5 = { error: e_5_1 }; }
|
|
76
|
-
finally {
|
|
77
|
-
try {
|
|
78
|
-
if (_m && !_m.done && (_d = _l.return)) _d.call(_l);
|
|
79
|
-
}
|
|
80
|
-
finally { if (e_5) throw e_5.error; }
|
|
121
|
+
if (_j && !_j.done && (_c = _h.return)) _c.call(_h);
|
|
81
122
|
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
123
|
+
finally { if (e_5) throw e_5.error; }
|
|
124
|
+
}
|
|
125
|
+
if (f.allowNull)
|
|
126
|
+
filterFields += "\n\t" + f.key + "_null:Boolean";
|
|
127
|
+
filterFields += "\n\t" + f.key + "_in:[" + type + "]";
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
try {
|
|
131
|
+
for (var _b = (e_2 = void 0, tslib_1.__values(meta.fields)), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
132
|
+
var f = _c.value;
|
|
133
|
+
_loop_2(f);
|
|
86
134
|
}
|
|
87
135
|
}
|
|
88
136
|
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
89
137
|
finally {
|
|
90
138
|
try {
|
|
91
|
-
if (
|
|
139
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
92
140
|
}
|
|
93
141
|
finally { if (e_2) throw e_2.error; }
|
|
94
142
|
}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
root[key] = function (_a, req) {
|
|
143
|
+
filterTypes += "input " + key + "Filter{" + filterFields + "\n\tOR:[" + key + "Filter]\n}\n";
|
|
144
|
+
query += q;
|
|
145
|
+
root[key] = function (_a, req, a) {
|
|
99
146
|
var options = _a.options, filter = _a.filter;
|
|
100
147
|
return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
101
|
-
var
|
|
148
|
+
var _this = this;
|
|
102
149
|
return tslib_1.__generator(this, function (_b) {
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
150
|
+
console.log(tslib_1.__assign({}, a.fieldNodes));
|
|
151
|
+
return [2 /*return*/, new Promise(function (res, error) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
152
|
+
var _this = this;
|
|
153
|
+
return tslib_1.__generator(this, function (_a) {
|
|
154
|
+
api.withRemult(req, undefined, function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
155
|
+
var remult, repo, dApi, result, err;
|
|
156
|
+
return tslib_1.__generator(this, function (_a) {
|
|
157
|
+
switch (_a.label) {
|
|
158
|
+
case 0: return [4 /*yield*/, api.getRemult(req)];
|
|
159
|
+
case 1:
|
|
160
|
+
remult = _a.sent();
|
|
161
|
+
repo = remult.repo(e);
|
|
162
|
+
dApi = new data_api_1.DataApi(repo, remult);
|
|
163
|
+
return [4 /*yield*/, dApi.getArray({
|
|
164
|
+
success: function (x) { return result = x.map(function (y) {
|
|
165
|
+
t.resultProcessors.forEach(function (z) { return z(y); });
|
|
166
|
+
return y;
|
|
167
|
+
}); },
|
|
168
|
+
created: undefined,
|
|
169
|
+
deleted: undefined,
|
|
170
|
+
error: function (x) { return err = x; },
|
|
171
|
+
forbidden: function () { return err = 'forbidden'; },
|
|
172
|
+
notFound: function () { return err = 'not found'; },
|
|
173
|
+
progress: undefined
|
|
174
|
+
}, {
|
|
175
|
+
get: function (key) {
|
|
176
|
+
if (options)
|
|
177
|
+
switch (key) {
|
|
178
|
+
case "_limit":
|
|
179
|
+
return options.limit;
|
|
180
|
+
case "_page":
|
|
181
|
+
return options.page;
|
|
182
|
+
case "_sort":
|
|
183
|
+
return options.sort;
|
|
184
|
+
case "_order":
|
|
185
|
+
return options.order;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}, filter)];
|
|
189
|
+
case 2:
|
|
190
|
+
_a.sent();
|
|
191
|
+
if (err) {
|
|
192
|
+
error(err);
|
|
193
|
+
return [2 /*return*/];
|
|
194
|
+
}
|
|
195
|
+
res(result);
|
|
196
|
+
return [2 /*return*/];
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
}); });
|
|
200
|
+
return [2 /*return*/];
|
|
201
|
+
});
|
|
202
|
+
}); })];
|
|
138
203
|
});
|
|
139
204
|
});
|
|
140
205
|
};
|
|
@@ -158,7 +223,10 @@ function remultGraphql(api) {
|
|
|
158
223
|
}
|
|
159
224
|
return {
|
|
160
225
|
rootValue: root,
|
|
161
|
-
schema:
|
|
226
|
+
schema: types.map(function (_a) {
|
|
227
|
+
var key = _a.key, fields = _a.fields, moreFields = _a.moreFields;
|
|
228
|
+
return "type " + key + "{" + fields + moreFields + "\n}\n";
|
|
229
|
+
}).join('') + "\n" + query + "\n" + filterTypes + "\ninput options{\n limit:Int\n page:Int\n sort:String\n order:String\n}\n"
|
|
162
230
|
};
|
|
163
231
|
}
|
|
164
232
|
exports.remultGraphql = remultGraphql;
|