@qrvey/formula-lang 0.1.2 → 0.2.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 (252) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/__tests__/integration/__mocks__/elasticsearchScripts.ts +21 -0
  3. package/__tests__/integration/__mocks__/sqlScripts.ts +20 -0
  4. package/__tests__/integration/elasticsearch.test.ts +158 -0
  5. package/__tests__/integration/expression.test.ts +22 -0
  6. package/__tests__/integration/redshift.test.ts +127 -0
  7. package/__tests__/integration/sonwflake.test.ts +123 -0
  8. package/__tests__/unit/parser.test.ts +106 -0
  9. package/__tests__/{src → unit}/transpiler.test.ts +0 -17
  10. package/bitbucket-pipelines.yml +63 -0
  11. package/dist/constants/index.d.ts +12 -2
  12. package/dist/constants/index.js +21 -1
  13. package/dist/constants/index.js.map +1 -1
  14. package/dist/constants/interfaces.d.ts +8 -2
  15. package/dist/errors/definitions.d.ts +20 -5
  16. package/dist/errors/definitions.js +28 -5
  17. package/dist/errors/definitions.js.map +1 -1
  18. package/dist/errors/engineErrors.d.ts +2 -0
  19. package/dist/errors/engineErrors.js +21 -0
  20. package/dist/errors/engineErrors.js.map +1 -0
  21. package/dist/errors/index.d.ts +2 -5
  22. package/dist/errors/index.js +4 -38
  23. package/dist/errors/index.js.map +1 -1
  24. package/dist/functions/abs.d.ts +5 -0
  25. package/dist/functions/abs.js +35 -0
  26. package/dist/functions/abs.js.map +1 -0
  27. package/dist/functions/datedif.d.ts +5 -0
  28. package/dist/functions/datedif.js +61 -0
  29. package/dist/functions/datedif.js.map +1 -0
  30. package/dist/functions/day.d.ts +5 -0
  31. package/dist/functions/day.js +36 -0
  32. package/dist/functions/day.js.map +1 -0
  33. package/dist/functions/hour.d.ts +5 -0
  34. package/dist/functions/hour.js +36 -0
  35. package/dist/functions/hour.js.map +1 -0
  36. package/dist/functions/if.d.ts +5 -0
  37. package/dist/functions/if.js +49 -0
  38. package/dist/functions/if.js.map +1 -0
  39. package/dist/functions/ifs.d.ts +5 -0
  40. package/dist/functions/ifs.js +71 -0
  41. package/dist/functions/ifs.js.map +1 -0
  42. package/dist/functions/index.js +20 -0
  43. package/dist/functions/index.js.map +1 -1
  44. package/dist/functions/mid.d.ts +3 -0
  45. package/dist/functions/mid.js +15 -12
  46. package/dist/functions/mid.js.map +1 -1
  47. package/dist/functions/minute.d.ts +5 -0
  48. package/dist/functions/minute.js +36 -0
  49. package/dist/functions/minute.js.map +1 -0
  50. package/dist/functions/month.d.ts +5 -0
  51. package/dist/functions/month.js +36 -0
  52. package/dist/functions/month.js.map +1 -0
  53. package/dist/functions/second.d.ts +5 -0
  54. package/dist/functions/second.js +36 -0
  55. package/dist/functions/second.js.map +1 -0
  56. package/dist/functions/year.d.ts +5 -0
  57. package/dist/functions/year.js +36 -0
  58. package/dist/functions/year.js.map +1 -0
  59. package/dist/grammar/generated/qformula.lang.js +10 -10
  60. package/dist/grammar/generated/qformula.lang.js.map +1 -1
  61. package/dist/parser/json-parser.js +42 -6
  62. package/dist/parser/json-parser.js.map +1 -1
  63. package/dist/transpiler/index.d.ts +9 -7
  64. package/dist/transpiler/index.js +38 -27
  65. package/dist/transpiler/index.js.map +1 -1
  66. package/dist/transpiler/validateFuncStructure.d.ts +2 -0
  67. package/dist/transpiler/validateFuncStructure.js +37 -0
  68. package/dist/transpiler/validateFuncStructure.js.map +1 -0
  69. package/dist/utils/customFunctions.d.ts +3 -0
  70. package/dist/utils/customFunctions.js +21 -0
  71. package/dist/utils/customFunctions.js.map +1 -0
  72. package/dist/utils/elasticsearch/index.d.ts +2 -0
  73. package/dist/utils/elasticsearch/index.js +16 -0
  74. package/dist/utils/elasticsearch/index.js.map +1 -0
  75. package/dist/utils/elasticsearch/scripts.d.ts +10 -0
  76. package/dist/utils/elasticsearch/scripts.js +36 -0
  77. package/dist/utils/elasticsearch/scripts.js.map +1 -0
  78. package/dist/utils/getMonthMaxDayAllowed.d.ts +7 -0
  79. package/dist/utils/getMonthMaxDayAllowed.js +22 -0
  80. package/dist/utils/getMonthMaxDayAllowed.js.map +1 -0
  81. package/dist/utils/getNodeValue.d.ts +2 -0
  82. package/dist/utils/getNodeValue.js +9 -0
  83. package/dist/utils/getNodeValue.js.map +1 -0
  84. package/dist/utils/index.d.ts +9 -4
  85. package/dist/utils/index.js +9 -3
  86. package/dist/utils/index.js.map +1 -1
  87. package/dist/utils/isDateParam.d.ts +2 -0
  88. package/dist/utils/isDateParam.js +8 -0
  89. package/dist/utils/isDateParam.js.map +1 -0
  90. package/dist/utils/isNumberParam.d.ts +2 -0
  91. package/dist/utils/isNumberParam.js +8 -0
  92. package/dist/utils/isNumberParam.js.map +1 -0
  93. package/dist/utils/isPositiveNumberParam.d.ts +2 -0
  94. package/dist/utils/isPositiveNumberParam.js +8 -0
  95. package/dist/utils/isPositiveNumberParam.js.map +1 -0
  96. package/dist/utils/isStringParam.d.ts +2 -0
  97. package/dist/utils/isStringParam.js +8 -0
  98. package/dist/utils/isStringParam.js.map +1 -0
  99. package/dist/utils/isValidDate.d.ts +1 -0
  100. package/dist/utils/isValidDate.js +4 -0
  101. package/dist/utils/isValidDate.js.map +1 -0
  102. package/dist/utils/sql/index.d.ts +1 -0
  103. package/dist/utils/sql/index.js +2 -0
  104. package/dist/utils/sql/index.js.map +1 -0
  105. package/dist/utils/sql/scripts.d.ts +3 -0
  106. package/dist/utils/sql/scripts.js +39 -0
  107. package/dist/utils/sql/scripts.js.map +1 -0
  108. package/package.json +4 -1
  109. package/pkg/dist/constants/index.d.ts +42 -0
  110. package/pkg/dist/constants/index.js +86 -0
  111. package/pkg/dist/constants/index.js.map +1 -0
  112. package/pkg/dist/constants/interfaces.d.ts +62 -0
  113. package/pkg/dist/constants/interfaces.js +2 -0
  114. package/pkg/dist/constants/interfaces.js.map +1 -0
  115. package/pkg/dist/errors/definitions.d.ts +26 -0
  116. package/pkg/dist/errors/definitions.js +42 -0
  117. package/pkg/dist/errors/definitions.js.map +1 -0
  118. package/pkg/dist/errors/elasticsearch.d.ts +24 -0
  119. package/pkg/dist/errors/elasticsearch.js +27 -0
  120. package/pkg/dist/errors/elasticsearch.js.map +1 -0
  121. package/pkg/dist/errors/engineErrors.d.ts +2 -0
  122. package/pkg/dist/errors/engineErrors.js +21 -0
  123. package/pkg/dist/errors/engineErrors.js.map +1 -0
  124. package/pkg/dist/errors/index.d.ts +2 -0
  125. package/pkg/dist/errors/index.js +5 -0
  126. package/pkg/dist/errors/index.js.map +1 -0
  127. package/pkg/dist/errors/snowflake.d.ts +15 -0
  128. package/pkg/dist/errors/snowflake.js +17 -0
  129. package/pkg/dist/errors/snowflake.js.map +1 -0
  130. package/pkg/dist/functions/abs.d.ts +5 -0
  131. package/pkg/dist/functions/abs.js +35 -0
  132. package/pkg/dist/functions/abs.js.map +1 -0
  133. package/pkg/dist/functions/datedif.d.ts +5 -0
  134. package/pkg/dist/functions/datedif.js +58 -0
  135. package/pkg/dist/functions/datedif.js.map +1 -0
  136. package/pkg/dist/functions/day.d.ts +5 -0
  137. package/pkg/dist/functions/day.js +36 -0
  138. package/pkg/dist/functions/day.js.map +1 -0
  139. package/pkg/dist/functions/hour.d.ts +5 -0
  140. package/pkg/dist/functions/hour.js +36 -0
  141. package/pkg/dist/functions/hour.js.map +1 -0
  142. package/pkg/dist/functions/if.d.ts +5 -0
  143. package/pkg/dist/functions/if.js +49 -0
  144. package/pkg/dist/functions/if.js.map +1 -0
  145. package/pkg/dist/functions/ifs.d.ts +5 -0
  146. package/pkg/dist/functions/ifs.js +71 -0
  147. package/pkg/dist/functions/ifs.js.map +1 -0
  148. package/pkg/dist/functions/index.d.ts +4 -0
  149. package/pkg/dist/functions/index.js +29 -0
  150. package/pkg/dist/functions/index.js.map +1 -0
  151. package/pkg/dist/functions/mid.d.ts +5 -0
  152. package/pkg/dist/functions/mid.js +51 -0
  153. package/pkg/dist/functions/mid.js.map +1 -0
  154. package/pkg/dist/functions/minute.d.ts +5 -0
  155. package/pkg/dist/functions/minute.js +36 -0
  156. package/pkg/dist/functions/minute.js.map +1 -0
  157. package/pkg/dist/functions/month.d.ts +5 -0
  158. package/pkg/dist/functions/month.js +36 -0
  159. package/pkg/dist/functions/month.js.map +1 -0
  160. package/pkg/dist/functions/second.d.ts +5 -0
  161. package/pkg/dist/functions/second.js +36 -0
  162. package/pkg/dist/functions/second.js.map +1 -0
  163. package/pkg/dist/functions/year.d.ts +5 -0
  164. package/pkg/dist/functions/year.js +36 -0
  165. package/pkg/dist/functions/year.js.map +1 -0
  166. package/pkg/dist/grammar/generated/qformula.lang.js +43 -0
  167. package/pkg/dist/grammar/generated/qformula.lang.js.map +1 -0
  168. package/pkg/dist/grammar/qformula.grammar.d.ts +1 -0
  169. package/pkg/dist/grammar/qformula.grammar.js +2 -0
  170. package/pkg/dist/grammar/qformula.grammar.js.map +1 -0
  171. package/pkg/dist/index.js +29 -0
  172. package/pkg/dist/index.js.map +1 -0
  173. package/pkg/dist/parser/json-parser.js +139 -0
  174. package/pkg/dist/parser/json-parser.js.map +1 -0
  175. package/pkg/dist/transpiler/index.d.ts +17 -0
  176. package/pkg/dist/transpiler/index.js +82 -0
  177. package/pkg/dist/transpiler/index.js.map +1 -0
  178. package/pkg/dist/transpiler/validateFuncStructure.d.ts +2 -0
  179. package/pkg/dist/transpiler/validateFuncStructure.js +35 -0
  180. package/pkg/dist/transpiler/validateFuncStructure.js.map +1 -0
  181. package/pkg/dist/utils/customFunctions.d.ts +2 -0
  182. package/pkg/dist/utils/customFunctions.js +11 -0
  183. package/pkg/dist/utils/customFunctions.js.map +1 -0
  184. package/pkg/dist/utils/elasticsearch/index.d.ts +1 -0
  185. package/pkg/dist/utils/elasticsearch/index.js +15 -0
  186. package/pkg/dist/utils/elasticsearch/index.js.map +1 -0
  187. package/pkg/dist/utils/elasticsearch/scripts.d.ts +9 -0
  188. package/pkg/dist/utils/elasticsearch/scripts.js +33 -0
  189. package/pkg/dist/utils/elasticsearch/scripts.js.map +1 -0
  190. package/pkg/dist/utils/getMonthMaxDayAllowed.d.ts +7 -0
  191. package/pkg/dist/utils/getMonthMaxDayAllowed.js +22 -0
  192. package/pkg/dist/utils/getMonthMaxDayAllowed.js.map +1 -0
  193. package/pkg/dist/utils/getNodeValue.d.ts +2 -0
  194. package/pkg/dist/utils/getNodeValue.js +9 -0
  195. package/pkg/dist/utils/getNodeValue.js.map +1 -0
  196. package/pkg/dist/utils/index.d.ts +8 -0
  197. package/pkg/dist/utils/index.js +9 -0
  198. package/pkg/dist/utils/index.js.map +1 -0
  199. package/pkg/dist/utils/isDateParam.d.ts +2 -0
  200. package/pkg/dist/utils/isDateParam.js +10 -0
  201. package/pkg/dist/utils/isDateParam.js.map +1 -0
  202. package/pkg/dist/utils/isNumberParam.d.ts +2 -0
  203. package/pkg/dist/utils/isNumberParam.js +8 -0
  204. package/pkg/dist/utils/isNumberParam.js.map +1 -0
  205. package/pkg/dist/utils/isPositiveNumberParam.d.ts +2 -0
  206. package/pkg/dist/utils/isPositiveNumberParam.js +8 -0
  207. package/pkg/dist/utils/isPositiveNumberParam.js.map +1 -0
  208. package/pkg/dist/utils/isStringParam.d.ts +2 -0
  209. package/pkg/dist/utils/isStringParam.js +8 -0
  210. package/pkg/dist/utils/isStringParam.js.map +1 -0
  211. package/pkg/dist/utils/isValidDate.d.ts +1 -0
  212. package/pkg/dist/utils/isValidDate.js +4 -0
  213. package/pkg/dist/utils/isValidDate.js.map +1 -0
  214. package/pkg/dist/utils/sql/scripts.d.ts +2 -0
  215. package/pkg/dist/utils/sql/scripts.js +39 -0
  216. package/pkg/dist/utils/sql/scripts.js.map +1 -0
  217. package/__tests__/src/parser.test.ts +0 -29
  218. package/coverage/clover.xml +0 -228
  219. package/coverage/coverage-final.json +0 -12
  220. package/coverage/lcov-report/base.css +0 -224
  221. package/coverage/lcov-report/block-navigation.js +0 -87
  222. package/coverage/lcov-report/favicon.png +0 -0
  223. package/coverage/lcov-report/index.html +0 -236
  224. package/coverage/lcov-report/prettify.css +0 -1
  225. package/coverage/lcov-report/prettify.js +0 -2
  226. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  227. package/coverage/lcov-report/sorter.js +0 -196
  228. package/coverage/lcov-report/src/constants/index.html +0 -116
  229. package/coverage/lcov-report/src/constants/index.ts.html +0 -307
  230. package/coverage/lcov-report/src/errors/definitions.ts.html +0 -154
  231. package/coverage/lcov-report/src/errors/index.html +0 -131
  232. package/coverage/lcov-report/src/errors/index.ts.html +0 -217
  233. package/coverage/lcov-report/src/functions/index.html +0 -131
  234. package/coverage/lcov-report/src/functions/index.ts.html +0 -103
  235. package/coverage/lcov-report/src/functions/mid.ts.html +0 -238
  236. package/coverage/lcov-report/src/grammar/generated/index.html +0 -116
  237. package/coverage/lcov-report/src/grammar/generated/qformula.lang.js.html +0 -220
  238. package/coverage/lcov-report/src/grammar/index.html +0 -116
  239. package/coverage/lcov-report/src/grammar/qformula.grammar.ts.html +0 -88
  240. package/coverage/lcov-report/src/index.html +0 -116
  241. package/coverage/lcov-report/src/index.ts.html +0 -160
  242. package/coverage/lcov-report/src/parser/index.html +0 -116
  243. package/coverage/lcov-report/src/parser/json-parser.ts.html +0 -475
  244. package/coverage/lcov-report/src/transpiler/index.html +0 -116
  245. package/coverage/lcov-report/src/transpiler/index.ts.html +0 -412
  246. package/coverage/lcov-report/src/utils/index.html +0 -116
  247. package/coverage/lcov-report/src/utils/index.ts.html +0 -103
  248. package/coverage/lcov.info +0 -405
  249. package/dist/models/ast.models.d.ts +0 -29
  250. package/dist/models/ast.models.js +0 -1
  251. package/dist/utils/utils.d.ts +0 -4
  252. package/dist/utils/utils.js +0 -3
@@ -0,0 +1,82 @@
1
+ import { AST_TYPES, CustomOperators } from '../constants';
2
+ import { UnknownFunctionError } from '../errors/definitions';
3
+ import { functionList } from '../functions';
4
+ import { customFunction as customFunctionUtil } from '../utils';
5
+ import { validateFuncStructure } from './validateFuncStructure';
6
+ export class Transpiler {
7
+ constructor(ast, engine) {
8
+ this.customFunctionList = new Set();
9
+ this.ast = ast;
10
+ this.engine = engine;
11
+ }
12
+ get() {
13
+ try {
14
+ const { body } = this.ast;
15
+ const expression = body ? this.processNode(body) : undefined;
16
+ return {
17
+ valid: body !== undefined,
18
+ expression: this.unshiftCustomFunctions(expression),
19
+ };
20
+ }
21
+ catch (error) {
22
+ return {
23
+ valid: false,
24
+ error,
25
+ };
26
+ }
27
+ }
28
+ processNode(expression) {
29
+ const { type } = expression;
30
+ const nodes = {
31
+ [AST_TYPES.variable]: this.literal,
32
+ [AST_TYPES.literal]: this.literal,
33
+ [AST_TYPES.unaryExpression]: this.unaryExpression,
34
+ [AST_TYPES.binaryExpression]: this.binaryExpression,
35
+ [AST_TYPES.functionCall]: this.functionCall,
36
+ };
37
+ return nodes[type].call(this, expression);
38
+ }
39
+ literal({ value, dataType }) {
40
+ if (dataType === 'string')
41
+ value = `'${value}'`;
42
+ return value;
43
+ }
44
+ unaryExpression({ operator, right }) {
45
+ const rightResult = this.processNode(right);
46
+ return `(${operator} ${rightResult})`;
47
+ }
48
+ binaryExpression({ left, operator, right }) {
49
+ var _a, _b;
50
+ const leftResult = this.processNode(left);
51
+ const rightResult = this.processNode(right);
52
+ return `(${leftResult} ${(_b = (_a = CustomOperators[this.engine]) === null || _a === void 0 ? void 0 : _a[operator]) !== null && _b !== void 0 ? _b : operator} ${rightResult})`;
53
+ }
54
+ functionCall(node) {
55
+ const { name, arguments: args } = node;
56
+ const func = functionList[name];
57
+ if (!func)
58
+ throw new UnknownFunctionError(node);
59
+ const customFunction = customFunctionUtil(this.engine, name);
60
+ if (customFunction)
61
+ this.customFunctionList.add(customFunction);
62
+ const parameters = args.map((param) => this.processNode(param));
63
+ return this.executer(func, parameters, node);
64
+ }
65
+ executer(func, args, node) {
66
+ validateFuncStructure(node, func, args);
67
+ return func.transpiler[this.engine](...args);
68
+ }
69
+ unshiftCustomFunctions(expression) {
70
+ if (!expression)
71
+ return undefined;
72
+ const customs = Array.from(this.customFunctionList).join('\n');
73
+ if (customs)
74
+ return `${customs}\n${expression}`;
75
+ return expression;
76
+ }
77
+ }
78
+ export function TranspileAST(ast, engine) {
79
+ const transpiler = new Transpiler(ast, engine);
80
+ return transpiler.get();
81
+ }
82
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/transpiler/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,SAAS,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAWnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,cAAc,IAAI,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,MAAM,OAAO,UAAU;IAKnB,YAAY,GAAe,EAAE,MAAe;QAFpC,uBAAkB,GAAG,IAAI,GAAG,EAAE,CAAC;QAGnC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAED,GAAG;QACC,IAAI;YACA,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC;YAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC7D,OAAO;gBACH,KAAK,EAAE,IAAI,KAAK,SAAS;gBACzB,UAAU,EAAE,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC;aACtD,CAAC;SACL;QAAC,OAAO,KAAc,EAAE;YACrB,OAAO;gBACH,KAAK,EAAE,KAAK;gBACZ,KAAK;aACR,CAAC;SACL;IACL,CAAC;IAED,WAAW,CAAC,UAAqB;QAC7B,MAAM,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC;QAC5B,MAAM,KAAK,GAAQ;YACf,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,OAAO;YAClC,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO;YACjC,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,IAAI,CAAC,eAAe;YACjD,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE,IAAI,CAAC,gBAAgB;YACnD,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,YAAY;SAC9C,CAAC;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAc;QACnC,IAAI,QAAQ,KAAK,QAAQ;YAAE,KAAK,GAAG,IAAI,KAAK,GAAG,CAAC;QAChD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,eAAe,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAsB;QACnD,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5C,OAAO,IAAI,QAAQ,IAAI,WAAW,GAAG,CAAC;IAC1C,CAAC;IAED,gBAAgB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAuB;;QAC3D,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5C,OAAO,IAAI,UAAU,IACjB,MAAA,MAAA,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,0CAAG,QAAQ,CAAC,mCAAI,QAChD,IAAI,WAAW,GAAG,CAAC;IACvB,CAAC;IAED,YAAY,CAAC,IAAqB;QAC9B,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;QACvC,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAEhD,MAAM,cAAc,GAAG,kBAAkB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC7D,IAAI,cAAc;YAAE,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAEhE,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QAChE,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;IACjD,CAAC;IAED,QAAQ,CACJ,IAAwB,EACxB,IAAgB,EAChB,IAAqB;QAErB,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACjD,CAAC;IAED,sBAAsB,CAAC,UAA8B;QACjD,IAAI,CAAC,UAAU;YAAE,OAAO,SAAS,CAAC;QAClC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/D,IAAI,OAAO;YAAE,OAAO,GAAG,OAAO,KAAK,UAAU,EAAE,CAAC;QAChD,OAAO,UAAU,CAAC;IACtB,CAAC;CACJ;AAED,MAAM,UAAU,YAAY,CACxB,GAAe,EACf,MAAe;IAEf,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC/C,OAAO,UAAU,CAAC,GAAG,EAAE,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { FunctionCallAST, FunctionDefinition } from '../constants/interfaces';
2
+ export declare function validateFuncStructure(node: FunctionCallAST, definition: FunctionDefinition, args: any): boolean;
@@ -0,0 +1,35 @@
1
+ import { InvalidArgumentError, MissingArgumentError, TooManyArgumentsError, } from '../errors';
2
+ export function validateFuncStructure(node, definition, args) {
3
+ let parameterIndex = 0;
4
+ let argumentIndex = 0;
5
+ const parameters = definition.parameters || [];
6
+ const incrementCounter = () => {
7
+ parameterIndex += 1;
8
+ argumentIndex += 1;
9
+ };
10
+ while (parameterIndex < parameters.length) {
11
+ const parameter = parameters[parameterIndex];
12
+ const value = args[argumentIndex];
13
+ if (!value && parameter.optional) {
14
+ incrementCounter();
15
+ continue;
16
+ }
17
+ if (!value && !parameter.optional)
18
+ throw new MissingArgumentError(node);
19
+ parameter.validator.forEach((validatorFunction) => {
20
+ const validator = validatorFunction(value);
21
+ if (!validator.valid)
22
+ throw new InvalidArgumentError(node, validator);
23
+ });
24
+ incrementCounter();
25
+ if (parameterIndex === parameters.length &&
26
+ argumentIndex !== args.length) {
27
+ if (typeof definition.recursiveStartIn === 'number')
28
+ parameterIndex = definition.recursiveStartIn;
29
+ }
30
+ }
31
+ if (argumentIndex < args.length)
32
+ throw new TooManyArgumentsError(node);
33
+ return true;
34
+ }
35
+ //# sourceMappingURL=validateFuncStructure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateFuncStructure.js","sourceRoot":"","sources":["../../../src/transpiler/validateFuncStructure.ts"],"names":[],"mappings":"AACA,OAAO,EACH,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,GACxB,MAAM,WAAW,CAAC;AAEnB,MAAM,UAAU,qBAAqB,CACjC,IAAqB,EACrB,UAA8B,EAC9B,IAAS;IAET,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,IAAI,EAAE,CAAC;IAC/C,MAAM,gBAAgB,GAAG,GAAG,EAAE;QAC1B,cAAc,IAAI,CAAC,CAAC;QACpB,aAAa,IAAI,CAAC,CAAC;IACvB,CAAC,CAAC;IACF,OAAO,cAAc,GAAG,UAAU,CAAC,MAAM,EAAE;QACvC,MAAM,SAAS,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;QAElC,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC,QAAQ,EAAE;YAC9B,gBAAgB,EAAE,CAAC;YACnB,SAAS;SACZ;QACD,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,QAAQ;YAAE,MAAM,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC;QACxE,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,iBAAiB,EAAE,EAAE;YAC9C,MAAM,SAAS,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAC3C,IAAI,CAAC,SAAS,CAAC,KAAK;gBAChB,MAAM,IAAI,oBAAoB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,gBAAgB,EAAE,CAAC;QACnB,IACI,cAAc,KAAK,UAAU,CAAC,MAAM;YACpC,aAAa,KAAK,IAAI,CAAC,MAAM,EAC/B;YACE,IAAI,OAAO,UAAU,CAAC,gBAAgB,KAAK,QAAQ;gBAC/C,cAAc,GAAG,UAAU,CAAC,gBAAgB,CAAC;SACpD;KACJ;IAED,IAAI,aAAa,GAAG,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,qBAAqB,CAAC,IAAI,CAAC,CAAC;IACvE,OAAO,IAAI,CAAC;AAChB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { ENGINES } from '../constants';
2
+ export declare function customFunction(engine: ENGINES, func: string): string | false;
@@ -0,0 +1,11 @@
1
+ import { ENGINES } from '../constants';
2
+ import { customFunctionsList as elasticsearch } from './elasticsearch';
3
+ export function customFunction(engine, func) {
4
+ switch (engine) {
5
+ case ENGINES.ELASTICSEARCH:
6
+ return elasticsearch(func);
7
+ default:
8
+ return false;
9
+ }
10
+ }
11
+ //# sourceMappingURL=customFunctions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"customFunctions.js","sourceRoot":"","sources":["../../../src/utils/customFunctions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,mBAAmB,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEvE,MAAM,UAAU,cAAc,CAAC,MAAe,EAAE,IAAY;IACxD,QAAQ,MAAM,EAAE;QACZ,KAAK,OAAO,CAAC,aAAa;YACtB,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC;QAC/B;YACI,OAAO,KAAK,CAAC;KACpB;AACL,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function customFunctionsList(func: string): string | false;
@@ -0,0 +1,15 @@
1
+ import { dateFormatScript } from './scripts';
2
+ export function customFunctionsList(func) {
3
+ switch (func) {
4
+ case 'DAY':
5
+ case 'MONTH':
6
+ case 'YEAR':
7
+ case 'HOUR':
8
+ case 'MINUTE':
9
+ case 'SECOND':
10
+ return dateFormatScript;
11
+ default:
12
+ return false;
13
+ }
14
+ }
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/utils/elasticsearch/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE7C,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC5C,QAAQ,IAAI,EAAE;QACV,KAAK,KAAK,CAAC;QACX,KAAK,OAAO,CAAC;QACb,KAAK,MAAM,CAAC;QACZ,KAAK,MAAM,CAAC;QACZ,KAAK,QAAQ,CAAC;QACd,KAAK,QAAQ;YACT,OAAO,gBAAgB,CAAC;QAC5B;YACI,OAAO,KAAK,CAAC;KACpB;AACL,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { DateDifUnitParam } from '../../constants/interfaces';
2
+ export declare const dateFormatScript: string;
3
+ export declare const dayScript: (value: any) => string;
4
+ export declare const monthScript: (value: any) => string;
5
+ export declare const yearScript: (value: any) => string;
6
+ export declare const hourScript: (value: any) => string;
7
+ export declare const minuteScript: (value: any) => string;
8
+ export declare const secondScript: (value: any) => string;
9
+ export declare function dateDif(start: any, end: any, unit: DateDifUnitParam): string;
@@ -0,0 +1,33 @@
1
+ var SCRIPT_NAMES;
2
+ (function (SCRIPT_NAMES) {
3
+ SCRIPT_NAMES["dateFormat"] = "DATE_FORMAT_SCRIPT";
4
+ })(SCRIPT_NAMES || (SCRIPT_NAMES = {}));
5
+ export const dateFormatScript = `
6
+ String ${SCRIPT_NAMES.dateFormat}(def date_value, String format) {
7
+ def isCustomDate = (date_value instanceof JodaCompatibleZonedDateTime || date_value instanceof ZonedDateTime);
8
+ if (date_value instanceof List && !isCustomDate) {
9
+ if (date_value.empty) return null;
10
+ date_value = date_value.value;
11
+ }
12
+ return DateTimeFormatter.ofPattern(format).format(date_value)
13
+ }
14
+ `;
15
+ function dateFormatToInt(value, format) {
16
+ return `Integer.parseInt(${SCRIPT_NAMES.dateFormat}(${value}, '${format}'))`;
17
+ }
18
+ export const dayScript = (value) => dateFormatToInt(value, 'dd');
19
+ export const monthScript = (value) => dateFormatToInt(value, 'MM');
20
+ export const yearScript = (value) => dateFormatToInt(value, 'yyyy');
21
+ export const hourScript = (value) => dateFormatToInt(value, 'HH');
22
+ export const minuteScript = (value) => dateFormatToInt(value, 'mm');
23
+ export const secondScript = (value) => dateFormatToInt(value, 'ss');
24
+ export function dateDif(start, end, unit) {
25
+ const units = {
26
+ Y: 'YEARS',
27
+ M: 'MONTHS',
28
+ D: 'DAYS',
29
+ };
30
+ const currentUnit = units[unit];
31
+ return `ChronoUnit.${currentUnit}.between(${start}, ${end})`;
32
+ }
33
+ //# sourceMappingURL=scripts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts.js","sourceRoot":"","sources":["../../../../src/utils/elasticsearch/scripts.ts"],"names":[],"mappings":"AAEA,IAAK,YAEJ;AAFD,WAAK,YAAY;IACb,iDAAiC,CAAA;AACrC,CAAC,EAFI,YAAY,KAAZ,YAAY,QAEhB;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG;SACvB,YAAY,CAAC,UAAU;;;;;;;;CAQ/B,CAAC;AAEF,SAAS,eAAe,CAAC,KAAU,EAAE,MAAc;IAC/C,OAAO,oBAAoB,YAAY,CAAC,UAAU,IAAI,KAAK,MAAM,MAAM,KAAK,CAAC;AACjF,CAAC;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAU,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAEtE,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAU,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAExE,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAU,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AAEzE,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAU,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAEvE,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAU,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAEzE,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAU,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAEzE,MAAM,UAAU,OAAO,CAAC,KAAU,EAAE,GAAQ,EAAE,IAAsB;IAChE,MAAM,KAAK,GAAG;QACV,CAAC,EAAE,OAAO;QACV,CAAC,EAAE,QAAQ;QACX,CAAC,EAAE,MAAM;KACZ,CAAC;IACF,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;IAChC,OAAO,cAAc,WAAW,YAAY,KAAK,KAAK,GAAG,GAAG,CAAC;AACjE,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Gets the max number of days allowed for a date
3
+ * @param month 0 index month of the year
4
+ * @param year year of a date
5
+ * @returns number with the max number allowed. -1 if month does not exist in array list
6
+ */
7
+ export declare function getMonthMaxDayAllowed(month: number, year: number): number;
@@ -0,0 +1,22 @@
1
+ function isLeapYear(year) {
2
+ return year % 4 === 0 && year % 100 !== 0;
3
+ }
4
+ const MONTH_MAX_DAYS = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
5
+ /**
6
+ * Gets the max number of days allowed for a date
7
+ * @param month 0 index month of the year
8
+ * @param year year of a date
9
+ * @returns number with the max number allowed. -1 if month does not exist in array list
10
+ */
11
+ export function getMonthMaxDayAllowed(month, year) {
12
+ if (month > 11 || month < 0)
13
+ return -1;
14
+ if (month === 1) {
15
+ // case for february
16
+ return isLeapYear(year) ? 29 : MONTH_MAX_DAYS[month];
17
+ }
18
+ else {
19
+ return MONTH_MAX_DAYS[month];
20
+ }
21
+ }
22
+ //# sourceMappingURL=getMonthMaxDayAllowed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getMonthMaxDayAllowed.js","sourceRoot":"","sources":["../../../src/utils/getMonthMaxDayAllowed.ts"],"names":[],"mappings":"AAAA,SAAS,UAAU,CAAC,IAAY;IAC5B,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,cAAc,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AAExE;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAa,EAAE,IAAY;IAC7D,IAAI,KAAK,GAAG,EAAE,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC,CAAC;IACvC,IAAI,KAAK,KAAK,CAAC,EAAE;QACb,oBAAoB;QACpB,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;KACxD;SAAM;QACH,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;KAChC;AACL,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { SyntaxNode } from '@lezer/common';
2
+ export declare function getNodeValue(str: string, node: SyntaxNode): string;
@@ -0,0 +1,9 @@
1
+ export function getNodeValue(str, node) {
2
+ if (!str || !node)
3
+ return '';
4
+ return sliceNodeValue(str, node);
5
+ }
6
+ function sliceNodeValue(str, { from, to }) {
7
+ return str.slice(from, to);
8
+ }
9
+ //# sourceMappingURL=getNodeValue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getNodeValue.js","sourceRoot":"","sources":["../../../src/utils/getNodeValue.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,YAAY,CAAC,GAAW,EAAE,IAAgB;IACtD,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IAC7B,OAAO,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,cAAc,CACnB,GAAW,EACX,EAAE,IAAI,EAAE,EAAE,EAAgC;IAE1C,OAAO,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,8 @@
1
+ export * from './getNodeValue';
2
+ export * from './customFunctions';
3
+ export * from './isNumberParam';
4
+ export * from './isPositiveNumberParam';
5
+ export * from './isStringParam';
6
+ export * from './isDateParam';
7
+ export * from './isValidDate';
8
+ export * from './getMonthMaxDayAllowed';
@@ -0,0 +1,9 @@
1
+ export * from './getNodeValue';
2
+ export * from './customFunctions';
3
+ export * from './isNumberParam';
4
+ export * from './isPositiveNumberParam';
5
+ export * from './isStringParam';
6
+ export * from './isDateParam';
7
+ export * from './isValidDate';
8
+ export * from './getMonthMaxDayAllowed';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,yBAAyB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { ValidatorResponse } from '../constants/interfaces';
2
+ export declare function isDateParam(param: any): ValidatorResponse;
@@ -0,0 +1,10 @@
1
+ import { ERROR_LIST, ERROR_DICTIONARY } from '../constants';
2
+ import { isValidDate } from '.';
3
+ export function isDateParam(param) {
4
+ const dateValue = new Date(param);
5
+ const valid = isValidDate(dateValue);
6
+ if (!valid)
7
+ return Object.assign({ valid }, ERROR_DICTIONARY[ERROR_LIST.missingDate]);
8
+ return { valid };
9
+ }
10
+ //# sourceMappingURL=isDateParam.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isDateParam.js","sourceRoot":"","sources":["../../../src/utils/isDateParam.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAE5D,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,CAAC;AAEhC,MAAM,UAAU,WAAW,CAAC,KAAU;IAClC,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;IACrC,IAAI,CAAC,KAAK;QAAE,uBAAS,KAAK,IAAK,gBAAgB,CAAC,UAAU,CAAC,WAAW,CAAC,EAAG;IAC1E,OAAO,EAAE,KAAK,EAAE,CAAC;AACrB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { ValidatorResponse } from '../constants/interfaces';
2
+ export declare function isNumberParam(param: any): ValidatorResponse;
@@ -0,0 +1,8 @@
1
+ import { ERROR_LIST, ERROR_DICTIONARY } from '../constants';
2
+ export function isNumberParam(param) {
3
+ const valid = typeof param === 'number';
4
+ if (!valid)
5
+ return Object.assign({ valid }, ERROR_DICTIONARY[ERROR_LIST.missingNumber]);
6
+ return { valid };
7
+ }
8
+ //# sourceMappingURL=isNumberParam.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isNumberParam.js","sourceRoot":"","sources":["../../../src/utils/isNumberParam.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAG5D,MAAM,UAAU,aAAa,CAAC,KAAU;IACpC,MAAM,KAAK,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC;IACxC,IAAI,CAAC,KAAK;QAAE,uBAAS,KAAK,IAAK,gBAAgB,CAAC,UAAU,CAAC,aAAa,CAAC,EAAG;IAC5E,OAAO,EAAE,KAAK,EAAE,CAAC;AACrB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { ValidatorResponse } from '../constants/interfaces';
2
+ export declare function isPositiveNumberParam(param: any): ValidatorResponse;
@@ -0,0 +1,8 @@
1
+ import { ERROR_LIST, ERROR_DICTIONARY } from '../constants';
2
+ export function isPositiveNumberParam(param) {
3
+ const valid = param >= 0;
4
+ if (!valid)
5
+ return Object.assign({ valid }, ERROR_DICTIONARY[ERROR_LIST.greaterThanZero]);
6
+ return { valid };
7
+ }
8
+ //# sourceMappingURL=isPositiveNumberParam.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isPositiveNumberParam.js","sourceRoot":"","sources":["../../../src/utils/isPositiveNumberParam.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAG5D,MAAM,UAAU,qBAAqB,CAAC,KAAU;IAC5C,MAAM,KAAK,GAAG,KAAK,IAAI,CAAC,CAAC;IACzB,IAAI,CAAC,KAAK;QACN,uBAAS,KAAK,IAAK,gBAAgB,CAAC,UAAU,CAAC,eAAe,CAAC,EAAG;IACtE,OAAO,EAAE,KAAK,EAAE,CAAC;AACrB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { ValidatorResponse } from '../constants/interfaces';
2
+ export declare function isStringParam(param: any): ValidatorResponse;
@@ -0,0 +1,8 @@
1
+ import { ERROR_LIST, ERROR_DICTIONARY } from '../constants';
2
+ export function isStringParam(param) {
3
+ const valid = typeof param === 'string';
4
+ if (!valid)
5
+ return Object.assign({ valid }, ERROR_DICTIONARY[ERROR_LIST.missingString]);
6
+ return { valid };
7
+ }
8
+ //# sourceMappingURL=isStringParam.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isStringParam.js","sourceRoot":"","sources":["../../../src/utils/isStringParam.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAG5D,MAAM,UAAU,aAAa,CAAC,KAAU;IACpC,MAAM,KAAK,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC;IACxC,IAAI,CAAC,KAAK;QAAE,uBAAS,KAAK,IAAK,gBAAgB,CAAC,UAAU,CAAC,aAAa,CAAC,EAAG;IAC5E,OAAO,EAAE,KAAK,EAAE,CAAC;AACrB,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function isValidDate(d: unknown): boolean;
@@ -0,0 +1,4 @@
1
+ export function isValidDate(d) {
2
+ return !isNaN(d) && d instanceof Date;
3
+ }
4
+ //# sourceMappingURL=isValidDate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isValidDate.js","sourceRoot":"","sources":["../../../src/utils/isValidDate.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,WAAW,CAAC,CAAU;IAClC,OAAO,CAAC,KAAK,CAAC,CAAW,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC;AACpD,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { DateDifUnitParam } from '../../constants/interfaces';
2
+ export declare function dateDif(start: string, end: string, unit: DateDifUnitParam): string;
@@ -0,0 +1,39 @@
1
+ function datePart(value, format) {
2
+ return `DATE_PART('${format}', ${value})`;
3
+ }
4
+ function toDate(value, format = 'MM/DD/YYYY') {
5
+ return `TO_DATE(${value}, '${format}')`;
6
+ }
7
+ function generalDateDif(start, end, unit) {
8
+ const units = {
9
+ Y: 'year',
10
+ M: 'month',
11
+ D: 'day',
12
+ };
13
+ const currentUnit = units[unit];
14
+ return `DATEDIFF('${currentUnit}', ${start}, ${end})`;
15
+ }
16
+ function customDateDifYear(start, end) {
17
+ const month = datePart('month', end);
18
+ const day = datePart('day', end);
19
+ const year = datePart('year', start);
20
+ const parts = [month, day, year].join(`|| '/' ||`);
21
+ const customDate = toDate(parts);
22
+ const dateDifToCompare = generalDateDif(start, customDate, 'D');
23
+ const dateDifYear = generalDateDif(start, end, 'Y');
24
+ const result = `CASE
25
+ WHEN ${dateDifToCompare} >= 0
26
+ THEN ${dateDifYear}
27
+ ELSE ${dateDifYear} - 1
28
+ END`;
29
+ return result;
30
+ }
31
+ export function dateDif(start, end, unit) {
32
+ const units = {
33
+ Y: customDateDifYear,
34
+ M: generalDateDif,
35
+ D: generalDateDif,
36
+ };
37
+ return units[unit](start, end, unit);
38
+ }
39
+ //# sourceMappingURL=scripts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts.js","sourceRoot":"","sources":["../../../../src/utils/sql/scripts.ts"],"names":[],"mappings":"AAEA,SAAS,QAAQ,CAAC,KAAa,EAAE,MAAc;IAC3C,OAAO,cAAc,MAAM,MAAM,KAAK,GAAG,CAAC;AAC9C,CAAC;AAED,SAAS,MAAM,CAAC,KAAa,EAAE,MAAM,GAAG,YAAY;IAChD,OAAO,WAAW,KAAK,MAAM,MAAM,IAAI,CAAC;AAC5C,CAAC;AAED,SAAS,cAAc,CAAC,KAAa,EAAE,GAAW,EAAE,IAAsB;IACtE,MAAM,KAAK,GAAG;QACV,CAAC,EAAE,MAAM;QACT,CAAC,EAAE,OAAO;QACV,CAAC,EAAE,KAAK;KACX,CAAC;IACF,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;IAChC,OAAO,aAAa,WAAW,MAAM,KAAK,KAAK,GAAG,GAAG,CAAC;AAC1D,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAa,EAAE,GAAW;IACjD,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACrC,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACjC,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACnD,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACjC,MAAM,gBAAgB,GAAG,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;IAChE,MAAM,WAAW,GAAG,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG;eACJ,gBAAgB;mBACZ,WAAW;eACf,WAAW;QAClB,CAAC;IACL,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,KAAa,EAAE,GAAW,EAAE,IAAsB;IACtE,MAAM,KAAK,GAAG;QACV,CAAC,EAAE,iBAAiB;QACpB,CAAC,EAAE,cAAc;QACjB,CAAC,EAAE,cAAc;KACpB,CAAC;IACF,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;AACzC,CAAC"}
@@ -1,29 +0,0 @@
1
- import { AST_TYPES } from '../../src/constants';
2
- import { calculateAST, FormulaLang } from '../../src';
3
- import { BinaryExpressionAST } from '../../src/constants/interfaces';
4
-
5
- describe('Parser tests suite', () => {
6
- test('Should parse a single node', () => {
7
- const program = '1 + 2';
8
- const parser = FormulaLang.parser;
9
- const { topNode } = parser.parse(program);
10
- const ast = calculateAST(program, topNode);
11
- expect(ast?.body).not.toBeUndefined();
12
-
13
- const body = ast?.body as BinaryExpressionAST;
14
- expect(body.operator).toBe('+');
15
- expect(body.type).toBe(AST_TYPES.binaryExpression);
16
- });
17
-
18
- test('Should fail a logic operation', () => {
19
- const program = '1 <';
20
- const parser = FormulaLang.parser;
21
- const { topNode } = parser.parse(program);
22
- const ast = calculateAST(program, topNode);
23
- expect(ast?.body).not.toBeUndefined();
24
-
25
- const body = ast?.body as BinaryExpressionAST;
26
- expect(body.operator).toBe('<');
27
- expect(body.type).toBe(AST_TYPES.binaryExpression);
28
- });
29
- });