@subsquid/openreader 2.1.0 → 3.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.
Files changed (72) hide show
  1. package/lib/ir/args.d.ts +1 -1
  2. package/lib/ir/args.d.ts.map +1 -1
  3. package/lib/ir/connection.d.ts +3 -4
  4. package/lib/ir/connection.d.ts.map +1 -1
  5. package/lib/ir/connection.js.map +1 -1
  6. package/lib/ir/fields.d.ts +6 -2
  7. package/lib/ir/fields.d.ts.map +1 -1
  8. package/lib/ir/fields.js +15 -0
  9. package/lib/ir/fields.js.map +1 -1
  10. package/lib/limit.size.d.ts +4 -4
  11. package/lib/limit.size.d.ts.map +1 -1
  12. package/lib/limit.size.js +51 -20
  13. package/lib/limit.size.js.map +1 -1
  14. package/lib/main.js +0 -9
  15. package/lib/main.js.map +1 -1
  16. package/lib/model.d.ts +2 -1
  17. package/lib/model.d.ts.map +1 -1
  18. package/lib/model.schema.d.ts +2 -2
  19. package/lib/model.schema.d.ts.map +1 -1
  20. package/lib/model.schema.js +8 -3
  21. package/lib/model.schema.js.map +1 -1
  22. package/lib/model.tools.d.ts +6 -1
  23. package/lib/model.tools.d.ts.map +1 -1
  24. package/lib/model.tools.js +111 -8
  25. package/lib/model.tools.js.map +1 -1
  26. package/lib/opencrud/orderBy.d.ts +2 -2
  27. package/lib/opencrud/orderBy.d.ts.map +1 -1
  28. package/lib/opencrud/orderBy.js +13 -17
  29. package/lib/opencrud/orderBy.js.map +1 -1
  30. package/lib/opencrud/schema.d.ts +4 -4
  31. package/lib/opencrud/schema.d.ts.map +1 -1
  32. package/lib/opencrud/schema.js +53 -62
  33. package/lib/opencrud/schema.js.map +1 -1
  34. package/lib/opencrud/tree.d.ts +9 -7
  35. package/lib/opencrud/tree.d.ts.map +1 -1
  36. package/lib/opencrud/tree.js +32 -14
  37. package/lib/opencrud/tree.js.map +1 -1
  38. package/lib/sql/cursor.js +2 -2
  39. package/lib/sql/cursor.js.map +1 -1
  40. package/lib/sql/mapping.d.ts +3 -1
  41. package/lib/sql/mapping.d.ts.map +1 -1
  42. package/lib/sql/mapping.js +16 -1
  43. package/lib/sql/mapping.js.map +1 -1
  44. package/lib/sql/printer.d.ts +29 -11
  45. package/lib/sql/printer.d.ts.map +1 -1
  46. package/lib/sql/printer.js +106 -10
  47. package/lib/sql/printer.js.map +1 -1
  48. package/lib/sql/query.d.ts +11 -11
  49. package/lib/sql/query.d.ts.map +1 -1
  50. package/lib/sql/query.js +41 -19
  51. package/lib/sql/query.js.map +1 -1
  52. package/lib/test/queryable.test.d.ts +2 -0
  53. package/lib/test/queryable.test.d.ts.map +1 -0
  54. package/lib/test/queryable.test.js +255 -0
  55. package/lib/test/queryable.test.js.map +1 -0
  56. package/package.json +2 -2
  57. package/src/ir/args.ts +1 -1
  58. package/src/ir/connection.ts +3 -4
  59. package/src/ir/fields.ts +22 -2
  60. package/src/limit.size.ts +55 -30
  61. package/src/main.ts +0 -11
  62. package/src/model.schema.ts +16 -9
  63. package/src/model.tools.ts +121 -8
  64. package/src/model.ts +2 -1
  65. package/src/opencrud/orderBy.ts +13 -17
  66. package/src/opencrud/schema.ts +78 -84
  67. package/src/opencrud/tree.ts +55 -26
  68. package/src/sql/cursor.ts +2 -2
  69. package/src/sql/mapping.ts +18 -1
  70. package/src/sql/printer.ts +137 -21
  71. package/src/sql/query.ts +50 -30
  72. package/src/test/queryable.test.ts +258 -0
@@ -3,7 +3,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.getFtsQuery = exports.getObject = exports.getEntity = exports.propTypeEquals = exports.validateIndexes = exports.validateLookups = exports.validateUnionTypes = exports.validateNames = exports.validateModel = exports.buildUnionProps = exports.getUnionProps = void 0;
6
+ exports.getFtsQuery = exports.getInterface = exports.getObject = exports.getEntity = exports.propTypeEquals = exports.validateQueryableInterfaces = exports.validateIndexes = exports.validateLookups = exports.validateUnionTypes = exports.validateNames = exports.validateModel = exports.getUniversalProperties = exports.getQueryableProperties = exports.getQueryableEntities = exports.buildUnionProps = exports.getUnionProps = void 0;
7
+ const util_internal_1 = require("@subsquid/util-internal");
7
8
  const assert_1 = __importDefault(require("assert"));
8
9
  const UNION_MAPS = new WeakMap();
9
10
  function getUnionProps(model, unionName) {
@@ -21,8 +22,7 @@ function buildUnionProps(model, unionName) {
21
22
  let union = model[unionName];
22
23
  (0, assert_1.default)(union.kind == 'union');
23
24
  let properties = {};
24
- for (let i = 0; i < union.variants.length; i++) {
25
- let objectName = union.variants[i];
25
+ for (let objectName of union.variants) {
26
26
  let object = model[objectName];
27
27
  (0, assert_1.default)(object.kind == 'object');
28
28
  Object.assign(properties, object.properties);
@@ -34,12 +34,99 @@ function buildUnionProps(model, unionName) {
34
34
  return { kind: 'object', properties };
35
35
  }
36
36
  exports.buildUnionProps = buildUnionProps;
37
+ const QUERYABLE_ENTITIES = new WeakMap();
38
+ function getQueryableEntities(model, queryableName) {
39
+ let cache = QUERYABLE_ENTITIES.get(model);
40
+ if (cache == null) {
41
+ cache = {};
42
+ QUERYABLE_ENTITIES.set(model, cache);
43
+ }
44
+ let entities = cache[queryableName];
45
+ if (entities)
46
+ return entities;
47
+ entities = cache[queryableName] = [];
48
+ for (let name in model) {
49
+ let item = model[name];
50
+ if (item.kind == 'entity' && item.interfaces?.includes(queryableName)) {
51
+ entities.push(name);
52
+ }
53
+ }
54
+ return entities;
55
+ }
56
+ exports.getQueryableEntities = getQueryableEntities;
57
+ function getQueryableProperties(model, queryableName) {
58
+ let queryable = getInterface(model, queryableName);
59
+ let props = {};
60
+ for (let entityName of getQueryableEntities(model, queryableName)) {
61
+ let entity = getEntity(model, entityName);
62
+ for (let key in queryable.properties) {
63
+ let ep = entity.properties[key];
64
+ if (ep == null)
65
+ throw new Error(`Entity ${entityName} doesn't implement ${queryableName} properly: .${key} property is missing`);
66
+ let prop = matchWithQueryableProp(queryable.properties[key], ep);
67
+ if (prop == null)
68
+ throw new Error(`Entity ${entityName} doesn't implement ${queryableName} properly: .${key} property types are incompatible`);
69
+ props[key] = prop;
70
+ }
71
+ }
72
+ return props;
73
+ }
74
+ exports.getQueryableProperties = getQueryableProperties;
75
+ function matchWithQueryableProp(queryableProp, entityProp) {
76
+ if (!queryableProp.nullable && entityProp.nullable)
77
+ return undefined;
78
+ let qt = queryableProp.type;
79
+ let et = entityProp.type;
80
+ switch (et.kind) {
81
+ case 'fk':
82
+ case 'lookup':
83
+ if (qt.kind == 'object' && qt.name == et.entity) {
84
+ return {
85
+ type: et,
86
+ nullable: queryableProp.nullable,
87
+ description: queryableProp.description
88
+ };
89
+ }
90
+ return undefined;
91
+ case 'list-lookup':
92
+ if (qt.kind == 'list' && qt.item.type.kind == 'object' && qt.item.type.name == et.entity) {
93
+ return {
94
+ type: et,
95
+ nullable: false,
96
+ description: queryableProp.description
97
+ };
98
+ }
99
+ return undefined;
100
+ default:
101
+ if (propTypeEquals(et, qt)) {
102
+ return queryableProp;
103
+ }
104
+ return undefined;
105
+ }
106
+ }
107
+ function getUniversalProperties(model, typeName) {
108
+ let item = model[typeName];
109
+ switch (item.kind) {
110
+ case 'entity':
111
+ case 'object':
112
+ return item.properties;
113
+ case 'union':
114
+ return getUnionProps(model, typeName).properties;
115
+ case 'interface':
116
+ (0, assert_1.default)(item.queryable);
117
+ return getQueryableProperties(model, typeName);
118
+ default:
119
+ throw (0, util_internal_1.unexpectedCase)(item.kind);
120
+ }
121
+ }
122
+ exports.getUniversalProperties = getUniversalProperties;
37
123
  function validateModel(model) {
38
124
  // TODO: check all invariants we assume
39
125
  validateNames(model);
40
126
  validateUnionTypes(model);
41
127
  validateLookups(model);
42
128
  validateIndexes(model);
129
+ validateQueryableInterfaces(model);
43
130
  }
44
131
  exports.validateModel = validateModel;
45
132
  const TYPE_NAME_REGEX = /^[A-Z][a-zA-Z0-9]*$/;
@@ -115,7 +202,7 @@ function validateLookups(model) {
115
202
  if (prop.type.kind == 'lookup' || prop.type.kind == 'list-lookup') {
116
203
  let lookupEntity = getEntity(model, prop.type.entity);
117
204
  let lookupProperty = lookupEntity.properties[prop.type.field];
118
- if (lookupProperty?.type.kind != 'fk' || lookupProperty.type.foreignEntity != name) {
205
+ if (lookupProperty?.type.kind != 'fk' || lookupProperty.type.entity != name) {
119
206
  throw invalidProperty(name, key, `${prop.type.entity}.${prop.type.field} is not a foreign key pointing to ${name}`);
120
207
  }
121
208
  if (prop.type.kind == 'lookup' && !lookupProperty.unique) {
@@ -139,7 +226,7 @@ function validateIndexes(model) {
139
226
  index.fields.forEach(f => {
140
227
  let prop = item.properties[f.name];
141
228
  if (prop == null)
142
- throw new Error(`Entity ${name} doesn't have a property ${f.name}, but is a part of index`);
229
+ throw new Error(`Entity ${name} doesn't have a property ${f.name}, but it is a part of index`);
143
230
  switch (prop.type.kind) {
144
231
  case "scalar":
145
232
  case "enum":
@@ -153,17 +240,27 @@ function validateIndexes(model) {
153
240
  }
154
241
  }
155
242
  exports.validateIndexes = validateIndexes;
243
+ function validateQueryableInterfaces(model) {
244
+ for (let name in model) {
245
+ let item = model[name];
246
+ if (item.kind == 'interface' && item.queryable) {
247
+ getQueryableProperties(model, name);
248
+ }
249
+ }
250
+ }
251
+ exports.validateQueryableInterfaces = validateQueryableInterfaces;
156
252
  function invalidProperty(item, key, msg) {
157
253
  return new Error(`Invalid property ${item}.${key}: ${msg}`);
158
254
  }
159
255
  function propTypeEquals(a, b) {
160
256
  if (a.kind != b.kind)
161
257
  return false;
162
- if (a.kind == 'list')
163
- return propTypeEquals(a.item.type, b.item.type);
164
258
  switch (a.kind) {
259
+ case 'list':
260
+ return a.item.nullable == b.item.nullable
261
+ && propTypeEquals(a.item.type, b.item.type);
165
262
  case 'fk':
166
- return a.foreignEntity == b.foreignEntity;
263
+ return a.entity == b.entity;
167
264
  case 'lookup':
168
265
  case 'list-lookup':
169
266
  return a.entity == b.entity && a.field == b.field;
@@ -184,6 +281,12 @@ function getObject(model, name) {
184
281
  return object;
185
282
  }
186
283
  exports.getObject = getObject;
284
+ function getInterface(model, name) {
285
+ let i = model[name];
286
+ (0, assert_1.default)(i.kind == 'interface', `${name} expected to be an interface`);
287
+ return i;
288
+ }
289
+ exports.getInterface = getInterface;
187
290
  function getFtsQuery(model, name) {
188
291
  let query = model[name];
189
292
  (0, assert_1.default)(query.kind == 'fts', `${name} expected to be FTS query`);
@@ -1 +1 @@
1
- {"version":3,"file":"model.tools.js","sourceRoot":"","sources":["../src/model.tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"model.tools.js","sourceRoot":"","sources":["../src/model.tools.ts"],"names":[],"mappings":";;;;;;AAAA,2DAAsD;AACtD,oDAA2B;AAI3B,MAAM,UAAU,GAAG,IAAI,OAAO,EAAqC,CAAA;AAGnE,SAAgB,aAAa,CAAC,KAAY,EAAE,SAAiB;IACzD,IAAI,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IAC/B,IAAI,GAAG,IAAI,IAAI,EAAE;QACb,GAAG,GAAG,EAAE,CAAA;QACR,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;KAC7B;IACD,IAAI,GAAG,CAAC,SAAS,CAAC;QAAE,OAAO,GAAG,CAAC,SAAS,CAAC,CAAA;IACzC,OAAO,GAAG,CAAC,SAAS,CAAC,GAAG,eAAe,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;AAC7D,CAAC;AARD,sCAQC;AAGD,SAAgB,eAAe,CAAC,KAAY,EAAE,SAAiB;IAC3D,IAAI,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAA;IAC5B,IAAA,gBAAM,EAAC,KAAK,CAAC,IAAI,IAAI,OAAO,CAAC,CAAA;IAC7B,IAAI,UAAU,GAAyB,EAAE,CAAA;IACzC,KAAK,IAAI,UAAU,IAAI,KAAK,CAAC,QAAQ,EAAE;QACnC,IAAI,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,CAAA;QAC9B,IAAA,gBAAM,EAAC,MAAM,CAAC,IAAI,IAAI,QAAQ,CAAC,CAAA;QAC/B,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,CAAA;KAC/C;IACD,UAAU,CAAC,QAAQ,GAAG;QAClB,IAAI,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAC;QACtC,QAAQ,EAAE,KAAK;KAClB,CAAA;IACD,OAAO,EAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAC,CAAA;AACvC,CAAC;AAdD,0CAcC;AAGD,MAAM,kBAAkB,GAAG,IAAI,OAAO,EAAmC,CAAA;AAGzE,SAAgB,oBAAoB,CAAC,KAAY,EAAE,aAAqB;IACpE,IAAI,KAAK,GAAG,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IACzC,IAAI,KAAK,IAAI,IAAI,EAAE;QACf,KAAK,GAAG,EAAE,CAAA;QACV,kBAAkB,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;KACvC;IACD,IAAI,QAAQ,GAAG,KAAK,CAAC,aAAa,CAAC,CAAA;IACnC,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAA;IAC7B,QAAQ,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,EAAE,CAAA;IACpC,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE;QACpB,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAA;QACtB,IAAI,IAAI,CAAC,IAAI,IAAI,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,aAAa,CAAC,EAAE;YACnE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;SACtB;KACJ;IACD,OAAO,QAAQ,CAAA;AACnB,CAAC;AAhBD,oDAgBC;AAGD,SAAgB,sBAAsB,CAAC,KAAY,EAAE,aAAqB;IACtE,IAAI,SAAS,GAAG,YAAY,CAAC,KAAK,EAAE,aAAa,CAAC,CAAA;IAClD,IAAI,KAAK,GAAyB,EAAE,CAAA;IACpC,KAAK,IAAI,UAAU,IAAI,oBAAoB,CAAC,KAAK,EAAE,aAAa,CAAC,EAAE;QAC/D,IAAI,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,CAAA;QACzC,KAAK,IAAI,GAAG,IAAI,SAAS,CAAC,UAAU,EAAE;YAClC,IAAI,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;YAC/B,IAAI,EAAE,IAAI,IAAI;gBAAE,MAAM,IAAI,KAAK,CAC3B,UAAU,UAAU,sBAAsB,aAAa,eAAe,GAAG,sBAAsB,CAClG,CAAA;YACD,IAAI,IAAI,GAAG,sBAAsB,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAA;YAChE,IAAI,IAAI,IAAI,IAAI;gBAAE,MAAM,IAAI,KAAK,CAC7B,UAAU,UAAU,sBAAsB,aAAa,eAAe,GAAG,kCAAkC,CAC9G,CAAA;YACD,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAA;SACpB;KACJ;IACD,OAAO,KAAK,CAAA;AAChB,CAAC;AAlBD,wDAkBC;AAGD,SAAS,sBAAsB,CAAC,aAAmB,EAAE,UAAgB;IACjE,IAAI,CAAC,aAAa,CAAC,QAAQ,IAAI,UAAU,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAA;IACpE,IAAI,EAAE,GAAG,aAAa,CAAC,IAAI,CAAA;IAC3B,IAAI,EAAE,GAAG,UAAU,CAAC,IAAI,CAAA;IACxB,QAAO,EAAE,CAAC,IAAI,EAAE;QACZ,KAAK,IAAI,CAAC;QACV,KAAK,QAAQ;YACT,IAAI,EAAE,CAAC,IAAI,IAAI,QAAQ,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,MAAM,EAAE;gBAC7C,OAAO;oBACH,IAAI,EAAE,EAAE;oBACR,QAAQ,EAAE,aAAa,CAAC,QAAQ;oBAChC,WAAW,EAAE,aAAa,CAAC,WAAW;iBACzC,CAAA;aACJ;YACD,OAAO,SAAS,CAAA;QACpB,KAAK,aAAa;YACd,IAAI,EAAE,CAAC,IAAI,IAAI,MAAM,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,QAAQ,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,MAAM,EAAE;gBACtF,OAAO;oBACH,IAAI,EAAE,EAAE;oBACR,QAAQ,EAAE,KAAK;oBACf,WAAW,EAAE,aAAa,CAAC,WAAW;iBACzC,CAAA;aACJ;YACD,OAAO,SAAS,CAAA;QACpB;YACI,IAAI,cAAc,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE;gBACxB,OAAO,aAAa,CAAA;aACvB;YACD,OAAO,SAAS,CAAA;KACvB;AACL,CAAC;AAGD,SAAgB,sBAAsB,CAAC,KAAY,EAAE,QAAgB;IACjE,IAAI,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAA;IAC1B,QAAO,IAAI,CAAC,IAAI,EAAE;QACd,KAAK,QAAQ,CAAC;QACd,KAAK,QAAQ;YACT,OAAO,IAAI,CAAC,UAAU,CAAA;QAC1B,KAAK,OAAO;YACR,OAAO,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,UAAU,CAAA;QACpD,KAAK,WAAW;YACZ,IAAA,gBAAM,EAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YACtB,OAAO,sBAAsB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;QAClD;YACI,MAAM,IAAA,8BAAc,EAAC,IAAI,CAAC,IAAI,CAAC,CAAA;KACtC;AACL,CAAC;AAdD,wDAcC;AAGD,SAAgB,aAAa,CAAC,KAAY;IACtC,uCAAuC;IACvC,aAAa,CAAC,KAAK,CAAC,CAAA;IACpB,kBAAkB,CAAC,KAAK,CAAC,CAAA;IACzB,eAAe,CAAC,KAAK,CAAC,CAAA;IACtB,eAAe,CAAC,KAAK,CAAC,CAAA;IACtB,2BAA2B,CAAC,KAAK,CAAC,CAAA;AACtC,CAAC;AAPD,sCAOC;AAGD,MAAM,eAAe,GAAG,qBAAqB,CAAA;AAC7C,MAAM,eAAe,GAAG,qBAAqB,CAAA;AAG7C,SAAgB,aAAa,CAAC,KAAY;IACtC,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE;QACpB,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAA;QACtB,IAAI,IAAI,CAAC,IAAI,IAAI,KAAK,EAAE;YACpB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBAC7B,MAAM,IAAI,KAAK,CAAC,iCAAiC,IAAI,mBAAmB,eAAe,GAAG,CAAC,CAAA;aAC9F;SACJ;aAAM;YACH,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBAC7B,MAAM,IAAI,KAAK,CAAC,WAAW,IAAI,CAAC,IAAI,UAAU,IAAI,mBAAmB,eAAe,EAAE,CAAC,CAAA;aAC1F;SACJ;QACD,QAAO,IAAI,CAAC,IAAI,EAAE;YACd,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ,CAAC;YACd,KAAK,WAAW;gBACZ,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;oBAC9B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;wBAC7B,MAAM,IAAI,KAAK,CAAC,QAAQ,IAAI,sCAAsC,IAAI,mBAAmB,eAAe,GAAG,CAAC,CAAA;qBAC/G;iBACJ;gBACD,MAAK;SACZ;KACJ;AACL,CAAC;AAxBD,sCAwBC;AAGD,SAAgB,kBAAkB,CAAC,KAAY;IAC3C,KAAK,IAAI,GAAG,IAAI,KAAK,EAAE;QACnB,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAA;QACrB,IAAI,IAAI,CAAC,IAAI,IAAI,OAAO;YAAE,SAAQ;QAClC,IAAI,UAAU,GAA2D,EAAE,CAAA;QAC3E,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;YAC/B,IAAI,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,CAAA;YAC9B,IAAA,gBAAM,EAAC,MAAM,CAAC,IAAI,IAAI,QAAQ,CAAC,CAAA;YAC/B,KAAK,IAAI,QAAQ,IAAI,MAAM,CAAC,UAAU,EAAE;gBACpC,IAAI,GAAG,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAA;gBAC9B,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE;oBACpE,MAAM,IAAI,KAAK,CACX,GAAG,GAAG,CAAC,UAAU,QAAQ,UAAU,sBAAsB,GAAG,wBAAwB,QAAQ,mBAAmB,GAAG,CAAC,UAAU,IAAI,QAAQ,QAAQ,UAAU,IAAI,QAAQ,iBAAiB,CAC3L,CAAA;iBACJ;qBAAM;oBACH,UAAU,CAAC,QAAQ,CAAC,GAAG,EAAC,UAAU,EAAE,IAAI,EAAE,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAC,CAAA;iBAC9E;aACJ;QACL,CAAC,CAAC,CAAA;KACL;AACL,CAAC;AApBD,gDAoBC;AAGD,SAAgB,eAAe,CAAC,KAAY;IACxC,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE;QACpB,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAA;QACtB,QAAO,IAAI,CAAC,IAAI,EAAE;YACd,KAAK,QAAQ,CAAC;YACd,KAAK,WAAW;gBACZ,KAAK,IAAI,GAAG,IAAI,IAAI,CAAC,UAAU,EAAE;oBAC7B,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;oBAC/B,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,aAAa,EAAE;wBAC/D,MAAM,eAAe,CAAC,IAAI,EAAE,GAAG,EAAE,4CAA4C,CAAC,CAAA;qBACjF;iBACJ;gBACD,MAAK;YACT,KAAK,QAAQ;gBACT,KAAK,IAAI,GAAG,IAAI,IAAI,CAAC,UAAU,EAAE;oBAC7B,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;oBAC/B,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;wBAC9C,MAAM,eAAe,CAAC,IAAI,EAAE,GAAG,EAAE,qCAAqC,CAAC,CAAA;qBAC1E;oBACD,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,aAAa,EAAE;wBAC/D,IAAI,YAAY,GAAG,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;wBACrD,IAAI,cAAc,GAAG,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;wBAC7D,IAAI,cAAc,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE;4BACzE,MAAM,eAAe,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,qCAAqC,IAAI,EAAE,CAAC,CAAA;yBACtH;wBACD,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,QAAQ,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;4BACtD,MAAM,eAAe,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,iBAAiB,CAAC,CAAA;yBAC5F;qBACJ;iBACJ;gBACD,MAAK;SACZ;KACJ;AACL,CAAC;AAjCD,0CAiCC;AAGD,SAAgB,eAAe,CAAC,KAAY;IACxC,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE;QACpB,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAA;QACxB,IAAI,IAAI,CAAC,IAAI,IAAI,QAAQ;YAAE,SAAQ;QACnC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE;YAC1B,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,8BAA8B,CAAC,CAAA;YAC3F,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;gBACrB,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;gBAClC,IAAI,IAAI,IAAI,IAAI;oBAAE,MAAM,IAAI,KAAK,CAC7B,UAAU,IAAI,4BAA4B,CAAC,CAAC,IAAI,6BAA6B,CAChF,CAAA;gBACD,QAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;oBACnB,KAAK,QAAQ,CAAC;oBACd,KAAK,MAAM,CAAC;oBACZ,KAAK,IAAI;wBACL,MAAK;oBACT;wBACI,MAAM,IAAI,KAAK,CACX,YAAY,IAAI,IAAI,CAAC,CAAC,IAAI,2BAA2B,CACxD,CAAA;iBACR;YACL,CAAC,CAAC,CAAA;QACN,CAAC,CAAC,CAAA;KACL;AACL,CAAC;AAxBD,0CAwBC;AAGD,SAAgB,2BAA2B,CAAC,KAAY;IACpD,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE;QACpB,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAA;QACtB,IAAI,IAAI,CAAC,IAAI,IAAI,WAAW,IAAI,IAAI,CAAC,SAAS,EAAE;YAC5C,sBAAsB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;SACtC;KACJ;AACL,CAAC;AAPD,kEAOC;AAGD,SAAS,eAAe,CAAC,IAAY,EAAE,GAAW,EAAE,GAAW;IAC3D,OAAO,IAAI,KAAK,CAAC,oBAAoB,IAAI,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC,CAAA;AAC/D,CAAC;AAGD,SAAgB,cAAc,CAAC,CAAW,EAAE,CAAW;IACnD,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI;QAAE,OAAO,KAAK,CAAA;IAClC,QAAO,CAAC,CAAC,IAAI,EAAE;QACX,KAAK,MAAM;YACP,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAK,CAAc,CAAC,IAAI,CAAC,QAAQ;mBAChD,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAG,CAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACjE,KAAK,IAAI;YACL,OAAO,CAAC,CAAC,MAAM,IAAK,CAAc,CAAC,MAAM,CAAA;QAC7C,KAAK,QAAQ,CAAC;QACd,KAAK,aAAa;YACd,OAAO,CAAC,CAAC,MAAM,IAAK,CAAc,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,IAAK,CAAc,CAAC,KAAK,CAAA;QACjF;YACI,OAAO,CAAC,CAAC,IAAI,IAAK,CAAc,CAAC,IAAI,CAAA;KAC5C;AACL,CAAC;AAdD,wCAcC;AAGD,SAAgB,SAAS,CAAC,KAAY,EAAE,IAAY;IAChD,IAAI,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAA;IACxB,IAAA,gBAAM,EAAC,MAAM,CAAC,IAAI,IAAI,QAAQ,EAAE,GAAG,IAAI,2BAA2B,CAAC,CAAA;IACnE,OAAO,MAAM,CAAA;AACjB,CAAC;AAJD,8BAIC;AAGD,SAAgB,SAAS,CAAC,KAAY,EAAE,IAAY;IAChD,IAAI,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAA;IACxB,IAAA,gBAAM,EAAC,MAAM,CAAC,IAAI,IAAI,QAAQ,EAAE,GAAG,IAAI,2BAA2B,CAAC,CAAA;IACnE,OAAO,MAAM,CAAA;AACjB,CAAC;AAJD,8BAIC;AAGD,SAAgB,YAAY,CAAC,KAAY,EAAE,IAAY;IACnD,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAA;IACnB,IAAA,gBAAM,EAAC,CAAC,CAAC,IAAI,IAAI,WAAW,EAAE,GAAG,IAAI,8BAA8B,CAAC,CAAA;IACpE,OAAO,CAAC,CAAA;AACZ,CAAC;AAJD,oCAIC;AAGD,SAAgB,WAAW,CAAC,KAAY,EAAE,IAAY;IAClD,IAAI,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAA;IACvB,IAAA,gBAAM,EAAC,KAAK,CAAC,IAAI,IAAI,KAAK,EAAE,GAAG,IAAI,2BAA2B,CAAC,CAAA;IAC/D,OAAO,KAAK,CAAA;AAChB,CAAC;AAJD,kCAIC"}
@@ -8,7 +8,7 @@ export declare type OpenCrudOrderByValue = string;
8
8
  * A mapping between OpenCRUD enum variants and OrderBy specs
9
9
  */
10
10
  export declare type OpenCrud_OrderBy_Mapping = ReadonlyMap<OpenCrudOrderByValue, OrderBy>;
11
- export declare function getOrderByMapping(model: Model, entityName: string): OpenCrud_OrderBy_Mapping;
12
- export declare function parseOrderBy(model: Model, entityName: string, input: OpenCrudOrderByValue[]): OrderBy;
11
+ export declare function getOrderByMapping(model: Model, typeName: string): OpenCrud_OrderBy_Mapping;
12
+ export declare function parseOrderBy(model: Model, typeName: string, input: OpenCrudOrderByValue[]): OrderBy;
13
13
  export declare function mergeOrderBy(list: OrderBy[]): OrderBy;
14
14
  //# sourceMappingURL=orderBy.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"orderBy.d.ts","sourceRoot":"","sources":["../../src/opencrud/orderBy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,KAAK,EAAC,MAAM,UAAU,CAAA;AAEnC,OAAO,EAAC,OAAO,EAAC,MAAM,YAAY,CAAA;AAGlC;;GAEG;AACH,oBAAY,oBAAoB,GAAG,MAAM,CAAA;AAGzC;;GAEG;AACH,oBAAY,wBAAwB,GAAG,WAAW,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAA;AAMjF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,GAAG,wBAAwB,CAQ5F;AA2CD,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,EAAE,GAAG,OAAO,CASrG;AAGD,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAerD"}
1
+ {"version":3,"file":"orderBy.d.ts","sourceRoot":"","sources":["../../src/opencrud/orderBy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,KAAK,EAAC,MAAM,UAAU,CAAA;AAEnC,OAAO,EAAC,OAAO,EAAC,MAAM,YAAY,CAAA;AAGlC;;GAEG;AACH,oBAAY,oBAAoB,GAAG,MAAM,CAAA;AAGzC;;GAEG;AACH,oBAAY,wBAAwB,GAAG,WAAW,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAA;AAMjF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,GAAG,wBAAwB,CAQ1F;AAuCD,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,EAAE,GAAG,OAAO,CASnG;AAGD,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAerD"}
@@ -7,28 +7,24 @@ exports.mergeOrderBy = exports.parseOrderBy = exports.getOrderByMapping = void 0
7
7
  const assert_1 = __importDefault(require("assert"));
8
8
  const model_tools_1 = require("../model.tools");
9
9
  const MAPPING_CACHE = new WeakMap();
10
- function getOrderByMapping(model, entityName) {
10
+ function getOrderByMapping(model, typeName) {
11
11
  let cache = MAPPING_CACHE.get(model);
12
12
  if (cache == null) {
13
13
  cache = {};
14
14
  MAPPING_CACHE.set(model, cache);
15
15
  }
16
- if (cache[entityName])
17
- return cache[entityName];
18
- return cache[entityName] = buildOrderByMapping(model, entityName, 2);
16
+ if (cache[typeName])
17
+ return cache[typeName];
18
+ return cache[typeName] = buildOrderByMapping(model, typeName, 2);
19
19
  }
20
20
  exports.getOrderByMapping = getOrderByMapping;
21
21
  function buildOrderByMapping(model, typeName, depth) {
22
22
  if (depth <= 0)
23
23
  return new Map();
24
- let object = model[typeName];
25
- if (object.kind == 'union') {
26
- object = (0, model_tools_1.getUnionProps)(model, typeName);
27
- }
28
- (0, assert_1.default)(object.kind == 'entity' || object.kind == 'object');
24
+ let properties = (0, model_tools_1.getUniversalProperties)(model, typeName);
29
25
  let m = new Map();
30
- for (let key in object.properties) {
31
- let propType = object.properties[key].type;
26
+ for (let key in properties) {
27
+ let propType = properties[key].type;
32
28
  switch (propType.kind) {
33
29
  case 'scalar':
34
30
  case 'enum':
@@ -44,10 +40,6 @@ function buildOrderByMapping(model, typeName, depth) {
44
40
  }
45
41
  break;
46
42
  case 'fk':
47
- for (let [name, spec] of buildOrderByMapping(model, propType.foreignEntity, depth - 1)) {
48
- m.set(key + '_' + name, { [key]: spec });
49
- }
50
- break;
51
43
  case 'lookup':
52
44
  for (let [name, spec] of buildOrderByMapping(model, propType.entity, depth - 1)) {
53
45
  m.set(key + '_' + name, { [key]: spec });
@@ -55,10 +47,14 @@ function buildOrderByMapping(model, typeName, depth) {
55
47
  break;
56
48
  }
57
49
  }
50
+ if (model[typeName].kind == 'interface') {
51
+ m.set('_type_ASC', { _type: 'ASC' });
52
+ m.set('_type_DESC', { _type: 'DESC' });
53
+ }
58
54
  return m;
59
55
  }
60
- function parseOrderBy(model, entityName, input) {
61
- let mapping = getOrderByMapping(model, entityName);
56
+ function parseOrderBy(model, typeName, input) {
57
+ let mapping = getOrderByMapping(model, typeName);
62
58
  return mergeOrderBy(input.map(value => {
63
59
  let spec = mapping.get(value);
64
60
  (0, assert_1.default)(spec != null);
@@ -1 +1 @@
1
- {"version":3,"file":"orderBy.js","sourceRoot":"","sources":["../../src/opencrud/orderBy.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA2B;AAE3B,gDAA4C;AAgB5C,MAAM,aAAa,GAAG,IAAI,OAAO,EAAmD,CAAA;AAGpF,SAAgB,iBAAiB,CAAC,KAAY,EAAE,UAAkB;IAC9D,IAAI,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IACpC,IAAI,KAAK,IAAI,IAAI,EAAE;QACf,KAAK,GAAG,EAAE,CAAA;QACV,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;KAClC;IACD,IAAI,KAAK,CAAC,UAAU,CAAC;QAAE,OAAO,KAAK,CAAC,UAAU,CAAC,CAAA;IAC/C,OAAO,KAAK,CAAC,UAAU,CAAC,GAAG,mBAAmB,CAAC,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC,CAAA;AACxE,CAAC;AARD,8CAQC;AAGD,SAAS,mBAAmB,CAAC,KAAY,EAAE,QAAgB,EAAE,KAAa;IACtE,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,IAAI,GAAG,EAAE,CAAA;IAChC,IAAI,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAA;IAC5B,IAAI,MAAM,CAAC,IAAI,IAAI,OAAO,EAAE;QACxB,MAAM,GAAG,IAAA,2BAAa,EAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;KAC1C;IACD,IAAA,gBAAM,EAAC,MAAM,CAAC,IAAI,IAAI,QAAQ,IAAI,MAAM,CAAC,IAAI,IAAI,QAAQ,CAAC,CAAA;IAC1D,IAAI,CAAC,GAAG,IAAI,GAAG,EAAmB,CAAA;IAClC,KAAK,IAAI,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE;QAC/B,IAAI,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,CAAA;QAC1C,QAAO,QAAQ,CAAC,IAAI,EAAE;YAClB,KAAK,QAAQ,CAAC;YACd,KAAK,MAAM;gBACP,IAAI,QAAQ,CAAC,IAAI,IAAI,MAAM,EAAE;oBACzB,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,MAAM,EAAE,EAAC,CAAC,GAAG,CAAC,EAAE,KAAK,EAAC,CAAC,CAAA;oBACnC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,OAAO,EAAE,EAAC,CAAC,GAAG,CAAC,EAAE,MAAM,EAAC,CAAC,CAAA;iBACxC;gBACD,MAAK;YACT,KAAK,QAAQ,CAAC;YACd,KAAK,OAAO;gBACR,KAAK,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,mBAAmB,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE;oBAC3E,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,EAAE,EAAC,CAAC,GAAG,CAAC,EAAE,IAAI,EAAC,CAAC,CAAA;iBACzC;gBACD,MAAK;YACT,KAAK,IAAI;gBACL,KAAK,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,mBAAmB,CAAC,KAAK,EAAE,QAAQ,CAAC,aAAa,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE;oBACpF,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,EAAE,EAAC,CAAC,GAAG,CAAC,EAAE,IAAI,EAAC,CAAC,CAAA;iBACzC;gBACD,MAAK;YACT,KAAK,QAAQ;gBACT,KAAK,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,mBAAmB,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE;oBAC7E,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,EAAE,EAAC,CAAC,GAAG,CAAC,EAAE,IAAI,EAAC,CAAC,CAAA;iBACzC;gBACD,MAAK;SACZ;KACJ;IACD,OAAO,CAAC,CAAA;AACZ,CAAC;AAGD,SAAgB,YAAY,CAAC,KAAY,EAAE,UAAkB,EAAE,KAA6B;IACxF,IAAI,OAAO,GAAG,iBAAiB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAA;IAClD,OAAO,YAAY,CACf,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;QACd,IAAI,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QAC7B,IAAA,gBAAM,EAAC,IAAI,IAAI,IAAI,CAAC,CAAA;QACpB,OAAO,IAAI,CAAA;IACf,CAAC,CAAC,CACL,CAAA;AACL,CAAC;AATD,oCASC;AAGD,SAAgB,YAAY,CAAC,IAAe;IACxC,IAAI,MAAM,GAAY,EAAE,CAAA;IACxB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QAChB,KAAK,IAAI,GAAG,IAAI,IAAI,EAAE;YAClB,IAAI,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;YACzB,IAAI,OAAO,IAAI,IAAI,EAAG;gBAClB,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA;aAC1B;iBAAM,IAAI,OAAO,OAAO,IAAI,QAAQ,EAAE;gBACnC,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA;gBAClB,IAAA,gBAAM,EAAC,OAAO,EAAE,IAAI,QAAQ,CAAC,CAAA;gBAC7B,MAAM,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;aAC5C;SACJ;IACL,CAAC,CAAC,CAAA;IACF,OAAO,MAAM,CAAA;AACjB,CAAC;AAfD,oCAeC"}
1
+ {"version":3,"file":"orderBy.js","sourceRoot":"","sources":["../../src/opencrud/orderBy.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { GraphQLSchema } from "graphql";
2
- import { Model } from "../model";
1
+ import { GraphQLSchema } from 'graphql';
2
+ import { Model } from '../model';
3
3
  export interface SchemaOptions {
4
4
  model: Model;
5
5
  subscriptions?: boolean;
@@ -15,13 +15,13 @@ export declare class SchemaBuilder {
15
15
  private buildType;
16
16
  private buildObjectFields;
17
17
  private getPropType;
18
- private entityListArguments;
18
+ private listArguments;
19
19
  private getWhere;
20
20
  private buildPropWhereFilters;
21
21
  private hasFilters;
22
22
  private getOrderBy;
23
23
  build(): GraphQLSchema;
24
- private installEntityList;
24
+ private installListQuery;
25
25
  private installEntityById;
26
26
  private installEntityByUniqueInput;
27
27
  private installRelayConnection;
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/opencrud/schema.ts"],"names":[],"mappings":"AAIA,OAAO,EAeH,aAAa,EAGhB,MAAM,SAAS,CAAA;AAUhB,OAAO,EAAgC,KAAK,EAAO,MAAM,UAAU,CAAA;AAgBnE,MAAM,WAAW,aAAa;IAC1B,KAAK,EAAE,KAAK,CAAA;IACZ,aAAa,CAAC,EAAE,OAAO,CAAA;CAC1B;AAGD,qBAAa,aAAa;IAMV,OAAO,CAAC,OAAO;IAL3B,OAAO,CAAC,KAAK,CAAO;IACpB,OAAO,CAAC,KAAK,CAAuC;IACpD,OAAO,CAAC,KAAK,CAAsC;IACnD,OAAO,CAAC,OAAO,CAAsC;gBAEjC,OAAO,EAAE,aAAa;IAI1C,OAAO,CAAC,GAAG;IAkCX,OAAO,CAAC,SAAS;IAwCjB,OAAO,CAAC,iBAAiB;IA2BzB,OAAO,CAAC,WAAW;IA4BnB,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,QAAQ;IA8ChB,OAAO,CAAC,qBAAqB;IA0F7B,OAAO,CAAC,UAAU;IAmBlB,OAAO,CAAC,UAAU;IAsBlB,KAAK,IAAI,aAAa;IA4BtB,OAAO,CAAC,iBAAiB;IAwCzB,OAAO,CAAC,iBAAiB;IAwCzB,OAAO,CAAC,0BAA0B;IA2BlC,OAAO,CAAC,sBAAsB;IA8F9B,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,YAAY;CAavB"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/opencrud/schema.ts"],"names":[],"mappings":"AAIA,OAAO,EAeH,aAAa,EAGhB,MAAM,SAAS,CAAA;AAWhB,OAAO,EAAgC,KAAK,EAAO,MAAM,UAAU,CAAA;AAgBnE,MAAM,WAAW,aAAa;IAC1B,KAAK,EAAE,KAAK,CAAA;IACZ,aAAa,CAAC,EAAE,OAAO,CAAA;CAC1B;AAGD,qBAAa,aAAa;IAMV,OAAO,CAAC,OAAO;IAL3B,OAAO,CAAC,KAAK,CAAO;IACpB,OAAO,CAAC,KAAK,CAAuC;IACpD,OAAO,CAAC,KAAK,CAAsC;IACnD,OAAO,CAAC,OAAO,CAAsC;gBAEjC,OAAO,EAAE,aAAa;IAI1C,OAAO,CAAC,GAAG;IAkCX,OAAO,CAAC,SAAS;IAyCjB,OAAO,CAAC,iBAAiB;IA2BzB,OAAO,CAAC,WAAW;IA4BnB,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,QAAQ;IAkChB,OAAO,CAAC,qBAAqB;IAwF7B,OAAO,CAAC,UAAU;IAmBlB,OAAO,CAAC,UAAU;IAsBlB,KAAK,IAAI,aAAa;IAkCtB,OAAO,CAAC,gBAAgB;IAwCxB,OAAO,CAAC,iBAAiB;IAwCzB,OAAO,CAAC,0BAA0B;IA2BlC,OAAO,CAAC,sBAAsB;IA8F9B,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,YAAY;CAavB"}
@@ -78,7 +78,8 @@ class SchemaBuilder {
78
78
  return new graphql_1.GraphQLInterfaceType({
79
79
  name,
80
80
  description: item.description,
81
- fields: () => this.buildObjectFields(item)
81
+ fields: () => this.buildObjectFields(item),
82
+ resolveType: item.queryable ? (value) => value._isTypeOf : undefined
82
83
  });
83
84
  case "enum":
84
85
  return new graphql_1.GraphQLEnumType({
@@ -111,7 +112,7 @@ class SchemaBuilder {
111
112
  type: this.getPropType(prop)
112
113
  };
113
114
  if (prop.type.kind == 'list-lookup') {
114
- field.args = this.entityListArguments(prop.type.entity);
115
+ field.args = this.listArguments(prop.type.entity);
115
116
  }
116
117
  if (object.kind == 'entity' || object.kind == 'object') {
117
118
  switch (prop.type.kind) {
@@ -135,7 +136,7 @@ class SchemaBuilder {
135
136
  type = new graphql_1.GraphQLList(this.getPropType(prop.type.item));
136
137
  break;
137
138
  case "fk":
138
- type = this.get(prop.type.foreignEntity);
139
+ type = this.get(prop.type.entity);
139
140
  break;
140
141
  case "lookup":
141
142
  return this.get(prop.type.entity);
@@ -149,43 +150,29 @@ class SchemaBuilder {
149
150
  }
150
151
  return type;
151
152
  }
152
- entityListArguments(entityName) {
153
+ listArguments(typeName) {
153
154
  return {
154
- where: { type: this.getWhere(entityName) },
155
- orderBy: { type: this.getOrderBy(entityName) },
155
+ where: { type: this.getWhere(typeName) },
156
+ orderBy: { type: this.getOrderBy(typeName) },
156
157
  offset: { type: graphql_1.GraphQLInt },
157
158
  limit: { type: graphql_1.GraphQLInt }
158
159
  };
159
160
  }
160
- getWhere(name) {
161
- let where = this.where.get(name);
161
+ getWhere(typeName) {
162
+ let where = this.where.get(typeName);
162
163
  if (where)
163
164
  return where;
164
- const object = this.model[name];
165
- switch (object.kind) {
166
- case "entity":
167
- case "object":
168
- case "union":
169
- break;
170
- default:
171
- throw (0, util_internal_1.unexpectedCase)(object.kind);
172
- }
165
+ let object = this.model[typeName];
166
+ let properties = (0, model_tools_1.getUniversalProperties)(this.model, typeName);
173
167
  where = new graphql_1.GraphQLInputObjectType({
174
- name: `${name}WhereInput`,
168
+ name: `${typeName}WhereInput`,
175
169
  fields: () => {
176
170
  let fields = {};
177
- let properties;
178
- if (object.kind == 'union') {
179
- properties = (0, model_tools_1.getUnionProps)(this.model, name).properties;
180
- }
181
- else {
182
- properties = object.properties;
183
- }
184
171
  for (let key in properties) {
185
172
  this.buildPropWhereFilters(key, properties[key], fields);
186
173
  }
187
- if (object.kind == 'entity') {
188
- let whereList = new graphql_1.GraphQLList(new graphql_1.GraphQLNonNull(this.getWhere(name)));
174
+ if (object.kind == 'entity' || object.kind == 'interface') {
175
+ let whereList = new graphql_1.GraphQLList(new graphql_1.GraphQLNonNull(this.getWhere(typeName)));
189
176
  fields['AND'] = {
190
177
  type: whereList
191
178
  };
@@ -196,7 +183,7 @@ class SchemaBuilder {
196
183
  return fields;
197
184
  }
198
185
  });
199
- this.where.set(name, where);
186
+ this.where.set(typeName, where);
200
187
  return where;
201
188
  }
202
189
  buildPropWhereFilters(key, prop, fields) {
@@ -269,10 +256,8 @@ class SchemaBuilder {
269
256
  fields[key] = { type: this.getWhere(prop.type.name) };
270
257
  break;
271
258
  case "fk":
272
- fields[`${key}_isNull`] = { type: graphql_1.GraphQLBoolean };
273
- fields[key] = { type: this.getWhere(prop.type.foreignEntity) };
274
- break;
275
259
  case "lookup":
260
+ fields[`${key}_isNull`] = { type: graphql_1.GraphQLBoolean };
276
261
  fields[key] = { type: this.getWhere(prop.type.entity) };
277
262
  break;
278
263
  case "list-lookup": {
@@ -302,19 +287,19 @@ class SchemaBuilder {
302
287
  }
303
288
  return false;
304
289
  }
305
- getOrderBy(entityName) {
306
- let orderBy = this.orderBy.get(entityName);
290
+ getOrderBy(typeName) {
291
+ let orderBy = this.orderBy.get(typeName);
307
292
  if (orderBy)
308
293
  return orderBy;
309
294
  let values = {};
310
- for (let variant of (0, orderBy_1.getOrderByMapping)(this.model, entityName).keys()) {
295
+ for (let variant of (0, orderBy_1.getOrderByMapping)(this.model, typeName).keys()) {
311
296
  values[variant] = {};
312
297
  }
313
298
  orderBy = new graphql_1.GraphQLList(new graphql_1.GraphQLNonNull(new graphql_1.GraphQLEnumType({
314
- name: `${entityName}OrderByInput`,
299
+ name: `${typeName}OrderByInput`,
315
300
  values
316
301
  })));
317
- this.orderBy.set(entityName, orderBy);
302
+ this.orderBy.set(typeName, orderBy);
318
303
  return orderBy;
319
304
  }
320
305
  build() {
@@ -324,11 +309,17 @@ class SchemaBuilder {
324
309
  let item = this.model[name];
325
310
  switch (item.kind) {
326
311
  case "entity":
327
- this.installEntityList(name, query, subscription);
312
+ this.installListQuery(name, query, subscription);
328
313
  this.installEntityById(name, query, subscription);
329
314
  this.installEntityByUniqueInput(name, query);
330
315
  this.installRelayConnection(name, query);
331
316
  break;
317
+ case 'interface':
318
+ if (item.queryable) {
319
+ this.installListQuery(name, query, subscription);
320
+ this.installRelayConnection(name, query);
321
+ }
322
+ break;
332
323
  }
333
324
  }
334
325
  return new graphql_1.GraphQLSchema({
@@ -342,17 +333,17 @@ class SchemaBuilder {
342
333
  }) : undefined
343
334
  });
344
335
  }
345
- installEntityList(entityName, query, subscription) {
336
+ installListQuery(typeName, query, subscription) {
346
337
  let model = this.model;
347
- let queryName = (0, util_naming_1.toPlural)((0, util_naming_1.toCamelCase)(entityName));
348
- let outputType = new graphql_1.GraphQLNonNull(new graphql_1.GraphQLList(new graphql_1.GraphQLNonNull(this.get(entityName))));
349
- let argsType = this.entityListArguments(entityName);
338
+ let queryName = (0, util_naming_1.toPlural)((0, util_naming_1.toCamelCase)(typeName));
339
+ let outputType = new graphql_1.GraphQLNonNull(new graphql_1.GraphQLList(new graphql_1.GraphQLNonNull(this.get(typeName))));
340
+ let argsType = this.listArguments(typeName);
350
341
  function createQuery(context, info, limit) {
351
342
  let tree = (0, resolve_tree_1.getResolveTree)(info);
352
- let fields = (0, tree_1.parseResolveTree)(model, entityName, info.schema, tree);
353
- let args = (0, tree_1.parseEntityListArguments)(model, entityName, tree.args);
354
- limit?.check(() => (0, limit_size_1.getEntityListSize)(model, entityName, fields, args.limit, args.where) + 1);
355
- return new query_1.EntityListQuery(model, context.openreader.dialect, entityName, fields, args);
343
+ let args = (0, tree_1.parseSqlArguments)(model, typeName, tree.args);
344
+ let fields = (0, tree_1.parseAnyTree)(model, typeName, info.schema, tree);
345
+ limit?.check(() => (0, limit_size_1.getListSize)(model, typeName, fields, args.limit, args.where) + 1);
346
+ return new query_1.ListQuery(model, context.openreader.dialect, typeName, fields, args);
356
347
  }
357
348
  query[queryName] = {
358
349
  type: outputType,
@@ -380,8 +371,8 @@ class SchemaBuilder {
380
371
  };
381
372
  function createQuery(context, info, limit) {
382
373
  let tree = (0, resolve_tree_1.getResolveTree)(info);
383
- let fields = (0, tree_1.parseResolveTree)(model, entityName, info.schema, tree);
384
- limit?.check(() => (0, limit_size_1.getSize)(model, fields) + 1);
374
+ let fields = (0, tree_1.parseObjectTree)(model, entityName, info.schema, tree);
375
+ limit?.check(() => (0, limit_size_1.getObjectSize)(model, fields) + 1);
385
376
  return new query_1.EntityByIdQuery(model, context.openreader.dialect, entityName, fields, tree.args.id);
386
377
  }
387
378
  query[queryName] = {
@@ -412,20 +403,20 @@ class SchemaBuilder {
412
403
  },
413
404
  async resolve(source, args, context, info) {
414
405
  let tree = (0, resolve_tree_1.getResolveTree)(info);
415
- let fields = (0, tree_1.parseResolveTree)(model, entityName, info.schema, tree);
416
- context.openreader.responseSizeLimit?.check(() => (0, limit_size_1.getSize)(model, fields) + 1);
417
- let query = new query_1.EntityListQuery(model, context.openreader.dialect, entityName, fields, { where: { op: 'eq', field: 'id', value: args.where.id } });
406
+ let fields = (0, tree_1.parseObjectTree)(model, entityName, info.schema, tree);
407
+ context.openreader.responseSizeLimit?.check(() => (0, limit_size_1.getObjectSize)(model, fields) + 1);
408
+ let query = new query_1.ListQuery(model, context.openreader.dialect, entityName, fields, { where: { op: 'eq', field: 'id', value: args.where.id } });
418
409
  let result = await context.openreader.executeQuery(query);
419
410
  (0, assert_1.default)(result.length < 2);
420
411
  return result[0];
421
412
  }
422
413
  };
423
414
  }
424
- installRelayConnection(entityName, query) {
415
+ installRelayConnection(typeName, query) {
425
416
  let model = this.model;
426
- let outputType = (0, util_naming_1.toPlural)(entityName) + 'Connection';
427
- let edgeType = `${entityName}Edge`;
428
- query[`${(0, util_naming_1.toPlural)((0, util_naming_1.toCamelCase)(entityName))}Connection`] = {
417
+ let outputType = (0, util_naming_1.toPlural)(typeName) + 'Connection';
418
+ let edgeType = `${typeName}Edge`;
419
+ query[`${(0, util_naming_1.toPlural)((0, util_naming_1.toCamelCase)(typeName))}Connection`] = {
429
420
  type: new graphql_1.GraphQLNonNull(new graphql_1.GraphQLObjectType({
430
421
  name: outputType,
431
422
  fields: {
@@ -433,7 +424,7 @@ class SchemaBuilder {
433
424
  type: new graphql_1.GraphQLNonNull(new graphql_1.GraphQLList(new graphql_1.GraphQLNonNull(new graphql_1.GraphQLObjectType({
434
425
  name: edgeType,
435
426
  fields: {
436
- node: { type: new graphql_1.GraphQLNonNull(this.get(entityName)) },
427
+ node: { type: new graphql_1.GraphQLNonNull(this.get(typeName)) },
437
428
  cursor: { type: new graphql_1.GraphQLNonNull(graphql_1.GraphQLString) }
438
429
  }
439
430
  }))))
@@ -443,10 +434,10 @@ class SchemaBuilder {
443
434
  }
444
435
  })),
445
436
  args: {
446
- orderBy: { type: new graphql_1.GraphQLNonNull(this.getOrderBy(entityName)) },
437
+ orderBy: { type: new graphql_1.GraphQLNonNull(this.getOrderBy(typeName)) },
447
438
  after: { type: graphql_1.GraphQLString },
448
439
  first: { type: graphql_1.GraphQLInt },
449
- where: { type: this.getWhere(entityName) }
440
+ where: { type: this.getWhere(typeName) }
450
441
  },
451
442
  async resolve(source, args, context, info) {
452
443
  let orderByArg = (0, util_1.ensureArray)(args.orderBy);
@@ -454,7 +445,7 @@ class SchemaBuilder {
454
445
  throw new apollo_server_core_1.UserInputError('orderBy argument is required for connection');
455
446
  }
456
447
  let req = {
457
- orderBy: (0, orderBy_1.parseOrderBy)(model, entityName, orderByArg),
448
+ orderBy: (0, orderBy_1.parseOrderBy)(model, typeName, orderByArg),
458
449
  where: (0, where_1.parseWhere)(args.where)
459
450
  };
460
451
  if (args.first != null) {
@@ -482,13 +473,13 @@ class SchemaBuilder {
482
473
  req.edgeCursor = (0, resolve_tree_1.hasTreeRequest)(edgeFields, 'cursor');
483
474
  let nodeTree = (0, resolve_tree_1.getTreeRequest)(edgeFields, 'node');
484
475
  if (nodeTree) {
485
- req.edgeNode = (0, tree_1.parseResolveTree)(model, entityName, info.schema, nodeTree);
476
+ req.edgeNode = (0, tree_1.parseAnyTree)(model, typeName, info.schema, nodeTree);
486
477
  }
487
478
  }
488
- context.openreader.responseSizeLimit?.check(() => (0, limit_size_1.getRelaySize)(model, entityName, req) + 1);
489
- let result = await context.openreader.executeQuery(new query_1.EntityConnectionQuery(model, context.openreader.dialect, entityName, req));
479
+ context.openreader.responseSizeLimit?.check(() => (0, limit_size_1.getConnectionSize)(model, typeName, req) + 1);
480
+ let result = await context.openreader.executeQuery(new query_1.ConnectionQuery(model, context.openreader.dialect, typeName, req));
490
481
  if (req.totalCount && result.totalCount == null) {
491
- result.totalCount = await context.openreader.executeQuery(new query_1.EntityCountQuery(model, context.openreader.dialect, entityName, req.where));
482
+ result.totalCount = await context.openreader.executeQuery(new query_1.CountQuery(model, context.openreader.dialect, typeName, req.where));
492
483
  }
493
484
  return result;
494
485
  }