remult 0.17.1 → 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.
Files changed (3) hide show
  1. package/esm/graphql.js +47 -13
  2. package/graphql.js +116 -62
  3. 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 = getEntityKey(e);
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
- fields += "\n\t" + f.key + ":" + type;
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,10 +75,10 @@ export function remultGraphql(api) {
44
75
  filterFields += "\n\t" + f.key + "_in:[" + type + "]";
45
76
  }
46
77
  }
47
- types += "type " + key + "{" + fields + "\n}\n";
48
- types += "input " + key + "Filter{" + filterFields + "\n\tOR:[" + key + "Filter]\n}\n";
49
- query += "\n\t" + key + "(options: options, filter:" + key + "Filter): [" + key + "]";
50
- root[key] = async ({ options, filter }, req) => {
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 });
51
82
  return new Promise(async (res, error) => {
52
83
  api.withRemult(req, undefined, async () => {
53
84
  let remult = await api.getRemult(req);
@@ -56,7 +87,10 @@ export function remultGraphql(api) {
56
87
  let result;
57
88
  let err;
58
89
  await dApi.getArray({
59
- success: x => result = x,
90
+ success: x => result = x.map(y => {
91
+ t.resultProcessors.forEach(z => z(y));
92
+ return y;
93
+ }),
60
94
  created: undefined,
61
95
  deleted: undefined,
62
96
  error: x => err = x,
@@ -94,15 +128,15 @@ export function remultGraphql(api) {
94
128
  }
95
129
  return {
96
130
  rootValue: root,
97
- schema: `
131
+ schema: `${types.map(({ key, fields, moreFields }) => "type " + key + "{" + fields + moreFields + "\n}\n").join('')}
132
+ ${query}
133
+ ${filterTypes}
98
134
  input options{
99
135
  limit:Int
100
136
  page:Int
101
137
  sort:String
102
138
  order:String
103
139
  }
104
- ${types}
105
- ${query}
106
140
  `
107
141
  };
108
142
  }
package/graphql.js CHANGED
@@ -4,102 +4,150 @@ 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, e_3, _b, e_4, _c, e_5, _d;
24
+ var e_2, _a;
19
25
  var meta = r.repo(e).metadata;
20
- var fields = '';
21
26
  var filterFields = '';
22
- var key = remult3_1.getEntityKey(e);
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
- try {
25
- for (var _e = (e_2 = void 0, tslib_1.__values(meta.fields)), _f = _e.next(); !_f.done; _f = _e.next()) {
26
- var f = _f.value;
27
- {
28
- var type = "String";
29
- switch (f.valueType) {
30
- case Boolean:
31
- type = "Boolean";
32
- case Number:
33
- {
34
- if (((_b = f.valueConverter) === null || _b === void 0 ? void 0 : _b.fieldTypeInDb) == 'integer')
35
- type = "Int";
36
- else
37
- type = "Float";
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;
88
+ }
89
+ }
90
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
91
+ finally {
92
+ try {
93
+ if (_e && !_e.done && (_a = _d.return)) _a.call(_d);
39
94
  }
40
- fields += "\n\t" + f.key + ":" + type;
95
+ finally { if (e_3) throw e_3.error; }
96
+ }
97
+ if (f.valueType === String || f.valueType === Number)
41
98
  try {
42
- for (var _g = (e_3 = void 0, tslib_1.__values(["", "_ne"])), _h = _g.next(); !_h.done; _h = _g.next()) {
43
- var operator = _h.value;
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 (e_3_1) { e_3 = { error: e_3_1 }; }
104
+ catch (e_4_1) { e_4 = { error: e_4_1 }; }
48
105
  finally {
49
106
  try {
50
- if (_h && !_h.done && (_b = _g.return)) _b.call(_g);
107
+ if (_g && !_g.done && (_b = _f.return)) _b.call(_f);
51
108
  }
52
- finally { if (e_3) throw e_3.error; }
109
+ finally { if (e_4) throw e_4.error; }
53
110
  }
54
- if (f.valueType === String || f.valueType === Number)
55
- try {
56
- for (var _j = (e_4 = void 0, tslib_1.__values(["_gt", "_gte", "_lt", "_lte"])), _k = _j.next(); !_k.done; _k = _j.next()) {
57
- var operator = _k.value;
58
- filterFields += "\n\t" + f.key + operator + ":" + type;
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
- if (f.valueType === String)
117
+ }
118
+ catch (e_5_1) { e_5 = { error: e_5_1 }; }
119
+ finally {
69
120
  try {
70
- for (var _l = (e_5 = void 0, tslib_1.__values(["_st", "_contains"])), _m = _l.next(); !_m.done; _m = _l.next()) {
71
- var operator = _m.value;
72
- filterFields += "\n\t" + f.key + operator + ":" + type;
73
- }
121
+ if (_j && !_j.done && (_c = _h.return)) _c.call(_h);
74
122
  }
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; }
81
- }
82
- if (f.allowNull)
83
- filterFields += "\n\t" + f.key + "_null:Boolean";
84
- filterFields += "\n\t" + f.key + "_in:[" + type + "]";
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 (_f && !_f.done && (_a = _e.return)) _a.call(_e);
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
- types += "type " + key + "{" + fields + "\n}\n";
96
- types += "input " + key + "Filter{" + filterFields + "\n\tOR:[" + key + "Filter]\n}\n";
97
- query += "\n\t" + key + "(options: options, filter:" + key + "Filter): [" + key + "]";
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
148
  var _this = this;
102
149
  return tslib_1.__generator(this, function (_b) {
150
+ console.log(tslib_1.__assign({}, a.fieldNodes));
103
151
  return [2 /*return*/, new Promise(function (res, error) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
104
152
  var _this = this;
105
153
  return tslib_1.__generator(this, function (_a) {
@@ -113,7 +161,10 @@ function remultGraphql(api) {
113
161
  repo = remult.repo(e);
114
162
  dApi = new data_api_1.DataApi(repo, remult);
115
163
  return [4 /*yield*/, dApi.getArray({
116
- success: function (x) { return result = x; },
164
+ success: function (x) { return result = x.map(function (y) {
165
+ t.resultProcessors.forEach(function (z) { return z(y); });
166
+ return y;
167
+ }); },
117
168
  created: undefined,
118
169
  deleted: undefined,
119
170
  error: function (x) { return err = x; },
@@ -172,7 +223,10 @@ function remultGraphql(api) {
172
223
  }
173
224
  return {
174
225
  rootValue: root,
175
- schema: "\ninput options{\n limit:Int\n page:Int\n sort:String\n order:String\n}\n" + types + "\n" + query + "\n"
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"
176
230
  };
177
231
  }
178
232
  exports.remultGraphql = remultGraphql;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "remult",
3
- "version": "0.17.1",
3
+ "version": "0.17.2",
4
4
  "description": "A CRUD framework for full-stack TypeScript",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",