@devrev/meerkat-core 0.0.77

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 (237) hide show
  1. package/README.md +11 -0
  2. package/package.json +30 -0
  3. package/src/ast-builder/ast-builder.d.ts +6 -0
  4. package/src/ast-builder/ast-builder.js +89 -0
  5. package/src/ast-builder/ast-builder.js.map +1 -0
  6. package/src/ast-deserializer/ast-deserializer.d.ts +5 -0
  7. package/src/ast-deserializer/ast-deserializer.js +30 -0
  8. package/src/ast-deserializer/ast-deserializer.js.map +1 -0
  9. package/src/context-params/context-params-ast.d.ts +11 -0
  10. package/src/context-params/context-params-ast.js +55 -0
  11. package/src/context-params/context-params-ast.js.map +1 -0
  12. package/src/cube-filter-transformer/and/and.d.ts +2 -0
  13. package/src/cube-filter-transformer/and/and.js +18 -0
  14. package/src/cube-filter-transformer/and/and.js.map +1 -0
  15. package/src/cube-filter-transformer/base-condition-builder/base-condition-builder.d.ts +154 -0
  16. package/src/cube-filter-transformer/base-condition-builder/base-condition-builder.js +159 -0
  17. package/src/cube-filter-transformer/base-condition-builder/base-condition-builder.js.map +1 -0
  18. package/src/cube-filter-transformer/contains/contains.d.ts +65 -0
  19. package/src/cube-filter-transformer/contains/contains.js +70 -0
  20. package/src/cube-filter-transformer/contains/contains.js.map +1 -0
  21. package/src/cube-filter-transformer/equals/equals-array.d.ts +2 -0
  22. package/src/cube-filter-transformer/equals/equals-array.js +30 -0
  23. package/src/cube-filter-transformer/equals/equals-array.js.map +1 -0
  24. package/src/cube-filter-transformer/equals/equals.d.ts +2 -0
  25. package/src/cube-filter-transformer/equals/equals.js +37 -0
  26. package/src/cube-filter-transformer/equals/equals.js.map +1 -0
  27. package/src/cube-filter-transformer/factory.d.ts +5 -0
  28. package/src/cube-filter-transformer/factory.js +124 -0
  29. package/src/cube-filter-transformer/factory.js.map +1 -0
  30. package/src/cube-filter-transformer/gt/gt.d.ts +2 -0
  31. package/src/cube-filter-transformer/gt/gt.js +30 -0
  32. package/src/cube-filter-transformer/gt/gt.js.map +1 -0
  33. package/src/cube-filter-transformer/gte/gte.d.ts +2 -0
  34. package/src/cube-filter-transformer/gte/gte.js +30 -0
  35. package/src/cube-filter-transformer/gte/gte.js.map +1 -0
  36. package/src/cube-filter-transformer/in/in.d.ts +2 -0
  37. package/src/cube-filter-transformer/in/in.js +77 -0
  38. package/src/cube-filter-transformer/in/in.js.map +1 -0
  39. package/src/cube-filter-transformer/in-date-range/in-date-range.d.ts +2 -0
  40. package/src/cube-filter-transformer/in-date-range/in-date-range.js +24 -0
  41. package/src/cube-filter-transformer/in-date-range/in-date-range.js.map +1 -0
  42. package/src/cube-filter-transformer/lt/lt.d.ts +2 -0
  43. package/src/cube-filter-transformer/lt/lt.js +30 -0
  44. package/src/cube-filter-transformer/lt/lt.js.map +1 -0
  45. package/src/cube-filter-transformer/lte/lte.d.ts +2 -0
  46. package/src/cube-filter-transformer/lte/lte.js +30 -0
  47. package/src/cube-filter-transformer/lte/lte.js.map +1 -0
  48. package/src/cube-filter-transformer/not/not.d.ts +2 -0
  49. package/src/cube-filter-transformer/not/not.js +18 -0
  50. package/src/cube-filter-transformer/not/not.js.map +1 -0
  51. package/src/cube-filter-transformer/not-In-date-range/not-In-date-range.d.ts +2 -0
  52. package/src/cube-filter-transformer/not-In-date-range/not-In-date-range.js +24 -0
  53. package/src/cube-filter-transformer/not-In-date-range/not-In-date-range.js.map +1 -0
  54. package/src/cube-filter-transformer/not-contains/not-contains.d.ts +65 -0
  55. package/src/cube-filter-transformer/not-contains/not-contains.js +70 -0
  56. package/src/cube-filter-transformer/not-contains/not-contains.js.map +1 -0
  57. package/src/cube-filter-transformer/not-equals/not-equals-array.d.ts +2 -0
  58. package/src/cube-filter-transformer/not-equals/not-equals-array.js +26 -0
  59. package/src/cube-filter-transformer/not-equals/not-equals-array.js.map +1 -0
  60. package/src/cube-filter-transformer/not-equals/not-equals.d.ts +8 -0
  61. package/src/cube-filter-transformer/not-equals/not-equals.js +37 -0
  62. package/src/cube-filter-transformer/not-equals/not-equals.js.map +1 -0
  63. package/src/cube-filter-transformer/not-in/not-in.d.ts +2 -0
  64. package/src/cube-filter-transformer/not-in/not-in.js +84 -0
  65. package/src/cube-filter-transformer/not-in/not-in.js.map +1 -0
  66. package/src/cube-filter-transformer/not-set/not-set.d.ts +2 -0
  67. package/src/cube-filter-transformer/not-set/not-set.js +26 -0
  68. package/src/cube-filter-transformer/not-set/not-set.js.map +1 -0
  69. package/src/cube-filter-transformer/or/or.d.ts +2 -0
  70. package/src/cube-filter-transformer/or/or.js +18 -0
  71. package/src/cube-filter-transformer/or/or.js.map +1 -0
  72. package/src/cube-filter-transformer/set/set.d.ts +2 -0
  73. package/src/cube-filter-transformer/set/set.js +26 -0
  74. package/src/cube-filter-transformer/set/set.js.map +1 -0
  75. package/src/cube-group-by-transformer/cube-group-by-transformer.d.ts +8 -0
  76. package/src/cube-group-by-transformer/cube-group-by-transformer.js +25 -0
  77. package/src/cube-group-by-transformer/cube-group-by-transformer.js.map +1 -0
  78. package/src/cube-limit-offset-transformer/cube-limit-offset-transformer.d.ts +31 -0
  79. package/src/cube-limit-offset-transformer/cube-limit-offset-transformer.js +42 -0
  80. package/src/cube-limit-offset-transformer/cube-limit-offset-transformer.js.map +1 -0
  81. package/src/cube-measure-transformer/cube-measure-transformer.d.ts +21 -0
  82. package/src/cube-measure-transformer/cube-measure-transformer.js +126 -0
  83. package/src/cube-measure-transformer/cube-measure-transformer.js.map +1 -0
  84. package/src/cube-order-by-transformer/cube-order-by-transformer.d.ts +21 -0
  85. package/src/cube-order-by-transformer/cube-order-by-transformer.js +39 -0
  86. package/src/cube-order-by-transformer/cube-order-by-transformer.js.map +1 -0
  87. package/src/cube-to-duckdb/cube-filter-to-duckdb.d.ts +16 -0
  88. package/src/cube-to-duckdb/cube-filter-to-duckdb.js +3 -0
  89. package/src/cube-to-duckdb/cube-filter-to-duckdb.js.map +1 -0
  90. package/src/filter-params/filter-params-ast.d.ts +33 -0
  91. package/src/filter-params/filter-params-ast.js +115 -0
  92. package/src/filter-params/filter-params-ast.js.map +1 -0
  93. package/src/get-projection-clause/get-projection-clause.d.ts +27 -0
  94. package/src/get-projection-clause/get-projection-clause.js +135 -0
  95. package/src/get-projection-clause/get-projection-clause.js.map +1 -0
  96. package/src/get-wrapped-base-query-with-projections/get-wrapped-base-query-with-projections.d.ts +8 -0
  97. package/src/get-wrapped-base-query-with-projections/get-wrapped-base-query-with-projections.js +99 -0
  98. package/src/get-wrapped-base-query-with-projections/get-wrapped-base-query-with-projections.js.map +1 -0
  99. package/src/index.d.ts +16 -0
  100. package/src/index.js +55 -0
  101. package/src/index.js.map +1 -0
  102. package/src/joins/joins.d.ts +22 -0
  103. package/src/joins/joins.js +170 -0
  104. package/src/joins/joins.js.map +1 -0
  105. package/src/types/cube-types/index.d.js +6 -0
  106. package/src/types/cube-types/index.d.js.map +1 -0
  107. package/src/types/cube-types/index.d.ts +2 -0
  108. package/src/types/cube-types/index.js +6 -0
  109. package/src/types/cube-types/index.js.map +1 -0
  110. package/src/types/cube-types/query.d.js +5 -0
  111. package/src/types/cube-types/query.d.js.map +1 -0
  112. package/src/types/cube-types/query.d.ts +141 -0
  113. package/src/types/cube-types/query.js +14 -0
  114. package/src/types/cube-types/query.js.map +1 -0
  115. package/src/types/cube-types/table.d.js +3 -0
  116. package/src/types/cube-types/table.d.js.map +1 -0
  117. package/src/types/cube-types/table.d.ts +25 -0
  118. package/src/types/cube-types/table.js +3 -0
  119. package/src/types/cube-types/table.js.map +1 -0
  120. package/src/types/duckdb-serialization-types/index.d.js +11 -0
  121. package/src/types/duckdb-serialization-types/index.d.js.map +1 -0
  122. package/src/types/duckdb-serialization-types/index.d.ts +7 -0
  123. package/src/types/duckdb-serialization-types/index.js +11 -0
  124. package/src/types/duckdb-serialization-types/index.js.map +1 -0
  125. package/src/types/duckdb-serialization-types/serialization/Constraint.d.ts +47 -0
  126. package/src/types/duckdb-serialization-types/serialization/Constraint.js +31 -0
  127. package/src/types/duckdb-serialization-types/serialization/Constraint.js.map +1 -0
  128. package/src/types/duckdb-serialization-types/serialization/CreateInfo.d.ts +95 -0
  129. package/src/types/duckdb-serialization-types/serialization/CreateInfo.js +67 -0
  130. package/src/types/duckdb-serialization-types/serialization/CreateInfo.js.map +1 -0
  131. package/src/types/duckdb-serialization-types/serialization/Expression.d.js +3 -0
  132. package/src/types/duckdb-serialization-types/serialization/Expression.d.js.map +1 -0
  133. package/src/types/duckdb-serialization-types/serialization/Expression.d.ts +186 -0
  134. package/src/types/duckdb-serialization-types/serialization/Expression.js +130 -0
  135. package/src/types/duckdb-serialization-types/serialization/Expression.js.map +1 -0
  136. package/src/types/duckdb-serialization-types/serialization/LogicalOperator.d.ts +231 -0
  137. package/src/types/duckdb-serialization-types/serialization/LogicalOperator.js +47 -0
  138. package/src/types/duckdb-serialization-types/serialization/LogicalOperator.js.map +1 -0
  139. package/src/types/duckdb-serialization-types/serialization/MacroFunction.d.ts +20 -0
  140. package/src/types/duckdb-serialization-types/serialization/MacroFunction.js +15 -0
  141. package/src/types/duckdb-serialization-types/serialization/MacroFunction.js.map +1 -0
  142. package/src/types/duckdb-serialization-types/serialization/Misc.d.js +3 -0
  143. package/src/types/duckdb-serialization-types/serialization/Misc.d.js.map +1 -0
  144. package/src/types/duckdb-serialization-types/serialization/Misc.d.ts +3 -0
  145. package/src/types/duckdb-serialization-types/serialization/Misc.js +3 -0
  146. package/src/types/duckdb-serialization-types/serialization/Misc.js.map +1 -0
  147. package/src/types/duckdb-serialization-types/serialization/Nodes.d.js +10 -0
  148. package/src/types/duckdb-serialization-types/serialization/Nodes.d.js.map +1 -0
  149. package/src/types/duckdb-serialization-types/serialization/Nodes.d.ts +212 -0
  150. package/src/types/duckdb-serialization-types/serialization/Nodes.js +92 -0
  151. package/src/types/duckdb-serialization-types/serialization/Nodes.js.map +1 -0
  152. package/src/types/duckdb-serialization-types/serialization/ParseInfo.d.ts +192 -0
  153. package/src/types/duckdb-serialization-types/serialization/ParseInfo.js +128 -0
  154. package/src/types/duckdb-serialization-types/serialization/ParseInfo.js.map +1 -0
  155. package/src/types/duckdb-serialization-types/serialization/ParsedExpression.d.js +3 -0
  156. package/src/types/duckdb-serialization-types/serialization/ParsedExpression.d.js.map +1 -0
  157. package/src/types/duckdb-serialization-types/serialization/ParsedExpression.d.ts +114 -0
  158. package/src/types/duckdb-serialization-types/serialization/ParsedExpression.js +37 -0
  159. package/src/types/duckdb-serialization-types/serialization/ParsedExpression.js.map +1 -0
  160. package/src/types/duckdb-serialization-types/serialization/QueryNode.d.js +3 -0
  161. package/src/types/duckdb-serialization-types/serialization/QueryNode.d.js.map +1 -0
  162. package/src/types/duckdb-serialization-types/serialization/QueryNode.d.ts +62 -0
  163. package/src/types/duckdb-serialization-types/serialization/QueryNode.js +42 -0
  164. package/src/types/duckdb-serialization-types/serialization/QueryNode.js.map +1 -0
  165. package/src/types/duckdb-serialization-types/serialization/ResultModifier.d.js +3 -0
  166. package/src/types/duckdb-serialization-types/serialization/ResultModifier.d.js.map +1 -0
  167. package/src/types/duckdb-serialization-types/serialization/ResultModifier.d.ts +29 -0
  168. package/src/types/duckdb-serialization-types/serialization/ResultModifier.js +16 -0
  169. package/src/types/duckdb-serialization-types/serialization/ResultModifier.js.map +1 -0
  170. package/src/types/duckdb-serialization-types/serialization/Statement.d.js +3 -0
  171. package/src/types/duckdb-serialization-types/serialization/Statement.d.js.map +1 -0
  172. package/src/types/duckdb-serialization-types/serialization/Statement.d.ts +4 -0
  173. package/src/types/duckdb-serialization-types/serialization/Statement.js +3 -0
  174. package/src/types/duckdb-serialization-types/serialization/Statement.js.map +1 -0
  175. package/src/types/duckdb-serialization-types/serialization/TableFilter.d.js +3 -0
  176. package/src/types/duckdb-serialization-types/serialization/TableFilter.d.js.map +1 -0
  177. package/src/types/duckdb-serialization-types/serialization/TableFilter.d.ts +32 -0
  178. package/src/types/duckdb-serialization-types/serialization/TableFilter.js +17 -0
  179. package/src/types/duckdb-serialization-types/serialization/TableFilter.js.map +1 -0
  180. package/src/types/duckdb-serialization-types/serialization/TableRef.d.js +3 -0
  181. package/src/types/duckdb-serialization-types/serialization/TableRef.d.js.map +1 -0
  182. package/src/types/duckdb-serialization-types/serialization/TableRef.d.ts +84 -0
  183. package/src/types/duckdb-serialization-types/serialization/TableRef.js +53 -0
  184. package/src/types/duckdb-serialization-types/serialization/TableRef.js.map +1 -0
  185. package/src/types/duckdb-serialization-types/serialization/Types.d.js +3 -0
  186. package/src/types/duckdb-serialization-types/serialization/Types.d.js.map +1 -0
  187. package/src/types/duckdb-serialization-types/serialization/Types.d.ts +53 -0
  188. package/src/types/duckdb-serialization-types/serialization/Types.js +21 -0
  189. package/src/types/duckdb-serialization-types/serialization/Types.js.map +1 -0
  190. package/src/types/duckdb-serialization-types/serialization/example.d.ts +1 -0
  191. package/src/types/duckdb-serialization-types/serialization/example.js +131 -0
  192. package/src/types/duckdb-serialization-types/serialization/example.js.map +1 -0
  193. package/src/utils/__fixtures__/joins.fixtures.d.ts +211 -0
  194. package/src/utils/__fixtures__/joins.fixtures.js +922 -0
  195. package/src/utils/__fixtures__/joins.fixtures.js.map +1 -0
  196. package/src/utils/base-ast.d.ts +3 -0
  197. package/src/utils/base-ast.js +64 -0
  198. package/src/utils/base-ast.js.map +1 -0
  199. package/src/utils/constants.d.ts +2 -0
  200. package/src/utils/constants.js +19 -0
  201. package/src/utils/constants.js.map +1 -0
  202. package/src/utils/cube-filter-enrichment.d.ts +4 -0
  203. package/src/utils/cube-filter-enrichment.js +63 -0
  204. package/src/utils/cube-filter-enrichment.js.map +1 -0
  205. package/src/utils/cube-to-table-schema.d.ts +3 -0
  206. package/src/utils/cube-to-table-schema.js +104 -0
  207. package/src/utils/cube-to-table-schema.js.map +1 -0
  208. package/src/utils/cube-type-to-duckdb-type.d.ts +6 -0
  209. package/src/utils/cube-type-to-duckdb-type.js +17 -0
  210. package/src/utils/cube-type-to-duckdb-type.js.map +1 -0
  211. package/src/utils/find-in-table-schema.d.ts +4 -0
  212. package/src/utils/find-in-table-schema.js +40 -0
  213. package/src/utils/find-in-table-schema.js.map +1 -0
  214. package/src/utils/get-possible-nodes.d.ts +15 -0
  215. package/src/utils/get-possible-nodes.js +152 -0
  216. package/src/utils/get-possible-nodes.js.map +1 -0
  217. package/src/utils/get-type-info.d.ts +7 -0
  218. package/src/utils/get-type-info.js +44 -0
  219. package/src/utils/get-type-info.js.map +1 -0
  220. package/src/utils/is-array-member-type.d.ts +4 -0
  221. package/src/utils/is-array-member-type.js +12 -0
  222. package/src/utils/is-array-member-type.js.map +1 -0
  223. package/src/utils/key-from-measures-dimension.d.ts +2 -0
  224. package/src/utils/key-from-measures-dimension.js +34 -0
  225. package/src/utils/key-from-measures-dimension.js.map +1 -0
  226. package/src/utils/meerkat-placeholder-replacer.d.ts +1 -0
  227. package/src/utils/meerkat-placeholder-replacer.js +14 -0
  228. package/src/utils/meerkat-placeholder-replacer.js.map +1 -0
  229. package/src/utils/member-key-to-safe-key.d.ts +1 -0
  230. package/src/utils/member-key-to-safe-key.js +13 -0
  231. package/src/utils/member-key-to-safe-key.js.map +1 -0
  232. package/src/utils/modify-meerkat-filter.d.ts +3 -0
  233. package/src/utils/modify-meerkat-filter.js +30 -0
  234. package/src/utils/modify-meerkat-filter.js.map +1 -0
  235. package/src/utils/type-guards.d.ts +8 -0
  236. package/src/utils/type-guards.js +83 -0
  237. package/src/utils/type-guards.js.map +1 -0
@@ -0,0 +1,152 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "getNestedTableSchema", {
3
+ enumerable: true,
4
+ get: function() {
5
+ return getNestedTableSchema;
6
+ }
7
+ });
8
+ const _joins = require("../joins/joins");
9
+ const _cubetypes = require("../types/cube-types");
10
+ const getNestedTableSchema = (tableSchemas, joinPath, depth)=>{
11
+ const tableSchemaSqlMap = {};
12
+ for (const schema of tableSchemas){
13
+ if (!schema) {
14
+ throw new Error('Schema is undefined');
15
+ }
16
+ tableSchemaSqlMap[schema.name] = schema.sql;
17
+ }
18
+ const directedGraph = (0, _joins.createDirectedGraph)(tableSchemas, tableSchemaSqlMap);
19
+ const hasLoop = (0, _joins.checkLoopInJoinPath)(joinPath);
20
+ if (hasLoop) {
21
+ throw new Error('A loop was detected in the joins paths');
22
+ }
23
+ const visitedNodes = {};
24
+ const startingNode = tableSchemas.find((schema)=>schema.name === joinPath[0][0].left);
25
+ visitedNodes[startingNode.name] = true;
26
+ const nestedTableSchema = {
27
+ name: startingNode.name,
28
+ measures: startingNode.measures.map((measure)=>({
29
+ schema: measure,
30
+ children: []
31
+ })),
32
+ dimensions: startingNode.dimensions.map((dimension)=>({
33
+ schema: dimension,
34
+ children: []
35
+ }))
36
+ };
37
+ const checkedPaths = {};
38
+ const buildNestedSchema = (edges, index, nestedTableSchema, tableSchemas)=>{
39
+ var _nestedDimension_children;
40
+ const edge = edges[index];
41
+ /**
42
+ * If there is no right table, return the nested schema immediately
43
+ * This means there is a single node in the path.
44
+ */ if (!(0, _cubetypes.isJoinNode)(edge)) {
45
+ return nestedTableSchema;
46
+ }
47
+ // If the path has been checked before, return the nested schema immediately
48
+ const pathKey = `${edge.left}-${edge.right}-${edge.on}`;
49
+ if (checkedPaths[pathKey]) {
50
+ nestedTableSchema.dimensions.map((dimension)=>{
51
+ var _dimension_children;
52
+ (_dimension_children = dimension.children) == null ? void 0 : _dimension_children.forEach((child)=>{
53
+ if (child.name === edge.right) {
54
+ return buildNestedSchema(edges, index + 1, child, tableSchemas);
55
+ }
56
+ return;
57
+ });
58
+ });
59
+ return nestedTableSchema;
60
+ }
61
+ const rightSchema = tableSchemas.find((schema)=>schema.name === edge.right);
62
+ if (!rightSchema) {
63
+ throw new Error(`The schema for ${edge.right} does not exist.`);
64
+ }
65
+ // Mark the path as checked
66
+ checkedPaths[pathKey] = true;
67
+ const nestedRightSchema = {
68
+ name: rightSchema.name,
69
+ measures: (rightSchema.measures || []).map((measure)=>({
70
+ schema: measure,
71
+ children: []
72
+ })),
73
+ dimensions: (rightSchema.dimensions || []).map((dimension)=>({
74
+ schema: dimension,
75
+ children: []
76
+ }))
77
+ };
78
+ const nestedDimension = nestedTableSchema.dimensions.find((dimension)=>dimension.schema.name === edge.on);
79
+ if (!nestedDimension) {
80
+ throw new Error(`The dimension ${edge.on} does not exist in the table schema.`);
81
+ }
82
+ (_nestedDimension_children = nestedDimension.children) == null ? void 0 : _nestedDimension_children.push(nestedRightSchema);
83
+ // Mark the right schema as visited
84
+ visitedNodes[rightSchema.name] = true;
85
+ if (index < edges.length - 1) {
86
+ buildNestedSchema(edges, index + 1, nestedRightSchema, tableSchemas);
87
+ }
88
+ return nestedTableSchema;
89
+ };
90
+ for(let i = 0; i < joinPath.length; i++){
91
+ buildNestedSchema(joinPath[i], 0, nestedTableSchema, tableSchemas);
92
+ }
93
+ getNextPossibleNodes(directedGraph, nestedTableSchema, visitedNodes, tableSchemas, depth);
94
+ return nestedTableSchema;
95
+ };
96
+ const getNextPossibleNodes = (directedGraph, nestedTableSchema, visitedNodes, tableSchemas, depth, currentDepth = 0)=>{
97
+ const currentNode = nestedTableSchema.name;
98
+ /**
99
+ * We are already iterating the next nodes for each dimension. It means we are already at the next level of depth.
100
+ * So we should return if the current depth is greater than or equal to the depth we want to go to.
101
+ */ if (currentDepth >= depth) {
102
+ return;
103
+ }
104
+ /**
105
+ * Iterating through each dimension of the current node
106
+ */ for(let i = 0; i < nestedTableSchema.dimensions.length; i++){
107
+ const dimension = nestedTableSchema.dimensions[i];
108
+ /**
109
+ * Gettting the next possible nodes for the current dimension
110
+ */ const nextPossibleNodes = directedGraph[currentNode];
111
+ if (!nextPossibleNodes) {
112
+ return;
113
+ }
114
+ for (const [node] of Object.entries(nextPossibleNodes)){
115
+ /**
116
+ * If the next node is not possible with the current dimension, continue to the next node
117
+ */ if (!nextPossibleNodes[node][dimension.schema.name]) {
118
+ continue;
119
+ }
120
+ const nextSchema = tableSchemas.find((schema)=>schema.name === node);
121
+ if (!nextSchema) {
122
+ throw new Error(`The schema for ${node} does not exist.`);
123
+ }
124
+ if (!visitedNodes[nextSchema.name]) {
125
+ var _dimension_children;
126
+ const nestedNextSchema = {
127
+ name: nextSchema.name,
128
+ measures: nextSchema.measures.map((measure)=>({
129
+ schema: measure,
130
+ children: []
131
+ })),
132
+ dimensions: nextSchema.dimensions.map((dimension)=>({
133
+ schema: dimension,
134
+ children: []
135
+ }))
136
+ };
137
+ if (!((_dimension_children = dimension.children) == null ? void 0 : _dimension_children.some((child)=>child.name === nestedNextSchema.name))) {
138
+ var _dimension_children1;
139
+ (_dimension_children1 = dimension.children) == null ? void 0 : _dimension_children1.push(nestedNextSchema);
140
+ }
141
+ }
142
+ for (const children of dimension.children || []){
143
+ if (visitedNodes[children.name] && currentDepth > 0) {
144
+ continue;
145
+ }
146
+ getNextPossibleNodes(directedGraph, children, visitedNodes, tableSchemas, depth, visitedNodes[children.name] ? 0 : currentDepth + 1);
147
+ }
148
+ }
149
+ }
150
+ };
151
+
152
+ //# sourceMappingURL=get-possible-nodes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../meerkat-core/src/utils/get-possible-nodes.ts"],"sourcesContent":["import { Graph, checkLoopInJoinPath, createDirectedGraph } from '../joins/joins';\nimport {\n Dimension,\n JoinPath,\n Measure,\n TableSchema,\n isJoinNode,\n} from '../types/cube-types';\n\nexport interface NestedMeasure {\n schema: Measure;\n children: NestedTableSchema[];\n}\n\nexport interface NestedDimension {\n schema: Dimension;\n children: NestedTableSchema[];\n}\n\nexport interface NestedTableSchema {\n name: string;\n measures: NestedMeasure[];\n dimensions: NestedDimension[];\n}\n\nexport const getNestedTableSchema = (\n tableSchemas: TableSchema[],\n joinPath: JoinPath[],\n depth: number\n) => {\n const tableSchemaSqlMap: { [key: string]: string } = {};\n for (const schema of tableSchemas) {\n if (!schema) {\n throw new Error('Schema is undefined');\n }\n tableSchemaSqlMap[schema.name] = schema.sql;\n }\n\n const directedGraph = createDirectedGraph(tableSchemas, tableSchemaSqlMap);\n\n const hasLoop = checkLoopInJoinPath(joinPath);\n if (hasLoop) {\n throw new Error('A loop was detected in the joins paths',);\n }\n const visitedNodes: { [key: string]: boolean } = {};\n\n const startingNode = tableSchemas.find(\n (schema) => schema.name === joinPath[0][0].left\n ) as TableSchema;\n\n visitedNodes[startingNode.name] = true;\n\n const nestedTableSchema: NestedTableSchema = {\n name: startingNode.name,\n measures: startingNode.measures.map((measure) => ({\n schema: measure,\n children: [],\n })),\n dimensions: startingNode.dimensions.map((dimension) => ({\n schema: dimension,\n children: [],\n })),\n };\n\n const checkedPaths: { [key: string]: boolean } = {};\n\n const buildNestedSchema = (\n edges: JoinPath,\n index: number,\n nestedTableSchema: NestedTableSchema,\n tableSchemas: TableSchema[]\n ): NestedTableSchema => {\n const edge = edges[index];\n\n /**\n * If there is no right table, return the nested schema immediately\n * This means there is a single node in the path.\n */\n\n if (!isJoinNode(edge)) {\n return nestedTableSchema;\n }\n\n // If the path has been checked before, return the nested schema immediately\n const pathKey = `${edge.left}-${edge.right}-${edge.on}`;\n if (checkedPaths[pathKey]) {\n nestedTableSchema.dimensions.map((dimension) => {\n dimension.children?.forEach((child) => {\n if (child.name === edge.right) {\n return buildNestedSchema(edges, index + 1, child, tableSchemas);\n }\n return;\n });\n });\n return nestedTableSchema;\n }\n\n const rightSchema = tableSchemas.find(\n (schema) => schema.name === edge.right\n ) as TableSchema;\n\n if (!rightSchema) {\n throw new Error(`The schema for ${edge.right} does not exist.`);\n }\n\n // Mark the path as checked\n checkedPaths[pathKey] = true;\n\n const nestedRightSchema: NestedTableSchema = {\n name: rightSchema.name,\n measures: (rightSchema.measures || []).map(\n (measure) => ({ schema: measure, children: [] } as NestedMeasure)\n ),\n dimensions: (rightSchema.dimensions || []).map(\n (dimension) => ({ schema: dimension, children: [] } as NestedDimension)\n ),\n };\n\n const nestedDimension = nestedTableSchema.dimensions.find(\n (dimension) => dimension.schema.name === edge.on\n ) as NestedMeasure;\n\n if (!nestedDimension) {\n throw new Error(\n `The dimension ${edge.on} does not exist in the table schema.`\n );\n }\n\n nestedDimension.children?.push(nestedRightSchema);\n\n // Mark the right schema as visited\n visitedNodes[rightSchema.name] = true;\n\n if (index < edges.length - 1) {\n buildNestedSchema(\n edges,\n index + 1,\n nestedRightSchema as NestedTableSchema,\n tableSchemas\n );\n }\n return nestedTableSchema;\n };\n\n for (let i = 0; i < joinPath.length; i++) {\n buildNestedSchema(joinPath[i], 0, nestedTableSchema, tableSchemas);\n }\n\n getNextPossibleNodes(\n directedGraph,\n nestedTableSchema,\n visitedNodes,\n tableSchemas,\n depth\n );\n\n return nestedTableSchema;\n};\n\nconst getNextPossibleNodes = (\n directedGraph: Graph,\n nestedTableSchema: NestedTableSchema,\n visitedNodes: { [key: string]: boolean },\n tableSchemas: TableSchema[],\n depth: number,\n currentDepth = 0\n) => {\n const currentNode = nestedTableSchema.name;\n\n /**\n * We are already iterating the next nodes for each dimension. It means we are already at the next level of depth.\n * So we should return if the current depth is greater than or equal to the depth we want to go to.\n */\n if (currentDepth >= depth) {\n return;\n }\n\n /**\n * Iterating through each dimension of the current node\n */\n for (let i = 0; i < nestedTableSchema.dimensions.length; i++) {\n const dimension = nestedTableSchema.dimensions[i];\n /**\n * Gettting the next possible nodes for the current dimension\n */\n const nextPossibleNodes = directedGraph[currentNode];\n if (!nextPossibleNodes) {\n return;\n }\n\n for (const [node] of Object.entries(nextPossibleNodes)) {\n /**\n * If the next node is not possible with the current dimension, continue to the next node\n */\n if (!nextPossibleNodes[node][dimension.schema.name]) {\n continue;\n }\n const nextSchema = tableSchemas.find(\n (schema) => schema.name === node\n ) as TableSchema;\n\n if (!nextSchema) {\n throw new Error(`The schema for ${node} does not exist.`);\n }\n\n if (!visitedNodes[nextSchema.name]) {\n const nestedNextSchema: NestedTableSchema = {\n name: nextSchema.name,\n measures: nextSchema.measures.map((measure) => ({\n schema: measure,\n children: [],\n })),\n dimensions: nextSchema.dimensions.map((dimension) => ({\n schema: dimension,\n children: [],\n })),\n };\n if (\n !dimension.children?.some(\n (child) => child.name === nestedNextSchema.name\n )\n ) {\n dimension.children?.push(nestedNextSchema);\n }\n }\n for (const children of dimension.children || []) {\n if (visitedNodes[children.name] && currentDepth > 0) {\n continue;\n }\n\n getNextPossibleNodes(\n directedGraph,\n children,\n visitedNodes,\n tableSchemas,\n depth,\n visitedNodes[children.name] ? 0 : currentDepth + 1\n );\n }\n }\n }\n};\n"],"names":["getNestedTableSchema","tableSchemas","joinPath","depth","tableSchemaSqlMap","schema","Error","name","sql","directedGraph","createDirectedGraph","hasLoop","checkLoopInJoinPath","visitedNodes","startingNode","find","left","nestedTableSchema","measures","map","measure","children","dimensions","dimension","checkedPaths","buildNestedSchema","edges","index","nestedDimension","edge","isJoinNode","pathKey","right","on","forEach","child","rightSchema","nestedRightSchema","push","length","i","getNextPossibleNodes","currentDepth","currentNode","nextPossibleNodes","node","Object","entries","nextSchema","nestedNextSchema","some"],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export declare function getTypeInfo(num: number): {
2
+ type: string;
3
+ alias: string;
4
+ width: number;
5
+ scale: number;
6
+ };
7
+ export declare const convertFloatToInt: (num: number) => number;
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ function _export(target, all) {
3
+ for(var name in all)Object.defineProperty(target, name, {
4
+ enumerable: true,
5
+ get: all[name]
6
+ });
7
+ }
8
+ _export(exports, {
9
+ getTypeInfo: function() {
10
+ return getTypeInfo;
11
+ },
12
+ convertFloatToInt: function() {
13
+ return convertFloatToInt;
14
+ }
15
+ });
16
+ function getTypeInfo(num) {
17
+ var _numString_split_;
18
+ const numString = num.toString();
19
+ let width = numString.length;
20
+ if (numString.includes('.')) {
21
+ width -= 1; // subtract 1 to exclude the dot from the count of digits
22
+ }
23
+ /**
24
+ * If the number is a whole number, then the scale is 0
25
+ * If the number is a floating point number, then the scale is the number of digits after the decimal
26
+ */ const scale = ((_numString_split_ = numString.split('.')[1]) == null ? void 0 : _numString_split_.length) || 0;
27
+ const typeInfo = {
28
+ type: 'DECIMAL_TYPE_INFO',
29
+ alias: '',
30
+ width: width,
31
+ scale: scale
32
+ };
33
+ return typeInfo;
34
+ }
35
+ const convertFloatToInt = (num)=>{
36
+ const numString = num.toString();
37
+ //Remove dot from the number string
38
+ const numStringWithoutDot = numString.replace('.', '');
39
+ //Convert the number string to a number
40
+ const numWithoutDot = parseInt(numStringWithoutDot);
41
+ return numWithoutDot;
42
+ };
43
+
44
+ //# sourceMappingURL=get-type-info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../meerkat-core/src/utils/get-type-info.ts"],"sourcesContent":["export function getTypeInfo(num: number) {\n const numString = num.toString();\n\n let width = numString.length;\n if (numString.includes('.')) {\n width -= 1; // subtract 1 to exclude the dot from the count of digits\n }\n\n /**\n * If the number is a whole number, then the scale is 0\n * If the number is a floating point number, then the scale is the number of digits after the decimal\n */\n const scale = numString.split('.')[1]?.length || 0;\n\n const typeInfo = {\n type: 'DECIMAL_TYPE_INFO',\n alias: '',\n width: width,\n scale: scale,\n };\n\n return typeInfo;\n}\n\nexport const convertFloatToInt = (num: number) => {\n const numString = num.toString();\n\n //Remove dot from the number string\n const numStringWithoutDot = numString.replace('.', '');\n\n //Convert the number string to a number\n const numWithoutDot = parseInt(numStringWithoutDot);\n\n return numWithoutDot;\n};\n"],"names":["getTypeInfo","convertFloatToInt","num","numString","toString","width","length","includes","scale","split","typeInfo","type","alias","numStringWithoutDot","replace","numWithoutDot","parseInt"],"mappings":";;;;;;;;IAAgBA,WAAW;eAAXA;;IAwBHC,iBAAiB;eAAjBA;;;AAxBN,SAASD,YAAYE,GAAW;QAYvBC;IAXd,MAAMA,YAAYD,IAAIE,QAAQ;IAE9B,IAAIC,QAAQF,UAAUG,MAAM;IAC5B,IAAIH,UAAUI,QAAQ,CAAC,MAAM;QAC3BF,SAAS,GAAG,yDAAyD;IACvE;IAEA;;;GAGC,GACD,MAAMG,QAAQL,EAAAA,oBAAAA,UAAUM,KAAK,CAAC,IAAI,CAAC,EAAE,qBAAvBN,kBAAyBG,MAAM,KAAI;IAEjD,MAAMI,WAAW;QACfC,MAAM;QACNC,OAAO;QACPP,OAAOA;QACPG,OAAOA;IACT;IAEA,OAAOE;AACT;AAEO,MAAMT,oBAAoB,CAACC;IAChC,MAAMC,YAAYD,IAAIE,QAAQ;IAE9B,mCAAmC;IACnC,MAAMS,sBAAsBV,UAAUW,OAAO,CAAC,KAAK;IAEnD,uCAAuC;IACvC,MAAMC,gBAAgBC,SAASH;IAE/B,OAAOE;AACT"}
@@ -0,0 +1,4 @@
1
+ import { DimensionType, MeasureType } from '../types/cube-types';
2
+ type CubeType = DimensionType | MeasureType;
3
+ export declare const isArrayTypeMember: (type: CubeType) => boolean;
4
+ export {};
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "isArrayTypeMember", {
3
+ enumerable: true,
4
+ get: function() {
5
+ return isArrayTypeMember;
6
+ }
7
+ });
8
+ const isArrayTypeMember = (type)=>{
9
+ return type.endsWith('_array');
10
+ };
11
+
12
+ //# sourceMappingURL=is-array-member-type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../meerkat-core/src/utils/is-array-member-type.ts"],"sourcesContent":["import { DimensionType, MeasureType } from '../types/cube-types';\n\ntype CubeType = DimensionType | MeasureType;\n\nexport const isArrayTypeMember = (type: CubeType) => {\n return type.endsWith('_array');\n};\n"],"names":["isArrayTypeMember","type","endsWith"],"mappings":";+BAIaA;;;eAAAA;;;AAAN,MAAMA,oBAAoB,CAACC;IAChC,OAAOA,KAAKC,QAAQ,CAAC;AACvB"}
@@ -0,0 +1,2 @@
1
+ import { Measure, TableSchema } from '../types/cube-types/table';
2
+ export declare const getMemberInfoFromTableSchema: (memberKey: string, tableSchema: TableSchema) => Measure | undefined;
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "getMemberInfoFromTableSchema", {
3
+ enumerable: true,
4
+ get: function() {
5
+ return getMemberInfoFromTableSchema;
6
+ }
7
+ });
8
+ const getMemberInfoFromTableSchema = (memberKey, tableSchema)=>{
9
+ let memberInfo;
10
+ const memberKeyName = memberKey.split('.')[1];
11
+ /**
12
+ * Finding the table key from the measures.
13
+ */ for(let i = 0; i < tableSchema.measures.length; i++){
14
+ const measure = tableSchema.measures[i];
15
+ const key = measure.name;
16
+ if (!key || key !== memberKeyName) {
17
+ continue;
18
+ }
19
+ memberInfo = measure;
20
+ return memberInfo;
21
+ }
22
+ for(let i = 0; i < tableSchema.dimensions.length; i++){
23
+ const dimension = tableSchema.dimensions[i];
24
+ const key = dimension.name;
25
+ if (!key || key !== memberKeyName) {
26
+ continue;
27
+ }
28
+ memberInfo = dimension;
29
+ return memberInfo;
30
+ }
31
+ return;
32
+ };
33
+
34
+ //# sourceMappingURL=key-from-measures-dimension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../meerkat-core/src/utils/key-from-measures-dimension.ts"],"sourcesContent":["import { Dimension, Measure, TableSchema } from '../types/cube-types/table';\n\nexport const getMemberInfoFromTableSchema = (\n memberKey: string,\n tableSchema: TableSchema,\n) => {\n let memberInfo: Measure | Dimension | undefined;\n\n const memberKeyName = memberKey.split('.')[1];\n\n /**\n * Finding the table key from the measures.\n */\n for (let i = 0; i < tableSchema.measures.length; i++) {\n const measure = tableSchema.measures[i];\n const key = measure.name;\n if (!key || key !== memberKeyName) {\n continue;\n }\n\n memberInfo = measure;\n return memberInfo;\n }\n\n for (let i = 0; i < tableSchema.dimensions.length; i++) {\n const dimension = tableSchema.dimensions[i];\n const key = dimension.name;\n\n if (!key || key !== memberKeyName) {\n continue;\n }\n\n memberInfo = dimension;\n return memberInfo;\n }\n return;\n};\n"],"names":["getMemberInfoFromTableSchema","memberKey","tableSchema","memberInfo","memberKeyName","split","i","measures","length","measure","key","name","dimensions","dimension"],"mappings":";+BAEaA;;;eAAAA;;;AAAN,MAAMA,+BAA+B,CAC1CC,WACAC;IAEA,IAAIC;IAEJ,MAAMC,gBAAgBH,UAAUI,KAAK,CAAC,IAAI,CAAC,EAAE;IAE7C;;GAEC,GACD,IAAK,IAAIC,IAAI,GAAGA,IAAIJ,YAAYK,QAAQ,CAACC,MAAM,EAAEF,IAAK;QACpD,MAAMG,UAAUP,YAAYK,QAAQ,CAACD,EAAE;QACvC,MAAMI,MAAMD,QAAQE,IAAI;QACxB,IAAI,CAACD,OAAOA,QAAQN,eAAe;YACjC;QACF;QAEAD,aAAaM;QACb,OAAON;IACT;IAEA,IAAK,IAAIG,IAAI,GAAGA,IAAIJ,YAAYU,UAAU,CAACJ,MAAM,EAAEF,IAAK;QACtD,MAAMO,YAAYX,YAAYU,UAAU,CAACN,EAAE;QAC3C,MAAMI,MAAMG,UAAUF,IAAI;QAE1B,IAAI,CAACD,OAAOA,QAAQN,eAAe;YACjC;QACF;QAEAD,aAAaU;QACb,OAAOV;IACT;IACA;AACF"}
@@ -0,0 +1 @@
1
+ export declare const meerkatPlaceholderReplacer: (sql: string, tableName: string) => string;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "meerkatPlaceholderReplacer", {
3
+ enumerable: true,
4
+ get: function() {
5
+ return meerkatPlaceholderReplacer;
6
+ }
7
+ });
8
+ const _constants = require("./constants");
9
+ const meerkatPlaceholderReplacer = (sql, tableName)=>{
10
+ const tableNameEncapsulationRegEx = /\{MEERKAT\}\./g;
11
+ return sql.replace(tableNameEncapsulationRegEx, tableName + _constants.MEERKAT_OUTPUT_DELIMITER);
12
+ };
13
+
14
+ //# sourceMappingURL=meerkat-placeholder-replacer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../meerkat-core/src/utils/meerkat-placeholder-replacer.ts"],"sourcesContent":["import { MEERKAT_OUTPUT_DELIMITER } from \"./constants\";\n\nexport const meerkatPlaceholderReplacer = (sql: string, tableName: string) => {\n const tableNameEncapsulationRegEx =/\\{MEERKAT\\}\\./g;\n return sql.replace(tableNameEncapsulationRegEx, tableName + MEERKAT_OUTPUT_DELIMITER )\n}\n"],"names":["meerkatPlaceholderReplacer","sql","tableName","tableNameEncapsulationRegEx","replace","MEERKAT_OUTPUT_DELIMITER"],"mappings":";+BAEaA;;;eAAAA;;;2BAF4B;AAElC,MAAMA,6BAA6B,CAACC,KAAaC;IACpD,MAAMC,8BAA6B;IACnC,OAAOF,IAAIG,OAAO,CAACD,6BAA6BD,YAAYG,mCAAwB;AACxF"}
@@ -0,0 +1 @@
1
+ export declare const memberKeyToSafeKey: (memberKey: string) => string;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "memberKeyToSafeKey", {
3
+ enumerable: true,
4
+ get: function() {
5
+ return memberKeyToSafeKey;
6
+ }
7
+ });
8
+ const _constants = require("./constants");
9
+ const memberKeyToSafeKey = (memberKey)=>{
10
+ return memberKey.split(_constants.MEERKAT_INPUT_DELIMITER).join(_constants.MEERKAT_OUTPUT_DELIMITER);
11
+ };
12
+
13
+ //# sourceMappingURL=member-key-to-safe-key.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../meerkat-core/src/utils/member-key-to-safe-key.ts"],"sourcesContent":["import { MEERKAT_INPUT_DELIMITER, MEERKAT_OUTPUT_DELIMITER } from \"./constants\";\n\nexport const memberKeyToSafeKey = (memberKey: string) => {\n return memberKey.split(MEERKAT_INPUT_DELIMITER).join(MEERKAT_OUTPUT_DELIMITER);\n};\n"],"names":["memberKeyToSafeKey","memberKey","split","MEERKAT_INPUT_DELIMITER","join","MEERKAT_OUTPUT_DELIMITER"],"mappings":";+BAEaA;;;eAAAA;;;2BAFqD;AAE3D,MAAMA,qBAAqB,CAACC;IACjC,OAAOA,UAAUC,KAAK,CAACC,kCAAuB,EAAEC,IAAI,CAACC,mCAAwB;AAC/E"}
@@ -0,0 +1,3 @@
1
+ import { QueryFiltersWithInfo } from "../cube-to-duckdb/cube-filter-to-duckdb";
2
+ import { QueryFilter } from "../types/cube-types";
3
+ export declare const modifyLeafMeerkatFilter: <T>(filters: QueryFiltersWithInfo, callback: (arg: QueryFilter) => T) => T[] | undefined;
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "modifyLeafMeerkatFilter", {
3
+ enumerable: true,
4
+ get: function() {
5
+ return modifyLeafMeerkatFilter;
6
+ }
7
+ });
8
+ const _extends = require("@swc/helpers/_/_extends");
9
+ const modifyLeafMeerkatFilter = (filters, callback)=>{
10
+ /*
11
+ ** This function traverse the QueryFiltersWithInfo JSON, and calls the callback for each leaf type.
12
+ ** This way we need no rewrite the traversal logic again and again.
13
+ ** The return value of the callback will show up the same path in the resulting object as in the original object
14
+ */ if (!filters) return undefined;
15
+ return filters.map((item)=>{
16
+ if ('member' in item) {
17
+ return callback(item);
18
+ } else {
19
+ const andPayload = 'and' in item ? modifyLeafMeerkatFilter(item.and, callback) : undefined;
20
+ const orPayload = 'or' in item ? modifyLeafMeerkatFilter(item.or, callback) : undefined;
21
+ return _extends._({}, andPayload ? {
22
+ and: andPayload
23
+ } : {}, orPayload ? {
24
+ or: orPayload
25
+ } : {});
26
+ }
27
+ });
28
+ };
29
+
30
+ //# sourceMappingURL=modify-meerkat-filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../meerkat-core/src/utils/modify-meerkat-filter.ts"],"sourcesContent":["import { QueryFiltersWithInfo } from \"../cube-to-duckdb/cube-filter-to-duckdb\";\nimport { QueryFilter } from \"../types/cube-types\";\n\nexport const modifyLeafMeerkatFilter = <T>(filters: QueryFiltersWithInfo, callback: (arg: QueryFilter) => T): T[] | undefined => {\n /*\n ** This function traverse the QueryFiltersWithInfo JSON, and calls the callback for each leaf type.\n ** This way we need no rewrite the traversal logic again and again.\n ** The return value of the callback will show up the same path in the resulting object as in the original object\n */\n if (!filters) return undefined;\n return filters.map((item) => {\n if ('member' in item) {\n return callback(item)\n } else {\n const andPayload: T[] | undefined = 'and' in item ? modifyLeafMeerkatFilter(item.and, callback) : undefined;\n const orPayload: T[] | undefined = 'or' in item ? modifyLeafMeerkatFilter(item.or, callback) : undefined;\n \n return {\n ...(andPayload ? { and: andPayload } : {}),\n ...(orPayload ? { or: orPayload } : {}),\n } as T\n }\n })\n};\n"],"names":["modifyLeafMeerkatFilter","filters","callback","undefined","map","item","andPayload","and","orPayload","or"],"mappings":";+BAGaA;;;eAAAA;;;;AAAN,MAAMA,0BAA0B,CAAIC,SAA+BC;IACxE;;;;EAIA,GACA,IAAI,CAACD,SAAS,OAAOE;IACrB,OAAOF,QAAQG,GAAG,CAAC,CAACC;QAClB,IAAI,YAAYA,MAAM;YACpB,OAAOH,SAASG;QAClB,OAAO;YACL,MAAMC,aAA8B,SAASD,OAAOL,wBAAwBK,KAAKE,GAAG,EAAEL,YAAYC;YAClG,MAAMK,YAA6B,QAAQH,OAAQL,wBAAwBK,KAAKI,EAAE,EAAEP,YAAYC;YAEhG,OAAO,eACDG,aAAa;gBAAEC,KAAKD;YAAW,IAAI,CAAC,GACpCE,YAAY;gBAAEC,IAAID;YAAU,IAAI,CAAC;QAEzC;IACF;AACF"}
@@ -0,0 +1,8 @@
1
+ import { LogicalAndFilter, LogicalOrFilter, QueryFilter } from '../types/cube-types/query';
2
+ import { ConjunctionExpression, ParsedExpression } from '../types/duckdb-serialization-types/serialization/ParsedExpression';
3
+ export declare function isLogicalAndOR(expression: QueryFilter | LogicalAndFilter | LogicalOrFilter): expression is LogicalAndFilter | LogicalOrFilter;
4
+ export declare function isLogicalAnd(expression: QueryFilter | LogicalAndFilter | LogicalOrFilter): expression is LogicalAndFilter;
5
+ export declare function isLogicalOr(expression: QueryFilter | LogicalAndFilter | LogicalOrFilter): expression is LogicalOrFilter;
6
+ export declare function isQueryFilter(expression: QueryFilter | LogicalAndFilter | LogicalOrFilter): expression is QueryFilter;
7
+ export declare function isFilterArray(expression: (QueryFilter | LogicalAndFilter | LogicalOrFilter) | (QueryFilter | LogicalAndFilter | LogicalOrFilter)[]): expression is (QueryFilter | LogicalAndFilter | LogicalOrFilter)[];
8
+ export declare function hasChildren(whereObj: ParsedExpression | null): whereObj is ConjunctionExpression;
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ function _export(target, all) {
3
+ for(var name in all)Object.defineProperty(target, name, {
4
+ enumerable: true,
5
+ get: all[name]
6
+ });
7
+ }
8
+ _export(exports, {
9
+ isLogicalAndOR: function() {
10
+ return isLogicalAndOR;
11
+ },
12
+ isLogicalAnd: function() {
13
+ return isLogicalAnd;
14
+ },
15
+ isLogicalOr: function() {
16
+ return isLogicalOr;
17
+ },
18
+ isQueryFilter: function() {
19
+ return isQueryFilter;
20
+ },
21
+ isFilterArray: function() {
22
+ return isFilterArray;
23
+ },
24
+ hasChildren: function() {
25
+ return hasChildren;
26
+ }
27
+ });
28
+ function isLogicalAndOR(expression) {
29
+ if (!expression) {
30
+ return false;
31
+ }
32
+ if (Object.prototype.hasOwnProperty.call(expression, 'and') || Object.prototype.hasOwnProperty.call(expression, 'or')) {
33
+ return true;
34
+ }
35
+ return false;
36
+ }
37
+ function isLogicalAnd(expression) {
38
+ if (!expression) {
39
+ return false;
40
+ }
41
+ if (Object.prototype.hasOwnProperty.call(expression, 'and')) {
42
+ return true;
43
+ }
44
+ return false;
45
+ }
46
+ function isLogicalOr(expression) {
47
+ if (!expression) {
48
+ return false;
49
+ }
50
+ if (Object.prototype.hasOwnProperty.call(expression, 'or')) {
51
+ return true;
52
+ }
53
+ return false;
54
+ }
55
+ function isQueryFilter(expression) {
56
+ if (!expression) {
57
+ return false;
58
+ }
59
+ if (Object.prototype.hasOwnProperty.call(expression, 'member')) {
60
+ return true;
61
+ }
62
+ return false;
63
+ }
64
+ function isFilterArray(expression) {
65
+ if (!expression) {
66
+ return false;
67
+ }
68
+ if (Array.isArray(expression)) {
69
+ return true;
70
+ }
71
+ return false;
72
+ }
73
+ function hasChildren(whereObj) {
74
+ if (!whereObj) {
75
+ return false;
76
+ }
77
+ if (Object.prototype.hasOwnProperty.call(whereObj, 'children')) {
78
+ return true;
79
+ }
80
+ return false;
81
+ }
82
+
83
+ //# sourceMappingURL=type-guards.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../meerkat-core/src/utils/type-guards.ts"],"sourcesContent":["import { LogicalAndFilter, LogicalOrFilter, QueryFilter } from '../types/cube-types/query';\nimport { ConjunctionExpression, ParsedExpression } from '../types/duckdb-serialization-types/serialization/ParsedExpression';\n\nexport function isLogicalAndOR(\n expression: QueryFilter | LogicalAndFilter | LogicalOrFilter\n): expression is LogicalAndFilter | LogicalOrFilter {\n if (!expression) {\n return false;\n }\n if (\n Object.prototype.hasOwnProperty.call(expression, 'and') ||\n Object.prototype.hasOwnProperty.call(expression, 'or')\n ) {\n return true;\n }\n return false;\n}\n\nexport function isLogicalAnd(\n expression: QueryFilter | LogicalAndFilter | LogicalOrFilter\n): expression is LogicalAndFilter {\n if (!expression) {\n return false;\n }\n if (Object.prototype.hasOwnProperty.call(expression, 'and')) {\n return true;\n }\n return false;\n}\n\nexport function isLogicalOr(\n expression: QueryFilter | LogicalAndFilter | LogicalOrFilter\n): expression is LogicalOrFilter {\n if (!expression) {\n return false;\n }\n if (Object.prototype.hasOwnProperty.call(expression, 'or')) {\n return true;\n }\n return false;\n}\n\nexport function isQueryFilter(\n expression: QueryFilter | LogicalAndFilter | LogicalOrFilter\n): expression is QueryFilter {\n if (!expression) {\n return false;\n }\n if (Object.prototype.hasOwnProperty.call(expression, 'member')) {\n return true;\n }\n return false;\n}\n\nexport function isFilterArray(\n expression:\n | (QueryFilter | LogicalAndFilter | LogicalOrFilter)\n | (QueryFilter | LogicalAndFilter | LogicalOrFilter)[]\n): expression is (QueryFilter | LogicalAndFilter | LogicalOrFilter)[] {\n if (!expression) {\n return false;\n }\n if (Array.isArray(expression)) {\n return true;\n }\n return false;\n}\n\nexport function hasChildren(\n whereObj: ParsedExpression | null\n): whereObj is ConjunctionExpression {\n if (!whereObj) {\n return false;\n }\n if (Object.prototype.hasOwnProperty.call(whereObj, 'children')) {\n return true;\n }\n return false;\n}\n"],"names":["isLogicalAndOR","isLogicalAnd","isLogicalOr","isQueryFilter","isFilterArray","hasChildren","expression","Object","prototype","hasOwnProperty","call","Array","isArray","whereObj"],"mappings":";;;;;;;;IAGgBA,cAAc;eAAdA;;IAeAC,YAAY;eAAZA;;IAYAC,WAAW;eAAXA;;IAYAC,aAAa;eAAbA;;IAYAC,aAAa;eAAbA;;IAcAC,WAAW;eAAXA;;;AAjET,SAASL,eACdM,UAA4D;IAE5D,IAAI,CAACA,YAAY;QACf,OAAO;IACT;IACA,IACEC,OAAOC,SAAS,CAACC,cAAc,CAACC,IAAI,CAACJ,YAAY,UACjDC,OAAOC,SAAS,CAACC,cAAc,CAACC,IAAI,CAACJ,YAAY,OACjD;QACA,OAAO;IACT;IACA,OAAO;AACT;AAEO,SAASL,aACdK,UAA4D;IAE5D,IAAI,CAACA,YAAY;QACf,OAAO;IACT;IACA,IAAIC,OAAOC,SAAS,CAACC,cAAc,CAACC,IAAI,CAACJ,YAAY,QAAQ;QAC3D,OAAO;IACT;IACA,OAAO;AACT;AAEO,SAASJ,YACdI,UAA4D;IAE5D,IAAI,CAACA,YAAY;QACf,OAAO;IACT;IACA,IAAIC,OAAOC,SAAS,CAACC,cAAc,CAACC,IAAI,CAACJ,YAAY,OAAO;QAC1D,OAAO;IACT;IACA,OAAO;AACT;AAEO,SAASH,cACdG,UAA4D;IAE5D,IAAI,CAACA,YAAY;QACf,OAAO;IACT;IACA,IAAIC,OAAOC,SAAS,CAACC,cAAc,CAACC,IAAI,CAACJ,YAAY,WAAW;QAC9D,OAAO;IACT;IACA,OAAO;AACT;AAEO,SAASF,cACdE,UAEwD;IAExD,IAAI,CAACA,YAAY;QACf,OAAO;IACT;IACA,IAAIK,MAAMC,OAAO,CAACN,aAAa;QAC7B,OAAO;IACT;IACA,OAAO;AACT;AAEO,SAASD,YACdQ,QAAiC;IAEjC,IAAI,CAACA,UAAU;QACb,OAAO;IACT;IACA,IAAIN,OAAOC,SAAS,CAACC,cAAc,CAACC,IAAI,CAACG,UAAU,aAAa;QAC9D,OAAO;IACT;IACA,OAAO;AACT"}