@comake/skl-js-engine 0.1.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 (99) hide show
  1. package/LICENSE.md +4 -0
  2. package/README.md +46 -0
  3. package/dist/Skql.d.ts +68 -0
  4. package/dist/Skql.js +351 -0
  5. package/dist/Skql.js.map +1 -0
  6. package/dist/index.d.ts +22 -0
  7. package/dist/index.js +44 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/mapping/Mapper.d.ts +14 -0
  10. package/dist/mapping/Mapper.js +64 -0
  11. package/dist/mapping/Mapper.js.map +1 -0
  12. package/dist/sklEngine.d.ts +68 -0
  13. package/dist/sklEngine.js +351 -0
  14. package/dist/sklEngine.js.map +1 -0
  15. package/dist/storage/AggregateOperator.d.ts +12 -0
  16. package/dist/storage/AggregateOperator.js +17 -0
  17. package/dist/storage/AggregateOperator.js.map +1 -0
  18. package/dist/storage/BaseQueryAdapterOptions.d.ts +19 -0
  19. package/dist/storage/BaseQueryAdapterOptions.js +3 -0
  20. package/dist/storage/BaseQueryAdapterOptions.js.map +1 -0
  21. package/dist/storage/FindOperator.d.ts +12 -0
  22. package/dist/storage/FindOperator.js +17 -0
  23. package/dist/storage/FindOperator.js.map +1 -0
  24. package/dist/storage/FindOptionsTypes.d.ts +45 -0
  25. package/dist/storage/FindOptionsTypes.js +3 -0
  26. package/dist/storage/FindOptionsTypes.js.map +1 -0
  27. package/dist/storage/MemoryQueryAdapter.d.ts +28 -0
  28. package/dist/storage/MemoryQueryAdapter.js +215 -0
  29. package/dist/storage/MemoryQueryAdapter.js.map +1 -0
  30. package/dist/storage/QueryAdapter.d.ts +74 -0
  31. package/dist/storage/QueryAdapter.js +3 -0
  32. package/dist/storage/QueryAdapter.js.map +1 -0
  33. package/dist/storage/SparqlQueryAdapter.d.ts +34 -0
  34. package/dist/storage/SparqlQueryAdapter.js +229 -0
  35. package/dist/storage/SparqlQueryAdapter.js.map +1 -0
  36. package/dist/storage/aggregate/Max.d.ts +2 -0
  37. package/dist/storage/aggregate/Max.js +13 -0
  38. package/dist/storage/aggregate/Max.js.map +1 -0
  39. package/dist/storage/memory/MemoryQueryAdapter.d.ts +36 -0
  40. package/dist/storage/memory/MemoryQueryAdapter.js +246 -0
  41. package/dist/storage/memory/MemoryQueryAdapter.js.map +1 -0
  42. package/dist/storage/memory/MemoryQueryAdapterOptions.d.ts +12 -0
  43. package/dist/storage/memory/MemoryQueryAdapterOptions.js +3 -0
  44. package/dist/storage/memory/MemoryQueryAdapterOptions.js.map +1 -0
  45. package/dist/storage/operator/Equal.d.ts +2 -0
  46. package/dist/storage/operator/Equal.js +13 -0
  47. package/dist/storage/operator/Equal.js.map +1 -0
  48. package/dist/storage/operator/GreaterThan.d.ts +2 -0
  49. package/dist/storage/operator/GreaterThan.js +13 -0
  50. package/dist/storage/operator/GreaterThan.js.map +1 -0
  51. package/dist/storage/operator/GreaterThanOrEqual.d.ts +2 -0
  52. package/dist/storage/operator/GreaterThanOrEqual.js +13 -0
  53. package/dist/storage/operator/GreaterThanOrEqual.js.map +1 -0
  54. package/dist/storage/operator/In.d.ts +2 -0
  55. package/dist/storage/operator/In.js +13 -0
  56. package/dist/storage/operator/In.js.map +1 -0
  57. package/dist/storage/operator/Inverse.d.ts +2 -0
  58. package/dist/storage/operator/Inverse.js +13 -0
  59. package/dist/storage/operator/Inverse.js.map +1 -0
  60. package/dist/storage/operator/LessThan.d.ts +2 -0
  61. package/dist/storage/operator/LessThan.js +13 -0
  62. package/dist/storage/operator/LessThan.js.map +1 -0
  63. package/dist/storage/operator/LessThanOrEqual.d.ts +2 -0
  64. package/dist/storage/operator/LessThanOrEqual.js +13 -0
  65. package/dist/storage/operator/LessThanOrEqual.js.map +1 -0
  66. package/dist/storage/operator/Not.d.ts +2 -0
  67. package/dist/storage/operator/Not.js +13 -0
  68. package/dist/storage/operator/Not.js.map +1 -0
  69. package/dist/storage/sparql/SparqlQueryAdapter.d.ts +40 -0
  70. package/dist/storage/sparql/SparqlQueryAdapter.js +235 -0
  71. package/dist/storage/sparql/SparqlQueryAdapter.js.map +1 -0
  72. package/dist/storage/sparql/SparqlQueryAdapterOptions.d.ts +15 -0
  73. package/dist/storage/sparql/SparqlQueryAdapterOptions.js +3 -0
  74. package/dist/storage/sparql/SparqlQueryAdapterOptions.js.map +1 -0
  75. package/dist/storage/sparql/SparqlQueryBuilder.d.ts +81 -0
  76. package/dist/storage/sparql/SparqlQueryBuilder.js +553 -0
  77. package/dist/storage/sparql/SparqlQueryBuilder.js.map +1 -0
  78. package/dist/storage/sparql/SparqlUpdateBuilder.d.ts +31 -0
  79. package/dist/storage/sparql/SparqlUpdateBuilder.js +190 -0
  80. package/dist/storage/sparql/SparqlUpdateBuilder.js.map +1 -0
  81. package/dist/storage/sparql/VariableGenerator.d.ts +4 -0
  82. package/dist/storage/sparql/VariableGenerator.js +14 -0
  83. package/dist/storage/sparql/VariableGenerator.js.map +1 -0
  84. package/dist/util/TripleUtil.d.ts +21 -0
  85. package/dist/util/TripleUtil.js +221 -0
  86. package/dist/util/TripleUtil.js.map +1 -0
  87. package/dist/util/Types.d.ts +10 -0
  88. package/dist/util/Types.js +3 -0
  89. package/dist/util/Types.js.map +1 -0
  90. package/dist/util/Util.d.ts +15 -0
  91. package/dist/util/Util.js +94 -0
  92. package/dist/util/Util.js.map +1 -0
  93. package/dist/util/VariableGenerator.d.ts +5 -0
  94. package/dist/util/VariableGenerator.js +29 -0
  95. package/dist/util/VariableGenerator.js.map +1 -0
  96. package/dist/util/Vocabularies.d.ts +12 -0
  97. package/dist/util/Vocabularies.js +118 -0
  98. package/dist/util/Vocabularies.js.map +1 -0
  99. package/package.json +92 -0
@@ -0,0 +1,215 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MemoryQueryAdapter = void 0;
4
+ const TripleUtil_1 = require("../util/TripleUtil");
5
+ const Util_1 = require("../util/Util");
6
+ const Vocabularies_1 = require("../util/Vocabularies");
7
+ const FindOperator_1 = require("./FindOperator");
8
+ /**
9
+ * A {@link QueryAdapter} that stores data in memory.
10
+ */
11
+ class MemoryQueryAdapter {
12
+ constructor(schemas) {
13
+ this.schemas = {};
14
+ for (const schema of schemas) {
15
+ this.schemas[schema['@id']] = schema;
16
+ }
17
+ }
18
+ async find(options) {
19
+ if (options?.where?.id && Object.keys(options.where).length === 1 && typeof options.where.id === 'string') {
20
+ return this.schemas[options.where.id] ?? null;
21
+ }
22
+ if (options?.where) {
23
+ for (const entity of Object.values(this.schemas)) {
24
+ const matches = await this.entityMatchesQuery(entity, options.where);
25
+ if (matches) {
26
+ return entity;
27
+ }
28
+ }
29
+ return null;
30
+ }
31
+ return Object.values(this.schemas)[0] ?? null;
32
+ }
33
+ async findBy(where) {
34
+ return this.find({ where });
35
+ }
36
+ async findAll(options) {
37
+ let results = [];
38
+ if (options?.where?.id && Object.keys(options.where).length === 1 && typeof options.where.id === 'string') {
39
+ const schema = this.schemas[options.where.id];
40
+ if (schema) {
41
+ results = [schema];
42
+ }
43
+ }
44
+ else if (options?.where) {
45
+ for (const entity of Object.values(this.schemas)) {
46
+ const matches = await this.entityMatchesQuery(entity, options.where);
47
+ if (matches) {
48
+ results.push(entity);
49
+ }
50
+ }
51
+ }
52
+ else {
53
+ results = Object.values(this.schemas);
54
+ }
55
+ if (options?.limit ?? options?.offset) {
56
+ const start = options?.offset ?? 0;
57
+ const end = options?.limit && options?.offset
58
+ ? options.offset + options.limit
59
+ : options?.limit ?? undefined;
60
+ return results.slice(start, end);
61
+ }
62
+ return results;
63
+ }
64
+ async findAllBy(where) {
65
+ return this.findAll({ where });
66
+ }
67
+ async entityMatchesQuery(entity, where) {
68
+ for (const [fieldName, fieldValue] of Object.entries(where)) {
69
+ const matches = await this.entityMatchesField(entity, fieldName, fieldValue);
70
+ if (!matches) {
71
+ return false;
72
+ }
73
+ }
74
+ return true;
75
+ }
76
+ async entityMatchesField(entity, fieldName, fieldValue) {
77
+ if (FindOperator_1.FindOperator.isFindOperator(fieldValue)) {
78
+ return await this.handleOperator(fieldValue.operator, {
79
+ in: async () => {
80
+ const values = fieldValue.value;
81
+ for (const valueItem of values) {
82
+ if (await this.entityMatchesField(entity, fieldName, valueItem)) {
83
+ return true;
84
+ }
85
+ }
86
+ return false;
87
+ },
88
+ not: async () => {
89
+ if (FindOperator_1.FindOperator.isFindOperator(fieldValue.value)) {
90
+ return !await this.entityMatchesField(entity, fieldName, fieldValue.value);
91
+ }
92
+ const valueItem = fieldValue.value;
93
+ return !await this.entityMatchesField(entity, fieldName, valueItem);
94
+ },
95
+ equal: async () => {
96
+ const valueItem = fieldValue.value;
97
+ return this.entityMatchesField(entity, fieldName, valueItem);
98
+ },
99
+ });
100
+ }
101
+ if (fieldName === 'id') {
102
+ return entity['@id'] === fieldValue;
103
+ }
104
+ if (fieldName === 'type') {
105
+ return this.isInstanceOf(entity, fieldValue);
106
+ }
107
+ if (Array.isArray(fieldValue)) {
108
+ for (const valueItem of fieldValue) {
109
+ if (!await this.entityMatchesField(entity, fieldName, valueItem)) {
110
+ return false;
111
+ }
112
+ }
113
+ return true;
114
+ }
115
+ if (typeof fieldValue === 'object') {
116
+ if (Array.isArray(entity[fieldName])) {
117
+ for (const subFieldValue of entity[fieldName]) {
118
+ const matches = await this.findOptionWhereMatchesNodeObject(fieldValue, subFieldValue);
119
+ if (matches) {
120
+ return true;
121
+ }
122
+ }
123
+ return false;
124
+ }
125
+ if (typeof entity[fieldName] === 'object') {
126
+ return await this.findOptionWhereMatchesNodeObject(fieldValue, entity[fieldName]);
127
+ }
128
+ return false;
129
+ }
130
+ if (Array.isArray(entity[fieldName])) {
131
+ return entity[fieldName].some((field) => this.fieldValueMatchesField(fieldValue, field));
132
+ }
133
+ return this.fieldValueMatchesField(fieldValue, entity[fieldName]);
134
+ }
135
+ fieldValueMatchesField(fieldValue, field) {
136
+ if (typeof field === 'object') {
137
+ if (field['@id']) {
138
+ return field['@id'] === fieldValue;
139
+ }
140
+ if (field['@value']) {
141
+ const jsValue = (0, TripleUtil_1.toJSValueFromDataType)(field['@value'], field['@type']);
142
+ return jsValue === fieldValue;
143
+ }
144
+ }
145
+ return field === fieldValue;
146
+ }
147
+ async findOptionWhereMatchesNodeObject(fieldValue, nodeObject) {
148
+ if (nodeObject['@id'] && Object.keys(nodeObject).length === 1) {
149
+ const subEntity = await this.findBy({ id: nodeObject['@id'] });
150
+ if (subEntity) {
151
+ return this.entityMatchesQuery(subEntity, fieldValue);
152
+ }
153
+ return false;
154
+ }
155
+ return this.entityMatchesQuery(nodeObject, fieldValue);
156
+ }
157
+ async handleOperator(operator, operatorHandlers) {
158
+ if (operator in operatorHandlers) {
159
+ return await operatorHandlers[operator]();
160
+ }
161
+ throw new Error(`Unsupported operator "${operator}"`);
162
+ }
163
+ isInstanceOf(entity, targetClass) {
164
+ const classes = this.getSubClassesOf(targetClass);
165
+ const entityTypes = (0, Util_1.ensureArray)(entity['@type']);
166
+ return entityTypes.some((type) => classes.includes(type));
167
+ }
168
+ getSubClassesOf(targetClass) {
169
+ // Cache subclassesOf
170
+ return Object.values(this.schemas).reduce((subClasses, schema) => {
171
+ const subClassOf = (0, Util_1.ensureArray)(schema[Vocabularies_1.RDFS.subClassOf]);
172
+ const isSubClassOfTarget = subClassOf.some((subClass) => subClass['@id'] === targetClass);
173
+ if (isSubClassOfTarget) {
174
+ subClasses = [
175
+ ...subClasses,
176
+ schema['@id'],
177
+ ...this.getSubClassesOf(schema['@id']),
178
+ ];
179
+ }
180
+ return subClasses;
181
+ }, [targetClass]);
182
+ }
183
+ async exists(where) {
184
+ const res = await this.find({ where });
185
+ return res !== null;
186
+ }
187
+ async save(entityOrEntities) {
188
+ if (Array.isArray(entityOrEntities)) {
189
+ return entityOrEntities.map((entity) => this.saveEntity(entity));
190
+ }
191
+ return this.saveEntity(entityOrEntities);
192
+ }
193
+ saveEntity(entity) {
194
+ const savedEntity = { ...entity };
195
+ this.schemas[entity['@id']] = savedEntity;
196
+ return savedEntity;
197
+ }
198
+ async destroy(entityOrEntities) {
199
+ if (Array.isArray(entityOrEntities)) {
200
+ return entityOrEntities.map((entity) => this.destroyEntity(entity));
201
+ }
202
+ return this.destroyEntity(entityOrEntities);
203
+ }
204
+ destroyEntity(entity) {
205
+ const existingEntity = this.schemas[entity['@id']];
206
+ if (!existingEntity) {
207
+ throw new Error(`Entity with id ${entity['@id']} does not exist.`);
208
+ }
209
+ // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
210
+ delete this.schemas[existingEntity['@id']];
211
+ return existingEntity;
212
+ }
213
+ }
214
+ exports.MemoryQueryAdapter = MemoryQueryAdapter;
215
+ //# sourceMappingURL=MemoryQueryAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemoryQueryAdapter.js","sourceRoot":"","sources":["../../src/storage/MemoryQueryAdapter.ts"],"names":[],"mappings":";;;AAEA,mDAA2D;AAE3D,uCAA2C;AAC3C,uDAA4C;AAE5C,iDAA8C;AAU9C;;GAEG;AACH,MAAa,kBAAkB;IAG7B,YAAmB,OAAiB;QAFnB,YAAO,GAA2B,EAAE,CAAC;QAGpD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC5B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC;SACtC;IACH,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,OAAwB;QACxC,IAAI,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,QAAQ,EAAE;YACzG,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC;SAC/C;QAED,IAAI,OAAO,EAAE,KAAK,EAAE;YAClB,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;gBAChD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;gBACrE,IAAI,OAAO,EAAE;oBACX,OAAO,MAAM,CAAC;iBACf;aACF;YACD,OAAO,IAAI,CAAC;SACb;QACD,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IAChD,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,KAAuB;QACzC,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9B,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,OAAwB;QAC3C,IAAI,OAAO,GAAa,EAAE,CAAC;QAC3B,IAAI,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,QAAQ,EAAE;YACzG,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC9C,IAAI,MAAM,EAAE;gBACV,OAAO,GAAG,CAAE,MAAM,CAAE,CAAC;aACtB;SACF;aAAM,IAAI,OAAO,EAAE,KAAK,EAAE;YACzB,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;gBAChD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;gBACrE,IAAI,OAAO,EAAE;oBACX,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;iBACtB;aACF;SACF;aAAM;YACL,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SACvC;QACD,IAAI,OAAO,EAAE,KAAK,IAAI,OAAO,EAAE,MAAM,EAAE;YACrC,MAAM,KAAK,GAAG,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC;YACnC,MAAM,GAAG,GAAG,OAAO,EAAE,KAAK,IAAI,OAAO,EAAE,MAAM;gBAC3C,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK;gBAChC,CAAC,CAAC,OAAO,EAAE,KAAK,IAAI,SAAS,CAAC;YAChC,OAAO,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;SAClC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAEM,KAAK,CAAC,SAAS,CAAC,KAAuB;QAC5C,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACjC,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAC,MAAc,EAAE,KAAuB;QACtE,KAAK,MAAM,CAAE,SAAS,EAAE,UAAU,CAAE,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAC7D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,UAAW,CAAC,CAAC;YAC9E,IAAI,CAAC,OAAO,EAAE;gBACZ,OAAO,KAAK,CAAC;aACd;SACF;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAC9B,MAAc,EACd,SAAiB,EACjB,UAAiC;QAEjC,IAAI,2BAAY,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE;YAC3C,OAAO,MAAM,IAAI,CAAC,cAAc,CAC7B,UAAmC,CAAC,QAAQ,EAC7C;gBACE,EAAE,EAAE,KAAK,IAAqB,EAAE;oBAC9B,MAAM,MAAM,GAAI,UAAkD,CAAC,KAA8B,CAAC;oBAClG,KAAK,MAAM,SAAS,IAAI,MAAM,EAAE;wBAC9B,IAAI,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE;4BAC/D,OAAO,IAAI,CAAC;yBACb;qBACF;oBACD,OAAO,KAAK,CAAC;gBACf,CAAC;gBACD,GAAG,EAAE,KAAK,IAAqB,EAAE;oBAC/B,IAAI,2BAAY,CAAC,cAAc,CAAE,UAAmC,CAAC,KAAK,CAAC,EAAE;wBAC3E,OAAO,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAG,UAAmC,CAAC,KAAK,CAAC,CAAC;qBACtG;oBACD,MAAM,SAAS,GAAI,UAAmC,CAAC,KAAe,CAAC;oBACvE,OAAO,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;gBACtE,CAAC;gBACD,KAAK,EAAE,KAAK,IAAqB,EAAE;oBACjC,MAAM,SAAS,GAAI,UAAgD,CAAC,KAA4B,CAAC;oBACjG,OAAO,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;gBAC/D,CAAC;aACF,CACF,CAAC;SACH;QACD,IAAI,SAAS,KAAK,IAAI,EAAE;YACtB,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,UAAoB,CAAC;SAC/C;QACD,IAAI,SAAS,KAAK,MAAM,EAAE;YACxB,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,UAAoB,CAAC,CAAC;SACxD;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;YAC7B,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;gBAClC,IAAI,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE;oBAChE,OAAO,KAAK,CAAC;iBACd;aACF;YACD,OAAO,IAAI,CAAC;SACb;QACD,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;YAClC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE;gBACpC,KAAK,MAAM,aAAa,IAAK,MAAM,CAAC,SAAS,CAAsC,EAAE;oBACnF,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gCAAgC,CAAC,UAA8B,EAAE,aAAa,CAAC,CAAC;oBAC3G,IAAI,OAAO,EAAE;wBACX,OAAO,IAAI,CAAC;qBACb;iBACF;gBACD,OAAO,KAAK,CAAC;aACd;YACD,IAAI,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,QAAQ,EAAE;gBACzC,OAAO,MAAM,IAAI,CAAC,gCAAgC,CAChD,UAA8B,EAC9B,MAAM,CAAC,SAAS,CAAiC,CAClD,CAAC;aACH;YACD,OAAO,KAAK,CAAC;SACd;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE;YACpC,OAAQ,MAAM,CAAC,SAAS,CAAgC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAW,EAAE,CAC/E,IAAI,CAAC,sBAAsB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;SACnD;QACD,OAAO,IAAI,CAAC,sBAAsB,CAAC,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;IACpE,CAAC;IAEO,sBAAsB,CAC5B,UAA+B,EAC/B,KAAuB;QAEvB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC7B,IAAK,KAA6B,CAAC,KAAK,CAAC,EAAE;gBACzC,OAAQ,KAA6B,CAAC,KAAK,CAAC,KAAK,UAAU,CAAC;aAC7D;YACD,IAAK,KAAqB,CAAC,QAAQ,CAAC,EAAE;gBACpC,MAAM,OAAO,GAAG,IAAA,kCAAqB,EAClC,KAAa,CAAC,QAAQ,CAAC,EACvB,KAAa,CAAC,OAAO,CAAC,CACxB,CAAC;gBACF,OAAO,OAAO,KAAK,UAAU,CAAC;aAC/B;SACF;QACD,OAAO,KAAK,KAAK,UAAU,CAAC;IAC9B,CAAC;IAEO,KAAK,CAAC,gCAAgC,CAC5C,UAA4B,EAC5B,UAAwC;QAExC,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;YAC7D,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC/D,IAAI,SAAS,EAAE;gBACb,OAAO,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;aACvD;YACD,OAAO,KAAK,CAAC;SACd;QACD,OAAO,IAAI,CAAC,kBAAkB,CAAC,UAAoB,EAAE,UAAU,CAAC,CAAC;IACnE,CAAC;IAEO,KAAK,CAAC,cAAc,CAC1B,QAA0B,EAC1B,gBAAkE;QAElE,IAAI,QAAQ,IAAI,gBAAgB,EAAE;YAChC,OAAO,MAAM,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;SAC3C;QACD,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,GAAG,CAAC,CAAC;IACxD,CAAC;IAEO,YAAY,CAAC,MAAc,EAAE,WAAmB;QACtD,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;QAClD,MAAM,WAAW,GAAG,IAAA,kBAAW,EAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QACjD,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,IAAY,EAAW,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7E,CAAC;IAEO,eAAe,CAAC,WAAmB;QACzC,qBAAqB;QACrB,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CACxC,UAAoB,EACpB,MAAc,EACJ,EAAE;YACZ,MAAM,UAAU,GAAG,IAAA,kBAAW,EAAC,MAAM,CAAC,mBAAI,CAAC,UAAU,CAA0B,CAAC,CAAC;YACjF,MAAM,kBAAkB,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,WAAW,CAAC,CAAC;YACnG,IAAI,kBAAkB,EAAE;gBACtB,UAAU,GAAG;oBACX,GAAG,UAAU;oBACb,MAAM,CAAC,KAAK,CAAC;oBACb,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;iBACvC,CAAC;aACH;YACD,OAAO,UAAU,CAAC;QACpB,CAAC,EAAE,CAAE,WAAW,CAAE,CAAC,CAAC;IACtB,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,KAAuB;QACzC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACvC,OAAO,GAAG,KAAK,IAAI,CAAC;IACtB,CAAC;IAIM,KAAK,CAAC,IAAI,CAAC,gBAAmC;QACnD,IAAI,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE;YACnC,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAU,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;SAC1E;QACD,OAAO,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;IAC3C,CAAC;IAEO,UAAU,CAAC,MAAc;QAC/B,MAAM,WAAW,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;QAClC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC;QAC1C,OAAO,WAAW,CAAC;IACrB,CAAC;IAIM,KAAK,CAAC,OAAO,CAAC,gBAAmC;QACtD,IAAI,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE;YACnC,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAU,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;SAC7E;QACD,OAAO,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;IAC9C,CAAC;IAEO,aAAa,CAAC,MAAc;QAClC,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACnD,IAAI,CAAC,cAAc,EAAE;YACnB,MAAM,IAAI,KAAK,CAAC,kBAAkB,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;SACpE;QACD,gEAAgE;QAChE,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3C,OAAO,cAAc,CAAC;IACxB,CAAC;CACF;AAxPD,gDAwPC"}
@@ -0,0 +1,74 @@
1
+ import type { GraphObject } from 'jsonld';
2
+ import type { Frame } from 'jsonld/jsonld-spec';
3
+ import type { Entity } from '../util/Types';
4
+ import type { FindAllOptions, FindOneOptions, FindOptionsWhere } from './FindOptionsTypes';
5
+ export declare type RawQueryResult = Record<string, number | boolean | string>;
6
+ /**
7
+ * Adapts CRUD operations to a specific persistence layer.
8
+ */
9
+ export interface QueryAdapter {
10
+ /**
11
+ * Performs a raw query for data matching the query.
12
+ */
13
+ executeRawQuery<T extends RawQueryResult>(query: string): Promise<T[]>;
14
+ /**
15
+ * Performs a raw query for entities matching the query. The query must be a CONSTRUCT query.
16
+ */
17
+ executeRawEntityQuery(query: string, frame?: Frame): Promise<GraphObject>;
18
+ /**
19
+ * Finds first entity by a given find options.
20
+ * If entity was not found in the database - returns null.
21
+ */
22
+ find(options?: FindOneOptions): Promise<Entity | null>;
23
+ /**
24
+ * Finds first entity that matches given where condition.
25
+ * If entity was not found in the database - returns null.
26
+ */
27
+ findBy(where: FindOptionsWhere): Promise<Entity | null>;
28
+ /**
29
+ * Finds entities that match given find options.
30
+ */
31
+ findAll(options?: FindAllOptions): Promise<Entity[]>;
32
+ /**
33
+ * Finds entities that match given where condition.
34
+ */
35
+ findAllBy(where: FindOptionsWhere): Promise<Entity[]>;
36
+ /**
37
+ * Determines if an entity matching the given where condition exists in the database.
38
+ */
39
+ exists(where?: FindOptionsWhere): Promise<boolean>;
40
+ /**
41
+ * Returns a count of entities matching the given where condition in the database.
42
+ */
43
+ count(where?: FindOptionsWhere): Promise<number>;
44
+ /**
45
+ * Saves a given entity in the database.
46
+ * If entity does not exist in the database then inserts, otherwise updates.
47
+ */
48
+ save(entity: Entity): Promise<Entity>;
49
+ /**
50
+ * Saves all given entities in the database.
51
+ * If entities do not exist in the database then inserts, otherwise updates.
52
+ */
53
+ save(entities: Entity[]): Promise<Entity[]>;
54
+ /**
55
+ * Updates entity partially. Entity can be found by a given conditions.
56
+ * Unlike save method executes a primitive operation without cascades, relations and other operations included
57
+ */
58
+ /**
59
+ * Removes a given entity from the database.
60
+ */
61
+ destroy(entity: Entity): Promise<Entity>;
62
+ /**
63
+ * Removes given entities from the database.
64
+ */
65
+ destroy(entities: Entity[]): Promise<Entity[]>;
66
+ /**
67
+ * Deletes entities by a given criteria.
68
+ * Unlike destroy method executes a primitive operation without cascades, relations and other operations included.
69
+ */
70
+ /**
71
+ * Removes all entities from the database.
72
+ */
73
+ destroyAll(): Promise<void>;
74
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=QueryAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryAdapter.js","sourceRoot":"","sources":["../../src/storage/QueryAdapter.ts"],"names":[],"mappings":""}
@@ -0,0 +1,34 @@
1
+ import type { Triple, Expression } from 'sparqljs';
2
+ import type { Entity } from '../util/Types';
3
+ import type { QueryAdapter, FindOneOptions, FindAllOptions, FindOptionsWhere } from './QueryAdapter';
4
+ export interface WhereQueryData {
5
+ triples: Triple[];
6
+ filters: Expression[];
7
+ }
8
+ /**
9
+ * A {@link QueryAdapter} that stores data in a database through a sparql endpoint.
10
+ */
11
+ export declare class SparqlQueryAdapter implements QueryAdapter {
12
+ private readonly sparqlClient;
13
+ private readonly sparqlGenerator;
14
+ constructor(endpointUrl: string);
15
+ find(options?: FindOneOptions): Promise<Entity | null>;
16
+ private buildPatternsFromQueryData;
17
+ private createWhereQueryData;
18
+ findBy(where: FindOptionsWhere): Promise<Entity | null>;
19
+ findAll(options?: FindAllOptions): Promise<Entity[]>;
20
+ findAllBy(where: FindOptionsWhere): Promise<Entity[]>;
21
+ save(entity: Entity): Promise<Entity>;
22
+ save(entities: Entity[]): Promise<Entity[]>;
23
+ destroy(entity: Entity): Promise<Entity>;
24
+ destroy(entities: Entity[]): Promise<Entity[]>;
25
+ private executeSparqlQueryAndGetData;
26
+ private valueToLiteral;
27
+ private buildEqualOperation;
28
+ private buildTypesAndSuperTypesTriple;
29
+ private createWhereQueryDataFromKeyValue;
30
+ private createWhereQueryDataForIdValue;
31
+ private createWhereQueryDataForType;
32
+ private createWhereQueryDataForNestedWhere;
33
+ private createWhereQueryDataForLiteral;
34
+ }
@@ -0,0 +1,229 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SparqlQueryAdapter = void 0;
7
+ /* eslint-disable @typescript-eslint/naming-convention */
8
+ const data_model_1 = __importDefault(require("@rdfjs/data-model"));
9
+ const sparql_http_client_1 = __importDefault(require("sparql-http-client"));
10
+ const sparqljs_1 = require("sparqljs");
11
+ const Util_1 = require("../util/Util");
12
+ const VariableGenerator_1 = require("../util/VariableGenerator");
13
+ const Vocabularies_1 = require("../util/Vocabularies");
14
+ /**
15
+ * A {@link QueryAdapter} that stores data in a database through a sparql endpoint.
16
+ */
17
+ class SparqlQueryAdapter {
18
+ constructor(endpointUrl) {
19
+ this.sparqlClient = new sparql_http_client_1.default({ endpointUrl });
20
+ this.sparqlGenerator = new sparqljs_1.Generator();
21
+ }
22
+ async find(options) {
23
+ const variableGenerator = new VariableGenerator_1.VariableGenerator();
24
+ const graph = data_model_1.default.variable('graph');
25
+ const subject = data_model_1.default.variable('subject');
26
+ const predicate = data_model_1.default.variable('predicate');
27
+ const object = data_model_1.default.variable('object');
28
+ const namedGraphQueryData = this.createWhereQueryData(graph, variableGenerator, options?.where);
29
+ const graphQuery = {
30
+ type: 'query',
31
+ queryType: 'SELECT',
32
+ variables: [graph],
33
+ where: this.buildPatternsFromQueryData(graph, namedGraphQueryData),
34
+ limit: 1,
35
+ };
36
+ const queryJson = {
37
+ type: 'query',
38
+ queryType: 'SELECT',
39
+ prefixes: {},
40
+ variables: [subject, predicate, object],
41
+ where: [
42
+ {
43
+ type: 'graph',
44
+ name: graph,
45
+ patterns: [
46
+ {
47
+ type: 'bgp',
48
+ triples: [
49
+ { subject, predicate, object },
50
+ ],
51
+ },
52
+ ],
53
+ },
54
+ graphQuery,
55
+ ],
56
+ };
57
+ const generatedQuery = this.sparqlGenerator.stringify(queryJson);
58
+ const response = await this.executeSparqlQueryAndGetData(generatedQuery);
59
+ return response;
60
+ }
61
+ buildPatternsFromQueryData(graph, queryData) {
62
+ const basicGraphPatterns = queryData.triples.length === 0 ? [] : [{ type: 'bgp', triples: queryData.triples }];
63
+ const patterns = [
64
+ {
65
+ type: 'graph',
66
+ // File a bug in sparqljs types. GraphPattern should accept Variables in name
67
+ name: graph,
68
+ patterns: basicGraphPatterns,
69
+ },
70
+ ];
71
+ if (queryData.filters.length === 1) {
72
+ patterns.push({
73
+ type: 'filter',
74
+ expression: queryData.filters[0],
75
+ });
76
+ }
77
+ else if (queryData.filters.length > 1) {
78
+ patterns.push({
79
+ type: 'filter',
80
+ expression: {
81
+ type: 'operation',
82
+ operator: '&&',
83
+ args: queryData.filters,
84
+ },
85
+ });
86
+ }
87
+ return patterns;
88
+ }
89
+ createWhereQueryData(parentVariable, variableGenerator, where) {
90
+ if (!where) {
91
+ return {
92
+ triples: [{
93
+ subject: data_model_1.default.variable(variableGenerator.getNext()),
94
+ predicate: data_model_1.default.variable(variableGenerator.getNext()),
95
+ object: data_model_1.default.variable(variableGenerator.getNext()),
96
+ }],
97
+ filters: [],
98
+ };
99
+ }
100
+ let triples = [];
101
+ let filters = [];
102
+ for (const [key, value] of Object.entries(where)) {
103
+ const graphQueryData = this.createWhereQueryDataFromKeyValue(key, value, parentVariable, variableGenerator);
104
+ triples = [...triples, ...graphQueryData.triples];
105
+ filters = [...filters, ...graphQueryData.filters];
106
+ }
107
+ return { triples, filters };
108
+ }
109
+ async findBy(where) {
110
+ return this.find({ where });
111
+ }
112
+ async findAll(options) {
113
+ return [];
114
+ }
115
+ async findAllBy(where) {
116
+ return this.findAll({ where });
117
+ }
118
+ async save(entityOrEntities) {
119
+ if (Array.isArray(entityOrEntities)) {
120
+ return [];
121
+ }
122
+ return { '@id': '', '@type': '' };
123
+ }
124
+ async destroy(entityOrEntities) {
125
+ if (Array.isArray(entityOrEntities)) {
126
+ return [];
127
+ }
128
+ return { '@id': '', '@type': '' };
129
+ }
130
+ // Remove
131
+ // private generateSparqlQueryStringFromFindOneOptions(options?: FindOneOptions): string {
132
+ // return '';
133
+ // }
134
+ // private generateSparqlQueryStringFromFindAllOptions(options?: FindAllOptions): string {
135
+ // return '';
136
+ // }
137
+ async executeSparqlQueryAndGetData(query) {
138
+ console.log('executing query', query);
139
+ const stream = await this.sparqlClient.query.select(query);
140
+ return new Promise((resolve, reject) => {
141
+ const data = [];
142
+ stream.on('data', (row) => {
143
+ Object.entries(row).forEach((entry) => {
144
+ data.push(entry);
145
+ });
146
+ });
147
+ stream.on('end', () => {
148
+ resolve(data);
149
+ });
150
+ stream.on('error', (error) => {
151
+ reject(error);
152
+ });
153
+ });
154
+ }
155
+ valueToLiteral(value) {
156
+ if (typeof value === 'number') {
157
+ return data_model_1.default.literal(value.toString(), Vocabularies_1.XSD.integer);
158
+ }
159
+ if (typeof value === 'boolean') {
160
+ return data_model_1.default.literal(value.toString(), Vocabularies_1.XSD.boolean);
161
+ }
162
+ return data_model_1.default.literal(value.toString());
163
+ }
164
+ buildEqualOperation(leftSide, rightSide) {
165
+ return {
166
+ type: 'operation',
167
+ operator: '=',
168
+ args: [leftSide, rightSide],
169
+ };
170
+ }
171
+ buildTypesAndSuperTypesTriple(subject, object) {
172
+ return {
173
+ subject,
174
+ predicate: Util_1.allTypesAndSuperTypesPath,
175
+ object,
176
+ };
177
+ }
178
+ createWhereQueryDataFromKeyValue(key, value, parentVariable, variableGenerator) {
179
+ if (key === 'id') {
180
+ return this.createWhereQueryDataForIdValue(parentVariable, value);
181
+ }
182
+ if (key === 'type') {
183
+ return this.createWhereQueryDataForType(parentVariable, value);
184
+ }
185
+ if (typeof value === 'object') {
186
+ return this.createWhereQueryDataForNestedWhere(key, value, parentVariable, variableGenerator);
187
+ }
188
+ return this.createWhereQueryDataForLiteral(key, value, parentVariable);
189
+ }
190
+ createWhereQueryDataForIdValue(term, value) {
191
+ return {
192
+ filters: [this.buildEqualOperation(term, data_model_1.default.namedNode(value))],
193
+ triples: [],
194
+ };
195
+ }
196
+ createWhereQueryDataForType(subject, value) {
197
+ return {
198
+ filters: [],
199
+ triples: [this.buildTypesAndSuperTypesTriple(subject, data_model_1.default.namedNode(value))],
200
+ };
201
+ }
202
+ createWhereQueryDataForNestedWhere(key, where, parentVariable, variableGenerator) {
203
+ const subNodeVariable = data_model_1.default.variable(variableGenerator.getNext());
204
+ const subWhereQueryData = this.createWhereQueryData(subNodeVariable, variableGenerator, where);
205
+ return {
206
+ filters: subWhereQueryData.filters,
207
+ triples: [
208
+ {
209
+ subject: parentVariable,
210
+ predicate: data_model_1.default.namedNode(key),
211
+ object: subNodeVariable,
212
+ },
213
+ ...subWhereQueryData.triples,
214
+ ],
215
+ };
216
+ }
217
+ createWhereQueryDataForLiteral(key, value, parentVariable) {
218
+ return {
219
+ filters: [],
220
+ triples: [{
221
+ subject: parentVariable,
222
+ predicate: data_model_1.default.namedNode(key),
223
+ object: this.valueToLiteral(value),
224
+ }],
225
+ };
226
+ }
227
+ }
228
+ exports.SparqlQueryAdapter = SparqlQueryAdapter;
229
+ //# sourceMappingURL=SparqlQueryAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SparqlQueryAdapter.js","sourceRoot":"","sources":["../../src/storage/SparqlQueryAdapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { AggregateOperator } from '../AggregateOperator';
2
+ export declare function Max<T>(value: T): AggregateOperator<T>;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Max = void 0;
4
+ const AggregateOperator_1 = require("../AggregateOperator");
5
+ // eslint-disable-next-line @typescript-eslint/naming-convention
6
+ function Max(value) {
7
+ return new AggregateOperator_1.AggregateOperator({
8
+ operator: 'max',
9
+ value,
10
+ });
11
+ }
12
+ exports.Max = Max;
13
+ //# sourceMappingURL=Max.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Max.js","sourceRoot":"","sources":["../../../src/storage/aggregate/Max.ts"],"names":[],"mappings":";;;AAAA,4DAAyD;AAEzD,gEAAgE;AAChE,SAAgB,GAAG,CACjB,KAAQ;IAER,OAAO,IAAI,qCAAiB,CAAI;QAC9B,QAAQ,EAAE,KAAK;QACf,KAAK;KACN,CAAC,CAAC;AACL,CAAC;AAPD,kBAOC"}
@@ -0,0 +1,36 @@
1
+ import type { GraphObject } from 'jsonld';
2
+ import type { Frame } from 'jsonld/jsonld-spec';
3
+ import type { Entity } from '../../util/Types';
4
+ import type { FindOneOptions, FindAllOptions, FindOptionsWhere } from '../FindOptionsTypes';
5
+ import type { QueryAdapter, RawQueryResult } from '../QueryAdapter';
6
+ import type { MemoryQueryAdapterOptions } from './MemoryQueryAdapterOptions';
7
+ /**
8
+ * A {@link QueryAdapter} that stores data in memory.
9
+ */
10
+ export declare class MemoryQueryAdapter implements QueryAdapter {
11
+ private readonly schemas;
12
+ private readonly setTimestamps;
13
+ constructor(options: MemoryQueryAdapterOptions);
14
+ executeRawQuery<T extends RawQueryResult>(query: string): Promise<T[]>;
15
+ executeRawEntityQuery(query: string, frame?: Frame): Promise<GraphObject>;
16
+ find(options?: FindOneOptions): Promise<Entity | null>;
17
+ findBy(where: FindOptionsWhere): Promise<Entity | null>;
18
+ findAll(options?: FindAllOptions): Promise<Entity[]>;
19
+ findAllBy(where: FindOptionsWhere): Promise<Entity[]>;
20
+ private entityMatchesQuery;
21
+ private entityMatchesField;
22
+ private fieldValueMatchesField;
23
+ private findOptionWhereMatchesNodeObject;
24
+ private handleOperator;
25
+ private isInstanceOf;
26
+ private getSubClassesOf;
27
+ exists(where: FindOptionsWhere): Promise<boolean>;
28
+ count(where?: FindOptionsWhere): Promise<number>;
29
+ save(entity: Entity): Promise<Entity>;
30
+ save(entities: Entity[]): Promise<Entity[]>;
31
+ private saveEntity;
32
+ destroy(entity: Entity): Promise<Entity>;
33
+ destroy(entities: Entity[]): Promise<Entity[]>;
34
+ destroyAll(): Promise<void>;
35
+ private destroyEntity;
36
+ }