@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.
- package/CHANGELOG.md +27 -0
- package/__tests__/integration/__mocks__/elasticsearchScripts.ts +21 -0
- package/__tests__/integration/__mocks__/sqlScripts.ts +20 -0
- package/__tests__/integration/elasticsearch.test.ts +158 -0
- package/__tests__/integration/expression.test.ts +22 -0
- package/__tests__/integration/redshift.test.ts +127 -0
- package/__tests__/integration/sonwflake.test.ts +123 -0
- package/__tests__/unit/parser.test.ts +106 -0
- package/__tests__/{src → unit}/transpiler.test.ts +0 -17
- package/dist/constants/index.d.ts +12 -2
- package/dist/constants/index.js +21 -1
- package/dist/constants/index.js.map +1 -1
- package/dist/constants/interfaces.d.ts +8 -2
- package/dist/errors/definitions.d.ts +20 -5
- package/dist/errors/definitions.js +28 -5
- package/dist/errors/definitions.js.map +1 -1
- package/dist/errors/engineErrors.d.ts +2 -0
- package/dist/errors/engineErrors.js +21 -0
- package/dist/errors/engineErrors.js.map +1 -0
- package/dist/errors/index.d.ts +2 -5
- package/dist/errors/index.js +4 -38
- package/dist/errors/index.js.map +1 -1
- package/dist/functions/abs.d.ts +5 -0
- package/dist/functions/abs.js +35 -0
- package/dist/functions/abs.js.map +1 -0
- package/dist/functions/datedif.d.ts +5 -0
- package/dist/functions/datedif.js +61 -0
- package/dist/functions/datedif.js.map +1 -0
- package/dist/functions/day.d.ts +5 -0
- package/dist/functions/day.js +36 -0
- package/dist/functions/day.js.map +1 -0
- package/dist/functions/hour.d.ts +5 -0
- package/dist/functions/hour.js +36 -0
- package/dist/functions/hour.js.map +1 -0
- package/dist/functions/if.d.ts +5 -0
- package/dist/functions/if.js +49 -0
- package/dist/functions/if.js.map +1 -0
- package/dist/functions/ifs.d.ts +5 -0
- package/dist/functions/ifs.js +71 -0
- package/dist/functions/ifs.js.map +1 -0
- package/dist/functions/index.js +20 -0
- package/dist/functions/index.js.map +1 -1
- package/dist/functions/mid.d.ts +3 -0
- package/dist/functions/mid.js +15 -12
- package/dist/functions/mid.js.map +1 -1
- package/dist/functions/minute.d.ts +5 -0
- package/dist/functions/minute.js +36 -0
- package/dist/functions/minute.js.map +1 -0
- package/dist/functions/month.d.ts +5 -0
- package/dist/functions/month.js +36 -0
- package/dist/functions/month.js.map +1 -0
- package/dist/functions/second.d.ts +5 -0
- package/dist/functions/second.js +36 -0
- package/dist/functions/second.js.map +1 -0
- package/dist/functions/year.d.ts +5 -0
- package/dist/functions/year.js +36 -0
- package/dist/functions/year.js.map +1 -0
- package/dist/grammar/generated/qformula.lang.js +10 -10
- package/dist/grammar/generated/qformula.lang.js.map +1 -1
- package/dist/parser/json-parser.js +42 -6
- package/dist/parser/json-parser.js.map +1 -1
- package/dist/transpiler/index.d.ts +9 -7
- package/dist/transpiler/index.js +38 -27
- package/dist/transpiler/index.js.map +1 -1
- package/dist/transpiler/validateFuncStructure.d.ts +2 -0
- package/dist/transpiler/validateFuncStructure.js +37 -0
- package/dist/transpiler/validateFuncStructure.js.map +1 -0
- package/dist/utils/customFunctions.d.ts +3 -0
- package/dist/utils/customFunctions.js +21 -0
- package/dist/utils/customFunctions.js.map +1 -0
- package/dist/utils/elasticsearch/index.d.ts +2 -0
- package/dist/utils/elasticsearch/index.js +16 -0
- package/dist/utils/elasticsearch/index.js.map +1 -0
- package/dist/utils/elasticsearch/scripts.d.ts +10 -0
- package/dist/utils/elasticsearch/scripts.js +36 -0
- package/dist/utils/elasticsearch/scripts.js.map +1 -0
- package/dist/utils/getMonthMaxDayAllowed.d.ts +7 -0
- package/dist/utils/getMonthMaxDayAllowed.js +22 -0
- package/dist/utils/getMonthMaxDayAllowed.js.map +1 -0
- package/dist/utils/getNodeValue.d.ts +2 -0
- package/dist/utils/getNodeValue.js +9 -0
- package/dist/utils/getNodeValue.js.map +1 -0
- package/dist/utils/index.d.ts +9 -2
- package/dist/utils/index.js +9 -8
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/isDateParam.d.ts +2 -0
- package/dist/utils/isDateParam.js +8 -0
- package/dist/utils/isDateParam.js.map +1 -0
- package/dist/utils/isNumberParam.d.ts +2 -0
- package/dist/utils/isNumberParam.js +8 -0
- package/dist/utils/isNumberParam.js.map +1 -0
- package/dist/utils/isPositiveNumberParam.d.ts +2 -0
- package/dist/utils/isPositiveNumberParam.js +8 -0
- package/dist/utils/isPositiveNumberParam.js.map +1 -0
- package/dist/utils/isStringParam.d.ts +2 -0
- package/dist/utils/isStringParam.js +8 -0
- package/dist/utils/isStringParam.js.map +1 -0
- package/dist/utils/isValidDate.d.ts +1 -0
- package/dist/utils/isValidDate.js +4 -0
- package/dist/utils/isValidDate.js.map +1 -0
- package/dist/utils/sql/index.d.ts +1 -0
- package/dist/utils/sql/index.js +2 -0
- package/dist/utils/sql/index.js.map +1 -0
- package/dist/utils/sql/scripts.d.ts +3 -0
- package/dist/utils/sql/scripts.js +39 -0
- package/dist/utils/sql/scripts.js.map +1 -0
- package/package.json +1 -1
- package/pkg/dist/constants/index.d.ts +42 -0
- package/pkg/dist/constants/index.js +86 -0
- package/pkg/dist/constants/index.js.map +1 -0
- package/pkg/dist/constants/interfaces.d.ts +62 -0
- package/pkg/dist/constants/interfaces.js +2 -0
- package/pkg/dist/constants/interfaces.js.map +1 -0
- package/pkg/dist/errors/definitions.d.ts +26 -0
- package/pkg/dist/errors/definitions.js +42 -0
- package/pkg/dist/errors/definitions.js.map +1 -0
- package/pkg/dist/errors/elasticsearch.d.ts +24 -0
- package/pkg/dist/errors/elasticsearch.js +27 -0
- package/pkg/dist/errors/elasticsearch.js.map +1 -0
- package/pkg/dist/errors/engineErrors.d.ts +2 -0
- package/pkg/dist/errors/engineErrors.js +21 -0
- package/pkg/dist/errors/engineErrors.js.map +1 -0
- package/pkg/dist/errors/index.d.ts +2 -0
- package/pkg/dist/errors/index.js +5 -0
- package/pkg/dist/errors/index.js.map +1 -0
- package/pkg/dist/errors/snowflake.d.ts +15 -0
- package/pkg/dist/errors/snowflake.js +17 -0
- package/pkg/dist/errors/snowflake.js.map +1 -0
- package/pkg/dist/functions/abs.d.ts +5 -0
- package/pkg/dist/functions/abs.js +35 -0
- package/pkg/dist/functions/abs.js.map +1 -0
- package/pkg/dist/functions/datedif.d.ts +5 -0
- package/pkg/dist/functions/datedif.js +58 -0
- package/pkg/dist/functions/datedif.js.map +1 -0
- package/pkg/dist/functions/day.d.ts +5 -0
- package/pkg/dist/functions/day.js +36 -0
- package/pkg/dist/functions/day.js.map +1 -0
- package/pkg/dist/functions/hour.d.ts +5 -0
- package/pkg/dist/functions/hour.js +36 -0
- package/pkg/dist/functions/hour.js.map +1 -0
- package/pkg/dist/functions/if.d.ts +5 -0
- package/pkg/dist/functions/if.js +49 -0
- package/pkg/dist/functions/if.js.map +1 -0
- package/pkg/dist/functions/ifs.d.ts +5 -0
- package/pkg/dist/functions/ifs.js +71 -0
- package/pkg/dist/functions/ifs.js.map +1 -0
- package/pkg/dist/functions/index.d.ts +4 -0
- package/pkg/dist/functions/index.js +29 -0
- package/pkg/dist/functions/index.js.map +1 -0
- package/pkg/dist/functions/mid.d.ts +5 -0
- package/pkg/dist/functions/mid.js +51 -0
- package/pkg/dist/functions/mid.js.map +1 -0
- package/pkg/dist/functions/minute.d.ts +5 -0
- package/pkg/dist/functions/minute.js +36 -0
- package/pkg/dist/functions/minute.js.map +1 -0
- package/pkg/dist/functions/month.d.ts +5 -0
- package/pkg/dist/functions/month.js +36 -0
- package/pkg/dist/functions/month.js.map +1 -0
- package/pkg/dist/functions/second.d.ts +5 -0
- package/pkg/dist/functions/second.js +36 -0
- package/pkg/dist/functions/second.js.map +1 -0
- package/pkg/dist/functions/year.d.ts +5 -0
- package/pkg/dist/functions/year.js +36 -0
- package/pkg/dist/functions/year.js.map +1 -0
- package/pkg/dist/grammar/generated/qformula.lang.js +43 -0
- package/pkg/dist/grammar/generated/qformula.lang.js.map +1 -0
- package/pkg/dist/grammar/qformula.grammar.d.ts +1 -0
- package/pkg/dist/grammar/qformula.grammar.js +2 -0
- package/pkg/dist/grammar/qformula.grammar.js.map +1 -0
- package/pkg/dist/index.js +29 -0
- package/pkg/dist/index.js.map +1 -0
- package/pkg/dist/parser/json-parser.js +139 -0
- package/pkg/dist/parser/json-parser.js.map +1 -0
- package/pkg/dist/transpiler/index.d.ts +17 -0
- package/pkg/dist/transpiler/index.js +82 -0
- package/pkg/dist/transpiler/index.js.map +1 -0
- package/pkg/dist/transpiler/validateFuncStructure.d.ts +2 -0
- package/pkg/dist/transpiler/validateFuncStructure.js +35 -0
- package/pkg/dist/transpiler/validateFuncStructure.js.map +1 -0
- package/pkg/dist/utils/customFunctions.d.ts +2 -0
- package/pkg/dist/utils/customFunctions.js +11 -0
- package/pkg/dist/utils/customFunctions.js.map +1 -0
- package/pkg/dist/utils/elasticsearch/index.d.ts +1 -0
- package/pkg/dist/utils/elasticsearch/index.js +15 -0
- package/pkg/dist/utils/elasticsearch/index.js.map +1 -0
- package/pkg/dist/utils/elasticsearch/scripts.d.ts +9 -0
- package/pkg/dist/utils/elasticsearch/scripts.js +33 -0
- package/pkg/dist/utils/elasticsearch/scripts.js.map +1 -0
- package/pkg/dist/utils/getMonthMaxDayAllowed.d.ts +7 -0
- package/pkg/dist/utils/getMonthMaxDayAllowed.js +22 -0
- package/pkg/dist/utils/getMonthMaxDayAllowed.js.map +1 -0
- package/pkg/dist/utils/getNodeValue.d.ts +2 -0
- package/pkg/dist/utils/getNodeValue.js +9 -0
- package/pkg/dist/utils/getNodeValue.js.map +1 -0
- package/pkg/dist/utils/index.d.ts +8 -0
- package/pkg/dist/utils/index.js +9 -0
- package/pkg/dist/utils/index.js.map +1 -0
- package/pkg/dist/utils/isDateParam.d.ts +2 -0
- package/pkg/dist/utils/isDateParam.js +10 -0
- package/pkg/dist/utils/isDateParam.js.map +1 -0
- package/pkg/dist/utils/isNumberParam.d.ts +2 -0
- package/pkg/dist/utils/isNumberParam.js +8 -0
- package/pkg/dist/utils/isNumberParam.js.map +1 -0
- package/pkg/dist/utils/isPositiveNumberParam.d.ts +2 -0
- package/pkg/dist/utils/isPositiveNumberParam.js +8 -0
- package/pkg/dist/utils/isPositiveNumberParam.js.map +1 -0
- package/pkg/dist/utils/isStringParam.d.ts +2 -0
- package/pkg/dist/utils/isStringParam.js +8 -0
- package/pkg/dist/utils/isStringParam.js.map +1 -0
- package/pkg/dist/utils/isValidDate.d.ts +1 -0
- package/pkg/dist/utils/isValidDate.js +4 -0
- package/pkg/dist/utils/isValidDate.js.map +1 -0
- package/pkg/dist/utils/sql/scripts.d.ts +2 -0
- package/pkg/dist/utils/sql/scripts.js +39 -0
- package/pkg/dist/utils/sql/scripts.js.map +1 -0
- package/__tests__/src/parser.test.ts +0 -29
- package/dist/models/ast.models.d.ts +0 -29
- package/dist/models/ast.models.js +0 -1
- package/dist/utils/utils.d.ts +0 -4
- package/dist/utils/utils.js +0 -3
|
@@ -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,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 @@
|
|
|
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,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,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,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,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 @@
|
|
|
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,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
|
-
});
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
export interface AstNode {
|
|
2
|
-
type: string;
|
|
3
|
-
}
|
|
4
|
-
export interface AstBinaryExpressionNode extends AstNode {
|
|
5
|
-
operator: string;
|
|
6
|
-
left: AstNode;
|
|
7
|
-
right: AstNode;
|
|
8
|
-
}
|
|
9
|
-
export interface AstUnaryExpressionNode extends AstNode {
|
|
10
|
-
operator: string;
|
|
11
|
-
right: AstNode;
|
|
12
|
-
}
|
|
13
|
-
export interface AstValueNode extends AstNode {
|
|
14
|
-
value: string | boolean | number | AstNode[];
|
|
15
|
-
dataType: string;
|
|
16
|
-
}
|
|
17
|
-
export interface AstVariableNode extends AstNode {
|
|
18
|
-
value: string;
|
|
19
|
-
}
|
|
20
|
-
export interface AstFunctionNode extends AstNode {
|
|
21
|
-
name: string;
|
|
22
|
-
arguments: AstNode[];
|
|
23
|
-
}
|
|
24
|
-
export interface AstProgramNode extends AstNode {
|
|
25
|
-
exp: string;
|
|
26
|
-
lang: string;
|
|
27
|
-
version: string;
|
|
28
|
-
body: AstNode;
|
|
29
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
package/dist/utils/utils.d.ts
DELETED
package/dist/utils/utils.js
DELETED