@devrev/meerkat-core 0.0.97 → 0.0.98

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 (357) hide show
  1. package/package.json +2 -2
  2. package/src/ast-builder/ast-builder.js +91 -0
  3. package/src/ast-builder/ast-builder.js.map +1 -0
  4. package/src/ast-deserializer/ast-deserializer.js +17 -0
  5. package/src/ast-deserializer/ast-deserializer.js.map +1 -0
  6. package/src/ast-serializer/ast-serializer.js +8 -0
  7. package/src/ast-serializer/ast-serializer.js.map +1 -0
  8. package/src/ast-validator/dimension-validator.js +49 -0
  9. package/src/ast-validator/dimension-validator.js.map +1 -0
  10. package/src/ast-validator/index.js +12 -0
  11. package/src/ast-validator/index.js.map +1 -0
  12. package/src/ast-validator/measure-validator.js +155 -0
  13. package/src/ast-validator/measure-validator.js.map +1 -0
  14. package/{ast-validator → src/ast-validator}/tests/test-data.js +692 -890
  15. package/src/ast-validator/tests/test-data.js.map +1 -0
  16. package/src/ast-validator/types.js +3 -0
  17. package/src/ast-validator/types.js.map +1 -0
  18. package/src/ast-validator/utils.js +24 -0
  19. package/src/ast-validator/utils.js.map +1 -0
  20. package/src/context-params/context-params-ast.js +42 -0
  21. package/src/context-params/context-params-ast.js.map +1 -0
  22. package/src/cube-filter-transformer/and/and.js +14 -0
  23. package/src/cube-filter-transformer/and/and.js.map +1 -0
  24. package/src/cube-filter-transformer/base-condition-builder/base-condition-builder.js +145 -0
  25. package/src/cube-filter-transformer/base-condition-builder/base-condition-builder.js.map +1 -0
  26. package/src/cube-filter-transformer/contains/contains.js +62 -0
  27. package/src/cube-filter-transformer/contains/contains.js.map +1 -0
  28. package/src/cube-filter-transformer/equals/equals-array.js +71 -0
  29. package/src/cube-filter-transformer/equals/equals-array.js.map +1 -0
  30. package/src/cube-filter-transformer/equals/equals.js +36 -0
  31. package/src/cube-filter-transformer/equals/equals.js.map +1 -0
  32. package/src/cube-filter-transformer/factory.js +120 -0
  33. package/src/cube-filter-transformer/factory.js.map +1 -0
  34. package/src/cube-filter-transformer/gt/gt.js +28 -0
  35. package/src/cube-filter-transformer/gt/gt.js.map +1 -0
  36. package/src/cube-filter-transformer/gte/gte.js +28 -0
  37. package/src/cube-filter-transformer/gte/gte.js.map +1 -0
  38. package/src/cube-filter-transformer/in/in.js +69 -0
  39. package/src/cube-filter-transformer/in/in.js.map +1 -0
  40. package/src/cube-filter-transformer/in-date-range/in-date-range.js +21 -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.js +28 -0
  43. package/src/cube-filter-transformer/lt/lt.js.map +1 -0
  44. package/src/cube-filter-transformer/lte/lte.js +28 -0
  45. package/src/cube-filter-transformer/lte/lte.js.map +1 -0
  46. package/src/cube-filter-transformer/not/not.js +14 -0
  47. package/src/cube-filter-transformer/not/not.js.map +1 -0
  48. package/src/cube-filter-transformer/not-In-date-range/not-In-date-range.js +21 -0
  49. package/src/cube-filter-transformer/not-In-date-range/not-In-date-range.js.map +1 -0
  50. package/src/cube-filter-transformer/not-contains/not-contains.js +62 -0
  51. package/src/cube-filter-transformer/not-contains/not-contains.js.map +1 -0
  52. package/src/cube-filter-transformer/not-equals/not-equals-array.js +21 -0
  53. package/src/cube-filter-transformer/not-equals/not-equals-array.js.map +1 -0
  54. package/src/cube-filter-transformer/not-equals/not-equals.js +36 -0
  55. package/src/cube-filter-transformer/not-equals/not-equals.js.map +1 -0
  56. package/src/cube-filter-transformer/not-in/not-in.js +76 -0
  57. package/src/cube-filter-transformer/not-in/not-in.js.map +1 -0
  58. package/src/cube-filter-transformer/not-set/not-set.js +23 -0
  59. package/src/cube-filter-transformer/not-set/not-set.js.map +1 -0
  60. package/src/cube-filter-transformer/or/or.js +14 -0
  61. package/src/cube-filter-transformer/or/or.js.map +1 -0
  62. package/src/cube-filter-transformer/set/set.js +23 -0
  63. package/src/cube-filter-transformer/set/set.js.map +1 -0
  64. package/src/cube-group-by-transformer/cube-group-by-transformer.js +19 -0
  65. package/src/cube-group-by-transformer/cube-group-by-transformer.js.map +1 -0
  66. package/src/cube-limit-offset-transformer/cube-limit-offset-transformer.js +42 -0
  67. package/src/cube-limit-offset-transformer/cube-limit-offset-transformer.js.map +1 -0
  68. package/src/cube-measure-transformer/cube-measure-transformer.js +124 -0
  69. package/src/cube-measure-transformer/cube-measure-transformer.js.map +1 -0
  70. package/src/cube-order-by-transformer/cube-order-by-transformer.js +34 -0
  71. package/src/cube-order-by-transformer/cube-order-by-transformer.js.map +1 -0
  72. package/src/cube-to-duckdb/cube-filter-to-duckdb.js +3 -0
  73. package/src/cube-to-duckdb/cube-filter-to-duckdb.js.map +1 -0
  74. package/src/filter-params/filter-params-ast.js +114 -0
  75. package/src/filter-params/filter-params-ast.js.map +1 -0
  76. package/src/get-filter-params-sql/get-filter-params-sql.js +25 -0
  77. package/src/get-filter-params-sql/get-filter-params-sql.js.map +1 -0
  78. package/src/get-final-base-sql/get-final-base-sql.js +28 -0
  79. package/src/get-final-base-sql/get-final-base-sql.js.map +1 -0
  80. package/{get-wrapped-base-query-with-projections → src/get-wrapped-base-query-with-projections}/get-aliased-columns-from-filters.js +39 -64
  81. package/src/get-wrapped-base-query-with-projections/get-aliased-columns-from-filters.js.map +1 -0
  82. package/src/get-wrapped-base-query-with-projections/get-projection-clause.js +83 -0
  83. package/src/get-wrapped-base-query-with-projections/get-projection-clause.js.map +1 -0
  84. package/src/get-wrapped-base-query-with-projections/get-wrapped-base-query-with-projections.js +32 -0
  85. package/src/get-wrapped-base-query-with-projections/get-wrapped-base-query-with-projections.js.map +1 -0
  86. package/src/get-wrapped-base-query-with-projections/sql-expression-modifiers.js +32 -0
  87. package/src/get-wrapped-base-query-with-projections/sql-expression-modifiers.js.map +1 -0
  88. package/src/index.js +37 -0
  89. package/src/index.js.map +1 -0
  90. package/src/joins/joins.js +162 -0
  91. package/src/joins/joins.js.map +1 -0
  92. package/src/member-formatters/constants.js +6 -0
  93. package/src/member-formatters/constants.js.map +1 -0
  94. package/src/member-formatters/index.js +10 -0
  95. package/src/member-formatters/index.js.map +1 -0
  96. package/src/member-formatters/member-key-to-safe-key.js +9 -0
  97. package/src/member-formatters/member-key-to-safe-key.js.map +1 -0
  98. package/src/member-formatters/split-into-data-source-and-fields.js +10 -0
  99. package/src/member-formatters/split-into-data-source-and-fields.js.map +1 -0
  100. package/src/resolution/resolution.js +112 -0
  101. package/src/resolution/resolution.js.map +1 -0
  102. package/src/resolution/types.js +5 -0
  103. package/src/resolution/types.js.map +1 -0
  104. package/src/types/cube-types/index.js +6 -0
  105. package/src/types/cube-types/index.js.map +1 -0
  106. package/src/types/cube-types/query.js +8 -0
  107. package/src/types/cube-types/query.js.map +1 -0
  108. package/src/types/cube-types/table.js +3 -0
  109. package/src/types/cube-types/table.js.map +1 -0
  110. package/src/types/duckdb-serialization-types/index.js +11 -0
  111. package/src/types/duckdb-serialization-types/index.js.map +1 -0
  112. package/{types → src/types}/duckdb-serialization-types/serialization/Constraint.js +6 -19
  113. package/src/types/duckdb-serialization-types/serialization/Constraint.js.map +1 -0
  114. package/{types → src/types}/duckdb-serialization-types/serialization/CreateInfo.js +10 -29
  115. package/src/types/duckdb-serialization-types/serialization/CreateInfo.js.map +1 -0
  116. package/{types → src/types}/duckdb-serialization-types/serialization/Expression.js +6 -19
  117. package/src/types/duckdb-serialization-types/serialization/Expression.js.map +1 -0
  118. package/src/types/duckdb-serialization-types/serialization/LogicalOperator.js +28 -0
  119. package/src/types/duckdb-serialization-types/serialization/LogicalOperator.js.map +1 -0
  120. package/src/types/duckdb-serialization-types/serialization/MacroFunction.js +10 -0
  121. package/src/types/duckdb-serialization-types/serialization/MacroFunction.js.map +1 -0
  122. package/src/types/duckdb-serialization-types/serialization/Misc.js +3 -0
  123. package/src/types/duckdb-serialization-types/serialization/Misc.js.map +1 -0
  124. package/{types → src/types}/duckdb-serialization-types/serialization/Nodes.js +17 -45
  125. package/src/types/duckdb-serialization-types/serialization/Nodes.js.map +1 -0
  126. package/{types → src/types}/duckdb-serialization-types/serialization/ParseInfo.js +20 -54
  127. package/src/types/duckdb-serialization-types/serialization/ParseInfo.js.map +1 -0
  128. package/{types → src/types}/duckdb-serialization-types/serialization/ParsedExpression.js +6 -19
  129. package/src/types/duckdb-serialization-types/serialization/ParsedExpression.js.map +1 -0
  130. package/{types → src/types}/duckdb-serialization-types/serialization/QueryNode.js +8 -24
  131. package/src/types/duckdb-serialization-types/serialization/QueryNode.js.map +1 -0
  132. package/{types → src/types}/duckdb-serialization-types/serialization/ResultModifier.js +4 -9
  133. package/src/types/duckdb-serialization-types/serialization/ResultModifier.js.map +1 -0
  134. package/src/types/duckdb-serialization-types/serialization/Statement.js +3 -0
  135. package/src/types/duckdb-serialization-types/serialization/Statement.js.map +1 -0
  136. package/{types → src/types}/duckdb-serialization-types/serialization/TableFilter.js +4 -9
  137. package/src/types/duckdb-serialization-types/serialization/TableFilter.js.map +1 -0
  138. package/{types → src/types}/duckdb-serialization-types/serialization/TableRef.js +8 -24
  139. package/src/types/duckdb-serialization-types/serialization/TableRef.js.map +1 -0
  140. package/{types → src/types}/duckdb-serialization-types/serialization/Types.js +4 -9
  141. package/src/types/duckdb-serialization-types/serialization/Types.js.map +1 -0
  142. package/src/types/duckdb-serialization-types/serialization/example.js +109 -0
  143. package/src/types/duckdb-serialization-types/serialization/example.js.map +1 -0
  144. package/src/types/utils.js +69 -0
  145. package/src/types/utils.js.map +1 -0
  146. package/{utils → src/utils}/__fixtures__/joins.fixtures.js +228 -316
  147. package/src/utils/__fixtures__/joins.fixtures.js.map +1 -0
  148. package/src/utils/base-ast.js +49 -0
  149. package/src/utils/base-ast.js.map +1 -0
  150. package/src/utils/cube-filter-enrichment.js +53 -0
  151. package/src/utils/cube-filter-enrichment.js.map +1 -0
  152. package/{utils → src/utils}/cube-to-table-schema.js +25 -38
  153. package/src/utils/cube-to-table-schema.js.map +1 -0
  154. package/src/utils/cube-type-to-duckdb-type.js +12 -0
  155. package/src/utils/cube-type-to-duckdb-type.js.map +1 -0
  156. package/src/utils/find-in-table-schema.js +28 -0
  157. package/src/utils/find-in-table-schema.js.map +1 -0
  158. package/src/utils/get-column-names-from-ast.js +45 -0
  159. package/src/utils/get-column-names-from-ast.js.map +1 -0
  160. package/src/utils/get-possible-nodes.js +146 -0
  161. package/src/utils/get-possible-nodes.js.map +1 -0
  162. package/src/utils/get-type-info.js +34 -0
  163. package/src/utils/get-type-info.js.map +1 -0
  164. package/src/utils/is-array-member-type.js +8 -0
  165. package/src/utils/is-array-member-type.js.map +1 -0
  166. package/src/utils/key-from-measures-dimension.js +32 -0
  167. package/src/utils/key-from-measures-dimension.js.map +1 -0
  168. package/src/utils/meerkat-placeholder-replacer.js +10 -0
  169. package/src/utils/meerkat-placeholder-replacer.js.map +1 -0
  170. package/src/utils/modify-meerkat-filter.js +24 -0
  171. package/src/utils/modify-meerkat-filter.js.map +1 -0
  172. package/{utils → src/utils}/type-guards.js +10 -28
  173. package/src/utils/type-guards.js.map +1 -0
  174. package/ast-builder/ast-builder.js +0 -90
  175. package/ast-builder/ast-builder.js.map +0 -1
  176. package/ast-deserializer/ast-deserializer.js +0 -30
  177. package/ast-deserializer/ast-deserializer.js.map +0 -1
  178. package/ast-serializer/ast-serializer.js +0 -12
  179. package/ast-serializer/ast-serializer.js.map +0 -1
  180. package/ast-validator/dimension-validator.js +0 -54
  181. package/ast-validator/dimension-validator.js.map +0 -1
  182. package/ast-validator/index.js +0 -25
  183. package/ast-validator/index.js.map +0 -1
  184. package/ast-validator/measure-validator.js +0 -163
  185. package/ast-validator/measure-validator.js.map +0 -1
  186. package/ast-validator/tests/test-data.js.map +0 -1
  187. package/ast-validator/types.js +0 -3
  188. package/ast-validator/types.js.map +0 -1
  189. package/ast-validator/utils.js +0 -35
  190. package/ast-validator/utils.js.map +0 -1
  191. package/context-params/context-params-ast.js +0 -55
  192. package/context-params/context-params-ast.js.map +0 -1
  193. package/cube-filter-transformer/and/and.js +0 -18
  194. package/cube-filter-transformer/and/and.js.map +0 -1
  195. package/cube-filter-transformer/base-condition-builder/base-condition-builder.js +0 -160
  196. package/cube-filter-transformer/base-condition-builder/base-condition-builder.js.map +0 -1
  197. package/cube-filter-transformer/contains/contains.js +0 -71
  198. package/cube-filter-transformer/contains/contains.js.map +0 -1
  199. package/cube-filter-transformer/equals/equals-array.js +0 -77
  200. package/cube-filter-transformer/equals/equals-array.js.map +0 -1
  201. package/cube-filter-transformer/equals/equals.js +0 -37
  202. package/cube-filter-transformer/equals/equals.js.map +0 -1
  203. package/cube-filter-transformer/factory.js +0 -124
  204. package/cube-filter-transformer/factory.js.map +0 -1
  205. package/cube-filter-transformer/gt/gt.js +0 -30
  206. package/cube-filter-transformer/gt/gt.js.map +0 -1
  207. package/cube-filter-transformer/gte/gte.js +0 -30
  208. package/cube-filter-transformer/gte/gte.js.map +0 -1
  209. package/cube-filter-transformer/in/in.js +0 -78
  210. package/cube-filter-transformer/in/in.js.map +0 -1
  211. package/cube-filter-transformer/in-date-range/in-date-range.js +0 -24
  212. package/cube-filter-transformer/in-date-range/in-date-range.js.map +0 -1
  213. package/cube-filter-transformer/lt/lt.js +0 -30
  214. package/cube-filter-transformer/lt/lt.js.map +0 -1
  215. package/cube-filter-transformer/lte/lte.js +0 -30
  216. package/cube-filter-transformer/lte/lte.js.map +0 -1
  217. package/cube-filter-transformer/not/not.js +0 -18
  218. package/cube-filter-transformer/not/not.js.map +0 -1
  219. package/cube-filter-transformer/not-In-date-range/not-In-date-range.js +0 -24
  220. package/cube-filter-transformer/not-In-date-range/not-In-date-range.js.map +0 -1
  221. package/cube-filter-transformer/not-contains/not-contains.js +0 -71
  222. package/cube-filter-transformer/not-contains/not-contains.js.map +0 -1
  223. package/cube-filter-transformer/not-equals/not-equals-array.js +0 -26
  224. package/cube-filter-transformer/not-equals/not-equals-array.js.map +0 -1
  225. package/cube-filter-transformer/not-equals/not-equals.js +0 -37
  226. package/cube-filter-transformer/not-equals/not-equals.js.map +0 -1
  227. package/cube-filter-transformer/not-in/not-in.js +0 -85
  228. package/cube-filter-transformer/not-in/not-in.js.map +0 -1
  229. package/cube-filter-transformer/not-set/not-set.js +0 -27
  230. package/cube-filter-transformer/not-set/not-set.js.map +0 -1
  231. package/cube-filter-transformer/or/or.js +0 -18
  232. package/cube-filter-transformer/or/or.js.map +0 -1
  233. package/cube-filter-transformer/set/set.js +0 -27
  234. package/cube-filter-transformer/set/set.js.map +0 -1
  235. package/cube-group-by-transformer/cube-group-by-transformer.js +0 -25
  236. package/cube-group-by-transformer/cube-group-by-transformer.js.map +0 -1
  237. package/cube-limit-offset-transformer/cube-limit-offset-transformer.js +0 -42
  238. package/cube-limit-offset-transformer/cube-limit-offset-transformer.js.map +0 -1
  239. package/cube-measure-transformer/cube-measure-transformer.js +0 -127
  240. package/cube-measure-transformer/cube-measure-transformer.js.map +0 -1
  241. package/cube-order-by-transformer/cube-order-by-transformer.js +0 -39
  242. package/cube-order-by-transformer/cube-order-by-transformer.js.map +0 -1
  243. package/cube-to-duckdb/cube-filter-to-duckdb.js +0 -3
  244. package/cube-to-duckdb/cube-filter-to-duckdb.js.map +0 -1
  245. package/filter-params/filter-params-ast.js +0 -115
  246. package/filter-params/filter-params-ast.js.map +0 -1
  247. package/get-filter-params-sql/get-filter-params-sql.js +0 -28
  248. package/get-filter-params-sql/get-filter-params-sql.js.map +0 -1
  249. package/get-final-base-sql/get-final-base-sql.js +0 -30
  250. package/get-final-base-sql/get-final-base-sql.js.map +0 -1
  251. package/get-wrapped-base-query-with-projections/get-aliased-columns-from-filters.js.map +0 -1
  252. package/get-wrapped-base-query-with-projections/get-projection-clause.js +0 -87
  253. package/get-wrapped-base-query-with-projections/get-projection-clause.js.map +0 -1
  254. package/get-wrapped-base-query-with-projections/get-wrapped-base-query-with-projections.js +0 -33
  255. package/get-wrapped-base-query-with-projections/get-wrapped-base-query-with-projections.js.map +0 -1
  256. package/get-wrapped-base-query-with-projections/sql-expression-modifiers.js +0 -60
  257. package/get-wrapped-base-query-with-projections/sql-expression-modifiers.js.map +0 -1
  258. package/index.js +0 -66
  259. package/index.js.map +0 -1
  260. package/joins/joins.js +0 -170
  261. package/joins/joins.js.map +0 -1
  262. package/member-formatters/constants.js +0 -19
  263. package/member-formatters/constants.js.map +0 -1
  264. package/member-formatters/index.js +0 -23
  265. package/member-formatters/index.js.map +0 -1
  266. package/member-formatters/member-key-to-safe-key.js +0 -13
  267. package/member-formatters/member-key-to-safe-key.js.map +0 -1
  268. package/member-formatters/split-into-data-source-and-fields.js +0 -17
  269. package/member-formatters/split-into-data-source-and-fields.js.map +0 -1
  270. package/resolution/resolution.js +0 -128
  271. package/resolution/resolution.js.map +0 -1
  272. package/resolution/types.js +0 -10
  273. package/resolution/types.js.map +0 -1
  274. package/types/cube-types/index.d.js +0 -6
  275. package/types/cube-types/index.d.js.map +0 -1
  276. package/types/cube-types/index.js +0 -6
  277. package/types/cube-types/index.js.map +0 -1
  278. package/types/cube-types/query.d.js +0 -5
  279. package/types/cube-types/query.d.js.map +0 -1
  280. package/types/cube-types/query.js +0 -14
  281. package/types/cube-types/query.js.map +0 -1
  282. package/types/cube-types/table.d.js +0 -3
  283. package/types/cube-types/table.d.js.map +0 -1
  284. package/types/cube-types/table.js +0 -3
  285. package/types/cube-types/table.js.map +0 -1
  286. package/types/duckdb-serialization-types/index.d.js +0 -11
  287. package/types/duckdb-serialization-types/index.d.js.map +0 -1
  288. package/types/duckdb-serialization-types/index.js +0 -11
  289. package/types/duckdb-serialization-types/index.js.map +0 -1
  290. package/types/duckdb-serialization-types/serialization/Constraint.js.map +0 -1
  291. package/types/duckdb-serialization-types/serialization/CreateInfo.js.map +0 -1
  292. package/types/duckdb-serialization-types/serialization/Expression.d.js +0 -3
  293. package/types/duckdb-serialization-types/serialization/Expression.d.js.map +0 -1
  294. package/types/duckdb-serialization-types/serialization/Expression.js.map +0 -1
  295. package/types/duckdb-serialization-types/serialization/LogicalOperator.js +0 -47
  296. package/types/duckdb-serialization-types/serialization/LogicalOperator.js.map +0 -1
  297. package/types/duckdb-serialization-types/serialization/MacroFunction.js +0 -15
  298. package/types/duckdb-serialization-types/serialization/MacroFunction.js.map +0 -1
  299. package/types/duckdb-serialization-types/serialization/Misc.d.js +0 -3
  300. package/types/duckdb-serialization-types/serialization/Misc.d.js.map +0 -1
  301. package/types/duckdb-serialization-types/serialization/Misc.js +0 -3
  302. package/types/duckdb-serialization-types/serialization/Misc.js.map +0 -1
  303. package/types/duckdb-serialization-types/serialization/Nodes.d.js +0 -3
  304. package/types/duckdb-serialization-types/serialization/Nodes.d.js.map +0 -1
  305. package/types/duckdb-serialization-types/serialization/Nodes.js.map +0 -1
  306. package/types/duckdb-serialization-types/serialization/ParseInfo.js.map +0 -1
  307. package/types/duckdb-serialization-types/serialization/ParsedExpression.d.js +0 -3
  308. package/types/duckdb-serialization-types/serialization/ParsedExpression.d.js.map +0 -1
  309. package/types/duckdb-serialization-types/serialization/ParsedExpression.js.map +0 -1
  310. package/types/duckdb-serialization-types/serialization/QueryNode.d.js +0 -3
  311. package/types/duckdb-serialization-types/serialization/QueryNode.d.js.map +0 -1
  312. package/types/duckdb-serialization-types/serialization/QueryNode.js.map +0 -1
  313. package/types/duckdb-serialization-types/serialization/ResultModifier.d.js +0 -3
  314. package/types/duckdb-serialization-types/serialization/ResultModifier.d.js.map +0 -1
  315. package/types/duckdb-serialization-types/serialization/ResultModifier.js.map +0 -1
  316. package/types/duckdb-serialization-types/serialization/Statement.d.js +0 -3
  317. package/types/duckdb-serialization-types/serialization/Statement.d.js.map +0 -1
  318. package/types/duckdb-serialization-types/serialization/Statement.js +0 -3
  319. package/types/duckdb-serialization-types/serialization/Statement.js.map +0 -1
  320. package/types/duckdb-serialization-types/serialization/TableFilter.d.js +0 -3
  321. package/types/duckdb-serialization-types/serialization/TableFilter.d.js.map +0 -1
  322. package/types/duckdb-serialization-types/serialization/TableFilter.js.map +0 -1
  323. package/types/duckdb-serialization-types/serialization/TableRef.d.js +0 -3
  324. package/types/duckdb-serialization-types/serialization/TableRef.d.js.map +0 -1
  325. package/types/duckdb-serialization-types/serialization/TableRef.js.map +0 -1
  326. package/types/duckdb-serialization-types/serialization/Types.d.js +0 -3
  327. package/types/duckdb-serialization-types/serialization/Types.d.js.map +0 -1
  328. package/types/duckdb-serialization-types/serialization/Types.js.map +0 -1
  329. package/types/duckdb-serialization-types/serialization/example.js +0 -131
  330. package/types/duckdb-serialization-types/serialization/example.js.map +0 -1
  331. package/types/utils.js +0 -108
  332. package/types/utils.js.map +0 -1
  333. package/utils/__fixtures__/joins.fixtures.js.map +0 -1
  334. package/utils/base-ast.js +0 -63
  335. package/utils/base-ast.js.map +0 -1
  336. package/utils/cube-filter-enrichment.js +0 -63
  337. package/utils/cube-filter-enrichment.js.map +0 -1
  338. package/utils/cube-to-table-schema.js.map +0 -1
  339. package/utils/cube-type-to-duckdb-type.js +0 -17
  340. package/utils/cube-type-to-duckdb-type.js.map +0 -1
  341. package/utils/find-in-table-schema.js +0 -40
  342. package/utils/find-in-table-schema.js.map +0 -1
  343. package/utils/get-column-names-from-ast.js +0 -45
  344. package/utils/get-column-names-from-ast.js.map +0 -1
  345. package/utils/get-possible-nodes.js +0 -152
  346. package/utils/get-possible-nodes.js.map +0 -1
  347. package/utils/get-type-info.js +0 -44
  348. package/utils/get-type-info.js.map +0 -1
  349. package/utils/is-array-member-type.js +0 -12
  350. package/utils/is-array-member-type.js.map +0 -1
  351. package/utils/key-from-measures-dimension.js +0 -35
  352. package/utils/key-from-measures-dimension.js.map +0 -1
  353. package/utils/meerkat-placeholder-replacer.js +0 -14
  354. package/utils/meerkat-placeholder-replacer.js.map +0 -1
  355. package/utils/modify-meerkat-filter.js +0 -30
  356. package/utils/modify-meerkat-filter.js.map +0 -1
  357. package/utils/type-guards.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meerkat-placeholder-replacer.js","sourceRoot":"","sources":["../../../../meerkat-core/src/utils/meerkat-placeholder-replacer.ts"],"names":[],"mappings":";;;AAAA,8DAA0E;AAEnE,MAAM,0BAA0B,GAAG,CAAC,GAAW,EAAE,SAAiB,EAAE,EAAE;IAC3E,MAAM,2BAA2B,GAAG,gBAAgB,CAAC;IACrD,OAAO,GAAG,CAAC,OAAO,CAChB,2BAA2B,EAC3B,SAAS,GAAG,oCAAwB,CACrC,CAAC;AACJ,CAAC,CAAC;AANW,QAAA,0BAA0B,8BAMrC"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.modifyLeafMeerkatFilter = void 0;
4
+ const modifyLeafMeerkatFilter = (filters, callback) => {
5
+ /*
6
+ ** This function traverse the QueryFiltersWithInfo JSON, and calls the callback for each leaf type.
7
+ ** This way we need no rewrite the traversal logic again and again.
8
+ ** The return value of the callback will show up the same path in the resulting object as in the original object
9
+ */
10
+ if (!filters)
11
+ return undefined;
12
+ return filters.map((item) => {
13
+ if ('member' in item) {
14
+ return callback(item);
15
+ }
16
+ else {
17
+ const andPayload = 'and' in item ? (0, exports.modifyLeafMeerkatFilter)(item.and, callback) : undefined;
18
+ const orPayload = 'or' in item ? (0, exports.modifyLeafMeerkatFilter)(item.or, callback) : undefined;
19
+ return Object.assign(Object.assign({}, (andPayload ? { and: andPayload } : {})), (orPayload ? { or: orPayload } : {}));
20
+ }
21
+ });
22
+ };
23
+ exports.modifyLeafMeerkatFilter = modifyLeafMeerkatFilter;
24
+ //# sourceMappingURL=modify-meerkat-filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modify-meerkat-filter.js","sourceRoot":"","sources":["../../../../meerkat-core/src/utils/modify-meerkat-filter.ts"],"names":[],"mappings":";;;AAGO,MAAM,uBAAuB,GAAG,CAAI,OAA6B,EAAE,QAAiC,EAAoB,EAAE;IAC/H;;;;MAIE;IACF,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAC/B,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAC1B,IAAI,QAAQ,IAAI,IAAI,EAAE;YACpB,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAA;SACtB;aAAM;YACL,MAAM,UAAU,GAAoB,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,IAAA,+BAAuB,EAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC5G,MAAM,SAAS,GAAoB,IAAI,IAAI,IAAI,CAAC,CAAC,CAAE,IAAA,+BAAuB,EAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAE1G,OAAO,gCACF,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GACvC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CACnC,CAAA;SACP;IACH,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC;AApBW,QAAA,uBAAuB,2BAoBlC"}
@@ -1,39 +1,17 @@
1
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
- hasChildren: function() {
10
- return hasChildren;
11
- },
12
- isFilterArray: function() {
13
- return isFilterArray;
14
- },
15
- isLogicalAnd: function() {
16
- return isLogicalAnd;
17
- },
18
- isLogicalAndOR: function() {
19
- return isLogicalAndOR;
20
- },
21
- isLogicalOr: function() {
22
- return isLogicalOr;
23
- },
24
- isQueryFilter: function() {
25
- return isQueryFilter;
26
- }
27
- });
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.hasChildren = exports.isFilterArray = exports.isQueryFilter = exports.isLogicalOr = exports.isLogicalAnd = exports.isLogicalAndOR = void 0;
28
4
  function isLogicalAndOR(expression) {
29
5
  if (!expression) {
30
6
  return false;
31
7
  }
32
- if (Object.prototype.hasOwnProperty.call(expression, 'and') || Object.prototype.hasOwnProperty.call(expression, 'or')) {
8
+ if (Object.prototype.hasOwnProperty.call(expression, 'and') ||
9
+ Object.prototype.hasOwnProperty.call(expression, 'or')) {
33
10
  return true;
34
11
  }
35
12
  return false;
36
13
  }
14
+ exports.isLogicalAndOR = isLogicalAndOR;
37
15
  function isLogicalAnd(expression) {
38
16
  if (!expression) {
39
17
  return false;
@@ -43,6 +21,7 @@ function isLogicalAnd(expression) {
43
21
  }
44
22
  return false;
45
23
  }
24
+ exports.isLogicalAnd = isLogicalAnd;
46
25
  function isLogicalOr(expression) {
47
26
  if (!expression) {
48
27
  return false;
@@ -52,6 +31,7 @@ function isLogicalOr(expression) {
52
31
  }
53
32
  return false;
54
33
  }
34
+ exports.isLogicalOr = isLogicalOr;
55
35
  function isQueryFilter(expression) {
56
36
  if (!expression) {
57
37
  return false;
@@ -61,6 +41,7 @@ function isQueryFilter(expression) {
61
41
  }
62
42
  return false;
63
43
  }
44
+ exports.isQueryFilter = isQueryFilter;
64
45
  function isFilterArray(expression) {
65
46
  if (!expression) {
66
47
  return false;
@@ -70,6 +51,7 @@ function isFilterArray(expression) {
70
51
  }
71
52
  return false;
72
53
  }
54
+ exports.isFilterArray = isFilterArray;
73
55
  function hasChildren(whereObj) {
74
56
  if (!whereObj) {
75
57
  return false;
@@ -79,5 +61,5 @@ function hasChildren(whereObj) {
79
61
  }
80
62
  return false;
81
63
  }
82
-
64
+ exports.hasChildren = hasChildren;
83
65
  //# sourceMappingURL=type-guards.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type-guards.js","sourceRoot":"","sources":["../../../../meerkat-core/src/utils/type-guards.ts"],"names":[],"mappings":";;;AAGA,SAAgB,cAAc,CAC5B,UAA4D;IAE5D,IAAI,CAAC,UAAU,EAAE;QACf,OAAO,KAAK,CAAC;KACd;IACD,IACE,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC;QACvD,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,EACtD;QACA,OAAO,IAAI,CAAC;KACb;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAbD,wCAaC;AAED,SAAgB,YAAY,CAC1B,UAA4D;IAE5D,IAAI,CAAC,UAAU,EAAE;QACf,OAAO,KAAK,CAAC;KACd;IACD,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE;QAC3D,OAAO,IAAI,CAAC;KACb;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAVD,oCAUC;AAED,SAAgB,WAAW,CACzB,UAA4D;IAE5D,IAAI,CAAC,UAAU,EAAE;QACf,OAAO,KAAK,CAAC;KACd;IACD,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE;QAC1D,OAAO,IAAI,CAAC;KACb;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAVD,kCAUC;AAED,SAAgB,aAAa,CAC3B,UAA4D;IAE5D,IAAI,CAAC,UAAU,EAAE;QACf,OAAO,KAAK,CAAC;KACd;IACD,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE;QAC9D,OAAO,IAAI,CAAC;KACb;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAVD,sCAUC;AAED,SAAgB,aAAa,CAC3B,UAEwD;IAExD,IAAI,CAAC,UAAU,EAAE;QACf,OAAO,KAAK,CAAC;KACd;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;QAC7B,OAAO,IAAI,CAAC;KACb;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAZD,sCAYC;AAED,SAAgB,WAAW,CACzB,QAAiC;IAEjC,IAAI,CAAC,QAAQ,EAAE;QACb,OAAO,KAAK,CAAC;KACd;IACD,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE;QAC9D,OAAO,IAAI,CAAC;KACb;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAVD,kCAUC"}
@@ -1,90 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "cubeToDuckdbAST", {
3
- enumerable: true,
4
- get: function() {
5
- return cubeToDuckdbAST;
6
- }
7
- });
8
- const _extends = require("@swc/helpers/_/_extends");
9
- const _factory = require("../cube-filter-transformer/factory");
10
- const _cubegroupbytransformer = require("../cube-group-by-transformer/cube-group-by-transformer");
11
- const _cubelimitoffsettransformer = require("../cube-limit-offset-transformer/cube-limit-offset-transformer");
12
- const _cubeorderbytransformer = require("../cube-order-by-transformer/cube-order-by-transformer");
13
- const _filterparamsast = require("../filter-params/filter-params-ast");
14
- const _memberkeytosafekey = require("../member-formatters/member-key-to-safe-key");
15
- const _baseast = require("../utils/base-ast");
16
- const _cubefilterenrichment = require("../utils/cube-filter-enrichment");
17
- const _modifymeerkatfilter = require("../utils/modify-meerkat-filter");
18
- const formatFilters = (queryFiltersWithInfo, filterType)=>{
19
- /*
20
- * If the type of filter is set to base filter where
21
- */ return filterType === 'BASE_FILTER' ? queryFiltersWithInfo : (0, _modifymeerkatfilter.modifyLeafMeerkatFilter)(queryFiltersWithInfo, (item)=>{
22
- return _extends._({}, item, {
23
- member: (0, _memberkeytosafekey.memberKeyToSafeKey)(item.member)
24
- });
25
- });
26
- };
27
- const getFormattedFilters = ({ queryFiltersWithInfo, filterType, mapperFn, baseAST })=>{
28
- const filters = queryFiltersWithInfo.map((item)=>mapperFn(item)).filter(Boolean);
29
- const formattedFilters = formatFilters(filters, filterType);
30
- return (0, _factory.cubeFilterToDuckdbAST)(formattedFilters, baseAST);
31
- };
32
- const cubeToDuckdbAST = (query, tableSchema, options)=>{
33
- var _query_dimensions;
34
- /**
35
- * Obviously, if no table schema was found, return null.
36
- */ if (!tableSchema) {
37
- return null;
38
- }
39
- const baseAST = (0, _baseast.getBaseAST)();
40
- const node = baseAST.node;
41
- if (query.filters && query.filters.length > 0) {
42
- /**
43
- * Make a copy of the query filters and enrich them with the table schema.
44
- */ const queryFiltersWithInfo = (0, _cubefilterenrichment.cubeFiltersEnrichment)(JSON.parse(JSON.stringify(query.filters)), tableSchema);
45
- if (!queryFiltersWithInfo) {
46
- return null;
47
- }
48
- const whereClause = getFormattedFilters({
49
- baseAST,
50
- mapperFn: (item)=>(0, _filterparamsast.traverseAndFilter)(item, (value)=>!query.measures.includes(value.member)),
51
- queryFiltersWithInfo,
52
- filterType: options == null ? void 0 : options.filterType
53
- });
54
- const havingClause = getFormattedFilters({
55
- baseAST,
56
- mapperFn: (item)=>(0, _filterparamsast.traverseAndFilter)(item, (value)=>query.measures.includes(value.member)),
57
- queryFiltersWithInfo,
58
- filterType: options == null ? void 0 : options.filterType
59
- });
60
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
61
- //@ts-ignore
62
- node.where_clause = whereClause;
63
- node.having = havingClause;
64
- }
65
- if (query.measures.length && query.dimensions && ((_query_dimensions = query.dimensions) == null ? void 0 : _query_dimensions.length) > 0) {
66
- node.group_expressions = (0, _cubegroupbytransformer.cubeDimensionToGroupByAST)(query.dimensions);
67
- const groupSets = [];
68
- /**
69
- * We only support one group set for now.
70
- */ for(let i = 0; i < node.group_expressions.length; i++){
71
- groupSets.push(i);
72
- }
73
- node.group_sets = [
74
- groupSets
75
- ];
76
- }
77
- node.modifiers = [];
78
- if (query.order && Object.keys(query.order).length > 0) {
79
- node.modifiers.push((0, _cubeorderbytransformer.cubeOrderByToAST)(query.order));
80
- }
81
- if (query.limit || query.offset) {
82
- // Type assertion is needed here because the AST is not typed correctly.
83
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
84
- //@ts-ignore
85
- node.modifiers.push((0, _cubelimitoffsettransformer.cubeLimitOffsetToAST)(query.limit, query.offset));
86
- }
87
- return baseAST;
88
- };
89
-
90
- //# sourceMappingURL=ast-builder.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../meerkat-core/src/ast-builder/ast-builder.ts"],"sourcesContent":["import { cubeFilterToDuckdbAST } from '../cube-filter-transformer/factory';\nimport { cubeDimensionToGroupByAST } from '../cube-group-by-transformer/cube-group-by-transformer';\nimport { cubeLimitOffsetToAST } from '../cube-limit-offset-transformer/cube-limit-offset-transformer';\nimport { cubeOrderByToAST } from '../cube-order-by-transformer/cube-order-by-transformer';\nimport {\n QueryFiltersWithInfo,\n QueryFiltersWithInfoSingular,\n} from '../cube-to-duckdb/cube-filter-to-duckdb';\nimport { traverseAndFilter } from '../filter-params/filter-params-ast';\nimport { memberKeyToSafeKey } from '../member-formatters/member-key-to-safe-key';\nimport {\n FilterType,\n MeerkatQueryFilter,\n Query,\n} from '../types/cube-types/query';\nimport { TableSchema } from '../types/cube-types/table';\nimport { SelectStatement } from '../types/duckdb-serialization-types';\nimport { SelectNode } from '../types/duckdb-serialization-types/serialization/QueryNode';\nimport { getBaseAST } from '../utils/base-ast';\nimport { cubeFiltersEnrichment } from '../utils/cube-filter-enrichment';\nimport { modifyLeafMeerkatFilter } from '../utils/modify-meerkat-filter';\n\nconst formatFilters = (\n queryFiltersWithInfo: QueryFiltersWithInfo,\n filterType?: FilterType\n) => {\n /*\n * If the type of filter is set to base filter where\n */\n return filterType === 'BASE_FILTER'\n ? queryFiltersWithInfo\n : (modifyLeafMeerkatFilter(queryFiltersWithInfo, (item) => {\n return {\n ...item,\n member: memberKeyToSafeKey(item.member),\n };\n }) as QueryFiltersWithInfo);\n};\n\nconst getFormattedFilters = ({\n queryFiltersWithInfo,\n filterType,\n mapperFn,\n baseAST,\n}: {\n queryFiltersWithInfo: QueryFiltersWithInfo;\n filterType?: FilterType;\n baseAST: SelectStatement;\n mapperFn: (val: QueryFiltersWithInfoSingular) => MeerkatQueryFilter | null;\n}) => {\n const filters = queryFiltersWithInfo\n .map((item) => mapperFn(item))\n .filter(Boolean) as QueryFiltersWithInfoSingular[];\n const formattedFilters = formatFilters(filters, filterType);\n return cubeFilterToDuckdbAST(formattedFilters, baseAST);\n};\n\nexport const cubeToDuckdbAST = (\n query: Query,\n tableSchema: TableSchema,\n options?: { filterType: FilterType }\n) => {\n /**\n * Obviously, if no table schema was found, return null.\n */\n if (!tableSchema) {\n return null;\n }\n\n const baseAST = getBaseAST();\n const node = baseAST.node as SelectNode;\n if (query.filters && query.filters.length > 0) {\n /**\n * Make a copy of the query filters and enrich them with the table schema.\n */\n const queryFiltersWithInfo = cubeFiltersEnrichment(\n JSON.parse(JSON.stringify(query.filters)),\n tableSchema\n );\n\n if (!queryFiltersWithInfo) {\n return null;\n }\n\n const whereClause = getFormattedFilters({\n baseAST,\n mapperFn: (item) =>\n traverseAndFilter(\n item,\n (value) => !query.measures.includes(value.member)\n ),\n queryFiltersWithInfo,\n filterType: options?.filterType,\n });\n\n const havingClause = getFormattedFilters({\n baseAST,\n mapperFn: (item) =>\n traverseAndFilter(item, (value) =>\n query.measures.includes(value.member)\n ),\n queryFiltersWithInfo,\n filterType: options?.filterType,\n });\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n //@ts-ignore\n node.where_clause = whereClause;\n node.having = havingClause;\n }\n if (\n query.measures.length &&\n query.dimensions &&\n query.dimensions?.length > 0\n ) {\n node.group_expressions = cubeDimensionToGroupByAST(query.dimensions);\n const groupSets = [];\n /**\n * We only support one group set for now.\n */\n for (let i = 0; i < node.group_expressions.length; i++) {\n groupSets.push(i);\n }\n node.group_sets = [groupSets];\n }\n node.modifiers = [];\n if (query.order && Object.keys(query.order).length > 0) {\n node.modifiers.push(cubeOrderByToAST(query.order));\n }\n if (query.limit || query.offset) {\n // Type assertion is needed here because the AST is not typed correctly.\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n //@ts-ignore\n node.modifiers.push(cubeLimitOffsetToAST(query.limit, query.offset));\n }\n\n return baseAST;\n};\n"],"names":["cubeToDuckdbAST","formatFilters","queryFiltersWithInfo","filterType","modifyLeafMeerkatFilter","item","member","memberKeyToSafeKey","getFormattedFilters","mapperFn","baseAST","filters","map","filter","Boolean","formattedFilters","cubeFilterToDuckdbAST","query","tableSchema","options","getBaseAST","node","length","cubeFiltersEnrichment","JSON","parse","stringify","whereClause","traverseAndFilter","value","measures","includes","havingClause","where_clause","having","dimensions","group_expressions","cubeDimensionToGroupByAST","groupSets","i","push","group_sets","modifiers","order","Object","keys","cubeOrderByToAST","limit","offset","cubeLimitOffsetToAST"],"mappings":"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"}
@@ -1,30 +0,0 @@
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
- astDeserializerQuery: function() {
10
- return astDeserializerQuery;
11
- },
12
- deserializeQuery: function() {
13
- return deserializeQuery;
14
- }
15
- });
16
- const astDeserializerQuery = (ast)=>{
17
- return `SELECT json_deserialize_sql('${JSON.stringify({
18
- statements: [
19
- ast
20
- ]
21
- })}');`;
22
- };
23
- const deserializeQuery = (queryOutput)=>{
24
- const deserializeObj = queryOutput[0];
25
- const deserializeKey = Object.keys(deserializeObj)[0];
26
- const deserializeQuery = deserializeObj[deserializeKey];
27
- return deserializeQuery;
28
- };
29
-
30
- //# sourceMappingURL=ast-deserializer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../meerkat-core/src/ast-deserializer/ast-deserializer.ts"],"sourcesContent":["import { SelectStatement } from '../types/duckdb-serialization-types';\n\nexport const astDeserializerQuery = (ast: SelectStatement) => {\n return `SELECT json_deserialize_sql('${JSON.stringify({\n statements: [ast],\n })}');`;\n};\n\nexport const deserializeQuery = (\n queryOutput: {\n [key: string]: string;\n }[]\n) => {\n const deserializeObj = queryOutput[0];\n const deserializeKey = Object.keys(deserializeObj)[0];\n const deserializeQuery = deserializeObj[deserializeKey];\n return deserializeQuery;\n};\n"],"names":["astDeserializerQuery","deserializeQuery","ast","JSON","stringify","statements","queryOutput","deserializeObj","deserializeKey","Object","keys"],"mappings":";;;;;;;;IAEaA,oBAAoB;eAApBA;;IAMAC,gBAAgB;eAAhBA;;;AANN,MAAMD,uBAAuB,CAACE;IACnC,OAAO,CAAC,6BAA6B,EAAEC,KAAKC,SAAS,CAAC;QACpDC,YAAY;YAACH;SAAI;IACnB,GAAG,GAAG,CAAC;AACT;AAEO,MAAMD,mBAAmB,CAC9BK;IAIA,MAAMC,iBAAiBD,WAAW,CAAC,EAAE;IACrC,MAAME,iBAAiBC,OAAOC,IAAI,CAACH,eAAe,CAAC,EAAE;IACrD,MAAMN,mBAAmBM,cAAc,CAACC,eAAe;IACvD,OAAOP;AACT"}
@@ -1,12 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "astSerializerQuery", {
3
- enumerable: true,
4
- get: function() {
5
- return astSerializerQuery;
6
- }
7
- });
8
- const astSerializerQuery = (query)=>{
9
- return `SELECT json_serialize_sql('${query}')`;
10
- };
11
-
12
- //# sourceMappingURL=ast-serializer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../meerkat-core/src/ast-serializer/ast-serializer.ts"],"sourcesContent":["export const astSerializerQuery = (query: string) => {\n return `SELECT json_serialize_sql('${query}')`;\n};\n"],"names":["astSerializerQuery","query"],"mappings":";+BAAaA;;;eAAAA;;;AAAN,MAAMA,qBAAqB,CAACC;IACjC,OAAO,CAAC,2BAA2B,EAAEA,MAAM,EAAE,CAAC;AAChD"}
@@ -1,54 +0,0 @@
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
- validateDimension: function() {
10
- return validateDimension;
11
- },
12
- validateExpressionNode: function() {
13
- return validateExpressionNode;
14
- }
15
- });
16
- const _utils = require("../types/utils");
17
- const _utils1 = require("./utils");
18
- const validateExpressionNode = (node, validFunctions)=>{
19
- // Column references and value constants
20
- if ((0, _utils.isColumnRefExpression)(node) || (0, _utils.isConstantExpression)(node)) {
21
- return true;
22
- }
23
- // Cast expression
24
- if ((0, _utils.isCastExpression)(node)) {
25
- return validateExpressionNode(node.child, validFunctions);
26
- }
27
- // Operator expression
28
- if ((0, _utils.isOperatorExpression)(node)) {
29
- return node.children.every((child)=>validateExpressionNode(child, validFunctions));
30
- }
31
- // Function expression
32
- if ((0, _utils.isFunctionExpression)(node)) {
33
- if (!validFunctions.has(node.function_name)) {
34
- throw new Error(`Invalid function: ${node.function_name}`);
35
- }
36
- return node.children.every((child)=>validateExpressionNode(child, validFunctions));
37
- }
38
- // Case expression
39
- if ((0, _utils.isCaseExpression)(node)) {
40
- return node.case_checks.every((check)=>validateExpressionNode(check.then_expr, validFunctions)) && validateExpressionNode(node.else_expr, validFunctions);
41
- }
42
- throw new Error(`Invalid expression type: ${node.type}`);
43
- };
44
- const validateDimension = (parsedSerialization, validFunctions)=>{
45
- const node = (0, _utils1.getSelectNode)(parsedSerialization);
46
- const validFunctionSet = new Set(validFunctions);
47
- // Validate the expression
48
- if (validateExpressionNode(node, validFunctionSet)) {
49
- return true;
50
- }
51
- throw new Error('Expression contains invalid functions or operators');
52
- };
53
-
54
- //# sourceMappingURL=dimension-validator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../meerkat-core/src/ast-validator/dimension-validator.ts"],"sourcesContent":["import { ParsedExpression } from '../types/duckdb-serialization-types';\nimport {\n isCaseExpression,\n isCastExpression,\n isColumnRefExpression,\n isConstantExpression,\n isFunctionExpression,\n isOperatorExpression,\n} from '../types/utils';\nimport { ParsedSerialization } from './types';\nimport { getSelectNode } from './utils';\n\n/**\n * Validates an individual expression node\n */\nexport const validateExpressionNode = (\n node: ParsedExpression,\n validFunctions: Set<string>\n): boolean => {\n // Column references and value constants\n if (isColumnRefExpression(node) || isConstantExpression(node)) {\n return true;\n }\n\n // Cast expression\n if (isCastExpression(node)) {\n return validateExpressionNode(node.child, validFunctions);\n }\n\n // Operator expression\n if (isOperatorExpression(node)) {\n return node.children.every((child) =>\n validateExpressionNode(child, validFunctions)\n );\n }\n\n // Function expression\n if (isFunctionExpression(node)) {\n if (!validFunctions.has(node.function_name)) {\n throw new Error(`Invalid function: ${node.function_name}`);\n }\n return node.children.every((child) =>\n validateExpressionNode(child, validFunctions)\n );\n }\n\n // Case expression\n if (isCaseExpression(node)) {\n return (\n node.case_checks.every((check) =>\n validateExpressionNode(check.then_expr, validFunctions)\n ) && validateExpressionNode(node.else_expr, validFunctions)\n );\n }\n\n throw new Error(`Invalid expression type: ${node.type}`);\n};\n\n/**\n * Validates if the parsed serialization represents a valid dimension\n */\nexport const validateDimension = (\n parsedSerialization: ParsedSerialization,\n validFunctions: string[]\n): boolean => {\n const node = getSelectNode(parsedSerialization);\n\n const validFunctionSet = new Set(validFunctions);\n\n // Validate the expression\n if (validateExpressionNode(node, validFunctionSet)) {\n return true;\n }\n\n throw new Error('Expression contains invalid functions or operators');\n};\n"],"names":["validateDimension","validateExpressionNode","node","validFunctions","isColumnRefExpression","isConstantExpression","isCastExpression","child","isOperatorExpression","children","every","isFunctionExpression","has","function_name","Error","isCaseExpression","case_checks","check","then_expr","else_expr","type","parsedSerialization","getSelectNode","validFunctionSet","Set"],"mappings":";;;;;;;;IA6DaA,iBAAiB;eAAjBA;;IA9CAC,sBAAsB;eAAtBA;;;uBAPN;wBAEuB;AAKvB,MAAMA,yBAAyB,CACpCC,MACAC;IAEA,wCAAwC;IACxC,IAAIC,IAAAA,4BAAqB,EAACF,SAASG,IAAAA,2BAAoB,EAACH,OAAO;QAC7D,OAAO;IACT;IAEA,kBAAkB;IAClB,IAAII,IAAAA,uBAAgB,EAACJ,OAAO;QAC1B,OAAOD,uBAAuBC,KAAKK,KAAK,EAAEJ;IAC5C;IAEA,sBAAsB;IACtB,IAAIK,IAAAA,2BAAoB,EAACN,OAAO;QAC9B,OAAOA,KAAKO,QAAQ,CAACC,KAAK,CAAC,CAACH,QAC1BN,uBAAuBM,OAAOJ;IAElC;IAEA,sBAAsB;IACtB,IAAIQ,IAAAA,2BAAoB,EAACT,OAAO;QAC9B,IAAI,CAACC,eAAeS,GAAG,CAACV,KAAKW,aAAa,GAAG;YAC3C,MAAM,IAAIC,MAAM,CAAC,kBAAkB,EAAEZ,KAAKW,aAAa,CAAC,CAAC;QAC3D;QACA,OAAOX,KAAKO,QAAQ,CAACC,KAAK,CAAC,CAACH,QAC1BN,uBAAuBM,OAAOJ;IAElC;IAEA,kBAAkB;IAClB,IAAIY,IAAAA,uBAAgB,EAACb,OAAO;QAC1B,OACEA,KAAKc,WAAW,CAACN,KAAK,CAAC,CAACO,QACtBhB,uBAAuBgB,MAAMC,SAAS,EAAEf,oBACrCF,uBAAuBC,KAAKiB,SAAS,EAAEhB;IAEhD;IAEA,MAAM,IAAIW,MAAM,CAAC,yBAAyB,EAAEZ,KAAKkB,IAAI,CAAC,CAAC;AACzD;AAKO,MAAMpB,oBAAoB,CAC/BqB,qBACAlB;IAEA,MAAMD,OAAOoB,IAAAA,qBAAa,EAACD;IAE3B,MAAME,mBAAmB,IAAIC,IAAIrB;IAEjC,0BAA0B;IAC1B,IAAIF,uBAAuBC,MAAMqB,mBAAmB;QAClD,OAAO;IACT;IAEA,MAAM,IAAIT,MAAM;AAClB"}
@@ -1,25 +0,0 @@
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
- getSelectNode: function() {
10
- return _utils.getSelectNode;
11
- },
12
- validateDimension: function() {
13
- return _dimensionvalidator.validateDimension;
14
- },
15
- validateMeasure: function() {
16
- return _measurevalidator.validateMeasure;
17
- }
18
- });
19
- const _export_star = require("@swc/helpers/_/_export_star");
20
- const _dimensionvalidator = require("./dimension-validator");
21
- const _measurevalidator = require("./measure-validator");
22
- _export_star._(require("./types"), exports);
23
- const _utils = require("./utils");
24
-
25
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../meerkat-core/src/ast-validator/index.ts"],"sourcesContent":["export { validateDimension } from './dimension-validator';\nexport { validateMeasure } from './measure-validator';\nexport * from './types';\nexport { getSelectNode } from './utils';\n"],"names":["getSelectNode","validateDimension","validateMeasure"],"mappings":";;;;;;;;IAGSA,aAAa;eAAbA,oBAAa;;IAHbC,iBAAiB;eAAjBA,qCAAiB;;IACjBC,eAAe;eAAfA,iCAAe;;;;oCADU;kCACF;uBAClB;uBACgB"}
@@ -1,163 +0,0 @@
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
- containsAggregation: function() {
10
- return containsAggregation;
11
- },
12
- validateExpressionNode: function() {
13
- return validateExpressionNode;
14
- },
15
- validateMeasure: function() {
16
- return validateMeasure;
17
- }
18
- });
19
- const _utils = require("../types/utils");
20
- const _utils1 = require("./utils");
21
- const validateExpressionNode = ({ node, validFunctions, parentNode, validScalarFunctions, hasAggregation = false })=>{
22
- // Base cases for column references and constants
23
- if ((0, _utils.isColumnRefExpression)(node) || (0, _utils.isConstantExpression)(node)) {
24
- // Allow column references inside aggregation functions
25
- return !!parentNode;
26
- }
27
- // Check for valid aggregation functions
28
- if ((0, _utils.isFunctionExpression)(node) || (0, _utils.isWindowExpression)(node)) {
29
- // count_star don't have children
30
- if (node.function_name === 'count_star') return true;
31
- // This is a valid aggregation function - verify its children don't contain nested aggregations
32
- if (validFunctions.has(node.function_name)) {
33
- return node.children.some((child)=>validateExpressionNode({
34
- node: child,
35
- validFunctions,
36
- parentNode: node,
37
- validScalarFunctions,
38
- hasAggregation: true
39
- }));
40
- }
41
- // For non-aggregation functions
42
- if (validScalarFunctions.has(node.function_name)) {
43
- return node.children.some((child)=>{
44
- return validateExpressionNode({
45
- node: child,
46
- validFunctions,
47
- parentNode: node,
48
- validScalarFunctions
49
- }) && (containsAggregation(child, validFunctions) || hasAggregation);
50
- });
51
- }
52
- throw new Error(`Invalid function type: ${node.function_name}`);
53
- }
54
- // Operator expression
55
- if ((0, _utils.isOperatorExpression)(node)) {
56
- return node.children.some((child)=>validateExpressionNode({
57
- node: child,
58
- validFunctions,
59
- parentNode,
60
- validScalarFunctions
61
- }));
62
- }
63
- // Cast expression
64
- if ((0, _utils.isCastExpression)(node)) {
65
- return validateExpressionNode({
66
- node: node.child,
67
- validFunctions,
68
- parentNode,
69
- validScalarFunctions
70
- });
71
- }
72
- // Case expression
73
- if ((0, _utils.isCaseExpression)(node)) {
74
- const checksValid = node.case_checks.every((caseCheck)=>{
75
- // WHEN conditions cannot contain aggregations
76
- const whenValid = !containsAggregation(caseCheck.when_expr, validFunctions);
77
- // THEN expressions must be valid aggregations or contain no aggregations
78
- const thenValid = validateExpressionNode({
79
- node: caseCheck.then_expr,
80
- validFunctions,
81
- parentNode: node,
82
- validScalarFunctions
83
- }) || !containsAggregation(caseCheck.then_expr, validFunctions);
84
- return whenValid && thenValid;
85
- });
86
- const elseValid = validateExpressionNode({
87
- node: node.else_expr,
88
- validFunctions,
89
- parentNode: node,
90
- validScalarFunctions
91
- }) || !containsAggregation(node.else_expr, validFunctions);
92
- return checksValid && elseValid;
93
- }
94
- // Subquery expression
95
- if ((0, _utils.isSubqueryExpression)(node) && (0, _utils.isSelectNode)(node.subquery.node)) {
96
- return node.subquery.node.select_list.every((node)=>{
97
- return validateExpressionNode({
98
- node,
99
- validFunctions,
100
- parentNode,
101
- validScalarFunctions
102
- });
103
- });
104
- }
105
- // Window expression
106
- if ((0, _utils.isWindowExpression)(node)) {
107
- return node.children.every((node)=>{
108
- return validateExpressionNode({
109
- node,
110
- validFunctions,
111
- parentNode,
112
- validScalarFunctions
113
- });
114
- });
115
- }
116
- throw new Error(`Invalid expression type: ${node.type}`);
117
- };
118
- const containsAggregation = (node, validFunctions)=>{
119
- if (!node) return false;
120
- // Function expression
121
- if ((0, _utils.isFunctionExpression)(node) || (0, _utils.isWindowExpression)(node)) {
122
- return validFunctions.has(node.function_name) || node.children.some((child)=>containsAggregation(child, validFunctions));
123
- }
124
- // Case expression
125
- if ((0, _utils.isCaseExpression)(node)) {
126
- return node.case_checks.some((check)=>containsAggregation(check.when_expr, validFunctions) || containsAggregation(check.then_expr, validFunctions)) || containsAggregation(node.else_expr, validFunctions);
127
- }
128
- // Operator expression
129
- if ((0, _utils.isOperatorExpression)(node)) {
130
- return node.children.some((child)=>containsAggregation(child, validFunctions));
131
- }
132
- if ((0, _utils.isCastExpression)(node)) {
133
- return containsAggregation(node.child, validFunctions);
134
- }
135
- // Window expression
136
- if ((0, _utils.isWindowExpression)(node)) {
137
- return node.children.some((child)=>containsAggregation(child, validFunctions));
138
- }
139
- // Subquery expression
140
- if ((0, _utils.isSubqueryExpression)(node) && (0, _utils.isSelectNode)(node.subquery.node)) {
141
- return node.subquery.node.select_list.every((node)=>{
142
- return containsAggregation(node, validFunctions);
143
- });
144
- }
145
- return false;
146
- };
147
- const validateMeasure = (parsedSerialization, validFunctions, validScalarFunctions)=>{
148
- const node = (0, _utils1.getSelectNode)(parsedSerialization);
149
- const validFunctionSet = new Set(validFunctions);
150
- const validScalarFunctionSet = new Set(validScalarFunctions);
151
- // Validate the expression
152
- if (validateExpressionNode({
153
- node: node,
154
- validFunctions: validFunctionSet,
155
- parentNode: null,
156
- validScalarFunctions: validScalarFunctionSet
157
- })) {
158
- return true;
159
- }
160
- throw new Error('Expression contains invalid functions or operators');
161
- };
162
-
163
- //# sourceMappingURL=measure-validator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../meerkat-core/src/ast-validator/measure-validator.ts"],"sourcesContent":["import { ParsedExpression } from '../types/duckdb-serialization-types';\nimport {\n isCaseExpression,\n isCastExpression,\n isColumnRefExpression,\n isConstantExpression,\n isFunctionExpression,\n isOperatorExpression,\n isSelectNode,\n isSubqueryExpression,\n isWindowExpression,\n} from '../types/utils';\nimport { ParsedSerialization } from './types';\nimport { getSelectNode } from './utils';\n\nexport const validateExpressionNode = ({\n node,\n validFunctions,\n parentNode,\n validScalarFunctions,\n hasAggregation = false,\n}: {\n node: ParsedExpression;\n validFunctions: Set<string>;\n parentNode: ParsedExpression | null;\n hasAggregation?: boolean;\n validScalarFunctions: Set<string>;\n}): boolean => {\n // Base cases for column references and constants\n if (isColumnRefExpression(node) || isConstantExpression(node)) {\n // Allow column references inside aggregation functions\n return !!parentNode;\n }\n\n // Check for valid aggregation functions\n if (isFunctionExpression(node) || isWindowExpression(node)) {\n // count_star don't have children\n if (node.function_name === 'count_star') return true;\n\n // This is a valid aggregation function - verify its children don't contain nested aggregations\n if (validFunctions.has(node.function_name)) {\n return node.children.some((child) =>\n validateExpressionNode({\n node: child,\n validFunctions,\n parentNode: node,\n validScalarFunctions,\n hasAggregation: true,\n })\n );\n }\n\n // For non-aggregation functions\n if (validScalarFunctions.has(node.function_name)) {\n return node.children.some((child) => {\n return (\n validateExpressionNode({\n node: child,\n validFunctions,\n parentNode: node,\n validScalarFunctions,\n }) &&\n (containsAggregation(child, validFunctions) || hasAggregation)\n );\n });\n }\n\n throw new Error(`Invalid function type: ${node.function_name}`);\n }\n\n // Operator expression\n if (isOperatorExpression(node)) {\n return node.children.some((child) =>\n validateExpressionNode({\n node: child,\n validFunctions,\n parentNode,\n validScalarFunctions,\n })\n );\n }\n\n // Cast expression\n if (isCastExpression(node)) {\n return validateExpressionNode({\n node: node.child,\n validFunctions,\n parentNode,\n validScalarFunctions,\n });\n }\n\n // Case expression\n if (isCaseExpression(node)) {\n const checksValid = node.case_checks.every((caseCheck) => {\n // WHEN conditions cannot contain aggregations\n const whenValid = !containsAggregation(\n caseCheck.when_expr,\n validFunctions\n );\n\n // THEN expressions must be valid aggregations or contain no aggregations\n const thenValid =\n validateExpressionNode({\n node: caseCheck.then_expr,\n validFunctions,\n parentNode: node,\n validScalarFunctions,\n }) || !containsAggregation(caseCheck.then_expr, validFunctions);\n return whenValid && thenValid;\n });\n\n const elseValid =\n validateExpressionNode({\n node: node.else_expr,\n validFunctions,\n parentNode: node,\n validScalarFunctions,\n }) || !containsAggregation(node.else_expr, validFunctions);\n\n return checksValid && elseValid;\n }\n\n // Subquery expression\n if (isSubqueryExpression(node) && isSelectNode(node.subquery.node)) {\n return node.subquery.node.select_list.every((node) => {\n return validateExpressionNode({\n node,\n validFunctions,\n parentNode,\n validScalarFunctions,\n });\n });\n }\n\n // Window expression\n if (isWindowExpression(node)) {\n return node.children.every((node) => {\n return validateExpressionNode({\n node,\n validFunctions,\n parentNode,\n validScalarFunctions,\n });\n });\n }\n\n throw new Error(`Invalid expression type: ${node.type}`);\n};\n\nexport const containsAggregation = (\n node: ParsedExpression,\n validFunctions: Set<string>\n): boolean => {\n if (!node) return false;\n\n // Function expression\n if (isFunctionExpression(node) || isWindowExpression(node)) {\n return (\n validFunctions.has(node.function_name) ||\n node.children.some((child) => containsAggregation(child, validFunctions))\n );\n }\n\n // Case expression\n if (isCaseExpression(node)) {\n return (\n node.case_checks.some(\n (check) =>\n containsAggregation(check.when_expr, validFunctions) ||\n containsAggregation(check.then_expr, validFunctions)\n ) || containsAggregation(node.else_expr, validFunctions)\n );\n }\n\n // Operator expression\n if (isOperatorExpression(node)) {\n return node.children.some((child) =>\n containsAggregation(child, validFunctions)\n );\n }\n\n if (isCastExpression(node)) {\n return containsAggregation(node.child, validFunctions);\n }\n\n // Window expression\n if (isWindowExpression(node)) {\n return node.children.some((child) =>\n containsAggregation(child, validFunctions)\n );\n }\n\n // Subquery expression\n if (isSubqueryExpression(node) && isSelectNode(node.subquery.node)) {\n return node.subquery.node.select_list.every((node) => {\n return containsAggregation(node, validFunctions);\n });\n }\n\n return false;\n};\n\nexport const validateMeasure = (\n parsedSerialization: ParsedSerialization,\n validFunctions: string[],\n validScalarFunctions: string[]\n): boolean => {\n const node = getSelectNode(parsedSerialization);\n\n const validFunctionSet = new Set(validFunctions);\n const validScalarFunctionSet = new Set(validScalarFunctions);\n\n // Validate the expression\n if (\n validateExpressionNode({\n node: node,\n validFunctions: validFunctionSet,\n parentNode: null,\n validScalarFunctions: validScalarFunctionSet,\n })\n ) {\n return true;\n }\n\n throw new Error('Expression contains invalid functions or operators');\n};\n"],"names":["containsAggregation","validateExpressionNode","validateMeasure","node","validFunctions","parentNode","validScalarFunctions","hasAggregation","isColumnRefExpression","isConstantExpression","isFunctionExpression","isWindowExpression","function_name","has","children","some","child","Error","isOperatorExpression","isCastExpression","isCaseExpression","checksValid","case_checks","every","caseCheck","whenValid","when_expr","thenValid","then_expr","elseValid","else_expr","isSubqueryExpression","isSelectNode","subquery","select_list","type","check","parsedSerialization","getSelectNode","validFunctionSet","Set","validScalarFunctionSet"],"mappings":";;;;;;;;IAsJaA,mBAAmB;eAAnBA;;IAvIAC,sBAAsB;eAAtBA;;IA4LAC,eAAe;eAAfA;;;uBAhMN;wBAEuB;AAEvB,MAAMD,yBAAyB,CAAC,EACrCE,IAAI,EACJC,cAAc,EACdC,UAAU,EACVC,oBAAoB,EACpBC,iBAAiB,KAAK,EAOvB;IACC,iDAAiD;IACjD,IAAIC,IAAAA,4BAAqB,EAACL,SAASM,IAAAA,2BAAoB,EAACN,OAAO;QAC7D,uDAAuD;QACvD,OAAO,CAAC,CAACE;IACX;IAEA,wCAAwC;IACxC,IAAIK,IAAAA,2BAAoB,EAACP,SAASQ,IAAAA,yBAAkB,EAACR,OAAO;QAC1D,iCAAiC;QACjC,IAAIA,KAAKS,aAAa,KAAK,cAAc,OAAO;QAEhD,+FAA+F;QAC/F,IAAIR,eAAeS,GAAG,CAACV,KAAKS,aAAa,GAAG;YAC1C,OAAOT,KAAKW,QAAQ,CAACC,IAAI,CAAC,CAACC,QACzBf,uBAAuB;oBACrBE,MAAMa;oBACNZ;oBACAC,YAAYF;oBACZG;oBACAC,gBAAgB;gBAClB;QAEJ;QAEA,gCAAgC;QAChC,IAAID,qBAAqBO,GAAG,CAACV,KAAKS,aAAa,GAAG;YAChD,OAAOT,KAAKW,QAAQ,CAACC,IAAI,CAAC,CAACC;gBACzB,OACEf,uBAAuB;oBACrBE,MAAMa;oBACNZ;oBACAC,YAAYF;oBACZG;gBACF,MACCN,CAAAA,oBAAoBgB,OAAOZ,mBAAmBG,cAAa;YAEhE;QACF;QAEA,MAAM,IAAIU,MAAM,CAAC,uBAAuB,EAAEd,KAAKS,aAAa,CAAC,CAAC;IAChE;IAEA,sBAAsB;IACtB,IAAIM,IAAAA,2BAAoB,EAACf,OAAO;QAC9B,OAAOA,KAAKW,QAAQ,CAACC,IAAI,CAAC,CAACC,QACzBf,uBAAuB;gBACrBE,MAAMa;gBACNZ;gBACAC;gBACAC;YACF;IAEJ;IAEA,kBAAkB;IAClB,IAAIa,IAAAA,uBAAgB,EAAChB,OAAO;QAC1B,OAAOF,uBAAuB;YAC5BE,MAAMA,KAAKa,KAAK;YAChBZ;YACAC;YACAC;QACF;IACF;IAEA,kBAAkB;IAClB,IAAIc,IAAAA,uBAAgB,EAACjB,OAAO;QAC1B,MAAMkB,cAAclB,KAAKmB,WAAW,CAACC,KAAK,CAAC,CAACC;YAC1C,8CAA8C;YAC9C,MAAMC,YAAY,CAACzB,oBACjBwB,UAAUE,SAAS,EACnBtB;YAGF,yEAAyE;YACzE,MAAMuB,YACJ1B,uBAAuB;gBACrBE,MAAMqB,UAAUI,SAAS;gBACzBxB;gBACAC,YAAYF;gBACZG;YACF,MAAM,CAACN,oBAAoBwB,UAAUI,SAAS,EAAExB;YAClD,OAAOqB,aAAaE;QACtB;QAEA,MAAME,YACJ5B,uBAAuB;YACrBE,MAAMA,KAAK2B,SAAS;YACpB1B;YACAC,YAAYF;YACZG;QACF,MAAM,CAACN,oBAAoBG,KAAK2B,SAAS,EAAE1B;QAE7C,OAAOiB,eAAeQ;IACxB;IAEA,sBAAsB;IACtB,IAAIE,IAAAA,2BAAoB,EAAC5B,SAAS6B,IAAAA,mBAAY,EAAC7B,KAAK8B,QAAQ,CAAC9B,IAAI,GAAG;QAClE,OAAOA,KAAK8B,QAAQ,CAAC9B,IAAI,CAAC+B,WAAW,CAACX,KAAK,CAAC,CAACpB;YAC3C,OAAOF,uBAAuB;gBAC5BE;gBACAC;gBACAC;gBACAC;YACF;QACF;IACF;IAEA,oBAAoB;IACpB,IAAIK,IAAAA,yBAAkB,EAACR,OAAO;QAC5B,OAAOA,KAAKW,QAAQ,CAACS,KAAK,CAAC,CAACpB;YAC1B,OAAOF,uBAAuB;gBAC5BE;gBACAC;gBACAC;gBACAC;YACF;QACF;IACF;IAEA,MAAM,IAAIW,MAAM,CAAC,yBAAyB,EAAEd,KAAKgC,IAAI,CAAC,CAAC;AACzD;AAEO,MAAMnC,sBAAsB,CACjCG,MACAC;IAEA,IAAI,CAACD,MAAM,OAAO;IAElB,sBAAsB;IACtB,IAAIO,IAAAA,2BAAoB,EAACP,SAASQ,IAAAA,yBAAkB,EAACR,OAAO;QAC1D,OACEC,eAAeS,GAAG,CAACV,KAAKS,aAAa,KACrCT,KAAKW,QAAQ,CAACC,IAAI,CAAC,CAACC,QAAUhB,oBAAoBgB,OAAOZ;IAE7D;IAEA,kBAAkB;IAClB,IAAIgB,IAAAA,uBAAgB,EAACjB,OAAO;QAC1B,OACEA,KAAKmB,WAAW,CAACP,IAAI,CACnB,CAACqB,QACCpC,oBAAoBoC,MAAMV,SAAS,EAAEtB,mBACrCJ,oBAAoBoC,MAAMR,SAAS,EAAExB,oBACpCJ,oBAAoBG,KAAK2B,SAAS,EAAE1B;IAE7C;IAEA,sBAAsB;IACtB,IAAIc,IAAAA,2BAAoB,EAACf,OAAO;QAC9B,OAAOA,KAAKW,QAAQ,CAACC,IAAI,CAAC,CAACC,QACzBhB,oBAAoBgB,OAAOZ;IAE/B;IAEA,IAAIe,IAAAA,uBAAgB,EAAChB,OAAO;QAC1B,OAAOH,oBAAoBG,KAAKa,KAAK,EAAEZ;IACzC;IAEA,oBAAoB;IACpB,IAAIO,IAAAA,yBAAkB,EAACR,OAAO;QAC5B,OAAOA,KAAKW,QAAQ,CAACC,IAAI,CAAC,CAACC,QACzBhB,oBAAoBgB,OAAOZ;IAE/B;IAEA,sBAAsB;IACtB,IAAI2B,IAAAA,2BAAoB,EAAC5B,SAAS6B,IAAAA,mBAAY,EAAC7B,KAAK8B,QAAQ,CAAC9B,IAAI,GAAG;QAClE,OAAOA,KAAK8B,QAAQ,CAAC9B,IAAI,CAAC+B,WAAW,CAACX,KAAK,CAAC,CAACpB;YAC3C,OAAOH,oBAAoBG,MAAMC;QACnC;IACF;IAEA,OAAO;AACT;AAEO,MAAMF,kBAAkB,CAC7BmC,qBACAjC,gBACAE;IAEA,MAAMH,OAAOmC,IAAAA,qBAAa,EAACD;IAE3B,MAAME,mBAAmB,IAAIC,IAAIpC;IACjC,MAAMqC,yBAAyB,IAAID,IAAIlC;IAEvC,0BAA0B;IAC1B,IACEL,uBAAuB;QACrBE,MAAMA;QACNC,gBAAgBmC;QAChBlC,YAAY;QACZC,sBAAsBmC;IACxB,IACA;QACA,OAAO;IACT;IAEA,MAAM,IAAIxB,MAAM;AAClB"}