@devrev/meerkat-node 0.0.92 → 0.0.94

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 (33) hide show
  1. package/__tests__/test-data.js +1279 -0
  2. package/__tests__/test-data.js.map +1 -0
  3. package/cube-to-sql/cube-to-sql.js.map +1 -0
  4. package/duckdb-exec.js.map +1 -0
  5. package/duckdb-manager/duckdb-manager.js.map +1 -0
  6. package/duckdb-singleton.js.map +1 -0
  7. package/file-manager/file-manager.js.map +1 -0
  8. package/index.js.map +1 -0
  9. package/node-sql-to-serialization.js.map +1 -0
  10. package/package.json +4 -3
  11. package/src/__tests__/test-data.d.ts +10 -28
  12. package/utils/duckdb-type-convertor.js.map +1 -0
  13. package/utils/hash-string.js.map +1 -0
  14. package/src/__tests__/test-data.js +0 -1228
  15. package/src/__tests__/test-data.js.map +0 -1
  16. package/src/cube-to-sql/cube-to-sql.js.map +0 -1
  17. package/src/duckdb-exec.js.map +0 -1
  18. package/src/duckdb-manager/duckdb-manager.js.map +0 -1
  19. package/src/duckdb-singleton.js.map +0 -1
  20. package/src/file-manager/file-manager.js.map +0 -1
  21. package/src/index.js.map +0 -1
  22. package/src/node-sql-to-serialization.js.map +0 -1
  23. package/src/utils/duckdb-type-convertor.js.map +0 -1
  24. package/src/utils/hash-string.js.map +0 -1
  25. /package/{src/cube-to-sql → cube-to-sql}/cube-to-sql.js +0 -0
  26. /package/{src/duckdb-exec.js → duckdb-exec.js} +0 -0
  27. /package/{src/duckdb-manager → duckdb-manager}/duckdb-manager.js +0 -0
  28. /package/{src/duckdb-singleton.js → duckdb-singleton.js} +0 -0
  29. /package/{src/file-manager → file-manager}/file-manager.js +0 -0
  30. /package/{src/index.js → index.js} +0 -0
  31. /package/{src/node-sql-to-serialization.js → node-sql-to-serialization.js} +0 -0
  32. /package/{src/utils → utils}/duckdb-type-convertor.js +0 -0
  33. /package/{src/utils → utils}/hash-string.js +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../meerkat-node/src/__tests__/test-data.ts"],"sourcesContent":["export const CREATE_TEST_TABLE = `\nCREATE TABLE orders (\n order_id INTEGER,\n customer_id VARCHAR,\n product_id VARCHAR,\n order_date DATE,\n order_amount FLOAT,\n vendors VARCHAR[]\n);\n`;\n\nexport const INPUT_DATA_QUERY = `\nINSERT INTO orders VALUES\n(1, '1', '1', '2022-01-01', 50, ['myntra', 'amazon', 'flipkart']),\n(2, '1', '2', '2022-01-02', 80, ['myntra']),\n(3, '2', '3', '2022-02-01', 25, []),\n(4, '2', '1', '2022-03-01', 75, ['flipkart']),\n(5, '3', '1', '2022-03-02', 100, ['myntra', 'amazon', 'flipkart']),\n(6, '4', '2', '2022-04-01', 45, []),\n(7, '4', '3', '2022-05-01', 90, ['myntra', 'flipkart']),\n(8, '5', '1', '2022-05-02', 65, ['amazon', 'flipkart']),\n(9, '5', '2', '2022-05-05', 85, []),\n(10, '6', '3', '2022-06-01', 120, ['myntra', 'amazon']),\n(11, '6aa6', '3', '2024-06-01', 0, ['amazon']),\n(12, NULL, '3', '2024-07-01', 100, ['flipkart']);\n`;\n\nexport const TABLE_SCHEMA = {\n name: 'orders',\n sql: 'select * from orders',\n measures: [\n {\n name: 'order_amount',\n sql: 'order_amount',\n type: 'number',\n },\n {\n name: 'total_order_amount',\n sql: 'SUM(order_amount)',\n type: 'number',\n },\n ],\n dimensions: [\n {\n name: 'order_date',\n sql: 'order_date',\n type: 'time',\n },\n {\n name: 'order_id',\n sql: 'order_id',\n type: 'number',\n },\n {\n name: 'customer_id',\n sql: 'customer_id',\n type: 'string',\n },\n {\n name: 'product_id',\n sql: 'product_id',\n type: 'string',\n },\n {\n name: 'order_month',\n sql: `DATE_TRUNC('month', order_date)`,\n type: 'string',\n },\n {\n name: 'vendors',\n sql: 'vendors',\n type: 'string_array',\n },\n ],\n};\n\nexport const TEST_DATA = [\n [\n {\n testName: 'GroupBySQLInnerQuery',\n expectedSQL: `SELECT SUM(order_amount) AS orders__total_order_amount , orders__order_month FROM (SELECT *, DATE_TRUNC('month', order_date) AS orders__order_month FROM (select * from orders) AS orders) AS orders GROUP BY orders__order_month LIMIT 1`,\n cubeInput: {\n measures: ['orders.total_order_amount'],\n filters: [],\n dimensions: ['orders.order_month'],\n limit: 1,\n },\n expectedOutput: [\n {\n orders__order_month: '2022-01-01T00:00:00.000Z',\n orders__total_order_amount: 130,\n },\n ],\n },\n ],\n [\n {\n testName: 'GroupBy',\n expectedSQL: `SELECT SUM(order_amount) AS orders__total_order_amount , orders__customer_id FROM (SELECT *, customer_id AS orders__customer_id FROM (select * from orders) AS orders) AS orders GROUP BY orders__customer_id ORDER BY orders__total_order_amount ASC, orders__customer_id ASC`,\n cubeInput: {\n measures: ['orders.total_order_amount'],\n filters: [],\n dimensions: ['orders.customer_id'],\n order: {\n 'orders.total_order_amount': 'asc',\n 'orders.customer_id': 'asc',\n },\n },\n expectedOutput: [\n {\n orders__customer_id: '6aa6',\n orders__total_order_amount: 0,\n },\n {\n orders__customer_id: '2',\n orders__total_order_amount: 100,\n },\n {\n orders__customer_id: '3',\n orders__total_order_amount: 100,\n },\n {\n orders__customer_id: null,\n orders__total_order_amount: 100,\n },\n {\n orders__customer_id: '6',\n orders__total_order_amount: 120,\n },\n {\n orders__customer_id: '1',\n orders__total_order_amount: 130,\n },\n {\n orders__customer_id: '4',\n orders__total_order_amount: 135,\n },\n {\n orders__customer_id: '5',\n orders__total_order_amount: 150,\n },\n ],\n },\n ],\n [\n {\n testName: 'Equals',\n expectedSQL: `SELECT orders.* FROM (SELECT *, customer_id AS orders__customer_id FROM (select * from orders) AS orders) AS orders WHERE (orders__customer_id = '1')`,\n cubeInput: {\n measures: ['*'],\n filters: [\n {\n member: 'orders.customer_id',\n operator: 'equals',\n values: ['1'],\n },\n ],\n dimensions: [],\n },\n expectedOutput: [\n {\n order_id: 1,\n customer_id: '1',\n orders__customer_id: '1',\n product_id: '1',\n order_date: '2022-01-01',\n order_amount: 50.0,\n vendors: ['myntra', 'amazon', 'flipkart'],\n },\n {\n order_id: 2,\n customer_id: '1',\n orders__customer_id: '1',\n product_id: '2',\n order_date: '2022-01-02',\n order_amount: 80.0,\n vendors: ['myntra'],\n },\n ],\n },\n {\n testName: 'Equals for multiple values',\n expectedSQL: `SELECT orders.* FROM (SELECT *, customer_id AS orders__customer_id FROM (select * from orders) AS orders) AS orders WHERE ((orders__customer_id = '1') AND (orders__customer_id = '2'))`,\n cubeInput: {\n measures: ['*'],\n filters: [\n {\n member: 'orders.customer_id',\n operator: 'equals',\n values: ['1', '2'],\n },\n ],\n dimensions: [],\n },\n expectedOutput: [],\n },\n ],\n [\n {\n testName: 'NotEquals',\n expectedSQL: `SELECT orders.* FROM (SELECT *, customer_id AS orders__customer_id FROM (select * from orders) AS orders) AS orders WHERE (orders__customer_id != '1')`,\n cubeInput: {\n measures: ['*'],\n filters: [\n {\n member: 'orders.customer_id',\n operator: 'notEquals',\n values: ['1'],\n },\n ],\n dimensions: [],\n },\n expectedOutput: [\n {\n order_id: 3,\n customer_id: '2',\n orders__customer_id: '2',\n product_id: '3',\n order_date: '2022-02-01',\n order_amount: 25.0,\n vendors: [],\n },\n {\n order_id: 4,\n customer_id: '2',\n orders__customer_id: '2',\n product_id: '1',\n order_date: '2022-03-01',\n order_amount: 75.0,\n vendors: ['flipkart'],\n },\n {\n order_id: 5,\n customer_id: '3',\n orders__customer_id: '3',\n product_id: '1',\n order_date: '2022-03-02',\n order_amount: 100.0,\n vendors: ['myntra', 'amazon', 'flipkart'],\n },\n {\n order_id: 6,\n customer_id: '4',\n orders__customer_id: '4',\n product_id: '2',\n order_date: '2022-04-01',\n order_amount: 45.0,\n vendors: [],\n },\n {\n order_id: 7,\n customer_id: '4',\n orders__customer_id: '4',\n product_id: '3',\n order_date: '2022-05-01',\n order_amount: 90.0,\n vendors: ['myntra', 'flipkart'],\n },\n {\n order_id: 8,\n customer_id: '5',\n orders__customer_id: '5',\n product_id: '1',\n order_date: '2022-05-02',\n order_amount: 65.0,\n vendors: ['amazon', 'flipkart'],\n },\n {\n order_id: 9,\n customer_id: '5',\n orders__customer_id: '5',\n product_id: '2',\n order_date: '2022-05-05',\n order_amount: 85.0,\n vendors: [],\n },\n {\n order_id: 10,\n customer_id: '6',\n orders__customer_id: '6',\n product_id: '3',\n order_date: '2022-06-01',\n order_amount: 120.0,\n vendors: ['myntra', 'amazon'],\n },\n {\n order_id: 11,\n customer_id: '6aa6',\n orders__customer_id: '6aa6',\n product_id: '3',\n order_date: '2024-06-01',\n order_amount: 0.0,\n vendors: ['amazon'],\n },\n ],\n },\n ],\n [\n {\n testName: 'Contains',\n expectedSQL: `SELECT orders.* FROM (SELECT *, customer_id AS orders__customer_id FROM (select * from orders) AS orders) AS orders WHERE (orders__customer_id ~~* '%aa%')`,\n cubeInput: {\n measures: ['*'],\n filters: [\n {\n member: 'orders.customer_id',\n operator: 'contains',\n values: ['aa'],\n },\n ],\n dimensions: [],\n },\n expectedOutput: [\n {\n order_id: 11,\n customer_id: '6aa6',\n orders__customer_id: '6aa6',\n product_id: '3',\n order_date: '2024-06-01',\n order_amount: 0.0,\n vendors: ['amazon'],\n },\n ],\n },\n ],\n [\n {\n testName: 'NotContains',\n expectedSQL: `SELECT orders.* FROM (SELECT *, customer_id AS orders__customer_id FROM (select * from orders) AS orders) AS orders WHERE ((orders__customer_id !~~ '%1%') AND (orders__customer_id !~~ '%2%') AND (orders__customer_id !~~ '%3%') AND (orders__customer_id !~~ '%4%') AND (orders__customer_id !~~ '%5%') AND (orders__customer_id !~~ '%aa%'))`,\n cubeInput: {\n measures: ['*'],\n filters: [\n {\n and: [\n {\n member: 'orders.customer_id',\n operator: 'notContains',\n values: ['1'],\n },\n {\n member: 'orders.customer_id',\n operator: 'notContains',\n values: ['2'],\n },\n {\n member: 'orders.customer_id',\n operator: 'notContains',\n values: ['3'],\n },\n {\n member: 'orders.customer_id',\n operator: 'notContains',\n values: ['4'],\n },\n {\n member: 'orders.customer_id',\n operator: 'notContains',\n values: ['5'],\n },\n {\n member: 'orders.customer_id',\n operator: 'notContains',\n values: ['aa'],\n },\n ],\n },\n ],\n dimensions: [],\n },\n expectedOutput: [\n {\n order_id: 10,\n customer_id: '6',\n orders__customer_id: '6',\n product_id: '3',\n order_date: '2022-06-01',\n order_amount: 120,\n vendors: ['myntra', 'amazon'],\n },\n ],\n },\n ],\n [\n {\n testName: 'GreaterThan',\n expectedSQL: `SELECT orders.* FROM (SELECT *, orders.order_amount AS orders__order_amount FROM (select * from orders) AS orders) AS orders WHERE (orders__order_amount > 50)`,\n cubeInput: {\n measures: ['*'],\n filters: [\n {\n member: 'orders.order_amount',\n operator: 'gt',\n values: ['50'],\n },\n ],\n dimensions: [],\n },\n expectedOutput: [\n {\n order_id: 2,\n customer_id: '1',\n product_id: '2',\n order_date: '2022-01-02',\n order_amount: 80.0,\n orders__order_amount: 80.0,\n vendors: ['myntra'],\n },\n {\n order_id: 4,\n customer_id: '2',\n product_id: '1',\n order_date: '2022-03-01',\n order_amount: 75.0,\n orders__order_amount: 75.0,\n vendors: ['flipkart'],\n },\n {\n order_id: 5,\n customer_id: '3',\n product_id: '1',\n order_date: '2022-03-02',\n order_amount: 100.0,\n orders__order_amount: 100.0,\n vendors: ['myntra', 'amazon', 'flipkart'],\n },\n {\n order_id: 7,\n customer_id: '4',\n product_id: '3',\n order_date: '2022-05-01',\n order_amount: 90.0,\n orders__order_amount: 90.0,\n vendors: ['myntra', 'flipkart'],\n },\n {\n order_id: 8,\n customer_id: '5',\n product_id: '1',\n order_date: '2022-05-02',\n order_amount: 65.0,\n orders__order_amount: 65.0,\n vendors: ['amazon', 'flipkart'],\n },\n {\n order_id: 9,\n customer_id: '5',\n product_id: '2',\n order_date: '2022-05-05',\n order_amount: 85.0,\n orders__order_amount: 85.0,\n vendors: [],\n },\n {\n order_id: 10,\n customer_id: '6',\n product_id: '3',\n order_date: '2022-06-01',\n order_amount: 120.0,\n orders__order_amount: 120.0,\n vendors: ['myntra', 'amazon'],\n },\n {\n customer_id: null,\n order_amount: 100,\n order_date: '2024-07-01T00:00:00.000Z',\n order_id: 12,\n orders__order_amount: 100,\n orders__order_date: undefined,\n product_id: '3',\n vendors: ['flipkart'],\n },\n ],\n },\n ],\n [\n {\n testName: 'LessThan',\n expectedSQL: `SELECT orders.* FROM (SELECT *, orders.order_amount AS orders__order_amount FROM (select * from orders) AS orders) AS orders WHERE (orders__order_amount < 50)`,\n cubeInput: {\n measures: ['*'],\n filters: [\n {\n member: 'orders.order_amount',\n operator: 'lt',\n values: ['50'],\n },\n ],\n dimensions: [],\n },\n expectedOutput: [\n {\n order_id: 3,\n customer_id: '2',\n product_id: '3',\n order_date: '2022-02-01',\n order_amount: 25.0,\n orders__order_amount: 25.0,\n vendors: [],\n },\n {\n order_id: 6,\n customer_id: '4',\n product_id: '2',\n order_date: '2022-04-01',\n order_amount: 45.0,\n orders__order_amount: 45.0,\n vendors: [],\n },\n {\n order_id: 11,\n customer_id: '6aa6',\n product_id: '3',\n order_date: '2024-06-01',\n order_amount: 0.0,\n orders__order_amount: 0.0,\n vendors: ['amazon'],\n },\n ],\n },\n ],\n [\n {\n testName: 'InDateRange',\n expectedSQL: `SELECT orders.* FROM (SELECT *, order_date AS orders__order_date FROM (select * from orders) AS orders) AS orders WHERE ((orders__order_date >= '2022-02-01') AND (orders__order_date <= '2022-03-31'))`,\n cubeInput: {\n measures: ['*'],\n filters: [\n {\n member: 'orders.order_date',\n operator: 'inDateRange',\n values: ['2022-02-01', '2022-03-31'],\n },\n ],\n dimensions: [],\n },\n expectedOutput: [\n {\n order_id: 3,\n customer_id: '2',\n product_id: '3',\n order_date: '2022-02-01',\n orders__order_date: '2022-02-01',\n order_amount: 25.0,\n vendors: [],\n },\n {\n order_id: 4,\n customer_id: '2',\n product_id: '1',\n order_date: '2022-03-01',\n orders__order_date: '2022-03-01',\n order_amount: 75.0,\n vendors: ['flipkart'],\n },\n {\n order_id: 5,\n customer_id: '3',\n product_id: '1',\n order_date: '2022-03-02',\n orders__order_date: '2022-03-02',\n order_amount: 100.0,\n vendors: ['myntra', 'amazon', 'flipkart'],\n },\n ],\n },\n ],\n [\n {\n testName: 'NotInDateRange',\n expectedSQL: `SELECT orders.* FROM (SELECT *, order_date AS orders__order_date FROM (select * from orders) AS orders) AS orders WHERE ((orders__order_date < '2022-02-01') OR (orders__order_date > '2022-03-31'))`,\n cubeInput: {\n measures: ['*'],\n filters: [\n {\n member: 'orders.order_date',\n operator: 'notInDateRange',\n values: ['2022-02-01', '2022-03-31'],\n },\n ],\n dimensions: [],\n },\n expectedOutput: [\n {\n order_id: 1,\n customer_id: '1',\n product_id: '1',\n order_date: '2022-01-01',\n order_amount: 50.0,\n orders__order_date: '2022-01-01',\n vendors: ['myntra', 'amazon', 'flipkart'],\n },\n {\n order_id: 2,\n customer_id: '1',\n product_id: '2',\n order_date: '2022-01-02',\n order_amount: 80.0,\n orders__order_date: '2022-01-02',\n vendors: ['myntra'],\n },\n {\n order_id: 6,\n customer_id: '4',\n product_id: '2',\n order_date: '2022-04-01',\n orders__order_date: '2022-04-01',\n order_amount: 45.0,\n vendors: [],\n },\n {\n order_id: 7,\n customer_id: '4',\n product_id: '3',\n order_date: '2022-05-01',\n orders__order_date: '2022-05-01',\n order_amount: 90.0,\n vendors: ['myntra', 'flipkart'],\n },\n {\n order_id: 8,\n customer_id: '5',\n product_id: '1',\n order_date: '2022-05-02',\n orders__order_date: '2022-05-02',\n order_amount: 65.0,\n vendors: ['amazon', 'flipkart'],\n },\n {\n order_id: 9,\n customer_id: '5',\n product_id: '2',\n order_date: '2022-05-05',\n orders__order_date: '2022-05-05',\n order_amount: 85.0,\n vendors: [],\n },\n {\n order_id: 10,\n customer_id: '6',\n product_id: '3',\n order_date: '2022-06-01',\n orders__order_date: '2022-06-01',\n order_amount: 120.0,\n vendors: ['myntra', 'amazon'],\n },\n {\n order_id: 11,\n customer_id: '6aa6',\n product_id: '3',\n order_date: '2024-06-01',\n orders__order_date: '2024-06-01',\n order_amount: 0.0,\n vendors: ['amazon'],\n },\n {\n customer_id: null,\n order_amount: 100,\n order_date: '2024-07-01T00:00:00.000Z',\n order_id: 12,\n orders__order_date: '2024-07-01T00:00:00.000Z',\n product_id: '3',\n vendors: ['flipkart'],\n },\n ],\n },\n ],\n // {\n // testName: 'Or',\n // expectedSQL: `SELECT orders.* FROM (select * from orders) AS orders WHERE ((orders.order_amount > 80) OR ((orders.order_date >= '2022-02-01') AND (orders.order_date <= '2022-03-01')))`,\n // cubeInput: {\n // measures: ['*'],\n // filters: [\n // {\n // or: [\n // {\n // member: 'orders.order_amount',\n // operator: 'gt',\n // values: ['80'],\n // },\n // {\n // member: 'orders.order_date',\n // operator: 'inDateRange',\n // values: ['2022-02-01', '2022-03-01'],\n // },\n // ],\n // },\n // ],\n // dimensions: [],\n // },\n // expectedOutput: [\n // {\n // order_id: 3,\n // customer_id: '2',\n // product_id: '3',\n // order_date: '2022-02-01',\n // order_amount: 25.0,\n // },\n // {\n // order_id: 4,\n // customer_id: '2',\n // product_id: '1',\n // order_date: '2022-03-01',\n // order_amount: 75.0,\n // },\n // {\n // order_id: 5,\n // customer_id: '3',\n // product_id: '1',\n // order_date: '2022-03-02',\n // order_amount: 100.0,\n // },\n // {\n // order_id: 7,\n // customer_id: '4',\n // product_id: '3',\n // order_date: '2022-05-01',\n // order_amount: 90.0,\n // },\n // {\n // order_id: 9,\n // customer_id: '5',\n // product_id: '2',\n // order_date: '2022-05-05',\n // order_amount: 85.0,\n // },\n // {\n // order_id: 10,\n // customer_id: '6',\n // product_id: '3',\n // order_date: '2022-06-01',\n // order_amount: 120.0,\n // },\n // ],\n // },\n [\n {\n testName: 'And',\n expectedSQL: `SELECT orders.* FROM (SELECT *, orders.order_amount AS orders__order_amount, order_date AS orders__order_date FROM (select * from orders) AS orders) AS orders WHERE ((orders__order_amount > 50) AND ((orders__order_date >= '2022-02-01') AND (orders__order_date <= '2022-06-01')))`,\n cubeInput: {\n measures: ['*'],\n filters: [\n {\n and: [\n {\n member: 'orders.order_amount',\n operator: 'gt',\n values: ['50'],\n },\n {\n member: 'orders.order_date',\n operator: 'inDateRange',\n values: ['2022-02-01', '2022-06-01'],\n },\n ],\n },\n ],\n dimensions: [],\n },\n expectedOutput: [\n {\n order_id: 4,\n customer_id: '2',\n product_id: '1',\n order_date: '2022-03-01',\n order_amount: 75.0,\n orders__order_amount: 75.0,\n orders__order_date: '2022-03-01',\n vendors: ['flipkart'],\n },\n {\n order_id: 5,\n customer_id: '3',\n product_id: '1',\n order_date: '2022-03-02',\n orders__order_date: '2022-03-02',\n order_amount: 100.0,\n orders__order_amount: 100.0,\n vendors: ['myntra', 'amazon', 'flipkart'],\n },\n {\n order_id: 7,\n customer_id: '4',\n product_id: '3',\n order_date: '2022-05-01',\n orders__order_date: '2022-05-01',\n order_amount: 90.0,\n orders__order_amount: 90.0,\n vendors: ['myntra', 'flipkart'],\n },\n {\n order_id: 8,\n customer_id: '5',\n product_id: '1',\n order_date: '2022-05-02',\n orders__order_date: '2022-05-02',\n order_amount: 65,\n orders__order_amount: 65,\n vendors: ['amazon', 'flipkart'],\n },\n {\n order_id: 9,\n customer_id: '5',\n product_id: '2',\n order_date: '2022-05-05',\n orders__order_date: '2022-05-05',\n order_amount: 85.0,\n orders__order_amount: 85.0,\n vendors: [],\n },\n {\n order_id: 10,\n customer_id: '6',\n product_id: '3',\n order_date: '2022-06-01',\n orders__order_date: '2022-06-01',\n order_amount: 120.0,\n orders__order_amount: 120.0,\n vendors: ['myntra', 'amazon'],\n },\n ],\n },\n ],\n [\n {\n testName: 'Set',\n expectedSQL: `SELECT orders.* FROM (SELECT *, orders.order_amount AS orders__order_amount, product_id AS orders__product_id FROM (select * from orders) AS orders) AS orders WHERE ((orders__order_amount IS NOT NULL) AND (orders__product_id = '3'))`,\n cubeInput: {\n measures: ['*'],\n filters: [\n {\n and: [\n {\n member: 'orders.order_amount',\n operator: 'set',\n },\n {\n member: 'orders.product_id',\n operator: 'equals',\n values: ['3'],\n },\n ],\n },\n ],\n dimensions: [],\n },\n expectedOutput: [\n {\n customer_id: '2',\n order_amount: 25,\n order_date: '2022-02-01T00:00:00.000Z',\n order_id: 3,\n orders__order_amount: 25,\n orders__order_date: undefined,\n orders__product_id: '3',\n product_id: '3',\n vendors: [],\n },\n {\n customer_id: '4',\n order_amount: 90,\n order_date: '2022-05-01T00:00:00.000Z',\n order_id: 7,\n orders__order_amount: 90,\n orders__order_date: undefined,\n orders__product_id: '3',\n product_id: '3',\n vendors: ['myntra', 'flipkart'],\n },\n {\n customer_id: '6',\n order_amount: 120,\n order_date: '2022-06-01T00:00:00.000Z',\n order_id: 10,\n orders__order_amount: 120,\n orders__order_date: undefined,\n orders__product_id: '3',\n product_id: '3',\n vendors: ['myntra', 'amazon'],\n },\n {\n customer_id: '6aa6',\n order_amount: 0,\n order_date: '2024-06-01T00:00:00.000Z',\n order_id: 11,\n orders__order_amount: 0,\n orders__order_date: undefined,\n orders__product_id: '3',\n product_id: '3',\n vendors: ['amazon'],\n },\n {\n customer_id: null,\n order_amount: 100,\n order_date: '2024-07-01T00:00:00.000Z',\n order_id: 12,\n orders__order_amount: 100,\n orders__order_date: undefined,\n orders__product_id: '3',\n product_id: '3',\n vendors: ['flipkart'],\n },\n ],\n },\n ],\n [\n {\n testName: 'Not Set',\n expectedSQL: `SELECT orders.* FROM (SELECT *, customer_id AS orders__customer_id, product_id AS orders__product_id FROM (select * from orders) AS orders) AS orders WHERE ((orders__customer_id IS NULL) AND (orders__product_id = '3'))`,\n cubeInput: {\n measures: ['*'],\n filters: [\n {\n and: [\n {\n member: 'orders.customer_id',\n operator: 'notSet',\n },\n {\n member: 'orders.product_id',\n operator: 'equals',\n values: ['3'],\n },\n ],\n },\n ],\n dimensions: [],\n },\n expectedOutput: [\n {\n orders__customer_id: null,\n customer_id: null,\n order_amount: 100,\n order_date: '2024-07-01T00:00:00.000Z',\n order_id: 12,\n orders__order_date: undefined,\n orders__product_id: '3',\n product_id: '3',\n vendors: ['flipkart'],\n },\n ],\n },\n ],\n [\n {\n testName: 'In',\n expectedSQL: `SELECT orders.* FROM (SELECT *, customer_id AS orders__customer_id, vendors AS orders__vendors FROM (select * from orders) AS orders) AS orders WHERE ((orders__customer_id IN ('1', '2')) AND (orders__vendors && (ARRAY['myntra', 'amazon'])))`,\n cubeInput: {\n measures: ['*'],\n filters: [\n {\n and: [\n {\n member: 'orders.customer_id',\n operator: 'in',\n values: ['1', '2'],\n },\n {\n member: 'orders.vendors',\n operator: 'in',\n values: ['myntra', 'amazon'],\n },\n ],\n },\n ],\n dimensions: [],\n },\n expectedOutput: [\n {\n customer_id: '1',\n order_amount: 50,\n order_date: '2022-01-01T00:00:00.000Z',\n order_id: 1,\n orders__customer_id: '1',\n orders__order_date: undefined,\n orders__vendors: ['myntra', 'amazon', 'flipkart'],\n product_id: '1',\n vendors: ['myntra', 'amazon', 'flipkart'],\n },\n {\n customer_id: '1',\n order_amount: 80,\n order_date: '2022-01-02T00:00:00.000Z',\n order_id: 2,\n orders__customer_id: '1',\n orders__order_date: undefined,\n orders__vendors: ['myntra'],\n product_id: '2',\n vendors: ['myntra'],\n },\n ],\n },\n ],\n [\n {\n testName: 'Not In',\n expectedSQL: `SELECT orders.* FROM (SELECT *, customer_id AS orders__customer_id, vendors AS orders__vendors FROM (select * from orders) AS orders) AS orders WHERE ((orders__customer_id NOT IN ('1', '2')) AND (NOT (orders__vendors && (ARRAY['myntra', 'flipkart']))))`,\n cubeInput: {\n measures: ['*'],\n filters: [\n {\n and: [\n {\n member: 'orders.customer_id',\n operator: 'notIn',\n values: ['1', '2'],\n },\n {\n member: 'orders.vendors',\n operator: 'notIn',\n values: ['myntra', 'flipkart'],\n },\n ],\n },\n ],\n dimensions: [],\n },\n expectedOutput: [\n {\n customer_id: '4',\n order_amount: 45,\n order_date: '2022-04-01T00:00:00.000Z',\n order_id: 6,\n orders__customer_id: '4',\n orders__order_date: undefined,\n orders__vendors: [],\n product_id: '2',\n vendors: [],\n },\n {\n customer_id: '5',\n order_amount: 85,\n order_date: '2022-05-05T00:00:00.000Z',\n order_id: 9,\n orders__customer_id: '5',\n orders__order_date: undefined,\n orders__vendors: [],\n product_id: '2',\n vendors: [],\n },\n {\n customer_id: '6aa6',\n order_amount: 0,\n order_date: '2024-06-01T00:00:00.000Z',\n order_id: 11,\n orders__customer_id: '6aa6',\n orders__order_date: undefined,\n orders__vendors: ['amazon'],\n product_id: '3',\n vendors: ['amazon'],\n },\n ],\n },\n ],\n];\n"],"names":["CREATE_TEST_TABLE","INPUT_DATA_QUERY","TABLE_SCHEMA","TEST_DATA","name","sql","measures","type","dimensions","testName","expectedSQL","cubeInput","filters","limit","expectedOutput","orders__order_month","orders__total_order_amount","order","orders__customer_id","member","operator","values","order_id","customer_id","product_id","order_date","order_amount","vendors","and","orders__order_amount","orders__order_date","undefined","orders__product_id","orders__vendors"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../meerkat-node/src/cube-to-sql/cube-to-sql.ts"],"sourcesContent":["import {\n BASE_TABLE_NAME,\n ContextParams,\n Query,\n TableSchema,\n applyFilterParamsToBaseSQL,\n applyProjectionToSQLQuery,\n astDeserializerQuery,\n cubeToDuckdbAST,\n deserializeQuery,\n detectApplyContextParamsToBaseSQL,\n getCombinedTableSchema,\n getFilterParamsSQL,\n getFinalBaseSQL,\n} from '@devrev/meerkat-core';\nimport { duckdbExec } from '../duckdb-exec';\n\ninterface CubeQueryToSQLParams {\n query: Query;\n tableSchemas: TableSchema[];\n contextParams?: ContextParams;\n}\n\nexport const cubeQueryToSQL = async ({\n query,\n tableSchemas,\n contextParams,\n}: CubeQueryToSQLParams) => {\n const updatedTableSchemas: TableSchema[] = await Promise.all(\n tableSchemas.map(async (schema: TableSchema) => {\n const baseFilterParamsSQL = await getFinalBaseSQL({\n query,\n tableSchema: schema,\n getQueryOutput: duckdbExec,\n });\n return {\n ...schema,\n sql: baseFilterParamsSQL,\n };\n })\n );\n\n const updatedTableSchema = await getCombinedTableSchema(\n updatedTableSchemas,\n query\n );\n\n const ast = cubeToDuckdbAST(query, updatedTableSchema);\n if (!ast) {\n throw new Error('Could not generate AST');\n }\n\n const queryTemp = astDeserializerQuery(ast);\n\n const queryOutput = (await duckdbExec(queryTemp)) as Record<string, string>[];\n const preBaseQuery = deserializeQuery(queryOutput);\n\n const filterParamsSQL = await getFilterParamsSQL({\n query,\n tableSchema: updatedTableSchema,\n getQueryOutput: duckdbExec,\n });\n\n const filterParamQuery = applyFilterParamsToBaseSQL(\n updatedTableSchema.sql,\n filterParamsSQL\n );\n\n /**\n * Replace CONTEXT_PARAMS with context params\n */\n const baseQuery = detectApplyContextParamsToBaseSQL(\n filterParamQuery,\n contextParams || {}\n );\n\n /**\n * Replace BASE_TABLE_NAME with cube query\n */\n const replaceBaseTableName = preBaseQuery.replace(\n BASE_TABLE_NAME,\n `(${baseQuery}) AS ${updatedTableSchema.name}`\n );\n\n /**\n * Add measures to the query\n */\n const measures = query.measures;\n const dimensions = query.dimensions || [];\n const finalQuery = applyProjectionToSQLQuery(\n dimensions,\n measures,\n updatedTableSchema,\n replaceBaseTableName\n );\n\n return finalQuery;\n};\n"],"names":["cubeQueryToSQL","query","tableSchemas","contextParams","updatedTableSchemas","Promise","all","map","schema","baseFilterParamsSQL","getFinalBaseSQL","tableSchema","getQueryOutput","duckdbExec","sql","updatedTableSchema","getCombinedTableSchema","ast","cubeToDuckdbAST","Error","queryTemp","astDeserializerQuery","queryOutput","preBaseQuery","deserializeQuery","filterParamsSQL","getFilterParamsSQL","filterParamQuery","applyFilterParamsToBaseSQL","baseQuery","detectApplyContextParamsToBaseSQL","replaceBaseTableName","replace","BASE_TABLE_NAME","name","measures","dimensions","finalQuery","applyProjectionToSQLQuery"],"mappings":";+BAuBaA;;;eAAAA;;;;6BATN;4BACoB;AAQpB,MAAMA,iBAAiB,OAAO,EACnCC,KAAK,EACLC,YAAY,EACZC,aAAa,EACQ;IACrB,MAAMC,sBAAqC,MAAMC,QAAQC,GAAG,CAC1DJ,aAAaK,GAAG,CAAC,OAAOC;QACtB,MAAMC,sBAAsB,MAAMC,IAAAA,4BAAe,EAAC;YAChDT;YACAU,aAAaH;YACbI,gBAAgBC,sBAAU;QAC5B;QACA,OAAO,eACFL;YACHM,KAAKL;;IAET;IAGF,MAAMM,qBAAqB,MAAMC,IAAAA,mCAAsB,EACrDZ,qBACAH;IAGF,MAAMgB,MAAMC,IAAAA,4BAAe,EAACjB,OAAOc;IACnC,IAAI,CAACE,KAAK;QACR,MAAM,IAAIE,MAAM;IAClB;IAEA,MAAMC,YAAYC,IAAAA,iCAAoB,EAACJ;IAEvC,MAAMK,cAAe,MAAMT,IAAAA,sBAAU,EAACO;IACtC,MAAMG,eAAeC,IAAAA,6BAAgB,EAACF;IAEtC,MAAMG,kBAAkB,MAAMC,IAAAA,+BAAkB,EAAC;QAC/CzB;QACAU,aAAaI;QACbH,gBAAgBC,sBAAU;IAC5B;IAEA,MAAMc,mBAAmBC,IAAAA,uCAA0B,EACjDb,mBAAmBD,GAAG,EACtBW;IAGF;;GAEC,GACD,MAAMI,YAAYC,IAAAA,8CAAiC,EACjDH,kBACAxB,iBAAiB,CAAC;IAGpB;;GAEC,GACD,MAAM4B,uBAAuBR,aAAaS,OAAO,CAC/CC,4BAAe,EACf,CAAC,CAAC,EAAEJ,UAAU,KAAK,EAAEd,mBAAmBmB,IAAI,CAAC,CAAC;IAGhD;;GAEC,GACD,MAAMC,WAAWlC,MAAMkC,QAAQ;IAC/B,MAAMC,aAAanC,MAAMmC,UAAU,IAAI,EAAE;IACzC,MAAMC,aAAaC,IAAAA,sCAAyB,EAC1CF,YACAD,UACApB,oBACAgB;IAGF,OAAOM;AACT"}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../meerkat-node/src/duckdb-exec.ts"],"sourcesContent":["import { DuckDBSingleton } from './duckdb-singleton';\n\nexport const duckdbExec = <T = unknown>(query: string): Promise<T> => {\n const db = DuckDBSingleton.getInstance();\n return new Promise((resolve, reject) => {\n db.all(query, (err, res) => {\n if (err) {\n reject(err);\n }\n resolve(res as T);\n });\n });\n};\n"],"names":["duckdbExec","query","db","DuckDBSingleton","getInstance","Promise","resolve","reject","all","err","res"],"mappings":";+BAEaA;;;eAAAA;;;iCAFmB;AAEzB,MAAMA,aAAa,CAAcC;IACtC,MAAMC,KAAKC,gCAAe,CAACC,WAAW;IACtC,OAAO,IAAIC,QAAQ,CAACC,SAASC;QAC3BL,GAAGM,GAAG,CAACP,OAAO,CAACQ,KAAKC;YAClB,IAAID,KAAK;gBACPF,OAAOE;YACT;YACAH,QAAQI;QACV;IACF;AACF"}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../meerkat-node/src/duckdb-manager/duckdb-manager.ts"],"sourcesContent":["import { ColumnInfo, Connection, Database, TableData } from 'duckdb';\n\nimport { DuckDBSingleton } from '../duckdb-singleton';\nimport { convertTableDataToJSON } from '../utils/duckdb-type-convertor';\n\nexport class DuckDBManager {\n private db: Database | null = null;\n private connection: Connection | null = null;\n\n private initPromise: Promise<void>;\n\n constructor({\n onInitialize,\n }: {\n onInitialize?: (db: Database) => Promise<void>;\n }) {\n this.initPromise = this.initialize({ onInitialize });\n }\n\n /**\n * Initialize the DuckDB instance\n */\n private async initialize({\n onInitialize,\n }: {\n onInitialize?: (db: Database) => Promise<void>;\n }) {\n this.db = DuckDBSingleton.getInstance();\n\n await onInitialize?.(this.db);\n }\n\n /**\n * Get a DuckDB connection instance.\n */\n async getConnection() {\n // Ensure database is initialized before returning the connection\n await this.initPromise;\n\n if (!this.connection) {\n this.connection = this.db?.connect() ?? null;\n }\n\n return this.connection;\n }\n\n /**\n * Execute a query on the DuckDB connection.\n */\n async query(\n query: string\n ): Promise<{ columns: ColumnInfo[]; data: TableData }> {\n const connection = await this.getConnection();\n\n return new Promise((resolve, reject) => {\n connection?.prepare(query, (err, statement) => {\n if (err) {\n reject(new Error(`Query preparation failed: ${err.message}`));\n return;\n }\n\n const columns = statement.columns();\n\n statement.all((err, data) => {\n if (err) {\n reject(new Error(`Query execution failed: ${err.message}`));\n return;\n }\n\n const result = convertTableDataToJSON(data, columns);\n\n resolve({ columns, data: result });\n });\n });\n });\n }\n\n /**\n * Close the DuckDB connection and cleanup resources.\n */\n async close(): Promise<void> {\n if (this.connection) {\n this.connection.close();\n this.connection = null;\n }\n }\n}\n"],"names":["DuckDBManager","initialize","onInitialize","db","DuckDBSingleton","getInstance","getConnection","initPromise","connection","connect","query","Promise","resolve","reject","prepare","err","statement","Error","message","columns","all","data","result","convertTableDataToJSON","close","constructor"],"mappings":";+BAKaA;;;eAAAA;;;iCAHmB;qCACO;AAEhC,IAAA,AAAMA,gBAAN,MAAMA;IAcX;;GAEC,GACD,MAAcC,WAAW,EACvBC,YAAY,EAGb,EAAE;QACD,IAAI,CAACC,EAAE,GAAGC,gCAAe,CAACC,WAAW;QAErC,OAAMH,gCAAAA,aAAe,IAAI,CAACC,EAAE;IAC9B;IAEA;;GAEC,GACD,MAAMG,gBAAgB;QACpB,iEAAiE;QACjE,MAAM,IAAI,CAACC,WAAW;QAEtB,IAAI,CAAC,IAAI,CAACC,UAAU,EAAE;gBACF;gBAAA;YAAlB,IAAI,CAACA,UAAU,GAAG,CAAA,oBAAA,WAAA,IAAI,CAACL,EAAE,qBAAP,SAASM,OAAO,cAAhB,mBAAsB;QAC1C;QAEA,OAAO,IAAI,CAACD,UAAU;IACxB;IAEA;;GAEC,GACD,MAAME,MACJA,KAAa,EACwC;QACrD,MAAMF,aAAa,MAAM,IAAI,CAACF,aAAa;QAE3C,OAAO,IAAIK,QAAQ,CAACC,SAASC;YAC3BL,8BAAAA,WAAYM,OAAO,CAACJ,OAAO,CAACK,KAAKC;gBAC/B,IAAID,KAAK;oBACPF,OAAO,IAAII,MAAM,CAAC,0BAA0B,EAAEF,IAAIG,OAAO,CAAC,CAAC;oBAC3D;gBACF;gBAEA,MAAMC,UAAUH,UAAUG,OAAO;gBAEjCH,UAAUI,GAAG,CAAC,CAACL,KAAKM;oBAClB,IAAIN,KAAK;wBACPF,OAAO,IAAII,MAAM,CAAC,wBAAwB,EAAEF,IAAIG,OAAO,CAAC,CAAC;wBACzD;oBACF;oBAEA,MAAMI,SAASC,IAAAA,2CAAsB,EAACF,MAAMF;oBAE5CP,QAAQ;wBAAEO;wBAASE,MAAMC;oBAAO;gBAClC;YACF;QACF;IACF;IAEA;;GAEC,GACD,MAAME,QAAuB;QAC3B,IAAI,IAAI,CAAChB,UAAU,EAAE;YACnB,IAAI,CAACA,UAAU,CAACgB,KAAK;YACrB,IAAI,CAAChB,UAAU,GAAG;QACpB;IACF;IA1EAiB,YAAY,EACVvB,YAAY,EAGb,CAAE;aATKC,KAAsB;aACtBK,aAAgC;QAStC,IAAI,CAACD,WAAW,GAAG,IAAI,CAACN,UAAU,CAAC;YAAEC;QAAa;IACpD;AAqEF"}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../meerkat-node/src/duckdb-singleton.ts"],"sourcesContent":["import { Database } from 'duckdb';\n\n/**\n * DuckDBSingleton is designed as a Singleton class, which ensures that only one Database connection exists across the entire application.\n * This reduces the overhead involved in establishing new connections for each database request.\n *\n * The `getInstance` method returns a DuckDB Database instance. If an instance doesn't already exist, it creates one.\n * Subsequent calls to `getInstance` will return the pre-existing instance, ensuring there is only a single connection to the DuckDB instance throughout the use of the application.\n *\n * Usage: let duckDbConnection = DuckDBSingleton.getInstance();\n *\n * Note: In case of in-memory database, `new Database(':memory:')` in getInstance method. In-memory databases are faster for read/write operations\n * but are not persistent; they lose data as soon as the program ends or the machine is turned off, which is okay for our use-case.\n */\nexport class DuckDBSingleton {\n private static instance: Database;\n\n private constructor() {\n // private to prevent direct instantiation.\n }\n\n static getInstance(): Database {\n if (!DuckDBSingleton.instance) {\n DuckDBSingleton.instance = new Database(':memory:');\n }\n return DuckDBSingleton.instance;\n }\n}\n"],"names":["DuckDBSingleton","getInstance","instance","Database"],"mappings":";+BAcaA;;;eAAAA;;;wBAdY;AAclB,IAAA,AAAMA,kBAAN,MAAMA;IAOX,OAAOC,cAAwB;QAC7B,IAAI,CAACD,gBAAgBE,QAAQ,EAAE;YAC7BF,gBAAgBE,QAAQ,GAAG,IAAIC,gBAAQ,CAAC;QAC1C;QACA,OAAOH,gBAAgBE,QAAQ;IACjC;IATA,aAAsB;IACpB,2CAA2C;IAC7C;AAQF"}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../meerkat-node/src/file-manager/file-manager.ts"],"sourcesContent":["import axios from 'axios';\nimport { createWriteStream, promises as fs } from 'fs';\nimport * as path from 'path';\n\nimport { hashString } from '../utils/hash-string';\n\nexport class FileManager {\n private readonly baseDir: string;\n\n constructor(config: { baseDir?: string }) {\n this.baseDir = config.baseDir ?? './data';\n fs.mkdir(this.baseDir, { recursive: true }).catch(console.error);\n }\n\n public getPath(tableName: string, fileName?: string): string {\n return fileName\n ? path.join(this.baseDir, tableName, fileName)\n : path.join(this.baseDir, tableName);\n }\n\n private getHashedFileName(fileName: string): string {\n return hashString(fileName);\n }\n\n /**\n * Write a file buffer to the file system.\n */\n async writeFileBuffer(file: {\n tableName: string;\n fileName: string;\n buffer: Uint8Array;\n }): Promise<void> {\n // Hash the file name to avoid file name length issues\n const hashedFileName = this.getHashedFileName(file.fileName);\n\n const filePath = this.getPath(file.tableName, hashedFileName);\n\n await fs.mkdir(path.dirname(filePath), { recursive: true });\n\n await fs.writeFile(filePath, file.buffer);\n }\n\n /**\n * Get the file paths for a table.\n */\n async getTableFilePaths(tableName: string): Promise<string[]> {\n try {\n const files = await fs.readdir(this.getPath(tableName));\n\n return files.map((file) => this.getPath(tableName, file));\n } catch {\n return [];\n }\n }\n\n /**\n * Delete files from a table.\n */\n async deleteTableFiles(tableName: string, files: string[]): Promise<void> {\n await Promise.all(\n files.map(async (file) => {\n try {\n await fs.unlink(\n this.getPath(tableName, this.getHashedFileName(file))\n );\n } catch (err) {\n console.error(err);\n }\n })\n );\n }\n\n /**\n * Stream and register a file from a URL.\n */\n async streamAndRegisterFile({\n tableName,\n url,\n headers,\n fileName,\n }: {\n tableName: string;\n url: string;\n headers: Record<string, string>;\n fileName: string;\n }): Promise<void> {\n try {\n const response = await axios({\n headers: {\n ...headers,\n },\n method: 'get',\n responseType: 'stream',\n url,\n });\n\n const hashedFileName = hashString(fileName);\n\n const filePath = this.getPath(tableName, hashedFileName);\n await fs.mkdir(path.dirname(filePath), { recursive: true });\n\n const writer = createWriteStream(filePath);\n\n return new Promise((resolve, reject) => {\n response.data.pipe(writer);\n writer.on('finish', () => {\n writer.close();\n resolve();\n });\n writer.on('error', (err) => {\n writer.close();\n reject(err);\n });\n });\n } catch (error) {\n console.error('Error streaming file:', error);\n throw error;\n }\n }\n}\n"],"names":["FileManager","getPath","tableName","fileName","path","join","baseDir","getHashedFileName","hashString","writeFileBuffer","file","hashedFileName","filePath","fs","mkdir","dirname","recursive","writeFile","buffer","getTableFilePaths","files","readdir","map","deleteTableFiles","Promise","all","unlink","err","console","error","streamAndRegisterFile","url","headers","response","axios","method","responseType","writer","createWriteStream","resolve","reject","data","pipe","on","close","constructor","config","catch"],"mappings":";+BAMaA;;;eAAAA;;;;uBANK;oBACgC;sBAC5B;4BAEK;AAEpB,IAAA,AAAMA,cAAN,MAAMA;IAQJC,QAAQC,SAAiB,EAAEC,QAAiB,EAAU;QAC3D,OAAOA,WACHC,MAAKC,IAAI,CAAC,IAAI,CAACC,OAAO,EAAEJ,WAAWC,YACnCC,MAAKC,IAAI,CAAC,IAAI,CAACC,OAAO,EAAEJ;IAC9B;IAEQK,kBAAkBJ,QAAgB,EAAU;QAClD,OAAOK,IAAAA,sBAAU,EAACL;IACpB;IAEA;;GAEC,GACD,MAAMM,gBAAgBC,IAIrB,EAAiB;QAChB,sDAAsD;QACtD,MAAMC,iBAAiB,IAAI,CAACJ,iBAAiB,CAACG,KAAKP,QAAQ;QAE3D,MAAMS,WAAW,IAAI,CAACX,OAAO,CAACS,KAAKR,SAAS,EAAES;QAE9C,MAAME,YAAE,CAACC,KAAK,CAACV,MAAKW,OAAO,CAACH,WAAW;YAAEI,WAAW;QAAK;QAEzD,MAAMH,YAAE,CAACI,SAAS,CAACL,UAAUF,KAAKQ,MAAM;IAC1C;IAEA;;GAEC,GACD,MAAMC,kBAAkBjB,SAAiB,EAAqB;QAC5D,IAAI;YACF,MAAMkB,QAAQ,MAAMP,YAAE,CAACQ,OAAO,CAAC,IAAI,CAACpB,OAAO,CAACC;YAE5C,OAAOkB,MAAME,GAAG,CAAC,CAACZ,OAAS,IAAI,CAACT,OAAO,CAACC,WAAWQ;QACrD,EAAE,UAAM;YACN,OAAO,EAAE;QACX;IACF;IAEA;;GAEC,GACD,MAAMa,iBAAiBrB,SAAiB,EAAEkB,KAAe,EAAiB;QACxE,MAAMI,QAAQC,GAAG,CACfL,MAAME,GAAG,CAAC,OAAOZ;YACf,IAAI;gBACF,MAAMG,YAAE,CAACa,MAAM,CACb,IAAI,CAACzB,OAAO,CAACC,WAAW,IAAI,CAACK,iBAAiB,CAACG;YAEnD,EAAE,OAAOiB,KAAK;gBACZC,QAAQC,KAAK,CAACF;YAChB;QACF;IAEJ;IAEA;;GAEC,GACD,MAAMG,sBAAsB,EAC1B5B,SAAS,EACT6B,GAAG,EACHC,OAAO,EACP7B,QAAQ,EAMT,EAAiB;QAChB,IAAI;YACF,MAAM8B,WAAW,MAAMC,IAAAA,cAAK,EAAC;gBAC3BF,SAAS,eACJA;gBAELG,QAAQ;gBACRC,cAAc;gBACdL;YACF;YAEA,MAAMpB,iBAAiBH,IAAAA,sBAAU,EAACL;YAElC,MAAMS,WAAW,IAAI,CAACX,OAAO,CAACC,WAAWS;YACzC,MAAME,YAAE,CAACC,KAAK,CAACV,MAAKW,OAAO,CAACH,WAAW;gBAAEI,WAAW;YAAK;YAEzD,MAAMqB,SAASC,IAAAA,qBAAiB,EAAC1B;YAEjC,OAAO,IAAIY,QAAQ,CAACe,SAASC;gBAC3BP,SAASQ,IAAI,CAACC,IAAI,CAACL;gBACnBA,OAAOM,EAAE,CAAC,UAAU;oBAClBN,OAAOO,KAAK;oBACZL;gBACF;gBACAF,OAAOM,EAAE,CAAC,SAAS,CAAChB;oBAClBU,OAAOO,KAAK;oBACZJ,OAAOb;gBACT;YACF;QACF,EAAE,OAAOE,OAAO;YACdD,QAAQC,KAAK,CAAC,yBAAyBA;YACvC,MAAMA;QACR;IACF;IA7GAgB,YAAYC,MAA4B,CAAE;YACzBA;QAAf,IAAI,CAACxC,OAAO,GAAGwC,CAAAA,kBAAAA,OAAOxC,OAAO,YAAdwC,kBAAkB;QACjCjC,YAAE,CAACC,KAAK,CAAC,IAAI,CAACR,OAAO,EAAE;YAAEU,WAAW;QAAK,GAAG+B,KAAK,CAACnB,QAAQC,KAAK;IACjE;AA2GF"}
package/index.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../meerkat-node/src/index.ts"],"sourcesContent":["export * from './cube-to-sql/cube-to-sql';\nexport * from './duckdb-singleton';\nexport * from './node-sql-to-serialization';\nexport { convertCubeStringToTableSchema };\nimport { convertCubeStringToTableSchema } from '@devrev/meerkat-core';\nexport * from './duckdb-manager/duckdb-manager';\nexport * from './file-manager/file-manager';\n"],"names":["convertCubeStringToTableSchema"],"mappings":";+BAGSA;;;eAAAA,2CAA8B;;;;uBAHzB;uBACA;uBACA;6BAEiC;uBACjC;uBACA"}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../meerkat-node/src/node-sql-to-serialization.ts"],"sourcesContent":["import { SelectStatement } from '@devrev/meerkat-core';\nimport { duckdbExec } from './duckdb-exec';\n\nexport interface ParsedSerialization {\n [key: string]: {\n error: boolean;\n statements: SelectStatement[];\n };\n}\n\nexport const nodeSQLToSerialization = async (\n sql: string\n): Promise<ParsedSerialization> => {\n const queryOutput = await duckdbExec<\n {\n [key: string]: string;\n }[]\n >(sql);\n\n const parsedOutput: ParsedSerialization = {};\n\n for (const key in queryOutput[0]) {\n if (Object.prototype.hasOwnProperty.call(queryOutput[0], key)) {\n parsedOutput[key] = JSON.parse(queryOutput[0][key] as string) as {\n error: boolean;\n statements: SelectStatement[];\n };\n }\n }\n return parsedOutput;\n};\n"],"names":["nodeSQLToSerialization","sql","queryOutput","duckdbExec","parsedOutput","key","Object","prototype","hasOwnProperty","call","JSON","parse"],"mappings":";+BAUaA;;;eAAAA;;;4BATc;AASpB,MAAMA,yBAAyB,OACpCC;IAEA,MAAMC,cAAc,MAAMC,IAAAA,sBAAU,EAIlCF;IAEF,MAAMG,eAAoC,CAAC;IAE3C,IAAK,MAAMC,OAAOH,WAAW,CAAC,EAAE,CAAE;QAChC,IAAII,OAAOC,SAAS,CAACC,cAAc,CAACC,IAAI,CAACP,WAAW,CAAC,EAAE,EAAEG,MAAM;YAC7DD,YAAY,CAACC,IAAI,GAAGK,KAAKC,KAAK,CAACT,WAAW,CAAC,EAAE,CAACG,IAAI;QAIpD;IACF;IACA,OAAOD;AACT"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devrev/meerkat-node",
3
- "version": "0.0.92",
3
+ "version": "0.0.94",
4
4
  "dependencies": {
5
5
  "@swc/helpers": "~0.5.0",
6
6
  "@devrev/meerkat-core": "*",
@@ -30,5 +30,6 @@
30
30
  },
31
31
  "keywords": [],
32
32
  "author": "devrev",
33
- "license": "ISC"
34
- }
33
+ "license": "ISC",
34
+ "types": "./src/index.d.ts"
35
+ }
@@ -22,13 +22,12 @@ export declare const TEST_DATA: ({
22
22
  filters: never[];
23
23
  dimensions: string[];
24
24
  limit: number;
25
- order?: undefined;
26
25
  };
27
26
  expectedOutput: {
28
27
  orders__order_month: string;
29
28
  orders__total_order_amount: number;
30
29
  }[];
31
- } | {
30
+ }[] | {
32
31
  testName: string;
33
32
  expectedSQL: string;
34
33
  cubeInput: {
@@ -39,7 +38,6 @@ export declare const TEST_DATA: ({
39
38
  'orders.total_order_amount': string;
40
39
  'orders.customer_id': string;
41
40
  };
42
- limit?: undefined;
43
41
  };
44
42
  expectedOutput: ({
45
43
  orders__customer_id: string;
@@ -48,7 +46,7 @@ export declare const TEST_DATA: ({
48
46
  orders__customer_id: null;
49
47
  orders__total_order_amount: number;
50
48
  })[];
51
- } | {
49
+ }[] | {
52
50
  testName: string;
53
51
  expectedSQL: string;
54
52
  cubeInput: {
@@ -59,8 +57,6 @@ export declare const TEST_DATA: ({
59
57
  values: string[];
60
58
  }[];
61
59
  dimensions: never[];
62
- limit?: undefined;
63
- order?: undefined;
64
60
  };
65
61
  expectedOutput: {
66
62
  order_id: number;
@@ -71,7 +67,7 @@ export declare const TEST_DATA: ({
71
67
  order_amount: number;
72
68
  vendors: string[];
73
69
  }[];
74
- } | {
70
+ }[] | {
75
71
  testName: string;
76
72
  expectedSQL: string;
77
73
  cubeInput: {
@@ -84,8 +80,6 @@ export declare const TEST_DATA: ({
84
80
  }[];
85
81
  }[];
86
82
  dimensions: never[];
87
- limit?: undefined;
88
- order?: undefined;
89
83
  };
90
84
  expectedOutput: {
91
85
  order_id: number;
@@ -96,7 +90,7 @@ export declare const TEST_DATA: ({
96
90
  order_amount: number;
97
91
  vendors: string[];
98
92
  }[];
99
- } | {
93
+ }[] | {
100
94
  testName: string;
101
95
  expectedSQL: string;
102
96
  cubeInput: {
@@ -107,8 +101,6 @@ export declare const TEST_DATA: ({
107
101
  values: string[];
108
102
  }[];
109
103
  dimensions: never[];
110
- limit?: undefined;
111
- order?: undefined;
112
104
  };
113
105
  expectedOutput: ({
114
106
  order_id: number;
@@ -129,7 +121,7 @@ export declare const TEST_DATA: ({
129
121
  product_id: string;
130
122
  vendors: string[];
131
123
  })[];
132
- } | {
124
+ }[] | {
133
125
  testName: string;
134
126
  expectedSQL: string;
135
127
  cubeInput: {
@@ -140,8 +132,6 @@ export declare const TEST_DATA: ({
140
132
  values: string[];
141
133
  }[];
142
134
  dimensions: never[];
143
- limit?: undefined;
144
- order?: undefined;
145
135
  };
146
136
  expectedOutput: ({
147
137
  order_id: number;
@@ -160,7 +150,7 @@ export declare const TEST_DATA: ({
160
150
  product_id: string;
161
151
  vendors: string[];
162
152
  })[];
163
- } | {
153
+ }[] | {
164
154
  testName: string;
165
155
  expectedSQL: string;
166
156
  cubeInput: {
@@ -173,8 +163,6 @@ export declare const TEST_DATA: ({
173
163
  }[];
174
164
  }[];
175
165
  dimensions: never[];
176
- limit?: undefined;
177
- order?: undefined;
178
166
  };
179
167
  expectedOutput: {
180
168
  order_id: number;
@@ -186,7 +174,7 @@ export declare const TEST_DATA: ({
186
174
  orders__order_date: string;
187
175
  vendors: string[];
188
176
  }[];
189
- } | {
177
+ }[] | {
190
178
  testName: string;
191
179
  expectedSQL: string;
192
180
  cubeInput: {
@@ -203,8 +191,6 @@ export declare const TEST_DATA: ({
203
191
  })[];
204
192
  }[];
205
193
  dimensions: never[];
206
- limit?: undefined;
207
- order?: undefined;
208
194
  };
209
195
  expectedOutput: ({
210
196
  customer_id: string;
@@ -227,7 +213,7 @@ export declare const TEST_DATA: ({
227
213
  product_id: string;
228
214
  vendors: string[];
229
215
  })[];
230
- } | {
216
+ }[] | {
231
217
  testName: string;
232
218
  expectedSQL: string;
233
219
  cubeInput: {
@@ -244,8 +230,6 @@ export declare const TEST_DATA: ({
244
230
  })[];
245
231
  }[];
246
232
  dimensions: never[];
247
- limit?: undefined;
248
- order?: undefined;
249
233
  };
250
234
  expectedOutput: {
251
235
  orders__customer_id: null;
@@ -258,7 +242,7 @@ export declare const TEST_DATA: ({
258
242
  product_id: string;
259
243
  vendors: string[];
260
244
  }[];
261
- } | {
245
+ }[] | {
262
246
  testName: string;
263
247
  expectedSQL: string;
264
248
  cubeInput: {
@@ -271,8 +255,6 @@ export declare const TEST_DATA: ({
271
255
  }[];
272
256
  }[];
273
257
  dimensions: never[];
274
- limit?: undefined;
275
- order?: undefined;
276
258
  };
277
259
  expectedOutput: {
278
260
  customer_id: string;
@@ -285,4 +267,4 @@ export declare const TEST_DATA: ({
285
267
  product_id: string;
286
268
  vendors: string[];
287
269
  }[];
288
- })[];
270
+ }[])[];
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../meerkat-node/src/utils/duckdb-type-convertor.ts"],"sourcesContent":["import { ColumnInfo, ListTypeInfo, TableData, TypeInfo } from 'duckdb';\nimport { isNil } from 'lodash';\n\nexport const convertDuckDBValueToJS = (\n field: TypeInfo,\n value: unknown\n): unknown => {\n if (isNil(value)) return null;\n\n switch (field.id) {\n case 'SQL_NULL':\n return null;\n case 'DATE':\n case 'TIME':\n case 'TIMESTAMP':\n return new Date(value as string).toISOString();\n case 'FLOAT':\n case 'DOUBLE':\n return value;\n case 'INTEGER':\n case 'TINYINT':\n case 'SMALLINT':\n case 'BIGINT':\n case 'UTINYINT':\n case 'USMALLINT':\n case 'UINTEGER':\n case 'UBIGINT':\n case 'HUGEINT':\n case 'UHUGEINT':\n return parseInt((value as object).toString(), 10);\n case 'DECIMAL':\n return parseFloat((value as object).toString());\n case 'LIST': {\n if (!value) return [];\n const listValue = value as [];\n return listValue.map((item) =>\n convertDuckDBValueToJS((field as ListTypeInfo).child, item)\n );\n }\n default:\n return value;\n }\n};\n\nexport const convertTableDataToJSON = (\n data: TableData,\n columns: ColumnInfo[]\n): Record<string, unknown>[] => {\n return data.map((row: Record<string, unknown>) => {\n return columns.reduce((acc, column) => {\n acc[column.name] = convertDuckDBValueToJS(column.type, row[column.name]);\n return acc;\n }, {} as Record<string, unknown>);\n });\n};\n"],"names":["convertDuckDBValueToJS","convertTableDataToJSON","field","value","isNil","id","Date","toISOString","parseInt","toString","parseFloat","listValue","map","item","child","data","columns","row","reduce","acc","column","name","type"],"mappings":";;;;;;;;IAGaA,sBAAsB;eAAtBA;;IAyCAC,sBAAsB;eAAtBA;;;wBA3CS;AAEf,MAAMD,yBAAyB,CACpCE,OACAC;IAEA,IAAIC,IAAAA,aAAK,EAACD,QAAQ,OAAO;IAEzB,OAAQD,MAAMG,EAAE;QACd,KAAK;YACH,OAAO;QACT,KAAK;QACL,KAAK;QACL,KAAK;YACH,OAAO,IAAIC,KAAKH,OAAiBI,WAAW;QAC9C,KAAK;QACL,KAAK;YACH,OAAOJ;QACT,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;YACH,OAAOK,SAAS,AAACL,MAAiBM,QAAQ,IAAI;QAChD,KAAK;YACH,OAAOC,WAAW,AAACP,MAAiBM,QAAQ;QAC9C,KAAK;YAAQ;gBACX,IAAI,CAACN,OAAO,OAAO,EAAE;gBACrB,MAAMQ,YAAYR;gBAClB,OAAOQ,UAAUC,GAAG,CAAC,CAACC,OACpBb,uBAAuB,AAACE,MAAuBY,KAAK,EAAED;YAE1D;QACA;YACE,OAAOV;IACX;AACF;AAEO,MAAMF,yBAAyB,CACpCc,MACAC;IAEA,OAAOD,KAAKH,GAAG,CAAC,CAACK;QACf,OAAOD,QAAQE,MAAM,CAAC,CAACC,KAAKC;YAC1BD,GAAG,CAACC,OAAOC,IAAI,CAAC,GAAGrB,uBAAuBoB,OAAOE,IAAI,EAAEL,GAAG,CAACG,OAAOC,IAAI,CAAC;YACvE,OAAOF;QACT,GAAG,CAAC;IACN;AACF"}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../meerkat-node/src/utils/hash-string.ts"],"sourcesContent":["import * as crypto from 'crypto';\n\n/**\n * Hash a string using MD5.\n */\nexport const hashString = (text: string): string => {\n return crypto.createHash('md5').update(text).digest('hex');\n};\n"],"names":["hashString","text","crypto","createHash","update","digest"],"mappings":";+BAKaA;;;eAAAA;;;wBALW;AAKjB,MAAMA,aAAa,CAACC;IACzB,OAAOC,QAAOC,UAAU,CAAC,OAAOC,MAAM,CAACH,MAAMI,MAAM,CAAC;AACtD"}