@webda/core 1.6.0-beta.1 → 2.0.0-beta.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 (232) hide show
  1. package/lib/application.d.ts +317 -195
  2. package/lib/application.js +171 -674
  3. package/lib/application.js.map +1 -1
  4. package/lib/application.spec.js +97 -289
  5. package/lib/application.spec.js.map +1 -1
  6. package/lib/core.d.ts +102 -214
  7. package/lib/core.js +146 -70
  8. package/lib/core.js.map +1 -1
  9. package/lib/core.spec.js +80 -17
  10. package/lib/core.spec.js.map +1 -1
  11. package/lib/index.d.ts +14 -9
  12. package/lib/index.js +19 -10
  13. package/lib/index.js.map +1 -1
  14. package/lib/models/aclmodel.d.ts +29 -8
  15. package/lib/models/aclmodel.js +68 -18
  16. package/lib/models/aclmodel.js.map +1 -1
  17. package/lib/models/aclmodel.spec.js +56 -19
  18. package/lib/models/aclmodel.spec.js.map +1 -1
  19. package/lib/models/coremodel.d.ts +9 -17
  20. package/lib/models/coremodel.js +36 -36
  21. package/lib/models/coremodel.js.map +1 -1
  22. package/lib/models/ident.d.ts +8 -3
  23. package/lib/models/ident.js +8 -1
  24. package/lib/models/ident.js.map +1 -1
  25. package/lib/models/ident.spec.js +3 -0
  26. package/lib/models/ident.spec.js.map +1 -1
  27. package/lib/models/ownermodel.d.ts +8 -4
  28. package/lib/models/ownermodel.js +10 -6
  29. package/lib/models/ownermodel.js.map +1 -1
  30. package/lib/models/rolemodel.js.map +1 -1
  31. package/lib/models/rolemodel.spec.js +4 -1
  32. package/lib/models/rolemodel.spec.js.map +1 -1
  33. package/lib/models/user.d.ts +32 -3
  34. package/lib/models/user.js +31 -0
  35. package/lib/models/user.js.map +1 -1
  36. package/lib/models/user.spec.js +11 -0
  37. package/lib/models/user.spec.js.map +1 -1
  38. package/lib/queues/filequeue.d.ts +2 -7
  39. package/lib/queues/filequeue.js +2 -11
  40. package/lib/queues/filequeue.js.map +1 -1
  41. package/lib/queues/filequeue.spec.js +0 -1
  42. package/lib/queues/filequeue.spec.js.map +1 -1
  43. package/lib/queues/memoryqueue.d.ts +2 -7
  44. package/lib/queues/memoryqueue.js +1 -11
  45. package/lib/queues/memoryqueue.js.map +1 -1
  46. package/lib/queues/memoryqueue.spec.js +0 -1
  47. package/lib/queues/memoryqueue.spec.js.map +1 -1
  48. package/lib/queues/queue.spec.d.ts +1 -1
  49. package/lib/queues/queue.spec.js +11 -9
  50. package/lib/queues/queue.spec.js.map +1 -1
  51. package/lib/queues/queueservice.js +1 -1
  52. package/lib/queues/queueservice.js.map +1 -1
  53. package/lib/router.d.ts +46 -1
  54. package/lib/router.js +89 -51
  55. package/lib/router.js.map +1 -1
  56. package/lib/router.spec.js +19 -2
  57. package/lib/router.spec.js.map +1 -1
  58. package/lib/services/asyncevents.d.ts +1 -0
  59. package/lib/services/asyncevents.js +4 -3
  60. package/lib/services/asyncevents.js.map +1 -1
  61. package/lib/services/authentication.d.ts +47 -5
  62. package/lib/services/authentication.js +99 -40
  63. package/lib/services/authentication.js.map +1 -1
  64. package/lib/services/authentication.spec.js +10 -0
  65. package/lib/services/authentication.spec.js.map +1 -1
  66. package/lib/services/binary.d.ts +126 -64
  67. package/lib/services/binary.js +247 -96
  68. package/lib/services/binary.js.map +1 -1
  69. package/lib/services/binary.spec.d.ts +1 -0
  70. package/lib/services/binary.spec.js +96 -25
  71. package/lib/services/binary.spec.js.map +1 -1
  72. package/lib/services/cloudbinary.d.ts +67 -0
  73. package/lib/services/cloudbinary.js +178 -0
  74. package/lib/services/cloudbinary.js.map +1 -0
  75. package/lib/services/cloudbinary.spec.d.ts +13 -0
  76. package/lib/services/cloudbinary.spec.js +205 -0
  77. package/lib/services/cloudbinary.spec.js.map +1 -0
  78. package/lib/services/configuration.d.ts +7 -2
  79. package/lib/services/configuration.js +4 -3
  80. package/lib/services/configuration.js.map +1 -1
  81. package/lib/services/configuration.spec.js +1 -0
  82. package/lib/services/configuration.spec.js.map +1 -1
  83. package/lib/services/cron.d.ts +5 -6
  84. package/lib/services/cron.js +4 -11
  85. package/lib/services/cron.js.map +1 -1
  86. package/lib/services/cron.spec.js +2 -3
  87. package/lib/services/cron.spec.js.map +1 -1
  88. package/lib/services/debugmailer.d.ts +11 -6
  89. package/lib/services/debugmailer.js +20 -14
  90. package/lib/services/debugmailer.js.map +1 -1
  91. package/lib/services/debugmailer.spec.js +1 -0
  92. package/lib/services/debugmailer.spec.js.map +1 -1
  93. package/lib/services/echo.d.ts +2 -6
  94. package/lib/services/echo.js +1 -11
  95. package/lib/services/echo.js.map +1 -1
  96. package/lib/services/echo.spec.js +1 -0
  97. package/lib/services/echo.spec.js.map +1 -1
  98. package/lib/services/filebinary.d.ts +36 -12
  99. package/lib/services/filebinary.js +123 -38
  100. package/lib/services/filebinary.js.map +1 -1
  101. package/lib/services/filebinary.spec.d.ts +4 -2
  102. package/lib/services/filebinary.spec.js +48 -8
  103. package/lib/services/filebinary.spec.js.map +1 -1
  104. package/lib/services/fileconfiguration.d.ts +1 -5
  105. package/lib/services/fileconfiguration.js +1 -10
  106. package/lib/services/fileconfiguration.js.map +1 -1
  107. package/lib/services/invitationservice.d.ts +198 -0
  108. package/lib/services/invitationservice.js +443 -0
  109. package/lib/services/invitationservice.js.map +1 -0
  110. package/lib/services/invitationservice.spec.d.ts +1 -0
  111. package/lib/services/invitationservice.spec.js +517 -0
  112. package/lib/services/invitationservice.spec.js.map +1 -0
  113. package/lib/services/kubernetesconfiguration.d.ts +3 -5
  114. package/lib/services/kubernetesconfiguration.js +5 -12
  115. package/lib/services/kubernetesconfiguration.js.map +1 -1
  116. package/lib/services/kubernetesconfiguration.spec.js +1 -1
  117. package/lib/services/kubernetesconfiguration.spec.js.map +1 -1
  118. package/lib/services/mailer.d.ts +44 -7
  119. package/lib/services/mailer.js +34 -14
  120. package/lib/services/mailer.js.map +1 -1
  121. package/lib/services/mailer.spec.js +29 -0
  122. package/lib/services/mailer.spec.js.map +1 -1
  123. package/lib/services/notificationservice.d.ts +76 -0
  124. package/lib/services/notificationservice.js +91 -0
  125. package/lib/services/notificationservice.js.map +1 -0
  126. package/lib/services/notificationservice.spec.d.ts +1 -0
  127. package/lib/services/notificationservice.spec.js +104 -0
  128. package/lib/services/notificationservice.spec.js.map +1 -0
  129. package/lib/services/oauth.d.ts +6 -4
  130. package/lib/services/oauth.js +28 -11
  131. package/lib/services/oauth.js.map +1 -1
  132. package/lib/services/oauth.spec.js +7 -10
  133. package/lib/services/oauth.spec.js.map +1 -1
  134. package/lib/services/resource.d.ts +1 -5
  135. package/lib/services/resource.js +22 -17
  136. package/lib/services/resource.js.map +1 -1
  137. package/lib/services/resource.spec.js +0 -1
  138. package/lib/services/resource.spec.js.map +1 -1
  139. package/lib/services/service.d.ts +29 -26
  140. package/lib/services/service.js +16 -22
  141. package/lib/services/service.js.map +1 -1
  142. package/lib/services/service.spec.js +3 -0
  143. package/lib/services/service.spec.js.map +1 -1
  144. package/lib/services/version.d.ts +2 -5
  145. package/lib/services/version.js +1 -10
  146. package/lib/services/version.js.map +1 -1
  147. package/lib/stores/aggregator.d.ts +3 -5
  148. package/lib/stores/aggregator.js +3 -10
  149. package/lib/stores/aggregator.js.map +1 -1
  150. package/lib/stores/file.d.ts +7 -8
  151. package/lib/stores/file.js +18 -18
  152. package/lib/stores/file.js.map +1 -1
  153. package/lib/stores/file.spec.js +8 -6
  154. package/lib/stores/file.spec.js.map +1 -1
  155. package/lib/stores/mapper.d.ts +1 -5
  156. package/lib/stores/mapper.js +56 -39
  157. package/lib/stores/mapper.js.map +1 -1
  158. package/lib/stores/mapper.spec.js +120 -1
  159. package/lib/stores/mapper.spec.js.map +1 -1
  160. package/lib/stores/memory.d.ts +5 -9
  161. package/lib/stores/memory.js +5 -17
  162. package/lib/stores/memory.js.map +1 -1
  163. package/lib/stores/memory.spec.d.ts +1 -0
  164. package/lib/stores/memory.spec.js +32 -0
  165. package/lib/stores/memory.spec.js.map +1 -1
  166. package/lib/stores/store.d.ts +131 -26
  167. package/lib/stores/store.js +399 -80
  168. package/lib/stores/store.js.map +1 -1
  169. package/lib/stores/store.spec.d.ts +29 -2
  170. package/lib/stores/store.spec.js +204 -31
  171. package/lib/stores/store.spec.js.map +1 -1
  172. package/lib/stores/webdaql/WebdaQLLexer.d.ts +53 -0
  173. package/lib/stores/webdaql/WebdaQLLexer.js +290 -0
  174. package/lib/stores/webdaql/WebdaQLLexer.js.map +1 -0
  175. package/lib/stores/webdaql/WebdaQLParserLexer.d.ts +53 -0
  176. package/lib/stores/webdaql/WebdaQLParserLexer.js +290 -0
  177. package/lib/stores/webdaql/WebdaQLParserLexer.js.map +1 -0
  178. package/lib/stores/webdaql/WebdaQLParserListener.d.ts +308 -0
  179. package/lib/stores/webdaql/WebdaQLParserListener.js +4 -0
  180. package/lib/stores/webdaql/WebdaQLParserListener.js.map +1 -0
  181. package/lib/stores/webdaql/WebdaQLParserParser.d.ts +301 -0
  182. package/lib/stores/webdaql/WebdaQLParserParser.js +1781 -0
  183. package/lib/stores/webdaql/WebdaQLParserParser.js.map +1 -0
  184. package/lib/stores/webdaql/WebdaQLParserVisitor.d.ts +198 -0
  185. package/lib/stores/webdaql/WebdaQLParserVisitor.js +4 -0
  186. package/lib/stores/webdaql/WebdaQLParserVisitor.js.map +1 -0
  187. package/lib/stores/webdaql/query.d.ts +300 -0
  188. package/lib/stores/webdaql/query.js +471 -0
  189. package/lib/stores/webdaql/query.js.map +1 -0
  190. package/lib/stores/webdaql/query.spec.d.ts +1 -0
  191. package/lib/stores/webdaql/query.spec.js +136 -0
  192. package/lib/stores/webdaql/query.spec.js.map +1 -0
  193. package/lib/test.d.ts +50 -2
  194. package/lib/test.js +161 -16
  195. package/lib/test.js.map +1 -1
  196. package/lib/unpackedapplication.d.ts +66 -0
  197. package/lib/unpackedapplication.js +202 -0
  198. package/lib/unpackedapplication.js.map +1 -0
  199. package/lib/utils/context.d.ts +14 -12
  200. package/lib/utils/context.js +14 -9
  201. package/lib/utils/context.js.map +1 -1
  202. package/lib/utils/context.spec.js +1 -1
  203. package/lib/utils/context.spec.js.map +1 -1
  204. package/lib/utils/cookie.d.ts +6 -3
  205. package/lib/utils/cookie.js +22 -20
  206. package/lib/utils/cookie.js.map +1 -1
  207. package/lib/utils/cookie.spec.js +0 -1
  208. package/lib/utils/cookie.spec.js.map +1 -1
  209. package/lib/utils/logger.d.ts +16 -3
  210. package/lib/utils/logger.js +16 -3
  211. package/lib/utils/logger.js.map +1 -1
  212. package/lib/utils/logger.spec.js.map +1 -1
  213. package/lib/utils/serializers.js +5 -1
  214. package/lib/utils/serializers.js.map +1 -1
  215. package/lib/utils/waiter.d.ts +1 -1
  216. package/lib/utils/waiter.js.map +1 -1
  217. package/package.json +25 -18
  218. package/test/config-file-no-reload.json +2 -1
  219. package/test/config-file-reload.json +2 -1
  220. package/test/config-invitation.json +63 -0
  221. package/test/config-kube-reload.json +2 -1
  222. package/test/config-reload.json +1 -1
  223. package/test/config.json +6 -10
  224. package/test/config.old.json +1 -1
  225. package/test/moddas/annotatedservice.js +1 -3
  226. package/test/moddas/debugmailer.js +2 -7
  227. package/test/moddas/fakeservice.js +1 -1
  228. package/test/moddas/voidstore.js +2 -4
  229. package/test/models/ident.js +1 -1
  230. package/test/models/task.js +1 -5
  231. package/webda.module.json +1124 -0
  232. package/test/config.old-default.json +0 -151
@@ -0,0 +1,471 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WebdaQL = void 0;
4
+ const WebdaQLLexer_1 = require("./WebdaQLLexer");
5
+ const antlr4ts_1 = require("antlr4ts");
6
+ const WebdaQLParserParser_1 = require("./WebdaQLParserParser");
7
+ const TerminalNode_1 = require("antlr4ts/tree/TerminalNode");
8
+ const AbstractParseTreeVisitor_1 = require("antlr4ts/tree/AbstractParseTreeVisitor");
9
+ /**
10
+ * Meta Query Language
11
+ *
12
+ *
13
+ */
14
+ var WebdaQL;
15
+ (function (WebdaQL) {
16
+ /**
17
+ * Create Expression based on the parsed token
18
+ *
19
+ * Expression allow to optimize and split between Query and Filter
20
+ */
21
+ class ExpressionBuilder extends AbstractParseTreeVisitor_1.AbstractParseTreeVisitor {
22
+ /**
23
+ * Default result for the override
24
+ * @returns
25
+ */
26
+ defaultResult() {
27
+ // An empty AND return true
28
+ return {
29
+ filter: new AndExpression([])
30
+ };
31
+ }
32
+ /**
33
+ * Get offset
34
+ * @returns
35
+ */
36
+ getOffset() {
37
+ return this.offset;
38
+ }
39
+ /**
40
+ * Get limit
41
+ * @returns
42
+ */
43
+ getLimit() {
44
+ return this.limit;
45
+ }
46
+ /**
47
+ * Read the limit
48
+ * @param ctx
49
+ */
50
+ visitLimitExpression(ctx) {
51
+ this.limit = this.visitIntegerLiteral(ctx.getChild(1));
52
+ }
53
+ /**
54
+ * Read the offset if provided
55
+ * @param ctx
56
+ */
57
+ visitOffsetExpression(ctx) {
58
+ this.offset = this.visitStringLiteral(ctx.getChild(1));
59
+ }
60
+ /**
61
+ * Visit a order field expression
62
+ */
63
+ visitOrderFieldExpression(ctx) {
64
+ return {
65
+ field: ctx.getChild(0).text,
66
+ direction: ctx.childCount > 1 ? ctx.getChild(1).text : "ASC"
67
+ };
68
+ }
69
+ /**
70
+ * Read the order by values
71
+ */
72
+ visitOrderExpression(ctx) {
73
+ var _a;
74
+ this.orderBy = (_a = ctx.children) === null || _a === void 0 ? void 0 : _a.filter(c => c instanceof WebdaQLParserParser_1.OrderFieldExpressionContext).map((c) => this.visitOrderFieldExpression(c));
75
+ }
76
+ /**
77
+ * Return only AndExpression
78
+ * @param ctx
79
+ * @returns
80
+ */
81
+ visitWebdaql(ctx) {
82
+ if (ctx.childCount === 1) {
83
+ // An empty AND return true
84
+ return {
85
+ filter: new AndExpression([])
86
+ };
87
+ }
88
+ // To parse offset and limit and order by
89
+ for (let i = 1; i < ctx.childCount - 1; i++) {
90
+ this.visit(ctx.getChild(i));
91
+ }
92
+ // Go down one level - if expression empty it means no expression were provided
93
+ return {
94
+ filter: this.visit(ctx.getChild(0)) || new AndExpression([]),
95
+ limit: this.limit,
96
+ continuationToken: this.offset,
97
+ orderBy: this.orderBy
98
+ };
99
+ }
100
+ /**
101
+ * Simplify Logic expression and regroup them
102
+ * @param ctx
103
+ * @returns
104
+ */
105
+ getComparison(ctx) {
106
+ const res = [];
107
+ let [left, _, right] = ctx.children;
108
+ if (right instanceof WebdaQLParserParser_1.SubExpressionContext) {
109
+ right = right.getChild(1);
110
+ }
111
+ if (left instanceof WebdaQLParserParser_1.SubExpressionContext) {
112
+ left = left.getChild(1);
113
+ }
114
+ if (left instanceof ctx.constructor) {
115
+ res.push(...this.getComparison(left));
116
+ }
117
+ else {
118
+ res.push(left);
119
+ }
120
+ if (right instanceof ctx.constructor) {
121
+ res.push(...this.getComparison(right));
122
+ }
123
+ else {
124
+ res.push(right);
125
+ }
126
+ return res;
127
+ }
128
+ /**
129
+ * Get the AndExpression, regrouping all the parameters
130
+ *
131
+ * By default the parser is doing a AND (b AND (c AND d)) creating 3 depth expressions
132
+ * This visitor simplify to a AND b AND c AND d with only one Expression
133
+ */
134
+ visitAndLogicExpression(ctx) {
135
+ return new AndExpression(this.getComparison(ctx).map(c => this.visit(c)));
136
+ }
137
+ /**
138
+ * Implement the BinaryComparison with all methods managed
139
+ */
140
+ visitBinaryComparisonExpression(ctx) {
141
+ const [left, op, right] = ctx.children;
142
+ // @ts-ignore
143
+ return new ComparisonExpression(op.text, left.text, this.visit(right));
144
+ }
145
+ /**
146
+ * Visit each value of the [..., ..., ...] set
147
+ */
148
+ visitSetExpression(ctx) {
149
+ return ctx.children.filter((_i, id) => id % 2).map(c => this.visit(c));
150
+ }
151
+ /**
152
+ * a LIKE "%A?"
153
+ * @param ctx
154
+ * @returns
155
+ */
156
+ visitLikeExpression(ctx) {
157
+ const [left, _, right] = ctx.children;
158
+ let value = this.visit(right);
159
+ return new ComparisonExpression("LIKE", left.text, value);
160
+ }
161
+ /**
162
+ * Map the a IN ['b','c']
163
+ */
164
+ visitInExpression(ctx) {
165
+ const [left, _, right] = ctx.children;
166
+ let value = this.visit(right);
167
+ return new ComparisonExpression("IN", left.text, value);
168
+ }
169
+ /**
170
+ * Get the OrExpression, regrouping all the parameters
171
+ *
172
+ * By default the parser is doing a OR (b OR (c OR d)) creating 3 depth expressions
173
+ * This visitor simplify to a OR b OR c OR d with only one Expression
174
+ */
175
+ visitOrLogicExpression(ctx) {
176
+ return new OrExpression(this.getComparison(ctx).map(c => this.visit(c)));
177
+ }
178
+ /**
179
+ * Read the string literal (removing the simple or double bracket)
180
+ */
181
+ visitStringLiteral(ctx) {
182
+ return ctx.text.substring(1, ctx.text.length - 1);
183
+ }
184
+ /**
185
+ * Read the boolean literal
186
+ */
187
+ visitBooleanLiteral(ctx) {
188
+ return "TRUE" === ctx.text;
189
+ }
190
+ /**
191
+ * Read the number literal
192
+ */
193
+ visitIntegerLiteral(ctx) {
194
+ return parseInt(ctx.text);
195
+ }
196
+ }
197
+ WebdaQL.ExpressionBuilder = ExpressionBuilder;
198
+ /**
199
+ * Represent the query expression or subset
200
+ */
201
+ class Expression {
202
+ constructor(operator) {
203
+ this.operator = operator;
204
+ }
205
+ }
206
+ WebdaQL.Expression = Expression;
207
+ /**
208
+ * Comparison expression
209
+ */
210
+ class ComparisonExpression extends Expression {
211
+ /**
212
+ *
213
+ * @param operator of the expression
214
+ * @param attribute of the object to read
215
+ * @param value
216
+ */
217
+ constructor(operator, attribute, value) {
218
+ super(operator);
219
+ this.value = value;
220
+ this.attribute = attribute.split(".");
221
+ }
222
+ static likeToRegex(like) {
223
+ return new RegExp(like
224
+ // Prevent common regexp chars
225
+ .replace(/\?/g, "\\?")
226
+ .replace(/\[/g, "\\[")
227
+ .replace(/\{/g, "\\{")
228
+ .replace(/\(/g, "\\(")
229
+ // Update % and _ to match regex version
230
+ .replace(/([^\\])_/g, "$1.{1}")
231
+ .replace(/^_/g, ".{1}")
232
+ .replace(/\\_/g, "_")
233
+ .replace(/([^\\])%/g, "$1.*")
234
+ .replace(/^%/g, ".*")
235
+ .replace(/\\%/g, "%")
236
+ // Replace backslash aswell
237
+ .replace(/\\([^\?\[\{\(])/g, "\\\\"));
238
+ }
239
+ /**
240
+ * Read the value from the object
241
+ *
242
+ * @param target
243
+ * @returns
244
+ */
245
+ static getAttributeValue(target, attribute) {
246
+ let res = target;
247
+ for (let i = 0; res && i < attribute.length; i++) {
248
+ res = res[attribute[i]];
249
+ }
250
+ return res;
251
+ }
252
+ /**
253
+ * @override
254
+ */
255
+ eval(target) {
256
+ const left = ComparisonExpression.getAttributeValue(target, this.attribute);
257
+ switch (this.operator) {
258
+ case "=":
259
+ // ignore strong type on purpose
260
+ return left == this.value;
261
+ case "<=":
262
+ return left <= this.value;
263
+ case ">=":
264
+ return left >= this.value;
265
+ case "<":
266
+ return left < this.value;
267
+ case ">":
268
+ return left > this.value;
269
+ case "!=":
270
+ return left != this.value;
271
+ case "LIKE":
272
+ if (typeof left === "string") {
273
+ // Grammar definie value as stringLiteral
274
+ return left.match(ComparisonExpression.likeToRegex(this.value)) !== null;
275
+ }
276
+ return left.toString().match(ComparisonExpression.likeToRegex(this.value)) !== null;
277
+ case "IN":
278
+ return this.value.includes(left);
279
+ }
280
+ }
281
+ /**
282
+ * Return a string represantation of a value
283
+ */
284
+ toStringValue(value) {
285
+ if (Array.isArray(value)) {
286
+ return `[${value.map(v => this.toStringValue(v)).join(", ")}]`;
287
+ }
288
+ switch (typeof value) {
289
+ case "string":
290
+ return `"${value}"`;
291
+ case "boolean":
292
+ return value.toString().toUpperCase();
293
+ }
294
+ return value.toString();
295
+ }
296
+ /**
297
+ * Allow subclass to create different display
298
+ */
299
+ toStringAttribute() {
300
+ return this.attribute.join(".");
301
+ }
302
+ /**
303
+ * Allow subclass to create different display
304
+ */
305
+ toStringOperator() {
306
+ return this.operator;
307
+ }
308
+ /**
309
+ * @override
310
+ */
311
+ toString() {
312
+ return `${this.toStringAttribute()} ${this.toStringOperator()} ${this.toStringValue(this.value)}`;
313
+ }
314
+ }
315
+ WebdaQL.ComparisonExpression = ComparisonExpression;
316
+ /**
317
+ * Abstract logic expression (AND|OR)
318
+ *
319
+ * Could add XOR in the future
320
+ */
321
+ class LogicalExpression extends Expression {
322
+ /**
323
+ *
324
+ * @param operator
325
+ * @param children
326
+ */
327
+ constructor(operator, children) {
328
+ super(operator);
329
+ /**
330
+ * Contains the members of the logical expression
331
+ */
332
+ this.children = [];
333
+ this.children = children;
334
+ }
335
+ /**
336
+ * @override
337
+ */
338
+ toString(depth = 0) {
339
+ if (depth) {
340
+ return "( " + this.children.map(c => c.toString(depth + 1)).join(` ${this.operator} `) + " )";
341
+ }
342
+ return this.children.map(c => c.toString(depth + 1)).join(` ${this.operator} `);
343
+ }
344
+ }
345
+ WebdaQL.LogicalExpression = LogicalExpression;
346
+ /**
347
+ * AND Expression implementation
348
+ */
349
+ class AndExpression extends LogicalExpression {
350
+ /**
351
+ * @param children Expressions to use for AND
352
+ */
353
+ constructor(children) {
354
+ super("AND", children);
355
+ }
356
+ /**
357
+ * @override
358
+ */
359
+ eval(target) {
360
+ for (let child of this.children) {
361
+ if (!child.eval(target)) {
362
+ return false;
363
+ }
364
+ }
365
+ return true;
366
+ }
367
+ }
368
+ WebdaQL.AndExpression = AndExpression;
369
+ /**
370
+ * OR Expression implementation
371
+ */
372
+ class OrExpression extends LogicalExpression {
373
+ /**
374
+ * @param children Expressions to use for OR
375
+ */
376
+ constructor(children) {
377
+ super("OR", children);
378
+ }
379
+ /**
380
+ * @override
381
+ */
382
+ eval(target) {
383
+ for (let child of this.children) {
384
+ if (child.eval(target)) {
385
+ return true;
386
+ }
387
+ }
388
+ return this.children.length === 0;
389
+ }
390
+ }
391
+ WebdaQL.OrExpression = OrExpression;
392
+ /**
393
+ *
394
+ */
395
+ class QueryValidator {
396
+ constructor(sql) {
397
+ this.lexer = new WebdaQLLexer_1.WebdaQLLexer(new antlr4ts_1.ANTLRInputStream(sql));
398
+ let tokenStream = new antlr4ts_1.CommonTokenStream(this.lexer);
399
+ let parser = new WebdaQLParserParser_1.WebdaQLParserParser(tokenStream);
400
+ parser.removeErrorListeners();
401
+ parser.addErrorListener({
402
+ syntaxError: (_recognizer, _offendingSymbol, _line, _charPositionInLine, msg, _e) => {
403
+ throw new SyntaxError(`${msg} (Query: ${sql})`);
404
+ }
405
+ });
406
+ // Parse the input, where `compilationUnit` is whatever entry point you defined
407
+ this.tree = parser.webdaql();
408
+ this.builder = new ExpressionBuilder();
409
+ this.query = this.builder.visit(this.tree);
410
+ }
411
+ /**
412
+ * Get offset
413
+ * @returns
414
+ */
415
+ getOffset() {
416
+ return this.builder.getOffset() || "";
417
+ }
418
+ /**
419
+ * Get limit
420
+ * @returns
421
+ */
422
+ getLimit() {
423
+ return this.builder.getLimit() || 1000;
424
+ }
425
+ /**
426
+ * Get the expression by itself
427
+ * @returns
428
+ */
429
+ getExpression() {
430
+ return this.query.filter;
431
+ }
432
+ /**
433
+ * Retrieve parsed query
434
+ * @returns
435
+ */
436
+ getQuery() {
437
+ return this.query;
438
+ }
439
+ /**
440
+ * Verify if a target fit the expression
441
+ * @param target
442
+ * @returns
443
+ */
444
+ eval(target) {
445
+ return this.query.filter.eval(target);
446
+ }
447
+ /**
448
+ * Display parse tree back as query
449
+ * @param tree
450
+ * @returns
451
+ */
452
+ displayTree(tree = this.tree) {
453
+ let res = "";
454
+ for (let i = 0; i < tree.childCount; i++) {
455
+ const child = tree.getChild(i);
456
+ if (child instanceof TerminalNode_1.TerminalNode) {
457
+ if (child.text === "<EOF>") {
458
+ continue;
459
+ }
460
+ res += child.text.trim() + " ";
461
+ }
462
+ else {
463
+ res += this.displayTree(child).trim() + " ";
464
+ }
465
+ }
466
+ return res;
467
+ }
468
+ }
469
+ WebdaQL.QueryValidator = QueryValidator;
470
+ })(WebdaQL = exports.WebdaQL || (exports.WebdaQL = {}));
471
+ //# sourceMappingURL=query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../../src/stores/webdaql/query.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ const mocha_1 = require("@testdeck/mocha");
10
+ const query_1 = require("./query");
11
+ const assert = require("assert");
12
+ const targets = [
13
+ {
14
+ test: {
15
+ attr1: "plop"
16
+ },
17
+ attr2: "OK",
18
+ attr3: 13,
19
+ attr4: "ok"
20
+ }
21
+ ];
22
+ let QueryTest = class QueryTest {
23
+ dev() {
24
+ let queryMap = {
25
+ "a = 1 AND b = 2 AND c = 3 AND d = 4": "a = 1 AND b = 2 AND c = 3 AND d = 4",
26
+ "a = 1 AND (b = 2 AND c = 3) AND d = 4": "a = 1 AND b = 2 AND c = 3 AND d = 4",
27
+ "a = 1 AND ((b = 2 AND c = 3) AND d = 4)": "a = 1 AND b = 2 AND c = 3 AND d = 4",
28
+ "a = 1 AND ((b = 2 OR c = 3) AND d = 4)": "a = 1 AND ( b = 2 OR c = 3 ) AND d = 4",
29
+ "a = 1 AND (b = 2) AND c = 3 AND d = 4": "a = 1 AND b = 2 AND c = 3 AND d = 4",
30
+ "a = 1 OR b = 2 OR c = 3 OR d = 4": "a = 1 OR b = 2 OR c = 3 OR d = 4",
31
+ 'a = 1 AND (b = 2 OR c = 3) AND d = "plop"': 'a = 1 AND ( b = 2 OR c = 3 ) AND d = "plop"',
32
+ "a = 1 OR b = TRUE AND c = FALSE OR d = 'plop'": 'a = 1 OR ( b = TRUE AND c = FALSE ) OR d = "plop"',
33
+ "test.attr1 = 'plop'": true,
34
+ "test.attr1 = 'plop2'": false,
35
+ "test.attr1 = 'plop' AND attr2 IN ['TEST', TRUE, 3]": 'test.attr1 = "plop" AND attr2 IN ["TEST", TRUE, 3]',
36
+ "(test.attr1 = 'plop' AND attr2 IN ['TEST', 'OK']) OR attr3 <= 12": null,
37
+ "test.attr1 = 'plop' AND attr2 IN ['TEST', 'OK'] OR attr3 <= 12 AND attr4 = 'ok'": null,
38
+ "test.attr1 = 'plop' AND (attr2 IN ['TEST', 'OK'] OR attr3 <= 12) AND attr4 = 'ok'": null,
39
+ "test.attr1 = 'plop' AND attr2 IN ['TEST', 'OK'] AND attr3 <= 12 AND attr4 = 'ok'": null,
40
+ "a = 1 OR b = 2": null,
41
+ "a = 1 AND b = 2 OR c = 3 AND d = 4": null,
42
+ "a = 1 AND b = 2 OR c = 3 AND d = 4 OR e = 5 AND f = 6": null,
43
+ "a = 1 AND (b = 2 OR (c = 3 AND (d = 4 OR e = 5))) AND f = 6": null,
44
+ "": true,
45
+ 'test.attr1 LIKE "pl_p"': true,
46
+ 'test.attr1 LIKE "pl__p"': false,
47
+ 'attr3 LIKE "1_"': true,
48
+ "attr3 >= 12": true,
49
+ "attr3 <= 12": false,
50
+ "attr3 != 12": true,
51
+ "attr3 > 12": true,
52
+ "attr3 < 13": false,
53
+ 'test.attr1 LIKE "pl%"': true,
54
+ "a = 1 AND b=2 OR a=1 AND b=3": "( a = 1 AND b = 2 ) OR ( a = 1 AND b = 3 )",
55
+ "a = 1 ORDER BY a": null,
56
+ "a = 1 ORDER BY a DESC, b ASC": null
57
+ };
58
+ for (let query in queryMap) {
59
+ const validator = new query_1.WebdaQL.QueryValidator(query);
60
+ assert.strictEqual(validator.displayTree().replace(/\s/g, ""), query.replace(/\s/g, ""));
61
+ if (typeof queryMap[query] === "string") {
62
+ assert.strictEqual(validator.getExpression().toString(), queryMap[query], `Failed optimization of query: ${query} => ${validator.getExpression().toString()}`);
63
+ }
64
+ else if (typeof queryMap[query] === "boolean") {
65
+ assert.strictEqual(validator.eval(targets[0]), queryMap[query], `Failed query: ${query}`);
66
+ }
67
+ else {
68
+ console.log("QUERY", query);
69
+ console.log("OPTIMIZED QUERY", validator.getExpression().toString(), "=>", validator.eval(targets[0]));
70
+ }
71
+ }
72
+ }
73
+ likeRegexp() {
74
+ assert.deepStrictEqual(query_1.WebdaQL.ComparisonExpression.likeToRegex("test"), /test/);
75
+ assert.deepStrictEqual(query_1.WebdaQL.ComparisonExpression.likeToRegex("t_est"), /t.{1}est/);
76
+ assert.deepStrictEqual(query_1.WebdaQL.ComparisonExpression.likeToRegex("_test"), /.{1}test/);
77
+ assert.deepStrictEqual(query_1.WebdaQL.ComparisonExpression.likeToRegex("t\\_est"), /t_est/);
78
+ assert.deepStrictEqual(query_1.WebdaQL.ComparisonExpression.likeToRegex("t%est"), /t.*est/);
79
+ assert.deepStrictEqual(query_1.WebdaQL.ComparisonExpression.likeToRegex("%te?st"), /.*te\?st/);
80
+ assert.deepStrictEqual(query_1.WebdaQL.ComparisonExpression.likeToRegex("t\\%est"), /t%est/);
81
+ assert.deepStrictEqual(query_1.WebdaQL.ComparisonExpression.likeToRegex("t\\eest"), /t\\est/);
82
+ }
83
+ simple() {
84
+ assert.strictEqual(new query_1.WebdaQL.QueryValidator("test.attr1 = 'plop'").eval(targets[0]), true);
85
+ assert.strictEqual(new query_1.WebdaQL.QueryValidator("test.attr1 = 'plop2'").eval(targets[0]), false);
86
+ }
87
+ andQuery() {
88
+ assert.strictEqual(new query_1.WebdaQL.QueryValidator("test.attr1 = 'plop' AND attr2 IN ['TEST', 'OK']").eval(targets[0]), true);
89
+ }
90
+ orQuery() {
91
+ new query_1.WebdaQL.QueryValidator("(test.attr1 = 'plop' AND attr2 IN ['TEST', 'OK']) OR attr3 <= 12").eval(targets[0]);
92
+ }
93
+ multipleQuery() {
94
+ new query_1.WebdaQL.QueryValidator("test.attr1 = 'plop' AND attr2 IN ['TEST', 'OK'] OR attr3 <= 12 AND attr4 = 'ok'").eval(targets[0]);
95
+ new query_1.WebdaQL.QueryValidator("test.attr1 = 'plop' AND attr2 IN ['TEST', 'OK'] AND attr3 <= 12 AND attr4 = 'ok'").eval(targets[0]);
96
+ }
97
+ limitOffset() {
98
+ let val = new query_1.WebdaQL.QueryValidator('LIMIT 10 OFFSET "pl"');
99
+ assert.strictEqual(val.getLimit(), 10);
100
+ assert.strictEqual(val.getOffset(), "pl");
101
+ val = new query_1.WebdaQL.QueryValidator('OFFSET "pl2"');
102
+ assert.strictEqual(val.getLimit(), 1000);
103
+ assert.strictEqual(val.getOffset(), "pl2");
104
+ }
105
+ badQuery() {
106
+ assert.throws(() => new query_1.WebdaQL.QueryValidator("test lo 'plop'").eval(targets[0]));
107
+ }
108
+ };
109
+ __decorate([
110
+ mocha_1.test
111
+ ], QueryTest.prototype, "dev", null);
112
+ __decorate([
113
+ mocha_1.test
114
+ ], QueryTest.prototype, "likeRegexp", null);
115
+ __decorate([
116
+ mocha_1.test
117
+ ], QueryTest.prototype, "simple", null);
118
+ __decorate([
119
+ mocha_1.test
120
+ ], QueryTest.prototype, "andQuery", null);
121
+ __decorate([
122
+ mocha_1.test
123
+ ], QueryTest.prototype, "orQuery", null);
124
+ __decorate([
125
+ mocha_1.test
126
+ ], QueryTest.prototype, "multipleQuery", null);
127
+ __decorate([
128
+ mocha_1.test
129
+ ], QueryTest.prototype, "limitOffset", null);
130
+ __decorate([
131
+ mocha_1.test
132
+ ], QueryTest.prototype, "badQuery", null);
133
+ QueryTest = __decorate([
134
+ mocha_1.suite
135
+ ], QueryTest);
136
+ //# sourceMappingURL=query.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.spec.js","sourceRoot":"","sources":["../../../src/stores/webdaql/query.spec.ts"],"names":[],"mappings":"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"}