@qrvey/formula-lang 0.1.3 → 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 (220) hide show
  1. package/CHANGELOG.md +27 -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/dist/constants/index.d.ts +12 -2
  11. package/dist/constants/index.js +21 -1
  12. package/dist/constants/index.js.map +1 -1
  13. package/dist/constants/interfaces.d.ts +8 -2
  14. package/dist/errors/definitions.d.ts +20 -5
  15. package/dist/errors/definitions.js +28 -5
  16. package/dist/errors/definitions.js.map +1 -1
  17. package/dist/errors/engineErrors.d.ts +2 -0
  18. package/dist/errors/engineErrors.js +21 -0
  19. package/dist/errors/engineErrors.js.map +1 -0
  20. package/dist/errors/index.d.ts +2 -5
  21. package/dist/errors/index.js +4 -38
  22. package/dist/errors/index.js.map +1 -1
  23. package/dist/functions/abs.d.ts +5 -0
  24. package/dist/functions/abs.js +35 -0
  25. package/dist/functions/abs.js.map +1 -0
  26. package/dist/functions/datedif.d.ts +5 -0
  27. package/dist/functions/datedif.js +61 -0
  28. package/dist/functions/datedif.js.map +1 -0
  29. package/dist/functions/day.d.ts +5 -0
  30. package/dist/functions/day.js +36 -0
  31. package/dist/functions/day.js.map +1 -0
  32. package/dist/functions/hour.d.ts +5 -0
  33. package/dist/functions/hour.js +36 -0
  34. package/dist/functions/hour.js.map +1 -0
  35. package/dist/functions/if.d.ts +5 -0
  36. package/dist/functions/if.js +49 -0
  37. package/dist/functions/if.js.map +1 -0
  38. package/dist/functions/ifs.d.ts +5 -0
  39. package/dist/functions/ifs.js +71 -0
  40. package/dist/functions/ifs.js.map +1 -0
  41. package/dist/functions/index.js +20 -0
  42. package/dist/functions/index.js.map +1 -1
  43. package/dist/functions/mid.d.ts +3 -0
  44. package/dist/functions/mid.js +15 -12
  45. package/dist/functions/mid.js.map +1 -1
  46. package/dist/functions/minute.d.ts +5 -0
  47. package/dist/functions/minute.js +36 -0
  48. package/dist/functions/minute.js.map +1 -0
  49. package/dist/functions/month.d.ts +5 -0
  50. package/dist/functions/month.js +36 -0
  51. package/dist/functions/month.js.map +1 -0
  52. package/dist/functions/second.d.ts +5 -0
  53. package/dist/functions/second.js +36 -0
  54. package/dist/functions/second.js.map +1 -0
  55. package/dist/functions/year.d.ts +5 -0
  56. package/dist/functions/year.js +36 -0
  57. package/dist/functions/year.js.map +1 -0
  58. package/dist/grammar/generated/qformula.lang.js +10 -10
  59. package/dist/grammar/generated/qformula.lang.js.map +1 -1
  60. package/dist/parser/json-parser.js +42 -6
  61. package/dist/parser/json-parser.js.map +1 -1
  62. package/dist/transpiler/index.d.ts +9 -7
  63. package/dist/transpiler/index.js +38 -27
  64. package/dist/transpiler/index.js.map +1 -1
  65. package/dist/transpiler/validateFuncStructure.d.ts +2 -0
  66. package/dist/transpiler/validateFuncStructure.js +37 -0
  67. package/dist/transpiler/validateFuncStructure.js.map +1 -0
  68. package/dist/utils/customFunctions.d.ts +3 -0
  69. package/dist/utils/customFunctions.js +21 -0
  70. package/dist/utils/customFunctions.js.map +1 -0
  71. package/dist/utils/elasticsearch/index.d.ts +2 -0
  72. package/dist/utils/elasticsearch/index.js +16 -0
  73. package/dist/utils/elasticsearch/index.js.map +1 -0
  74. package/dist/utils/elasticsearch/scripts.d.ts +10 -0
  75. package/dist/utils/elasticsearch/scripts.js +36 -0
  76. package/dist/utils/elasticsearch/scripts.js.map +1 -0
  77. package/dist/utils/getMonthMaxDayAllowed.d.ts +7 -0
  78. package/dist/utils/getMonthMaxDayAllowed.js +22 -0
  79. package/dist/utils/getMonthMaxDayAllowed.js.map +1 -0
  80. package/dist/utils/getNodeValue.d.ts +2 -0
  81. package/dist/utils/getNodeValue.js +9 -0
  82. package/dist/utils/getNodeValue.js.map +1 -0
  83. package/dist/utils/index.d.ts +9 -2
  84. package/dist/utils/index.js +9 -8
  85. package/dist/utils/index.js.map +1 -1
  86. package/dist/utils/isDateParam.d.ts +2 -0
  87. package/dist/utils/isDateParam.js +8 -0
  88. package/dist/utils/isDateParam.js.map +1 -0
  89. package/dist/utils/isNumberParam.d.ts +2 -0
  90. package/dist/utils/isNumberParam.js +8 -0
  91. package/dist/utils/isNumberParam.js.map +1 -0
  92. package/dist/utils/isPositiveNumberParam.d.ts +2 -0
  93. package/dist/utils/isPositiveNumberParam.js +8 -0
  94. package/dist/utils/isPositiveNumberParam.js.map +1 -0
  95. package/dist/utils/isStringParam.d.ts +2 -0
  96. package/dist/utils/isStringParam.js +8 -0
  97. package/dist/utils/isStringParam.js.map +1 -0
  98. package/dist/utils/isValidDate.d.ts +1 -0
  99. package/dist/utils/isValidDate.js +4 -0
  100. package/dist/utils/isValidDate.js.map +1 -0
  101. package/dist/utils/sql/index.d.ts +1 -0
  102. package/dist/utils/sql/index.js +2 -0
  103. package/dist/utils/sql/index.js.map +1 -0
  104. package/dist/utils/sql/scripts.d.ts +3 -0
  105. package/dist/utils/sql/scripts.js +39 -0
  106. package/dist/utils/sql/scripts.js.map +1 -0
  107. package/package.json +1 -1
  108. package/pkg/dist/constants/index.d.ts +42 -0
  109. package/pkg/dist/constants/index.js +86 -0
  110. package/pkg/dist/constants/index.js.map +1 -0
  111. package/pkg/dist/constants/interfaces.d.ts +62 -0
  112. package/pkg/dist/constants/interfaces.js +2 -0
  113. package/pkg/dist/constants/interfaces.js.map +1 -0
  114. package/pkg/dist/errors/definitions.d.ts +26 -0
  115. package/pkg/dist/errors/definitions.js +42 -0
  116. package/pkg/dist/errors/definitions.js.map +1 -0
  117. package/pkg/dist/errors/elasticsearch.d.ts +24 -0
  118. package/pkg/dist/errors/elasticsearch.js +27 -0
  119. package/pkg/dist/errors/elasticsearch.js.map +1 -0
  120. package/pkg/dist/errors/engineErrors.d.ts +2 -0
  121. package/pkg/dist/errors/engineErrors.js +21 -0
  122. package/pkg/dist/errors/engineErrors.js.map +1 -0
  123. package/pkg/dist/errors/index.d.ts +2 -0
  124. package/pkg/dist/errors/index.js +5 -0
  125. package/pkg/dist/errors/index.js.map +1 -0
  126. package/pkg/dist/errors/snowflake.d.ts +15 -0
  127. package/pkg/dist/errors/snowflake.js +17 -0
  128. package/pkg/dist/errors/snowflake.js.map +1 -0
  129. package/pkg/dist/functions/abs.d.ts +5 -0
  130. package/pkg/dist/functions/abs.js +35 -0
  131. package/pkg/dist/functions/abs.js.map +1 -0
  132. package/pkg/dist/functions/datedif.d.ts +5 -0
  133. package/pkg/dist/functions/datedif.js +58 -0
  134. package/pkg/dist/functions/datedif.js.map +1 -0
  135. package/pkg/dist/functions/day.d.ts +5 -0
  136. package/pkg/dist/functions/day.js +36 -0
  137. package/pkg/dist/functions/day.js.map +1 -0
  138. package/pkg/dist/functions/hour.d.ts +5 -0
  139. package/pkg/dist/functions/hour.js +36 -0
  140. package/pkg/dist/functions/hour.js.map +1 -0
  141. package/pkg/dist/functions/if.d.ts +5 -0
  142. package/pkg/dist/functions/if.js +49 -0
  143. package/pkg/dist/functions/if.js.map +1 -0
  144. package/pkg/dist/functions/ifs.d.ts +5 -0
  145. package/pkg/dist/functions/ifs.js +71 -0
  146. package/pkg/dist/functions/ifs.js.map +1 -0
  147. package/pkg/dist/functions/index.d.ts +4 -0
  148. package/pkg/dist/functions/index.js +29 -0
  149. package/pkg/dist/functions/index.js.map +1 -0
  150. package/pkg/dist/functions/mid.d.ts +5 -0
  151. package/pkg/dist/functions/mid.js +51 -0
  152. package/pkg/dist/functions/mid.js.map +1 -0
  153. package/pkg/dist/functions/minute.d.ts +5 -0
  154. package/pkg/dist/functions/minute.js +36 -0
  155. package/pkg/dist/functions/minute.js.map +1 -0
  156. package/pkg/dist/functions/month.d.ts +5 -0
  157. package/pkg/dist/functions/month.js +36 -0
  158. package/pkg/dist/functions/month.js.map +1 -0
  159. package/pkg/dist/functions/second.d.ts +5 -0
  160. package/pkg/dist/functions/second.js +36 -0
  161. package/pkg/dist/functions/second.js.map +1 -0
  162. package/pkg/dist/functions/year.d.ts +5 -0
  163. package/pkg/dist/functions/year.js +36 -0
  164. package/pkg/dist/functions/year.js.map +1 -0
  165. package/pkg/dist/grammar/generated/qformula.lang.js +43 -0
  166. package/pkg/dist/grammar/generated/qformula.lang.js.map +1 -0
  167. package/pkg/dist/grammar/qformula.grammar.d.ts +1 -0
  168. package/pkg/dist/grammar/qformula.grammar.js +2 -0
  169. package/pkg/dist/grammar/qformula.grammar.js.map +1 -0
  170. package/pkg/dist/index.js +29 -0
  171. package/pkg/dist/index.js.map +1 -0
  172. package/pkg/dist/parser/json-parser.js +139 -0
  173. package/pkg/dist/parser/json-parser.js.map +1 -0
  174. package/pkg/dist/transpiler/index.d.ts +17 -0
  175. package/pkg/dist/transpiler/index.js +82 -0
  176. package/pkg/dist/transpiler/index.js.map +1 -0
  177. package/pkg/dist/transpiler/validateFuncStructure.d.ts +2 -0
  178. package/pkg/dist/transpiler/validateFuncStructure.js +35 -0
  179. package/pkg/dist/transpiler/validateFuncStructure.js.map +1 -0
  180. package/pkg/dist/utils/customFunctions.d.ts +2 -0
  181. package/pkg/dist/utils/customFunctions.js +11 -0
  182. package/pkg/dist/utils/customFunctions.js.map +1 -0
  183. package/pkg/dist/utils/elasticsearch/index.d.ts +1 -0
  184. package/pkg/dist/utils/elasticsearch/index.js +15 -0
  185. package/pkg/dist/utils/elasticsearch/index.js.map +1 -0
  186. package/pkg/dist/utils/elasticsearch/scripts.d.ts +9 -0
  187. package/pkg/dist/utils/elasticsearch/scripts.js +33 -0
  188. package/pkg/dist/utils/elasticsearch/scripts.js.map +1 -0
  189. package/pkg/dist/utils/getMonthMaxDayAllowed.d.ts +7 -0
  190. package/pkg/dist/utils/getMonthMaxDayAllowed.js +22 -0
  191. package/pkg/dist/utils/getMonthMaxDayAllowed.js.map +1 -0
  192. package/pkg/dist/utils/getNodeValue.d.ts +2 -0
  193. package/pkg/dist/utils/getNodeValue.js +9 -0
  194. package/pkg/dist/utils/getNodeValue.js.map +1 -0
  195. package/pkg/dist/utils/index.d.ts +8 -0
  196. package/pkg/dist/utils/index.js +9 -0
  197. package/pkg/dist/utils/index.js.map +1 -0
  198. package/pkg/dist/utils/isDateParam.d.ts +2 -0
  199. package/pkg/dist/utils/isDateParam.js +10 -0
  200. package/pkg/dist/utils/isDateParam.js.map +1 -0
  201. package/pkg/dist/utils/isNumberParam.d.ts +2 -0
  202. package/pkg/dist/utils/isNumberParam.js +8 -0
  203. package/pkg/dist/utils/isNumberParam.js.map +1 -0
  204. package/pkg/dist/utils/isPositiveNumberParam.d.ts +2 -0
  205. package/pkg/dist/utils/isPositiveNumberParam.js +8 -0
  206. package/pkg/dist/utils/isPositiveNumberParam.js.map +1 -0
  207. package/pkg/dist/utils/isStringParam.d.ts +2 -0
  208. package/pkg/dist/utils/isStringParam.js +8 -0
  209. package/pkg/dist/utils/isStringParam.js.map +1 -0
  210. package/pkg/dist/utils/isValidDate.d.ts +1 -0
  211. package/pkg/dist/utils/isValidDate.js +4 -0
  212. package/pkg/dist/utils/isValidDate.js.map +1 -0
  213. package/pkg/dist/utils/sql/scripts.d.ts +2 -0
  214. package/pkg/dist/utils/sql/scripts.js +39 -0
  215. package/pkg/dist/utils/sql/scripts.js.map +1 -0
  216. package/__tests__/src/parser.test.ts +0 -29
  217. package/dist/models/ast.models.d.ts +0 -29
  218. package/dist/models/ast.models.js +0 -1
  219. package/dist/utils/utils.d.ts +0 -4
  220. package/dist/utils/utils.js +0 -3
@@ -0,0 +1,37 @@
1
+ import { InvalidArgumentError, MissingArgumentError, TooManyArgumentsError, } from '../errors';
2
+ export function validateFuncStructure(node, definition, args) {
3
+ var _a;
4
+ let parameterIndex = 0;
5
+ let argumentIndex = 0;
6
+ const parameters = definition.parameters || [];
7
+ const incrementCounter = () => {
8
+ parameterIndex += 1;
9
+ argumentIndex += 1;
10
+ };
11
+ while (parameterIndex < parameters.length) {
12
+ const parameter = parameters[parameterIndex];
13
+ const { value, dataType } = (_a = args[argumentIndex]) !== null && _a !== void 0 ? _a : {};
14
+ if (!value && parameter.optional) {
15
+ incrementCounter();
16
+ continue;
17
+ }
18
+ if (!value && !parameter.optional)
19
+ throw new MissingArgumentError(node);
20
+ parameter.validator.forEach((validatorFunction) => {
21
+ const validator = validatorFunction(value, dataType);
22
+ if (!validator.valid)
23
+ throw new InvalidArgumentError(node, validator);
24
+ });
25
+ incrementCounter();
26
+ const hasMoreArguments = parameterIndex === parameters.length &&
27
+ argumentIndex !== args.length;
28
+ const isRecursive = typeof (definition === null || definition === void 0 ? void 0 : definition.recursiveStartIn) === 'number';
29
+ if (hasMoreArguments && isRecursive) {
30
+ parameterIndex = definition.recursiveStartIn;
31
+ }
32
+ }
33
+ if (argumentIndex < args.length)
34
+ throw new TooManyArgumentsError(node);
35
+ return true;
36
+ }
37
+ //# sourceMappingURL=validateFuncStructure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateFuncStructure.js","sourceRoot":"","sources":["../../src/transpiler/validateFuncStructure.ts"],"names":[],"mappings":"AAKA,OAAO,EACH,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,GACxB,MAAM,WAAW,CAAC;AAEnB,MAAM,UAAU,qBAAqB,CACjC,IAAqB,EACrB,UAA8B,EAC9B,IAA8B;;IAE9B,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,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAA,IAAI,CAAC,aAAa,CAAC,mCAAI,EAAE,CAAC;QAEtD,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,EAAE,QAAQ,CAAC,CAAC;YACrD,IAAI,CAAC,SAAS,CAAC,KAAK;gBAChB,MAAM,IAAI,oBAAoB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,gBAAgB,EAAE,CAAC;QACnB,MAAM,gBAAgB,GAClB,cAAc,KAAK,UAAU,CAAC,MAAM;YACpC,aAAa,KAAK,IAAI,CAAC,MAAM,CAAC;QAClC,MAAM,WAAW,GAAG,OAAO,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,gBAAgB,CAAA,KAAK,QAAQ,CAAC;QACrE,IAAI,gBAAgB,IAAI,WAAW,EAAE;YACjC,cAAc,GAAG,UAAU,CAAC,gBAA0B,CAAC;SAC1D;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,3 @@
1
+ import { ENGINES } from '../constants';
2
+ export declare function customFunction(engine: ENGINES, func: string): string | false;
3
+ export declare function customDateCast(engine: ENGINES): Function;
@@ -0,0 +1,21 @@
1
+ import { ENGINES } from '../constants';
2
+ import { customFunctionsList as elasticsearch, toDate as toDateES, } from './elasticsearch';
3
+ import { toDate as toDateSQL } from './sql';
4
+ export function customFunction(engine, func) {
5
+ switch (engine) {
6
+ case ENGINES.ELASTICSEARCH:
7
+ return elasticsearch(func);
8
+ default:
9
+ return false;
10
+ }
11
+ }
12
+ export function customDateCast(engine) {
13
+ switch (engine) {
14
+ case ENGINES.ELASTICSEARCH:
15
+ return toDateES;
16
+ case ENGINES.REDSHIFT:
17
+ case ENGINES.SNOWFLAKE:
18
+ return toDateSQL;
19
+ }
20
+ }
21
+ //# 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,EACH,mBAAmB,IAAI,aAAa,EACpC,MAAM,IAAI,QAAQ,GACrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,MAAM,IAAI,SAAS,EAAE,MAAM,OAAO,CAAC;AAE5C,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;AAED,MAAM,UAAU,cAAc,CAAC,MAAe;IAC1C,QAAQ,MAAM,EAAE;QACZ,KAAK,OAAO,CAAC,aAAa;YACtB,OAAO,QAAQ,CAAC;QACpB,KAAK,OAAO,CAAC,QAAQ,CAAC;QACtB,KAAK,OAAO,CAAC,SAAS;YAClB,OAAO,SAAS,CAAC;KACxB;AACL,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { toDate } from './scripts';
2
+ export declare function customFunctionsList(func: string): string | false;
@@ -0,0 +1,16 @@
1
+ import { dateFormatScript } from './scripts';
2
+ export { toDate } from './scripts';
3
+ export function customFunctionsList(func) {
4
+ switch (func) {
5
+ case 'DAY':
6
+ case 'MONTH':
7
+ case 'YEAR':
8
+ case 'HOUR':
9
+ case 'MINUTE':
10
+ case 'SECOND':
11
+ return dateFormatScript;
12
+ default:
13
+ return false;
14
+ }
15
+ }
16
+ //# 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;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,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,10 @@
1
+ import { DateDifUnitParam } from '../../constants/interfaces';
2
+ export declare function toDate(value: string): string;
3
+ export declare const dateFormatScript: string;
4
+ export declare const dayScript: (value: any) => string;
5
+ export declare const monthScript: (value: any) => string;
6
+ export declare const yearScript: (value: any) => string;
7
+ export declare const hourScript: (value: any) => string;
8
+ export declare const minuteScript: (value: any) => string;
9
+ export declare const secondScript: (value: any) => string;
10
+ export declare function dateDif(start: any, end: any, unit: DateDifUnitParam): string;
@@ -0,0 +1,36 @@
1
+ var SCRIPT_NAMES;
2
+ (function (SCRIPT_NAMES) {
3
+ SCRIPT_NAMES["dateFormat"] = "DATE_FORMAT_SCRIPT";
4
+ })(SCRIPT_NAMES || (SCRIPT_NAMES = {}));
5
+ export function toDate(value) {
6
+ return `ZonedDateTime.parse("${value}")`;
7
+ }
8
+ export const dateFormatScript = `
9
+ String ${SCRIPT_NAMES.dateFormat}(def date_value, String format) {
10
+ def isCustomDate = (date_value instanceof JodaCompatibleZonedDateTime || date_value instanceof ZonedDateTime);
11
+ if (date_value instanceof List && !isCustomDate) {
12
+ if (date_value.empty) return null;
13
+ date_value = date_value.value;
14
+ }
15
+ return DateTimeFormatter.ofPattern(format).format(date_value)
16
+ }
17
+ `;
18
+ function dateFormatToInt(value, format) {
19
+ return `Integer.parseInt(${SCRIPT_NAMES.dateFormat}(${value}, '${format}'))`;
20
+ }
21
+ export const dayScript = (value) => dateFormatToInt(value, 'dd');
22
+ export const monthScript = (value) => dateFormatToInt(value, 'MM');
23
+ export const yearScript = (value) => dateFormatToInt(value, 'yyyy');
24
+ export const hourScript = (value) => dateFormatToInt(value, 'HH');
25
+ export const minuteScript = (value) => dateFormatToInt(value, 'mm');
26
+ export const secondScript = (value) => dateFormatToInt(value, 'ss');
27
+ export function dateDif(start, end, unit) {
28
+ const units = {
29
+ Y: 'YEARS',
30
+ M: 'MONTHS',
31
+ D: 'DAYS',
32
+ };
33
+ const currentUnit = units[unit];
34
+ return `ChronoUnit.${currentUnit}.between(${start}, ${end})`;
35
+ }
36
+ //# 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,UAAU,MAAM,CAAC,KAAa;IAChC,OAAO,wBAAwB,KAAK,IAAI,CAAC;AAC7C,CAAC;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"}
@@ -1,2 +1,9 @@
1
- import { SyntaxNode } from '@lezer/common';
2
- export declare function getNodeValue(str: string, node: SyntaxNode): string;
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
+ export declare const removeQuotes: (str: string) => string;
@@ -1,9 +1,10 @@
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
- }
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
+ export const removeQuotes = (str) => str.replace(/'/g, '');
9
10
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.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"}
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;AAExC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { ValidatorResponse } from '../constants/interfaces';
2
+ export declare function isDateParam(_param: any, dataType: string | undefined): ValidatorResponse;
@@ -0,0 +1,8 @@
1
+ import { ERROR_LIST, ERROR_DICTIONARY } from '../constants';
2
+ export function isDateParam(_param, dataType) {
3
+ const valid = dataType === 'date';
4
+ if (!valid)
5
+ return Object.assign({ valid }, ERROR_DICTIONARY[ERROR_LIST.missingDate]);
6
+ return { valid };
7
+ }
8
+ //# 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;AAG5D,MAAM,UAAU,WAAW,CACvB,MAAW,EACX,QAA4B;IAE5B,MAAM,KAAK,GAAG,QAAQ,KAAK,MAAM,CAAC;IAClC,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 @@
1
+ export { toDate } from './scripts';
@@ -0,0 +1,2 @@
1
+ export { toDate } from './scripts';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/sql/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { DateDifUnitParam } from '../../constants/interfaces';
2
+ export declare function toDate(value: string): string;
3
+ 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
+ export function toDate(value) {
5
+ return `CAST('${value}' AS TIMESTAMPTZ)`;
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 = [year, month, day].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,MAAM,UAAU,MAAM,CAAC,KAAa;IAChC,OAAO,SAAS,KAAK,mBAAmB,CAAC;AAC7C,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,IAAI,EAAE,KAAK,EAAE,GAAG,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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qrvey/formula-lang",
3
- "version": "0.1.3",
3
+ "version": "0.2.0",
4
4
  "description": "QFormula support for qrvey projects",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -0,0 +1,42 @@
1
+ export declare enum ENGINES {
2
+ ELASTICSEARCH = "elasticsearch",
3
+ SNOWFLAKE = "snowflake",
4
+ REDSHIFT = "redshift"
5
+ }
6
+ export declare enum AST_TYPES {
7
+ program = "Program",
8
+ binaryExpression = "BinaryExpression",
9
+ unaryExpression = "UnaryExpression",
10
+ functionCall = "FunctionCall",
11
+ variable = "Variable",
12
+ literal = "Literal"
13
+ }
14
+ export declare enum ERROR_LIST {
15
+ arguments = "arguments",
16
+ nulls = "nulls",
17
+ floatingPoint = "floatingPoint",
18
+ missingString = "missingString",
19
+ missingNumber = "missingNumber",
20
+ missingDate = "missingDate",
21
+ greaterThanZero = "greaterThanZero",
22
+ missingArg = "missingArg",
23
+ unknownFunction = "unknownFunction",
24
+ unknown = "unknown",
25
+ customDateDifParams = "customDateDifParams",
26
+ tooManyArguments = "tooManyArguments"
27
+ }
28
+ type iErrorsType = {
29
+ [key in ERROR_LIST]: IErrorDictionary;
30
+ };
31
+ interface IErrorDictionary {
32
+ message: string;
33
+ code: string;
34
+ }
35
+ export declare const ERROR_DICTIONARY: iErrorsType;
36
+ export type CustomEngineOperators = {
37
+ [key in ENGINES]?: {
38
+ [T: string]: string;
39
+ };
40
+ };
41
+ export declare const CustomOperators: CustomEngineOperators;
42
+ export {};
@@ -0,0 +1,86 @@
1
+ export var ENGINES;
2
+ (function (ENGINES) {
3
+ ENGINES["ELASTICSEARCH"] = "elasticsearch";
4
+ ENGINES["SNOWFLAKE"] = "snowflake";
5
+ ENGINES["REDSHIFT"] = "redshift";
6
+ })(ENGINES || (ENGINES = {}));
7
+ export var AST_TYPES;
8
+ (function (AST_TYPES) {
9
+ AST_TYPES["program"] = "Program";
10
+ AST_TYPES["binaryExpression"] = "BinaryExpression";
11
+ AST_TYPES["unaryExpression"] = "UnaryExpression";
12
+ AST_TYPES["functionCall"] = "FunctionCall";
13
+ AST_TYPES["variable"] = "Variable";
14
+ AST_TYPES["literal"] = "Literal";
15
+ })(AST_TYPES || (AST_TYPES = {}));
16
+ export var ERROR_LIST;
17
+ (function (ERROR_LIST) {
18
+ ERROR_LIST["arguments"] = "arguments";
19
+ ERROR_LIST["nulls"] = "nulls";
20
+ ERROR_LIST["floatingPoint"] = "floatingPoint";
21
+ ERROR_LIST["missingString"] = "missingString";
22
+ ERROR_LIST["missingNumber"] = "missingNumber";
23
+ ERROR_LIST["missingDate"] = "missingDate";
24
+ ERROR_LIST["greaterThanZero"] = "greaterThanZero";
25
+ ERROR_LIST["missingArg"] = "missingArg";
26
+ ERROR_LIST["unknownFunction"] = "unknownFunction";
27
+ ERROR_LIST["unknown"] = "unknown";
28
+ ERROR_LIST["customDateDifParams"] = "customDateDifParams";
29
+ ERROR_LIST["tooManyArguments"] = "tooManyArguments";
30
+ })(ERROR_LIST || (ERROR_LIST = {}));
31
+ export const ERROR_DICTIONARY = {
32
+ [ERROR_LIST.arguments]: {
33
+ message: 'Ilegal number of arguments for function',
34
+ code: 'NUMBER_ARGS',
35
+ },
36
+ [ERROR_LIST.nulls]: {
37
+ message: 'Can not apply function with null values',
38
+ code: 'NULL_FOUNDS',
39
+ },
40
+ [ERROR_LIST.floatingPoint]: {
41
+ message: 'Invalid floating point operation to integer',
42
+ code: 'FLOATING_POINT',
43
+ },
44
+ [ERROR_LIST.missingString]: {
45
+ message: 'Element has to be a String',
46
+ code: 'MISSING_STRING',
47
+ },
48
+ [ERROR_LIST.missingNumber]: {
49
+ message: 'Element has to be a Number',
50
+ code: 'MISSING_NUMBER',
51
+ },
52
+ [ERROR_LIST.missingDate]: {
53
+ message: 'Element has to be a Date',
54
+ code: 'MISSING_DATE',
55
+ },
56
+ [ERROR_LIST.greaterThanZero]: {
57
+ message: 'Element has to be greater than 0',
58
+ code: 'GREATER_THAN_ZERO',
59
+ },
60
+ [ERROR_LIST.missingArg]: {
61
+ message: 'Missing arguments',
62
+ code: 'MISSING_ARG',
63
+ },
64
+ [ERROR_LIST.unknownFunction]: {
65
+ message: 'Unknown function',
66
+ code: 'UNKNOWN_FUNCTION',
67
+ },
68
+ [ERROR_LIST.unknown]: {
69
+ message: 'Unknown error',
70
+ code: 'UNKNOWN',
71
+ },
72
+ [ERROR_LIST.tooManyArguments]: {
73
+ message: 'Too many arguments',
74
+ code: 'TOO_MANY_ARGUMENTS',
75
+ },
76
+ [ERROR_LIST.customDateDifParams]: {
77
+ message: 'Unit param have to be equal to: "Y", "M", "D"',
78
+ code: 'DATE_DIF_UNIT_PARAM',
79
+ },
80
+ };
81
+ export const CustomOperators = {
82
+ [ENGINES.ELASTICSEARCH]: {
83
+ '=': '==',
84
+ },
85
+ };
86
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/constants/index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,OAIX;AAJD,WAAY,OAAO;IACf,0CAA+B,CAAA;IAC/B,kCAAuB,CAAA;IACvB,gCAAqB,CAAA;AACzB,CAAC,EAJW,OAAO,KAAP,OAAO,QAIlB;AAED,MAAM,CAAN,IAAY,SAOX;AAPD,WAAY,SAAS;IACjB,gCAAmB,CAAA;IACnB,kDAAqC,CAAA;IACrC,gDAAmC,CAAA;IACnC,0CAA6B,CAAA;IAC7B,kCAAqB,CAAA;IACrB,gCAAmB,CAAA;AACvB,CAAC,EAPW,SAAS,KAAT,SAAS,QAOpB;AAED,MAAM,CAAN,IAAY,UAaX;AAbD,WAAY,UAAU;IAClB,qCAAuB,CAAA;IACvB,6BAAe,CAAA;IACf,6CAA+B,CAAA;IAC/B,6CAA+B,CAAA;IAC/B,6CAA+B,CAAA;IAC/B,yCAA2B,CAAA;IAC3B,iDAAmC,CAAA;IACnC,uCAAyB,CAAA;IACzB,iDAAmC,CAAA;IACnC,iCAAmB,CAAA;IACnB,yDAA2C,CAAA;IAC3C,mDAAqC,CAAA;AACzC,CAAC,EAbW,UAAU,KAAV,UAAU,QAarB;AAWD,MAAM,CAAC,MAAM,gBAAgB,GAAgB;IACzC,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;QACpB,OAAO,EAAE,yCAAyC;QAClD,IAAI,EAAE,aAAa;KACtB;IACD,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;QAChB,OAAO,EAAE,yCAAyC;QAClD,IAAI,EAAE,aAAa;KACtB;IACD,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE;QACxB,OAAO,EAAE,6CAA6C;QACtD,IAAI,EAAE,gBAAgB;KACzB;IACD,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE;QACxB,OAAO,EAAE,4BAA4B;QACrC,IAAI,EAAE,gBAAgB;KACzB;IACD,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE;QACxB,OAAO,EAAE,4BAA4B;QACrC,IAAI,EAAE,gBAAgB;KACzB;IACD,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE;QACtB,OAAO,EAAE,0BAA0B;QACnC,IAAI,EAAE,cAAc;KACvB;IACD,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE;QAC1B,OAAO,EAAE,kCAAkC;QAC3C,IAAI,EAAE,mBAAmB;KAC5B;IACD,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;QACrB,OAAO,EAAE,mBAAmB;QAC5B,IAAI,EAAE,aAAa;KACtB;IACD,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE;QAC1B,OAAO,EAAE,kBAAkB;QAC3B,IAAI,EAAE,kBAAkB;KAC3B;IACD,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;QAClB,OAAO,EAAE,eAAe;QACxB,IAAI,EAAE,SAAS;KAClB;IACD,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE;QAC3B,OAAO,EAAE,oBAAoB;QAC7B,IAAI,EAAE,oBAAoB;KAC7B;IACD,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE;QAC9B,OAAO,EAAE,+CAA+C;QACxD,IAAI,EAAE,qBAAqB;KAC9B;CACJ,CAAC;AAMF,MAAM,CAAC,MAAM,eAAe,GAA0B;IAClD,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;QACrB,GAAG,EAAE,IAAI;KACZ;CACJ,CAAC"}
@@ -0,0 +1,62 @@
1
+ import { ENGINES, AST_TYPES } from '.';
2
+ interface FunctionElementDefinition {
3
+ identifier: string;
4
+ name: string;
5
+ }
6
+ export interface FunctionDefinition extends FunctionElementDefinition {
7
+ recursiveStartIn?: number;
8
+ transpiler: TranspilerEnginesFunction;
9
+ parameters?: Array<FunctionParameters>;
10
+ }
11
+ type TranspilerEnginesFunction = {
12
+ [key in ENGINES]: Function;
13
+ };
14
+ interface FunctionParameters extends FunctionElementDefinition {
15
+ type: string;
16
+ optional: boolean;
17
+ validator: Array<ValidatorFunctionParameter>;
18
+ }
19
+ interface ValidatorFunctionParameter {
20
+ (args: any): ValidatorResponse;
21
+ }
22
+ export interface ValidatorResponse {
23
+ valid: boolean;
24
+ code?: string;
25
+ message?: string;
26
+ }
27
+ export interface TranspilationResponse {
28
+ valid: boolean;
29
+ expression?: string;
30
+ error?: any;
31
+ }
32
+ export interface FunctionList {
33
+ [identifier: string]: FunctionDefinition;
34
+ }
35
+ export interface CommonAST {
36
+ type: AST_TYPES;
37
+ }
38
+ export interface ProgramAST extends CommonAST {
39
+ exp: string;
40
+ lang: string;
41
+ version: string;
42
+ body?: CommonAST;
43
+ }
44
+ export interface UnaryExpressionAST extends CommonAST {
45
+ operator: string;
46
+ right: CommonAST;
47
+ }
48
+ export interface BinaryExpressionAST extends UnaryExpressionAST {
49
+ left: CommonAST;
50
+ }
51
+ export interface FunctionCallAST extends CommonAST {
52
+ name: string;
53
+ arguments: Array<CommonAST>;
54
+ }
55
+ export interface VariableAST extends CommonAST {
56
+ value: string | boolean | number | CommonAST[] | null | Date;
57
+ }
58
+ export interface LiteralAST extends VariableAST {
59
+ dataType: string;
60
+ }
61
+ export type DateDifUnitParam = 'Y' | 'M' | 'D';
62
+ export {};
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=interfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../../src/constants/interfaces.ts"],"names":[],"mappings":""}