@devrev/meerkat-core 0.0.78 → 0.0.80
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/package.json +1 -1
- package/src/get-wrapped-base-query-with-projections/get-projection-clause.js +4 -4
- package/src/get-wrapped-base-query-with-projections/get-projection-clause.js.map +1 -1
- package/src/get-wrapped-base-query-with-projections/get-wrapped-base-query-with-projections.js +1 -1
- package/src/get-wrapped-base-query-with-projections/get-wrapped-base-query-with-projections.js.map +1 -1
- package/src/types/cube-types/query.d.ts +3 -45
- package/src/types/cube-types/query.js.map +1 -1
package/package.json
CHANGED
|
@@ -9,7 +9,7 @@ const _cubemeasuretransformer = require("../cube-measure-transformer/cube-measur
|
|
|
9
9
|
const _memberkeytosafekey = require("../utils/member-key-to-safe-key");
|
|
10
10
|
const _getaliasedcolumnsfromfilters = require("./get-aliased-columns-from-filters");
|
|
11
11
|
const _sqlexpressionmodifiers = require("./sql-expression-modifiers");
|
|
12
|
-
const
|
|
12
|
+
const memberClauseAggregator = ({ member, aliasedColumnSet, acc, sql })=>{
|
|
13
13
|
if (aliasedColumnSet.has(member) || !sql) {
|
|
14
14
|
return acc;
|
|
15
15
|
}
|
|
@@ -32,8 +32,8 @@ const getProjectionClause = (query, tableSchema, aliasedColumnSet)=>{
|
|
|
32
32
|
modifiers: _sqlexpressionmodifiers.MODIFIERS,
|
|
33
33
|
query
|
|
34
34
|
});
|
|
35
|
-
return
|
|
36
|
-
member,
|
|
35
|
+
return memberClauseAggregator({
|
|
36
|
+
member: (0, _memberkeytosafekey.memberKeyToSafeKey)(member),
|
|
37
37
|
aliasedColumnSet,
|
|
38
38
|
acc,
|
|
39
39
|
currentIndex,
|
|
@@ -48,7 +48,7 @@ const getProjectionClause = (query, tableSchema, aliasedColumnSet)=>{
|
|
|
48
48
|
tableSchema,
|
|
49
49
|
measures
|
|
50
50
|
});
|
|
51
|
-
return
|
|
51
|
+
return memberClauseAggregator({
|
|
52
52
|
member,
|
|
53
53
|
aliasedColumnSet,
|
|
54
54
|
acc,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../meerkat-core/src/get-wrapped-base-query-with-projections/get-projection-clause.ts"],"sourcesContent":["import { getAllColumnUsedInMeasures } from '../cube-measure-transformer/cube-measure-transformer';\nimport { Query, TableSchema } from '../types/cube-types';\nimport { memberKeyToSafeKey } from '../utils/member-key-to-safe-key';\nimport { getDimensionProjection, getFilterMeasureProjection } from './get-aliased-columns-from-filters';\nimport { MODIFIERS } from './sql-expression-modifiers';\n\nconst
|
|
1
|
+
{"version":3,"sources":["../../../../meerkat-core/src/get-wrapped-base-query-with-projections/get-projection-clause.ts"],"sourcesContent":["import { getAllColumnUsedInMeasures } from '../cube-measure-transformer/cube-measure-transformer';\nimport { Query, TableSchema } from '../types/cube-types';\nimport { memberKeyToSafeKey } from '../utils/member-key-to-safe-key';\nimport { getDimensionProjection, getFilterMeasureProjection } from './get-aliased-columns-from-filters';\nimport { MODIFIERS } from './sql-expression-modifiers';\n\nconst memberClauseAggregator = ({\n member,\n aliasedColumnSet,\n acc,\n sql,\n}: {\n member: string;\n aliasedColumnSet: Set<string>;\n acc: string[];\n sql?: string;\n currentIndex: number;\n members: string[];\n}) => {\n if (aliasedColumnSet.has(member) || !sql) {\n return acc;\n }\n aliasedColumnSet.add(member);\n acc.push(sql);\n return acc;\n};\n\nexport const getProjectionClause = (\n query: Query,\n tableSchema: TableSchema,\n aliasedColumnSet: Set<string>\n) => {\n const { measures, dimensions = [] } = query;\n const filteredDimensions = dimensions.filter((dimension) => {\n return dimension.split('.')[0] === tableSchema.name;\n });\n const filteredMeasures = measures.filter((measure) => {\n return measure.split('.')[0] === tableSchema.name;\n });\n const dimensionsProjectionsArr = filteredDimensions.reduce(\n (acc, member, currentIndex, members) => {\n const { sql: memberSql } = getDimensionProjection({\n key: member,\n tableSchema,\n modifiers: MODIFIERS,\n query\n });\n return memberClauseAggregator({\n member: memberKeyToSafeKey(member),\n aliasedColumnSet,\n acc,\n currentIndex,\n members,\n sql: memberSql,\n });\n },\n [] as string[]\n );\n const dimensionsProjections = dimensionsProjectionsArr.join(', ');\n\n const measureProjectionsArr = filteredMeasures.reduce(\n (acc, member, currentIndex, members) => {\n const { sql: memberSql } = getFilterMeasureProjection({\n key: member,\n tableSchema,\n measures,\n });\n return memberClauseAggregator({\n member,\n aliasedColumnSet,\n acc,\n currentIndex,\n members,\n sql: memberSql,\n });\n },\n [] as string[]\n );\n\n const measureProjections = measureProjectionsArr.join(', ');\n\n const usedMeasureObjects = tableSchema.measures.filter((measure) => {\n return (\n measures.findIndex((key) => {\n const keyWithoutTable = key.split('.')[1];\n return keyWithoutTable === measure.name;\n }) !== -1\n );\n });\n const columnsUsedInMeasures = getAllColumnUsedInMeasures(\n usedMeasureObjects,\n tableSchema\n );\n\n let columnsUsedInMeasuresInProjection = '';\n columnsUsedInMeasures.forEach((column, index) => {\n const safeKey = memberKeyToSafeKey(column);\n columnsUsedInMeasuresInProjection += `${column} AS ${safeKey}`;\n if (index !== columnsUsedInMeasures.length - 1) {\n columnsUsedInMeasuresInProjection += ', ';\n }\n });\n\n const combinedStr = [\n dimensionsProjections,\n measureProjections,\n columnsUsedInMeasuresInProjection,\n ];\n\n return combinedStr.filter((str) => str.length > 0).join(', ');\n};\n"],"names":["getProjectionClause","memberClauseAggregator","member","aliasedColumnSet","acc","sql","has","add","push","query","tableSchema","measures","dimensions","filteredDimensions","filter","dimension","split","name","filteredMeasures","measure","dimensionsProjectionsArr","reduce","currentIndex","members","memberSql","getDimensionProjection","key","modifiers","MODIFIERS","memberKeyToSafeKey","dimensionsProjections","join","measureProjectionsArr","getFilterMeasureProjection","measureProjections","usedMeasureObjects","findIndex","keyWithoutTable","columnsUsedInMeasures","getAllColumnUsedInMeasures","columnsUsedInMeasuresInProjection","forEach","column","index","safeKey","length","combinedStr","str"],"mappings":";+BA2BaA;;;eAAAA;;;wCA3B8B;oCAER;8CACgC;wCACzC;AAE1B,MAAMC,yBAAyB,CAAC,EAC9BC,MAAM,EACNC,gBAAgB,EAChBC,GAAG,EACHC,GAAG,EAQJ;IACC,IAAIF,iBAAiBG,GAAG,CAACJ,WAAW,CAACG,KAAK;QACxC,OAAOD;IACT;IACAD,iBAAiBI,GAAG,CAACL;IACrBE,IAAII,IAAI,CAACH;IACT,OAAOD;AACT;AAEO,MAAMJ,sBAAsB,CACjCS,OACAC,aACAP;IAEA,MAAM,EAAEQ,QAAQ,EAAEC,aAAa,EAAE,EAAE,GAAGH;IACtC,MAAMI,qBAAqBD,WAAWE,MAAM,CAAC,CAACC;QAC5C,OAAOA,UAAUC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAKN,YAAYO,IAAI;IACrD;IACA,MAAMC,mBAAmBP,SAASG,MAAM,CAAC,CAACK;QACxC,OAAOA,QAAQH,KAAK,CAAC,IAAI,CAAC,EAAE,KAAKN,YAAYO,IAAI;IACnD;IACA,MAAMG,2BAA2BP,mBAAmBQ,MAAM,CACxD,CAACjB,KAAKF,QAAQoB,cAAcC;QAC1B,MAAM,EAAElB,KAAKmB,SAAS,EAAE,GAAGC,IAAAA,oDAAsB,EAAC;YAChDC,KAAKxB;YACLQ;YACAiB,WAAWC,iCAAS;YACpBnB;QACF;QACA,OAAOR,uBAAuB;YAC5BC,QAAQ2B,IAAAA,sCAAkB,EAAC3B;YAC3BC;YACAC;YACAkB;YACAC;YACAlB,KAAKmB;QACP;IACF,GACA,EAAE;IAEJ,MAAMM,wBAAwBV,yBAAyBW,IAAI,CAAC;IAE5D,MAAMC,wBAAwBd,iBAAiBG,MAAM,CACnD,CAACjB,KAAKF,QAAQoB,cAAcC;QAC1B,MAAM,EAAElB,KAAKmB,SAAS,EAAE,GAAGS,IAAAA,wDAA0B,EAAC;YACpDP,KAAKxB;YACLQ;YACAC;QACF;QACA,OAAOV,uBAAuB;YAC5BC;YACAC;YACAC;YACAkB;YACAC;YACAlB,KAAKmB;QACP;IACF,GACA,EAAE;IAGJ,MAAMU,qBAAqBF,sBAAsBD,IAAI,CAAC;IAEtD,MAAMI,qBAAqBzB,YAAYC,QAAQ,CAACG,MAAM,CAAC,CAACK;QACtD,OACER,SAASyB,SAAS,CAAC,CAACV;YAClB,MAAMW,kBAAkBX,IAAIV,KAAK,CAAC,IAAI,CAAC,EAAE;YACzC,OAAOqB,oBAAoBlB,QAAQF,IAAI;QACzC,OAAO,CAAC;IAEZ;IACA,MAAMqB,wBAAwBC,IAAAA,kDAA0B,EACtDJ,oBACAzB;IAGF,IAAI8B,oCAAoC;IACxCF,sBAAsBG,OAAO,CAAC,CAACC,QAAQC;QACrC,MAAMC,UAAUf,IAAAA,sCAAkB,EAACa;QACnCF,qCAAqC,CAAC,EAAEE,OAAO,IAAI,EAAEE,QAAQ,CAAC;QAC9D,IAAID,UAAUL,sBAAsBO,MAAM,GAAG,GAAG;YAC9CL,qCAAqC;QACvC;IACF;IAEA,MAAMM,cAAc;QAClBhB;QACAI;QACAM;KACD;IAED,OAAOM,YAAYhC,MAAM,CAAC,CAACiC,MAAQA,IAAIF,MAAM,GAAG,GAAGd,IAAI,CAAC;AAC1D"}
|
package/src/get-wrapped-base-query-with-projections/get-wrapped-base-query-with-projections.js
CHANGED
|
@@ -15,6 +15,7 @@ const getWrappedBaseQueryWithProjections = ({ baseQuery, tableSchema, query })=>
|
|
|
15
15
|
*/ // Wrap the query into another 'SELECT * FROM (baseQuery) AS baseTable'' in order to project everything in the base query, and other computed metrics to be able to filter on them
|
|
16
16
|
const newBaseSql = `SELECT * FROM (${baseQuery}) AS ${tableSchema.name}`;
|
|
17
17
|
const aliasedColumnSet = new Set();
|
|
18
|
+
const memberProjections = (0, _getprojectionclause.getProjectionClause)(query, tableSchema, aliasedColumnSet);
|
|
18
19
|
const aliasFromFilters = (0, _getaliasedcolumnsfromfilters.getAliasedColumnsFromFilters)({
|
|
19
20
|
aliasedColumnSet,
|
|
20
21
|
baseSql: 'SELECT *',
|
|
@@ -23,7 +24,6 @@ const getWrappedBaseQueryWithProjections = ({ baseQuery, tableSchema, query })=>
|
|
|
23
24
|
query,
|
|
24
25
|
meerkatFilters: query.filters
|
|
25
26
|
});
|
|
26
|
-
const memberProjections = (0, _getprojectionclause.getProjectionClause)(query, tableSchema, aliasedColumnSet);
|
|
27
27
|
const formattedMemberProjection = memberProjections ? `, ${memberProjections}` : '';
|
|
28
28
|
const finalAliasedColumnsClause = aliasFromFilters + formattedMemberProjection;
|
|
29
29
|
const sqlWithFilterProjects = (0, _cubemeasuretransformer.getSelectReplacedSql)(newBaseSql, finalAliasedColumnsClause);
|
package/src/get-wrapped-base-query-with-projections/get-wrapped-base-query-with-projections.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../meerkat-core/src/get-wrapped-base-query-with-projections/get-wrapped-base-query-with-projections.ts"],"sourcesContent":["import { getSelectReplacedSql } from '../cube-measure-transformer/cube-measure-transformer';\nimport { Query, TableSchema } from '../types/cube-types';\nimport { getAliasedColumnsFromFilters } from './get-aliased-columns-from-filters';\nimport {\n getProjectionClause\n} from './get-projection-clause';\n\ninterface GetWrappedBaseQueryWithProjectionsParams {\n baseQuery: string;\n tableSchema: TableSchema;\n query: Query;\n}\n\nexport const getWrappedBaseQueryWithProjections = ({\n baseQuery,\n tableSchema,\n query,\n}: GetWrappedBaseQueryWithProjectionsParams) => {\n /*\n * Im order to be able to filter on computed metric from a query, we need to project the computed metric in the base query.\n * If theres filters supplied, we can safely return the original base query. Since nothing need to be projected and filtered in this case\n */\n // Wrap the query into another 'SELECT * FROM (baseQuery) AS baseTable'' in order to project everything in the base query, and other computed metrics to be able to filter on them\n const newBaseSql = `SELECT * FROM (${baseQuery}) AS ${tableSchema.name}`;\n const aliasedColumnSet = new Set<string>();\n\n const aliasFromFilters = getAliasedColumnsFromFilters({\n aliasedColumnSet,\n baseSql: 'SELECT *',\n // setting measures to empty array, since we don't want to project measures present in the filters in the base query\n tableSchema: tableSchema,\n query,\n meerkatFilters: query.filters,\n });\n\n const
|
|
1
|
+
{"version":3,"sources":["../../../../meerkat-core/src/get-wrapped-base-query-with-projections/get-wrapped-base-query-with-projections.ts"],"sourcesContent":["import { getSelectReplacedSql } from '../cube-measure-transformer/cube-measure-transformer';\nimport { Query, TableSchema } from '../types/cube-types';\nimport { getAliasedColumnsFromFilters } from './get-aliased-columns-from-filters';\nimport {\n getProjectionClause\n} from './get-projection-clause';\n\ninterface GetWrappedBaseQueryWithProjectionsParams {\n baseQuery: string;\n tableSchema: TableSchema;\n query: Query;\n}\n\nexport const getWrappedBaseQueryWithProjections = ({\n baseQuery,\n tableSchema,\n query,\n}: GetWrappedBaseQueryWithProjectionsParams) => {\n /*\n * Im order to be able to filter on computed metric from a query, we need to project the computed metric in the base query.\n * If theres filters supplied, we can safely return the original base query. Since nothing need to be projected and filtered in this case\n */\n // Wrap the query into another 'SELECT * FROM (baseQuery) AS baseTable'' in order to project everything in the base query, and other computed metrics to be able to filter on them\n const newBaseSql = `SELECT * FROM (${baseQuery}) AS ${tableSchema.name}`;\n const aliasedColumnSet = new Set<string>();\n\n const memberProjections = getProjectionClause(\n query,\n tableSchema,\n aliasedColumnSet\n );\n\n const aliasFromFilters = getAliasedColumnsFromFilters({\n aliasedColumnSet,\n baseSql: 'SELECT *',\n // setting measures to empty array, since we don't want to project measures present in the filters in the base query\n tableSchema: tableSchema,\n query,\n meerkatFilters: query.filters,\n });\n\n const formattedMemberProjection = memberProjections\n ? `, ${memberProjections}`\n : '';\n\n const finalAliasedColumnsClause =\n aliasFromFilters + formattedMemberProjection;\n\n const sqlWithFilterProjects = getSelectReplacedSql(\n newBaseSql,\n finalAliasedColumnsClause\n );\n return sqlWithFilterProjects;\n};\n"],"names":["getWrappedBaseQueryWithProjections","baseQuery","tableSchema","query","newBaseSql","name","aliasedColumnSet","Set","memberProjections","getProjectionClause","aliasFromFilters","getAliasedColumnsFromFilters","baseSql","meerkatFilters","filters","formattedMemberProjection","finalAliasedColumnsClause","sqlWithFilterProjects","getSelectReplacedSql"],"mappings":";+BAaaA;;;eAAAA;;;wCAbwB;8CAEQ;qCAGtC;AAQA,MAAMA,qCAAqC,CAAC,EACjDC,SAAS,EACTC,WAAW,EACXC,KAAK,EACoC;IACzC;;;GAGC,GACD,kLAAkL;IAClL,MAAMC,aAAa,CAAC,eAAe,EAAEH,UAAU,KAAK,EAAEC,YAAYG,IAAI,CAAC,CAAC;IACxE,MAAMC,mBAAmB,IAAIC;IAE7B,MAAMC,oBAAoBC,IAAAA,wCAAmB,EAC3CN,OACAD,aACAI;IAGF,MAAMI,mBAAmBC,IAAAA,0DAA4B,EAAC;QACpDL;QACAM,SAAS;QACT,oHAAoH;QACpHV,aAAaA;QACbC;QACAU,gBAAgBV,MAAMW,OAAO;IAC/B;IAEA,MAAMC,4BAA4BP,oBAC9B,CAAC,EAAE,EAAEA,kBAAkB,CAAC,GACxB;IAEJ,MAAMQ,4BACJN,mBAAmBK;IAErB,MAAME,wBAAwBC,IAAAA,4CAAoB,EAChDd,YACAY;IAEF,OAAOC;AACT"}
|
|
@@ -22,19 +22,10 @@ type MemberType = 'measures' | 'dimensions' | 'segments';
|
|
|
22
22
|
* Member identifier. Should satisfy to the following regexp: /^[a-zA-Z0-9_]+\.[a-zA-Z0-9_]+$/
|
|
23
23
|
*/
|
|
24
24
|
type Member = string;
|
|
25
|
-
/**
|
|
26
|
-
* Datetime member identifier. Should satisfy to the following
|
|
27
|
-
* regexp: /^[a-zA-Z0-9_]+\.[a-zA-Z0-9_]+(\.(second|minute|hour|day|week|month|year))?$/
|
|
28
|
-
*/
|
|
29
|
-
type TimeMember = string;
|
|
30
25
|
/**
|
|
31
26
|
* Filter operator string.
|
|
32
27
|
*/
|
|
33
28
|
type FilterOperator = 'equals' | 'notEquals' | 'contains' | 'notContains' | 'in' | 'notIn' | 'gt' | 'gte' | 'lt' | 'lte' | 'set' | 'notSet' | 'inDateRange' | 'notInDateRange' | 'onTheDate' | 'beforeDate' | 'afterDate' | 'measureFilter';
|
|
34
|
-
/**
|
|
35
|
-
* Time dimension granularity data type.
|
|
36
|
-
*/
|
|
37
|
-
type QueryTimeDimensionGranularity = 'quarter' | 'day' | 'month' | 'year' | 'week' | 'hour' | 'minute' | 'second';
|
|
38
29
|
/**
|
|
39
30
|
* Query order data type.
|
|
40
31
|
*/
|
|
@@ -63,14 +54,6 @@ type LogicalAndFilter = {
|
|
|
63
54
|
type LogicalOrFilter = {
|
|
64
55
|
or: (QueryFilter | LogicalAndFilter)[];
|
|
65
56
|
};
|
|
66
|
-
/**
|
|
67
|
-
* Query datetime dimention interface.
|
|
68
|
-
*/
|
|
69
|
-
interface QueryTimeDimension {
|
|
70
|
-
dimension: Member;
|
|
71
|
-
dateRange?: string[] | string;
|
|
72
|
-
granularity?: QueryTimeDimensionGranularity;
|
|
73
|
-
}
|
|
74
57
|
/**
|
|
75
58
|
* Join Edge data type.
|
|
76
59
|
*/
|
|
@@ -106,36 +89,11 @@ export declare const isJoinNode: (node: JoinNode | SingleNode) => node is JoinNo
|
|
|
106
89
|
type MeerkatQueryFilter = QueryFilter | LogicalAndFilter | LogicalOrFilter;
|
|
107
90
|
interface Query {
|
|
108
91
|
measures: Member[];
|
|
109
|
-
dimensions?:
|
|
92
|
+
dimensions?: Member[];
|
|
110
93
|
filters?: MeerkatQueryFilter[];
|
|
111
|
-
timeDimensions?: QueryTimeDimension[];
|
|
112
94
|
joinPaths?: JoinPath[];
|
|
113
|
-
segments?: Member[];
|
|
114
95
|
limit?: null | number;
|
|
115
96
|
offset?: number;
|
|
116
|
-
|
|
117
|
-
totalQuery?: boolean;
|
|
118
|
-
order?: any;
|
|
119
|
-
timezone?: string;
|
|
120
|
-
renewQuery?: boolean;
|
|
121
|
-
ungrouped?: boolean;
|
|
122
|
-
responseFormat?: ResultType;
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* Normalized filter interface.
|
|
126
|
-
*/
|
|
127
|
-
interface NormalizedQueryFilter extends QueryFilter {
|
|
128
|
-
dimension?: Member;
|
|
129
|
-
}
|
|
130
|
-
/**
|
|
131
|
-
* Normalized query interface.
|
|
132
|
-
*/
|
|
133
|
-
interface NormalizedQuery extends Query {
|
|
134
|
-
filters?: NormalizedQueryFilter[];
|
|
135
|
-
rowLimit?: null | number;
|
|
136
|
-
order?: [{
|
|
137
|
-
id: string;
|
|
138
|
-
desc: boolean;
|
|
139
|
-
}];
|
|
97
|
+
order?: Record<string, QueryOrderType>;
|
|
140
98
|
}
|
|
141
|
-
export { ApiScopes, ApiType, FilterOperator, JoinPath, LogicalAndFilter, LogicalOrFilter, MeerkatQueryFilter, Member, MemberType,
|
|
99
|
+
export { ApiScopes, ApiType, FilterOperator, JoinPath, LogicalAndFilter, LogicalOrFilter, MeerkatQueryFilter, Member, MemberType, Query, QueryFilter, QueryOrderType, QueryType, RequestType, ResultType };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../meerkat-core/src/types/cube-types/query.ts"],"sourcesContent":["/**\n * Request type data type.\n */\ntype RequestType = 'multi';\n\n/**\n * Result type data type.\n */\ntype ResultType = 'default' | 'compact';\n\n/**\n * API type data type.\n */\ntype ApiType = 'sql' | 'graphql' | 'rest' | 'ws' | 'stream';\n\n/**\n * Parsed query type data type.\n */\ntype QueryType = 'regularQuery' | 'compareDateRangeQuery' | 'blendingQuery';\n\n/**\n * String that represent query member type.\n */\ntype MemberType = 'measures' | 'dimensions' | 'segments';\n\n/**\n * Member identifier. Should satisfy to the following regexp: /^[a-zA-Z0-9_]+\\.[a-zA-Z0-9_]+$/\n */\ntype Member = string;\n\n
|
|
1
|
+
{"version":3,"sources":["../../../../../meerkat-core/src/types/cube-types/query.ts"],"sourcesContent":["/**\n * Request type data type.\n */\ntype RequestType = 'multi';\n\n/**\n * Result type data type.\n */\ntype ResultType = 'default' | 'compact';\n\n/**\n * API type data type.\n */\ntype ApiType = 'sql' | 'graphql' | 'rest' | 'ws' | 'stream';\n\n/**\n * Parsed query type data type.\n */\ntype QueryType = 'regularQuery' | 'compareDateRangeQuery' | 'blendingQuery';\n\n/**\n * String that represent query member type.\n */\ntype MemberType = 'measures' | 'dimensions' | 'segments';\n\n/**\n * Member identifier. Should satisfy to the following regexp: /^[a-zA-Z0-9_]+\\.[a-zA-Z0-9_]+$/\n */\ntype Member = string;\n\n\n/**\n * Filter operator string.\n */\ntype FilterOperator =\n | 'equals'\n | 'notEquals'\n | 'contains'\n | 'notContains'\n | 'in'\n | 'notIn'\n | 'gt'\n | 'gte'\n | 'lt'\n | 'lte'\n | 'set'\n | 'notSet'\n | 'inDateRange'\n | 'notInDateRange'\n | 'onTheDate'\n | 'beforeDate'\n | 'afterDate'\n | 'measureFilter';\n\n/**\n * Query order data type.\n */\ntype QueryOrderType = 'asc' | 'desc';\n\n/**\n * ApiScopes data type.\n */\ntype ApiScopes = 'graphql' | 'meta' | 'data' | 'jobs';\n\nexport type FilterType = 'BASE_FILTER' | 'PROJECTION_FILTER';\n\ninterface QueryFilter {\n member: Member;\n operator: FilterOperator;\n values?: string[];\n}\n\n/**\n * Query 'and'-filters type definition.\n */\ntype LogicalAndFilter = {\n and: (QueryFilter | { or: (QueryFilter | LogicalAndFilter)[] })[];\n};\n\n/**\n * Query 'or'-filters type definition.\n */\ntype LogicalOrFilter = {\n or: (QueryFilter | LogicalAndFilter)[];\n};\n\n\n/**\n * Join Edge data type.\n */\n\ninterface JoinNode {\n /**\n * Left node.\n */\n left: Member;\n\n /**\n * Right node.\n */\n right: Member;\n\n /**\n * On condition.\n */\n on: string;\n\n /**\n * Example\n * [\n * [\n * {\n * left: dim_ticket,\n * right: dim_user\n * on: 'created_by_id'\n * },\n * {\n * left : dim_user,\n * right: dim_user_role,\n * on: 'role_id'\n * }\n * ]\n * ]\n *\n *\n */\n}\n\n/**\n * Single node data type.\n * This is the case when there is no join. Just a single node.\n */\ninterface SingleNode {\n /**\n * Left node.\n */\n left: Member;\n}\n\ntype JoinPath = [JoinNode | SingleNode, ...JoinNode[]];\n\nexport const isJoinNode = (node: JoinNode | SingleNode): node is JoinNode => {\n return 'right' in node;\n};\n\n/**\n * Incoming network query data type.\n */\n\ntype MeerkatQueryFilter = QueryFilter | LogicalAndFilter | LogicalOrFilter;\n\ninterface Query {\n measures: Member[];\n dimensions?: Member[];\n filters?: MeerkatQueryFilter[];\n joinPaths?: JoinPath[];\n limit?: null | number;\n offset?: number;\n order?: Record<string, QueryOrderType>;\n}\n\n\nexport {\n ApiScopes,\n ApiType,\n FilterOperator,\n JoinPath,\n LogicalAndFilter,\n LogicalOrFilter,\n MeerkatQueryFilter,\n Member,\n MemberType,\n Query,\n QueryFilter,\n QueryOrderType,\n QueryType,\n RequestType,\n ResultType\n};\n"],"names":["isJoinNode","node"],"mappings":"AAAA;;CAEC;+BA2IYA;;;eAAAA;;;AAAN,MAAMA,aAAa,CAACC;IACzB,OAAO,WAAWA;AACpB"}
|