@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,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,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,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 @@
|
|
|
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"}
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -1,2 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
export
|
|
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;
|
package/dist/utils/index.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
export
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
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
|
package/dist/utils/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"
|
|
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,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,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 @@
|
|
|
1
|
+
export { toDate } from './scripts';
|
|
@@ -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,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
|
@@ -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 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../../src/constants/interfaces.ts"],"names":[],"mappings":""}
|