@devrev/meerkat-browser 0.0.84 → 0.0.85
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/ast/dimension.d.ts +12 -0
- package/src/ast/dimension.js +22 -0
- package/src/ast/dimension.js.map +1 -0
- package/src/ast/index.d.ts +3 -0
- package/src/ast/index.js +7 -0
- package/src/ast/index.js.map +1 -0
- package/src/ast/measure.d.ts +12 -0
- package/src/ast/measure.js +23 -0
- package/src/ast/measure.js.map +1 -0
- package/src/ast/query-to-ast.d.ts +9 -0
- package/src/ast/query-to-ast.js +21 -0
- package/src/ast/query-to-ast.js.map +1 -0
- package/src/ast/utils.d.ts +4 -0
- package/src/ast/utils.js +24 -0
- package/src/ast/utils.js.map +1 -0
- package/src/index.d.ts +1 -0
- package/src/index.js +18 -3
- package/src/index.js.map +1 -1
package/package.json
CHANGED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { AsyncDuckDBConnection } from '@duckdb/duckdb-wasm';
|
|
2
|
+
/**
|
|
3
|
+
* Validates the query can be used as a dimension by parsing it to an AST and checking its structure
|
|
4
|
+
* @param connection - DuckDB connection instance
|
|
5
|
+
* @param query - The query string to validate
|
|
6
|
+
* @returns Promise<boolean> - Whether the dimension is valid
|
|
7
|
+
*/
|
|
8
|
+
export declare const validateDimensionQuery: ({ connection, query, validFunctions, }: {
|
|
9
|
+
connection: AsyncDuckDBConnection;
|
|
10
|
+
query: string;
|
|
11
|
+
validFunctions?: string[] | undefined;
|
|
12
|
+
}) => Promise<boolean>;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "validateDimensionQuery", {
|
|
3
|
+
enumerable: true,
|
|
4
|
+
get: function() {
|
|
5
|
+
return validateDimensionQuery;
|
|
6
|
+
}
|
|
7
|
+
});
|
|
8
|
+
const _meerkatcore = require("@devrev/meerkat-core");
|
|
9
|
+
const _querytoast = require("./query-to-ast");
|
|
10
|
+
const _utils = require("./utils");
|
|
11
|
+
const validateDimensionQuery = async ({ connection, query, validFunctions })=>{
|
|
12
|
+
const parsedSerialization = await (0, _querytoast.parseQueryToAST)(query, connection);
|
|
13
|
+
if ((0, _utils.isParseError)(parsedSerialization)) {
|
|
14
|
+
var _parsedSerialization_error_message;
|
|
15
|
+
throw new Error((_parsedSerialization_error_message = parsedSerialization.error_message) != null ? _parsedSerialization_error_message : 'Unknown error');
|
|
16
|
+
}
|
|
17
|
+
// Only fetch valid functions if not provided
|
|
18
|
+
const availableFunctions = validFunctions != null ? validFunctions : await (0, _utils.getAvailableFunctions)(connection, 'scalar');
|
|
19
|
+
return (0, _meerkatcore.validateDimension)(parsedSerialization, availableFunctions);
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
//# sourceMappingURL=dimension.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../meerkat-browser/src/ast/dimension.ts"],"sourcesContent":["import { validateDimension } from '@devrev/meerkat-core';\nimport { AsyncDuckDBConnection } from '@duckdb/duckdb-wasm';\nimport { parseQueryToAST } from './query-to-ast';\nimport { getAvailableFunctions, isParseError } from './utils';\n\n/**\n * Validates the query can be used as a dimension by parsing it to an AST and checking its structure\n * @param connection - DuckDB connection instance\n * @param query - The query string to validate\n * @returns Promise<boolean> - Whether the dimension is valid\n */\nexport const validateDimensionQuery = async ({\n connection,\n query,\n validFunctions,\n}: {\n connection: AsyncDuckDBConnection;\n query: string;\n validFunctions?: string[];\n}): Promise<boolean> => {\n const parsedSerialization = await parseQueryToAST(query, connection);\n\n if (isParseError(parsedSerialization)) {\n throw new Error(parsedSerialization.error_message ?? 'Unknown error');\n }\n\n // Only fetch valid functions if not provided\n const availableFunctions =\n validFunctions ?? (await getAvailableFunctions(connection, 'scalar'));\n\n return validateDimension(parsedSerialization, availableFunctions);\n};\n"],"names":["validateDimensionQuery","connection","query","validFunctions","parsedSerialization","parseQueryToAST","isParseError","Error","error_message","availableFunctions","getAvailableFunctions","validateDimension"],"mappings":";+BAWaA;;;eAAAA;;;6BAXqB;4BAEF;uBACoB;AAQ7C,MAAMA,yBAAyB,OAAO,EAC3CC,UAAU,EACVC,KAAK,EACLC,cAAc,EAKf;IACC,MAAMC,sBAAsB,MAAMC,IAAAA,2BAAe,EAACH,OAAOD;IAEzD,IAAIK,IAAAA,mBAAY,EAACF,sBAAsB;YACrBA;QAAhB,MAAM,IAAIG,MAAMH,CAAAA,qCAAAA,oBAAoBI,aAAa,YAAjCJ,qCAAqC;IACvD;IAEA,6CAA6C;IAC7C,MAAMK,qBACJN,yBAAAA,iBAAmB,MAAMO,IAAAA,4BAAqB,EAACT,YAAY;IAE7D,OAAOU,IAAAA,8BAAiB,EAACP,qBAAqBK;AAChD"}
|
package/src/ast/index.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const _export_star = require("@swc/helpers/_/_export_star");
|
|
3
|
+
_export_star._(require("./dimension"), exports);
|
|
4
|
+
_export_star._(require("./measure"), exports);
|
|
5
|
+
_export_star._(require("./query-to-ast"), exports);
|
|
6
|
+
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../meerkat-browser/src/ast/index.ts"],"sourcesContent":["export * from './dimension';\nexport * from './measure';\nexport * from './query-to-ast';\n"],"names":[],"mappings":";;uBAAc;uBACA;uBACA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { AsyncDuckDBConnection } from '@duckdb/duckdb-wasm';
|
|
2
|
+
/**
|
|
3
|
+
* Validates the query can be used as a measure by parsing it to an AST and checking its structure
|
|
4
|
+
* @param connection - DuckDB connection instance
|
|
5
|
+
* @param query - The query string to validate
|
|
6
|
+
* @returns Promise<boolean> - Whether the measure is valid
|
|
7
|
+
*/
|
|
8
|
+
export declare const validateMeasureQuery: ({ connection, query, validFunctions, }: {
|
|
9
|
+
connection: AsyncDuckDBConnection;
|
|
10
|
+
query: string;
|
|
11
|
+
validFunctions?: string[] | undefined;
|
|
12
|
+
}) => Promise<boolean>;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "validateMeasureQuery", {
|
|
3
|
+
enumerable: true,
|
|
4
|
+
get: function() {
|
|
5
|
+
return validateMeasureQuery;
|
|
6
|
+
}
|
|
7
|
+
});
|
|
8
|
+
const _meerkatcore = require("@devrev/meerkat-core");
|
|
9
|
+
const _querytoast = require("./query-to-ast");
|
|
10
|
+
const _utils = require("./utils");
|
|
11
|
+
const validateMeasureQuery = async ({ connection, query, validFunctions })=>{
|
|
12
|
+
const parsedSerialization = await (0, _querytoast.parseQueryToAST)(query, connection);
|
|
13
|
+
if ((0, _utils.isParseError)(parsedSerialization)) {
|
|
14
|
+
var _parsedSerialization_error_message;
|
|
15
|
+
throw new Error((_parsedSerialization_error_message = parsedSerialization.error_message) != null ? _parsedSerialization_error_message : 'Unknown error');
|
|
16
|
+
}
|
|
17
|
+
// Only fetch valid functions if not provided
|
|
18
|
+
const availableFunctions = validFunctions != null ? validFunctions : await (0, _utils.getAvailableFunctions)(connection, 'aggregate');
|
|
19
|
+
const validScalarFunctions = await (0, _utils.getAvailableFunctions)(connection, 'scalar');
|
|
20
|
+
return (0, _meerkatcore.validateMeasure)(parsedSerialization, availableFunctions, validScalarFunctions);
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
//# sourceMappingURL=measure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../meerkat-browser/src/ast/measure.ts"],"sourcesContent":["import { validateMeasure } from '@devrev/meerkat-core';\nimport { AsyncDuckDBConnection } from '@duckdb/duckdb-wasm';\nimport { parseQueryToAST } from './query-to-ast';\nimport { getAvailableFunctions, isParseError } from './utils';\n\n/**\n * Validates the query can be used as a measure by parsing it to an AST and checking its structure\n * @param connection - DuckDB connection instance\n * @param query - The query string to validate\n * @returns Promise<boolean> - Whether the measure is valid\n */\nexport const validateMeasureQuery = async ({\n connection,\n query,\n validFunctions,\n}: {\n connection: AsyncDuckDBConnection;\n query: string;\n validFunctions?: string[];\n}): Promise<boolean> => {\n const parsedSerialization = await parseQueryToAST(query, connection);\n\n if (isParseError(parsedSerialization)) {\n throw new Error(parsedSerialization.error_message ?? 'Unknown error');\n }\n\n // Only fetch valid functions if not provided\n const availableFunctions =\n validFunctions ?? (await getAvailableFunctions(connection, 'aggregate'));\n\n const validScalarFunctions = await getAvailableFunctions(\n connection,\n 'scalar'\n );\n\n return validateMeasure(\n parsedSerialization,\n availableFunctions,\n validScalarFunctions\n );\n};\n"],"names":["validateMeasureQuery","connection","query","validFunctions","parsedSerialization","parseQueryToAST","isParseError","Error","error_message","availableFunctions","getAvailableFunctions","validScalarFunctions","validateMeasure"],"mappings":";+BAWaA;;;eAAAA;;;6BAXmB;4BAEA;uBACoB;AAQ7C,MAAMA,uBAAuB,OAAO,EACzCC,UAAU,EACVC,KAAK,EACLC,cAAc,EAKf;IACC,MAAMC,sBAAsB,MAAMC,IAAAA,2BAAe,EAACH,OAAOD;IAEzD,IAAIK,IAAAA,mBAAY,EAACF,sBAAsB;YACrBA;QAAhB,MAAM,IAAIG,MAAMH,CAAAA,qCAAAA,oBAAoBI,aAAa,YAAjCJ,qCAAqC;IACvD;IAEA,6CAA6C;IAC7C,MAAMK,qBACJN,yBAAAA,iBAAmB,MAAMO,IAAAA,4BAAqB,EAACT,YAAY;IAE7D,MAAMU,uBAAuB,MAAMD,IAAAA,4BAAqB,EACtDT,YACA;IAGF,OAAOW,IAAAA,4BAAe,EACpBR,qBACAK,oBACAE;AAEJ"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ParsedSerialization } from '@devrev/meerkat-core';
|
|
2
|
+
import { AsyncDuckDBConnection } from '@duckdb/duckdb-wasm';
|
|
3
|
+
/**
|
|
4
|
+
* Converts a query to an AST
|
|
5
|
+
* @param query - The query string to convert
|
|
6
|
+
* @param connection - The DuckDB connection instance
|
|
7
|
+
* @returns The AST as a JSON object
|
|
8
|
+
*/
|
|
9
|
+
export declare const parseQueryToAST: (query: string, connection: AsyncDuckDBConnection) => Promise<ParsedSerialization>;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "parseQueryToAST", {
|
|
3
|
+
enumerable: true,
|
|
4
|
+
get: function() {
|
|
5
|
+
return parseQueryToAST;
|
|
6
|
+
}
|
|
7
|
+
});
|
|
8
|
+
const _meerkatcore = require("@devrev/meerkat-core");
|
|
9
|
+
const parseQueryToAST = async (query, connection)=>{
|
|
10
|
+
try {
|
|
11
|
+
const serializedQuery = (0, _meerkatcore.astSerializerQuery)(query);
|
|
12
|
+
const arrowResult = await connection.query(serializedQuery);
|
|
13
|
+
const parsedOutputQuery = arrowResult.toArray().map((row)=>row.toJSON());
|
|
14
|
+
const deserializedQuery = (0, _meerkatcore.deserializeQuery)(parsedOutputQuery);
|
|
15
|
+
return JSON.parse(deserializedQuery);
|
|
16
|
+
} catch (error) {
|
|
17
|
+
throw new Error('Failed to parse query to AST');
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
//# sourceMappingURL=query-to-ast.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../meerkat-browser/src/ast/query-to-ast.ts"],"sourcesContent":["import {\n astSerializerQuery,\n deserializeQuery,\n ParsedSerialization,\n} from '@devrev/meerkat-core';\nimport { AsyncDuckDBConnection } from '@duckdb/duckdb-wasm';\n\n/**\n * Converts a query to an AST\n * @param query - The query string to convert\n * @param connection - The DuckDB connection instance\n * @returns The AST as a JSON object\n */\nexport const parseQueryToAST = async (\n query: string,\n connection: AsyncDuckDBConnection\n): Promise<ParsedSerialization> => {\n try {\n const serializedQuery = astSerializerQuery(query);\n const arrowResult = await connection.query(serializedQuery);\n\n const parsedOutputQuery = arrowResult.toArray().map((row) => row.toJSON());\n const deserializedQuery = deserializeQuery(parsedOutputQuery);\n\n return JSON.parse(deserializedQuery);\n } catch (error) {\n throw new Error('Failed to parse query to AST');\n }\n};\n"],"names":["parseQueryToAST","query","connection","serializedQuery","astSerializerQuery","arrowResult","parsedOutputQuery","toArray","map","row","toJSON","deserializedQuery","deserializeQuery","JSON","parse","error","Error"],"mappings":";+BAaaA;;;eAAAA;;;6BATN;AASA,MAAMA,kBAAkB,OAC7BC,OACAC;IAEA,IAAI;QACF,MAAMC,kBAAkBC,IAAAA,+BAAkB,EAACH;QAC3C,MAAMI,cAAc,MAAMH,WAAWD,KAAK,CAACE;QAE3C,MAAMG,oBAAoBD,YAAYE,OAAO,GAAGC,GAAG,CAAC,CAACC,MAAQA,IAAIC,MAAM;QACvE,MAAMC,oBAAoBC,IAAAA,6BAAgB,EAACN;QAE3C,OAAOO,KAAKC,KAAK,CAACH;IACpB,EAAE,OAAOI,OAAO;QACd,MAAM,IAAIC,MAAM;IAClB;AACF"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { ParsedSerialization } from '@devrev/meerkat-core';
|
|
2
|
+
import { AsyncDuckDBConnection } from '@duckdb/duckdb-wasm';
|
|
3
|
+
export declare const isParseError: (data: ParsedSerialization) => boolean;
|
|
4
|
+
export declare const getAvailableFunctions: (connection: AsyncDuckDBConnection, function_type: 'scalar' | 'aggregate') => Promise<string[]>;
|
package/src/ast/utils.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
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
|
+
isParseError: function() {
|
|
10
|
+
return isParseError;
|
|
11
|
+
},
|
|
12
|
+
getAvailableFunctions: function() {
|
|
13
|
+
return getAvailableFunctions;
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
const isParseError = (data)=>{
|
|
17
|
+
return !!data.error;
|
|
18
|
+
};
|
|
19
|
+
const getAvailableFunctions = async (connection, function_type)=>{
|
|
20
|
+
const result = await connection.query(`SELECT distinct function_name FROM duckdb_functions() WHERE function_type = '${function_type}'`);
|
|
21
|
+
return result.toArray().map((row)=>row.toJSON().function_name);
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../meerkat-browser/src/ast/utils.ts"],"sourcesContent":["import { ParsedSerialization } from '@devrev/meerkat-core';\nimport { AsyncDuckDBConnection } from '@duckdb/duckdb-wasm';\n\nexport const isParseError = (data: ParsedSerialization): boolean => {\n return !!data.error;\n};\n\n// Helper function to get available functions from DuckDB based on function type\nexport const getAvailableFunctions = async (\n connection: AsyncDuckDBConnection,\n function_type: 'scalar' | 'aggregate'\n): Promise<string[]> => {\n const result = await connection.query(\n `SELECT distinct function_name FROM duckdb_functions() WHERE function_type = '${function_type}'`\n );\n\n return result.toArray().map((row) => row.toJSON().function_name);\n};\n"],"names":["isParseError","getAvailableFunctions","data","error","connection","function_type","result","query","toArray","map","row","toJSON","function_name"],"mappings":";;;;;;;;IAGaA,YAAY;eAAZA;;IAKAC,qBAAqB;eAArBA;;;AALN,MAAMD,eAAe,CAACE;IAC3B,OAAO,CAAC,CAACA,KAAKC,KAAK;AACrB;AAGO,MAAMF,wBAAwB,OACnCG,YACAC;IAEA,MAAMC,SAAS,MAAMF,WAAWG,KAAK,CACnC,CAAC,6EAA6E,EAAEF,cAAc,CAAC,CAAC;IAGlG,OAAOC,OAAOE,OAAO,GAAGC,GAAG,CAAC,CAACC,MAAQA,IAAIC,MAAM,GAAGC,aAAa;AACjE"}
|
package/src/index.d.ts
CHANGED
package/src/index.js
CHANGED
|
@@ -1,12 +1,27 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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
|
+
convertCubeStringToTableSchema: function() {
|
|
5
10
|
return _meerkatcore.convertCubeStringToTableSchema;
|
|
11
|
+
},
|
|
12
|
+
parseQueryToAST: function() {
|
|
13
|
+
return _ast.parseQueryToAST;
|
|
14
|
+
},
|
|
15
|
+
validateDimensionQuery: function() {
|
|
16
|
+
return _ast.validateDimensionQuery;
|
|
17
|
+
},
|
|
18
|
+
validateMeasureQuery: function() {
|
|
19
|
+
return _ast.validateMeasureQuery;
|
|
6
20
|
}
|
|
7
21
|
});
|
|
8
22
|
const _export_star = require("@swc/helpers/_/_export_star");
|
|
9
23
|
_export_star._(require("./browser-cube-to-sql/browser-cube-to-sql"), exports);
|
|
10
24
|
const _meerkatcore = require("@devrev/meerkat-core");
|
|
25
|
+
const _ast = require("./ast");
|
|
11
26
|
|
|
12
27
|
//# sourceMappingURL=index.js.map
|
package/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../meerkat-browser/src/index.ts"],"sourcesContent":["export * from './browser-cube-to-sql/browser-cube-to-sql';\nexport { convertCubeStringToTableSchema };\nimport { convertCubeStringToTableSchema } from '@devrev/meerkat-core';\n"],"names":["convertCubeStringToTableSchema"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../meerkat-browser/src/index.ts"],"sourcesContent":["export * from './browser-cube-to-sql/browser-cube-to-sql';\nexport { convertCubeStringToTableSchema };\nimport { convertCubeStringToTableSchema } from '@devrev/meerkat-core';\nexport {\n parseQueryToAST,\n validateDimensionQuery,\n validateMeasureQuery,\n} from './ast';\n"],"names":["convertCubeStringToTableSchema","parseQueryToAST","validateDimensionQuery","validateMeasureQuery"],"mappings":";;;;;;;;IACSA,8BAA8B;eAA9BA,2CAA8B;;IAGrCC,eAAe;eAAfA,oBAAe;;IACfC,sBAAsB;eAAtBA,2BAAsB;;IACtBC,oBAAoB;eAApBA,yBAAoB;;;;uBANR;6BAEiC;qBAKxC"}
|