From 499ddc62fc1618b78f16a17943e1c72a670f6b48 Mon Sep 17 00:00:00 2001 From: Konstantin Burkalev Date: Fri, 28 Nov 2025 11:32:59 +0200 Subject: [PATCH 1/6] feat(api-gateway): Support query timezone in `/cubesql` API endpoint (#10189) * openapi spec: add timezone to request * pass query timezone through cubesql into cube.js * add some basic tests * docs: `timezone` parameter for the `/v1/cubesql` endpoint --------- Co-authored-by: Igor Lukanin --- .../apis-integrations/rest-api/reference.mdx | 7 +- packages/cubejs-api-gateway/openspec.yml | 2 + packages/cubejs-api-gateway/src/gateway.ts | 2 +- packages/cubejs-api-gateway/src/sql-server.ts | 4 +- .../cubejs-api-gateway/test/index.test.ts | 78 +++++++++++++++++++ packages/cubejs-backend-native/js/index.ts | 4 +- .../cubejs-backend-native/src/node_export.rs | 25 ++++++ .../cubeclient/.openapi-generator/VERSION | 2 +- .../src/models/v1_load_request_query.rs | 3 + rust/cubesql/cubesql/src/compile/builder.rs | 1 + .../cubesql/src/compile/engine/df/wrapper.rs | 1 + .../cubesql/src/compile/rewrite/converter.rs | 8 ++ rust/cubesql/cubesql/src/sql/session.rs | 3 + 13 files changed, 132 insertions(+), 8 deletions(-) diff --git a/docs/pages/product/apis-integrations/rest-api/reference.mdx b/docs/pages/product/apis-integrations/rest-api/reference.mdx index 00c7c2357225f..f409ad7143bae 100644 --- a/docs/pages/product/apis-integrations/rest-api/reference.mdx +++ b/docs/pages/product/apis-integrations/rest-api/reference.mdx @@ -322,7 +322,8 @@ This endpoint is part of the [SQL API][ref-sql-api]. | Parameter | Description | Required | | --- | --- | --- | -| `query` | The SQL query to run. | ✅ Yes | +| `query` | The SQL query to run | ✅ Yes | +| `timezone` | The [time zone][ref-time-zone] for this query in the [TZ Database Name][link-tzdb] format, e.g., `America/Los_Angeles` | ❌ No | | `cache` | See [cache control][ref-cache-control]. `stale-if-slow` by default | ❌ No | Response: a stream of newline-delimited JSON objects. The first object contains @@ -642,4 +643,6 @@ Keep-Alive: timeout=5 [ref-sql-api]: /product/apis-integrations/sql-api [ref-orchestration-api]: /product/apis-integrations/orchestration-api [ref-folders]: /product/data-modeling/reference/view#folders -[ref-cache-control]: /product/apis-integrations/rest-api#cache-control \ No newline at end of file +[ref-cache-control]: /product/apis-integrations/rest-api#cache-control +[ref-time-zone]: /product/apis-integrations/queries#time-zone +[link-tzdb]: https://en.wikipedia.org/wiki/Tz_database \ No newline at end of file diff --git a/packages/cubejs-api-gateway/openspec.yml b/packages/cubejs-api-gateway/openspec.yml index 681978404dc42..f83b0642b32af 100644 --- a/packages/cubejs-api-gateway/openspec.yml +++ b/packages/cubejs-api-gateway/openspec.yml @@ -479,6 +479,8 @@ components: type: "array" items: $ref: "#/components/schemas/V1LoadRequestJoinHint" + timezone: + type: "string" V1LoadRequest: type: "object" properties: diff --git a/packages/cubejs-api-gateway/src/gateway.ts b/packages/cubejs-api-gateway/src/gateway.ts index d8bc4a96f28be..b5ef3ba78a8d8 100644 --- a/packages/cubejs-api-gateway/src/gateway.ts +++ b/packages/cubejs-api-gateway/src/gateway.ts @@ -438,7 +438,7 @@ class ApiGateway { try { await this.assertApiScope('data', req.context?.securityContext); - await this.sqlServer.execSql(req.body.query, res, req.context?.securityContext, req.body.cache); + await this.sqlServer.execSql(req.body.query, res, req.context?.securityContext, req.body.cache, req.body.timezone); } catch (e: any) { this.handleError({ e, diff --git a/packages/cubejs-api-gateway/src/sql-server.ts b/packages/cubejs-api-gateway/src/sql-server.ts index 8384547bf9149..2d670762c21a9 100644 --- a/packages/cubejs-api-gateway/src/sql-server.ts +++ b/packages/cubejs-api-gateway/src/sql-server.ts @@ -65,8 +65,8 @@ export class SQLServer { throw new Error('Native api gateway is not enabled'); } - public async execSql(sqlQuery: string, stream: any, securityContext?: any, cacheMode?: CacheMode) { - await execSql(this.sqlInterfaceInstance!, sqlQuery, stream, securityContext, cacheMode); + public async execSql(sqlQuery: string, stream: any, securityContext?: any, cacheMode?: CacheMode, timezone?: string) { + await execSql(this.sqlInterfaceInstance!, sqlQuery, stream, securityContext, cacheMode, timezone); } public async sql4sql(sqlQuery: string, disablePostProcessing: boolean, securityContext?: unknown): Promise { diff --git a/packages/cubejs-api-gateway/test/index.test.ts b/packages/cubejs-api-gateway/test/index.test.ts index 78fa66e2d3e43..bf4a2b4d7fe9e 100644 --- a/packages/cubejs-api-gateway/test/index.test.ts +++ b/packages/cubejs-api-gateway/test/index.test.ts @@ -1150,4 +1150,82 @@ describe('API Gateway', () => { expect(dataSourceStorage.$testOrchestratorConnectionsDone).toEqual(false); }); }); + + describe('/v1/cubesql', () => { + test('simple query works', async () => { + const { app, apiGateway } = await createApiGateway(); + + // Mock the sqlServer.execSql method + const execSqlMock = jest.fn(async (query, stream, securityContext, cacheMode, timezone) => { + // Simulate writing schema and data to the stream + stream.write(`${JSON.stringify({ + schema: [{ name: 'id', column_type: 'Int' }] + })}\n`); + stream.write(`${JSON.stringify({ + data: [[1], [2], [3]] + })}\n`); + stream.end(); + }); + + apiGateway.getSQLServer().execSql = execSqlMock; + + await request(app) + .post('/cubejs-api/v1/cubesql') + .set('Content-type', 'application/json') + .set('Authorization', 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.e30.t-IDcSemACt8x4iTMCda8Yhe3iZaWbvV5XKSTbuAn0M') + .send({ + query: 'SELECT id FROM test LIMIT 3' + }) + .responseType('text') + .expect(200); + + // Verify the mock was called with correct parameters + expect(execSqlMock).toHaveBeenCalledWith( + 'SELECT id FROM test LIMIT 3', + expect.anything(), + {}, + undefined, + undefined + ); + }); + + test('timezone can be passed', async () => { + const { app, apiGateway } = await createApiGateway(); + + // Mock the sqlServer.execSql method + const execSqlMock = jest.fn(async (query, stream, securityContext, cacheMode, timezone) => { + // Simulate writing schema and data to the stream + stream.write(`${JSON.stringify({ + schema: [{ name: 'created_at', column_type: 'Timestamp' }] + })}\n`); + stream.write(`${JSON.stringify({ + data: [['2025-12-22T16:00:00.000'], ['2025-12-24T16:00:00.000']] + })}\n`); + stream.end(); + }); + + apiGateway.getSQLServer().execSql = execSqlMock; + + await request(app) + .post('/cubejs-api/v1/cubesql') + .set('Content-type', 'application/json') + .set('Authorization', 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.e30.t-IDcSemACt8x4iTMCda8Yhe3iZaWbvV5XKSTbuAn0M') + .send({ + query: 'SELECT created_at FROM orders WHERE created_at > \'2025-12-22 13:00:00\'::timestamptz', + cache: 'stale-while-revalidate', + timezone: 'America/Los_Angeles' + }) + .responseType('text') + .expect(200); + + // Verify the mock was called with correct parameters including timezone + expect(execSqlMock).toHaveBeenCalledWith( + 'SELECT created_at FROM orders WHERE created_at > \'2025-12-22 13:00:00\'::timestamptz', + expect.anything(), + {}, + 'stale-while-revalidate', + 'America/Los_Angeles' + ); + }); + }); }); diff --git a/packages/cubejs-backend-native/js/index.ts b/packages/cubejs-backend-native/js/index.ts index 36e3cd8a20296..3df9162a486d0 100644 --- a/packages/cubejs-backend-native/js/index.ts +++ b/packages/cubejs-backend-native/js/index.ts @@ -437,10 +437,10 @@ export const shutdownInterface = async (instance: SqlInterfaceInstance, shutdown await native.shutdownInterface(instance, shutdownMode); }; -export const execSql = async (instance: SqlInterfaceInstance, sqlQuery: string, stream: any, securityContext?: any, cacheMode: CacheMode = 'stale-if-slow'): Promise => { +export const execSql = async (instance: SqlInterfaceInstance, sqlQuery: string, stream: any, securityContext?: any, cacheMode: CacheMode = 'stale-if-slow', timezone?: string): Promise => { const native = loadNative(); - await native.execSql(instance, sqlQuery, stream, securityContext ? JSON.stringify(securityContext) : null, cacheMode); + await native.execSql(instance, sqlQuery, stream, securityContext ? JSON.stringify(securityContext) : null, cacheMode, timezone); }; // TODO parse result from native code diff --git a/packages/cubejs-backend-native/src/node_export.rs b/packages/cubejs-backend-native/src/node_export.rs index 2350d6ae0ca10..094eba5c2493d 100644 --- a/packages/cubejs-backend-native/src/node_export.rs +++ b/packages/cubejs-backend-native/src/node_export.rs @@ -226,6 +226,7 @@ async fn handle_sql_query( stream_methods: WritableStreamMethods, sql_query: &str, cache_mode: &str, + timezone: Option, ) -> Result<(), CubeError> { let span_id = Some(Arc::new(SpanId::new( Uuid::new_v4().to_string(), @@ -255,6 +256,15 @@ async fn handle_sql_query( .await?; } + { + let mut cm = session + .state + .query_timezone + .write() + .expect("failed to unlock session query_timezone for change"); + *cm = timezone; + } + let cache_enum = cache_mode.parse().map_err(CubeError::user)?; { @@ -440,6 +450,20 @@ fn exec_sql(mut cx: FunctionContext) -> JsResult { let cache_mode = cx.argument::(4)?.value(&mut cx); + let timezone: Option = match cx.argument::(5) { + Ok(val) => { + if val.is_a::(&mut cx) || val.is_a::(&mut cx) { + None + } else { + match val.downcast::(&mut cx) { + Ok(v) => Some(v.value(&mut cx)), + Err(_) => None, + } + } + } + Err(_) => None, + }; + let js_stream_on_fn = Arc::new( node_stream .get::(&mut cx, "on")? @@ -488,6 +512,7 @@ fn exec_sql(mut cx: FunctionContext) -> JsResult { stream_methods, &sql_query, &cache_mode, + timezone, ) .await; diff --git a/rust/cubesql/cubeclient/.openapi-generator/VERSION b/rust/cubesql/cubeclient/.openapi-generator/VERSION index 368fd8fd8d784..6328c5424a4a6 100644 --- a/rust/cubesql/cubeclient/.openapi-generator/VERSION +++ b/rust/cubesql/cubeclient/.openapi-generator/VERSION @@ -1 +1 @@ -7.15.0 +7.17.0 diff --git a/rust/cubesql/cubeclient/src/models/v1_load_request_query.rs b/rust/cubesql/cubeclient/src/models/v1_load_request_query.rs index ae966f9c65160..3cf2d9c6500e5 100644 --- a/rust/cubesql/cubeclient/src/models/v1_load_request_query.rs +++ b/rust/cubesql/cubeclient/src/models/v1_load_request_query.rs @@ -35,6 +35,8 @@ pub struct V1LoadRequestQuery { pub subquery_joins: Option>, #[serde(rename = "joinHints", skip_serializing_if = "Option::is_none")] pub join_hints: Option>>, + #[serde(rename = "timezone", skip_serializing_if = "Option::is_none")] + pub timezone: Option, } impl V1LoadRequestQuery { @@ -51,6 +53,7 @@ impl V1LoadRequestQuery { ungrouped: None, subquery_joins: None, join_hints: None, + timezone: None, } } } diff --git a/rust/cubesql/cubesql/src/compile/builder.rs b/rust/cubesql/cubesql/src/compile/builder.rs index 7fdc2e86bc908..799947c688092 100644 --- a/rust/cubesql/cubesql/src/compile/builder.rs +++ b/rust/cubesql/cubesql/src/compile/builder.rs @@ -153,6 +153,7 @@ impl QueryBuilder { ungrouped: None, subquery_joins: None, join_hints: None, + timezone: None, }, meta: self.meta, } diff --git a/rust/cubesql/cubesql/src/compile/engine/df/wrapper.rs b/rust/cubesql/cubesql/src/compile/engine/df/wrapper.rs index 4b31eeb658169..bdd37112e145e 100644 --- a/rust/cubesql/cubesql/src/compile/engine/df/wrapper.rs +++ b/rust/cubesql/cubesql/src/compile/engine/df/wrapper.rs @@ -3357,6 +3357,7 @@ impl WrappedSelectNode { }); let load_request = V1LoadRequestQuery { + timezone: None, measures: Some( aggregate .iter() diff --git a/rust/cubesql/cubesql/src/compile/rewrite/converter.rs b/rust/cubesql/cubesql/src/compile/rewrite/converter.rs index 68b715d99f4ad..6f2487ffdb4ed 100644 --- a/rust/cubesql/cubesql/src/compile/rewrite/converter.rs +++ b/rust/cubesql/cubesql/src/compile/rewrite/converter.rs @@ -1583,6 +1583,14 @@ impl LanguageToLogicalPlanConverter { let mut query_order = Vec::new(); let mut query_dimensions = Vec::new(); + query.timezone = self + .cube_context + .session_state + .query_timezone + .read() + .unwrap() + .clone(); + for m in members { match m { LogicalPlanLanguage::Measure(measure_params) => { diff --git a/rust/cubesql/cubesql/src/sql/session.rs b/rust/cubesql/cubesql/src/sql/session.rs index a51b4cf6fe6d3..a1e3b6589b8a2 100644 --- a/rust/cubesql/cubesql/src/sql/session.rs +++ b/rust/cubesql/cubesql/src/sql/session.rs @@ -92,6 +92,8 @@ pub struct SessionState { auth_context_expiration: Duration, pub cache_mode: RwLockSync>, + + pub query_timezone: RwLockSync>, } impl SessionState { @@ -124,6 +126,7 @@ impl SessionState { statements: RWLockAsync::new(HashMap::new()), auth_context_expiration, cache_mode: RwLockSync::new(None), + query_timezone: RwLockSync::new(None), } } From c7bf7d7f183280f1d23c3ad8699e1c2ce0b29a54 Mon Sep 17 00:00:00 2001 From: Dmitry Patsura Date: Fri, 28 Nov 2025 11:10:50 +0100 Subject: [PATCH 2/6] =?UTF-8?q?refactor(schema-compiler):=20Drop=20support?= =?UTF-8?q?=20for=20disabling=20native=20workers=20=E2=80=A6=20(#10196)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This flag is enabled by default for a long time and there are not side effect. I am working on speeding up Cube startup and I've figure out that we load babel, which we don't need in the Cube Cloud Runtime, because it uses native transpilers. So, let's remove this env variable and speedup cloud as side effect. --------- Co-authored-by: Konstantin Burkalev --- .github/workflows/drivers-tests.yml | 1 - .../reference/environment-variables.mdx | 17 +---- packages/cubejs-backend-shared/src/env.ts | 19 +++++- .../src/compiler/DataSchemaCompiler.ts | 63 +++++-------------- .../fixtures/athena.json | 1 - .../fixtures/bigquery.json | 1 - .../fixtures/clickhouse.json | 1 - .../fixtures/databricks-jdbc.json | 1 - .../fixtures/mssql.json | 1 - .../fixtures/mysql.json | 1 - .../fixtures/postgres.json | 1 - .../fixtures/redshift.json | 1 - .../fixtures/snowflake.json | 1 - 13 files changed, 31 insertions(+), 78 deletions(-) diff --git a/.github/workflows/drivers-tests.yml b/.github/workflows/drivers-tests.yml index 1d52d56fceaa3..8f509a3f92d49 100644 --- a/.github/workflows/drivers-tests.yml +++ b/.github/workflows/drivers-tests.yml @@ -369,7 +369,6 @@ jobs: (contains(env.CLOUD_DATABASES, matrix.database) && env.DRIVERS_TESTS_ATHENA_CUBEJS_AWS_KEY != '') || (!contains(env.CLOUD_DATABASES, matrix.database)) env: - DRIVERS_TESTS_CUBEJS_TRANSPILATION_WORKER_THREADS: true DRIVERS_TESTS_CUBEJS_TRANSPILATION_NATIVE: false DRIVERS_TESTS_CUBEJS_TESSERACT_SQL_PLANNER: ${{ (github.event_name == 'workflow_dispatch' && github.event.inputs.use_tesseract_sql_planner) || matrix.use_tesseract_sql_planner }} diff --git a/docs/pages/product/configuration/reference/environment-variables.mdx b/docs/pages/product/configuration/reference/environment-variables.mdx index a816f7284d466..09d02e574d282 100644 --- a/docs/pages/product/configuration/reference/environment-variables.mdx +++ b/docs/pages/product/configuration/reference/environment-variables.mdx @@ -1467,21 +1467,6 @@ learn more. | --------------- | ---------------------- | --------------------- | | A valid number | 86400 | 86400 | -## `CUBEJS_TRANSPILATION_WORKER_THREADS` - -If `true`, optimizes data model compilation by running critical parts of the -code in worker threads. - -| Possible Values | Default in Development | Default in Production | -| --------------- | ---------------------- | --------------------- | -| `true`, `false` | `true` | `true` | - - - -See [this issue](https://github.com/cube-js/cube/issues/9285) for details. - - - ## `CUBEJS_WEB_SOCKETS` If `true`, then use WebSocket for data fetching. @@ -1911,4 +1896,4 @@ The port for a Cube deployment to listen to API connections on. [ref-mdx-api-locale]: /product/apis-integrations/mdx-api#measure-format [ref-time-dimensions]: /product/data-modeling/reference/dimensions#time [ref-time-zone]: /product/apis-integrations/queries#time-zone -[link-tzdb]: https://en.wikipedia.org/wiki/Tz_database \ No newline at end of file +[link-tzdb]: https://en.wikipedia.org/wiki/Tz_database diff --git a/packages/cubejs-backend-shared/src/env.ts b/packages/cubejs-backend-shared/src/env.ts index 2d84e5cf56ee5..79aabbf86f085 100644 --- a/packages/cubejs-backend-shared/src/env.ts +++ b/packages/cubejs-backend-shared/src/env.ts @@ -228,9 +228,19 @@ const variables: Record any> = { nativeOrchestrator: () => get('CUBEJS_TESSERACT_ORCHESTRATOR') .default('true') .asBoolStrict(), - transpilationWorkerThreads: () => get('CUBEJS_TRANSPILATION_WORKER_THREADS') - .default('true') - .asBoolStrict(), + transpilationWorkerThreads: () => { + const enabled = get('CUBEJS_TRANSPILATION_WORKER_THREADS') + .default('true') + .asBoolStrict(); + + if (!enabled) { + console.warn( + 'Worker thread transpilation is enabled by default and cannot be disabled with CUBEJS_TRANSPILATION_WORKER_THREADS.' + ); + } + + return true; + }, allowNonStrictDateRangeMatching: () => get('CUBEJS_PRE_AGGREGATIONS_ALLOW_NON_STRICT_DATE_RANGE_MATCH') .default('true') .asBoolStrict(), @@ -2186,6 +2196,9 @@ export function getEnv(key: T, opts?: Parameters) ); } +// trigger warning +getEnv('transpilationWorkerThreads'); + export function isDockerImage(): boolean { return Boolean(process.env.CUBEJS_DOCKER_IMAGE_TAG); } diff --git a/packages/cubejs-schema-compiler/src/compiler/DataSchemaCompiler.ts b/packages/cubejs-schema-compiler/src/compiler/DataSchemaCompiler.ts index 83fc686ce9bdc..40267faa84a57 100644 --- a/packages/cubejs-schema-compiler/src/compiler/DataSchemaCompiler.ts +++ b/packages/cubejs-schema-compiler/src/compiler/DataSchemaCompiler.ts @@ -5,9 +5,6 @@ import fs from 'fs'; import os from 'os'; import path from 'path'; import syntaxCheck from 'syntax-error'; -import { parse } from '@babel/parser'; -import babelGenerator from '@babel/generator'; -import babelTraverse from '@babel/traverse'; import R from 'ramda'; import workerpool from 'workerpool'; import { LRUCache } from 'lru-cache'; @@ -275,12 +272,11 @@ export class DataSchemaCompiler { const errorsReport = new ErrorReporter(null, [], this.errorReportOptions); this.errorsReporter = errorsReport; - const transpilationWorkerThreads = getEnv('transpilationWorkerThreads'); const transpilationNative = getEnv('transpilationNative'); const transpilationNativeThreadsCount = getThreadsCount(); const { compilerId } = this; - if (transpilationWorkerThreads) { + if (!transpilationNative) { const wc = getEnv('transpilationWorkerThreadsCount'); this.workerPool = workerpool.pool( path.join(__dirname, 'transpilers/transpiler_worker'), @@ -292,11 +288,10 @@ export class DataSchemaCompiler { let cubeNames: string[] = []; let cubeSymbols: Record> = {}; let transpilerNames: string[] = []; - let results: (FileContent | undefined)[]; - if (transpilationNative || transpilationWorkerThreads) { - ({ cubeNames, cubeSymbols, transpilerNames } = this.prepareTranspileSymbols()); - } + ({ cubeNames, cubeSymbols, transpilerNames } = this.prepareTranspileSymbols()); + + let results: (FileContent | undefined)[]; if (transpilationNative) { const jsFiles = originalJsFiles; @@ -325,28 +320,25 @@ export class DataSchemaCompiler { .map(f => this.transpileJinjaFile(f, errorsReport, { cubeNames, cubeSymbols, transpilerNames })); results = (await Promise.all([...jsFilesTasks, ...yamlFilesTasks, ...jinjaFilesTasks])).flat(); - } else if (transpilationWorkerThreads) { - results = await Promise.all(toCompile.map(f => this.transpileFile(f, errorsReport, { cubeNames, cubeSymbols, transpilerNames }))); } else { - results = await Promise.all(toCompile.map(f => this.transpileFile(f, errorsReport, {}))); + results = await Promise.all(toCompile.map(f => this.transpileFile(f, errorsReport, { cubeNames, cubeSymbols, transpilerNames }))); } return results.filter(f => !!f) as FileContent[]; }; const transpilePhase = async (stage: CompileStage): Promise => { - let cubeNames: string[] = []; - let cubeSymbols: Record> = {}; - let transpilerNames: string[] = []; let results: (FileContent | undefined)[]; if (toCompile.length === 0) { return []; } - if (transpilationNative || transpilationWorkerThreads) { - ({ cubeNames, cubeSymbols, transpilerNames } = this.prepareTranspileSymbols()); - } + let cubeNames: string[] = []; + let cubeSymbols: Record> = {}; + let transpilerNames: string[] = []; + + ({ cubeNames, cubeSymbols, transpilerNames } = this.prepareTranspileSymbols()); // After the first phase all files are with JS source code: original or transpiled @@ -363,10 +355,8 @@ export class DataSchemaCompiler { const jsFilesTasks = jsChunks.map(chunk => this.transpileJsFilesNativeBulk(chunk, errorsReport, { transpilerNames, compilerId })); results = (await Promise.all(jsFilesTasks)).flat(); - } else if (transpilationWorkerThreads) { - results = await Promise.all(toCompile.map(f => this.transpileJsFile(f, errorsReport, { cubeNames, cubeSymbols, transpilerNames }))); } else { - results = await Promise.all(toCompile.map(f => this.transpileJsFile(f, errorsReport, {}))); + results = await Promise.all(toCompile.map(f => this.transpileJsFile(f, errorsReport, { cubeNames, cubeSymbols, transpilerNames }))); } return results.filter(f => !!f) as FileContent[]; @@ -520,7 +510,7 @@ export class DataSchemaCompiler { errorsReport, { cubeNames: [], cubeSymbols: {}, transpilerNames: [], contextSymbols: {}, compilerId: this.compilerId, stage: 0 } ).then(() => undefined); - } else if (transpilationWorkerThreads && this.workerPool) { + } else if (this.workerPool) { this.workerPool.terminate(); } }); @@ -701,7 +691,7 @@ export class DataSchemaCompiler { errorsReport.exitFile(); return { ...file, content: res[0].code }; - } else if (getEnv('transpilationWorkerThreads')) { + } else { const data = { fileName: file.fileName, content: file.content, @@ -715,25 +705,6 @@ export class DataSchemaCompiler { errorsReport.addWarnings(res.warnings); return { ...file, content: res.content }; - } else { - const ast = parse( - file.content, - { - sourceFilename: file.fileName, - sourceType: 'module', - plugins: ['objectRestSpread'], - }, - ); - - errorsReport.inFile(file); - this.transpilers.forEach((t) => { - babelTraverse(ast, t.traverseObject(errorsReport)); - }); - errorsReport.exitFile(); - - const content = babelGenerator(ast, {}, file.content).code; - - return { ...file, content }; } } catch (e: any) { if (e.toString().indexOf('SyntaxError') !== -1) { @@ -778,7 +749,7 @@ export class DataSchemaCompiler { this.compiledYamlCache.set(cacheKey, res[0].code); return { ...file, content: res[0].code }; - } else if (getEnv('transpilationWorkerThreads')) { + } else { const data = { fileName: file.fileName, content: file.content, @@ -794,12 +765,6 @@ export class DataSchemaCompiler { this.compiledYamlCache.set(cacheKey, res.content); return { ...file, content: res.content }; - } else { - const transpiledFile = this.yamlCompiler.transpileYamlFile(file, errorsReport); - - this.compiledYamlCache.set(cacheKey, transpiledFile?.content || ''); - - return transpiledFile; } } diff --git a/packages/cubejs-testing-drivers/fixtures/athena.json b/packages/cubejs-testing-drivers/fixtures/athena.json index 988029d607cbd..271213ac1e52f 100644 --- a/packages/cubejs-testing-drivers/fixtures/athena.json +++ b/packages/cubejs-testing-drivers/fixtures/athena.json @@ -17,7 +17,6 @@ "CUBEJS_SQL_PASSWORD": "admin_password", "CUBESQL_SQL_PUSH_DOWN": "true", "CUBEJS_TESSERACT_SQL_PLANNER": "${DRIVERS_TESTS_CUBEJS_TESSERACT_SQL_PLANNER}", - "CUBEJS_TRANSPILATION_WORKER_THREADS": "${DRIVERS_TESTS_CUBEJS_TRANSPILATION_WORKER_THREADS}", "CUBEJS_TRANSPILATION_NATIVE": "${DRIVERS_TESTS_CUBEJS_TRANSPILATION_NATIVE}" }, "ports" : ["4000", "5656"] diff --git a/packages/cubejs-testing-drivers/fixtures/bigquery.json b/packages/cubejs-testing-drivers/fixtures/bigquery.json index 3f628e10bdda0..5627d85fb3204 100644 --- a/packages/cubejs-testing-drivers/fixtures/bigquery.json +++ b/packages/cubejs-testing-drivers/fixtures/bigquery.json @@ -19,7 +19,6 @@ "CUBEJS_DB_EXPORT_BUCKET": "cube-open-source-export-bucket", "CUBEJS_DB_EXPORT_BUCKET_TYPE": "gcp", "CUBEJS_TESSERACT_SQL_PLANNER": "${DRIVERS_TESTS_CUBEJS_TESSERACT_SQL_PLANNER}", - "CUBEJS_TRANSPILATION_WORKER_THREADS": "${DRIVERS_TESTS_CUBEJS_TRANSPILATION_WORKER_THREADS}", "CUBEJS_TRANSPILATION_NATIVE": "${DRIVERS_TESTS_CUBEJS_TRANSPILATION_NATIVE}" }, "ports" : ["4000", "5656"] diff --git a/packages/cubejs-testing-drivers/fixtures/clickhouse.json b/packages/cubejs-testing-drivers/fixtures/clickhouse.json index 7649744f2d5e8..0577f89943acb 100644 --- a/packages/cubejs-testing-drivers/fixtures/clickhouse.json +++ b/packages/cubejs-testing-drivers/fixtures/clickhouse.json @@ -38,7 +38,6 @@ "CUBEJS_SQL_PASSWORD": "admin_password", "CUBESQL_SQL_PUSH_DOWN": "true", "CUBEJS_TESSERACT_SQL_PLANNER": "${DRIVERS_TESTS_CUBEJS_TESSERACT_SQL_PLANNER}", - "CUBEJS_TRANSPILATION_WORKER_THREADS": "${DRIVERS_TESTS_CUBEJS_TRANSPILATION_WORKER_THREADS}", "CUBEJS_TRANSPILATION_NATIVE": "${DRIVERS_TESTS_CUBEJS_TRANSPILATION_NATIVE}" }, "depends_on": ["data"], diff --git a/packages/cubejs-testing-drivers/fixtures/databricks-jdbc.json b/packages/cubejs-testing-drivers/fixtures/databricks-jdbc.json index 891f07703c780..5cdd16f7e6b90 100644 --- a/packages/cubejs-testing-drivers/fixtures/databricks-jdbc.json +++ b/packages/cubejs-testing-drivers/fixtures/databricks-jdbc.json @@ -79,7 +79,6 @@ "CUBEJS_SQL_PASSWORD": "admin_password", "CUBESQL_SQL_PUSH_DOWN": "true", "CUBEJS_TESSERACT_SQL_PLANNER": "${DRIVERS_TESTS_CUBEJS_TESSERACT_SQL_PLANNER}", - "CUBEJS_TRANSPILATION_WORKER_THREADS": "${DRIVERS_TESTS_CUBEJS_TRANSPILATION_WORKER_THREADS}", "CUBEJS_TRANSPILATION_NATIVE": "${DRIVERS_TESTS_CUBEJS_TRANSPILATION_NATIVE}" }, "ports" : ["4000", "5656"] diff --git a/packages/cubejs-testing-drivers/fixtures/mssql.json b/packages/cubejs-testing-drivers/fixtures/mssql.json index 337e725466bb1..5b233fb5ace72 100644 --- a/packages/cubejs-testing-drivers/fixtures/mssql.json +++ b/packages/cubejs-testing-drivers/fixtures/mssql.json @@ -13,7 +13,6 @@ "CUBEJS_SQL_PASSWORD": "admin_password", "CUBESQL_SQL_PUSH_DOWN": "true", "CUBEJS_TESSERACT_SQL_PLANNER": "${DRIVERS_TESTS_CUBEJS_TESSERACT_SQL_PLANNER}", - "CUBEJS_TRANSPILATION_WORKER_THREADS": "${DRIVERS_TESTS_CUBEJS_TRANSPILATION_WORKER_THREADS}", "CUBEJS_TRANSPILATION_NATIVE": "${DRIVERS_TESTS_CUBEJS_TRANSPILATION_NATIVE}" }, "depends_on": ["data"], diff --git a/packages/cubejs-testing-drivers/fixtures/mysql.json b/packages/cubejs-testing-drivers/fixtures/mysql.json index c0dd56f4690a2..30cbcffa1df4f 100644 --- a/packages/cubejs-testing-drivers/fixtures/mysql.json +++ b/packages/cubejs-testing-drivers/fixtures/mysql.json @@ -14,7 +14,6 @@ "CUBEJS_SQL_PASSWORD": "admin_password", "CUBESQL_SQL_PUSH_DOWN": "true", "CUBEJS_TESSERACT_SQL_PLANNER": "${DRIVERS_TESTS_CUBEJS_TESSERACT_SQL_PLANNER}", - "CUBEJS_TRANSPILATION_WORKER_THREADS": "${DRIVERS_TESTS_CUBEJS_TRANSPILATION_WORKER_THREADS}", "CUBEJS_TRANSPILATION_NATIVE": "${DRIVERS_TESTS_CUBEJS_TRANSPILATION_NATIVE}" }, "depends_on": ["data"], diff --git a/packages/cubejs-testing-drivers/fixtures/postgres.json b/packages/cubejs-testing-drivers/fixtures/postgres.json index 50d09f2052adc..665e4cc4eb676 100644 --- a/packages/cubejs-testing-drivers/fixtures/postgres.json +++ b/packages/cubejs-testing-drivers/fixtures/postgres.json @@ -14,7 +14,6 @@ "CUBEJS_SQL_PASSWORD": "admin_password", "CUBESQL_SQL_PUSH_DOWN": "true", "CUBEJS_TESSERACT_SQL_PLANNER": "${DRIVERS_TESTS_CUBEJS_TESSERACT_SQL_PLANNER}", - "CUBEJS_TRANSPILATION_WORKER_THREADS": "${DRIVERS_TESTS_CUBEJS_TRANSPILATION_WORKER_THREADS}", "CUBEJS_TRANSPILATION_NATIVE": "${DRIVERS_TESTS_CUBEJS_TRANSPILATION_NATIVE}" }, "depends_on": ["data"], diff --git a/packages/cubejs-testing-drivers/fixtures/redshift.json b/packages/cubejs-testing-drivers/fixtures/redshift.json index 6d6f027e3202b..ac1c913d8fbc9 100644 --- a/packages/cubejs-testing-drivers/fixtures/redshift.json +++ b/packages/cubejs-testing-drivers/fixtures/redshift.json @@ -32,7 +32,6 @@ "CUBEJS_SQL_PASSWORD": "admin_password", "CUBESQL_SQL_PUSH_DOWN": "true", "CUBEJS_TESSERACT_SQL_PLANNER": "${DRIVERS_TESTS_CUBEJS_TESSERACT_SQL_PLANNER}", - "CUBEJS_TRANSPILATION_WORKER_THREADS": "${DRIVERS_TESTS_CUBEJS_TRANSPILATION_WORKER_THREADS}", "CUBEJS_TRANSPILATION_NATIVE": "${DRIVERS_TESTS_CUBEJS_TRANSPILATION_NATIVE}" }, "ports" : ["4000", "5656"] diff --git a/packages/cubejs-testing-drivers/fixtures/snowflake.json b/packages/cubejs-testing-drivers/fixtures/snowflake.json index 3ce4909af95c0..1a505f721cffd 100644 --- a/packages/cubejs-testing-drivers/fixtures/snowflake.json +++ b/packages/cubejs-testing-drivers/fixtures/snowflake.json @@ -118,7 +118,6 @@ "CUBEJS_SQL_PASSWORD": "admin_password", "CUBESQL_SQL_PUSH_DOWN": "true", "CUBEJS_TESSERACT_SQL_PLANNER": "${DRIVERS_TESTS_CUBEJS_TESSERACT_SQL_PLANNER}", - "CUBEJS_TRANSPILATION_WORKER_THREADS": "${DRIVERS_TESTS_CUBEJS_TRANSPILATION_WORKER_THREADS}", "CUBEJS_TRANSPILATION_NATIVE": "${DRIVERS_TESTS_CUBEJS_TRANSPILATION_NATIVE}" }, "ports" : ["4000", "5656"] From 0742e44e2bc21636e78de7ab945eb4ecc77cb083 Mon Sep 17 00:00:00 2001 From: Dmitry Patsura Date: Fri, 28 Nov 2025 11:25:17 +0100 Subject: [PATCH 3/6] chore(client-vue): Deprecation notice, saying goodbye (#10199) Last change for this package. It will update description on npm package registry. --- packages/cubejs-client-vue/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/cubejs-client-vue/README.md b/packages/cubejs-client-vue/README.md index 3bf284b83eb13..52c11b0d46df8 100644 --- a/packages/cubejs-client-vue/README.md +++ b/packages/cubejs-client-vue/README.md @@ -8,9 +8,9 @@ # Cube.js Vue --- -**NOTE** +**⚠️ DEPRECATED** -This package is only compatible with Vue 2. If you are using Vue 3, consider the `@cubejs-client/vue3` package instead. +This package is only compatible with Vue 2, which has reached End of Life (EOL). It is deprecated and will not receive any updates. We highly recommend upgrading to `@cubejs-client/vue3` and Vue 3. --- From 31c86ae4158e594ce6354ea43df82af6563a420f Mon Sep 17 00:00:00 2001 From: Dmitry Patsura Date: Fri, 28 Nov 2025 11:29:46 +0100 Subject: [PATCH 4/6] v1.5.10 --- CHANGELOG.md | 10 ++++ lerna.json | 2 +- packages/cubejs-api-gateway/CHANGELOG.md | 6 ++ packages/cubejs-api-gateway/package.json | 10 ++-- packages/cubejs-athena-driver/CHANGELOG.md | 4 ++ packages/cubejs-athena-driver/package.json | 10 ++-- packages/cubejs-backend-cloud/CHANGELOG.md | 4 ++ packages/cubejs-backend-cloud/package.json | 6 +- packages/cubejs-backend-maven/CHANGELOG.md | 4 ++ packages/cubejs-backend-maven/package.json | 6 +- packages/cubejs-backend-native/CHANGELOG.md | 6 ++ packages/cubejs-backend-native/package.json | 8 +-- packages/cubejs-backend-shared/CHANGELOG.md | 4 ++ packages/cubejs-backend-shared/package.json | 4 +- packages/cubejs-base-driver/CHANGELOG.md | 4 ++ packages/cubejs-base-driver/package.json | 6 +- packages/cubejs-bigquery-driver/CHANGELOG.md | 4 ++ packages/cubejs-bigquery-driver/package.json | 8 +-- packages/cubejs-cli/CHANGELOG.md | 4 ++ packages/cubejs-cli/package.json | 12 ++-- .../cubejs-clickhouse-driver/CHANGELOG.md | 4 ++ .../cubejs-clickhouse-driver/package.json | 10 ++-- packages/cubejs-client-core/CHANGELOG.md | 4 ++ packages/cubejs-client-core/package.json | 4 +- packages/cubejs-client-dx/CHANGELOG.md | 4 ++ packages/cubejs-client-dx/package.json | 2 +- packages/cubejs-client-ngx/CHANGELOG.md | 4 ++ packages/cubejs-client-ngx/package.json | 2 +- packages/cubejs-client-react/CHANGELOG.md | 4 ++ packages/cubejs-client-react/package.json | 4 +- packages/cubejs-client-vue/CHANGELOG.md | 4 ++ packages/cubejs-client-vue/package.json | 4 +- packages/cubejs-client-vue3/CHANGELOG.md | 4 ++ packages/cubejs-client-vue3/package.json | 4 +- .../cubejs-client-ws-transport/CHANGELOG.md | 4 ++ .../cubejs-client-ws-transport/package.json | 6 +- packages/cubejs-crate-driver/CHANGELOG.md | 4 ++ packages/cubejs-crate-driver/package.json | 10 ++-- packages/cubejs-cubestore-driver/CHANGELOG.md | 4 ++ packages/cubejs-cubestore-driver/package.json | 12 ++-- .../CHANGELOG.md | 4 ++ .../package.json | 12 ++-- .../cubejs-dbt-schema-extension/CHANGELOG.md | 4 ++ .../cubejs-dbt-schema-extension/package.json | 8 +-- packages/cubejs-docker/CHANGELOG.md | 4 ++ packages/cubejs-docker/package.json | 60 +++++++++---------- packages/cubejs-dremio-driver/CHANGELOG.md | 4 ++ packages/cubejs-dremio-driver/package.json | 12 ++-- packages/cubejs-druid-driver/CHANGELOG.md | 4 ++ packages/cubejs-druid-driver/package.json | 10 ++-- packages/cubejs-duckdb-driver/CHANGELOG.md | 4 ++ packages/cubejs-duckdb-driver/package.json | 12 ++-- .../cubejs-elasticsearch-driver/CHANGELOG.md | 4 ++ .../cubejs-elasticsearch-driver/package.json | 8 +-- packages/cubejs-firebolt-driver/CHANGELOG.md | 4 ++ packages/cubejs-firebolt-driver/package.json | 12 ++-- packages/cubejs-hive-driver/CHANGELOG.md | 4 ++ packages/cubejs-hive-driver/package.json | 8 +-- packages/cubejs-jdbc-driver/CHANGELOG.md | 4 ++ packages/cubejs-jdbc-driver/package.json | 8 +-- packages/cubejs-ksql-driver/CHANGELOG.md | 4 ++ packages/cubejs-ksql-driver/package.json | 10 ++-- packages/cubejs-linter/CHANGELOG.md | 4 ++ packages/cubejs-linter/package.json | 2 +- .../cubejs-materialize-driver/CHANGELOG.md | 4 ++ .../cubejs-materialize-driver/package.json | 12 ++-- packages/cubejs-mongobi-driver/CHANGELOG.md | 4 ++ packages/cubejs-mongobi-driver/package.json | 8 +-- packages/cubejs-mssql-driver/CHANGELOG.md | 4 ++ packages/cubejs-mssql-driver/package.json | 6 +- .../CHANGELOG.md | 4 ++ .../package.json | 8 +-- packages/cubejs-mysql-driver/CHANGELOG.md | 4 ++ packages/cubejs-mysql-driver/package.json | 10 ++-- packages/cubejs-oracle-driver/CHANGELOG.md | 4 ++ packages/cubejs-oracle-driver/package.json | 4 +- packages/cubejs-pinot-driver/CHANGELOG.md | 4 ++ packages/cubejs-pinot-driver/package.json | 10 ++-- packages/cubejs-playground/CHANGELOG.md | 4 ++ packages/cubejs-playground/package.json | 6 +- packages/cubejs-postgres-driver/CHANGELOG.md | 4 ++ packages/cubejs-postgres-driver/package.json | 10 ++-- packages/cubejs-prestodb-driver/CHANGELOG.md | 4 ++ packages/cubejs-prestodb-driver/package.json | 8 +-- .../cubejs-query-orchestrator/CHANGELOG.md | 6 ++ .../cubejs-query-orchestrator/package.json | 10 ++-- packages/cubejs-questdb-driver/CHANGELOG.md | 4 ++ packages/cubejs-questdb-driver/package.json | 12 ++-- packages/cubejs-redshift-driver/CHANGELOG.md | 4 ++ packages/cubejs-redshift-driver/package.json | 10 ++-- packages/cubejs-schema-compiler/CHANGELOG.md | 4 ++ packages/cubejs-schema-compiler/package.json | 10 ++-- packages/cubejs-server-core/CHANGELOG.md | 4 ++ packages/cubejs-server-core/package.json | 24 ++++---- packages/cubejs-server/CHANGELOG.md | 4 ++ packages/cubejs-server/package.json | 14 ++--- packages/cubejs-snowflake-driver/CHANGELOG.md | 4 ++ packages/cubejs-snowflake-driver/package.json | 8 +-- packages/cubejs-sqlite-driver/CHANGELOG.md | 4 ++ packages/cubejs-sqlite-driver/package.json | 8 +-- packages/cubejs-templates/CHANGELOG.md | 4 ++ packages/cubejs-templates/package.json | 6 +- packages/cubejs-testing-drivers/CHANGELOG.md | 4 ++ packages/cubejs-testing-drivers/package.json | 36 +++++------ packages/cubejs-testing-shared/CHANGELOG.md | 4 ++ packages/cubejs-testing-shared/package.json | 10 ++-- packages/cubejs-testing/CHANGELOG.md | 4 ++ packages/cubejs-testing/package.json | 22 +++---- packages/cubejs-trino-driver/CHANGELOG.md | 4 ++ packages/cubejs-trino-driver/package.json | 12 ++-- packages/cubejs-vertica-driver/CHANGELOG.md | 4 ++ packages/cubejs-vertica-driver/package.json | 14 ++--- rust/cubesql/CHANGELOG.md | 6 ++ rust/cubesql/package.json | 2 +- rust/cubestore/CHANGELOG.md | 4 ++ rust/cubestore/package.json | 6 +- 116 files changed, 535 insertions(+), 289 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 72201196d847c..ee8b85182645f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,16 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube/compare/v1.5.9...v1.5.10) (2025-11-28) + +### Bug Fixes + +- **query-orchestrator:** Table used cache should not be used for unions ([#10192](https://github.com/cube-js/cube/issues/10192)) ([53d79bb](https://github.com/cube-js/cube/commit/53d79bbfd16aeefadb3bd8e0a73a5c0b5e920da4)) + +### Features + +- **api-gateway:** Support query timezone in `/cubesql` API endpoint ([#10189](https://github.com/cube-js/cube/issues/10189)) ([499ddc6](https://github.com/cube-js/cube/commit/499ddc62fc1618b78f16a17943e1c72a670f6b48)) + ## [1.5.9](https://github.com/cube-js/cube/compare/v1.5.8...v1.5.9) (2025-11-26) ### Bug Fixes diff --git a/lerna.json b/lerna.json index 926e1667feebc..49461b150a137 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "1.5.9", + "version": "1.5.10", "npmClient": "yarn", "command": { "bootstrap": { diff --git a/packages/cubejs-api-gateway/CHANGELOG.md b/packages/cubejs-api-gateway/CHANGELOG.md index 16fd6c84f24df..13ffc26b335c2 100644 --- a/packages/cubejs-api-gateway/CHANGELOG.md +++ b/packages/cubejs-api-gateway/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube/compare/v1.5.9...v1.5.10) (2025-11-28) + +### Features + +- **api-gateway:** Support query timezone in `/cubesql` API endpoint ([#10189](https://github.com/cube-js/cube/issues/10189)) ([499ddc6](https://github.com/cube-js/cube/commit/499ddc62fc1618b78f16a17943e1c72a670f6b48)) + ## [1.5.9](https://github.com/cube-js/cube/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package @cubejs-backend/api-gateway diff --git a/packages/cubejs-api-gateway/package.json b/packages/cubejs-api-gateway/package.json index 71e52b42a9907..a7f376b8a1482 100644 --- a/packages/cubejs-api-gateway/package.json +++ b/packages/cubejs-api-gateway/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/api-gateway", "description": "Cube.js API Gateway", "author": "Cube Dev, Inc.", - "version": "1.5.9", + "version": "1.5.10", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -27,9 +27,9 @@ "dist/src/*" ], "dependencies": { - "@cubejs-backend/native": "1.5.9", - "@cubejs-backend/query-orchestrator": "1.5.9", - "@cubejs-backend/shared": "1.5.9", + "@cubejs-backend/native": "1.5.10", + "@cubejs-backend/query-orchestrator": "1.5.10", + "@cubejs-backend/shared": "1.5.10", "@ungap/structured-clone": "^0.3.4", "assert-never": "^1.4.0", "body-parser": "^1.19.0", @@ -52,7 +52,7 @@ "uuid": "^8.3.2" }, "devDependencies": { - "@cubejs-backend/linter": "1.5.9", + "@cubejs-backend/linter": "1.5.10", "@types/express": "^4.17.21", "@types/jest": "^29", "@types/jsonwebtoken": "^9.0.2", diff --git a/packages/cubejs-athena-driver/CHANGELOG.md b/packages/cubejs-athena-driver/CHANGELOG.md index 11ea83d985ec1..072956c04b35a 100644 --- a/packages/cubejs-athena-driver/CHANGELOG.md +++ b/packages/cubejs-athena-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube/compare/v1.5.9...v1.5.10) (2025-11-28) + +**Note:** Version bump only for package @cubejs-backend/athena-driver + ## [1.5.9](https://github.com/cube-js/cube/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package @cubejs-backend/athena-driver diff --git a/packages/cubejs-athena-driver/package.json b/packages/cubejs-athena-driver/package.json index 538607356c4a4..aa287c50233d6 100644 --- a/packages/cubejs-athena-driver/package.json +++ b/packages/cubejs-athena-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/athena-driver", "description": "Cube.js Athena database driver", "author": "Cube Dev, Inc.", - "version": "1.5.9", + "version": "1.5.10", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -30,13 +30,13 @@ "dependencies": { "@aws-sdk/client-athena": "^3.22.0", "@aws-sdk/credential-providers": "^3.22.0", - "@cubejs-backend/base-driver": "1.5.9", - "@cubejs-backend/shared": "1.5.9", + "@cubejs-backend/base-driver": "1.5.10", + "@cubejs-backend/shared": "1.5.10", "sqlstring": "^2.3.1" }, "devDependencies": { - "@cubejs-backend/linter": "1.5.9", - "@cubejs-backend/testing-shared": "1.5.9", + "@cubejs-backend/linter": "1.5.10", + "@cubejs-backend/testing-shared": "1.5.10", "@types/ramda": "^0.27.40", "typescript": "~5.2.2" }, diff --git a/packages/cubejs-backend-cloud/CHANGELOG.md b/packages/cubejs-backend-cloud/CHANGELOG.md index 84a06573add1b..5221fd419be42 100644 --- a/packages/cubejs-backend-cloud/CHANGELOG.md +++ b/packages/cubejs-backend-cloud/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube/compare/v1.5.9...v1.5.10) (2025-11-28) + +**Note:** Version bump only for package @cubejs-backend/cloud + ## [1.5.9](https://github.com/cube-js/cube/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package @cubejs-backend/cloud diff --git a/packages/cubejs-backend-cloud/package.json b/packages/cubejs-backend-cloud/package.json index 46eff2f8e129e..73c7c2d045959 100644 --- a/packages/cubejs-backend-cloud/package.json +++ b/packages/cubejs-backend-cloud/package.json @@ -1,6 +1,6 @@ { "name": "@cubejs-backend/cloud", - "version": "1.5.9", + "version": "1.5.10", "description": "Cube Cloud package", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", @@ -25,7 +25,7 @@ "devDependencies": { "@babel/core": "^7.24.5", "@babel/preset-env": "^7.24.5", - "@cubejs-backend/linter": "1.5.9", + "@cubejs-backend/linter": "1.5.10", "@types/fs-extra": "^9.0.8", "@types/jest": "^29", "jest": "^29", @@ -33,7 +33,7 @@ }, "dependencies": { "@cubejs-backend/dotenv": "^9.0.2", - "@cubejs-backend/shared": "1.5.9", + "@cubejs-backend/shared": "1.5.10", "chokidar": "^3.5.1", "env-var": "^6.3.0", "form-data": "^4.0.0", diff --git a/packages/cubejs-backend-maven/CHANGELOG.md b/packages/cubejs-backend-maven/CHANGELOG.md index 2dca35201b3dc..9a8a96c8efdfb 100644 --- a/packages/cubejs-backend-maven/CHANGELOG.md +++ b/packages/cubejs-backend-maven/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube/compare/v1.5.9...v1.5.10) (2025-11-28) + +**Note:** Version bump only for package @cubejs-backend/maven + ## [1.5.9](https://github.com/cube-js/cube/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package @cubejs-backend/maven diff --git a/packages/cubejs-backend-maven/package.json b/packages/cubejs-backend-maven/package.json index ab00c2b58bc18..b651585902185 100644 --- a/packages/cubejs-backend-maven/package.json +++ b/packages/cubejs-backend-maven/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/maven", "description": "Cube.js Maven Wrapper for java dependencies downloading", "author": "Cube Dev, Inc.", - "version": "1.5.9", + "version": "1.5.10", "license": "Apache-2.0", "repository": { "type": "git", @@ -31,12 +31,12 @@ "dist/src/*" ], "dependencies": { - "@cubejs-backend/shared": "1.5.9", + "@cubejs-backend/shared": "1.5.10", "source-map-support": "^0.5.19", "xmlbuilder2": "^2.4.0" }, "devDependencies": { - "@cubejs-backend/linter": "1.5.9", + "@cubejs-backend/linter": "1.5.10", "@types/jest": "^29", "@types/node": "^20", "jest": "^29", diff --git a/packages/cubejs-backend-native/CHANGELOG.md b/packages/cubejs-backend-native/CHANGELOG.md index e57781fc72e92..c55945c92f01b 100644 --- a/packages/cubejs-backend-native/CHANGELOG.md +++ b/packages/cubejs-backend-native/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube/compare/v1.5.9...v1.5.10) (2025-11-28) + +### Features + +- **api-gateway:** Support query timezone in `/cubesql` API endpoint ([#10189](https://github.com/cube-js/cube/issues/10189)) ([499ddc6](https://github.com/cube-js/cube/commit/499ddc62fc1618b78f16a17943e1c72a670f6b48)) + ## [1.5.9](https://github.com/cube-js/cube/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package @cubejs-backend/native diff --git a/packages/cubejs-backend-native/package.json b/packages/cubejs-backend-native/package.json index c7130c59b6f93..3c1aba9f18bf5 100644 --- a/packages/cubejs-backend-native/package.json +++ b/packages/cubejs-backend-native/package.json @@ -1,6 +1,6 @@ { "name": "@cubejs-backend/native", - "version": "1.5.9", + "version": "1.5.10", "author": "Cube Dev, Inc.", "description": "Native module for Cube.js (binding to Rust codebase)", "main": "dist/js/index.js", @@ -35,7 +35,7 @@ "dist/js" ], "devDependencies": { - "@cubejs-backend/linter": "1.5.9", + "@cubejs-backend/linter": "1.5.10", "@types/jest": "^29", "@types/node": "^20", "cargo-cp-artifact": "^0.1.9", @@ -46,8 +46,8 @@ "uuid": "^8.3.2" }, "dependencies": { - "@cubejs-backend/cubesql": "1.5.9", - "@cubejs-backend/shared": "1.5.9", + "@cubejs-backend/cubesql": "1.5.10", + "@cubejs-backend/shared": "1.5.10", "@cubejs-infra/post-installer": "^0.0.7" }, "resources": { diff --git a/packages/cubejs-backend-shared/CHANGELOG.md b/packages/cubejs-backend-shared/CHANGELOG.md index eebe1b0fecde1..b0228e36c6ba9 100644 --- a/packages/cubejs-backend-shared/CHANGELOG.md +++ b/packages/cubejs-backend-shared/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube/compare/v1.5.9...v1.5.10) (2025-11-28) + +**Note:** Version bump only for package @cubejs-backend/shared + ## [1.5.9](https://github.com/cube-js/cube/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package @cubejs-backend/shared diff --git a/packages/cubejs-backend-shared/package.json b/packages/cubejs-backend-shared/package.json index 8f6ffadbda9b8..34468a4a1e205 100644 --- a/packages/cubejs-backend-shared/package.json +++ b/packages/cubejs-backend-shared/package.json @@ -1,6 +1,6 @@ { "name": "@cubejs-backend/shared", - "version": "1.5.9", + "version": "1.5.10", "description": "Shared code for Cube.js backend packages", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", @@ -22,7 +22,7 @@ "author": "Cube Dev, Inc.", "license": "Apache-2.0", "devDependencies": { - "@cubejs-backend/linter": "1.5.9", + "@cubejs-backend/linter": "1.5.10", "@types/bytes": "^3.1.5", "@types/cli-progress": "^3.9.1", "@types/decompress": "^4.2.7", diff --git a/packages/cubejs-base-driver/CHANGELOG.md b/packages/cubejs-base-driver/CHANGELOG.md index 889751a118af9..4bbd068c1a2ba 100644 --- a/packages/cubejs-base-driver/CHANGELOG.md +++ b/packages/cubejs-base-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube/compare/v1.5.9...v1.5.10) (2025-11-28) + +**Note:** Version bump only for package @cubejs-backend/base-driver + ## [1.5.9](https://github.com/cube-js/cube/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package @cubejs-backend/base-driver diff --git a/packages/cubejs-base-driver/package.json b/packages/cubejs-base-driver/package.json index ce0cc11d758d1..b8f783e12db1a 100644 --- a/packages/cubejs-base-driver/package.json +++ b/packages/cubejs-base-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/base-driver", "description": "Cube.js Base Driver", "author": "Cube Dev, Inc.", - "version": "1.5.9", + "version": "1.5.10", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -33,11 +33,11 @@ "@aws-sdk/s3-request-presigner": "^3.49.0", "@azure/identity": "^4.4.1", "@azure/storage-blob": "^12.9.0", - "@cubejs-backend/shared": "1.5.9", + "@cubejs-backend/shared": "1.5.10", "@google-cloud/storage": "^7.13.0" }, "devDependencies": { - "@cubejs-backend/linter": "1.5.9", + "@cubejs-backend/linter": "1.5.10", "@types/jest": "^29", "@types/node": "^20", "jest": "^29", diff --git a/packages/cubejs-bigquery-driver/CHANGELOG.md b/packages/cubejs-bigquery-driver/CHANGELOG.md index 9b494a049f431..780a47f1ac360 100644 --- a/packages/cubejs-bigquery-driver/CHANGELOG.md +++ b/packages/cubejs-bigquery-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube/compare/v1.5.9...v1.5.10) (2025-11-28) + +**Note:** Version bump only for package @cubejs-backend/bigquery-driver + ## [1.5.9](https://github.com/cube-js/cube/compare/v1.5.8...v1.5.9) (2025-11-26) ### Bug Fixes diff --git a/packages/cubejs-bigquery-driver/package.json b/packages/cubejs-bigquery-driver/package.json index ce344eba63a35..5e4427b46d72a 100644 --- a/packages/cubejs-bigquery-driver/package.json +++ b/packages/cubejs-bigquery-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/bigquery-driver", "description": "Cube.js BigQuery database driver", "author": "Cube Dev, Inc.", - "version": "1.5.9", + "version": "1.5.10", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -29,15 +29,15 @@ "main": "index.js", "types": "dist/src/index.d.ts", "dependencies": { - "@cubejs-backend/base-driver": "1.5.9", + "@cubejs-backend/base-driver": "1.5.10", "@cubejs-backend/dotenv": "^9.0.2", - "@cubejs-backend/shared": "1.5.9", + "@cubejs-backend/shared": "1.5.10", "@google-cloud/bigquery": "^7.7.0", "@google-cloud/storage": "^7.13.0", "ramda": "^0.27.2" }, "devDependencies": { - "@cubejs-backend/testing-shared": "1.5.9", + "@cubejs-backend/testing-shared": "1.5.10", "@types/big.js": "^6.2.2", "@types/dedent": "^0.7.0", "@types/jest": "^29", diff --git a/packages/cubejs-cli/CHANGELOG.md b/packages/cubejs-cli/CHANGELOG.md index 8cf81f63024a1..8dfea95206cf3 100644 --- a/packages/cubejs-cli/CHANGELOG.md +++ b/packages/cubejs-cli/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube/compare/v1.5.9...v1.5.10) (2025-11-28) + +**Note:** Version bump only for package cubejs-cli + ## [1.5.9](https://github.com/cube-js/cube/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package cubejs-cli diff --git a/packages/cubejs-cli/package.json b/packages/cubejs-cli/package.json index 0cc19debd8a84..156036a76bba5 100644 --- a/packages/cubejs-cli/package.json +++ b/packages/cubejs-cli/package.json @@ -2,7 +2,7 @@ "name": "cubejs-cli", "description": "Cube.js Command Line Interface", "author": "Cube Dev, Inc.", - "version": "1.5.9", + "version": "1.5.10", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -30,10 +30,10 @@ "LICENSE" ], "dependencies": { - "@cubejs-backend/cloud": "1.5.9", + "@cubejs-backend/cloud": "1.5.10", "@cubejs-backend/dotenv": "^9.0.2", - "@cubejs-backend/schema-compiler": "1.5.9", - "@cubejs-backend/shared": "1.5.9", + "@cubejs-backend/schema-compiler": "1.5.10", + "@cubejs-backend/shared": "1.5.10", "chalk": "^2.4.2", "cli-progress": "^3.10", "commander": "^2.19.0", @@ -50,8 +50,8 @@ "colors": "1.4.0" }, "devDependencies": { - "@cubejs-backend/linter": "1.5.9", - "@cubejs-backend/server": "1.5.9", + "@cubejs-backend/linter": "1.5.10", + "@cubejs-backend/server": "1.5.10", "@oclif/command": "^1.8.0", "@types/cli-progress": "^3.8.0", "@types/cross-spawn": "^6.0.2", diff --git a/packages/cubejs-clickhouse-driver/CHANGELOG.md b/packages/cubejs-clickhouse-driver/CHANGELOG.md index 2ca0195663ee5..49efa092568a7 100644 --- a/packages/cubejs-clickhouse-driver/CHANGELOG.md +++ b/packages/cubejs-clickhouse-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube/compare/v1.5.9...v1.5.10) (2025-11-28) + +**Note:** Version bump only for package @cubejs-backend/clickhouse-driver + ## [1.5.9](https://github.com/cube-js/cube/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package @cubejs-backend/clickhouse-driver diff --git a/packages/cubejs-clickhouse-driver/package.json b/packages/cubejs-clickhouse-driver/package.json index 76b26e7fa19e4..5143166031870 100644 --- a/packages/cubejs-clickhouse-driver/package.json +++ b/packages/cubejs-clickhouse-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/clickhouse-driver", "description": "Cube.js ClickHouse database driver", "author": "Cube Dev, Inc.", - "version": "1.5.9", + "version": "1.5.10", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -28,16 +28,16 @@ }, "dependencies": { "@clickhouse/client": "^1.12.0", - "@cubejs-backend/base-driver": "1.5.9", - "@cubejs-backend/shared": "1.5.9", + "@cubejs-backend/base-driver": "1.5.10", + "@cubejs-backend/shared": "1.5.10", "moment": "^2.24.0", "sqlstring": "^2.3.1", "uuid": "^8.3.2" }, "license": "Apache-2.0", "devDependencies": { - "@cubejs-backend/linter": "1.5.9", - "@cubejs-backend/testing-shared": "1.5.9", + "@cubejs-backend/linter": "1.5.10", + "@cubejs-backend/testing-shared": "1.5.10", "@types/jest": "^29", "jest": "^29", "typescript": "~5.2.2" diff --git a/packages/cubejs-client-core/CHANGELOG.md b/packages/cubejs-client-core/CHANGELOG.md index be74bfd9ff86d..b51a5596ff29b 100644 --- a/packages/cubejs-client-core/CHANGELOG.md +++ b/packages/cubejs-client-core/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube/compare/v1.5.9...v1.5.10) (2025-11-28) + +**Note:** Version bump only for package @cubejs-client/core + ## [1.5.9](https://github.com/cube-js/cube/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package @cubejs-client/core diff --git a/packages/cubejs-client-core/package.json b/packages/cubejs-client-core/package.json index 1a16cde06892b..1ebd239dc7c68 100644 --- a/packages/cubejs-client-core/package.json +++ b/packages/cubejs-client-core/package.json @@ -1,6 +1,6 @@ { "name": "@cubejs-client/core", - "version": "1.5.9", + "version": "1.5.10", "engines": {}, "repository": { "type": "git", @@ -38,7 +38,7 @@ ], "license": "MIT", "devDependencies": { - "@cubejs-backend/linter": "1.5.9", + "@cubejs-backend/linter": "1.5.10", "@types/jest": "^29", "@types/moment-range": "^4.0.0", "@types/ramda": "^0.27.34", diff --git a/packages/cubejs-client-dx/CHANGELOG.md b/packages/cubejs-client-dx/CHANGELOG.md index 5d2799b8b2722..04a2d749cd722 100644 --- a/packages/cubejs-client-dx/CHANGELOG.md +++ b/packages/cubejs-client-dx/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube/compare/v1.5.9...v1.5.10) (2025-11-28) + +**Note:** Version bump only for package @cubejs-client/dx + ## [1.5.9](https://github.com/cube-js/cube/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package @cubejs-client/dx diff --git a/packages/cubejs-client-dx/package.json b/packages/cubejs-client-dx/package.json index 2c7cb576a1011..41a4319941fbf 100644 --- a/packages/cubejs-client-dx/package.json +++ b/packages/cubejs-client-dx/package.json @@ -1,6 +1,6 @@ { "name": "@cubejs-client/dx", - "version": "1.5.9", + "version": "1.5.10", "engines": {}, "repository": { "type": "git", diff --git a/packages/cubejs-client-ngx/CHANGELOG.md b/packages/cubejs-client-ngx/CHANGELOG.md index 3d9d308fb203c..a0ce43eac6066 100644 --- a/packages/cubejs-client-ngx/CHANGELOG.md +++ b/packages/cubejs-client-ngx/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube/compare/v1.5.9...v1.5.10) (2025-11-28) + +**Note:** Version bump only for package @cubejs-client/ngx + ## [1.5.9](https://github.com/cube-js/cube/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package @cubejs-client/ngx diff --git a/packages/cubejs-client-ngx/package.json b/packages/cubejs-client-ngx/package.json index 88c65d94c663b..0d2ae58aed0f0 100644 --- a/packages/cubejs-client-ngx/package.json +++ b/packages/cubejs-client-ngx/package.json @@ -1,6 +1,6 @@ { "name": "@cubejs-client/ngx", - "version": "1.5.9", + "version": "1.5.10", "author": "Cube Dev, Inc.", "engines": {}, "repository": { diff --git a/packages/cubejs-client-react/CHANGELOG.md b/packages/cubejs-client-react/CHANGELOG.md index 44851017bd0b6..6ed25842bd071 100644 --- a/packages/cubejs-client-react/CHANGELOG.md +++ b/packages/cubejs-client-react/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube/compare/v1.5.9...v1.5.10) (2025-11-28) + +**Note:** Version bump only for package @cubejs-client/react + ## [1.5.9](https://github.com/cube-js/cube/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package @cubejs-client/react diff --git a/packages/cubejs-client-react/package.json b/packages/cubejs-client-react/package.json index 398a0fda941f1..8bcdba6abd602 100644 --- a/packages/cubejs-client-react/package.json +++ b/packages/cubejs-client-react/package.json @@ -1,6 +1,6 @@ { "name": "@cubejs-client/react", - "version": "1.5.9", + "version": "1.5.10", "author": "Cube Dev, Inc.", "license": "MIT", "engines": {}, @@ -24,7 +24,7 @@ ], "dependencies": { "@babel/runtime": "^7.1.2", - "@cubejs-client/core": "1.5.9", + "@cubejs-client/core": "1.5.10", "core-js": "^3.6.5", "ramda": "^0.27.2" }, diff --git a/packages/cubejs-client-vue/CHANGELOG.md b/packages/cubejs-client-vue/CHANGELOG.md index 80c1f8f88ea64..06cc530ba633e 100644 --- a/packages/cubejs-client-vue/CHANGELOG.md +++ b/packages/cubejs-client-vue/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube.js/compare/v1.5.9...v1.5.10) (2025-11-28) + +**Note:** Version bump only for package @cubejs-client/vue + ## [1.5.9](https://github.com/cube-js/cube.js/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package @cubejs-client/vue diff --git a/packages/cubejs-client-vue/package.json b/packages/cubejs-client-vue/package.json index a2ff3aad8f0a0..8bafd78439d6f 100644 --- a/packages/cubejs-client-vue/package.json +++ b/packages/cubejs-client-vue/package.json @@ -1,6 +1,6 @@ { "name": "@cubejs-client/vue", - "version": "1.5.9", + "version": "1.5.10", "engines": {}, "repository": { "type": "git", @@ -28,7 +28,7 @@ "src" ], "dependencies": { - "@cubejs-client/core": "1.5.9", + "@cubejs-client/core": "1.5.10", "core-js": "^3.6.5", "ramda": "^0.27.2" }, diff --git a/packages/cubejs-client-vue3/CHANGELOG.md b/packages/cubejs-client-vue3/CHANGELOG.md index 98698c5c44831..b9fe3c93a1e2c 100644 --- a/packages/cubejs-client-vue3/CHANGELOG.md +++ b/packages/cubejs-client-vue3/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube.js/compare/v1.5.9...v1.5.10) (2025-11-28) + +**Note:** Version bump only for package @cubejs-client/vue3 + ## [1.5.9](https://github.com/cube-js/cube.js/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package @cubejs-client/vue3 diff --git a/packages/cubejs-client-vue3/package.json b/packages/cubejs-client-vue3/package.json index fea551f40168e..d6f1bdcf95eb8 100644 --- a/packages/cubejs-client-vue3/package.json +++ b/packages/cubejs-client-vue3/package.json @@ -1,6 +1,6 @@ { "name": "@cubejs-client/vue3", - "version": "1.5.9", + "version": "1.5.10", "engines": {}, "repository": { "type": "git", @@ -28,7 +28,7 @@ "src" ], "dependencies": { - "@cubejs-client/core": "1.5.9", + "@cubejs-client/core": "1.5.10", "ramda": "^0.27.0" }, "devDependencies": { diff --git a/packages/cubejs-client-ws-transport/CHANGELOG.md b/packages/cubejs-client-ws-transport/CHANGELOG.md index d1e902505c994..bb30051d87ce2 100644 --- a/packages/cubejs-client-ws-transport/CHANGELOG.md +++ b/packages/cubejs-client-ws-transport/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube/compare/v1.5.9...v1.5.10) (2025-11-28) + +**Note:** Version bump only for package @cubejs-client/ws-transport + ## [1.5.9](https://github.com/cube-js/cube/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package @cubejs-client/ws-transport diff --git a/packages/cubejs-client-ws-transport/package.json b/packages/cubejs-client-ws-transport/package.json index 911f066d1a5b3..f6db32eaf3d2b 100644 --- a/packages/cubejs-client-ws-transport/package.json +++ b/packages/cubejs-client-ws-transport/package.json @@ -1,6 +1,6 @@ { "name": "@cubejs-client/ws-transport", - "version": "1.5.9", + "version": "1.5.10", "engines": {}, "repository": { "type": "git", @@ -20,7 +20,7 @@ }, "dependencies": { "@babel/runtime": "^7.1.2", - "@cubejs-client/core": "1.5.9", + "@cubejs-client/core": "1.5.10", "core-js": "^3.6.5", "isomorphic-ws": "^4.0.1", "ws": "^7.3.1" @@ -33,7 +33,7 @@ "@babel/core": "^7.3.3", "@babel/preset-env": "^7.3.1", "@babel/preset-typescript": "^7.12.1", - "@cubejs-backend/linter": "1.5.9", + "@cubejs-backend/linter": "1.5.10", "@types/ws": "^7.2.9", "typescript": "~5.2.2" }, diff --git a/packages/cubejs-crate-driver/CHANGELOG.md b/packages/cubejs-crate-driver/CHANGELOG.md index 585c0fc413689..b5862a4d44d64 100644 --- a/packages/cubejs-crate-driver/CHANGELOG.md +++ b/packages/cubejs-crate-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube/compare/v1.5.9...v1.5.10) (2025-11-28) + +**Note:** Version bump only for package @cubejs-backend/crate-driver + ## [1.5.9](https://github.com/cube-js/cube/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package @cubejs-backend/crate-driver diff --git a/packages/cubejs-crate-driver/package.json b/packages/cubejs-crate-driver/package.json index 7d4424cf90c98..1a23cbe3f3283 100644 --- a/packages/cubejs-crate-driver/package.json +++ b/packages/cubejs-crate-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/crate-driver", "description": "Cube.js Crate database driver", "author": "Cube Dev, Inc.", - "version": "1.5.9", + "version": "1.5.10", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -28,14 +28,14 @@ "lint:fix": "eslint --fix src/* --ext .ts" }, "dependencies": { - "@cubejs-backend/postgres-driver": "1.5.9", - "@cubejs-backend/shared": "1.5.9", + "@cubejs-backend/postgres-driver": "1.5.10", + "@cubejs-backend/shared": "1.5.10", "pg": "^8.7.1" }, "license": "Apache-2.0", "devDependencies": { - "@cubejs-backend/linter": "1.5.9", - "@cubejs-backend/testing-shared": "1.5.9", + "@cubejs-backend/linter": "1.5.10", + "@cubejs-backend/testing-shared": "1.5.10", "testcontainers": "^10.28.0", "typescript": "~5.2.2" }, diff --git a/packages/cubejs-cubestore-driver/CHANGELOG.md b/packages/cubejs-cubestore-driver/CHANGELOG.md index 7b28ebfaf0f73..77a879ccce642 100644 --- a/packages/cubejs-cubestore-driver/CHANGELOG.md +++ b/packages/cubejs-cubestore-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube/compare/v1.5.9...v1.5.10) (2025-11-28) + +**Note:** Version bump only for package @cubejs-backend/cubestore-driver + ## [1.5.9](https://github.com/cube-js/cube/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package @cubejs-backend/cubestore-driver diff --git a/packages/cubejs-cubestore-driver/package.json b/packages/cubejs-cubestore-driver/package.json index 8ee592521f54d..fab83598e1321 100644 --- a/packages/cubejs-cubestore-driver/package.json +++ b/packages/cubejs-cubestore-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/cubestore-driver", "description": "Cube Store driver", "author": "Cube Dev, Inc.", - "version": "1.5.9", + "version": "1.5.10", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -26,10 +26,10 @@ "lint:fix": "eslint --fix src/*.ts" }, "dependencies": { - "@cubejs-backend/base-driver": "1.5.9", - "@cubejs-backend/cubestore": "1.5.9", - "@cubejs-backend/native": "1.5.9", - "@cubejs-backend/shared": "1.5.9", + "@cubejs-backend/base-driver": "1.5.10", + "@cubejs-backend/cubestore": "1.5.10", + "@cubejs-backend/native": "1.5.10", + "@cubejs-backend/shared": "1.5.10", "csv-write-stream": "^2.0.0", "flatbuffers": "23.3.3", "fs-extra": "^9.1.0", @@ -41,7 +41,7 @@ "ws": "^7.4.3" }, "devDependencies": { - "@cubejs-backend/linter": "1.5.9", + "@cubejs-backend/linter": "1.5.10", "@types/csv-write-stream": "^2.0.0", "@types/jest": "^29", "@types/node": "^20", diff --git a/packages/cubejs-databricks-jdbc-driver/CHANGELOG.md b/packages/cubejs-databricks-jdbc-driver/CHANGELOG.md index 6ab1a0072ac41..bc0987b127cff 100644 --- a/packages/cubejs-databricks-jdbc-driver/CHANGELOG.md +++ b/packages/cubejs-databricks-jdbc-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube/compare/v1.5.9...v1.5.10) (2025-11-28) + +**Note:** Version bump only for package @cubejs-backend/databricks-jdbc-driver + ## [1.5.9](https://github.com/cube-js/cube/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package @cubejs-backend/databricks-jdbc-driver diff --git a/packages/cubejs-databricks-jdbc-driver/package.json b/packages/cubejs-databricks-jdbc-driver/package.json index 048d3adc047a1..7e77bc40d2c4b 100644 --- a/packages/cubejs-databricks-jdbc-driver/package.json +++ b/packages/cubejs-databricks-jdbc-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/databricks-jdbc-driver", "description": "Cube.js Databricks database driver", "author": "Cube Dev, Inc.", - "version": "1.5.9", + "version": "1.5.10", "license": "Apache-2.0", "repository": { "type": "git", @@ -30,17 +30,17 @@ "bin" ], "dependencies": { - "@cubejs-backend/base-driver": "1.5.9", - "@cubejs-backend/jdbc-driver": "1.5.9", - "@cubejs-backend/schema-compiler": "1.5.9", - "@cubejs-backend/shared": "1.5.9", + "@cubejs-backend/base-driver": "1.5.10", + "@cubejs-backend/jdbc-driver": "1.5.10", + "@cubejs-backend/schema-compiler": "1.5.10", + "@cubejs-backend/shared": "1.5.10", "node-fetch": "^2.6.1", "ramda": "^0.27.2", "source-map-support": "^0.5.19", "uuid": "^8.3.2" }, "devDependencies": { - "@cubejs-backend/linter": "1.5.9", + "@cubejs-backend/linter": "1.5.10", "@types/jest": "^29", "@types/node": "^20", "@types/ramda": "^0.27.34", diff --git a/packages/cubejs-dbt-schema-extension/CHANGELOG.md b/packages/cubejs-dbt-schema-extension/CHANGELOG.md index 3039b6e245b15..e1e2b1fcb73ae 100644 --- a/packages/cubejs-dbt-schema-extension/CHANGELOG.md +++ b/packages/cubejs-dbt-schema-extension/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube/compare/v1.5.9...v1.5.10) (2025-11-28) + +**Note:** Version bump only for package @cubejs-backend/dbt-schema-extension + ## [1.5.9](https://github.com/cube-js/cube/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package @cubejs-backend/dbt-schema-extension diff --git a/packages/cubejs-dbt-schema-extension/package.json b/packages/cubejs-dbt-schema-extension/package.json index af88beb9815a4..5675f34af5d87 100644 --- a/packages/cubejs-dbt-schema-extension/package.json +++ b/packages/cubejs-dbt-schema-extension/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/dbt-schema-extension", "description": "Cube.js dbt Schema Extension", "author": "Cube Dev, Inc.", - "version": "1.5.9", + "version": "1.5.10", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -25,14 +25,14 @@ "lint:fix": "eslint --fix src/* --ext .ts,.js" }, "dependencies": { - "@cubejs-backend/schema-compiler": "1.5.9", + "@cubejs-backend/schema-compiler": "1.5.10", "fs-extra": "^9.1.0", "inflection": "^1.12.0", "node-fetch": "^2.6.1" }, "devDependencies": { - "@cubejs-backend/linter": "1.5.9", - "@cubejs-backend/testing": "1.5.9", + "@cubejs-backend/linter": "1.5.10", + "@cubejs-backend/testing": "1.5.10", "@types/jest": "^29", "jest": "^29", "stream-to-array": "^2.3.0", diff --git a/packages/cubejs-docker/CHANGELOG.md b/packages/cubejs-docker/CHANGELOG.md index c811fda5c3004..2fc474c1a3b3f 100644 --- a/packages/cubejs-docker/CHANGELOG.md +++ b/packages/cubejs-docker/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube/compare/v1.5.9...v1.5.10) (2025-11-28) + +**Note:** Version bump only for package @cubejs-backend/docker + ## [1.5.9](https://github.com/cube-js/cube/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package @cubejs-backend/docker diff --git a/packages/cubejs-docker/package.json b/packages/cubejs-docker/package.json index f46d8b69e8015..44fb530cf7343 100644 --- a/packages/cubejs-docker/package.json +++ b/packages/cubejs-docker/package.json @@ -1,6 +1,6 @@ { "name": "@cubejs-backend/docker", - "version": "1.5.9", + "version": "1.5.10", "description": "Cube.js In Docker (virtual package)", "author": "Cube Dev, Inc.", "license": "Apache-2.0", @@ -9,35 +9,35 @@ "node": ">=18.0.0" }, "dependencies": { - "@cubejs-backend/athena-driver": "1.5.9", - "@cubejs-backend/bigquery-driver": "1.5.9", - "@cubejs-backend/clickhouse-driver": "1.5.9", - "@cubejs-backend/crate-driver": "1.5.9", - "@cubejs-backend/databricks-jdbc-driver": "1.5.9", - "@cubejs-backend/dbt-schema-extension": "1.5.9", - "@cubejs-backend/dremio-driver": "1.5.9", - "@cubejs-backend/druid-driver": "1.5.9", - "@cubejs-backend/duckdb-driver": "1.5.9", - "@cubejs-backend/elasticsearch-driver": "1.5.9", - "@cubejs-backend/firebolt-driver": "1.5.9", - "@cubejs-backend/hive-driver": "1.5.9", - "@cubejs-backend/ksql-driver": "1.5.9", - "@cubejs-backend/materialize-driver": "1.5.9", - "@cubejs-backend/mongobi-driver": "1.5.9", - "@cubejs-backend/mssql-driver": "1.5.9", - "@cubejs-backend/mysql-driver": "1.5.9", - "@cubejs-backend/oracle-driver": "1.5.9", - "@cubejs-backend/pinot-driver": "1.5.9", - "@cubejs-backend/postgres-driver": "1.5.9", - "@cubejs-backend/prestodb-driver": "1.5.9", - "@cubejs-backend/questdb-driver": "1.5.9", - "@cubejs-backend/redshift-driver": "1.5.9", - "@cubejs-backend/server": "1.5.9", - "@cubejs-backend/snowflake-driver": "1.5.9", - "@cubejs-backend/sqlite-driver": "1.5.9", - "@cubejs-backend/trino-driver": "1.5.9", - "@cubejs-backend/vertica-driver": "1.5.9", - "cubejs-cli": "1.5.9", + "@cubejs-backend/athena-driver": "1.5.10", + "@cubejs-backend/bigquery-driver": "1.5.10", + "@cubejs-backend/clickhouse-driver": "1.5.10", + "@cubejs-backend/crate-driver": "1.5.10", + "@cubejs-backend/databricks-jdbc-driver": "1.5.10", + "@cubejs-backend/dbt-schema-extension": "1.5.10", + "@cubejs-backend/dremio-driver": "1.5.10", + "@cubejs-backend/druid-driver": "1.5.10", + "@cubejs-backend/duckdb-driver": "1.5.10", + "@cubejs-backend/elasticsearch-driver": "1.5.10", + "@cubejs-backend/firebolt-driver": "1.5.10", + "@cubejs-backend/hive-driver": "1.5.10", + "@cubejs-backend/ksql-driver": "1.5.10", + "@cubejs-backend/materialize-driver": "1.5.10", + "@cubejs-backend/mongobi-driver": "1.5.10", + "@cubejs-backend/mssql-driver": "1.5.10", + "@cubejs-backend/mysql-driver": "1.5.10", + "@cubejs-backend/oracle-driver": "1.5.10", + "@cubejs-backend/pinot-driver": "1.5.10", + "@cubejs-backend/postgres-driver": "1.5.10", + "@cubejs-backend/prestodb-driver": "1.5.10", + "@cubejs-backend/questdb-driver": "1.5.10", + "@cubejs-backend/redshift-driver": "1.5.10", + "@cubejs-backend/server": "1.5.10", + "@cubejs-backend/snowflake-driver": "1.5.10", + "@cubejs-backend/sqlite-driver": "1.5.10", + "@cubejs-backend/trino-driver": "1.5.10", + "@cubejs-backend/vertica-driver": "1.5.10", + "cubejs-cli": "1.5.10", "typescript": "~5.2.2" }, "resolutions": { diff --git a/packages/cubejs-dremio-driver/CHANGELOG.md b/packages/cubejs-dremio-driver/CHANGELOG.md index 614df54cbac2e..2a18fbcf27867 100644 --- a/packages/cubejs-dremio-driver/CHANGELOG.md +++ b/packages/cubejs-dremio-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube/compare/v1.5.9...v1.5.10) (2025-11-28) + +**Note:** Version bump only for package @cubejs-backend/dremio-driver + ## [1.5.9](https://github.com/cube-js/cube/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package @cubejs-backend/dremio-driver diff --git a/packages/cubejs-dremio-driver/package.json b/packages/cubejs-dremio-driver/package.json index 593600c14b488..8181458b582ee 100644 --- a/packages/cubejs-dremio-driver/package.json +++ b/packages/cubejs-dremio-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/dremio-driver", "description": "Cube.js Dremio driver", "author": "Cube Dev, Inc.", - "version": "1.5.9", + "version": "1.5.10", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -22,15 +22,15 @@ "lint:fix": "eslint driver/*.js" }, "dependencies": { - "@cubejs-backend/base-driver": "1.5.9", - "@cubejs-backend/schema-compiler": "1.5.9", - "@cubejs-backend/shared": "1.5.9", + "@cubejs-backend/base-driver": "1.5.10", + "@cubejs-backend/schema-compiler": "1.5.10", + "@cubejs-backend/shared": "1.5.10", "axios": "^1.8.3", "sqlstring": "^2.3.1" }, "devDependencies": { - "@cubejs-backend/linter": "1.5.9", - "@cubejs-backend/testing-shared": "1.5.9", + "@cubejs-backend/linter": "1.5.10", + "@cubejs-backend/testing-shared": "1.5.10", "jest": "^29" }, "license": "Apache-2.0", diff --git a/packages/cubejs-druid-driver/CHANGELOG.md b/packages/cubejs-druid-driver/CHANGELOG.md index ff5f6778415d1..ce1ac0040a432 100644 --- a/packages/cubejs-druid-driver/CHANGELOG.md +++ b/packages/cubejs-druid-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube/compare/v1.5.9...v1.5.10) (2025-11-28) + +**Note:** Version bump only for package @cubejs-backend/druid-driver + ## [1.5.9](https://github.com/cube-js/cube/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package @cubejs-backend/druid-driver diff --git a/packages/cubejs-druid-driver/package.json b/packages/cubejs-druid-driver/package.json index c4ad4a517abdb..38d24e0fd2ecb 100644 --- a/packages/cubejs-druid-driver/package.json +++ b/packages/cubejs-druid-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/druid-driver", "description": "Cube.js Druid database driver", "author": "Cube Dev, Inc.", - "version": "1.5.9", + "version": "1.5.10", "license": "Apache-2.0", "repository": { "type": "git", @@ -28,13 +28,13 @@ "dist/src/*" ], "dependencies": { - "@cubejs-backend/base-driver": "1.5.9", - "@cubejs-backend/schema-compiler": "1.5.9", - "@cubejs-backend/shared": "1.5.9", + "@cubejs-backend/base-driver": "1.5.10", + "@cubejs-backend/schema-compiler": "1.5.10", + "@cubejs-backend/shared": "1.5.10", "axios": "^1.8.3" }, "devDependencies": { - "@cubejs-backend/linter": "1.5.9", + "@cubejs-backend/linter": "1.5.10", "@types/jest": "^29", "@types/node": "^20", "jest": "^29", diff --git a/packages/cubejs-duckdb-driver/CHANGELOG.md b/packages/cubejs-duckdb-driver/CHANGELOG.md index c3d0a67de3861..9aa8d31b41925 100644 --- a/packages/cubejs-duckdb-driver/CHANGELOG.md +++ b/packages/cubejs-duckdb-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube/compare/v1.5.9...v1.5.10) (2025-11-28) + +**Note:** Version bump only for package @cubejs-backend/duckdb-driver + ## [1.5.9](https://github.com/cube-js/cube/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package @cubejs-backend/duckdb-driver diff --git a/packages/cubejs-duckdb-driver/package.json b/packages/cubejs-duckdb-driver/package.json index 290309fa47df5..43dfee3ec6a7c 100644 --- a/packages/cubejs-duckdb-driver/package.json +++ b/packages/cubejs-duckdb-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/duckdb-driver", "description": "Cube DuckDB database driver", "author": "Cube Dev, Inc.", - "version": "1.5.9", + "version": "1.5.10", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -27,15 +27,15 @@ "lint:fix": "eslint --fix src/* --ext .ts" }, "dependencies": { - "@cubejs-backend/base-driver": "1.5.9", - "@cubejs-backend/schema-compiler": "1.5.9", - "@cubejs-backend/shared": "1.5.9", + "@cubejs-backend/base-driver": "1.5.10", + "@cubejs-backend/schema-compiler": "1.5.10", + "@cubejs-backend/shared": "1.5.10", "duckdb": "^1.4.1" }, "license": "Apache-2.0", "devDependencies": { - "@cubejs-backend/linter": "1.5.9", - "@cubejs-backend/testing-shared": "1.5.9", + "@cubejs-backend/linter": "1.5.10", + "@cubejs-backend/testing-shared": "1.5.10", "@types/jest": "^29", "@types/node": "^20", "jest": "^29", diff --git a/packages/cubejs-elasticsearch-driver/CHANGELOG.md b/packages/cubejs-elasticsearch-driver/CHANGELOG.md index 19df1aa561af6..6bf7b716dba61 100644 --- a/packages/cubejs-elasticsearch-driver/CHANGELOG.md +++ b/packages/cubejs-elasticsearch-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube/compare/v1.5.9...v1.5.10) (2025-11-28) + +**Note:** Version bump only for package @cubejs-backend/elasticsearch-driver + ## [1.5.9](https://github.com/cube-js/cube/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package @cubejs-backend/elasticsearch-driver diff --git a/packages/cubejs-elasticsearch-driver/package.json b/packages/cubejs-elasticsearch-driver/package.json index eb8d28f19a07c..4b47f8731357a 100644 --- a/packages/cubejs-elasticsearch-driver/package.json +++ b/packages/cubejs-elasticsearch-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/elasticsearch-driver", "description": "Cube.js elasticsearch database driver", "author": "Cube Dev, Inc.", - "version": "1.5.9", + "version": "1.5.10", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -23,14 +23,14 @@ "driver" ], "dependencies": { - "@cubejs-backend/base-driver": "1.5.9", - "@cubejs-backend/shared": "1.5.9", + "@cubejs-backend/base-driver": "1.5.10", + "@cubejs-backend/shared": "1.5.10", "@elastic/elasticsearch": "7.12.0", "sqlstring": "^2.3.1" }, "license": "Apache-2.0", "devDependencies": { - "@cubejs-backend/linter": "1.5.9", + "@cubejs-backend/linter": "1.5.10", "@types/jest": "^29", "jest": "^29", "testcontainers": "^10.28.0" diff --git a/packages/cubejs-firebolt-driver/CHANGELOG.md b/packages/cubejs-firebolt-driver/CHANGELOG.md index 83987ea78c1fa..5b24c82c5a4f3 100644 --- a/packages/cubejs-firebolt-driver/CHANGELOG.md +++ b/packages/cubejs-firebolt-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube/compare/v1.5.9...v1.5.10) (2025-11-28) + +**Note:** Version bump only for package @cubejs-backend/firebolt-driver + ## [1.5.9](https://github.com/cube-js/cube/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package @cubejs-backend/firebolt-driver diff --git a/packages/cubejs-firebolt-driver/package.json b/packages/cubejs-firebolt-driver/package.json index 1e93a2127d011..d924ed7e12bf9 100644 --- a/packages/cubejs-firebolt-driver/package.json +++ b/packages/cubejs-firebolt-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/firebolt-driver", "description": "Cube.js Firebolt database driver", "author": "Cube Dev, Inc.", - "version": "1.5.9", + "version": "1.5.10", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -28,15 +28,15 @@ "lint:fix": "eslint --fix src/* --ext .ts" }, "dependencies": { - "@cubejs-backend/base-driver": "1.5.9", - "@cubejs-backend/schema-compiler": "1.5.9", - "@cubejs-backend/shared": "1.5.9", + "@cubejs-backend/base-driver": "1.5.10", + "@cubejs-backend/schema-compiler": "1.5.10", + "@cubejs-backend/shared": "1.5.10", "firebolt-sdk": "1.10.0" }, "license": "Apache-2.0", "devDependencies": { - "@cubejs-backend/linter": "1.5.9", - "@cubejs-backend/testing-shared": "1.5.9", + "@cubejs-backend/linter": "1.5.10", + "@cubejs-backend/testing-shared": "1.5.10", "typescript": "~5.2.2" }, "publishConfig": { diff --git a/packages/cubejs-hive-driver/CHANGELOG.md b/packages/cubejs-hive-driver/CHANGELOG.md index c5973cd02c485..eda526b09f0b4 100644 --- a/packages/cubejs-hive-driver/CHANGELOG.md +++ b/packages/cubejs-hive-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube/compare/v1.5.9...v1.5.10) (2025-11-28) + +**Note:** Version bump only for package @cubejs-backend/hive-driver + ## [1.5.9](https://github.com/cube-js/cube/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package @cubejs-backend/hive-driver diff --git a/packages/cubejs-hive-driver/package.json b/packages/cubejs-hive-driver/package.json index 8e16046163d55..82d9ca99dce2a 100644 --- a/packages/cubejs-hive-driver/package.json +++ b/packages/cubejs-hive-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/hive-driver", "description": "Cube.js Hive database driver", "author": "Cube Dev, Inc.", - "version": "1.5.9", + "version": "1.5.10", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -17,8 +17,8 @@ "lint:fix": "eslint --fix src/* --ext .ts" }, "dependencies": { - "@cubejs-backend/base-driver": "1.5.9", - "@cubejs-backend/shared": "1.5.9", + "@cubejs-backend/base-driver": "1.5.10", + "@cubejs-backend/shared": "1.5.10", "generic-pool": "^3.8.2", "jshs2": "^0.4.4", "sasl-plain": "^0.1.0", @@ -28,7 +28,7 @@ }, "license": "Apache-2.0", "devDependencies": { - "@cubejs-backend/linter": "1.5.9" + "@cubejs-backend/linter": "1.5.10" }, "publishConfig": { "access": "public" diff --git a/packages/cubejs-jdbc-driver/CHANGELOG.md b/packages/cubejs-jdbc-driver/CHANGELOG.md index c58bf180ead28..f49615aef94f5 100644 --- a/packages/cubejs-jdbc-driver/CHANGELOG.md +++ b/packages/cubejs-jdbc-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube/compare/v1.5.9...v1.5.10) (2025-11-28) + +**Note:** Version bump only for package @cubejs-backend/jdbc-driver + ## [1.5.9](https://github.com/cube-js/cube/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package @cubejs-backend/jdbc-driver diff --git a/packages/cubejs-jdbc-driver/package.json b/packages/cubejs-jdbc-driver/package.json index 2b228d3d8cada..cc8e1bee9a02f 100644 --- a/packages/cubejs-jdbc-driver/package.json +++ b/packages/cubejs-jdbc-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/jdbc-driver", "description": "Cube.js JDBC database driver", "author": "Cube Dev, Inc.", - "version": "1.5.9", + "version": "1.5.10", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -25,9 +25,9 @@ "index.js" ], "dependencies": { - "@cubejs-backend/base-driver": "1.5.9", + "@cubejs-backend/base-driver": "1.5.10", "@cubejs-backend/node-java-maven": "^0.1.3", - "@cubejs-backend/shared": "1.5.9", + "@cubejs-backend/shared": "1.5.10", "generic-pool": "^3.9.0", "sqlstring": "^2.3.0" }, @@ -43,7 +43,7 @@ "testEnvironment": "node" }, "devDependencies": { - "@cubejs-backend/linter": "1.5.9", + "@cubejs-backend/linter": "1.5.10", "@types/node": "^20", "@types/sqlstring": "^2.3.0", "typescript": "~5.2.2" diff --git a/packages/cubejs-ksql-driver/CHANGELOG.md b/packages/cubejs-ksql-driver/CHANGELOG.md index 52caffcbb878e..ab04f7d1791b1 100644 --- a/packages/cubejs-ksql-driver/CHANGELOG.md +++ b/packages/cubejs-ksql-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube/compare/v1.5.9...v1.5.10) (2025-11-28) + +**Note:** Version bump only for package @cubejs-backend/ksql-driver + ## [1.5.9](https://github.com/cube-js/cube/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package @cubejs-backend/ksql-driver diff --git a/packages/cubejs-ksql-driver/package.json b/packages/cubejs-ksql-driver/package.json index 68d6e5b5b078f..5f0f9cb644fef 100644 --- a/packages/cubejs-ksql-driver/package.json +++ b/packages/cubejs-ksql-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/ksql-driver", "description": "Cube.js ksql database driver", "author": "Cube Dev, Inc.", - "version": "1.5.9", + "version": "1.5.10", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -25,9 +25,9 @@ "lint:fix": "eslint --fix src/* --ext .ts" }, "dependencies": { - "@cubejs-backend/base-driver": "1.5.9", - "@cubejs-backend/schema-compiler": "1.5.9", - "@cubejs-backend/shared": "1.5.9", + "@cubejs-backend/base-driver": "1.5.10", + "@cubejs-backend/schema-compiler": "1.5.10", + "@cubejs-backend/shared": "1.5.10", "async-mutex": "0.3.2", "axios": "^1.8.3", "kafkajs": "^2.2.3", @@ -41,7 +41,7 @@ "extends": "../cubejs-linter" }, "devDependencies": { - "@cubejs-backend/linter": "1.5.9", + "@cubejs-backend/linter": "1.5.10", "typescript": "~5.2.2" } } diff --git a/packages/cubejs-linter/CHANGELOG.md b/packages/cubejs-linter/CHANGELOG.md index 55e00a8e2aeb7..516722411f1ac 100644 --- a/packages/cubejs-linter/CHANGELOG.md +++ b/packages/cubejs-linter/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube/compare/v1.5.9...v1.5.10) (2025-11-28) + +**Note:** Version bump only for package @cubejs-backend/linter + ## [1.5.9](https://github.com/cube-js/cube/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package @cubejs-backend/linter diff --git a/packages/cubejs-linter/package.json b/packages/cubejs-linter/package.json index 6b6dc514e109a..c4cab921878c1 100644 --- a/packages/cubejs-linter/package.json +++ b/packages/cubejs-linter/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/linter", "description": "Cube.js ESLint (virtual package) for linting code", "author": "Cube Dev, Inc.", - "version": "1.5.9", + "version": "1.5.10", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", diff --git a/packages/cubejs-materialize-driver/CHANGELOG.md b/packages/cubejs-materialize-driver/CHANGELOG.md index 4265fddfabf87..3cbdb391413ef 100644 --- a/packages/cubejs-materialize-driver/CHANGELOG.md +++ b/packages/cubejs-materialize-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube/compare/v1.5.9...v1.5.10) (2025-11-28) + +**Note:** Version bump only for package @cubejs-backend/materialize-driver + ## [1.5.9](https://github.com/cube-js/cube/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package @cubejs-backend/materialize-driver diff --git a/packages/cubejs-materialize-driver/package.json b/packages/cubejs-materialize-driver/package.json index 0156a26a4fa2e..0e7a294fc2a62 100644 --- a/packages/cubejs-materialize-driver/package.json +++ b/packages/cubejs-materialize-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/materialize-driver", "description": "Cube.js Materialize database driver", "author": "Cube Dev, Inc.", - "version": "1.5.9", + "version": "1.5.10", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -27,17 +27,17 @@ "lint:fix": "eslint --fix src/* --ext .ts" }, "dependencies": { - "@cubejs-backend/base-driver": "1.5.9", - "@cubejs-backend/postgres-driver": "1.5.9", - "@cubejs-backend/shared": "1.5.9", + "@cubejs-backend/base-driver": "1.5.10", + "@cubejs-backend/postgres-driver": "1.5.10", + "@cubejs-backend/shared": "1.5.10", "@types/pg": "^8.6.0", "pg": "^8.6.0", "semver": "^7.6.3" }, "license": "Apache-2.0", "devDependencies": { - "@cubejs-backend/linter": "1.5.9", - "@cubejs-backend/testing": "1.5.9", + "@cubejs-backend/linter": "1.5.10", + "@cubejs-backend/testing": "1.5.10", "typescript": "~5.2.2" }, "publishConfig": { diff --git a/packages/cubejs-mongobi-driver/CHANGELOG.md b/packages/cubejs-mongobi-driver/CHANGELOG.md index 5c6725c7cb28b..be2ae5a1ebb66 100644 --- a/packages/cubejs-mongobi-driver/CHANGELOG.md +++ b/packages/cubejs-mongobi-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube/compare/v1.5.9...v1.5.10) (2025-11-28) + +**Note:** Version bump only for package @cubejs-backend/mongobi-driver + ## [1.5.9](https://github.com/cube-js/cube/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package @cubejs-backend/mongobi-driver diff --git a/packages/cubejs-mongobi-driver/package.json b/packages/cubejs-mongobi-driver/package.json index 5a2cf94952cce..8ac4ca8740fc4 100644 --- a/packages/cubejs-mongobi-driver/package.json +++ b/packages/cubejs-mongobi-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/mongobi-driver", "description": "Cube.js MongoBI driver", "author": "krunalsabnis@gmail.com", - "version": "1.5.9", + "version": "1.5.10", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -27,8 +27,8 @@ "integration:mongobi": "jest dist/test" }, "dependencies": { - "@cubejs-backend/base-driver": "1.5.9", - "@cubejs-backend/shared": "1.5.9", + "@cubejs-backend/base-driver": "1.5.10", + "@cubejs-backend/shared": "1.5.10", "@types/node": "^20", "generic-pool": "^3.9.0", "moment": "^2.29.1", @@ -39,7 +39,7 @@ "access": "public" }, "devDependencies": { - "@cubejs-backend/linter": "1.5.9", + "@cubejs-backend/linter": "1.5.10", "testcontainers": "^10.28.0", "typescript": "~5.2.2" }, diff --git a/packages/cubejs-mssql-driver/CHANGELOG.md b/packages/cubejs-mssql-driver/CHANGELOG.md index a732706e43136..38c47cdb7e76a 100644 --- a/packages/cubejs-mssql-driver/CHANGELOG.md +++ b/packages/cubejs-mssql-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube/compare/v1.5.9...v1.5.10) (2025-11-28) + +**Note:** Version bump only for package @cubejs-backend/mssql-driver + ## [1.5.9](https://github.com/cube-js/cube/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package @cubejs-backend/mssql-driver diff --git a/packages/cubejs-mssql-driver/package.json b/packages/cubejs-mssql-driver/package.json index a4484155d9b4c..dbbbe5b927794 100644 --- a/packages/cubejs-mssql-driver/package.json +++ b/packages/cubejs-mssql-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/mssql-driver", "description": "Cube.js MS SQL database driver", "author": "Cube Dev, Inc.", - "version": "1.5.9", + "version": "1.5.10", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -25,8 +25,8 @@ "lint:fix": "eslint --fix src/* --ext .ts,.js" }, "dependencies": { - "@cubejs-backend/base-driver": "1.5.9", - "@cubejs-backend/shared": "1.5.9", + "@cubejs-backend/base-driver": "1.5.10", + "@cubejs-backend/shared": "1.5.10", "mssql": "^11.0.1" }, "devDependencies": { diff --git a/packages/cubejs-mysql-aurora-serverless-driver/CHANGELOG.md b/packages/cubejs-mysql-aurora-serverless-driver/CHANGELOG.md index ff94223a662e3..77e04f48dec96 100644 --- a/packages/cubejs-mysql-aurora-serverless-driver/CHANGELOG.md +++ b/packages/cubejs-mysql-aurora-serverless-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube/compare/v1.5.9...v1.5.10) (2025-11-28) + +**Note:** Version bump only for package @cubejs-backend/mysql-aurora-serverless-driver + ## [1.5.9](https://github.com/cube-js/cube/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package @cubejs-backend/mysql-aurora-serverless-driver diff --git a/packages/cubejs-mysql-aurora-serverless-driver/package.json b/packages/cubejs-mysql-aurora-serverless-driver/package.json index 48b5e1b9a449b..0067370fbaaf3 100644 --- a/packages/cubejs-mysql-aurora-serverless-driver/package.json +++ b/packages/cubejs-mysql-aurora-serverless-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/mysql-aurora-serverless-driver", "description": "Cube.js Aurora Serverless Mysql database driver", "author": "Cube Dev, Inc.", - "version": "1.5.9", + "version": "1.5.10", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -21,14 +21,14 @@ "lint": "eslint driver/*.js test/*.js" }, "dependencies": { - "@cubejs-backend/base-driver": "1.5.9", - "@cubejs-backend/shared": "1.5.9", + "@cubejs-backend/base-driver": "1.5.10", + "@cubejs-backend/shared": "1.5.10", "@types/mysql": "^2.15.15", "aws-sdk": "^2.787.0", "data-api-client": "^1.1.0" }, "devDependencies": { - "@cubejs-backend/linter": "1.5.9", + "@cubejs-backend/linter": "1.5.10", "@types/data-api-client": "^1.2.1", "@types/jest": "^29", "jest": "^29", diff --git a/packages/cubejs-mysql-driver/CHANGELOG.md b/packages/cubejs-mysql-driver/CHANGELOG.md index 894869b152f8e..df4777cd0ce3f 100644 --- a/packages/cubejs-mysql-driver/CHANGELOG.md +++ b/packages/cubejs-mysql-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube/compare/v1.5.9...v1.5.10) (2025-11-28) + +**Note:** Version bump only for package @cubejs-backend/mysql-driver + ## [1.5.9](https://github.com/cube-js/cube/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package @cubejs-backend/mysql-driver diff --git a/packages/cubejs-mysql-driver/package.json b/packages/cubejs-mysql-driver/package.json index 0095bc80a913e..c07e4bd8d7adf 100644 --- a/packages/cubejs-mysql-driver/package.json +++ b/packages/cubejs-mysql-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/mysql-driver", "description": "Cube.js Mysql database driver", "author": "Cube Dev, Inc.", - "version": "1.5.9", + "version": "1.5.10", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -27,14 +27,14 @@ "lint:fix": "eslint --fix src/* test/* --ext .ts,.js" }, "dependencies": { - "@cubejs-backend/base-driver": "1.5.9", - "@cubejs-backend/shared": "1.5.9", + "@cubejs-backend/base-driver": "1.5.10", + "@cubejs-backend/shared": "1.5.10", "generic-pool": "^3.9.0", "mysql": "^2.18.1" }, "devDependencies": { - "@cubejs-backend/linter": "1.5.9", - "@cubejs-backend/testing-shared": "1.5.9", + "@cubejs-backend/linter": "1.5.10", + "@cubejs-backend/testing-shared": "1.5.10", "@types/jest": "^29", "@types/mysql": "^2.15.21", "jest": "^29", diff --git a/packages/cubejs-oracle-driver/CHANGELOG.md b/packages/cubejs-oracle-driver/CHANGELOG.md index 39986647f5cb6..c6867a225f17a 100644 --- a/packages/cubejs-oracle-driver/CHANGELOG.md +++ b/packages/cubejs-oracle-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube/compare/v1.5.9...v1.5.10) (2025-11-28) + +**Note:** Version bump only for package @cubejs-backend/oracle-driver + ## [1.5.9](https://github.com/cube-js/cube/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package @cubejs-backend/oracle-driver diff --git a/packages/cubejs-oracle-driver/package.json b/packages/cubejs-oracle-driver/package.json index 174bef04daa30..94c25d4eed7a3 100644 --- a/packages/cubejs-oracle-driver/package.json +++ b/packages/cubejs-oracle-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/oracle-driver", "description": "Cube.js oracle database driver", "author": "Cube Dev, Inc.", - "version": "1.5.9", + "version": "1.5.10", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -13,7 +13,7 @@ }, "main": "driver/OracleDriver.js", "dependencies": { - "@cubejs-backend/base-driver": "1.5.9", + "@cubejs-backend/base-driver": "1.5.10", "ramda": "^0.27.0" }, "optionalDependencies": { diff --git a/packages/cubejs-pinot-driver/CHANGELOG.md b/packages/cubejs-pinot-driver/CHANGELOG.md index fdc672a8f7a0b..f348a292e8e57 100644 --- a/packages/cubejs-pinot-driver/CHANGELOG.md +++ b/packages/cubejs-pinot-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube/compare/v1.5.9...v1.5.10) (2025-11-28) + +**Note:** Version bump only for package @cubejs-backend/pinot-driver + ## [1.5.9](https://github.com/cube-js/cube/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package @cubejs-backend/pinot-driver diff --git a/packages/cubejs-pinot-driver/package.json b/packages/cubejs-pinot-driver/package.json index b5107e97c9649..d7e2b743d9d35 100644 --- a/packages/cubejs-pinot-driver/package.json +++ b/packages/cubejs-pinot-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/pinot-driver", "description": "Cube.js Pinot database driver", "author": "Julian Ronsse, InTheMemory, Cube Dev, Inc.", - "version": "1.5.9", + "version": "1.5.10", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -27,9 +27,9 @@ "lint:fix": "eslint --fix src/* --ext .ts" }, "dependencies": { - "@cubejs-backend/base-driver": "1.5.9", - "@cubejs-backend/schema-compiler": "1.5.9", - "@cubejs-backend/shared": "1.5.9", + "@cubejs-backend/base-driver": "1.5.10", + "@cubejs-backend/schema-compiler": "1.5.10", + "@cubejs-backend/shared": "1.5.10", "node-fetch": "^2.6.1", "ramda": "^0.27.2", "sqlstring": "^2.3.3" @@ -39,7 +39,7 @@ "access": "public" }, "devDependencies": { - "@cubejs-backend/linter": "1.5.9", + "@cubejs-backend/linter": "1.5.10", "@types/jest": "^29", "jest": "^29", "should": "^13.2.3", diff --git a/packages/cubejs-playground/CHANGELOG.md b/packages/cubejs-playground/CHANGELOG.md index 4a6704f7fb027..3c344234d44db 100644 --- a/packages/cubejs-playground/CHANGELOG.md +++ b/packages/cubejs-playground/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube/compare/v1.5.9...v1.5.10) (2025-11-28) + +**Note:** Version bump only for package @cubejs-client/playground + ## [1.5.9](https://github.com/cube-js/cube/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package @cubejs-client/playground diff --git a/packages/cubejs-playground/package.json b/packages/cubejs-playground/package.json index 4732ea833d92f..0e92d12efb61a 100644 --- a/packages/cubejs-playground/package.json +++ b/packages/cubejs-playground/package.json @@ -1,7 +1,7 @@ { "name": "@cubejs-client/playground", "author": "Cube Dev, Inc.", - "version": "1.5.9", + "version": "1.5.10", "engines": {}, "repository": { "type": "git", @@ -69,8 +69,8 @@ "@ant-design/compatible": "^1.0.1", "@ant-design/icons": "^5.3.5", "@cube-dev/ui-kit": "0.52.3", - "@cubejs-client/core": "1.5.9", - "@cubejs-client/react": "1.5.9", + "@cubejs-client/core": "1.5.10", + "@cubejs-client/react": "1.5.10", "@types/flexsearch": "^0.7.3", "@types/node": "^20", "@types/react": "^18.3.4", diff --git a/packages/cubejs-postgres-driver/CHANGELOG.md b/packages/cubejs-postgres-driver/CHANGELOG.md index 9b25b6bcfc4c1..375bb0ce4dce7 100644 --- a/packages/cubejs-postgres-driver/CHANGELOG.md +++ b/packages/cubejs-postgres-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube/compare/v1.5.9...v1.5.10) (2025-11-28) + +**Note:** Version bump only for package @cubejs-backend/postgres-driver + ## [1.5.9](https://github.com/cube-js/cube/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package @cubejs-backend/postgres-driver diff --git a/packages/cubejs-postgres-driver/package.json b/packages/cubejs-postgres-driver/package.json index d51ee131693b2..d75e2183bbcf9 100644 --- a/packages/cubejs-postgres-driver/package.json +++ b/packages/cubejs-postgres-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/postgres-driver", "description": "Cube.js Postgres database driver", "author": "Cube Dev, Inc.", - "version": "1.5.9", + "version": "1.5.10", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -27,8 +27,8 @@ "lint:fix": "eslint --fix src/* --ext .ts" }, "dependencies": { - "@cubejs-backend/base-driver": "1.5.9", - "@cubejs-backend/shared": "1.5.9", + "@cubejs-backend/base-driver": "1.5.10", + "@cubejs-backend/shared": "1.5.10", "@types/pg": "^8.6.0", "@types/pg-query-stream": "^1.0.3", "moment": "^2.24.0", @@ -37,8 +37,8 @@ }, "license": "Apache-2.0", "devDependencies": { - "@cubejs-backend/linter": "1.5.9", - "@cubejs-backend/testing-shared": "1.5.9", + "@cubejs-backend/linter": "1.5.10", + "@cubejs-backend/testing-shared": "1.5.10", "testcontainers": "^10.28.0", "typescript": "~5.2.2" }, diff --git a/packages/cubejs-prestodb-driver/CHANGELOG.md b/packages/cubejs-prestodb-driver/CHANGELOG.md index 13b4ca5ca87c2..fef38b807b5a2 100644 --- a/packages/cubejs-prestodb-driver/CHANGELOG.md +++ b/packages/cubejs-prestodb-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube/compare/v1.5.9...v1.5.10) (2025-11-28) + +**Note:** Version bump only for package @cubejs-backend/prestodb-driver + ## [1.5.9](https://github.com/cube-js/cube/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package @cubejs-backend/prestodb-driver diff --git a/packages/cubejs-prestodb-driver/package.json b/packages/cubejs-prestodb-driver/package.json index 85fdce9181653..87fed6b1d4037 100644 --- a/packages/cubejs-prestodb-driver/package.json +++ b/packages/cubejs-prestodb-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/prestodb-driver", "description": "Cube.js Presto database driver", "author": "Cube Dev, Inc.", - "version": "1.5.9", + "version": "1.5.10", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -27,8 +27,8 @@ "lint:fix": "eslint --fix src/* --ext .ts" }, "dependencies": { - "@cubejs-backend/base-driver": "1.5.9", - "@cubejs-backend/shared": "1.5.9", + "@cubejs-backend/base-driver": "1.5.10", + "@cubejs-backend/shared": "1.5.10", "presto-client": "^1.1.0", "ramda": "^0.27.0", "sqlstring": "^2.3.1" @@ -38,7 +38,7 @@ "access": "public" }, "devDependencies": { - "@cubejs-backend/linter": "1.5.9", + "@cubejs-backend/linter": "1.5.10", "@types/jest": "^29", "jest": "^29", "should": "^13.2.3", diff --git a/packages/cubejs-query-orchestrator/CHANGELOG.md b/packages/cubejs-query-orchestrator/CHANGELOG.md index d31bc1437d96d..20dd1696ce90e 100644 --- a/packages/cubejs-query-orchestrator/CHANGELOG.md +++ b/packages/cubejs-query-orchestrator/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube/compare/v1.5.9...v1.5.10) (2025-11-28) + +### Bug Fixes + +- **query-orchestrator:** Table used cache should not be used for unions ([#10192](https://github.com/cube-js/cube/issues/10192)) ([53d79bb](https://github.com/cube-js/cube/commit/53d79bbfd16aeefadb3bd8e0a73a5c0b5e920da4)) + ## [1.5.9](https://github.com/cube-js/cube/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package @cubejs-backend/query-orchestrator diff --git a/packages/cubejs-query-orchestrator/package.json b/packages/cubejs-query-orchestrator/package.json index ad78c44056f2f..ff501fb4cabc1 100644 --- a/packages/cubejs-query-orchestrator/package.json +++ b/packages/cubejs-query-orchestrator/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/query-orchestrator", "description": "Cube.js Query Orchestrator and Cache", "author": "Cube Dev, Inc.", - "version": "1.5.9", + "version": "1.5.10", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -29,15 +29,15 @@ "dist/src/*" ], "dependencies": { - "@cubejs-backend/base-driver": "1.5.9", - "@cubejs-backend/cubestore-driver": "1.5.9", - "@cubejs-backend/shared": "1.5.9", + "@cubejs-backend/base-driver": "1.5.10", + "@cubejs-backend/cubestore-driver": "1.5.10", + "@cubejs-backend/shared": "1.5.10", "csv-write-stream": "^2.0.0", "lru-cache": "^11.1.0", "ramda": "^0.27.2" }, "devDependencies": { - "@cubejs-backend/linter": "1.5.9", + "@cubejs-backend/linter": "1.5.10", "@types/jest": "^29", "@types/node": "^20", "@types/ramda": "^0.27.32", diff --git a/packages/cubejs-questdb-driver/CHANGELOG.md b/packages/cubejs-questdb-driver/CHANGELOG.md index 21d6cdded8bb5..84b7607d6dba3 100644 --- a/packages/cubejs-questdb-driver/CHANGELOG.md +++ b/packages/cubejs-questdb-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube/compare/v1.5.9...v1.5.10) (2025-11-28) + +**Note:** Version bump only for package @cubejs-backend/questdb-driver + ## [1.5.9](https://github.com/cube-js/cube/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package @cubejs-backend/questdb-driver diff --git a/packages/cubejs-questdb-driver/package.json b/packages/cubejs-questdb-driver/package.json index ae6d95660433a..156de665d0f33 100644 --- a/packages/cubejs-questdb-driver/package.json +++ b/packages/cubejs-questdb-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/questdb-driver", "description": "Cube.js QuestDB database driver", "author": "Cube Dev, Inc.", - "version": "1.5.9", + "version": "1.5.10", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -27,9 +27,9 @@ "lint:fix": "eslint --fix src/* --ext .ts" }, "dependencies": { - "@cubejs-backend/base-driver": "1.5.9", - "@cubejs-backend/schema-compiler": "1.5.9", - "@cubejs-backend/shared": "1.5.9", + "@cubejs-backend/base-driver": "1.5.10", + "@cubejs-backend/schema-compiler": "1.5.10", + "@cubejs-backend/shared": "1.5.10", "@types/pg": "^8.6.0", "moment": "^2.24.0", "pg": "^8.7.0", @@ -37,8 +37,8 @@ }, "license": "Apache-2.0", "devDependencies": { - "@cubejs-backend/linter": "1.5.9", - "@cubejs-backend/testing-shared": "1.5.9", + "@cubejs-backend/linter": "1.5.10", + "@cubejs-backend/testing-shared": "1.5.10", "testcontainers": "^10.28.0", "typescript": "~5.2.2" }, diff --git a/packages/cubejs-redshift-driver/CHANGELOG.md b/packages/cubejs-redshift-driver/CHANGELOG.md index 389ab59edb194..6ea6fd18a2970 100644 --- a/packages/cubejs-redshift-driver/CHANGELOG.md +++ b/packages/cubejs-redshift-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube/compare/v1.5.9...v1.5.10) (2025-11-28) + +**Note:** Version bump only for package @cubejs-backend/redshift-driver + ## [1.5.9](https://github.com/cube-js/cube/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package @cubejs-backend/redshift-driver diff --git a/packages/cubejs-redshift-driver/package.json b/packages/cubejs-redshift-driver/package.json index 11284bc5cc4d8..218b2f79d1dd6 100644 --- a/packages/cubejs-redshift-driver/package.json +++ b/packages/cubejs-redshift-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/redshift-driver", "description": "Cube.js Redshift database driver", "author": "Cube Dev, Inc.", - "version": "1.5.9", + "version": "1.5.10", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -25,13 +25,13 @@ "lint:fix": "eslint --fix src/* --ext .ts" }, "dependencies": { - "@cubejs-backend/base-driver": "1.5.9", - "@cubejs-backend/postgres-driver": "1.5.9", - "@cubejs-backend/shared": "1.5.9" + "@cubejs-backend/base-driver": "1.5.10", + "@cubejs-backend/postgres-driver": "1.5.10", + "@cubejs-backend/shared": "1.5.10" }, "license": "Apache-2.0", "devDependencies": { - "@cubejs-backend/linter": "1.5.9", + "@cubejs-backend/linter": "1.5.10", "typescript": "~5.2.2" }, "publishConfig": { diff --git a/packages/cubejs-schema-compiler/CHANGELOG.md b/packages/cubejs-schema-compiler/CHANGELOG.md index 1cc86d98a801f..30d775ac14ff8 100644 --- a/packages/cubejs-schema-compiler/CHANGELOG.md +++ b/packages/cubejs-schema-compiler/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube/compare/v1.5.9...v1.5.10) (2025-11-28) + +**Note:** Version bump only for package @cubejs-backend/schema-compiler + ## [1.5.9](https://github.com/cube-js/cube/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package @cubejs-backend/schema-compiler diff --git a/packages/cubejs-schema-compiler/package.json b/packages/cubejs-schema-compiler/package.json index 2818bdd6f412d..a8d1c2fd1340f 100644 --- a/packages/cubejs-schema-compiler/package.json +++ b/packages/cubejs-schema-compiler/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/schema-compiler", "description": "Cube schema compiler", "author": "Cube Dev, Inc.", - "version": "1.5.9", + "version": "1.5.10", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -40,8 +40,8 @@ "@babel/standalone": "^7.24", "@babel/traverse": "^7.24", "@babel/types": "^7.24", - "@cubejs-backend/native": "1.5.9", - "@cubejs-backend/shared": "1.5.9", + "@cubejs-backend/native": "1.5.10", + "@cubejs-backend/shared": "1.5.10", "antlr4": "^4.13.2", "camelcase": "^6.2.0", "cron-parser": "^4.9.0", @@ -60,8 +60,8 @@ }, "devDependencies": { "@clickhouse/client": "^1.12.0", - "@cubejs-backend/linter": "1.5.9", - "@cubejs-backend/query-orchestrator": "1.5.9", + "@cubejs-backend/linter": "1.5.10", + "@cubejs-backend/query-orchestrator": "1.5.10", "@types/babel__code-frame": "^7.0.6", "@types/babel__generator": "^7.6.8", "@types/babel__traverse": "^7.20.5", diff --git a/packages/cubejs-server-core/CHANGELOG.md b/packages/cubejs-server-core/CHANGELOG.md index e2f63c5e2094e..569a69e557354 100644 --- a/packages/cubejs-server-core/CHANGELOG.md +++ b/packages/cubejs-server-core/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube/compare/v1.5.9...v1.5.10) (2025-11-28) + +**Note:** Version bump only for package @cubejs-backend/server-core + ## [1.5.9](https://github.com/cube-js/cube/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package @cubejs-backend/server-core diff --git a/packages/cubejs-server-core/package.json b/packages/cubejs-server-core/package.json index fc20acf976025..7358659357c15 100644 --- a/packages/cubejs-server-core/package.json +++ b/packages/cubejs-server-core/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/server-core", "description": "Cube.js base component to wire all backend components together", "author": "Cube Dev, Inc.", - "version": "1.5.9", + "version": "1.5.10", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -29,16 +29,16 @@ "unit": "jest --runInBand --forceExit --coverage dist/test" }, "dependencies": { - "@cubejs-backend/api-gateway": "1.5.9", - "@cubejs-backend/base-driver": "1.5.9", - "@cubejs-backend/cloud": "1.5.9", - "@cubejs-backend/cubestore-driver": "1.5.9", + "@cubejs-backend/api-gateway": "1.5.10", + "@cubejs-backend/base-driver": "1.5.10", + "@cubejs-backend/cloud": "1.5.10", + "@cubejs-backend/cubestore-driver": "1.5.10", "@cubejs-backend/dotenv": "^9.0.2", - "@cubejs-backend/native": "1.5.9", - "@cubejs-backend/query-orchestrator": "1.5.9", - "@cubejs-backend/schema-compiler": "1.5.9", - "@cubejs-backend/shared": "1.5.9", - "@cubejs-backend/templates": "1.5.9", + "@cubejs-backend/native": "1.5.10", + "@cubejs-backend/query-orchestrator": "1.5.10", + "@cubejs-backend/schema-compiler": "1.5.10", + "@cubejs-backend/shared": "1.5.10", + "@cubejs-backend/templates": "1.5.10", "codesandbox-import-utils": "^2.1.12", "cross-spawn": "^7.0.1", "fs-extra": "^8.1.0", @@ -62,8 +62,8 @@ "ws": "^7.5.3" }, "devDependencies": { - "@cubejs-backend/linter": "1.5.9", - "@cubejs-client/playground": "1.5.9", + "@cubejs-backend/linter": "1.5.10", + "@cubejs-client/playground": "1.5.10", "@types/cross-spawn": "^6.0.2", "@types/express": "^4.17.21", "@types/fs-extra": "^9.0.8", diff --git a/packages/cubejs-server/CHANGELOG.md b/packages/cubejs-server/CHANGELOG.md index 0c2664fc9e4e0..9edf78dbe123d 100644 --- a/packages/cubejs-server/CHANGELOG.md +++ b/packages/cubejs-server/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube/compare/v1.5.9...v1.5.10) (2025-11-28) + +**Note:** Version bump only for package @cubejs-backend/server + ## [1.5.9](https://github.com/cube-js/cube/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package @cubejs-backend/server diff --git a/packages/cubejs-server/package.json b/packages/cubejs-server/package.json index 1341ef47b8287..ac73e3e053fe6 100644 --- a/packages/cubejs-server/package.json +++ b/packages/cubejs-server/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/server", "description": "Cube.js all-in-one server", "author": "Cube Dev, Inc.", - "version": "1.5.9", + "version": "1.5.10", "types": "index.d.ts", "repository": { "type": "git", @@ -40,11 +40,11 @@ "jest:shapshot": "jest --updateSnapshot test" }, "dependencies": { - "@cubejs-backend/cubestore-driver": "1.5.9", + "@cubejs-backend/cubestore-driver": "1.5.10", "@cubejs-backend/dotenv": "^9.0.2", - "@cubejs-backend/native": "1.5.9", - "@cubejs-backend/server-core": "1.5.9", - "@cubejs-backend/shared": "1.5.9", + "@cubejs-backend/native": "1.5.10", + "@cubejs-backend/server-core": "1.5.10", + "@cubejs-backend/shared": "1.5.10", "@oclif/color": "^1.0.0", "@oclif/command": "^1.8.13", "@oclif/config": "^1.18.2", @@ -61,8 +61,8 @@ "ws": "^7.1.2" }, "devDependencies": { - "@cubejs-backend/linter": "1.5.9", - "@cubejs-backend/query-orchestrator": "1.5.9", + "@cubejs-backend/linter": "1.5.10", + "@cubejs-backend/query-orchestrator": "1.5.10", "@oclif/dev-cli": "^1.23.1", "@types/body-parser": "^1.19.0", "@types/cors": "^2.8.8", diff --git a/packages/cubejs-snowflake-driver/CHANGELOG.md b/packages/cubejs-snowflake-driver/CHANGELOG.md index f891702203437..2694778b8fd7e 100644 --- a/packages/cubejs-snowflake-driver/CHANGELOG.md +++ b/packages/cubejs-snowflake-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube/compare/v1.5.9...v1.5.10) (2025-11-28) + +**Note:** Version bump only for package @cubejs-backend/snowflake-driver + ## [1.5.9](https://github.com/cube-js/cube/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package @cubejs-backend/snowflake-driver diff --git a/packages/cubejs-snowflake-driver/package.json b/packages/cubejs-snowflake-driver/package.json index 13d2eccd58f21..522918fc6c9e7 100644 --- a/packages/cubejs-snowflake-driver/package.json +++ b/packages/cubejs-snowflake-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/snowflake-driver", "description": "Cube.js Snowflake database driver", "author": "Cube Dev, Inc.", - "version": "1.5.9", + "version": "1.5.10", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -26,8 +26,8 @@ }, "dependencies": { "@aws-sdk/client-s3": "^3.726.0", - "@cubejs-backend/base-driver": "1.5.9", - "@cubejs-backend/shared": "1.5.9", + "@cubejs-backend/base-driver": "1.5.10", + "@cubejs-backend/shared": "1.5.10", "date-fns-timezone": "^0.1.4", "snowflake-sdk": "^2.2.0" }, @@ -39,7 +39,7 @@ "extends": "../cubejs-linter" }, "devDependencies": { - "@cubejs-backend/linter": "1.5.9", + "@cubejs-backend/linter": "1.5.10", "typescript": "~5.2.2" } } diff --git a/packages/cubejs-sqlite-driver/CHANGELOG.md b/packages/cubejs-sqlite-driver/CHANGELOG.md index 0568612ed1e80..77986d1f31fea 100644 --- a/packages/cubejs-sqlite-driver/CHANGELOG.md +++ b/packages/cubejs-sqlite-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube/compare/v1.5.9...v1.5.10) (2025-11-28) + +**Note:** Version bump only for package @cubejs-backend/sqlite-driver + ## [1.5.9](https://github.com/cube-js/cube/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package @cubejs-backend/sqlite-driver diff --git a/packages/cubejs-sqlite-driver/package.json b/packages/cubejs-sqlite-driver/package.json index 04eb75fdc47c0..3482303041c6f 100644 --- a/packages/cubejs-sqlite-driver/package.json +++ b/packages/cubejs-sqlite-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/sqlite-driver", "description": "Cube.js Sqlite database driver", "author": "Cube Dev, Inc.", - "version": "1.5.9", + "version": "1.5.10", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -18,13 +18,13 @@ "unit": "jest" }, "dependencies": { - "@cubejs-backend/base-driver": "1.5.9", - "@cubejs-backend/shared": "1.5.9", + "@cubejs-backend/base-driver": "1.5.10", + "@cubejs-backend/shared": "1.5.10", "sqlite3": "^5.1.7" }, "license": "Apache-2.0", "devDependencies": { - "@cubejs-backend/linter": "1.5.9", + "@cubejs-backend/linter": "1.5.10", "jest": "^29" }, "publishConfig": { diff --git a/packages/cubejs-templates/CHANGELOG.md b/packages/cubejs-templates/CHANGELOG.md index c18e44fd062ca..f488c695b081f 100644 --- a/packages/cubejs-templates/CHANGELOG.md +++ b/packages/cubejs-templates/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube/compare/v1.5.9...v1.5.10) (2025-11-28) + +**Note:** Version bump only for package @cubejs-backend/templates + ## [1.5.9](https://github.com/cube-js/cube/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package @cubejs-backend/templates diff --git a/packages/cubejs-templates/package.json b/packages/cubejs-templates/package.json index c4c352fbf7631..c9c9f9a34a472 100644 --- a/packages/cubejs-templates/package.json +++ b/packages/cubejs-templates/package.json @@ -1,6 +1,6 @@ { "name": "@cubejs-backend/templates", - "version": "1.5.9", + "version": "1.5.10", "description": "Cube.js Templates helpers", "author": "Cube Dev, Inc.", "license": "Apache-2.0", @@ -26,7 +26,7 @@ "extends": "../cubejs-linter" }, "dependencies": { - "@cubejs-backend/shared": "1.5.9", + "@cubejs-backend/shared": "1.5.10", "cross-spawn": "^7.0.3", "decompress": "^4.2.1", "decompress-targz": "^4.1.1", @@ -36,7 +36,7 @@ "source-map-support": "^0.5.19" }, "devDependencies": { - "@cubejs-backend/linter": "1.5.9", + "@cubejs-backend/linter": "1.5.10", "typescript": "~5.2.2" } } diff --git a/packages/cubejs-testing-drivers/CHANGELOG.md b/packages/cubejs-testing-drivers/CHANGELOG.md index 28667d0148524..042d8d9316d63 100644 --- a/packages/cubejs-testing-drivers/CHANGELOG.md +++ b/packages/cubejs-testing-drivers/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube/compare/v1.5.9...v1.5.10) (2025-11-28) + +**Note:** Version bump only for package @cubejs-backend/testing-drivers + ## [1.5.9](https://github.com/cube-js/cube/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package @cubejs-backend/testing-drivers diff --git a/packages/cubejs-testing-drivers/package.json b/packages/cubejs-testing-drivers/package.json index 87765a6c2633a..1afe7bd4235bd 100644 --- a/packages/cubejs-testing-drivers/package.json +++ b/packages/cubejs-testing-drivers/package.json @@ -1,6 +1,6 @@ { "name": "@cubejs-backend/testing-drivers", - "version": "1.5.9", + "version": "1.5.10", "description": "Cube.js drivers test suite", "author": "Cube Dev, Inc.", "license": "MIT", @@ -67,24 +67,24 @@ "dist/src" ], "dependencies": { - "@cubejs-backend/athena-driver": "1.5.9", - "@cubejs-backend/base-driver": "1.5.9", - "@cubejs-backend/bigquery-driver": "1.5.9", - "@cubejs-backend/clickhouse-driver": "1.5.9", - "@cubejs-backend/cubestore-driver": "1.5.9", - "@cubejs-backend/databricks-jdbc-driver": "1.5.9", + "@cubejs-backend/athena-driver": "1.5.10", + "@cubejs-backend/base-driver": "1.5.10", + "@cubejs-backend/bigquery-driver": "1.5.10", + "@cubejs-backend/clickhouse-driver": "1.5.10", + "@cubejs-backend/cubestore-driver": "1.5.10", + "@cubejs-backend/databricks-jdbc-driver": "1.5.10", "@cubejs-backend/dotenv": "^9.0.2", - "@cubejs-backend/linter": "1.5.9", - "@cubejs-backend/mssql-driver": "1.5.9", - "@cubejs-backend/mysql-driver": "1.5.9", - "@cubejs-backend/postgres-driver": "1.5.9", - "@cubejs-backend/query-orchestrator": "1.5.9", - "@cubejs-backend/server-core": "1.5.9", - "@cubejs-backend/shared": "1.5.9", - "@cubejs-backend/snowflake-driver": "1.5.9", - "@cubejs-backend/testing-shared": "1.5.9", - "@cubejs-client/core": "1.5.9", - "@cubejs-client/ws-transport": "1.5.9", + "@cubejs-backend/linter": "1.5.10", + "@cubejs-backend/mssql-driver": "1.5.10", + "@cubejs-backend/mysql-driver": "1.5.10", + "@cubejs-backend/postgres-driver": "1.5.10", + "@cubejs-backend/query-orchestrator": "1.5.10", + "@cubejs-backend/server-core": "1.5.10", + "@cubejs-backend/shared": "1.5.10", + "@cubejs-backend/snowflake-driver": "1.5.10", + "@cubejs-backend/testing-shared": "1.5.10", + "@cubejs-client/core": "1.5.10", + "@cubejs-client/ws-transport": "1.5.10", "@jest/globals": "^29", "@types/jest": "^29", "@types/node": "^20", diff --git a/packages/cubejs-testing-shared/CHANGELOG.md b/packages/cubejs-testing-shared/CHANGELOG.md index 045641a12a93c..6785b7b44b516 100644 --- a/packages/cubejs-testing-shared/CHANGELOG.md +++ b/packages/cubejs-testing-shared/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube/compare/v1.5.9...v1.5.10) (2025-11-28) + +**Note:** Version bump only for package @cubejs-backend/testing-shared + ## [1.5.9](https://github.com/cube-js/cube/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package @cubejs-backend/testing-shared diff --git a/packages/cubejs-testing-shared/package.json b/packages/cubejs-testing-shared/package.json index 57fca7faad815..bd36d4954d188 100644 --- a/packages/cubejs-testing-shared/package.json +++ b/packages/cubejs-testing-shared/package.json @@ -1,6 +1,6 @@ { "name": "@cubejs-backend/testing-shared", - "version": "1.5.9", + "version": "1.5.10", "description": "Cube.js Testing Helpers", "author": "Cube Dev, Inc.", "license": "Apache-2.0", @@ -21,16 +21,16 @@ ], "dependencies": { "@cubejs-backend/dotenv": "^9.0.2", - "@cubejs-backend/query-orchestrator": "1.5.9", - "@cubejs-backend/schema-compiler": "1.5.9", - "@cubejs-backend/shared": "1.5.9", + "@cubejs-backend/query-orchestrator": "1.5.10", + "@cubejs-backend/schema-compiler": "1.5.10", + "@cubejs-backend/shared": "1.5.10", "@testcontainers/kafka": "~10.28.0", "dedent": "^0.7.0", "node-fetch": "^2.6.7", "testcontainers": "^10.28.0" }, "devDependencies": { - "@cubejs-backend/linter": "1.5.9", + "@cubejs-backend/linter": "1.5.10", "@jest/globals": "^29", "@types/dedent": "^0.7.0", "@types/jest": "^29", diff --git a/packages/cubejs-testing/CHANGELOG.md b/packages/cubejs-testing/CHANGELOG.md index d9b68d7d7c9e5..8c697513fb44a 100644 --- a/packages/cubejs-testing/CHANGELOG.md +++ b/packages/cubejs-testing/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube/compare/v1.5.9...v1.5.10) (2025-11-28) + +**Note:** Version bump only for package @cubejs-backend/testing + ## [1.5.9](https://github.com/cube-js/cube/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package @cubejs-backend/testing diff --git a/packages/cubejs-testing/package.json b/packages/cubejs-testing/package.json index 2b9c617714234..e0e3b4aa3b736 100644 --- a/packages/cubejs-testing/package.json +++ b/packages/cubejs-testing/package.json @@ -1,6 +1,6 @@ { "name": "@cubejs-backend/testing", - "version": "1.5.9", + "version": "1.5.10", "description": "Cube.js e2e tests", "author": "Cube Dev, Inc.", "license": "Apache-2.0", @@ -94,15 +94,15 @@ "birdbox-fixtures" ], "dependencies": { - "@cubejs-backend/cubestore-driver": "1.5.9", + "@cubejs-backend/cubestore-driver": "1.5.10", "@cubejs-backend/dotenv": "^9.0.2", - "@cubejs-backend/ksql-driver": "1.5.9", - "@cubejs-backend/postgres-driver": "1.5.9", - "@cubejs-backend/query-orchestrator": "1.5.9", - "@cubejs-backend/schema-compiler": "1.5.9", - "@cubejs-backend/shared": "1.5.9", - "@cubejs-backend/testing-shared": "1.5.9", - "@cubejs-client/ws-transport": "1.5.9", + "@cubejs-backend/ksql-driver": "1.5.10", + "@cubejs-backend/postgres-driver": "1.5.10", + "@cubejs-backend/query-orchestrator": "1.5.10", + "@cubejs-backend/schema-compiler": "1.5.10", + "@cubejs-backend/shared": "1.5.10", + "@cubejs-backend/testing-shared": "1.5.10", + "@cubejs-client/ws-transport": "1.5.10", "dedent": "^0.7.0", "fs-extra": "^8.1.0", "http-proxy": "^1.18.1", @@ -113,8 +113,8 @@ }, "devDependencies": { "@4tw/cypress-drag-drop": "^1.6.0", - "@cubejs-backend/linter": "1.5.9", - "@cubejs-client/core": "1.5.9", + "@cubejs-backend/linter": "1.5.10", + "@cubejs-client/core": "1.5.10", "@jest/globals": "^29", "@types/dedent": "^0.7.0", "@types/http-proxy": "^1.17.5", diff --git a/packages/cubejs-trino-driver/CHANGELOG.md b/packages/cubejs-trino-driver/CHANGELOG.md index 89f3a3032751a..3b9fb98bc15e5 100644 --- a/packages/cubejs-trino-driver/CHANGELOG.md +++ b/packages/cubejs-trino-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube/compare/v1.5.9...v1.5.10) (2025-11-28) + +**Note:** Version bump only for package @cubejs-backend/trino-driver + ## [1.5.9](https://github.com/cube-js/cube/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package @cubejs-backend/trino-driver diff --git a/packages/cubejs-trino-driver/package.json b/packages/cubejs-trino-driver/package.json index d42f3836d8691..0cabfa1dacc26 100644 --- a/packages/cubejs-trino-driver/package.json +++ b/packages/cubejs-trino-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/trino-driver", "description": "Cube.js Trino database driver", "author": "Cube Dev, Inc.", - "version": "1.5.9", + "version": "1.5.10", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -27,10 +27,10 @@ "lint:fix": "eslint --fix src/* --ext .ts" }, "dependencies": { - "@cubejs-backend/base-driver": "1.5.9", - "@cubejs-backend/prestodb-driver": "1.5.9", - "@cubejs-backend/schema-compiler": "1.5.9", - "@cubejs-backend/shared": "1.5.9", + "@cubejs-backend/base-driver": "1.5.10", + "@cubejs-backend/prestodb-driver": "1.5.10", + "@cubejs-backend/schema-compiler": "1.5.10", + "@cubejs-backend/shared": "1.5.10", "node-fetch": "^2.6.1", "presto-client": "^1.1.0", "sqlstring": "^2.3.1" @@ -40,7 +40,7 @@ "access": "public" }, "devDependencies": { - "@cubejs-backend/linter": "1.5.9", + "@cubejs-backend/linter": "1.5.10", "@types/jest": "^29", "jest": "^29", "testcontainers": "^10.28.0", diff --git a/packages/cubejs-vertica-driver/CHANGELOG.md b/packages/cubejs-vertica-driver/CHANGELOG.md index 008de8e601b26..53a6d8e41abcc 100644 --- a/packages/cubejs-vertica-driver/CHANGELOG.md +++ b/packages/cubejs-vertica-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube.js/compare/v1.5.9...v1.5.10) (2025-11-28) + +**Note:** Version bump only for package @cubejs-backend/vertica-driver + ## [1.5.9](https://github.com/cube-js/cube.js/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package @cubejs-backend/vertica-driver diff --git a/packages/cubejs-vertica-driver/package.json b/packages/cubejs-vertica-driver/package.json index 7aa8880281da6..d719a87ee0f60 100644 --- a/packages/cubejs-vertica-driver/package.json +++ b/packages/cubejs-vertica-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/vertica-driver", "description": "Cube.js Vertica database driver", "author": "Eduard Karacharov, Tim Brown, Cube Dev, Inc.", - "version": "1.5.9", + "version": "1.5.10", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.js.git", @@ -19,16 +19,16 @@ "lint:fix": "eslint --fix **/*.js" }, "dependencies": { - "@cubejs-backend/base-driver": "1.5.9", - "@cubejs-backend/query-orchestrator": "1.5.9", - "@cubejs-backend/schema-compiler": "1.5.9", - "@cubejs-backend/shared": "1.5.9", + "@cubejs-backend/base-driver": "1.5.10", + "@cubejs-backend/query-orchestrator": "1.5.10", + "@cubejs-backend/schema-compiler": "1.5.10", + "@cubejs-backend/shared": "1.5.10", "vertica-nodejs": "^1.0.3" }, "license": "Apache-2.0", "devDependencies": { - "@cubejs-backend/linter": "1.5.9", - "@cubejs-backend/testing-shared": "1.5.9", + "@cubejs-backend/linter": "1.5.10", + "@cubejs-backend/testing-shared": "1.5.10", "@types/jest": "^29", "jest": "^29", "testcontainers": "^10.28.0" diff --git a/rust/cubesql/CHANGELOG.md b/rust/cubesql/CHANGELOG.md index 640372d1be784..75607e4ec8ac2 100644 --- a/rust/cubesql/CHANGELOG.md +++ b/rust/cubesql/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube/compare/v1.5.9...v1.5.10) (2025-11-28) + +### Features + +- **api-gateway:** Support query timezone in `/cubesql` API endpoint ([#10189](https://github.com/cube-js/cube/issues/10189)) ([499ddc6](https://github.com/cube-js/cube/commit/499ddc62fc1618b78f16a17943e1c72a670f6b48)) + ## [1.5.9](https://github.com/cube-js/cube/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package @cubejs-backend/cubesql diff --git a/rust/cubesql/package.json b/rust/cubesql/package.json index c6c980db0faf9..7b79e3a1ca724 100644 --- a/rust/cubesql/package.json +++ b/rust/cubesql/package.json @@ -1,6 +1,6 @@ { "name": "@cubejs-backend/cubesql", - "version": "1.5.9", + "version": "1.5.10", "description": "SQL API for Cube as proxy over MySQL protocol.", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" diff --git a/rust/cubestore/CHANGELOG.md b/rust/cubestore/CHANGELOG.md index 0244c7a13000e..beb5441ddfa43 100644 --- a/rust/cubestore/CHANGELOG.md +++ b/rust/cubestore/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.10](https://github.com/cube-js/cube/compare/v1.5.9...v1.5.10) (2025-11-28) + +**Note:** Version bump only for package @cubejs-backend/cubestore + ## [1.5.9](https://github.com/cube-js/cube/compare/v1.5.8...v1.5.9) (2025-11-26) **Note:** Version bump only for package @cubejs-backend/cubestore diff --git a/rust/cubestore/package.json b/rust/cubestore/package.json index e3d59ae1c8586..69a43eb6a493e 100644 --- a/rust/cubestore/package.json +++ b/rust/cubestore/package.json @@ -1,6 +1,6 @@ { "name": "@cubejs-backend/cubestore", - "version": "1.5.9", + "version": "1.5.10", "description": "Cube.js pre-aggregation storage layer.", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", @@ -27,7 +27,7 @@ "author": "Cube Dev, Inc.", "license": "Apache-2.0", "devDependencies": { - "@cubejs-backend/linter": "1.5.9", + "@cubejs-backend/linter": "1.5.10", "@types/jest": "^27", "@types/node": "^18", "jest": "^27", @@ -37,7 +37,7 @@ "access": "public" }, "dependencies": { - "@cubejs-backend/shared": "1.5.9", + "@cubejs-backend/shared": "1.5.10", "@octokit/core": "^3.2.5", "source-map-support": "^0.5.19" }, From ebe08069a9c44c86fc903f3aec8c84d0cee7dd5e Mon Sep 17 00:00:00 2001 From: waralexrom <108349432+waralexrom@users.noreply.github.com> Date: Fri, 28 Nov 2025 11:34:37 +0100 Subject: [PATCH 5/6] chore(tesseract): YAML mock schemas for tests (#10194) --- packages/cubejs-backend-native/Cargo.lock | 8 +- rust/cubesqlplanner/Cargo.lock | 36 ++ rust/cubesqlplanner/cubesqlplanner/Cargo.toml | 2 + .../cube_bridge/mock_base_tools.rs | 12 +- .../cube_bridge/mock_case_definition.rs | 38 ++ .../mock_case_switch_definition.rs | 34 ++ .../cube_bridge/mock_cube_definition.rs | 4 +- .../cube_bridge/mock_dimension_definition.rs | 139 ++++- .../cube_bridge/mock_measure_definition.rs | 285 ++++------- .../test_fixtures/cube_bridge/mock_schema.rs | 157 +++--- .../cube_bridge/mock_segment_definition.rs | 96 +--- .../cube_bridge/mock_timeshift_definition.rs | 54 +- .../src/test_fixtures/cube_bridge/mod.rs | 3 + .../test_fixtures/cube_bridge/yaml/case.rs | 112 ++++ .../cube_bridge/yaml/dimension.rs | 68 +++ .../test_fixtures/cube_bridge/yaml/measure.rs | 108 ++++ .../src/test_fixtures/cube_bridge/yaml/mod.rs | 11 + .../test_fixtures/cube_bridge/yaml/schema.rs | 411 +++++++++++++++ .../test_fixtures/cube_bridge/yaml/segment.rs | 21 + .../cube_bridge/yaml/timeshift.rs | 28 + .../cubesqlplanner/src/test_fixtures/mod.rs | 1 + .../src/test_fixtures/schemas/mod.rs | 4 - .../test_fixtures/schemas/visitors_schema.rs | 326 ------------ .../schemas/yaml_files/common/simple.yaml | 76 +++ .../schemas/yaml_files/common/visitors.yaml | 97 ++++ .../src/test_fixtures/test_utils/mod.rs | 3 + .../test_fixtures/test_utils/test_context.rs | 75 +++ .../src/tests/cube_evaluator/compilation.rs | 77 ++- .../tests/cube_evaluator/symbol_evaluator.rs | 477 ++++++------------ 29 files changed, 1703 insertions(+), 1060 deletions(-) create mode 100644 rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/yaml/case.rs create mode 100644 rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/yaml/dimension.rs create mode 100644 rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/yaml/measure.rs create mode 100644 rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/yaml/mod.rs create mode 100644 rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/yaml/schema.rs create mode 100644 rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/yaml/segment.rs create mode 100644 rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/yaml/timeshift.rs delete mode 100644 rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/schemas/visitors_schema.rs create mode 100644 rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/schemas/yaml_files/common/simple.yaml create mode 100644 rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/schemas/yaml_files/common/visitors.yaml create mode 100644 rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/test_utils/mod.rs create mode 100644 rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/test_utils/test_context.rs diff --git a/packages/cubejs-backend-native/Cargo.lock b/packages/cubejs-backend-native/Cargo.lock index 2740ac228d8fd..ee3d3fd92c3cd 100644 --- a/packages/cubejs-backend-native/Cargo.lock +++ b/packages/cubejs-backend-native/Cargo.lock @@ -856,6 +856,7 @@ dependencies = [ "convert_case 0.7.1", "cubeclient", "cubenativeutils", + "indoc", "itertools 0.10.5", "lazy_static", "minijinja", @@ -1722,9 +1723,12 @@ dependencies = [ [[package]] name = "indoc" -version = "2.0.4" +version = "2.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e186cfbae8084e513daff4240b4797e342f988cecda4fb6c939150f96315fd8" +checksum = "79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706" +dependencies = [ + "rustversion", +] [[package]] name = "instant" diff --git a/rust/cubesqlplanner/Cargo.lock b/rust/cubesqlplanner/Cargo.lock index 51f2ff66c728b..733571e355734 100644 --- a/rust/cubesqlplanner/Cargo.lock +++ b/rust/cubesqlplanner/Cargo.lock @@ -273,6 +273,7 @@ dependencies = [ "convert_case 0.7.1", "cubeclient", "cubenativeutils", + "indoc", "itertools", "lazy_static", "minijinja", @@ -282,6 +283,7 @@ dependencies = [ "regex", "serde", "serde_json", + "serde_yaml", "tokio", "typed-builder", ] @@ -684,6 +686,15 @@ dependencies = [ "hashbrown", ] +[[package]] +name = "indoc" +version = "2.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706" +dependencies = [ + "rustversion", +] + [[package]] name = "ipnet" version = "2.9.0" @@ -1287,6 +1298,12 @@ dependencies = [ "untrusted", ] +[[package]] +name = "rustversion" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" + [[package]] name = "ryu" version = "1.0.18" @@ -1372,6 +1389,19 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_yaml" +version = "0.9.34+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" +dependencies = [ + "indexmap", + "itoa", + "ryu", + "serde", + "unsafe-libyaml", +] + [[package]] name = "shlex" version = "1.3.0" @@ -1669,6 +1699,12 @@ version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" +[[package]] +name = "unsafe-libyaml" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" + [[package]] name = "untrusted" version = "0.9.0" diff --git a/rust/cubesqlplanner/cubesqlplanner/Cargo.toml b/rust/cubesqlplanner/cubesqlplanner/Cargo.toml index fe623e8bfb2fc..dde3beb7858c7 100644 --- a/rust/cubesqlplanner/cubesqlplanner/Cargo.toml +++ b/rust/cubesqlplanner/cubesqlplanner/Cargo.toml @@ -21,9 +21,11 @@ chrono-tz = "0.8.2" lazy_static = "1.4.0" regex = "1.3.9" typed-builder = "0.21.2" +indoc = "2.0.7" [dev-dependencies] petgraph = "0.6" +serde_yaml = "0.9" [dependencies.neon] version = "=1" diff --git a/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_base_tools.rs b/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_base_tools.rs index 616eddfdcef68..7a45ce4153526 100644 --- a/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_base_tools.rs +++ b/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_base_tools.rs @@ -5,7 +5,9 @@ use crate::cube_bridge::join_hints::JoinHintItem; use crate::cube_bridge::pre_aggregation_obj::PreAggregationObj; use crate::cube_bridge::sql_templates_render::SqlTemplatesRender; use crate::cube_bridge::sql_utils::SqlUtils; -use crate::test_fixtures::cube_bridge::{MockDriverTools, MockSqlTemplatesRender, MockSqlUtils}; +use crate::test_fixtures::cube_bridge::{ + MockDriverTools, MockJoinGraph, MockSqlTemplatesRender, MockSqlUtils, +}; use cubenativeutils::CubeError; use std::any::Any; use std::rc::Rc; @@ -28,6 +30,9 @@ pub struct MockBaseTools { #[builder(default = Rc::new(MockSqlUtils))] sql_utils: Rc, + + #[builder(default = Rc::new(MockJoinGraph::new()))] + join_graph: Rc, } impl Default for MockBaseTools { @@ -100,8 +105,9 @@ impl BaseTools for MockBaseTools { fn join_tree_for_hints( &self, - _hints: Vec, + hints: Vec, ) -> Result, CubeError> { - todo!("join_tree_for_hints not implemented in mock") + let result = self.join_graph.build_join(hints)?; + Ok(result as Rc) } } diff --git a/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_case_definition.rs b/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_case_definition.rs index cc81ae109d1fc..1be3a84482b0a 100644 --- a/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_case_definition.rs +++ b/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_case_definition.rs @@ -1,6 +1,7 @@ use crate::cube_bridge::case_definition::CaseDefinition; use crate::cube_bridge::case_else_item::CaseElseItem; use crate::cube_bridge::case_item::CaseItem; +use crate::test_fixtures::cube_bridge::yaml::case::YamlCaseDefinition; use crate::test_fixtures::cube_bridge::{MockCaseElseItem, MockCaseItem}; use cubenativeutils::CubeError; use std::any::Any; @@ -13,6 +14,14 @@ pub struct MockCaseDefinition { else_label: Rc, } +impl MockCaseDefinition { + pub fn from_yaml(yaml: &str) -> Result, CubeError> { + let yaml_def: YamlCaseDefinition = serde_yaml::from_str(yaml) + .map_err(|e| CubeError::user(format!("Failed to parse YAML: {}", e)))?; + Ok(yaml_def.build()) + } +} + impl CaseDefinition for MockCaseDefinition { fn when(&self) -> Result>, CubeError> { Ok(self @@ -35,6 +44,35 @@ impl CaseDefinition for MockCaseDefinition { mod tests { use super::*; use crate::cube_bridge::string_or_sql::StringOrSql; + use indoc::indoc; + + #[test] + fn test_from_yaml() { + let yaml = indoc! {" + when: + - sql: \"{CUBE}.size_value = 'xl-en'\" + label: xl + - sql: \"{CUBE}.size_value = 'xl'\" + label: xl + - sql: \"{CUBE}.size_value = 'xxl-en'\" + label: xxl + - sql: \"{CUBE}.size_value = 'xxl'\" + label: xxl + else: + label: Unknown + "}; + + let case_def = MockCaseDefinition::from_yaml(yaml).unwrap(); + let when_result = case_def.when().unwrap(); + + assert_eq!(when_result.len(), 4); + + let else_result = case_def.else_label().unwrap(); + assert!(matches!( + else_result.label().unwrap(), + StringOrSql::String(s) if s == "Unknown" + )); + } #[test] fn test_mock_case_definition() { diff --git a/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_case_switch_definition.rs b/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_case_switch_definition.rs index 3c04b91dddb76..4e50936052380 100644 --- a/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_case_switch_definition.rs +++ b/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_case_switch_definition.rs @@ -2,6 +2,7 @@ use crate::cube_bridge::case_switch_definition::CaseSwitchDefinition; use crate::cube_bridge::case_switch_else_item::CaseSwitchElseItem; use crate::cube_bridge::case_switch_item::CaseSwitchItem; use crate::cube_bridge::member_sql::MemberSql; +use crate::test_fixtures::cube_bridge::yaml::case::YamlCaseSwitchDefinition; use crate::test_fixtures::cube_bridge::{ MockCaseSwitchElseItem, MockCaseSwitchItem, MockMemberSql, }; @@ -17,6 +18,14 @@ pub struct MockCaseSwitchDefinition { else_sql: Rc, } +impl MockCaseSwitchDefinition { + pub fn from_yaml(yaml: &str) -> Result, CubeError> { + let yaml_def: YamlCaseSwitchDefinition = serde_yaml::from_str(yaml) + .map_err(|e| CubeError::user(format!("Failed to parse YAML: {}", e)))?; + Ok(yaml_def.build()) + } +} + impl CaseSwitchDefinition for MockCaseSwitchDefinition { fn switch(&self) -> Result, CubeError> { Ok(Rc::new(MockMemberSql::new(&self.switch)?)) @@ -42,6 +51,31 @@ impl CaseSwitchDefinition for MockCaseSwitchDefinition { #[cfg(test)] mod tests { use super::*; + use indoc::indoc; + + #[test] + fn test_from_yaml() { + let yaml = indoc! {" + switch: \"{CUBE.currency}\" + when: + - value: USD + sql: \"'dollars'\" + - value: EUR + sql: \"'euros'\" + else: + sql: \"'unknown'\" + "}; + + let case_switch = MockCaseSwitchDefinition::from_yaml(yaml).unwrap(); + + assert!(case_switch.switch().is_ok()); + + let when_result = case_switch.when().unwrap(); + assert_eq!(when_result.len(), 2); + + let else_result = case_switch.else_sql().unwrap(); + assert!(else_result.sql().is_ok()); + } #[test] fn test_mock_case_switch_definition() { diff --git a/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_cube_definition.rs b/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_cube_definition.rs index e2ca93151992f..e605231aa6627 100644 --- a/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_cube_definition.rs +++ b/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_cube_definition.rs @@ -20,9 +20,9 @@ pub struct MockCubeDefinition { #[builder(default)] join_map: Option>>, - #[builder(default, setter(strip_option))] + #[builder(default, setter(strip_option(fallback = sql_table_opt)))] sql_table: Option, - #[builder(default, setter(strip_option))] + #[builder(default, setter(strip_option(fallback = sql_opt)))] sql: Option, #[builder(default)] diff --git a/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_dimension_definition.rs b/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_dimension_definition.rs index 2a623451f7dda..8d790a4f708e0 100644 --- a/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_dimension_definition.rs +++ b/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_dimension_definition.rs @@ -4,6 +4,7 @@ use crate::cube_bridge::geo_item::GeoItem; use crate::cube_bridge::member_sql::MemberSql; use crate::cube_bridge::timeshift_definition::TimeShiftDefinition; use crate::impl_static_data; +use crate::test_fixtures::cube_bridge::yaml::dimension::YamlDimensionDefinition; use crate::test_fixtures::cube_bridge::{MockGeoItem, MockMemberSql, MockTimeShiftDefinition}; use cubenativeutils::CubeError; use std::any::Any; @@ -29,13 +30,13 @@ pub struct MockDimensionDefinition { #[builder(default)] primary_key: Option, - #[builder(default, setter(strip_option))] + #[builder(default, setter(strip_option(fallback = sql_opt)))] sql: Option, #[builder(default)] case: Option>, - #[builder(default, setter(strip_option))] + #[builder(default, setter(strip_option(fallback = latitude_opt)))] latitude: Option, - #[builder(default, setter(strip_option))] + #[builder(default, setter(strip_option(fallback = longitude_opt)))] longitude: Option, #[builder(default)] time_shift: Option>>, @@ -54,6 +55,14 @@ impl_static_data!( primary_key ); +impl MockDimensionDefinition { + pub fn from_yaml(yaml: &str) -> Result, CubeError> { + let yaml_def: YamlDimensionDefinition = serde_yaml::from_str(yaml) + .map_err(|e| CubeError::user(format!("Failed to parse YAML: {}", e)))?; + Ok(yaml_def.build()) + } +} + impl DimensionDefinition for MockDimensionDefinition { crate::impl_static_data_method!(DimensionDefinitionStatic); @@ -126,3 +135,127 @@ impl DimensionDefinition for MockDimensionDefinition { self } } + +#[cfg(test)] +mod tests { + use super::*; + use indoc::indoc; + + #[test] + fn test_from_yaml_all_fields() { + let yaml = indoc! {" + type: number + owned_by_cube: true + multi_stage: true + sub_query: true + propagate_filters_to_sub_query: true + values: [val1, val2] + add_group_by: ['dim1', 'dim2'] + primary_key: true + sql: id + latitude: lat + longitude: lon + time_shift: + - interval: 1 year + type: prior + "}; + + let dim = MockDimensionDefinition::from_yaml(yaml).unwrap(); + let static_data = dim.static_data(); + + assert_eq!(static_data.dimension_type, "number"); + assert_eq!(static_data.multi_stage, Some(true)); + assert_eq!(static_data.sub_query, Some(true)); + assert_eq!(static_data.propagate_filters_to_sub_query, Some(true)); + assert_eq!( + static_data.values, + Some(vec!["val1".to_string(), "val2".to_string()]) + ); + assert_eq!(static_data.primary_key, Some(true)); + assert_eq!( + static_data.add_group_by_references, + Some(vec!["dim1".to_string(), "dim2".to_string()]) + ); + assert!(dim.has_sql().unwrap()); + assert!(dim.has_latitude().unwrap()); + assert!(dim.has_longitude().unwrap()); + assert!(dim.has_time_shift().unwrap()); + } + + #[test] + fn test_from_yaml_minimal() { + let yaml = indoc! {" + type: string + sql: status + "}; + + let dim = MockDimensionDefinition::from_yaml(yaml).unwrap(); + let static_data = dim.static_data(); + + assert_eq!(static_data.dimension_type, "string"); + assert_eq!(static_data.multi_stage, None); + assert_eq!(static_data.sub_query, None); + assert_eq!(static_data.primary_key, None); + assert!(dim.has_sql().unwrap()); + assert!(!dim.has_latitude().unwrap()); + assert!(!dim.has_longitude().unwrap()); + assert!(!dim.has_time_shift().unwrap()); + } + + #[test] + fn test_from_yaml_with_case() { + let yaml = indoc! {" + type: string + sql: size_value + case: + when: + - sql: \"{CUBE}.size_value = 'xl-en'\" + label: xl + - sql: \"{CUBE}.size_value = 'xxl'\" + label: xxl + else: + label: Unknown + "}; + + let dim = MockDimensionDefinition::from_yaml(yaml).unwrap(); + assert!(dim.has_case().unwrap()); + + let case_variant = dim.case().unwrap().unwrap(); + match case_variant { + CaseVariant::Case(case_def) => { + let when_items = case_def.when().unwrap(); + assert_eq!(when_items.len(), 2); + } + _ => panic!("Expected Case variant"), + } + } + + #[test] + fn test_from_yaml_with_case_switch() { + let yaml = indoc! {" + type: string + sql: currency_name + case: + switch: \"{CUBE.currency}\" + when: + - value: USD + sql: \"'dollars'\" + - value: EUR + sql: \"'euros'\" + else: + sql: \"'unknown'\" + "}; + + let dim = MockDimensionDefinition::from_yaml(yaml).unwrap(); + assert!(dim.has_case().unwrap()); + + let case_variant = dim.case().unwrap().unwrap(); + match case_variant { + CaseVariant::CaseSwitch(switch_def) => { + let when_items = switch_def.when().unwrap(); + assert_eq!(when_items.len(), 2); + } + _ => panic!("Expected CaseSwitch variant"), + } + } +} diff --git a/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_measure_definition.rs b/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_measure_definition.rs index dea5ebb176595..d34ba808f7a49 100644 --- a/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_measure_definition.rs +++ b/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_measure_definition.rs @@ -6,6 +6,7 @@ use crate::cube_bridge::member_order_by::MemberOrderBy; use crate::cube_bridge::member_sql::MemberSql; use crate::cube_bridge::struct_with_sql_member::StructWithSqlMember; use crate::impl_static_data; +use crate::test_fixtures::cube_bridge::yaml::measure::YamlMeasureDefinition; use crate::test_fixtures::cube_bridge::{ MockMemberOrderBy, MockMemberSql, MockStructWithSqlMember, }; @@ -14,11 +15,8 @@ use std::any::Any; use std::rc::Rc; use typed_builder::TypedBuilder; -/// Mock implementation of MeasureDefinition for testing #[derive(TypedBuilder)] pub struct MockMeasureDefinition { - // Fields from MeasureDefinitionStatic - #[builder(default = "number".to_string())] measure_type: String, #[builder(default = Some(false))] owned_by_cube: Option, @@ -35,8 +33,7 @@ pub struct MockMeasureDefinition { #[builder(default)] rolling_window: Option, - // Optional trait fields - #[builder(default, setter(strip_option))] + #[builder(default, setter(strip_option(fallback = sql_opt)))] sql: Option, #[builder(default)] case: Option>, @@ -61,6 +58,14 @@ impl_static_data!( rolling_window ); +impl MockMeasureDefinition { + pub fn from_yaml(yaml: &str) -> Result, CubeError> { + let yaml_def: YamlMeasureDefinition = serde_yaml::from_str(yaml) + .map_err(|e| CubeError::user(format!("Failed to parse YAML: {}", e)))?; + Ok(yaml_def.build()) + } +} + impl MeasureDefinition for MockMeasureDefinition { crate::impl_static_data_method!(MeasureDefinitionStatic); @@ -145,230 +150,114 @@ impl MeasureDefinition for MockMeasureDefinition { #[cfg(test)] mod tests { use super::*; + use indoc::indoc; #[test] - fn test_count_measure() { - let measure = MockMeasureDefinition::builder() - .measure_type("count".to_string()) - .sql("COUNT(*)".to_string()) - .build(); + fn test_from_yaml_minimal() { + let yaml = indoc! {" + type: count + "}; + let measure = MockMeasureDefinition::from_yaml(yaml).unwrap(); assert_eq!(measure.static_data().measure_type, "count"); - assert!(measure.sql().unwrap().is_some()); + assert!(!measure.has_sql().unwrap()); } #[test] - fn test_sum_measure() { - let measure = MockMeasureDefinition::builder() - .measure_type("sum".to_string()) - .sql("{CUBE.amount}".to_string()) - .build(); + fn test_from_yaml_with_sql() { + let yaml = indoc! {" + type: sum + sql: \"{CUBE.amount}\" + "}; + let measure = MockMeasureDefinition::from_yaml(yaml).unwrap(); assert_eq!(measure.static_data().measure_type, "sum"); - let sql = measure.sql().unwrap().unwrap(); - assert_eq!(sql.args_names(), &vec!["CUBE"]); + assert!(measure.has_sql().unwrap()); } #[test] - fn test_measure_with_filters() { - let filters = vec![ - Rc::new( - MockStructWithSqlMember::builder() - .sql("{CUBE.status} = 'active'".to_string()) - .build(), - ), - Rc::new( - MockStructWithSqlMember::builder() - .sql("{CUBE.amount} > 0".to_string()) - .build(), - ), - ]; - - let measure = MockMeasureDefinition::builder() - .measure_type("sum".to_string()) - .sql("{CUBE.amount}".to_string()) - .filters(Some(filters)) - .build(); - - let result_filters = measure.filters().unwrap().unwrap(); - assert_eq!(result_filters.len(), 2); - } - - #[test] - fn test_measure_with_order_by() { - let order_by = vec![ - Rc::new( - MockMemberOrderBy::builder() - .sql("{CUBE.created_at}".to_string()) - .dir("desc".to_string()) - .build(), - ), - Rc::new( - MockMemberOrderBy::builder() - .sql("{CUBE.name}".to_string()) - .dir("asc".to_string()) - .build(), - ), - ]; - - let measure = MockMeasureDefinition::builder() - .measure_type("count".to_string()) - .sql("COUNT(*)".to_string()) - .order_by(Some(order_by)) - .build(); - - let result_order_by = measure.order_by().unwrap().unwrap(); - assert_eq!(result_order_by.len(), 2); + fn test_from_yaml_with_filters() { + let yaml = indoc! {" + type: count + sql: COUNT(*) + filters: + - sql: \"{CUBE}.status = 'active'\" + - sql: \"{CUBE}.amount > 0\" + "}; + + let measure = MockMeasureDefinition::from_yaml(yaml).unwrap(); + let filters = measure.filters().unwrap().unwrap(); + assert_eq!(filters.len(), 2); } #[test] - fn test_measure_with_time_shift() { - let time_shift_refs = vec![ - TimeShiftReference { - interval: Some("1 day".to_string()), - name: Some("yesterday".to_string()), - shift_type: Some("prior".to_string()), - time_dimension: Some("created_at".to_string()), - }, - TimeShiftReference { - interval: Some("1 week".to_string()), - name: Some("last_week".to_string()), - shift_type: Some("prior".to_string()), - time_dimension: Some("created_at".to_string()), - }, - ]; - - let measure = MockMeasureDefinition::builder() - .measure_type("sum".to_string()) - .sql("{CUBE.amount}".to_string()) - .time_shift_references(Some(time_shift_refs)) - .build(); - - let static_data = measure.static_data(); - let refs = static_data.time_shift_references.as_ref().unwrap(); - assert_eq!(refs.len(), 2); - assert_eq!(refs[0].name, Some("yesterday".to_string())); + fn test_from_yaml_with_order_by() { + let yaml = indoc! {" + type: count + sql: COUNT(*) + order_by: + - sql: \"{CUBE.created_at}\" + dir: desc + - sql: \"{CUBE.name}\" + dir: asc + "}; + + let measure = MockMeasureDefinition::from_yaml(yaml).unwrap(); + let order_by = measure.order_by().unwrap().unwrap(); + assert_eq!(order_by.len(), 2); } #[test] - fn test_measure_with_rolling_window() { - let rolling_window = RollingWindow { - trailing: Some("7 day".to_string()), - leading: Some("0 day".to_string()), - offset: Some("start".to_string()), - rolling_type: Some("trailing".to_string()), - granularity: Some("day".to_string()), - }; - - let measure = MockMeasureDefinition::builder() - .measure_type("sum".to_string()) - .sql("{CUBE.amount}".to_string()) - .rolling_window(Some(rolling_window)) - .build(); - + fn test_from_yaml_with_references() { + let yaml = indoc! {" + type: sum + sql: \"{CUBE.amount}\" + reduce_by_references: [user_id, order_id] + add_group_by_references: [status] + group_by_references: [category] + "}; + + let measure = MockMeasureDefinition::from_yaml(yaml).unwrap(); let static_data = measure.static_data(); - let window = static_data.rolling_window.as_ref().unwrap(); - assert_eq!(window.trailing, Some("7 day".to_string())); - assert_eq!(window.granularity, Some("day".to_string())); - } - - #[test] - fn test_measure_with_case() { - use crate::cube_bridge::case_variant::CaseVariant; - use crate::cube_bridge::string_or_sql::StringOrSql; - use crate::test_fixtures::cube_bridge::{ - MockCaseDefinition, MockCaseElseItem, MockCaseItem, - }; - - let when_items = vec![ - Rc::new( - MockCaseItem::builder() - .sql("{CUBE.status} = 'active'".to_string()) - .label(StringOrSql::String("1".to_string())) - .build(), - ), - Rc::new( - MockCaseItem::builder() - .sql("{CUBE.status} = 'inactive'".to_string()) - .label(StringOrSql::String("0".to_string())) - .build(), - ), - ]; - - let else_item = Rc::new( - MockCaseElseItem::builder() - .label(StringOrSql::String("0".to_string())) - .build(), - ); - - let case_def = Rc::new( - MockCaseDefinition::builder() - .when(when_items) - .else_label(else_item) - .build(), - ); - - let measure = MockMeasureDefinition::builder() - .measure_type("number".to_string()) - .case(Some(Rc::new(CaseVariant::Case(case_def)))) - .build(); - - let case_result = measure.case().unwrap(); - assert!(case_result.is_some()); - } - - #[test] - fn test_measure_with_references() { - let measure = MockMeasureDefinition::builder() - .measure_type("sum".to_string()) - .sql("{CUBE.amount}".to_string()) - .reduce_by_references(Some(vec!["user_id".to_string(), "order_id".to_string()])) - .add_group_by_references(Some(vec!["status".to_string()])) - .group_by_references(Some(vec!["category".to_string()])) - .build(); assert_eq!( - measure.static_data().reduce_by_references, + static_data.reduce_by_references, Some(vec!["user_id".to_string(), "order_id".to_string()]) ); assert_eq!( - measure.static_data().add_group_by_references, + static_data.add_group_by_references, Some(vec!["status".to_string()]) ); assert_eq!( - measure.static_data().group_by_references, + static_data.group_by_references, Some(vec!["category".to_string()]) ); } #[test] - fn test_measure_with_drill_filters() { - let drill_filters = vec![Rc::new( - MockStructWithSqlMember::builder() - .sql("{CUBE.is_drillable} = true".to_string()) - .build(), - )]; - - let measure = MockMeasureDefinition::builder() - .measure_type("count".to_string()) - .sql("COUNT(*)".to_string()) - .drill_filters(Some(drill_filters)) - .build(); - - let result_filters = measure.drill_filters().unwrap().unwrap(); - assert_eq!(result_filters.len(), 1); - } - - #[test] - fn test_measure_with_flags() { - let measure = MockMeasureDefinition::builder() - .measure_type("sum".to_string()) - .sql("{CUBE.amount}".to_string()) - .multi_stage(Some(true)) - .owned_by_cube(Some(false)) - .build(); - - assert_eq!(measure.static_data().multi_stage, Some(true)); - assert_eq!(measure.static_data().owned_by_cube, Some(false)); + fn test_from_yaml_with_case() { + let yaml = indoc! {" + type: number + case: + when: + - sql: \"{CUBE}.status = 'active'\" + label: \"1\" + - sql: \"{CUBE}.status = 'inactive'\" + label: \"0\" + else: + label: \"0\" + "}; + + let measure = MockMeasureDefinition::from_yaml(yaml).unwrap(); + assert!(measure.has_case().unwrap()); + + let case_variant = measure.case().unwrap().unwrap(); + match case_variant { + CaseVariant::Case(case_def) => { + let when_items = case_def.when().unwrap(); + assert_eq!(when_items.len(), 2); + } + _ => panic!("Expected Case variant"), + } } } diff --git a/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_schema.rs b/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_schema.rs index b74a9b9203776..667f4150c94cd 100644 --- a/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_schema.rs +++ b/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_schema.rs @@ -1,18 +1,17 @@ +use crate::test_fixtures::cube_bridge::yaml::YamlSchema; use crate::test_fixtures::cube_bridge::{ - MockCubeDefinition, MockCubeEvaluator, MockDimensionDefinition, MockJoinGraph, - MockJoinItemDefinition, MockMeasureDefinition, MockSegmentDefinition, + MockBaseTools, MockCubeDefinition, MockCubeEvaluator, MockDimensionDefinition, MockDriverTools, + MockJoinGraph, MockJoinItemDefinition, MockMeasureDefinition, MockSegmentDefinition, }; use cubenativeutils::CubeError; use std::collections::HashMap; use std::rc::Rc; -/// Mock schema containing cubes with their measures and dimensions #[derive(Clone)] pub struct MockSchema { cubes: HashMap, } -/// Single cube with its definition and members #[derive(Clone)] pub struct MockCube { pub definition: MockCubeDefinition, @@ -22,12 +21,41 @@ pub struct MockCube { } impl MockSchema { - /// Get cube by name + pub fn from_yaml(yaml: &str) -> Result { + let yaml_schema: YamlSchema = serde_yaml::from_str(yaml) + .map_err(|e| CubeError::user(format!("Failed to parse YAML: {}", e)))?; + yaml_schema.build() + } + + /// Loads schema from a YAML file in the test fixtures directory + /// + /// The path is relative to `src/test_fixtures/schemas/yaml_files/`. + /// For example, `"common/visitors.yaml"` loads from + /// `src/test_fixtures/schemas/yaml_files/common/visitors.yaml`. + /// + /// Panics if the file cannot be read or parsed. + pub fn from_yaml_file(relative_path: &str) -> Self { + let manifest_dir = env!("CARGO_MANIFEST_DIR"); + let full_path = format!( + "{}/src/test_fixtures/schemas/yaml_files/{}", + manifest_dir, relative_path + ); + + let yaml = std::fs::read_to_string(&full_path) + .unwrap_or_else(|e| panic!("Failed to read YAML fixture '{}': {}", relative_path, e)); + + Self::from_yaml(&yaml).unwrap_or_else(|e| { + panic!( + "Failed to parse YAML fixture '{}': {}", + relative_path, e.message + ) + }) + } + pub fn get_cube(&self, name: &str) -> Option<&MockCube> { self.cubes.get(name) } - /// Get dimension by cube name and dimension name pub fn get_dimension( &self, cube_name: &str, @@ -38,7 +66,6 @@ impl MockSchema { .and_then(|cube| cube.dimensions.get(dimension_name).cloned()) } - /// Get measure by cube name and measure name pub fn get_measure( &self, cube_name: &str, @@ -49,7 +76,6 @@ impl MockSchema { .and_then(|cube| cube.measures.get(measure_name).cloned()) } - /// Get segment by cube name and segment name pub fn get_segment( &self, cube_name: &str, @@ -60,14 +86,11 @@ impl MockSchema { .and_then(|cube| cube.segments.get(segment_name).cloned()) } - /// Get all cube names pub fn cube_names(&self) -> Vec<&String> { self.cubes.keys().collect() } - /// Create a MockCubeEvaluator from this schema pub fn create_evaluator(self) -> Rc { - // Collect primary keys from all cubes let mut primary_keys = std::collections::HashMap::new(); for (cube_name, cube) in &self.cubes { @@ -79,7 +102,6 @@ impl MockSchema { } } - // Sort primary keys by name to ensure stable ordering pk_dimensions.sort(); if !pk_dimensions.is_empty() { @@ -90,7 +112,16 @@ impl MockSchema { Rc::new(MockCubeEvaluator::with_primary_keys(self, primary_keys)) } - /// Create a MockCubeEvaluator with primary keys from this schema + pub fn create_base_tools(&self) -> Result { + let join_graph = Rc::new(self.create_join_graph()?); + let driver_tools = Rc::new(MockDriverTools::new()); + let result = MockBaseTools::builder() + .join_graph(join_graph) + .driver_tools(driver_tools) + .build(); + Ok(result) + } + #[allow(dead_code)] pub fn create_evaluator_with_primary_keys( self, @@ -99,25 +130,14 @@ impl MockSchema { Rc::new(MockCubeEvaluator::with_primary_keys(self, primary_keys)) } - /// Create a MockJoinGraph from this schema - /// - /// This method: - /// 1. Extracts all cubes as Vec> - /// 2. Creates a temporary MockCubeEvaluator for validation - /// 3. Creates and compiles a MockJoinGraph - /// - /// # Returns - /// * `Ok(MockJoinGraph)` - Compiled join graph - /// * `Err(CubeError)` - If join graph compilation fails (invalid joins, missing PKs, etc.) + #[allow(dead_code)] pub fn create_join_graph(&self) -> Result { - // Collect cubes as Vec> let cubes: Vec> = self .cubes .values() .map(|mock_cube| Rc::new(mock_cube.definition.clone())) .collect(); - // Extract primary keys for evaluator let mut primary_keys = HashMap::new(); for (cube_name, cube) in &self.cubes { let mut pk_dimensions = Vec::new(); @@ -132,26 +152,15 @@ impl MockSchema { } } - // Clone self for evaluator let evaluator = MockCubeEvaluator::with_primary_keys(self.clone(), primary_keys); - // Create and compile join graph let mut join_graph = MockJoinGraph::new(); join_graph.compile(&cubes, &evaluator)?; Ok(join_graph) } - /// Create a MockCubeEvaluator with join graph from this schema - /// - /// This method creates an evaluator with a fully compiled join graph, - /// enabling join path resolution in tests. - /// - /// # Returns - /// * `Ok(Rc)` - Evaluator with join graph - /// * `Err(CubeError)` - If join graph compilation fails pub fn create_evaluator_with_join_graph(self) -> Result, CubeError> { - // Extract primary keys let mut primary_keys = HashMap::new(); for (cube_name, cube) in &self.cubes { let mut pk_dimensions = Vec::new(); @@ -166,10 +175,8 @@ impl MockSchema { } } - // Compile join graph let join_graph = self.create_join_graph()?; - // Create evaluator with join graph Ok(Rc::new(MockCubeEvaluator::with_join_graph( self, primary_keys, @@ -178,20 +185,17 @@ impl MockSchema { } } -/// Builder for MockSchema with fluent API pub struct MockSchemaBuilder { cubes: HashMap, } impl MockSchemaBuilder { - /// Create a new schema builder pub fn new() -> Self { Self { cubes: HashMap::new(), } } - /// Add a cube and return a cube builder pub fn add_cube(self, name: impl Into) -> MockCubeBuilder { MockCubeBuilder { schema_builder: self, @@ -204,7 +208,6 @@ impl MockSchemaBuilder { } } - /// Add a view and return a view builder pub fn add_view(self, name: impl Into) -> MockViewBuilder { MockViewBuilder { schema_builder: self, @@ -216,7 +219,6 @@ impl MockSchemaBuilder { } } - /// Build the final schema pub fn build(self) -> MockSchema { MockSchema { cubes: self.cubes } } @@ -228,7 +230,6 @@ impl Default for MockSchemaBuilder { } } -/// Builder for a single cube within a schema pub struct MockCubeBuilder { schema_builder: MockSchemaBuilder, cube_name: String, @@ -240,13 +241,11 @@ pub struct MockCubeBuilder { } impl MockCubeBuilder { - /// Set the cube definition pub fn cube_def(mut self, definition: MockCubeDefinition) -> Self { self.cube_definition = Some(definition); self } - /// Add a dimension to the cube pub fn add_dimension( mut self, name: impl Into, @@ -256,7 +255,6 @@ impl MockCubeBuilder { self } - /// Add a measure to the cube pub fn add_measure( mut self, name: impl Into, @@ -266,7 +264,6 @@ impl MockCubeBuilder { self } - /// Add a segment to the cube pub fn add_segment( mut self, name: impl Into, @@ -276,27 +273,22 @@ impl MockCubeBuilder { self } - /// Add a join to the cube pub fn add_join(mut self, name: impl Into, definition: MockJoinItemDefinition) -> Self { self.joins.insert(name.into(), definition); self } - /// Finish building this cube and return to schema builder pub fn finish_cube(mut self) -> MockSchemaBuilder { let mut cube_def = self.cube_definition.unwrap_or_else(|| { - // Create default cube definition with the cube name MockCubeDefinition::builder() .name(self.cube_name.clone()) .sql_table(format!("public.{}", self.cube_name)) .build() }); - // Merge joins from builder with joins from cube definition let mut all_joins = cube_def.joins().clone(); all_joins.extend(self.joins); - // Rebuild cube definition with merged joins let static_data = cube_def.static_data(); cube_def = MockCubeDefinition::builder() .name(static_data.name.clone()) @@ -319,15 +311,11 @@ impl MockCubeBuilder { } } -/// Represents a cube to include in a view pub struct ViewCube { - /// Join path to the cube (e.g., "visitors" or "visitors.visitor_checkins") pub join_path: String, - /// Member names to include, empty vec means include all pub includes: Vec, } -/// Builder for a view within a schema pub struct MockViewBuilder { schema_builder: MockSchemaBuilder, view_name: String, @@ -338,7 +326,6 @@ pub struct MockViewBuilder { } impl MockViewBuilder { - /// Add a cube to include in this view pub fn include_cube(mut self, join_path: impl Into, includes: Vec) -> Self { self.view_cubes.push(ViewCube { join_path: join_path.into(), @@ -347,7 +334,6 @@ impl MockViewBuilder { self } - /// Add a custom dimension to the view pub fn add_dimension( mut self, name: impl Into, @@ -357,7 +343,6 @@ impl MockViewBuilder { self } - /// Add a custom measure to the view pub fn add_measure( mut self, name: impl Into, @@ -367,7 +352,6 @@ impl MockViewBuilder { self } - /// Add a custom segment to the view #[allow(dead_code)] pub fn add_segment( mut self, @@ -378,22 +362,17 @@ impl MockViewBuilder { self } - /// Finish building this view and return to schema builder pub fn finish_view(mut self) -> MockSchemaBuilder { let mut all_dimensions = self.dimensions; let mut all_measures = self.measures; let mut all_segments = self.segments; - // Process each included cube for view_cube in &self.view_cubes { let join_path_parts: Vec<&str> = view_cube.join_path.split('.').collect(); let target_cube_name = join_path_parts.last().unwrap(); - // Get the target cube from schema if let Some(source_cube) = self.schema_builder.cubes.get(*target_cube_name) { - // Determine which members to include let members_to_include: Vec = if view_cube.includes.is_empty() { - // Include all members let mut all_members = Vec::new(); all_members.extend(source_cube.dimensions.keys().cloned()); all_members.extend(source_cube.measures.keys().cloned()); @@ -403,13 +382,11 @@ impl MockViewBuilder { view_cube.includes.clone() }; - // Add dimensions for member_name in &members_to_include { if let Some(dimension) = source_cube.dimensions.get(member_name) { let view_member_sql = format!("{{{}.{}}}", view_cube.join_path, member_name); - // Check for duplicates if all_dimensions.contains_key(member_name) { panic!( "Duplicate member '{}' in view '{}'. Members must be unique.", @@ -429,13 +406,11 @@ impl MockViewBuilder { } } - // Add measures for member_name in &members_to_include { if let Some(measure) = source_cube.measures.get(member_name) { let view_member_sql = format!("{{{}.{}}}", view_cube.join_path, member_name); - // Check for duplicates if all_measures.contains_key(member_name) { panic!( "Duplicate member '{}' in view '{}'. Members must be unique.", @@ -455,13 +430,11 @@ impl MockViewBuilder { } } - // Add segments for member_name in &members_to_include { if source_cube.segments.contains_key(member_name) { let view_member_sql = format!("{{{}.{}}}", view_cube.join_path, member_name); - // Check for duplicates if all_segments.contains_key(member_name) { panic!( "Duplicate member '{}' in view '{}'. Members must be unique.", @@ -482,7 +455,6 @@ impl MockViewBuilder { } } - // Create view cube definition with is_view = true let view_def = MockCubeDefinition::builder() .name(self.view_name.clone()) .is_view(Some(true)) @@ -1271,6 +1243,7 @@ mod tests { let users_join = orders_cube.definition.get_join("users").unwrap(); assert_eq!(users_join.static_data().relationship, "many_to_one"); } + use indoc::indoc; #[test] fn test_complex_schema_with_join_relationships() { @@ -1489,4 +1462,42 @@ mod tests { "graph.build_join should succeed for orders -> users" ); } + + #[test] + fn test_from_yaml() { + let yaml = indoc! {r#" + cubes: + - name: orders + sql: "SELECT * FROM orders" + dimensions: + - name: id + type: number + sql: id + primary_key: true + - name: status + type: string + sql: status + measures: + - name: count + type: count + owned_by_cube: true + "#}; + + let schema = MockSchema::from_yaml(yaml).unwrap(); + + assert!(schema.get_cube("orders").is_some()); + + let id_dim = schema.get_dimension("orders", "id").unwrap(); + assert_eq!(id_dim.static_data().dimension_type, "number"); + assert_eq!(id_dim.static_data().primary_key, Some(true)); + + let count_measure = schema.get_measure("orders", "count").unwrap(); + assert_eq!(count_measure.static_data().measure_type, "count"); + } + + #[test] + #[should_panic(expected = "Failed to read YAML fixture")] + fn test_from_yaml_file_not_found() { + MockSchema::from_yaml_file("nonexistent.yaml"); + } } diff --git a/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_segment_definition.rs b/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_segment_definition.rs index 273d13599365f..c309365194098 100644 --- a/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_segment_definition.rs +++ b/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_segment_definition.rs @@ -1,22 +1,20 @@ use crate::cube_bridge::member_sql::MemberSql; use crate::cube_bridge::segment_definition::{SegmentDefinition, SegmentDefinitionStatic}; use crate::impl_static_data; +use crate::test_fixtures::cube_bridge::yaml::segment::YamlSegmentDefinition; use crate::test_fixtures::cube_bridge::MockMemberSql; use cubenativeutils::CubeError; use std::any::Any; use std::rc::Rc; use typed_builder::TypedBuilder; -/// Mock implementation of SegmentDefinition for testing #[derive(TypedBuilder)] pub struct MockSegmentDefinition { - // Fields from SegmentDefinitionStatic #[builder(default)] segment_type: Option, #[builder(default)] owned_by_cube: Option, - // Trait field sql: String, } @@ -27,6 +25,14 @@ impl_static_data!( owned_by_cube ); +impl MockSegmentDefinition { + pub fn from_yaml(yaml: &str) -> Result, CubeError> { + let yaml_def: YamlSegmentDefinition = serde_yaml::from_str(yaml) + .map_err(|e| CubeError::user(format!("Failed to parse YAML: {}", e)))?; + Ok(yaml_def.build()) + } +} + impl SegmentDefinition for MockSegmentDefinition { crate::impl_static_data_method!(SegmentDefinitionStatic); @@ -41,88 +47,22 @@ impl SegmentDefinition for MockSegmentDefinition { #[cfg(test)] mod tests { - use crate::test_fixtures::cube_bridge::MockBaseTools; - use super::*; + use indoc::indoc; #[test] - fn test_basic_segment() { - let segment = MockSegmentDefinition::builder() - .sql("{CUBE.status} = 'active'".to_string()) - .build(); - - let sql = segment.sql().unwrap(); - assert_eq!(sql.args_names(), &vec!["CUBE"]); - } - - #[test] - fn test_segment_with_type() { - let segment = MockSegmentDefinition::builder() - .segment_type(Some("filter".to_string())) - .sql("{CUBE.deleted} = false".to_string()) - .build(); - - assert_eq!( - segment.static_data().segment_type, - Some("filter".to_string()) - ); - } - - #[test] - fn test_segment_owned_by_cube() { - let segment = MockSegmentDefinition::builder() - .owned_by_cube(Some(true)) - .sql("{CUBE.is_valid} = true".to_string()) - .build(); + fn test_from_yaml_with_fields() { + let yaml = indoc! {" + type: bool + sql: \"{CUBE}.amount > 100\" + "}; - assert_eq!(segment.static_data().owned_by_cube, Some(true)); - } + let segment = MockSegmentDefinition::from_yaml(yaml).unwrap(); + let static_data = segment.static_data(); - #[test] - fn test_complex_segment_sql() { - let segment = MockSegmentDefinition::builder() - .sql( - "{CUBE.created_at} >= '2024-01-01' AND {CUBE.status} IN ('active', 'pending')" - .to_string(), - ) - .build(); + assert_eq!(static_data.segment_type, Some("bool".to_string())); let sql = segment.sql().unwrap(); assert_eq!(sql.args_names(), &vec!["CUBE"]); - - use crate::test_fixtures::cube_bridge::MockSecurityContext; - let (template, args) = sql - .compile_template_sql( - Rc::new(MockBaseTools::default()), - Rc::new(MockSecurityContext), - ) - .unwrap(); - - match template { - crate::cube_bridge::member_sql::SqlTemplate::String(s) => { - assert_eq!( - s, - "{arg:0} >= '2024-01-01' AND {arg:1} IN ('active', 'pending')" - ); - } - _ => panic!("Expected String template"), - } - - assert_eq!(args.symbol_paths.len(), 2); - assert_eq!(args.symbol_paths[0], vec!["CUBE", "created_at"]); - assert_eq!(args.symbol_paths[1], vec!["CUBE", "status"]); - } - - #[test] - fn test_segment_with_cross_cube_reference() { - let segment = MockSegmentDefinition::builder() - .sql( - "{CUBE.user_id} IN (SELECT id FROM {users} WHERE {users.is_premium} = true)" - .to_string(), - ) - .build(); - - let sql = segment.sql().unwrap(); - assert_eq!(sql.args_names(), &vec!["CUBE", "users"]); } } diff --git a/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_timeshift_definition.rs b/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_timeshift_definition.rs index 1091b99e3a8fa..aaef5ad685e83 100644 --- a/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_timeshift_definition.rs +++ b/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_timeshift_definition.rs @@ -1,6 +1,7 @@ use crate::cube_bridge::member_sql::MemberSql; use crate::cube_bridge::timeshift_definition::{TimeShiftDefinition, TimeShiftDefinitionStatic}; use crate::impl_static_data; +use crate::test_fixtures::cube_bridge::yaml::timeshift::YamlTimeShiftDefinition; use crate::test_fixtures::cube_bridge::MockMemberSql; use cubenativeutils::CubeError; use std::any::Any; @@ -16,7 +17,7 @@ pub struct MockTimeShiftDefinition { timeshift_type: Option, #[builder(default)] name: Option, - #[builder(default, setter(strip_option))] + #[builder(default, setter(strip_option(fallback = sql_opt)))] sql: Option, } @@ -28,6 +29,14 @@ impl_static_data!( name ); +impl MockTimeShiftDefinition { + pub fn from_yaml(yaml: &str) -> Result, CubeError> { + let yaml_def: YamlTimeShiftDefinition = serde_yaml::from_str(yaml) + .map_err(|e| CubeError::user(format!("Failed to parse YAML: {}", e)))?; + Ok(yaml_def.build()) + } +} + impl TimeShiftDefinition for MockTimeShiftDefinition { crate::impl_static_data_method!(TimeShiftDefinitionStatic); @@ -50,29 +59,38 @@ impl TimeShiftDefinition for MockTimeShiftDefinition { #[cfg(test)] mod tests { use super::*; + use indoc::indoc; #[test] - fn test_mock_timeshift_with_sql() { - let timeshift = MockTimeShiftDefinition::builder() - .interval(Some("1 day".to_string())) - .timeshift_type(Some("prior".to_string())) - .name(Some("yesterday".to_string())) - .sql("{CUBE.date_field}".to_string()) - .build(); + fn test_from_yaml_all_fields() { + let yaml = indoc! {" + interval: 1 year + type: prior + name: date + sql: \"{CUBE}.created_at\" + "}; - assert_eq!(timeshift.static_data().interval, Some("1 day".to_string())); - assert!(timeshift.has_sql().unwrap()); - assert!(timeshift.sql().unwrap().is_some()); + let ts = MockTimeShiftDefinition::from_yaml(yaml).unwrap(); + let static_data = ts.static_data(); + + assert_eq!(static_data.interval, Some("1 year".to_string())); + assert_eq!(static_data.timeshift_type, Some("prior".to_string())); + assert_eq!(static_data.name, Some("date".to_string())); + assert!(ts.has_sql().unwrap()); } #[test] - fn test_mock_timeshift_without_sql() { - let timeshift = MockTimeShiftDefinition::builder() - .interval(Some("1 week".to_string())) - .build(); + fn test_from_yaml_minimal() { + let yaml = indoc! {" + interval: 1 month + "}; + + let ts = MockTimeShiftDefinition::from_yaml(yaml).unwrap(); + let static_data = ts.static_data(); - assert_eq!(timeshift.static_data().interval, Some("1 week".to_string())); - assert!(!timeshift.has_sql().unwrap()); - assert!(timeshift.sql().unwrap().is_none()); + assert_eq!(static_data.interval, Some("1 month".to_string())); + assert_eq!(static_data.timeshift_type, None); + assert_eq!(static_data.name, None); + assert!(!ts.has_sql().unwrap()); } } diff --git a/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mod.rs b/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mod.rs index 63975224378ce..d8fb8d1d84387 100644 --- a/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mod.rs +++ b/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mod.rs @@ -1,6 +1,8 @@ #[macro_use] mod macros; +mod yaml; + mod mock_base_tools; mod mock_case_definition; mod mock_case_else_item; @@ -35,6 +37,7 @@ pub use mock_base_tools::MockBaseTools; pub use mock_case_definition::MockCaseDefinition; pub use mock_case_else_item::MockCaseElseItem; pub use mock_case_item::MockCaseItem; +pub use mock_case_switch_definition::MockCaseSwitchDefinition; pub use mock_case_switch_else_item::MockCaseSwitchElseItem; pub use mock_case_switch_item::MockCaseSwitchItem; pub use mock_cube_definition::MockCubeDefinition; diff --git a/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/yaml/case.rs b/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/yaml/case.rs new file mode 100644 index 0000000000000..c06637ccaa7a1 --- /dev/null +++ b/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/yaml/case.rs @@ -0,0 +1,112 @@ +use crate::cube_bridge::string_or_sql::StringOrSql; +use crate::test_fixtures::cube_bridge::{ + MockCaseDefinition, MockCaseElseItem, MockCaseItem, MockCaseSwitchDefinition, + MockCaseSwitchElseItem, MockCaseSwitchItem, +}; +use serde::Deserialize; +use std::rc::Rc; + +#[derive(Debug, Deserialize)] +pub struct YamlCaseDefinition { + when: Vec, + #[serde(rename = "else")] + else_label: YamlCaseElseItem, +} + +#[derive(Debug, Deserialize)] +pub struct YamlCaseItem { + sql: String, + label: String, +} + +#[derive(Debug, Deserialize)] +pub struct YamlCaseElseItem { + label: String, +} + +#[derive(Debug, Deserialize)] +pub struct YamlCaseSwitchDefinition { + switch: String, + when: Vec, + #[serde(rename = "else")] + else_sql: YamlCaseSwitchElseItem, +} + +#[derive(Debug, Deserialize)] +pub struct YamlCaseSwitchItem { + value: String, + sql: String, +} + +#[derive(Debug, Deserialize)] +pub struct YamlCaseSwitchElseItem { + sql: String, +} + +#[derive(Debug, Deserialize)] +#[serde(untagged)] +pub enum YamlCaseVariant { + CaseSwitch(YamlCaseSwitchDefinition), + Case(YamlCaseDefinition), +} + +impl YamlCaseDefinition { + pub fn build(self) -> Rc { + let when_items: Vec> = self + .when + .into_iter() + .map(|item| { + Rc::new( + MockCaseItem::builder() + .sql(item.sql) + .label(StringOrSql::String(item.label)) + .build(), + ) + }) + .collect(); + + let else_item = Rc::new( + MockCaseElseItem::builder() + .label(StringOrSql::String(self.else_label.label)) + .build(), + ); + + Rc::new( + MockCaseDefinition::builder() + .when(when_items) + .else_label(else_item) + .build(), + ) + } +} + +impl YamlCaseSwitchDefinition { + pub fn build(self) -> Rc { + let when_items: Vec> = self + .when + .into_iter() + .map(|item| { + Rc::new( + MockCaseSwitchItem::builder() + .value(item.value) + .sql(item.sql) + .build(), + ) + }) + .collect(); + + let else_item = Rc::new( + MockCaseSwitchElseItem::builder() + .sql(self.else_sql.sql) + .build(), + ); + + Rc::new( + MockCaseSwitchDefinition::builder() + .switch(self.switch) + .when(when_items) + .else_sql(else_item) + .build(), + ) + } +} diff --git a/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/yaml/dimension.rs b/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/yaml/dimension.rs new file mode 100644 index 0000000000000..4330a71ee4306 --- /dev/null +++ b/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/yaml/dimension.rs @@ -0,0 +1,68 @@ +use crate::cube_bridge::case_variant::CaseVariant; +use crate::test_fixtures::cube_bridge::yaml::case::YamlCaseVariant; +use crate::test_fixtures::cube_bridge::yaml::timeshift::YamlTimeShiftDefinition; +use crate::test_fixtures::cube_bridge::MockDimensionDefinition; +use serde::Deserialize; +use std::rc::Rc; + +#[derive(Debug, Deserialize)] +pub struct YamlDimensionDefinition { + #[serde(rename = "type")] + dimension_type: String, + #[serde(default)] + multi_stage: Option, + #[serde(default, rename = "add_group_by")] + add_group_by_references: Option>, + #[serde(default)] + sub_query: Option, + #[serde(default)] + propagate_filters_to_sub_query: Option, + #[serde(default)] + values: Option>, + #[serde(default)] + primary_key: Option, + #[serde(default)] + sql: Option, + #[serde(default)] + case: Option, + #[serde(default)] + latitude: Option, + #[serde(default)] + longitude: Option, + #[serde(default)] + time_shift: Vec, +} + +impl YamlDimensionDefinition { + pub fn build(self) -> Rc { + let time_shift = if !self.time_shift.is_empty() { + Some(self.time_shift.into_iter().map(|ts| ts.build()).collect()) + } else { + None + }; + + let case = self.case.map(|cv| match cv { + YamlCaseVariant::Case(case_def) => Rc::new(CaseVariant::Case(case_def.build())), + YamlCaseVariant::CaseSwitch(switch_def) => { + Rc::new(CaseVariant::CaseSwitch(switch_def.build())) + } + }); + + Rc::new( + MockDimensionDefinition::builder() + .dimension_type(self.dimension_type) + .multi_stage(self.multi_stage) + .add_group_by_references(self.add_group_by_references) + .sub_query(self.sub_query) + .propagate_filters_to_sub_query(self.propagate_filters_to_sub_query) + .values(self.values) + .primary_key(self.primary_key) + .sql_opt(self.sql) + .case(case) + .latitude_opt(self.latitude) + .longitude_opt(self.longitude) + .time_shift(time_shift) + .build(), + ) + } +} diff --git a/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/yaml/measure.rs b/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/yaml/measure.rs new file mode 100644 index 0000000000000..eaff13b903970 --- /dev/null +++ b/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/yaml/measure.rs @@ -0,0 +1,108 @@ +use crate::cube_bridge::case_variant::CaseVariant; +use crate::cube_bridge::measure_definition::{RollingWindow, TimeShiftReference}; +use crate::test_fixtures::cube_bridge::yaml::case::YamlCaseVariant; +use crate::test_fixtures::cube_bridge::{ + MockMeasureDefinition, MockMemberOrderBy, MockStructWithSqlMember, +}; +use serde::Deserialize; +use std::rc::Rc; + +#[derive(Debug, Deserialize)] +pub struct YamlMeasureDefinition { + #[serde(rename = "type")] + measure_type: String, + #[serde(default)] + multi_stage: Option, + #[serde(default)] + reduce_by_references: Option>, + #[serde(default)] + add_group_by_references: Option>, + #[serde(default)] + group_by_references: Option>, + #[serde(default)] + time_shift_references: Option>, + #[serde(default)] + rolling_window: Option, + #[serde(default)] + sql: Option, + #[serde(default)] + case: Option, + #[serde(default)] + filters: Vec, + #[serde(default)] + drill_filters: Vec, + #[serde(default)] + order_by: Vec, +} + +#[derive(Debug, Deserialize)] +struct YamlFilter { + sql: String, +} + +#[derive(Debug, Deserialize)] +struct YamlOrderBy { + sql: String, + dir: String, +} + +impl YamlMeasureDefinition { + pub fn build(self) -> Rc { + let case = self.case.map(|cv| match cv { + YamlCaseVariant::Case(case_def) => Rc::new(CaseVariant::Case(case_def.build())), + YamlCaseVariant::CaseSwitch(switch_def) => { + Rc::new(CaseVariant::CaseSwitch(switch_def.build())) + } + }); + + let filters = if !self.filters.is_empty() { + Some( + self.filters + .into_iter() + .map(|f| Rc::new(MockStructWithSqlMember::builder().sql(f.sql).build())) + .collect(), + ) + } else { + None + }; + + let drill_filters = if !self.drill_filters.is_empty() { + Some( + self.drill_filters + .into_iter() + .map(|f| Rc::new(MockStructWithSqlMember::builder().sql(f.sql).build())) + .collect(), + ) + } else { + None + }; + + let order_by = if !self.order_by.is_empty() { + Some( + self.order_by + .into_iter() + .map(|o| Rc::new(MockMemberOrderBy::builder().sql(o.sql).dir(o.dir).build())) + .collect(), + ) + } else { + None + }; + + Rc::new( + MockMeasureDefinition::builder() + .measure_type(self.measure_type) + .multi_stage(self.multi_stage) + .reduce_by_references(self.reduce_by_references) + .add_group_by_references(self.add_group_by_references) + .group_by_references(self.group_by_references) + .time_shift_references(self.time_shift_references) + .rolling_window(self.rolling_window) + .sql_opt(self.sql) + .case(case) + .filters(filters) + .drill_filters(drill_filters) + .order_by(order_by) + .build(), + ) + } +} diff --git a/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/yaml/mod.rs b/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/yaml/mod.rs new file mode 100644 index 0000000000000..91ec14ad9cf37 --- /dev/null +++ b/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/yaml/mod.rs @@ -0,0 +1,11 @@ +pub mod case; +pub mod dimension; +pub mod measure; +pub mod schema; +pub mod segment; +pub mod timeshift; + +pub use dimension::YamlDimensionDefinition; +pub use measure::YamlMeasureDefinition; +pub use schema::YamlSchema; +pub use segment::YamlSegmentDefinition; diff --git a/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/yaml/schema.rs b/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/yaml/schema.rs new file mode 100644 index 0000000000000..a2ab3f9fc9cf2 --- /dev/null +++ b/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/yaml/schema.rs @@ -0,0 +1,411 @@ +use crate::test_fixtures::cube_bridge::yaml::{ + YamlDimensionDefinition, YamlMeasureDefinition, YamlSegmentDefinition, +}; +use crate::test_fixtures::cube_bridge::{ + MockCubeDefinition, MockJoinItemDefinition, MockSchema, MockSchemaBuilder, +}; +use cubenativeutils::CubeError; +use serde::Deserialize; +use std::rc::Rc; + +#[derive(Debug, Deserialize)] +pub struct YamlSchema { + cubes: Vec, + #[serde(default)] + views: Vec, +} + +#[derive(Debug, Deserialize)] +struct YamlCube { + name: String, + sql: String, + #[serde(default)] + joins: Vec, + #[serde(default)] + dimensions: Vec, + #[serde(default)] + measures: Vec, + #[serde(default)] + segments: Vec, +} + +#[derive(Debug, Deserialize)] +struct YamlJoin { + name: String, + sql: String, + relationship: String, +} + +#[derive(Debug, Deserialize)] +struct YamlDimensionEntry { + name: String, + #[serde(flatten)] + definition: YamlDimensionDefinition, +} + +#[derive(Debug, Deserialize)] +struct YamlMeasureEntry { + name: String, + #[serde(flatten)] + definition: YamlMeasureDefinition, +} + +#[derive(Debug, Deserialize)] +struct YamlSegmentEntry { + name: String, + #[serde(flatten)] + definition: YamlSegmentDefinition, +} + +#[derive(Debug, Deserialize)] +struct YamlView { + name: String, + cubes: Vec, +} + +#[derive(Debug, Deserialize)] +#[serde(untagged)] +enum YamlIncludes { + All(String), + List(Vec), +} + +#[derive(Debug, Deserialize)] +struct YamlViewCube { + join_path: String, + #[serde(default)] + includes: Option, +} + +impl YamlSchema { + pub fn build(self) -> Result { + let mut builder = MockSchemaBuilder::new(); + + for cube in self.cubes { + let cube_def = MockCubeDefinition::builder() + .name(cube.name.clone()) + .sql_table(cube.sql.clone()) + .build(); + + let mut cube_builder = builder.add_cube(cube.name).cube_def(cube_def); + + for join in cube.joins { + let join_def = MockJoinItemDefinition::builder() + .relationship(join.relationship) + .sql(join.sql) + .build(); + cube_builder = cube_builder.add_join(join.name, join_def); + } + + for dim_entry in cube.dimensions { + let dim_rc = dim_entry.definition.build(); + let dim_def = Rc::try_unwrap(dim_rc) + .ok() + .expect("Rc should have single owner"); + cube_builder = cube_builder.add_dimension(dim_entry.name, dim_def); + } + + for meas_entry in cube.measures { + let meas_rc = meas_entry.definition.build(); + let meas_def = Rc::try_unwrap(meas_rc) + .ok() + .expect("Rc should have single owner"); + cube_builder = cube_builder.add_measure(meas_entry.name, meas_def); + } + + for seg_entry in cube.segments { + let seg_rc = seg_entry.definition.build(); + let seg_def = Rc::try_unwrap(seg_rc) + .ok() + .expect("Rc should have single owner"); + cube_builder = cube_builder.add_segment(seg_entry.name, seg_def); + } + + builder = cube_builder.finish_cube(); + } + + for view in self.views { + let mut view_builder = builder.add_view(view.name); + + for view_cube in view.cubes { + let includes = match view_cube.includes { + Some(YamlIncludes::All(ref s)) if s == "*" => vec![], + Some(YamlIncludes::List(list)) => list, + _ => vec![], + }; + view_builder = view_builder.include_cube(view_cube.join_path, includes); + } + + builder = view_builder.finish_view(); + } + + Ok(builder.build()) + } +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::cube_bridge::dimension_definition::DimensionDefinition; + use crate::cube_bridge::measure_definition::MeasureDefinition; + use indoc::indoc; + + #[test] + fn test_parse_basic_cube() { + let yaml = indoc! {r#" + cubes: + - name: orders + sql: "SELECT * FROM orders" + dimensions: + - name: id + type: number + sql: id + primary_key: true + - name: status + type: string + sql: status + measures: + - name: count + type: count + "#}; + + let yaml_schema: YamlSchema = serde_yaml::from_str(yaml).unwrap(); + let schema = yaml_schema.build().unwrap(); + + assert!(schema.get_cube("orders").is_some()); + + let id_dim = schema.get_dimension("orders", "id").unwrap(); + assert_eq!(id_dim.static_data().dimension_type, "number"); + assert_eq!(id_dim.static_data().primary_key, Some(true)); + + let count_measure = schema.get_measure("orders", "count").unwrap(); + assert_eq!(count_measure.static_data().measure_type, "count"); + } + + #[test] + fn test_parse_cube_with_joins() { + let yaml = indoc! {r#" + cubes: + - name: orders + sql: "SELECT * FROM orders" + joins: + - name: users + sql: "{CUBE}.user_id = {users.id}" + relationship: many_to_one + dimensions: + - name: id + type: number + sql: id + "#}; + + let yaml_schema: YamlSchema = serde_yaml::from_str(yaml).unwrap(); + let schema = yaml_schema.build().unwrap(); + + let cube = schema.get_cube("orders").unwrap(); + assert_eq!(cube.definition.joins().len(), 1); + assert!(cube.definition.get_join("users").is_some()); + } + + #[test] + fn test_parse_view() { + let yaml = indoc! {r#" + cubes: + - name: orders + sql: "SELECT * FROM orders" + dimensions: + - name: id + type: number + sql: id + measures: + - name: count + type: count + views: + - name: orders_view + cubes: + - join_path: orders + includes: + - id + - count + "#}; + + let yaml_schema: YamlSchema = serde_yaml::from_str(yaml).unwrap(); + let schema = yaml_schema.build().unwrap(); + + assert!(schema.get_cube("orders_view").is_some()); + + let view_cube = schema.get_cube("orders_view").unwrap(); + assert!(view_cube.definition.static_data().is_view == Some(true)); + + assert!(schema.get_dimension("orders_view", "id").is_some()); + assert!(schema.get_measure("orders_view", "count").is_some()); + } + + #[test] + fn test_parse_view_with_wildcard_includes() { + let yaml = indoc! {r#" + cubes: + - name: orders + sql: "SELECT * FROM orders" + dimensions: + - name: id + type: number + sql: id + - name: status + type: string + sql: status + measures: + - name: count + type: count + - name: total + type: sum + sql: amount + views: + - name: orders_view + cubes: + - join_path: orders + includes: "*" + "#}; + + let yaml_schema: YamlSchema = serde_yaml::from_str(yaml).unwrap(); + let schema = yaml_schema.build().unwrap(); + + assert!(schema.get_cube("orders_view").is_some()); + + let view_cube = schema.get_cube("orders_view").unwrap(); + assert!(view_cube.definition.static_data().is_view == Some(true)); + + assert!(schema.get_dimension("orders_view", "id").is_some()); + assert!(schema.get_dimension("orders_view", "status").is_some()); + assert!(schema.get_measure("orders_view", "count").is_some()); + assert!(schema.get_measure("orders_view", "total").is_some()); + } + + #[test] + fn test_parse_sub_query_dimension() { + let yaml = indoc! {r#" + cubes: + - name: orders + sql: "SELECT * FROM orders" + dimensions: + - name: amount + type: number + sql: "{line_items.total}" + sub_query: true + "#}; + + let yaml_schema: YamlSchema = serde_yaml::from_str(yaml).unwrap(); + let schema = yaml_schema.build().unwrap(); + + let dim = schema.get_dimension("orders", "amount").unwrap(); + assert_eq!(dim.static_data().sub_query, Some(true)); + } + + #[test] + fn test_parse_multi_stage_example() { + let yaml = indoc! {r#" + cubes: + - name: orders + sql: "SELECT * FROM orders" + joins: + - name: line_items + sql: "{CUBE}.ID = {line_items}.order_id" + relationship: many_to_one + dimensions: + - name: id + type: number + sql: ID + primary_key: true + - name: status + type: string + sql: STATUS + - name: date + type: time + sql: CREATED_AT + - name: amount + type: number + sql: "{line_items.total_amount}" + sub_query: true + measures: + - name: count + type: count + - name: revenue + type: sum + sql: "CASE WHEN {CUBE}.status = 'completed' THEN {CUBE.amount} END" + + - name: line_items + sql: "SELECT * FROM line_items" + joins: + - name: products + sql: "{CUBE}.PRODUCT_ID = {products}.ID" + relationship: many_to_one + dimensions: + - name: id + type: number + sql: ID + primary_key: true + - name: price + type: number + sql: "{products.price}" + measures: + - name: count + type: count + - name: total_amount + type: sum + sql: "{price}" + + - name: products + sql: "SELECT * FROM products" + dimensions: + - name: id + type: number + sql: ID + primary_key: true + - name: price + type: number + sql: PRICE + measures: + - name: count + type: count + + views: + - name: orders_view + cubes: + - join_path: orders + includes: + - date + - revenue + - join_path: line_items.products + includes: + - price + "#}; + + let yaml_schema: YamlSchema = serde_yaml::from_str(yaml).unwrap(); + let schema = yaml_schema.build().unwrap(); + + assert!(schema.get_cube("orders").is_some()); + assert!(schema.get_cube("line_items").is_some()); + assert!(schema.get_cube("products").is_some()); + assert!(schema.get_cube("orders_view").is_some()); + + let orders_cube = schema.get_cube("orders").unwrap(); + assert_eq!(orders_cube.definition.joins().len(), 1); + + let line_items_cube = schema.get_cube("line_items").unwrap(); + assert_eq!(line_items_cube.definition.joins().len(), 1); + + let amount_dim = schema.get_dimension("orders", "amount").unwrap(); + assert_eq!(amount_dim.static_data().sub_query, Some(true)); + + let view_date = schema.get_dimension("orders_view", "date").unwrap(); + let date_sql = view_date.sql().unwrap().unwrap(); + assert_eq!(date_sql.args_names(), &vec!["orders"]); + + let view_revenue = schema.get_measure("orders_view", "revenue").unwrap(); + let revenue_sql = view_revenue.sql().unwrap().unwrap(); + assert_eq!(revenue_sql.args_names(), &vec!["orders"]); + + let view_price = schema.get_dimension("orders_view", "price").unwrap(); + let price_sql = view_price.sql().unwrap().unwrap(); + assert_eq!(price_sql.args_names(), &vec!["line_items"]); + } +} diff --git a/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/yaml/segment.rs b/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/yaml/segment.rs new file mode 100644 index 0000000000000..b530793c35a81 --- /dev/null +++ b/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/yaml/segment.rs @@ -0,0 +1,21 @@ +use crate::test_fixtures::cube_bridge::MockSegmentDefinition; +use serde::Deserialize; +use std::rc::Rc; + +#[derive(Debug, Deserialize)] +pub struct YamlSegmentDefinition { + #[serde(rename = "type", default)] + segment_type: Option, + sql: String, +} + +impl YamlSegmentDefinition { + pub fn build(self) -> Rc { + Rc::new( + MockSegmentDefinition::builder() + .segment_type(self.segment_type) + .sql(self.sql) + .build(), + ) + } +} diff --git a/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/yaml/timeshift.rs b/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/yaml/timeshift.rs new file mode 100644 index 0000000000000..84c23096efade --- /dev/null +++ b/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/yaml/timeshift.rs @@ -0,0 +1,28 @@ +use crate::test_fixtures::cube_bridge::MockTimeShiftDefinition; +use serde::Deserialize; +use std::rc::Rc; + +#[derive(Debug, Deserialize)] +pub struct YamlTimeShiftDefinition { + #[serde(default)] + interval: Option, + #[serde(rename = "type", default)] + timeshift_type: Option, + #[serde(default)] + name: Option, + #[serde(default)] + sql: Option, +} + +impl YamlTimeShiftDefinition { + pub fn build(self) -> Rc { + let result = MockTimeShiftDefinition::builder() + .interval(self.interval) + .timeshift_type(self.timeshift_type) + .name(self.name) + .sql_opt(self.sql) + .build(); + + Rc::new(result) + } +} diff --git a/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/mod.rs b/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/mod.rs index d3cdba19e4dfc..77e0ccc183f05 100644 --- a/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/mod.rs +++ b/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/mod.rs @@ -1,3 +1,4 @@ pub mod cube_bridge; pub mod graph_utils; pub mod schemas; +pub mod test_utils; diff --git a/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/schemas/mod.rs b/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/schemas/mod.rs index c8f09cda01c0c..08d612591025e 100644 --- a/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/schemas/mod.rs +++ b/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/schemas/mod.rs @@ -1,7 +1,3 @@ -pub mod visitors_schema; - -pub use visitors_schema::create_visitors_schema; - use crate::planner::sql_evaluator::Compiler; use crate::test_fixtures::cube_bridge::{MockBaseTools, MockCubeEvaluator, MockSecurityContext}; use chrono_tz::Tz; diff --git a/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/schemas/visitors_schema.rs b/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/schemas/visitors_schema.rs deleted file mode 100644 index 8548504fa5b6d..0000000000000 --- a/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/schemas/visitors_schema.rs +++ /dev/null @@ -1,326 +0,0 @@ -use crate::test_fixtures::cube_bridge::{ - MockDimensionDefinition, MockMeasureDefinition, MockSchema, MockSchemaBuilder, - MockSegmentDefinition, -}; - -/// Creates a schema for visitors and visitor_checkins cubes -/// -/// This schema demonstrates: -/// - Basic dimensions with different types -/// - Geo dimensions with latitude/longitude -/// - Sub-query dimensions that reference other cubes -/// - Dimensions with complex SQL including special characters (question marks) -/// - Time dimensions -pub fn create_visitors_schema() -> MockSchema { - MockSchemaBuilder::new() - // visitor_checkins cube - referenced by visitors cube - .add_cube("visitor_checkins") - .add_dimension( - "id", - MockDimensionDefinition::builder() - .dimension_type("number".to_string()) - .sql("id".to_string()) - .build(), - ) - .add_dimension( - "visitor_id", - MockDimensionDefinition::builder() - .dimension_type("number".to_string()) - .sql("visitor_id".to_string()) - .build(), - ) - .add_dimension( - "minDate", - MockDimensionDefinition::builder() - .dimension_type("time".to_string()) - .sql("MIN(created_at)".to_string()) - .build(), - ) - .add_dimension( - "minDate1", - MockDimensionDefinition::builder() - .dimension_type("time".to_string()) - .sql("MIN(created_at) + INTERVAL '1 day'".to_string()) - .build(), - ) - .add_measure( - "count", - MockMeasureDefinition::builder() - .measure_type("count".to_string()) - .sql("COUNT(*)".to_string()) - .build(), - ) - .finish_cube() - // visitors cube - main cube with various dimension types - .add_cube("visitors") - .add_dimension( - "id", - MockDimensionDefinition::builder() - .dimension_type("number".to_string()) - .sql("id".to_string()) - .build(), - ) - .add_dimension( - "visitor_id", - MockDimensionDefinition::builder() - .dimension_type("number".to_string()) - .sql("{CUBE}.visitor_id".to_string()) - .build(), - ) - .add_dimension( - "visitor_id_proxy", - MockDimensionDefinition::builder() - .dimension_type("number".to_string()) - .sql("{visitors.visitor_id}".to_string()) - .build(), - ) - .add_dimension( - "visitor_id_twice", - MockDimensionDefinition::builder() - .dimension_type("number".to_string()) - .sql("{visitor_id} * 2".to_string()) - .build(), - ) - .add_dimension( - "source", - MockDimensionDefinition::builder() - .dimension_type("string".to_string()) - .sql("source".to_string()) - .build(), - ) - .add_dimension( - "source_concat_id", - MockDimensionDefinition::builder() - .dimension_type("string".to_string()) - .sql("CONCAT({CUBE.source}, ' ', {visitors.visitor_id})".to_string()) - .build(), - ) - .add_dimension( - "created_at", - MockDimensionDefinition::builder() - .dimension_type("time".to_string()) - .sql("created_at".to_string()) - .build(), - ) - // Sub-query dimension referencing visitor_checkins.minDate - .add_dimension( - "minVisitorCheckinDate", - MockDimensionDefinition::builder() - .dimension_type("time".to_string()) - .sql("{visitor_checkins.minDate}".to_string()) - .sub_query(Some(true)) - .build(), - ) - // Sub-query dimension referencing visitor_checkins.minDate1 - .add_dimension( - "minVisitorCheckinDate1", - MockDimensionDefinition::builder() - .dimension_type("time".to_string()) - .sql("{visitor_checkins.minDate1}".to_string()) - .sub_query(Some(true)) - .build(), - ) - // Geo dimension with latitude and longitude - .add_dimension( - "location", - MockDimensionDefinition::builder() - .dimension_type("geo".to_string()) - .latitude("latitude".to_string()) - .longitude("longitude".to_string()) - .build(), - ) - // Dimension with SQL containing question marks (special characters) - .add_dimension( - "questionMark", - MockDimensionDefinition::builder() - .dimension_type("string".to_string()) - .sql( - "replace('some string question string ? ?? ???', 'string', 'with some ? ?? ???')" - .to_string(), - ) - .build(), - ) - .add_measure( - "count", - MockMeasureDefinition::builder() - .measure_type("count".to_string()) - .sql("COUNT(*)".to_string()) - .build(), - ) - .add_measure( - "total_revenue", - MockMeasureDefinition::builder() - .measure_type("sum".to_string()) - .sql("revenue".to_string()) - .build(), - ) - .add_measure( - "total_revenue_proxy", - MockMeasureDefinition::builder() - .measure_type("number".to_string()) - .sql("{total_revenue}".to_string()) - .build(), - ) - .add_measure( - "revenue", - MockMeasureDefinition::builder() - .measure_type("sum".to_string()) - .sql("{CUBE}.revenue".to_string()) - .build(), - ) - .add_measure( - "total_revenue_per_count", - MockMeasureDefinition::builder() - .measure_type("number".to_string()) - .sql("{visitors.count} / {total_revenue}".to_string()) - .build(), - ) - .add_segment( - "google", - MockSegmentDefinition::builder() - .sql("{CUBE.source} = 'google'".to_string()) - .build(), - ) - .finish_cube() - .add_view("visitors_visitors_checkins") - .include_cube("visitors", vec!["id".to_string(), "source_concat_id".to_string()]) - .include_cube("visitors.visitor_checkins", vec!["visitor_id".to_string(), "count".to_string()]) - .finish_view() - .build() -} - -#[cfg(test)] -mod tests { - use super::*; - use crate::cube_bridge::dimension_definition::DimensionDefinition; - use crate::cube_bridge::segment_definition::SegmentDefinition; - use crate::test_fixtures::cube_bridge::MockBaseTools; - - #[test] - fn test_schema_has_both_cubes() { - let schema = create_visitors_schema(); - - assert!(schema.get_cube("visitors").is_some()); - assert!(schema.get_cube("visitor_checkins").is_some()); - } - - #[test] - fn test_visitors_dimensions() { - use crate::test_fixtures::cube_bridge::MockSecurityContext; - use std::rc::Rc; - - let schema = create_visitors_schema(); - - // Basic dimensions - assert!(schema.get_dimension("visitors", "visitor_id").is_some()); - assert!(schema.get_dimension("visitors", "source").is_some()); - assert!(schema.get_dimension("visitors", "created_at").is_some()); - - // Sub-query dimensions - let min_checkin = schema - .get_dimension("visitors", "minVisitorCheckinDate") - .unwrap(); - assert_eq!(min_checkin.static_data().dimension_type, "time"); - assert_eq!(min_checkin.static_data().sub_query, Some(true)); - - let min_checkin1 = schema - .get_dimension("visitors", "minVisitorCheckinDate1") - .unwrap(); - assert_eq!(min_checkin1.static_data().dimension_type, "time"); - assert_eq!(min_checkin1.static_data().sub_query, Some(true)); - - // Geo dimension - let location = schema.get_dimension("visitors", "location").unwrap(); - assert_eq!(location.static_data().dimension_type, "geo"); - assert!(location.has_latitude().unwrap()); - assert!(location.has_longitude().unwrap()); - - // Dimension with special characters - let question_mark = schema.get_dimension("visitors", "questionMark").unwrap(); - assert_eq!(question_mark.static_data().dimension_type, "string"); - let sql = question_mark.sql().unwrap().unwrap(); - // Verify SQL contains question marks - let (template, _args) = sql - .compile_template_sql( - Rc::new(MockBaseTools::default()), - Rc::new(MockSecurityContext), - ) - .unwrap(); - match template { - crate::cube_bridge::member_sql::SqlTemplate::String(s) => { - assert!(s.contains("?")); - } - _ => panic!("Expected String template"), - } - } - - #[test] - fn test_visitor_checkins_dimensions() { - let schema = create_visitors_schema(); - - assert!(schema - .get_dimension("visitor_checkins", "visitor_id") - .is_some()); - - let min_date = schema.get_dimension("visitor_checkins", "minDate").unwrap(); - assert_eq!(min_date.static_data().dimension_type, "time"); - - let min_date1 = schema - .get_dimension("visitor_checkins", "minDate1") - .unwrap(); - assert_eq!(min_date1.static_data().dimension_type, "time"); - } - - #[test] - fn test_visitors_measures() { - let schema = create_visitors_schema(); - - let count = schema.get_measure("visitors", "count").unwrap(); - assert_eq!(count.static_data().measure_type, "count"); - - let revenue = schema.get_measure("visitors", "total_revenue").unwrap(); - assert_eq!(revenue.static_data().measure_type, "sum"); - } - - #[test] - fn test_visitors_segments() { - let schema = create_visitors_schema(); - - let google_segment = schema.get_segment("visitors", "google").unwrap(); - let sql = google_segment.sql().unwrap(); - - assert_eq!(sql.args_names(), &vec!["CUBE"]); - } - - #[test] - fn test_subquery_dimension_references() { - let schema = create_visitors_schema(); - - let min_checkin = schema - .get_dimension("visitors", "minVisitorCheckinDate") - .unwrap(); - let sql = min_checkin.sql().unwrap().unwrap(); - - // Should reference visitor_checkins.minDate - assert_eq!(sql.args_names(), &vec!["visitor_checkins"]); - } - - #[test] - fn test_geo_dimension_structure() { - let schema = create_visitors_schema(); - - let location = schema.get_dimension("visitors", "location").unwrap(); - - assert_eq!(location.static_data().dimension_type, "geo"); - - // Test using trait methods - let latitude = location.latitude().unwrap().unwrap(); - let lat_sql = latitude.sql().unwrap(); - // Verify the SQL is correct - it should have no template parameters - assert_eq!(lat_sql.args_names().len(), 0); - - let longitude = location.longitude().unwrap().unwrap(); - let lon_sql = longitude.sql().unwrap(); - assert_eq!(lon_sql.args_names().len(), 0); - } -} diff --git a/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/schemas/yaml_files/common/simple.yaml b/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/schemas/yaml_files/common/simple.yaml new file mode 100644 index 0000000000000..e1b1728c4b5ca --- /dev/null +++ b/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/schemas/yaml_files/common/simple.yaml @@ -0,0 +1,76 @@ +cubes: + - name: customers + sql: "SELECT * FROM customers" + dimensions: + - name: id + type: number + sql: id + primary_key: true + - name: name + type: string + sql: name + - name: city + type: string + sql: city + - name: created_at + type: time + sql: created_at + measures: + - name: count + type: count + sql: "COUNT(*)" + - name: max_age + type: max + sql: age + - name: min_age + type: min + sql: age + - name: payments + type: sum + sql: payments + - name: payments_per_order + type: sum + sql: "{payments} / {orders.count}" + + - name: orders + sql: "SELECT * FROM orders" + joins: + - name: customers + relationship: many_to_one + sql: "{orders}.customer_id = {customers.id}" + dimensions: + - name: id + type: number + sql: id + primary_key: true + - name: status + type: string + sql: status + - name: priority + type: string + sql: priority + - name: created_at + type: time + sql: created_at + measures: + - name: count + type: count + sql: "COUNT(*)" + - name: max_amount + type: max + sql: amount + - name: min_amount + type: min + sql: amount + +views: + - name: orders_with_customer + cubes: + - join_path: orders + includes: + - id + - status + - count + - join_path: orders.customers + includes: + - name diff --git a/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/schemas/yaml_files/common/visitors.yaml b/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/schemas/yaml_files/common/visitors.yaml new file mode 100644 index 0000000000000..523983e23a8c8 --- /dev/null +++ b/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/schemas/yaml_files/common/visitors.yaml @@ -0,0 +1,97 @@ +cubes: + - name: visitor_checkins + sql: "SELECT * FROM visitor_checkins" + dimensions: + - name: id + type: number + sql: id + - name: visitor_id + type: number + sql: visitor_id + - name: minDate + type: time + sql: "MIN(created_at)" + - name: minDate1 + type: time + sql: "MIN(created_at) + INTERVAL '1 day'" + measures: + - name: count + type: count + sql: "COUNT(*)" + + - name: visitors + sql: "SELECT * FROM visitors" + dimensions: + - name: id + type: number + sql: id + - name: visitor_id + type: number + sql: "{CUBE}.visitor_id" + - name: wrong_double_cube_ref + type: number + sql: "{CUBE}.visitor_id + {visitor_checkins}.visitor_id" + - name: wrong_foreign_cube_ref + type: number + sql: "{visitor_checkins}.visitor_id" + - name: visitor_id_proxy + type: number + sql: "{visitors.visitor_id}" + - name: visitor_id_twice + type: number + sql: "{visitor_id} * 2" + - name: source + type: string + sql: source + - name: source_concat_id + type: string + sql: "CONCAT({CUBE.source}, ' ', {visitors.visitor_id})" + - name: created_at + type: time + sql: created_at + - name: minVisitorCheckinDate + type: time + sql: "{visitor_checkins.minDate}" + sub_query: true + - name: minVisitorCheckinDate1 + type: time + sql: "{visitor_checkins.minDate1}" + sub_query: true + - name: location + type: geo + latitude: latitude + longitude: longitude + - name: questionMark + type: string + sql: "replace('some string question string ? ?? ???', 'string', 'with some ? ?? ???')" + measures: + - name: count + type: count + sql: "COUNT(*)" + - name: total_revenue + type: sum + sql: revenue + - name: total_revenue_proxy + type: number + sql: "{total_revenue}" + - name: revenue + type: sum + sql: "{CUBE}.revenue" + - name: total_revenue_per_count + type: number + sql: "{visitors.count} / {total_revenue}" + segments: + - name: google + sql: "{CUBE.source} = 'google'" + +views: + - name: visitors_visitors_checkins + cubes: + - join_path: visitors + includes: + - id + - source_concat_id + - join_path: visitors.visitor_checkins + includes: + - visitor_id + - count diff --git a/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/test_utils/mod.rs b/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/test_utils/mod.rs new file mode 100644 index 0000000000000..47e4c37101126 --- /dev/null +++ b/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/test_utils/mod.rs @@ -0,0 +1,3 @@ +mod test_context; + +pub use test_context::TestContext; diff --git a/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/test_utils/test_context.rs b/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/test_utils/test_context.rs new file mode 100644 index 0000000000000..8c86ee77e5b0c --- /dev/null +++ b/rust/cubesqlplanner/cubesqlplanner/src/test_fixtures/test_utils/test_context.rs @@ -0,0 +1,75 @@ +use crate::planner::query_tools::QueryTools; +use crate::planner::sql_evaluator::sql_nodes::SqlNodesFactory; +use crate::planner::sql_evaluator::{MemberSymbol, SqlEvaluatorVisitor}; +use crate::planner::sql_templates::PlanSqlTemplates; +use crate::test_fixtures::cube_bridge::{MockSchema, MockSecurityContext}; +use chrono_tz::Tz; +use cubenativeutils::CubeError; +use std::rc::Rc; + +/// Test context providing query tools and symbol creation helpers +pub struct TestContext { + query_tools: Rc, +} + +impl TestContext { + pub fn new(schema: MockSchema) -> Result { + Self::new_with_timezone(schema, Tz::UTC) + } + + pub fn new_with_timezone(schema: MockSchema, timezone: Tz) -> Result { + let base_tools = schema.create_base_tools()?; + let join_graph = Rc::new(schema.create_join_graph()?); + let evaluator = schema.create_evaluator(); + let security_context: Rc = + Rc::new(MockSecurityContext); + + let query_tools = QueryTools::try_new( + evaluator, + security_context, + Rc::new(base_tools), + join_graph, + Some(timezone.to_string()), + false, // export_annotated_sql + )?; + + Ok(Self { query_tools }) + } + + #[allow(dead_code)] + pub fn query_tools(&self) -> &Rc { + &self.query_tools + } + + #[allow(dead_code)] + pub fn create_symbol(&self, member_path: &str) -> Result, CubeError> { + self.query_tools + .evaluator_compiler() + .borrow_mut() + .add_auto_resolved_member_evaluator(member_path.to_string()) + } + + pub fn create_dimension(&self, path: &str) -> Result, CubeError> { + self.query_tools + .evaluator_compiler() + .borrow_mut() + .add_dimension_evaluator(path.to_string()) + } + + pub fn create_measure(&self, path: &str) -> Result, CubeError> { + self.query_tools + .evaluator_compiler() + .borrow_mut() + .add_measure_evaluator(path.to_string()) + } + + pub fn evaluate_symbol(&self, symbol: &Rc) -> Result { + let visitor = SqlEvaluatorVisitor::new(self.query_tools.clone(), None); + let base_tools = self.query_tools.base_tools(); + let driver_tools = base_tools.driver_tools(false)?; + let templates = PlanSqlTemplates::try_new(driver_tools, false)?; + let node_processor = SqlNodesFactory::default().default_node_processor(); + + visitor.apply(symbol, node_processor, &templates) + } +} diff --git a/rust/cubesqlplanner/cubesqlplanner/src/tests/cube_evaluator/compilation.rs b/rust/cubesqlplanner/cubesqlplanner/src/tests/cube_evaluator/compilation.rs index 35e81092402b6..f0cb8b507f209 100644 --- a/rust/cubesqlplanner/cubesqlplanner/src/tests/cube_evaluator/compilation.rs +++ b/rust/cubesqlplanner/cubesqlplanner/src/tests/cube_evaluator/compilation.rs @@ -1,10 +1,11 @@ //! Tests for Compiler member evaluation -use crate::test_fixtures::schemas::{create_visitors_schema, TestCompiler}; +use crate::test_fixtures::{cube_bridge::MockSchema, schemas::TestCompiler}; #[test] fn test_add_dimension_evaluator_number_dimension() { - let evaluator = create_visitors_schema().create_evaluator(); + let schema = MockSchema::from_yaml_file("common/visitors.yaml"); + let evaluator = schema.create_evaluator(); let mut test_compiler = TestCompiler::new(evaluator); let symbol = test_compiler @@ -23,7 +24,8 @@ fn test_add_dimension_evaluator_number_dimension() { #[test] fn test_add_dimension_evaluator_string_dimension() { - let evaluator = create_visitors_schema().create_evaluator(); + let schema = MockSchema::from_yaml_file("common/visitors.yaml"); + let evaluator = schema.create_evaluator(); let mut test_compiler = TestCompiler::new(evaluator); let symbol = test_compiler @@ -42,7 +44,8 @@ fn test_add_dimension_evaluator_string_dimension() { #[test] fn test_add_dimension_evaluator_caching() { - let evaluator = create_visitors_schema().create_evaluator(); + let schema = MockSchema::from_yaml_file("common/visitors.yaml"); + let evaluator = schema.create_evaluator(); let mut test_compiler = TestCompiler::new(evaluator); let symbol1 = test_compiler @@ -59,7 +62,8 @@ fn test_add_dimension_evaluator_caching() { #[test] fn test_add_dimension_evaluator_invalid_path() { - let evaluator = create_visitors_schema().create_evaluator(); + let schema = MockSchema::from_yaml_file("common/visitors.yaml"); + let evaluator = schema.create_evaluator(); let mut test_compiler = TestCompiler::new(evaluator); let result = test_compiler @@ -71,7 +75,8 @@ fn test_add_dimension_evaluator_invalid_path() { #[test] fn test_add_dimension_evaluator_multiple_dimensions() { - let evaluator = create_visitors_schema().create_evaluator(); + let schema = MockSchema::from_yaml_file("common/visitors.yaml"); + let evaluator = schema.create_evaluator(); let mut test_compiler = TestCompiler::new(evaluator); let id_symbol = test_compiler @@ -106,7 +111,8 @@ fn test_add_dimension_evaluator_multiple_dimensions() { #[test] fn test_add_measure_evaluator_count_measure() { - let evaluator = create_visitors_schema().create_evaluator(); + let schema = MockSchema::from_yaml_file("common/visitors.yaml"); + let evaluator = schema.create_evaluator(); let mut test_compiler = TestCompiler::new(evaluator); let symbol = test_compiler @@ -125,7 +131,8 @@ fn test_add_measure_evaluator_count_measure() { #[test] fn test_add_measure_evaluator_sum_measure() { - let evaluator = create_visitors_schema().create_evaluator(); + let schema = MockSchema::from_yaml_file("common/visitors.yaml"); + let evaluator = schema.create_evaluator(); let mut test_compiler = TestCompiler::new(evaluator); let symbol = test_compiler @@ -144,7 +151,8 @@ fn test_add_measure_evaluator_sum_measure() { #[test] fn test_add_measure_evaluator_caching() { - let evaluator = create_visitors_schema().create_evaluator(); + let schema = MockSchema::from_yaml_file("common/visitors.yaml"); + let evaluator = schema.create_evaluator(); let mut test_compiler = TestCompiler::new(evaluator); let symbol1 = test_compiler @@ -161,7 +169,8 @@ fn test_add_measure_evaluator_caching() { #[test] fn test_add_measure_evaluator_invalid_path() { - let evaluator = create_visitors_schema().create_evaluator(); + let schema = MockSchema::from_yaml_file("common/visitors.yaml"); + let evaluator = schema.create_evaluator(); let mut test_compiler = TestCompiler::new(evaluator); let result = test_compiler @@ -173,7 +182,8 @@ fn test_add_measure_evaluator_invalid_path() { #[test] fn test_add_measure_evaluator_multiple_measures() { - let evaluator = create_visitors_schema().create_evaluator(); + let schema = MockSchema::from_yaml_file("common/visitors.yaml"); + let evaluator = schema.create_evaluator(); let mut test_compiler = TestCompiler::new(evaluator); let count_symbol = test_compiler @@ -195,7 +205,8 @@ fn test_add_measure_evaluator_multiple_measures() { #[test] fn test_add_auto_resolved_member_evaluator_dimension() { - let evaluator = create_visitors_schema().create_evaluator(); + let schema = MockSchema::from_yaml_file("common/visitors.yaml"); + let evaluator = schema.create_evaluator(); let mut test_compiler = TestCompiler::new(evaluator); let symbol = test_compiler @@ -214,7 +225,8 @@ fn test_add_auto_resolved_member_evaluator_dimension() { #[test] fn test_add_auto_resolved_member_evaluator_measure() { - let evaluator = create_visitors_schema().create_evaluator(); + let schema = MockSchema::from_yaml_file("common/visitors.yaml"); + let evaluator = schema.create_evaluator(); let mut test_compiler = TestCompiler::new(evaluator); let symbol = test_compiler @@ -233,7 +245,8 @@ fn test_add_auto_resolved_member_evaluator_measure() { #[test] fn test_add_cube_table_evaluator() { - let evaluator = create_visitors_schema().create_evaluator(); + let schema = MockSchema::from_yaml_file("common/visitors.yaml"); + let evaluator = schema.create_evaluator(); let mut test_compiler = TestCompiler::new(evaluator); let symbol = test_compiler @@ -250,7 +263,8 @@ fn test_add_cube_table_evaluator() { #[test] fn test_add_cube_name_evaluator() { - let evaluator = create_visitors_schema().create_evaluator(); + let schema = MockSchema::from_yaml_file("common/visitors.yaml"); + let evaluator = schema.create_evaluator(); let mut test_compiler = TestCompiler::new(evaluator); let symbol = test_compiler @@ -269,7 +283,8 @@ fn test_add_cube_name_evaluator() { #[test] fn test_dimension_with_cube_table_dependency() { - let evaluator = create_visitors_schema().create_evaluator(); + let schema = MockSchema::from_yaml_file("common/visitors.yaml"); + let evaluator = schema.create_evaluator(); let mut test_compiler = TestCompiler::new(evaluator); // visitor_id has dependency on {CUBE.}visitor_id @@ -295,7 +310,8 @@ fn test_dimension_with_cube_table_dependency() { #[test] fn test_dimension_with_member_dependency_no_prefix() { - let evaluator = create_visitors_schema().create_evaluator(); + let schema = MockSchema::from_yaml_file("common/visitors.yaml"); + let evaluator = schema.create_evaluator(); let mut test_compiler = TestCompiler::new(evaluator); // visitor_id_twice has dependency on {visitor_id} without cube prefix @@ -325,7 +341,8 @@ fn test_dimension_with_member_dependency_no_prefix() { #[test] fn test_dimension_with_mixed_dependencies() { - let evaluator = create_visitors_schema().create_evaluator(); + let schema = MockSchema::from_yaml_file("common/visitors.yaml"); + let evaluator = schema.create_evaluator(); let mut test_compiler = TestCompiler::new(evaluator); // source_concat_id has dependencies on {CUBE.source} and {visitors.visitor_id} @@ -367,7 +384,8 @@ fn test_dimension_with_mixed_dependencies() { #[test] fn test_measure_with_cube_table_dependency() { - let evaluator = create_visitors_schema().create_evaluator(); + let schema = MockSchema::from_yaml_file("common/visitors.yaml"); + let evaluator = schema.create_evaluator(); let mut test_compiler = TestCompiler::new(evaluator); // revenue has dependency on {CUBE}.revenue @@ -393,7 +411,8 @@ fn test_measure_with_cube_table_dependency() { #[test] fn test_measure_with_explicit_cube_and_member_dependencies() { - let evaluator = create_visitors_schema().create_evaluator(); + let schema = MockSchema::from_yaml_file("common/visitors.yaml"); + let evaluator = schema.create_evaluator(); let mut test_compiler = TestCompiler::new(evaluator); // total_revenue_per_count has dependencies on {visitors.count} and {total_revenue} @@ -431,7 +450,8 @@ fn test_measure_with_explicit_cube_and_member_dependencies() { #[test] fn test_view_dimension_compilation() { - let evaluator = create_visitors_schema().create_evaluator(); + let schema = MockSchema::from_yaml_file("common/visitors.yaml"); + let evaluator = schema.create_evaluator(); let mut test_compiler = TestCompiler::new(evaluator); // Compile dimension from view with simple join path @@ -499,7 +519,8 @@ fn test_view_dimension_compilation() { #[test] fn test_view_measure_compilation() { - let evaluator = create_visitors_schema().create_evaluator(); + let schema = MockSchema::from_yaml_file("common/visitors.yaml"); + let evaluator = schema.create_evaluator(); let mut test_compiler = TestCompiler::new(evaluator); // Compile measure from view with long join path @@ -539,7 +560,8 @@ fn test_view_measure_compilation() { #[test] fn test_proxy_dimension_compilation() { - let evaluator = create_visitors_schema().create_evaluator(); + let schema = MockSchema::from_yaml_file("common/visitors.yaml"); + let evaluator = schema.create_evaluator(); let mut test_compiler = TestCompiler::new(evaluator); // Compile proxy dimension that references another dimension @@ -588,7 +610,8 @@ fn test_proxy_dimension_compilation() { #[test] fn test_proxy_measure_compilation() { - let evaluator = create_visitors_schema().create_evaluator(); + let schema = MockSchema::from_yaml_file("common/visitors.yaml"); + let evaluator = schema.create_evaluator(); let mut test_compiler = TestCompiler::new(evaluator); // Compile proxy measure that references another measure @@ -604,8 +627,9 @@ fn test_proxy_measure_compilation() { assert_eq!(proxy_symbol.name(), "total_revenue_proxy"); let measure = proxy_symbol.as_measure().unwrap(); + let dependencies = proxy_symbol.get_dependencies(); + assert_eq!(dependencies.len(), 1, "Should have 1 measure dependencies"); - // Check that it's NOT a view member assert!(!measure.is_view(), "Proxy should not be a view member"); // Check that it IS a reference (proxy references another member) @@ -637,7 +661,8 @@ fn test_proxy_measure_compilation() { #[test] fn test_time_dimension_with_granularity_compilation() { - let evaluator = create_visitors_schema().create_evaluator(); + let schema = MockSchema::from_yaml_file("common/visitors.yaml"); + let evaluator = schema.create_evaluator(); let mut test_compiler = TestCompiler::new(evaluator); // Compile time dimension with month granularity diff --git a/rust/cubesqlplanner/cubesqlplanner/src/tests/cube_evaluator/symbol_evaluator.rs b/rust/cubesqlplanner/cubesqlplanner/src/tests/cube_evaluator/symbol_evaluator.rs index e7cd72feb450b..5a47266f60f5a 100644 --- a/rust/cubesqlplanner/cubesqlplanner/src/tests/cube_evaluator/symbol_evaluator.rs +++ b/rust/cubesqlplanner/cubesqlplanner/src/tests/cube_evaluator/symbol_evaluator.rs @@ -1,326 +1,143 @@ //! Tests for SQL generation for individual symbols -use crate::cube_bridge::base_tools::BaseTools; -use crate::planner::query_tools::QueryTools; -use crate::planner::sql_evaluator::sql_nodes::{SqlNode, SqlNodesFactory}; -use crate::planner::sql_evaluator::SqlEvaluatorVisitor; -use crate::planner::sql_templates::PlanSqlTemplates; -use crate::test_fixtures::cube_bridge::{ - MockBaseTools, MockCubeDefinition, MockDimensionDefinition, MockJoinGraph, - MockMeasureDefinition, MockSchema, MockSchemaBuilder, MockSecurityContext, -}; -use cubenativeutils::CubeError; -use std::rc::Rc; +use crate::test_fixtures::cube_bridge::MockSchema; +use crate::test_fixtures::test_utils::TestContext; +use indoc::indoc; -/// Creates a schema for count measure testing with no primary keys fn create_count_schema_no_pk() -> MockSchema { - MockSchemaBuilder::new() - .add_cube("users") - .cube_def( - MockCubeDefinition::builder() - .name("users".to_string()) - .sql("SELECT 1".to_string()) - .build(), - ) - .add_dimension( - "id", - MockDimensionDefinition::builder() - .dimension_type("number".to_string()) - .sql("id".to_string()) - .build(), - ) - .add_dimension( - "userName", - MockDimensionDefinition::builder() - .dimension_type("string".to_string()) - .sql("user_name".to_string()) - .build(), - ) - .add_measure( - "count", - MockMeasureDefinition::builder() - .measure_type("count".to_string()) - .build(), - ) - .finish_cube() - .build() + let yaml = indoc! {r#" + cubes: + - name: users + sql: "SELECT 1" + dimensions: + - name: id + type: number + sql: id + - name: userName + type: string + sql: user_name + measures: + - name: count + type: count + "#}; + MockSchema::from_yaml(yaml).unwrap() } -/// Creates a schema for count measure testing with one primary key fn create_count_schema_one_pk() -> MockSchema { - MockSchemaBuilder::new() - .add_cube("users") - .cube_def( - MockCubeDefinition::builder() - .name("users".to_string()) - .sql("SELECT 1".to_string()) - .build(), - ) - .add_dimension( - "id", - MockDimensionDefinition::builder() - .dimension_type("number".to_string()) - .sql("id".to_string()) - .primary_key(Some(true)) - .build(), - ) - .add_dimension( - "userName", - MockDimensionDefinition::builder() - .dimension_type("string".to_string()) - .sql("user_name".to_string()) - .build(), - ) - .add_measure( - "count", - MockMeasureDefinition::builder() - .measure_type("count".to_string()) - .build(), - ) - .finish_cube() - .build() + let yaml = indoc! {r#" + cubes: + - name: users + sql: "SELECT 1" + dimensions: + - name: id + type: number + sql: id + primary_key: true + - name: userName + type: string + sql: user_name + measures: + - name: count + type: count + "#}; + MockSchema::from_yaml(yaml).unwrap() } -/// Creates a schema for count measure testing with two primary keys fn create_count_schema_two_pk() -> MockSchema { - MockSchemaBuilder::new() - .add_cube("users") - .cube_def( - MockCubeDefinition::builder() - .name("users".to_string()) - .sql("SELECT 1".to_string()) - .build(), - ) - .add_dimension( - "id", - MockDimensionDefinition::builder() - .dimension_type("number".to_string()) - .sql("id".to_string()) - .primary_key(Some(true)) - .build(), - ) - .add_dimension( - "userName", - MockDimensionDefinition::builder() - .dimension_type("string".to_string()) - .sql("user_name".to_string()) - .primary_key(Some(true)) - .build(), - ) - .add_measure( - "count", - MockMeasureDefinition::builder() - .measure_type("count".to_string()) - .build(), - ) - .finish_cube() - .build() + let yaml = indoc! {r#" + cubes: + - name: users + sql: "SELECT 1" + dimensions: + - name: id + type: number + sql: id + primary_key: true + - name: userName + type: string + sql: user_name + primary_key: true + measures: + - name: count + type: count + "#}; + MockSchema::from_yaml(yaml).unwrap() } -/// Creates a test schema for symbol SQL generation tests fn create_test_schema() -> MockSchema { - MockSchemaBuilder::new() - .add_cube("test_cube") - .cube_def( - MockCubeDefinition::builder() - .name("test_cube".to_string()) - .sql("SELECT 1".to_string()) - .build(), - ) - .add_dimension( - "id", - MockDimensionDefinition::builder() - .dimension_type("number".to_string()) - .sql("id".to_string()) - .primary_key(Some(true)) - .build(), - ) - .add_dimension( - "source", - MockDimensionDefinition::builder() - .dimension_type("string".to_string()) - .sql("{CUBE}.source".to_string()) - .build(), - ) - .add_dimension( - "source_extended", - MockDimensionDefinition::builder() - .dimension_type("string".to_string()) - .sql("CONCAT({CUBE.source}, '_source')".to_string()) - .build(), - ) - .add_dimension( - "created_at", - MockDimensionDefinition::builder() - .dimension_type("time".to_string()) - .sql("created_at".to_string()) - .build(), - ) - .add_dimension( - "location", - MockDimensionDefinition::builder() - .dimension_type("geo".to_string()) - .latitude("latitude".to_string()) - .longitude("longitude".to_string()) - .build(), - ) - .add_measure( - "sum_revenue", - MockMeasureDefinition::builder() - .measure_type("sum".to_string()) - .sql("revenue".to_string()) - .build(), - ) - .add_measure( - "min_revenue", - MockMeasureDefinition::builder() - .measure_type("min".to_string()) - .sql("revenue".to_string()) - .build(), - ) - .add_measure( - "max_revenue", - MockMeasureDefinition::builder() - .measure_type("max".to_string()) - .sql("revenue".to_string()) - .build(), - ) - .add_measure( - "avg_revenue", - MockMeasureDefinition::builder() - .measure_type("avg".to_string()) - .sql("revenue".to_string()) - .build(), - ) - .add_measure( - "complex_measure", - MockMeasureDefinition::builder() - .measure_type("number".to_string()) - .sql("{sum_revenue} + {CUBE.avg_revenue}/{test_cube.min_revenue} - {test_cube.min_revenue}".to_string()) - .build(), - ) - .add_measure( - "count_distinct_id", - MockMeasureDefinition::builder() - .measure_type("countDistinct".to_string()) - .sql("id".to_string()) - .build(), - ) - .add_measure( - "count_distinct_approx_id", - MockMeasureDefinition::builder() - .measure_type("countDistinctApprox".to_string()) - .sql("id".to_string()) - .build(), - ) - .finish_cube() - .build() -} - -/// Helper structure for SQL evaluation in tests -/// -/// Encapsulates all the boilerplate needed to evaluate symbols to SQL: -/// - QueryTools with all mock dependencies -/// - SqlEvaluatorVisitor -/// - PlanSqlTemplates -/// - Default node processor -pub struct SqlEvaluationContext { - query_tools: Rc, - visitor: SqlEvaluatorVisitor, - templates: PlanSqlTemplates, - node_processor: Rc, -} - -impl SqlEvaluationContext { - /// Create a new SQL evaluation context with a custom schema - pub fn new_with_schema(schema: MockSchema) -> Self { - let evaluator = schema.create_evaluator(); - - // Create QueryTools with mocks - let security_context = Rc::new(MockSecurityContext); - let base_tools = Rc::new(MockBaseTools::builder().build()); - let join_graph = Rc::new(MockJoinGraph::new()); - - let query_tools = QueryTools::try_new( - evaluator.clone(), - security_context, - base_tools.clone(), - join_graph, - None, // timezone - false, // export_annotated_sql - ) - .unwrap(); - - // Create SqlEvaluatorVisitor - let visitor = SqlEvaluatorVisitor::new(query_tools.clone(), None); - - // Create PlanSqlTemplates - let driver_tools = base_tools.driver_tools(false).unwrap(); - let templates = PlanSqlTemplates::try_new(driver_tools, false).unwrap(); - - // Get default node processor - let node_processor = SqlNodesFactory::default().default_node_processor(); - - Self { - query_tools, - visitor, - templates, - node_processor, - } - } - - /// Create a new SQL evaluation context with test schema - pub fn new() -> Self { - let schema = create_test_schema(); - Self::new_with_schema(schema) - } - - /// Evaluate a dimension to SQL - pub fn evaluate_dimension(&self, path: &str) -> Result { - let mut compiler = self.query_tools.evaluator_compiler().borrow_mut(); - let symbol = compiler.add_dimension_evaluator(path.to_string())?; - drop(compiler); // Release borrow before calling visitor - - self.visitor - .apply(&symbol, self.node_processor.clone(), &self.templates) - } - - /// Evaluate a measure to SQL - #[allow(dead_code)] - pub fn evaluate_measure(&self, path: &str) -> Result { - let mut compiler = self.query_tools.evaluator_compiler().borrow_mut(); - let symbol = compiler.add_measure_evaluator(path.to_string())?; - drop(compiler); // Release borrow before calling visitor - - self.visitor - .apply(&symbol, self.node_processor.clone(), &self.templates) - } + let yaml = indoc! {r#" + cubes: + - name: test_cube + sql: "SELECT 1" + dimensions: + - name: id + type: number + sql: id + primary_key: true + - name: source + type: string + sql: "{CUBE}.source" + - name: source_extended + type: string + sql: "CONCAT({CUBE.source}, '_source')" + - name: created_at + type: time + sql: created_at + - name: location + type: geo + latitude: latitude + longitude: longitude + measures: + - name: sum_revenue + type: sum + sql: revenue + - name: min_revenue + type: min + sql: revenue + - name: max_revenue + type: max + sql: revenue + - name: avg_revenue + type: avg + sql: revenue + - name: complex_measure + type: number + sql: "{sum_revenue} + {CUBE.avg_revenue}/{test_cube.min_revenue} - {test_cube.min_revenue}" + - name: count_distinct_id + type: countDistinct + sql: id + - name: count_distinct_approx_id + type: countDistinctApprox + sql: id + "#}; + MockSchema::from_yaml(yaml).unwrap() } #[test] fn simple_dimension_sql_evaluation() { - let context = SqlEvaluationContext::new(); + let schema = create_test_schema(); + let context = TestContext::new(schema).unwrap(); - // Test simple dimension without dependencies - let id_sql = context.evaluate_dimension("test_cube.id").unwrap(); + let id_symbol = context.create_dimension("test_cube.id").unwrap(); + let id_sql = context.evaluate_symbol(&id_symbol).unwrap(); assert_eq!(id_sql, r#""test_cube".id"#); - // Test dimension with {CUBE} reference - let source_sql = context.evaluate_dimension("test_cube.source").unwrap(); + let source_symbol = context.create_dimension("test_cube.source").unwrap(); + let source_sql = context.evaluate_symbol(&source_symbol).unwrap(); assert_eq!(source_sql, r#""test_cube".source"#); - // Test time dimension - let created_at_sql = context.evaluate_dimension("test_cube.created_at").unwrap(); + let created_at_symbol = context.create_dimension("test_cube.created_at").unwrap(); + let created_at_sql = context.evaluate_symbol(&created_at_symbol).unwrap(); assert_eq!(created_at_sql, r#""test_cube".created_at"#); - // Test geo dimension (latitude || ',' || longitude) - let location_sql = context.evaluate_dimension("test_cube.location").unwrap(); + let location_symbol = context.create_dimension("test_cube.location").unwrap(); + let location_sql = context.evaluate_symbol(&location_symbol).unwrap(); assert_eq!(location_sql, "latitude || ',' || longitude"); - // Test time dimension with granularity (day) - let created_at_day_sql = context - .evaluate_dimension("test_cube.created_at.day") + let created_at_day_symbol = context + .create_dimension("test_cube.created_at.day") .unwrap(); + let created_at_day_sql = context.evaluate_symbol(&created_at_day_symbol).unwrap(); assert_eq!( created_at_day_sql, "date_trunc('day', (\"test_cube\".created_at::timestamptz AT TIME ZONE 'UTC'))" @@ -329,33 +146,36 @@ fn simple_dimension_sql_evaluation() { #[test] fn simple_aggregate_measures() { - let context = SqlEvaluationContext::new(); + let schema = create_test_schema(); + let context = TestContext::new(schema).unwrap(); - // Test SUM measure - let sum_sql = context.evaluate_measure("test_cube.sum_revenue").unwrap(); + let sum_symbol = context.create_measure("test_cube.sum_revenue").unwrap(); + let sum_sql = context.evaluate_symbol(&sum_symbol).unwrap(); assert_eq!(sum_sql, r#"sum("test_cube".revenue)"#); - // Test MIN measure - let min_sql = context.evaluate_measure("test_cube.min_revenue").unwrap(); + let min_symbol = context.create_measure("test_cube.min_revenue").unwrap(); + let min_sql = context.evaluate_symbol(&min_symbol).unwrap(); assert_eq!(min_sql, r#"min("test_cube".revenue)"#); - // Test MAX measure - let max_sql = context.evaluate_measure("test_cube.max_revenue").unwrap(); + let max_symbol = context.create_measure("test_cube.max_revenue").unwrap(); + let max_sql = context.evaluate_symbol(&max_symbol).unwrap(); assert_eq!(max_sql, r#"max("test_cube".revenue)"#); - // Test AVG measure - let avg_sql = context.evaluate_measure("test_cube.avg_revenue").unwrap(); + let avg_symbol = context.create_measure("test_cube.avg_revenue").unwrap(); + let avg_sql = context.evaluate_symbol(&avg_symbol).unwrap(); assert_eq!(avg_sql, r#"avg("test_cube".revenue)"#); - // Test COUNT DISTINCT measure - let count_distinct_sql = context - .evaluate_measure("test_cube.count_distinct_id") + let count_distinct_symbol = context + .create_measure("test_cube.count_distinct_id") .unwrap(); + let count_distinct_sql = context.evaluate_symbol(&count_distinct_symbol).unwrap(); assert_eq!(count_distinct_sql, r#"COUNT(DISTINCT "test_cube".id)"#); - // Test COUNT DISTINCT APPROX measure + let count_distinct_approx_symbol = context + .create_measure("test_cube.count_distinct_approx_id") + .unwrap(); let count_distinct_approx_sql = context - .evaluate_measure("test_cube.count_distinct_approx_id") + .evaluate_symbol(&count_distinct_approx_symbol) .unwrap(); assert_eq!( count_distinct_approx_sql, @@ -365,22 +185,26 @@ fn simple_aggregate_measures() { #[test] fn count_measure_variants() { - // Test COUNT with no primary keys - should use COUNT(*) let schema_no_pk = create_count_schema_no_pk(); - let context_no_pk = SqlEvaluationContext::new_with_schema(schema_no_pk); - let count_no_pk_sql = context_no_pk.evaluate_measure("users.count").unwrap(); + let context_no_pk = TestContext::new(schema_no_pk).unwrap(); + let count_no_pk_symbol = context_no_pk.create_measure("users.count").unwrap(); + let count_no_pk_sql = context_no_pk.evaluate_symbol(&count_no_pk_symbol).unwrap(); assert_eq!(count_no_pk_sql, "count(*)"); - // Test COUNT with one primary key - should use count(pk) let schema_one_pk = create_count_schema_one_pk(); - let context_one_pk = SqlEvaluationContext::new_with_schema(schema_one_pk); - let count_one_pk_sql = context_one_pk.evaluate_measure("users.count").unwrap(); + let context_one_pk = TestContext::new(schema_one_pk).unwrap(); + let count_one_pk_symbol = context_one_pk.create_measure("users.count").unwrap(); + let count_one_pk_sql = context_one_pk + .evaluate_symbol(&count_one_pk_symbol) + .unwrap(); assert_eq!(count_one_pk_sql, r#"count("users".id)"#); - // Test COUNT with two primary keys - should use count(CAST(pk1) || CAST(pk2)) let schema_two_pk = create_count_schema_two_pk(); - let context_two_pk = SqlEvaluationContext::new_with_schema(schema_two_pk); - let count_two_pk_sql = context_two_pk.evaluate_measure("users.count").unwrap(); + let context_two_pk = TestContext::new(schema_two_pk).unwrap(); + let count_two_pk_symbol = context_two_pk.create_measure("users.count").unwrap(); + let count_two_pk_sql = context_two_pk + .evaluate_symbol(&count_two_pk_symbol) + .unwrap(); assert_eq!( count_two_pk_sql, "count(CAST(id AS STRING) || CAST(user_name AS STRING))" @@ -389,22 +213,21 @@ fn count_measure_variants() { #[test] fn composite_symbols() { - let context = SqlEvaluationContext::new(); + let schema = create_test_schema(); + let context = TestContext::new(schema).unwrap(); // Test dimension with member dependency ({CUBE.source}) - let source_extended_sql = context - .evaluate_dimension("test_cube.source_extended") + let source_extended_symbol = context + .create_dimension("test_cube.source_extended") .unwrap(); + let source_extended_sql = context.evaluate_symbol(&source_extended_symbol).unwrap(); assert_eq!( source_extended_sql, r#"CONCAT("test_cube".source, '_source')"# ); - // Test measure with multiple member dependencies - // {sum_revenue} + {CUBE.avg_revenue}/{test_cube.min_revenue} - {test_cube.min_revenue} - let complex_measure_sql = context - .evaluate_measure("test_cube.complex_measure") - .unwrap(); + let complex_measure_symbol = context.create_measure("test_cube.complex_measure").unwrap(); + let complex_measure_sql = context.evaluate_symbol(&complex_measure_symbol).unwrap(); assert_eq!( complex_measure_sql, r#"sum("test_cube".revenue) + avg("test_cube".revenue)/min("test_cube".revenue) - min("test_cube".revenue)"# From 46dbb1ddd969b9c015c8c86b8be6c6c981b6e1df Mon Sep 17 00:00:00 2001 From: Dmitry Patsura Date: Fri, 28 Nov 2025 13:08:21 +0100 Subject: [PATCH 6/6] chore: Remove @cubejs-client/vue package (#10200) --- .github/labeler.yml | 4 +- .../reference/cubejs-client-vue.mdx | 4 +- .../apis-integrations/javascript-sdk/vue.mdx | 6 +- packages/cubejs-client-vue/.gitignore | 21 - packages/cubejs-client-vue/.prettierrc | 19 - packages/cubejs-client-vue/CHANGELOG.md | 1346 -------------- packages/cubejs-client-vue/LICENSE | 21 - packages/cubejs-client-vue/README.md | 47 - packages/cubejs-client-vue/babel.config.js | 4 - packages/cubejs-client-vue/jest.config.js | 31 - packages/cubejs-client-vue/package.json | 80 - .../cubejs-client-vue/src/QueryBuilder.js | 700 -------- .../cubejs-client-vue/src/QueryRenderer.js | 185 -- packages/cubejs-client-vue/src/index.js | 8 - .../cubejs-client-vue/tests/unit/.eslintrc.js | 5 - .../tests/unit/QueryBuilder.spec.js | 1051 ----------- .../tests/unit/QueryRenderer.spec.js | 136 -- .../tests/unit/__mocks__/responses.js | 734 -------- .../cubejs-client-vue/tests/unit/utils.js | 7 - packages/cubejs-client-vue3/package.json | 2 +- packages/cubejs-docker/dev.Dockerfile | 2 - .../cubejs-docker/testing-drivers.Dockerfile | 2 - rollup.config.js | 9 - yarn.lock | 1549 +++++++++-------- 24 files changed, 875 insertions(+), 5098 deletions(-) delete mode 100644 packages/cubejs-client-vue/.gitignore delete mode 100644 packages/cubejs-client-vue/.prettierrc delete mode 100644 packages/cubejs-client-vue/CHANGELOG.md delete mode 100644 packages/cubejs-client-vue/LICENSE delete mode 100644 packages/cubejs-client-vue/README.md delete mode 100644 packages/cubejs-client-vue/babel.config.js delete mode 100644 packages/cubejs-client-vue/jest.config.js delete mode 100644 packages/cubejs-client-vue/package.json delete mode 100644 packages/cubejs-client-vue/src/QueryBuilder.js delete mode 100644 packages/cubejs-client-vue/src/QueryRenderer.js delete mode 100644 packages/cubejs-client-vue/src/index.js delete mode 100644 packages/cubejs-client-vue/tests/unit/.eslintrc.js delete mode 100644 packages/cubejs-client-vue/tests/unit/QueryBuilder.spec.js delete mode 100644 packages/cubejs-client-vue/tests/unit/QueryRenderer.spec.js delete mode 100644 packages/cubejs-client-vue/tests/unit/__mocks__/responses.js delete mode 100644 packages/cubejs-client-vue/tests/unit/utils.js diff --git a/.github/labeler.yml b/.github/labeler.yml index a8b3448fb5d0a..4ba956abe5a3f 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -123,9 +123,7 @@ client:react: client:vue: - changed-files: - - any-glob-to-any-file: - - packages/cubejs-client-vue/**/* - - packages/cubejs-client-vue3/**/* + - any-glob-to-any-file: packages/cubejs-client-vue3/**/* client:ngx: - changed-files: diff --git a/docs/pages/product/apis-integrations/javascript-sdk/reference/cubejs-client-vue.mdx b/docs/pages/product/apis-integrations/javascript-sdk/reference/cubejs-client-vue.mdx index ba8e651aeb94c..85cc4b0d77d16 100644 --- a/docs/pages/product/apis-integrations/javascript-sdk/reference/cubejs-client-vue.mdx +++ b/docs/pages/product/apis-integrations/javascript-sdk/reference/cubejs-client-vue.mdx @@ -1,6 +1,6 @@ -# `@cubejs-client/vue` +# `@cubejs-client/vue3` -`@cubejs-client/vue` provides Vue Components to easily integrate Cube within a +`@cubejs-client/vue3` provides Vue Components to easily integrate Cube within a Vue.js app. ## QueryBuilder diff --git a/docs/pages/product/apis-integrations/javascript-sdk/vue.mdx b/docs/pages/product/apis-integrations/javascript-sdk/vue.mdx index a054572ae7336..d76cc3928720a 100644 --- a/docs/pages/product/apis-integrations/javascript-sdk/vue.mdx +++ b/docs/pages/product/apis-integrations/javascript-sdk/vue.mdx @@ -54,7 +54,7 @@ to abstract state management and API calls from your rendering code. Here are the typical steps to query and visualize analytical data in Vue: -- **Import `@cubejs-client/core` and `@cubejs-client/vue` packages.** These +- **Import `@cubejs-client/core` and `@cubejs-client/vue3` packages.** These packages provide all the necessary methods and convenient Vue tools. - **Create an instance of Cube JavaScript Client.** The client is initialized with Cube API URL. In development mode, the default URL is @@ -101,10 +101,8 @@ npm install --save @cubejs-client/core @cubejs-client/vue3 yarn add @cubejs-client/core @cubejs-client/vue3 ``` -**Note.** If you're using Vue 2, please use `@cubejs-client/vue`. - Now you can build your application from scratch or connect to one of our [supported data visualization tools](/product/configuration/visualization-tools). -[ref-compare-date-range]: /product/apis-integrations/queries#compare-date-range-query \ No newline at end of file +[ref-compare-date-range]: /product/apis-integrations/queries#compare-date-range-query diff --git a/packages/cubejs-client-vue/.gitignore b/packages/cubejs-client-vue/.gitignore deleted file mode 100644 index 5b7adbefba450..0000000000000 --- a/packages/cubejs-client-vue/.gitignore +++ /dev/null @@ -1,21 +0,0 @@ -.DS_Store -node_modules - -# local env files -.env.local -.env.*.local - -# Log files -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# Editor directories and files -.idea -.vscode -*.suo -*.ntvs* -*.njsproj -*.sln -*.sw* -dist/ \ No newline at end of file diff --git a/packages/cubejs-client-vue/.prettierrc b/packages/cubejs-client-vue/.prettierrc deleted file mode 100644 index ebdea64a812b8..0000000000000 --- a/packages/cubejs-client-vue/.prettierrc +++ /dev/null @@ -1,19 +0,0 @@ -{ - "printWidth": 100, - "tabWidth": 2, - "useTabs": false, - "semi": true, - "singleQuote": true, - "arrowParens": "always", - "trailingComma": "es5", - "bracketSpacing": true, - "jsxBracketSameLine": false, - "overrides": [ - { - "files": ["*.css", "*.scss"], - "options": { - "singleQuote": false - } - } - ] -} diff --git a/packages/cubejs-client-vue/CHANGELOG.md b/packages/cubejs-client-vue/CHANGELOG.md deleted file mode 100644 index 06cc530ba633e..0000000000000 --- a/packages/cubejs-client-vue/CHANGELOG.md +++ /dev/null @@ -1,1346 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## [1.5.10](https://github.com/cube-js/cube.js/compare/v1.5.9...v1.5.10) (2025-11-28) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.5.9](https://github.com/cube-js/cube.js/compare/v1.5.8...v1.5.9) (2025-11-26) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.5.8](https://github.com/cube-js/cube.js/compare/v1.5.7...v1.5.8) (2025-11-26) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.5.7](https://github.com/cube-js/cube.js/compare/v1.5.6...v1.5.7) (2025-11-24) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.5.6](https://github.com/cube-js/cube.js/compare/v1.5.5...v1.5.6) (2025-11-24) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.5.5](https://github.com/cube-js/cube.js/compare/v1.5.4...v1.5.5) (2025-11-24) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.5.4](https://github.com/cube-js/cube.js/compare/v1.5.3...v1.5.4) (2025-11-18) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.5.3](https://github.com/cube-js/cube.js/compare/v1.5.2...v1.5.3) (2025-11-13) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.5.2](https://github.com/cube-js/cube.js/compare/v1.5.1...v1.5.2) (2025-11-10) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.5.1](https://github.com/cube-js/cube.js/compare/v1.5.0...v1.5.1) (2025-11-04) - -**Note:** Version bump only for package @cubejs-client/vue - -# [1.5.0](https://github.com/cube-js/cube.js/compare/v1.4.0...v1.5.0) (2025-10-29) - -**Note:** Version bump only for package @cubejs-client/vue - -# [1.4.0](https://github.com/cube-js/cube.js/compare/v1.3.86...v1.4.0) (2025-10-29) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.86](https://github.com/cube-js/cube.js/compare/v1.3.85...v1.3.86) (2025-10-29) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.85](https://github.com/cube-js/cube.js/compare/v1.3.84...v1.3.85) (2025-10-28) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.84](https://github.com/cube-js/cube.js/compare/v1.3.83...v1.3.84) (2025-10-28) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.83](https://github.com/cube-js/cube.js/compare/v1.3.82...v1.3.83) (2025-10-24) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.82](https://github.com/cube-js/cube.js/compare/v1.3.81...v1.3.82) (2025-10-21) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.81](https://github.com/cube-js/cube.js/compare/v1.3.80...v1.3.81) (2025-10-16) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.80](https://github.com/cube-js/cube.js/compare/v1.3.79...v1.3.80) (2025-10-15) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.79](https://github.com/cube-js/cube.js/compare/v1.3.78...v1.3.79) (2025-10-14) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.78](https://github.com/cube-js/cube.js/compare/v1.3.77...v1.3.78) (2025-10-03) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.77](https://github.com/cube-js/cube.js/compare/v1.3.76...v1.3.77) (2025-10-01) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.76](https://github.com/cube-js/cube.js/compare/v1.3.75...v1.3.76) (2025-10-01) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.75](https://github.com/cube-js/cube.js/compare/v1.3.74...v1.3.75) (2025-09-29) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.74](https://github.com/cube-js/cube.js/compare/v1.3.73...v1.3.74) (2025-09-26) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.73](https://github.com/cube-js/cube.js/compare/v1.3.72...v1.3.73) (2025-09-25) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.72](https://github.com/cube-js/cube.js/compare/v1.3.71...v1.3.72) (2025-09-23) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.71](https://github.com/cube-js/cube.js/compare/v1.3.70...v1.3.71) (2025-09-22) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.70](https://github.com/cube-js/cube.js/compare/v1.3.69...v1.3.70) (2025-09-19) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.69](https://github.com/cube-js/cube.js/compare/v1.3.68...v1.3.69) (2025-09-17) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.68](https://github.com/cube-js/cube.js/compare/v1.3.67...v1.3.68) (2025-09-16) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.67](https://github.com/cube-js/cube.js/compare/v1.3.66...v1.3.67) (2025-09-09) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.66](https://github.com/cube-js/cube.js/compare/v1.3.65...v1.3.66) (2025-09-09) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.65](https://github.com/cube-js/cube.js/compare/v1.3.64...v1.3.65) (2025-09-05) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.64](https://github.com/cube-js/cube.js/compare/v1.3.63...v1.3.64) (2025-09-03) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.63](https://github.com/cube-js/cube.js/compare/v1.3.62...v1.3.63) (2025-09-02) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.62](https://github.com/cube-js/cube.js/compare/v1.3.61...v1.3.62) (2025-08-29) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.61](https://github.com/cube-js/cube.js/compare/v1.3.60...v1.3.61) (2025-08-28) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.60](https://github.com/cube-js/cube.js/compare/v1.3.59...v1.3.60) (2025-08-28) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.59](https://github.com/cube-js/cube.js/compare/v1.3.58...v1.3.59) (2025-08-26) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.58](https://github.com/cube-js/cube.js/compare/v1.3.57...v1.3.58) (2025-08-25) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.57](https://github.com/cube-js/cube.js/compare/v1.3.56...v1.3.57) (2025-08-22) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.56](https://github.com/cube-js/cube.js/compare/v1.3.55...v1.3.56) (2025-08-21) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.55](https://github.com/cube-js/cube.js/compare/v1.3.54...v1.3.55) (2025-08-19) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.54](https://github.com/cube-js/cube.js/compare/v1.3.53...v1.3.54) (2025-08-15) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.53](https://github.com/cube-js/cube.js/compare/v1.3.52...v1.3.53) (2025-08-15) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.52](https://github.com/cube-js/cube.js/compare/v1.3.51...v1.3.52) (2025-08-14) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.51](https://github.com/cube-js/cube.js/compare/v1.3.50...v1.3.51) (2025-08-14) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.50](https://github.com/cube-js/cube.js/compare/v1.3.49...v1.3.50) (2025-08-13) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.49](https://github.com/cube-js/cube.js/compare/v1.3.48...v1.3.49) (2025-08-12) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.48](https://github.com/cube-js/cube.js/compare/v1.3.47...v1.3.48) (2025-08-09) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.47](https://github.com/cube-js/cube.js/compare/v1.3.46...v1.3.47) (2025-08-04) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.46](https://github.com/cube-js/cube.js/compare/v1.3.45...v1.3.46) (2025-07-31) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.45](https://github.com/cube-js/cube.js/compare/v1.3.44...v1.3.45) (2025-07-29) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.44](https://github.com/cube-js/cube.js/compare/v1.3.43...v1.3.44) (2025-07-28) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.43](https://github.com/cube-js/cube.js/compare/v1.3.42...v1.3.43) (2025-07-24) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.42](https://github.com/cube-js/cube.js/compare/v1.3.41...v1.3.42) (2025-07-23) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.41](https://github.com/cube-js/cube.js/compare/v1.3.40...v1.3.41) (2025-07-22) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.40](https://github.com/cube-js/cube.js/compare/v1.3.39...v1.3.40) (2025-07-20) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.39](https://github.com/cube-js/cube.js/compare/v1.3.38...v1.3.39) (2025-07-17) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.38](https://github.com/cube-js/cube.js/compare/v1.3.37...v1.3.38) (2025-07-16) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.37](https://github.com/cube-js/cube.js/compare/v1.3.36...v1.3.37) (2025-07-14) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.36](https://github.com/cube-js/cube.js/compare/v1.3.35...v1.3.36) (2025-07-10) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.35](https://github.com/cube-js/cube.js/compare/v1.3.34...v1.3.35) (2025-07-09) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.34](https://github.com/cube-js/cube.js/compare/v1.3.33...v1.3.34) (2025-07-04) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.33](https://github.com/cube-js/cube.js/compare/v1.3.32...v1.3.33) (2025-07-03) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.32](https://github.com/cube-js/cube.js/compare/v1.3.31...v1.3.32) (2025-07-03) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.31](https://github.com/cube-js/cube.js/compare/v1.3.30...v1.3.31) (2025-07-02) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.30](https://github.com/cube-js/cube.js/compare/v1.3.29...v1.3.30) (2025-07-01) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.29](https://github.com/cube-js/cube.js/compare/v1.3.28...v1.3.29) (2025-07-01) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.28](https://github.com/cube-js/cube.js/compare/v1.3.27...v1.3.28) (2025-06-30) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.27](https://github.com/cube-js/cube.js/compare/v1.3.26...v1.3.27) (2025-06-30) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.26](https://github.com/cube-js/cube.js/compare/v1.3.25...v1.3.26) (2025-06-25) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.25](https://github.com/cube-js/cube.js/compare/v1.3.24...v1.3.25) (2025-06-24) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.24](https://github.com/cube-js/cube.js/compare/v1.3.23...v1.3.24) (2025-06-24) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.23](https://github.com/cube-js/cube.js/compare/v1.3.22...v1.3.23) (2025-06-19) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.22](https://github.com/cube-js/cube.js/compare/v1.3.21...v1.3.22) (2025-06-18) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.21](https://github.com/cube-js/cube.js/compare/v1.3.20...v1.3.21) (2025-06-10) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.20](https://github.com/cube-js/cube.js/compare/v1.3.19...v1.3.20) (2025-06-06) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.19](https://github.com/cube-js/cube.js/compare/v1.3.18...v1.3.19) (2025-06-02) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.18](https://github.com/cube-js/cube.js/compare/v1.3.17...v1.3.18) (2025-05-27) - -### Bug Fixes - -- **client:** Update main fields in package.json to cjs files, thanks @Graphmaxer ([#9620](https://github.com/cube-js/cube.js/issues/9620)) ([06f82e5](https://github.com/cube-js/cube.js/commit/06f82e5a68beb5471d676734cabefa23aeb8a701)) - -## [1.3.17](https://github.com/cube-js/cube.js/compare/v1.3.16...v1.3.17) (2025-05-22) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.16](https://github.com/cube-js/cube.js/compare/v1.3.15...v1.3.16) (2025-05-19) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.15](https://github.com/cube-js/cube.js/compare/v1.3.14...v1.3.15) (2025-05-15) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.14](https://github.com/cube-js/cube.js/compare/v1.3.13...v1.3.14) (2025-05-13) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.13](https://github.com/cube-js/cube.js/compare/v1.3.12...v1.3.13) (2025-05-12) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.12](https://github.com/cube-js/cube.js/compare/v1.3.11...v1.3.12) (2025-05-08) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.11](https://github.com/cube-js/cube.js/compare/v1.3.10...v1.3.11) (2025-05-05) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.10](https://github.com/cube-js/cube.js/compare/v1.3.9...v1.3.10) (2025-05-01) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.9](https://github.com/cube-js/cube.js/compare/v1.3.8...v1.3.9) (2025-04-28) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.8](https://github.com/cube-js/cube.js/compare/v1.3.7...v1.3.8) (2025-04-24) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.7](https://github.com/cube-js/cube.js/compare/v1.3.6...v1.3.7) (2025-04-23) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.6](https://github.com/cube-js/cube.js/compare/v1.3.5...v1.3.6) (2025-04-22) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.5](https://github.com/cube-js/cube.js/compare/v1.3.4...v1.3.5) (2025-04-17) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.4](https://github.com/cube-js/cube.js/compare/v1.3.3...v1.3.4) (2025-04-17) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.3](https://github.com/cube-js/cube.js/compare/v1.3.2...v1.3.3) (2025-04-16) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.2](https://github.com/cube-js/cube.js/compare/v1.3.1...v1.3.2) (2025-04-16) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.3.1](https://github.com/cube-js/cube.js/compare/v1.3.0...v1.3.1) (2025-04-14) - -**Note:** Version bump only for package @cubejs-client/vue - -# [1.3.0](https://github.com/cube-js/cube.js/compare/v1.2.33...v1.3.0) (2025-04-11) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.2.33](https://github.com/cube-js/cube.js/compare/v1.2.32...v1.2.33) (2025-04-10) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.2.32](https://github.com/cube-js/cube.js/compare/v1.2.31...v1.2.32) (2025-04-08) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.2.31](https://github.com/cube-js/cube.js/compare/v1.2.30...v1.2.31) (2025-04-08) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.2.30](https://github.com/cube-js/cube.js/compare/v1.2.29...v1.2.30) (2025-04-04) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.2.29](https://github.com/cube-js/cube.js/compare/v1.2.28...v1.2.29) (2025-04-02) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.2.28](https://github.com/cube-js/cube.js/compare/v1.2.27...v1.2.28) (2025-04-01) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.2.27](https://github.com/cube-js/cube.js/compare/v1.2.26...v1.2.27) (2025-03-25) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.2.26](https://github.com/cube-js/cube.js/compare/v1.2.25...v1.2.26) (2025-03-21) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.2.25](https://github.com/cube-js/cube.js/compare/v1.2.24...v1.2.25) (2025-03-20) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.2.24](https://github.com/cube-js/cube.js/compare/v1.2.23...v1.2.24) (2025-03-18) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.2.23](https://github.com/cube-js/cube.js/compare/v1.2.22...v1.2.23) (2025-03-17) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.2.22](https://github.com/cube-js/cube.js/compare/v1.2.21...v1.2.22) (2025-03-14) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.2.21](https://github.com/cube-js/cube.js/compare/v1.2.20...v1.2.21) (2025-03-11) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.2.20](https://github.com/cube-js/cube.js/compare/v1.2.19...v1.2.20) (2025-03-10) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.2.19](https://github.com/cube-js/cube.js/compare/v1.2.18...v1.2.19) (2025-03-08) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.2.18](https://github.com/cube-js/cube.js/compare/v1.2.17...v1.2.18) (2025-03-06) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.2.17](https://github.com/cube-js/cube.js/compare/v1.2.16...v1.2.17) (2025-03-05) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.2.16](https://github.com/cube-js/cube.js/compare/v1.2.15...v1.2.16) (2025-03-04) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.2.15](https://github.com/cube-js/cube.js/compare/v1.2.14...v1.2.15) (2025-03-03) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.2.14](https://github.com/cube-js/cube.js/compare/v1.2.13...v1.2.14) (2025-02-28) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.2.13](https://github.com/cube-js/cube.js/compare/v1.2.12...v1.2.13) (2025-02-26) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.2.12](https://github.com/cube-js/cube.js/compare/v1.2.11...v1.2.12) (2025-02-26) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.2.11](https://github.com/cube-js/cube.js/compare/v1.2.10...v1.2.11) (2025-02-25) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.2.10](https://github.com/cube-js/cube.js/compare/v1.2.9...v1.2.10) (2025-02-24) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.2.9](https://github.com/cube-js/cube.js/compare/v1.2.8...v1.2.9) (2025-02-21) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.2.8](https://github.com/cube-js/cube.js/compare/v1.2.7...v1.2.8) (2025-02-21) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.2.7](https://github.com/cube-js/cube.js/compare/v1.2.6...v1.2.7) (2025-02-20) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.2.6](https://github.com/cube-js/cube.js/compare/v1.2.5...v1.2.6) (2025-02-18) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.2.5](https://github.com/cube-js/cube.js/compare/v1.2.4...v1.2.5) (2025-02-13) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.2.4](https://github.com/cube-js/cube.js/compare/v1.2.3...v1.2.4) (2025-02-11) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.2.3](https://github.com/cube-js/cube.js/compare/v1.2.2...v1.2.3) (2025-02-06) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.2.2](https://github.com/cube-js/cube.js/compare/v1.2.1...v1.2.2) (2025-02-06) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.2.1](https://github.com/cube-js/cube.js/compare/v1.2.0...v1.2.1) (2025-02-06) - -**Note:** Version bump only for package @cubejs-client/vue - -# [1.2.0](https://github.com/cube-js/cube.js/compare/v1.1.18...v1.2.0) (2025-02-05) - -**Note:** Version bump only for package @cubejs-client/vue - -## [1.1.12](https://github.com/cube-js/cube.js/compare/v1.1.11...v1.1.12) (2025-01-09) - -**Note:** Version bump only for package @cubejs-client/vue - -# [1.0.0](https://github.com/cube-js/cube.js/compare/v0.36.11...v1.0.0) (2024-10-15) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.36.4](https://github.com/cube-js/cube.js/compare/v0.36.3...v0.36.4) (2024-09-27) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.36.2](https://github.com/cube-js/cube.js/compare/v0.36.1...v0.36.2) (2024-09-18) - -**Note:** Version bump only for package @cubejs-client/vue - -# [0.36.0](https://github.com/cube-js/cube.js/compare/v0.35.81...v0.36.0) (2024-09-13) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.35.81](https://github.com/cube-js/cube.js/compare/v0.35.80...v0.35.81) (2024-09-12) - -### Bug Fixes - -- Updated jsonwebtoken in all packages ([#8282](https://github.com/cube-js/cube.js/issues/8282)) Thanks [@jlloyd-widen](https://github.com/jlloyd-widen) ! ([ca7c292](https://github.com/cube-js/cube.js/commit/ca7c292e0122be50ac7adc9b9d4910623d19f840)) - -## [0.35.23](https://github.com/cube-js/cube.js/compare/v0.35.22...v0.35.23) (2024-04-25) - -**Note:** Version bump only for package @cubejs-client/vue - -# [0.35.0](https://github.com/cube-js/cube.js/compare/v0.34.62...v0.35.0) (2024-03-14) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.34.60](https://github.com/cube-js/cube.js/compare/v0.34.59...v0.34.60) (2024-03-02) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.34.37](https://github.com/cube-js/cube.js/compare/v0.34.36...v0.34.37) (2023-12-19) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.34.32](https://github.com/cube-js/cube.js/compare/v0.34.31...v0.34.32) (2023-12-07) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.34.31](https://github.com/cube-js/cube.js/compare/v0.34.30...v0.34.31) (2023-12-07) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.34.27](https://github.com/cube-js/cube.js/compare/v0.34.26...v0.34.27) (2023-11-30) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.34.24](https://github.com/cube-js/cube.js/compare/v0.34.23...v0.34.24) (2023-11-23) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.34.19](https://github.com/cube-js/cube.js/compare/v0.34.18...v0.34.19) (2023-11-11) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.34.9](https://github.com/cube-js/cube.js/compare/v0.34.8...v0.34.9) (2023-10-26) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.34.2](https://github.com/cube-js/cube.js/compare/v0.34.1...v0.34.2) (2023-10-12) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.34.1](https://github.com/cube-js/cube.js/compare/v0.34.0...v0.34.1) (2023-10-09) - -### Bug Fixes - -- **@cubejs-client/vue:** Do not add time dimension as order member if granularity is set to `none` ([#7165](https://github.com/cube-js/cube.js/issues/7165)) ([1557be6](https://github.com/cube-js/cube.js/commit/1557be6aa5a6a081578c54c48446815d9be37db6)) - -# [0.34.0](https://github.com/cube-js/cube.js/compare/v0.33.65...v0.34.0) (2023-10-03) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.33.65](https://github.com/cube-js/cube.js/compare/v0.33.64...v0.33.65) (2023-10-02) - -### Bug Fixes - -- **@cubejs-client/vue:** Pivot config can use null from heuristics ([#7167](https://github.com/cube-js/cube.js/issues/7167)) ([e7043bb](https://github.com/cube-js/cube.js/commit/e7043bb41099d2c4477430b96a20c562e1908266)) - -## [0.33.59](https://github.com/cube-js/cube.js/compare/v0.33.58...v0.33.59) (2023-09-20) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.33.58](https://github.com/cube-js/cube.js/compare/v0.33.57...v0.33.58) (2023-09-18) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.33.55](https://github.com/cube-js/cube.js/compare/v0.33.54...v0.33.55) (2023-09-12) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.33.47](https://github.com/cube-js/cube.js/compare/v0.33.46...v0.33.47) (2023-08-15) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.33.44](https://github.com/cube-js/cube.js/compare/v0.33.43...v0.33.44) (2023-08-11) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.33.12](https://github.com/cube-js/cube.js/compare/v0.33.11...v0.33.12) (2023-05-22) - -**Note:** Version bump only for package @cubejs-client/vue - -# [0.33.0](https://github.com/cube-js/cube.js/compare/v0.32.31...v0.33.0) (2023-05-02) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.32.30](https://github.com/cube-js/cube.js/compare/v0.32.29...v0.32.30) (2023-04-28) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.32.22](https://github.com/cube-js/cube.js/compare/v0.32.21...v0.32.22) (2023-04-10) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.32.17](https://github.com/cube-js/cube.js/compare/v0.32.16...v0.32.17) (2023-03-29) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.32.12](https://github.com/cube-js/cube.js/compare/v0.32.11...v0.32.12) (2023-03-22) - -**Note:** Version bump only for package @cubejs-client/vue - -# [0.32.0](https://github.com/cube-js/cube.js/compare/v0.31.69...v0.32.0) (2023-03-02) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.31.63](https://github.com/cube-js/cube.js/compare/v0.31.62...v0.31.63) (2023-02-20) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.31.46](https://github.com/cube-js/cube.js/compare/v0.31.45...v0.31.46) (2023-01-18) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.31.35](https://github.com/cube-js/cube.js/compare/v0.31.34...v0.31.35) (2023-01-07) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.31.34](https://github.com/cube-js/cube.js/compare/v0.31.33...v0.31.34) (2023-01-05) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.31.33](https://github.com/cube-js/cube.js/compare/v0.31.32...v0.31.33) (2023-01-03) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.31.30](https://github.com/cube-js/cube.js/compare/v0.31.29...v0.31.30) (2022-12-22) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.31.19](https://github.com/cube-js/cube.js/compare/v0.31.18...v0.31.19) (2022-11-29) - -### Bug Fixes - -- packages/cubejs-client-vue/package.json to reduce vulnerabilities ([#5361](https://github.com/cube-js/cube.js/issues/5361)) ([effc694](https://github.com/cube-js/cube.js/commit/effc694b29da181899ff74f7f0107eeaa9aaec76)) - -## [0.31.15](https://github.com/cube-js/cube.js/compare/v0.31.14...v0.31.15) (2022-11-17) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.31.13](https://github.com/cube-js/cube.js/compare/v0.31.12...v0.31.13) (2022-11-08) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.31.9](https://github.com/cube-js/cube.js/compare/v0.31.8...v0.31.9) (2022-11-01) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.31.8](https://github.com/cube-js/cube.js/compare/v0.31.7...v0.31.8) (2022-10-30) - -**Note:** Version bump only for package @cubejs-client/vue - -# [0.31.0](https://github.com/cube-js/cube.js/compare/v0.30.75...v0.31.0) (2022-10-03) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.30.74](https://github.com/cube-js/cube.js/compare/v0.30.73...v0.30.74) (2022-09-20) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.30.64](https://github.com/cube-js/cube.js/compare/v0.30.63...v0.30.64) (2022-09-07) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.30.60](https://github.com/cube-js/cube.js/compare/v0.30.59...v0.30.60) (2022-08-28) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.30.46](https://github.com/cube-js/cube.js/compare/v0.30.45...v0.30.46) (2022-08-10) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.30.29](https://github.com/cube-js/cube.js/compare/v0.30.28...v0.30.29) (2022-07-01) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.30.27](https://github.com/cube-js/cube.js/compare/v0.30.26...v0.30.27) (2022-06-24) - -### Bug Fixes - -- **client-vue:** Fix boolean operator in filter without using builderProps ([#4782](https://github.com/cube-js/cube.js/issues/4782)) ([904171e](https://github.com/cube-js/cube.js/commit/904171ee85185f1ba1fcf812ba58ae6bc11b8407)) - -## [0.30.4](https://github.com/cube-js/cube.js/compare/v0.30.3...v0.30.4) (2022-05-20) - -**Note:** Version bump only for package @cubejs-client/vue - -# [0.30.0](https://github.com/cube-js/cube.js/compare/v0.29.57...v0.30.0) (2022-05-11) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.29.54](https://github.com/cube-js/cube.js/compare/v0.29.53...v0.29.54) (2022-05-03) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.29.53](https://github.com/cube-js/cube.js/compare/v0.29.52...v0.29.53) (2022-04-29) - -### Features - -- **client-vue:** boolean filters support ([#4314](https://github.com/cube-js/cube.js/issues/4314)) ([8a3bb3d](https://github.com/cube-js/cube.js/commit/8a3bb3dc8e427c30d2ac0cdd504662087dcf1e19)) - -## [0.29.51](https://github.com/cube-js/cube.js/compare/v0.29.50...v0.29.51) (2022-04-22) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.29.48](https://github.com/cube-js/cube.js/compare/v0.29.47...v0.29.48) (2022-04-14) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.29.43](https://github.com/cube-js/cube.js/compare/v0.29.42...v0.29.43) (2022-04-07) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.29.42](https://github.com/cube-js/cube.js/compare/v0.29.41...v0.29.42) (2022-04-04) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.29.33](https://github.com/cube-js/cube.js/compare/v0.29.32...v0.29.33) (2022-03-17) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.29.29](https://github.com/cube-js/cube.js/compare/v0.29.28...v0.29.29) (2022-03-03) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.29.23](https://github.com/cube-js/cube.js/compare/v0.29.22...v0.29.23) (2022-01-26) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.29.8](https://github.com/cube-js/cube.js/compare/v0.29.7...v0.29.8) (2021-12-21) - -### Bug Fixes - -- **@cubejs-client/vue:** fix error when executing deletion ([#3806](https://github.com/cube-js/cube.js/issues/3806)) Thanks [@18207680061](https://github.com/18207680061)! ([9d220a8](https://github.com/cube-js/cube.js/commit/9d220a8cf3bf040b51efefb9f74beb5545a89035)) - -## [0.29.5](https://github.com/cube-js/cube.js/compare/v0.29.4...v0.29.5) (2021-12-17) - -**Note:** Version bump only for package @cubejs-client/vue - -# [0.29.0](https://github.com/cube-js/cube.js/compare/v0.28.67...v0.29.0) (2021-12-14) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.28.66](https://github.com/cube-js/cube.js/compare/v0.28.65...v0.28.66) (2021-12-14) - -### Bug Fixes - -- **client-vue:** add wrapWithQueryRenderer prop ([#3801](https://github.com/cube-js/cube.js/issues/3801)) ([c211e0a](https://github.com/cube-js/cube.js/commit/c211e0a0b1d260167128edf07b725c905f0dc63e)) - -## [0.28.52](https://github.com/cube-js/cube.js/compare/v0.28.51...v0.28.52) (2021-11-03) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.28.45](https://github.com/cube-js/cube.js/compare/v0.28.44...v0.28.45) (2021-10-19) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.28.39](https://github.com/cube-js/cube.js/compare/v0.28.38...v0.28.39) (2021-09-22) - -### Bug Fixes - -- **@cubejs-client/vue:** catch `dryRun` errors on `query-builder` mount ([#3450](https://github.com/cube-js/cube.js/issues/3450)) ([189491c](https://github.com/cube-js/cube.js/commit/189491c87ac2d3f5e1ddac516d7ab236d6a7c09b)) - -## [0.28.38](https://github.com/cube-js/cube.js/compare/v0.28.37...v0.28.38) (2021-09-20) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.28.37](https://github.com/cube-js/cube.js/compare/v0.28.36...v0.28.37) (2021-09-17) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.28.35](https://github.com/cube-js/cube.js/compare/v0.28.34...v0.28.35) (2021-09-13) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.28.25](https://github.com/cube-js/cube.js/compare/v0.28.24...v0.28.25) (2021-08-20) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.28.24](https://github.com/cube-js/cube.js/compare/v0.28.23...v0.28.24) (2021-08-19) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.28.17](https://github.com/cube-js/cube.js/compare/v0.28.16...v0.28.17) (2021-08-11) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.28.15](https://github.com/cube-js/cube.js/compare/v0.28.14...v0.28.15) (2021-08-06) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.28.10](https://github.com/cube-js/cube.js/compare/v0.28.9...v0.28.10) (2021-07-30) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.28.9](https://github.com/cube-js/cube.js/compare/v0.28.8...v0.28.9) (2021-07-29) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.28.6](https://github.com/cube-js/cube.js/compare/v0.28.5...v0.28.6) (2021-07-22) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.28.1](https://github.com/cube-js/cube.js/compare/v0.28.0...v0.28.1) (2021-07-19) - -**Note:** Version bump only for package @cubejs-client/vue - -# [0.28.0](https://github.com/cube-js/cube.js/compare/v0.27.53...v0.28.0) (2021-07-17) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.27.51](https://github.com/cube-js/cube.js/compare/v0.27.50...v0.27.51) (2021-07-13) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.27.48](https://github.com/cube-js/cube.js/compare/v0.27.47...v0.27.48) (2021-07-08) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.27.47](https://github.com/cube-js/cube.js/compare/v0.27.46...v0.27.47) (2021-07-06) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.27.41](https://github.com/cube-js/cube.js/compare/v0.27.40...v0.27.41) (2021-06-25) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.27.35](https://github.com/cube-js/cube.js/compare/v0.27.34...v0.27.35) (2021-06-18) - -### Bug Fixes - -- **@cubejs-client/vue:** support all pivotConfig props ([#2964](https://github.com/cube-js/cube.js/issues/2964)) ([8c13b2b](https://github.com/cube-js/cube.js/commit/8c13b2beb3fe75533a923128859731cab2da4bbc)) - -### Features - -- **@cubejs-client/vue:** support logical operator filters ([#2950](https://github.com/cube-js/cube.js/issues/2950)). Thanks to [@piktur](https://github.com/piktur)! ([1313dad](https://github.com/cube-js/cube.js/commit/1313dad6a1f4b9da7e6ca194415b1a756e715692)) - -## [0.27.32](https://github.com/cube-js/cube.js/compare/v0.27.31...v0.27.32) (2021-06-12) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.27.31](https://github.com/cube-js/cube.js/compare/v0.27.30...v0.27.31) (2021-06-11) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.27.26](https://github.com/cube-js/cube.js/compare/v0.27.25...v0.27.26) (2021-06-01) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.27.25](https://github.com/cube-js/cube.js/compare/v0.27.24...v0.27.25) (2021-06-01) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.27.24](https://github.com/cube-js/cube.js/compare/v0.27.23...v0.27.24) (2021-05-29) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.27.22](https://github.com/cube-js/cube.js/compare/v0.27.21...v0.27.22) (2021-05-27) - -### Features - -- **@cubejs-client/vue3:** vue 3 support ([#2827](https://github.com/cube-js/cube.js/issues/2827)) ([6ac2c8c](https://github.com/cube-js/cube.js/commit/6ac2c8c938fee3001f78ef0f8782255799550514)) - -## [0.27.19](https://github.com/cube-js/cube.js/compare/v0.27.18...v0.27.19) (2021-05-24) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.27.17](https://github.com/cube-js/cube.js/compare/v0.27.16...v0.27.17) (2021-05-22) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.27.15](https://github.com/cube-js/cube.js/compare/v0.27.14...v0.27.15) (2021-05-18) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.27.14](https://github.com/cube-js/cube.js/compare/v0.27.13...v0.27.14) (2021-05-13) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.27.13](https://github.com/cube-js/cube.js/compare/v0.27.12...v0.27.13) (2021-05-13) - -### Bug Fixes - -- **@cubejs-client/core:** response error handling ([#2703](https://github.com/cube-js/cube.js/issues/2703)) ([de31373](https://github.com/cube-js/cube.js/commit/de31373d9829a6924d7edc04b96464ffa417d920)) - -## [0.27.6](https://github.com/cube-js/cube.js/compare/v0.27.5...v0.27.6) (2021-05-03) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.27.5](https://github.com/cube-js/cube.js/compare/v0.27.4...v0.27.5) (2021-05-03) - -**Note:** Version bump only for package @cubejs-client/vue - -# [0.27.0](https://github.com/cube-js/cube.js/compare/v0.26.104...v0.27.0) (2021-04-26) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.26.102](https://github.com/cube-js/cube.js/compare/v0.26.101...v0.26.102) (2021-04-22) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.26.94](https://github.com/cube-js/cube.js/compare/v0.26.93...v0.26.94) (2021-04-13) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.26.93](https://github.com/cube-js/cube.js/compare/v0.26.92...v0.26.93) (2021-04-12) - -### Bug Fixes - -- **@cubejs-client/vue:** make query reactive ([#2539](https://github.com/cube-js/cube.js/issues/2539)) ([9bce6ba](https://github.com/cube-js/cube.js/commit/9bce6ba964d71f0cba0e4d4e4e21a973309d77d4)) - -## [0.26.90](https://github.com/cube-js/cube.js/compare/v0.26.89...v0.26.90) (2021-04-11) - -### Bug Fixes - -- **@cubejs-client/vue:** error test fix ([9a97e7b](https://github.com/cube-js/cube.js/commit/9a97e7b97b1a300e89051810a421cb686f250faa)) - -## [0.26.82](https://github.com/cube-js/cube.js/compare/v0.26.81...v0.26.82) (2021-04-07) - -### Features - -- **@cubejs-client/playground:** run query button, disable query auto triggering ([#2476](https://github.com/cube-js/cube.js/issues/2476)) ([92a5d45](https://github.com/cube-js/cube.js/commit/92a5d45eca00e88e925e547a12c3f69b05bfafa6)) - -## [0.26.73](https://github.com/cube-js/cube.js/compare/v0.26.72...v0.26.73) (2021-04-01) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.26.70](https://github.com/cube-js/cube.js/compare/v0.26.69...v0.26.70) (2021-03-26) - -### Features - -- Vue chart renderers ([#2428](https://github.com/cube-js/cube.js/issues/2428)) ([bc2cbab](https://github.com/cube-js/cube.js/commit/bc2cbab22fee860cfc846d1207f6a83899198dd8)) - -## [0.26.69](https://github.com/cube-js/cube.js/compare/v0.26.68...v0.26.69) (2021-03-25) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.26.68](https://github.com/cube-js/cube.js/compare/v0.26.67...v0.26.68) (2021-03-25) - -### Features - -- **@cubejs-client/vue:** query load event ([6045e8f](https://github.com/cube-js/cube.js/commit/6045e8f060b3702512f138b5c571db5deb6448f2)) - -## [0.26.63](https://github.com/cube-js/cube.js/compare/v0.26.62...v0.26.63) (2021-03-22) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.26.61](https://github.com/cube-js/cube.js/compare/v0.26.60...v0.26.61) (2021-03-18) - -### Features - -- **@cubejs-client/vue:** vue query builder ([#1824](https://github.com/cube-js/cube.js/issues/1824)) ([06ee13f](https://github.com/cube-js/cube.js/commit/06ee13f72ef33372385567ed5e1795087b4f5f53)) - -## [0.26.60](https://github.com/cube-js/cube.js/compare/v0.26.59...v0.26.60) (2021-03-16) - -### Features - -- **@cubejs-client/playground:** Playground components ([#2329](https://github.com/cube-js/cube.js/issues/2329)) ([489dc12](https://github.com/cube-js/cube.js/commit/489dc12d7e9bfa87bfb3c8ffabf76f238c86a2fe)) - -## [0.26.55](https://github.com/cube-js/cube.js/compare/v0.26.54...v0.26.55) (2021-03-12) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.26.54](https://github.com/cube-js/cube.js/compare/v0.26.53...v0.26.54) (2021-03-12) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.26.53](https://github.com/cube-js/cube.js/compare/v0.26.52...v0.26.53) (2021-03-11) - -**Note:** Version bump only for package @cubejs-client/vue - -# [0.26.0](https://github.com/cube-js/cube.js/compare/v0.25.33...v0.26.0) (2021-02-01) - -**Note:** Version bump only for package @cubejs-client/vue - -# [0.25.0](https://github.com/cube-js/cube.js/compare/v0.24.15...v0.25.0) (2020-12-21) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.24.4](https://github.com/cube-js/cube.js/compare/v0.24.3...v0.24.4) (2020-12-07) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.24.2](https://github.com/cube-js/cube.js/compare/v0.24.1...v0.24.2) (2020-11-27) - -**Note:** Version bump only for package @cubejs-client/vue - -# [0.24.0](https://github.com/cube-js/cube.js/compare/v0.23.15...v0.24.0) (2020-11-26) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.23.6](https://github.com/cube-js/cube.js/compare/v0.23.5...v0.23.6) (2020-11-02) - -**Note:** Version bump only for package @cubejs-client/vue - -# [0.23.0](https://github.com/cube-js/cube.js/compare/v0.22.4...v0.23.0) (2020-10-28) - -**Note:** Version bump only for package @cubejs-client/vue - -# [0.22.0](https://github.com/cube-js/cube.js/compare/v0.21.2...v0.22.0) (2020-10-20) - -### Bug Fixes - -- **@cubejs-client/vue:** Allow array props on query renderer to allow data blending usage ([#1213](https://github.com/cube-js/cube.js/issues/1213)). Thanks to [@richipargo](https://github.com/richipargo) ([2203a54](https://github.com/cube-js/cube.js/commit/2203a54)) - -## [0.21.1](https://github.com/cube-js/cube.js/compare/v0.21.0...v0.21.1) (2020-10-15) - -**Note:** Version bump only for package @cubejs-client/vue - -# [0.21.0](https://github.com/cube-js/cube.js/compare/v0.20.15...v0.21.0) (2020-10-09) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.20.11](https://github.com/cube-js/cube.js/compare/v0.20.10...v0.20.11) (2020-09-28) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.20.9](https://github.com/cube-js/cube.js/compare/v0.20.8...v0.20.9) (2020-09-19) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.20.6](https://github.com/cube-js/cube.js/compare/v0.20.5...v0.20.6) (2020-09-10) - -**Note:** Version bump only for package @cubejs-client/vue - -# [0.20.0](https://github.com/cube-js/cube.js/compare/v0.19.61...v0.20.0) (2020-08-26) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.19.51](https://github.com/cube-js/cube.js/compare/v0.19.50...v0.19.51) (2020-07-17) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.19.50](https://github.com/cube-js/cube.js/compare/v0.19.49...v0.19.50) (2020-07-16) - -### Bug Fixes - -- **cubejs-client-vue:** added deep watch at query props object in Vue QueryBuilder ([#818](https://github.com/cube-js/cube.js/issues/818)) ([32402e6](https://github.com/cube-js/cube.js/commit/32402e6)) -- filter out falsy members ([65b19c9](https://github.com/cube-js/cube.js/commit/65b19c9)) - -### Features - -- ResultSet serializaion and deserializaion ([#836](https://github.com/cube-js/cube.js/issues/836)) ([80b8d41](https://github.com/cube-js/cube.js/commit/80b8d41)) - -## [0.19.48](https://github.com/cube-js/cube.js/compare/v0.19.47...v0.19.48) (2020-07-11) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.19.43](https://github.com/cube-js/cube.js/compare/v0.19.42...v0.19.43) (2020-07-04) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.19.42](https://github.com/cube-js/cube.js/compare/v0.19.41...v0.19.42) (2020-07-01) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.19.35](https://github.com/cube-js/cube.js/compare/v0.19.34...v0.19.35) (2020-06-22) - -### Bug Fixes - -- **cubejs-client-core:** table pivot ([#672](https://github.com/cube-js/cube.js/issues/672)) ([70015f5](https://github.com/cube-js/cube.js/commit/70015f5)) - -## [0.19.31](https://github.com/cube-js/cube.js/compare/v0.19.30...v0.19.31) (2020-06-10) - -### Features - -- Query builder order by ([#685](https://github.com/cube-js/cube.js/issues/685)) ([d3c735b](https://github.com/cube-js/cube.js/commit/d3c735b)) - -## [0.19.19](https://github.com/cube-js/cube.js/compare/v0.19.18...v0.19.19) (2020-05-15) - -### Bug Fixes - -- corejs version ([8bef3b2](https://github.com/cube-js/cube.js/commit/8bef3b2)) -- **client-vue:** updateChartType fix ([#644](https://github.com/cube-js/cube.js/issues/644)) ([5c0e79c](https://github.com/cube-js/cube.js/commit/5c0e79c)), closes [#635](https://github.com/cube-js/cube.js/issues/635) - -# [0.19.0](https://github.com/cube-js/cube.js/compare/v0.18.32...v0.19.0) (2020-04-09) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.18.5](https://github.com/cube-js/cube.js/compare/v0.18.4...v0.18.5) (2020-03-15) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.18.4](https://github.com/cube-js/cube.js/compare/v0.18.3...v0.18.4) (2020-03-09) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.18.3](https://github.com/cube-js/cube.js/compare/v0.18.2...v0.18.3) (2020-03-02) - -**Note:** Version bump only for package @cubejs-client/vue - -# [0.18.0](https://github.com/cube-js/cube.js/compare/v0.17.10...v0.18.0) (2020-03-01) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.17.10](https://github.com/cube-js/cube.js/compare/v0.17.9...v0.17.10) (2020-02-20) - -### Bug Fixes - -- Revert "feat: Bump corejs ([#378](https://github.com/cube-js/cube.js/issues/378))" ([b21cbe6](https://github.com/cube-js/cube.js/commit/b21cbe6)), closes [#418](https://github.com/cube-js/cube.js/issues/418) - -## [0.17.9](https://github.com/cube-js/cube.js/compare/v0.17.8...v0.17.9) (2020-02-18) - -### Features - -- Bump corejs ([#378](https://github.com/cube-js/cube.js/issues/378)) ([cb8d51c](https://github.com/cube-js/cube.js/commit/cb8d51c)) - -# [0.17.0](https://github.com/cube-js/cube.js/compare/v0.16.0...v0.17.0) (2020-02-04) - -**Note:** Version bump only for package @cubejs-client/vue - -# [0.16.0](https://github.com/cube-js/cube.js/compare/v0.15.4...v0.16.0) (2020-02-04) - -**Note:** Version bump only for package @cubejs-client/vue - -# [0.15.0](https://github.com/cube-js/cube.js/compare/v0.14.3...v0.15.0) (2020-01-18) - -**Note:** Version bump only for package @cubejs-client/vue - -# [0.14.0](https://github.com/cube-js/cube.js/compare/v0.13.12...v0.14.0) (2020-01-16) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.13.12](https://github.com/cube-js/cube.js/compare/v0.13.11...v0.13.12) (2020-01-12) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.13.7](https://github.com/cube-js/cube.js/compare/v0.13.6...v0.13.7) (2019-12-31) - -### Bug Fixes - -- **client-core:** Uncaught TypeError: cubejs is not a function ([b5c32cd](https://github.com/cube-js/cube.js/commit/b5c32cd)) - -# [0.13.0](https://github.com/cube-js/cube.js/compare/v0.12.3...v0.13.0) (2019-12-10) - -**Note:** Version bump only for package @cubejs-client/vue - -# [0.12.0](https://github.com/cube-js/cube.js/compare/v0.11.25...v0.12.0) (2019-11-25) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.11.18](https://github.com/cube-js/cube.js/compare/v0.11.17...v0.11.18) (2019-11-09) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.11.16](https://github.com/statsbotco/cubejs-client/compare/v0.11.15...v0.11.16) (2019-11-04) - -### Bug Fixes - -- **vue:** Error: Invalid query format: "order" is not allowed ([e6a738a](https://github.com/statsbotco/cubejs-client/commit/e6a738a)) - -## [0.11.13](https://github.com/statsbotco/cubejs-client/compare/v0.11.12...v0.11.13) (2019-10-30) - -### Features - -- **playground:** Static dashboard template ([2458aad](https://github.com/statsbotco/cubejs-client/commit/2458aad)) - -## [0.11.9](https://github.com/statsbotco/cubejs-client/compare/v0.11.8...v0.11.9) (2019-10-23) - -### Bug Fixes - -- Support `apiToken` to be an async function: first request sends incorrect token ([a2d0c77](https://github.com/statsbotco/cubejs-client/commit/a2d0c77)) - -## [0.11.7](https://github.com/statsbotco/cubejs-client/compare/v0.11.6...v0.11.7) (2019-10-22) - -### Features - -- Support `apiToken` to be an async function ([3a3b5f5](https://github.com/statsbotco/cubejs-client/commit/3a3b5f5)) - -# [0.11.0](https://github.com/statsbotco/cubejs-client/compare/v0.10.62...v0.11.0) (2019-10-15) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.10.62](https://github.com/statsbotco/cubejs-client/compare/v0.10.61...v0.10.62) (2019-10-11) - -### Features - -- **vue:** Add order, renewQuery, and reactivity to Vue component ([#229](https://github.com/statsbotco/cubejs-client/issues/229)). Thanks to @TCBroad ([9293f13](https://github.com/statsbotco/cubejs-client/commit/9293f13)) - -## [0.10.61](https://github.com/statsbotco/cubejs-client/compare/v0.10.60...v0.10.61) (2019-10-10) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.10.56](https://github.com/statsbotco/cubejs-client/compare/v0.10.55...v0.10.56) (2019-10-04) - -### Bug Fixes - -- **react:** Evade unnecessary heavy chart renders ([bdcc569](https://github.com/statsbotco/cubejs-client/commit/bdcc569)) - -## [0.10.53](https://github.com/statsbotco/cubejs-client/compare/v0.10.52...v0.10.53) (2019-10-02) - -### Features - -- **client-react:** provide isQueryPresent() as static API method ([59dc5ce](https://github.com/statsbotco/cubejs-client/commit/59dc5ce)) - -## [0.10.49](https://github.com/statsbotco/cubejs-client/compare/v0.10.48...v0.10.49) (2019-10-01) - -### Bug Fixes - -- **client-ngx:** client.ts is missing from the TypeScript compilation ([65a30cf](https://github.com/statsbotco/cubejs-client/commit/65a30cf)) - -## [0.10.43](https://github.com/statsbotco/cubejs-client/compare/v0.10.42...v0.10.43) (2019-09-27) - -### Features - -- Dynamic dashboards ([#218](https://github.com/statsbotco/cubejs-client/issues/218)) ([2c6cdc9](https://github.com/statsbotco/cubejs-client/commit/2c6cdc9)) - -## [0.10.41](https://github.com/statsbotco/cubejs-client/compare/v0.10.40...v0.10.41) (2019-09-13) - -### Bug Fixes - -- support for deep nested watchers on 'QueryRenderer' ([#207](https://github.com/statsbotco/cubejs-client/issues/207)) ([8d3a500](https://github.com/statsbotco/cubejs-client/commit/8d3a500)) - -## [0.10.40](https://github.com/statsbotco/cubejs-client/compare/v0.10.39...v0.10.40) (2019-09-09) - -### Bug Fixes - -- missed Vue.js build ([1cf22d5](https://github.com/statsbotco/cubejs-client/commit/1cf22d5)) - -## [0.10.32](https://github.com/statsbotco/cubejs-client/compare/v0.10.31...v0.10.32) (2019-09-06) - -### Features - -- vue limit, offset and measure filters support ([#194](https://github.com/statsbotco/cubejs-client/issues/194)) ([33f365a](https://github.com/statsbotco/cubejs-client/commit/33f365a)), closes [#188](https://github.com/statsbotco/cubejs-client/issues/188) - -## [0.10.24](https://github.com/statsbotco/cubejs-client/compare/v0.10.23...v0.10.24) (2019-08-16) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.10.17](https://github.com/statsbotco/cubejs-client/compare/v0.10.16...v0.10.17) (2019-07-31) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.10.16](https://github.com/statsbotco/cubejs-client/compare/v0.10.15...v0.10.16) (2019-07-20) - -### Features - -- Lean more on vue slots for state ([#148](https://github.com/statsbotco/cubejs-client/issues/148)) ([e8af88d](https://github.com/statsbotco/cubejs-client/commit/e8af88d)) - -# [0.10.0](https://github.com/statsbotco/cubejs-client/compare/v0.9.24...v0.10.0) (2019-06-21) - -**Note:** Version bump only for package @cubejs-client/vue - -# [0.9.0](https://github.com/statsbotco/cubejs-client/compare/v0.8.7...v0.9.0) (2019-05-11) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.8.4](https://github.com/statsbotco/cubejs-client/compare/v0.8.3...v0.8.4) (2019-05-02) - -**Note:** Version bump only for package @cubejs-client/vue - -## [0.8.1](https://github.com/statsbotco/cubejs-client/compare/v0.8.0...v0.8.1) (2019-04-30) - -**Note:** Version bump only for package @cubejs-client/vue - -# [0.8.0](https://github.com/statsbotco/cubejs-client/compare/v0.7.10...v0.8.0) (2019-04-29) - -**Note:** Version bump only for package @cubejs-client/vue - -# [0.7.0](https://github.com/statsbotco/cubejs-client/compare/v0.6.2...v0.7.0) (2019-04-15) - -**Note:** Version bump only for package @cubejs-client/vue - -# [0.6.0](https://github.com/statsbotco/cubejs-client/compare/v0.5.2...v0.6.0) (2019-04-09) - -### Features - -- Vue.js reactivity on query update ([#70](https://github.com/statsbotco/cubejs-client/issues/70)) ([167fdbf](https://github.com/statsbotco/cubejs-client/commit/167fdbf)) - -## [0.5.1](https://github.com/statsbotco/cubejs-client/compare/v0.5.0...v0.5.1) (2019-04-02) - -### Features - -- Vue package improvements and docs ([fc38e69](https://github.com/statsbotco/cubejs-client/commit/fc38e69)), closes [#68](https://github.com/statsbotco/cubejs-client/issues/68) - -# [0.5.0](https://github.com/statsbotco/cubejs-client/compare/v0.4.6...v0.5.0) (2019-04-01) - -### Features - -- add basic vue support ([#65](https://github.com/statsbotco/cubejs-client/issues/65)) ([f45468b](https://github.com/statsbotco/cubejs-client/commit/f45468b)) diff --git a/packages/cubejs-client-vue/LICENSE b/packages/cubejs-client-vue/LICENSE deleted file mode 100644 index df3b992feff5d..0000000000000 --- a/packages/cubejs-client-vue/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) Cube Dev, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file diff --git a/packages/cubejs-client-vue/README.md b/packages/cubejs-client-vue/README.md deleted file mode 100644 index 52c11b0d46df8..0000000000000 --- a/packages/cubejs-client-vue/README.md +++ /dev/null @@ -1,47 +0,0 @@ -

Cube.js

- -[Website](https://cube.dev) • [Docs](https://cube.dev/docs) • [Blog](https://cube.dev/blog) • [Slack](https://slack.cube.dev) • [Twitter](https://twitter.com/the_cube_dev) - -[![npm version](https://badge.fury.io/js/%40cubejs-client%2Fvue.svg)](https://badge.fury.io/js/%40cubejs-client%2Fvue) -[![GitHub Actions](https://github.com/cube-js/cube.js/workflows/Build/badge.svg)](https://github.com/cube-js/cube.js/actions?query=workflow%3ABuild+branch%3Amaster) - -# Cube.js Vue - ---- -**⚠️ DEPRECATED** - -This package is only compatible with Vue 2, which has reached End of Life (EOL). It is deprecated and will not receive any updates. We highly recommend upgrading to `@cubejs-client/vue3` and Vue 3. - ---- - -## Project setup -``` -yarn install -``` - -### Compiles and hot-reloads for development -``` -yarn run serve -``` - -### Compiles and minifies for production -``` -yarn run build -``` - -### Run your tests -``` -yarn run test -``` - -### Lints and fixes files -``` -yarn run lint -``` - -### Customize configuration -See [Configuration Reference](https://cli.vuejs.org/config/). - -### License - -Cube.js Vue is [MIT licensed](./LICENSE). diff --git a/packages/cubejs-client-vue/babel.config.js b/packages/cubejs-client-vue/babel.config.js deleted file mode 100644 index f39476ec32b69..0000000000000 --- a/packages/cubejs-client-vue/babel.config.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - presets: ['@vue/app'], - plugins: ['@babel/plugin-proposal-optional-chaining'], -}; diff --git a/packages/cubejs-client-vue/jest.config.js b/packages/cubejs-client-vue/jest.config.js deleted file mode 100644 index 44e503c8c67b6..0000000000000 --- a/packages/cubejs-client-vue/jest.config.js +++ /dev/null @@ -1,31 +0,0 @@ -module.exports = { - moduleFileExtensions: [ - 'js', - 'jsx', - 'json', - 'vue' - ], - transform: { - '^.+\\.vue$': '@vue/vue2-jest', - '.+\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$': 'jest-transform-stub', - '^.+\\.jsx?$': 'babel-jest' - }, - transformIgnorePatterns: [ - '/node_modules/' - ], - moduleNameMapper: { - '^@/(.*)$': '/src/$1' - }, - snapshotSerializers: [ - 'jest-serializer-vue' - ], - testMatch: [ - '**/tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)' - ], - testEnvironment: 'jsdom', - testURL: 'http://localhost/', - watchPlugins: [ - 'jest-watch-typeahead/filename', - 'jest-watch-typeahead/testname' - ] -} diff --git a/packages/cubejs-client-vue/package.json b/packages/cubejs-client-vue/package.json deleted file mode 100644 index 8bafd78439d6f..0000000000000 --- a/packages/cubejs-client-vue/package.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "name": "@cubejs-client/vue", - "version": "1.5.10", - "engines": {}, - "repository": { - "type": "git", - "url": "https://github.com/cube-js/cube.js.git", - "directory": "packages/cubejs-client-vue" - }, - "description": "Vue.js components for cube.js", - "author": "Ricardo Tapia", - "contributors": [ - "Ricardo Tapia", - "Cube Dev, Inc." - ], - "scripts": { - "serve": "vue-cli-service serve", - "lint": "vue-cli-service lint", - "test": "vue-cli-service test:unit", - "unit": "npm run test:unit", - "test:unit": "vue-cli-service test:unit", - "test:unit:watch": "vue-cli-service test:unit --watch --require tests/setup.js" - }, - "main": "dist/cubejs-client-vue.cjs.js", - "module": "dist/cubejs-client-vue.esm.js", - "files": [ - "dist", - "src" - ], - "dependencies": { - "@cubejs-client/core": "1.5.10", - "core-js": "^3.6.5", - "ramda": "^0.27.2" - }, - "devDependencies": { - "@babel/plugin-proposal-optional-chaining": "^7.21.0", - "@vue/babel-preset-app": "^5", - "@vue/cli-plugin-babel": "^5", - "@vue/cli-plugin-eslint": "^5", - "@vue/cli-plugin-unit-jest": "^5", - "@vue/cli-service": "^5", - "@vue/test-utils": "^1.3", - "@vue/vue2-jest": "^29", - "eslint": "^7.21.0", - "eslint-plugin-vue": "^6.2.1", - "vue": "^2.7", - "vue-template-compiler": "^2.7" - }, - "peerDependencies": { - "vue": "^2.6.6" - }, - "eslintConfig": { - "root": true, - "env": { - "node": true - }, - "extends": [ - "plugin:vue/essential", - "eslint:recommended" - ], - "rules": {}, - "parserOptions": { - "parser": "babel-eslint" - } - }, - "postcss": { - "plugins": { - "autoprefixer": {} - } - }, - "browserslist": [ - "> 1%", - "last 2 versions", - "not ie <= 8" - ], - "license": "MIT", - "publishConfig": { - "access": "public" - } -} diff --git a/packages/cubejs-client-vue/src/QueryBuilder.js b/packages/cubejs-client-vue/src/QueryBuilder.js deleted file mode 100644 index 5fd15fdb3abed..0000000000000 --- a/packages/cubejs-client-vue/src/QueryBuilder.js +++ /dev/null @@ -1,700 +0,0 @@ -import { - isQueryPresent, - defaultOrder, - defaultHeuristics, - GRANULARITIES, - ResultSet, - getOrderMembersFromOrder, - moveItemInArray, - movePivotItem, - areQueriesEqual, -} from '@cubejs-client/core'; -import { clone, equals } from 'ramda'; - -import QueryRenderer from './QueryRenderer'; - -const QUERY_ELEMENTS = ['measures', 'dimensions', 'segments', 'timeDimensions', 'filters']; - -const toOrderMember = (member) => ({ - id: member.name, - title: member.title, -}); - -const reduceOrderMembers = (array) => - array.reduce((acc, { id, order }) => (order !== 'none' ? [...acc, [id, order]] : acc), []); - -const operators = ['and', 'or']; - -const validateFilters = (filters) => - filters.reduce((acc, raw) => { - if (raw.operator) { - return [...acc, raw]; - } - - const validBooleanFilter = operators.reduce((acc, operator) => { - const filters = raw[operator]; - - const booleanFilters = validateFilters(filters || []); - - if (booleanFilters.length) { - return { ...acc, [operator]: booleanFilters }; - } - - return acc; - }, {}); - - if (operators.some((operator) => validBooleanFilter[operator])) { - return [...acc, validBooleanFilter]; - } - - return acc; - }, []); - -const getDimensionOrMeasure = (meta, m) => { - const memberName = m.member || m.dimension; - return memberName && meta.resolveMember(memberName, ['dimensions', 'measures']); -}; - -const resolveMembers = (meta, arr) => - arr && - arr.map((e, index) => { - return { - ...e, - member: getDimensionOrMeasure(meta, e), - index, - and: resolveMembers(meta, e.and), - or: resolveMembers(meta, e.or), - }; - }); - -export default { - components: { - QueryRenderer, - }, - props: { - query: { - type: Object, - default: () => ({}), - }, - cubeApi: { - type: Object, - required: true, - }, - initialChartType: { - type: String, - default: () => 'line', - }, - disableHeuristics: { - type: Boolean, - }, - stateChangeHeuristics: { - type: Function, - }, - initialVizState: { - type: Object, - default: () => ({}), - }, - wrapWithQueryRenderer: { - type: Boolean, - default: true, - }, - }, - data() { - const { - query = this.query, - chartType = this.initialChartType, - pivotConfig, - } = this.initialVizState; - - return { - initialQuery: query, - skipHeuristics: true, - meta: undefined, - mutex: {}, - chartType, - measures: [], - dimensions: [], - segments: [], - timeDimensions: [], - filters: [], - availableMeasures: [], - availableDimensions: [], - availableTimeDimensions: [], - availableSegments: [], - limit: null, - offset: null, - renewQuery: false, - order: null, - prevValidatedQuery: null, - granularities: GRANULARITIES, - pivotConfig: ResultSet.getNormalizedPivotConfig(query || {}, pivotConfig), - }; - }, - - render(createElement) { - const { - chartType, - cubeApi, - dimensions, - filters, - measures, - meta, - query, - segments, - timeDimensions, - validatedQuery, - isQueryPresent, - availableSegments, - availableTimeDimensions, - availableDimensions, - availableMeasures, - limit, - offset, - setLimit, - removeLimit, - setOffset, - removeOffset, - renewQuery, - order, - orderMembers, - } = this; - - let builderProps = {}; - - if (meta) { - builderProps = { - query, - validatedQuery, - isQueryPresent, - chartType, - measures, - dimensions, - segments, - timeDimensions, - filters, - availableSegments, - availableTimeDimensions, - availableDimensions, - availableMeasures, - updateChartType: this.updateChart, - limit, - offset, - setLimit, - removeLimit, - setOffset, - removeOffset, - renewQuery, - order, - orderMembers, - setOrder: this.setOrder, - setQuery: this.setQuery, - pivotConfig: this.pivotConfig, - updateOrder: { - set: (memberId, newOrder) => { - this.order = reduceOrderMembers( - orderMembers.map((orderMember) => ({ - ...orderMember, - order: orderMember.id === memberId ? newOrder : orderMember.order, - })) - ); - }, - update: (newOrder) => { - this.order = newOrder; - }, - reorder: (sourceIndex, destinationIndex) => { - this.order = reduceOrderMembers( - moveItemInArray(orderMembers, sourceIndex, destinationIndex) - ); - }, - }, - updatePivotConfig: { - moveItem: ({ sourceIndex, destinationIndex, sourceAxis, destinationAxis }) => { - this.pivotConfig = movePivotItem( - this.pivotConfig, - sourceIndex, - destinationIndex, - sourceAxis, - destinationAxis - ); - }, - update: (pivotConfig) => { - this.pivotConfig = { - ...this.pivotConfig, - ...pivotConfig, - }; - }, - }, - }; - - QUERY_ELEMENTS.forEach((elementName) => { - const name = elementName.charAt(0).toUpperCase() + elementName.slice(1); - - builderProps[`add${name}`] = (member) => { - this.addMember(elementName, member); - }; - - builderProps[`update${name}`] = (member, updateWith) => { - this.updateMember(elementName, member, updateWith); - }; - - builderProps[`remove${name}`] = (member) => { - this.removeMember(elementName, member); - }; - - builderProps[`set${name}`] = (members) => { - this.setMembers(elementName, members); - }; - }); - } - - if (!this.wrapWithQueryRenderer && this.$scopedSlots.builder) { - return createElement('div', {}, [this.$scopedSlots.builder(builderProps)]); - } - - // Pass parent slots to child QueryRenderer component - const children = Object.keys(this.$slots).map((slot) => - createElement('template', { slot }, this.$slots[slot]) - ); - - return createElement( - QueryRenderer, - { - props: { - query: this.validatedQuery, - cubeApi, - builderProps, - }, - scopedSlots: this.$scopedSlots, - on: { - queryStatus: (event) => { - this.$emit('queryStatus', event); - }, - }, - }, - children - ); - }, - computed: { - isQueryPresent() { - const { validatedQuery } = this; - - return isQueryPresent(validatedQuery); - }, - orderMembers() { - return getOrderMembersFromOrder( - [ - ...this.measures, - ...this.dimensions, - ...this.timeDimensions.reduce((acc, { dimension, granularity }) => { - if (granularity !== undefined) { - acc.push(toOrderMember(dimension)); - } - return acc; - }, []), - ] - .map((member, index) => { - const id = member.name || member.id; - - if (!id) { - return false; - } - - return { - index, - id, - title: member.title, - }; - }) - .filter(Boolean), - this.order - ); - }, - vizState() { - return { - query: this.validatedQuery, - chartType: this.chartType, - pivotConfig: this.pivotConfig, - }; - }, - validatedQuery() { - let validatedQuery = {}; - let toQuery = (member) => member.name; - // TODO: implement timezone - - let hasElements = false; - QUERY_ELEMENTS.forEach((element) => { - if (element === 'timeDimensions') { - toQuery = (member) => ({ - dimension: member.dimension.name, - granularity: member.granularity, - dateRange: member.dateRange, - }); - } else if (element === 'filters') { - toQuery = (member) => ({ - member: member.member && member.member.name, - operator: member.operator, - values: member.values, - and: member.and && member.and.map(toQuery), - or: member.or && member.or.map(toQuery), - }); - } - - if (this[element].length > 0) { - validatedQuery[element] = this[element].map((x) => toQuery(x)); - - hasElements = true; - } - }); - - if (validatedQuery.filters) { - validatedQuery.filters = validateFilters(validatedQuery.filters); - } - - // only set limit and offset if there are elements otherwise an invalid request with just limit/offset - // gets sent when the component is first mounted, but before the actual query is constructed. - if (hasElements) { - if (this.limit) { - validatedQuery.limit = this.limit; - } - - if (this.offset) { - validatedQuery.offset = this.offset; - } - - if (this.order) { - validatedQuery.order = this.order; - } - - if (this.renewQuery) { - validatedQuery.renewQuery = this.renewQuery; - } - } - - if ( - !this.skipHeuristics && - !this.disableHeuristics && - isQueryPresent(validatedQuery) && - this.meta - ) { - const heuristicsFn = this.stateChangeHeuristics || defaultHeuristics; - const { query, chartType, shouldApplyHeuristicOrder, pivotConfig } = heuristicsFn( - { - query: validatedQuery, - chartType: this.chartType, - }, - this.prevValidatedQuery, - { - meta: this.meta, - sessionGranularity: validatedQuery?.timeDimensions?.[0]?.granularity, - } - ); - - validatedQuery = { - ...validatedQuery, - ...query, - ...(shouldApplyHeuristicOrder ? { order: defaultOrder(query) } : null), - }; - - this.chartType = chartType || this.chartType; - this.pivotConfig = ResultSet.getNormalizedPivotConfig( - validatedQuery, - pivotConfig !== undefined ? pivotConfig : this.pivotConfig - ); - this.copyQueryFromProps(validatedQuery); - } - - // query heuristics should only apply on query change (not applied to the initial query) - if (this.prevValidatedQuery !== null) { - this.skipHeuristics = false; - } - - this.prevValidatedQuery = validatedQuery; - return validatedQuery; - }, - }, - - async mounted() { - this.meta = await this.cubeApi.meta(); - - this.copyQueryFromProps(); - - if (isQueryPresent(this.initialQuery)) { - try { - const dryRunResponse = await this.cubeApi.dryRun(this.initialQuery); - - this.pivotConfig = ResultSet.getNormalizedPivotConfig( - dryRunResponse?.pivotQuery || {}, - this.pivotConfig - ); - } catch (error) { - console.error(error); - } - } - }, - - methods: { - copyQueryFromProps(query) { - const { - measures = [], - dimensions = [], - segments = [], - timeDimensions = [], - filters = [], - limit, - offset, - renewQuery, - order, - } = query || this.initialQuery; - - this.measures = measures.map((m, index) => ({ - index, - ...this.meta.resolveMember(m, 'measures'), - })); - this.dimensions = dimensions.map((m, index) => ({ - index, - ...this.meta.resolveMember(m, 'dimensions'), - })); - this.segments = segments.map((m, index) => ({ - index, - ...this.meta.resolveMember(m, 'segments'), - })); - this.timeDimensions = timeDimensions.map((m, index) => ({ - ...m, - dimension: { - ...this.meta.resolveMember(m.dimension, 'dimensions'), - granularities: this.granularities, - }, - index, - })); - const memberTypes = ['dimensions', 'measures']; - this.filters = filters.map((m, index) => { - const memberName = m.member || m.dimension; - return { - ...m, - member: memberName && this.meta.resolveMember(memberName, memberTypes), - operators: memberName && this.meta.filterOperatorsForMember(memberName, memberTypes), - and: resolveMembers(this.meta, m.and), - or: resolveMembers(this.meta, m.or), - index, - }; - }); - - this.availableMeasures = this.meta.membersForQuery({}, 'measures') || []; - this.availableDimensions = this.meta.membersForQuery({}, 'dimensions') || []; - this.availableTimeDimensions = (this.meta.membersForQuery({}, 'dimensions') || []).filter( - (m) => m.type === 'time' - ); - this.availableSegments = this.meta.membersForQuery({}, 'segments') || []; - this.limit = limit || 10000; - this.offset = offset || null; - this.renewQuery = renewQuery || false; - this.order = order || null; - }, - addMember(element, member) { - const name = element.charAt(0).toUpperCase() + element.slice(1); - let mem; - - if (element === 'timeDimensions') { - mem = this[`available${name}`].find((m) => m.name === member.dimension); - if (mem) { - const dimension = { - ...this.meta.resolveMember(mem.name, 'dimensions'), - granularities: this.granularities, - }; - - mem = { - ...mem, - granularity: member.granularity, - dateRange: member.dateRange, - dimension, - index: this[element].length, - }; - } - } else if (element === 'filters') { - mem = { - ...member, - and: resolveMembers(this.meta, member.and), - or: resolveMembers(this.meta, member.or), - member: getDimensionOrMeasure(this.meta, member), - }; - } else { - mem = this[`available${name}`].find((m) => m.name === member); - } - - if (mem) { - this[element].push(mem); - } - }, - removeMember(element, member) { - let index; - if (element === 'timeDimensions') { - index = this[element].findIndex((x) => x.name === member); - } else if (element === 'filters') { - index = this[element].findIndex((x) => x.member.name === member); - } else { - index = this[element].findIndex((x) => x.name === member); - } - this[element].splice(index, 1); - }, - updateMember(element, old, member) { - const name = element.charAt(0).toUpperCase() + element.slice(1); - let mem; - let index; - - if (element === 'timeDimensions') { - index = this[element].findIndex((x) => x.dimension.name === old.dimension); - mem = this[`available${name}`].find((m) => m.name === member.dimension); - if (mem) { - const dimension = { - ...this.meta.resolveMember(mem.name, 'dimensions'), - granularities: this.granularities, - }; - - mem = { - ...mem, - dimension, - granularity: member.granularity, - dateRange: member.dateRange, - index, - }; - } - } else if (element === 'filters') { - index = this[element].findIndex((x) => x.dimension === old); - mem = { - ...member, - and: resolveMembers(this.meta, member.and), - or: resolveMembers(this.meta, member.or), - member: getDimensionOrMeasure(this.meta, member), - }; - } else { - index = this[element].findIndex((x) => x.name === old); - mem = this[`available${name}`].find((m) => m.name === member); - } - - if (mem) { - this[element].splice(index, 1, mem); - } - }, - setMembers(element, members) { - const name = element.charAt(0).toUpperCase() + element.slice(1); - let mem; - const elements = []; - - members.filter(Boolean).forEach((m) => { - if (element === 'timeDimensions') { - mem = this[`available${name}`].find((x) => x.name === m.dimension); - if (mem) { - const dimension = { - ...this.meta.resolveMember(mem.name, 'dimensions'), - granularities: this.granularities, - }; - - mem = { - ...mem, - granularity: m.granularity, - dateRange: m.dateRange, - dimension, - index: this[element].length, - }; - } - } else if (element === 'filters') { - mem = { - ...m, - and: resolveMembers(this.meta, m.and), - or: resolveMembers(this.meta, m.or), - member: getDimensionOrMeasure(this.meta, m), - }; - } else { - mem = this[`available${name}`].find((x) => x.name === m); - } - - if (mem) { - elements.push(mem); - } - }); - - this[element] = elements; - }, - setLimit(limit) { - this.limit = limit; - }, - removeLimit() { - this.limit = null; - }, - setOffset(offset) { - this.offset = offset; - }, - updateChart(chartType) { - this.chartType = chartType; - }, - setOrder(order = {}) { - this.order = order; - }, - emitVizStateChange(partialVizState) { - this.$emit( - 'vizStateChange', - clone({ - ...this.vizState, - ...partialVizState, - }) - ); - }, - }, - - watch: { - validatedQuery: { - deep: true, - handler(query, prevQuery) { - const hasQueryChanged = !areQueriesEqual(query, prevQuery); - - if (hasQueryChanged) { - this.emitVizStateChange({ - query, - }); - } - - if (isQueryPresent(query) && hasQueryChanged) { - this.cubeApi - .dryRun(query, { - mutexObj: this.mutex, - }) - .then((result) => { - const pivotConfig = ResultSet.getNormalizedPivotConfig(result?.pivotQuery, this.pivotConfig); - - if (!equals(pivotConfig, this.pivotConfig)) { - this.pivotConfig = pivotConfig; - } - }) - .catch((error) => console.error(error)); - } - }, - }, - query: { - deep: true, - handler(query) { - if (!this.meta) { - // this is ok as if meta has not been loaded by the time query prop has changed, - // then the promise for loading meta (found in mounted()) will call - // copyQueryFromProps and will therefore update anyway. - return; - } - this.copyQueryFromProps(query); - }, - }, - pivotConfig: { - deep: true, - handler(pivotConfig, prevPivotConfig) { - if (!equals(pivotConfig, prevPivotConfig)) { - this.emitVizStateChange({ - pivotConfig, - }); - } - }, - }, - chartType(value) { - this.emitVizStateChange({ - chartType: value, - }); - }, - }, -}; diff --git a/packages/cubejs-client-vue/src/QueryRenderer.js b/packages/cubejs-client-vue/src/QueryRenderer.js deleted file mode 100644 index 8e78c7f42372b..0000000000000 --- a/packages/cubejs-client-vue/src/QueryRenderer.js +++ /dev/null @@ -1,185 +0,0 @@ -import { toPairs, fromPairs } from 'ramda'; -import { isQueryPresent, areQueriesEqual } from '@cubejs-client/core'; - -export default { - props: { - query: { - type: [Object, Array], - default: () => ({}), - }, - // TODO: validate with current react implementation - queries: { - type: Object, - }, - loadSql: { - required: false, - }, - cubeApi: { - type: Object, - required: true, - }, - builderProps: { - type: Object, - required: false, - default: () => ({}), - }, - chartType: { - type: String, - required: false, - }, - }, - data() { - return { - mutexObj: {}, - error: undefined, - resultSet: undefined, - loading: false, - sqlQuery: undefined, - }; - }, - async mounted() { - const { query, queries } = this; - - if (isQueryPresent(query)) { - await this.load(); - } else if (isQueryPresent(queries)) { - await this.loadQueries(queries); - } - }, - render(createElement) { - const { $scopedSlots, resultSet, error, loading, sqlQuery } = this; - const empty = createElement('div', {}); - let slot = this.$slots.empty ? this.$slots.empty : empty; - let controls = createElement('div', {}); - const onlyDefault = !('empty' in this.$slots) && !('error' in this.$scopedSlots); - - if ($scopedSlots.builder && this.builderProps.measures) { - controls = $scopedSlots.builder({ ...this.builderProps }); - } - - if ((!loading && resultSet && !error) || onlyDefault) { - let slotProps = { - resultSet, - sqlQuery, - query: this.builderProps.query || this.query, - }; - - if (onlyDefault) { - slotProps = { - loading, - error, - refetch: this.load, - ...this.builderProps, - ...slotProps, - }; - } - - slot = $scopedSlots.default ? $scopedSlots.default(slotProps) : slot; - } else if (error) { - slot = $scopedSlots.error ? $scopedSlots.error({ error, sqlQuery }) : slot; - } - - return createElement('div', {}, [controls, slot]); - }, - methods: { - async load() { - const { query } = this; - - if (!isQueryPresent(query)) { - return; - } - - try { - this.loading = true; - this.error = null; - this.resultSet = null; - - if (this.loadSql === 'only') { - this.sqlQuery = await this.cubeApi.sql(query, { - mutexObj: this.mutexObj, - mutexKey: 'sql', - }); - } else if (this.loadSql) { - this.sqlQuery = await this.cubeApi.sql(query, { - mutexObj: this.mutexObj, - mutexKey: 'sql', - }); - this.resultSet = await this.cubeApi.load(query, { - mutexObj: this.mutexObj, - mutexKey: 'query', - }); - } else { - this.resultSet = await this.cubeApi.load(query, { - mutexObj: this.mutexObj, - mutexKey: 'query', - }); - } - - this.loading = false; - } catch (error) { - this.error = error; - this.resultSet = undefined; - this.loading = false; - } - }, - async loadQueries() { - const { queries } = this; - try { - this.error = undefined; - this.loading = true; - - const resultPromises = Promise.all( - toPairs(queries).map(([name, query]) => - this.cubeApi - .load(query, { - mutexObj: this.mutexObj, - mutexKey: name, - }) - .then((r) => [name, r]) - ) - ); - - this.resultSet = fromPairs(await resultPromises); - this.loading = false; - } catch (error) { - this.error = error; - this.loading = false; - } - }, - }, - watch: { - loading(loading) { - if (loading === false) { - this.$emit('queryStatus', { - isLoading: false, - error: this.error, - resultSet: this.resultSet, - }); - } else { - this.$emit('queryStatus', { isLoading: true }); - } - }, - cubeApi() { - this.load(); - }, - chartType() { - this.load(); - }, - query: { - deep: true, - handler(query, prevQuery) { - if (!areQueriesEqual(query, prevQuery)) { - this.load(); - } - }, - }, - queries: { - handler(val) { - if (val) { - this.loadQueries(); - } - }, - deep: true, - }, - }, -}; diff --git a/packages/cubejs-client-vue/src/index.js b/packages/cubejs-client-vue/src/index.js deleted file mode 100644 index bee202e0713c8..0000000000000 --- a/packages/cubejs-client-vue/src/index.js +++ /dev/null @@ -1,8 +0,0 @@ -import { GRANULARITIES } from '@cubejs-client/core'; - -import QueryRenderer from './QueryRenderer'; -import QueryBuilder from './QueryBuilder'; - -export { QueryRenderer, QueryBuilder, GRANULARITIES }; - -export default {}; diff --git a/packages/cubejs-client-vue/tests/unit/.eslintrc.js b/packages/cubejs-client-vue/tests/unit/.eslintrc.js deleted file mode 100644 index 013a195bf0433..0000000000000 --- a/packages/cubejs-client-vue/tests/unit/.eslintrc.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = { - env: { - jest: true - } -} \ No newline at end of file diff --git a/packages/cubejs-client-vue/tests/unit/QueryBuilder.spec.js b/packages/cubejs-client-vue/tests/unit/QueryBuilder.spec.js deleted file mode 100644 index 4f76a5b859299..0000000000000 --- a/packages/cubejs-client-vue/tests/unit/QueryBuilder.spec.js +++ /dev/null @@ -1,1051 +0,0 @@ -import { mount } from '@vue/test-utils'; -import flushPromises from 'flush-promises'; - -import fetchMock, { meta, load } from './__mocks__/responses'; -import QueryBuilder from '../../src/QueryBuilder'; -import { createCubeApi } from './utils'; - -describe('QueryBuilder.vue', () => { - it('renders meta information', async () => { - const cube = createCubeApi(); - jest - .spyOn(cube, 'request') - .mockImplementation(fetchMock(meta)) - .mockImplementationOnce(fetchMock(meta)); - - const wrapper = mount(QueryBuilder, { - propsData: { - cubeApi: cube, - query: {}, - }, - slots: { - empty: `
i'm empty
`, - }, - }); - - await flushPromises(); - - expect(wrapper.text()).toContain(`i'm empty`); - }); - - it('renders meta information', async () => { - const cube = createCubeApi(); - jest - .spyOn(cube, 'request') - .mockImplementation(fetchMock(load)) - .mockImplementationOnce(fetchMock(meta)); - - let context; - - mount(QueryBuilder, { - propsData: { - cubeApi: cube, - query: { - measures: ['Orders.count'], - }, - }, - scopedSlots: { - builder: (con) => { - context = con; - }, - }, - }); - - await flushPromises(); - expect(context.measures[0].name).toBe('Orders.count'); - }); - - describe('Update background query members', () => { - it('adds members', async () => { - const cube = createCubeApi(); - jest - .spyOn(cube, 'request') - .mockImplementation(fetchMock(load)) - .mockImplementationOnce(fetchMock(meta)); - - const wrapper = mount(QueryBuilder, { - propsData: { - cubeApi: cube, - query: {}, - }, - }); - - await flushPromises(); - - expect(wrapper.vm.measures.length).toBe(0); - wrapper.vm.addMember('measures', 'Orders.count'); - expect(wrapper.vm.measures.length).toBe(1); - expect(wrapper.vm.measures[0].name).toBe('Orders.count'); - }); - - it('updates members', async () => { - const cube = createCubeApi(); - jest - .spyOn(cube, 'request') - .mockImplementation(fetchMock(load)) - .mockImplementationOnce(fetchMock(meta)); - - const wrapper = mount(QueryBuilder, { - propsData: { - cubeApi: cube, - query: { - measures: ['Orders.count'], - }, - }, - }); - - await flushPromises(); - - expect(wrapper.vm.measures.length).toBe(1); - expect(wrapper.vm.measures[0].name).toBe('Orders.count'); - wrapper.vm.updateMember('measures', 'Orders.count', 'LineItems.count'); - expect(wrapper.vm.measures.length).toBe(1); - expect(wrapper.vm.measures[0].name).toBe('LineItems.count'); - }); - - it('removes members', async () => { - const cube = createCubeApi(); - jest - .spyOn(cube, 'request') - .mockImplementation(fetchMock(load)) - .mockImplementationOnce(fetchMock(meta)); - - const wrapper = mount(QueryBuilder, { - propsData: { - cubeApi: cube, - query: { - measures: ['Orders.count'], - }, - }, - }); - - await flushPromises(); - - expect(wrapper.vm.measures.length).toBe(1); - expect(wrapper.vm.measures[0].name).toBe('Orders.count'); - wrapper.vm.removeMember('measures', 'Orders.count'); - expect(wrapper.vm.measures.length).toBe(0); - }); - - it('sets members', async () => { - const cube = createCubeApi(); - jest - .spyOn(cube, 'request') - .mockImplementation(fetchMock(load)) - .mockImplementationOnce(fetchMock(meta)); - - const wrapper = mount(QueryBuilder, { - propsData: { - cubeApi: cube, - query: { - measures: ['Orders.count'], - }, - }, - }); - - await flushPromises(); - - expect(wrapper.vm.measures.length).toBe(1); - expect(wrapper.vm.measures[0].name).toBe('Orders.count'); - wrapper.vm.setMembers('measures', ['LineItems.count']); - expect(wrapper.vm.measures.length).toBe(1); - expect(wrapper.vm.measures[0].name).toBe('LineItems.count'); - }); - }); - - describe('changes background query timeDimensions', () => { - it('adds timeeDimensions', async () => { - const cube = createCubeApi(); - jest - .spyOn(cube, 'request') - .mockImplementation(fetchMock(load)) - .mockImplementationOnce(fetchMock(meta)); - - const wrapper = mount(QueryBuilder, { - propsData: { - cubeApi: cube, - query: {}, - }, - }); - - await flushPromises(); - - expect(wrapper.vm.measures.length).toBe(0); - wrapper.vm.addMember('timeDimensions', { - dimension: 'Orders.createdAt', - dateRange: ['2015-01-01', '2015-12-31'], - granularity: 'month', - }); - expect(wrapper.vm.timeDimensions.length).toBe(1); - expect(wrapper.vm.timeDimensions[0].name).toBe('Orders.createdAt'); - expect(wrapper.vm.timeDimensions[0].granularity).toBe('month'); - }); - - it('updates timeDimensions', async () => { - const cube = createCubeApi(); - jest - .spyOn(cube, 'request') - .mockImplementation(fetchMock(load)) - .mockImplementationOnce(fetchMock(meta)); - - const dimension = { - dimension: 'Orders.createdAt', - dateRange: ['2015-01-01', '2015-12-31'], - granularity: 'month', - }; - - const newDimension = { - dimension: 'LineItems.createdAt', - dateRange: ['2015-01-01', '2015-12-31'], - granularity: 'day', - }; - - const wrapper = mount(QueryBuilder, { - propsData: { - cubeApi: cube, - query: { - timeDimensions: [dimension], - }, - }, - }); - - await flushPromises(); - - expect(wrapper.vm.timeDimensions.length).toBe(1); - expect(wrapper.vm.timeDimensions[0].dimension.name).toBe('Orders.createdAt'); - expect(wrapper.vm.timeDimensions[0].granularity).toBe('month'); - wrapper.vm.updateMember('timeDimensions', dimension, newDimension); - expect(wrapper.vm.timeDimensions.length).toBe(1); - expect(wrapper.vm.timeDimensions[0].dimension.name).toBe('LineItems.createdAt'); - expect(wrapper.vm.timeDimensions[0].granularity).toBe('day'); - }); - - it('removes timeDimensions', async () => { - const cube = createCubeApi(); - jest - .spyOn(cube, 'request') - .mockImplementation(fetchMock(load)) - .mockImplementationOnce(fetchMock(meta)); - - const dimension = { - dimension: 'Orders.createdAt', - dateRange: ['2015-01-01', '2015-12-31'], - granularity: 'month', - }; - - const wrapper = mount(QueryBuilder, { - propsData: { - cubeApi: cube, - query: { - timeDimensions: [dimension], - }, - }, - }); - - await flushPromises(); - - expect(wrapper.vm.timeDimensions.length).toBe(1); - expect(wrapper.vm.timeDimensions[0].dimension.name).toBe('Orders.createdAt'); - wrapper.vm.removeMember('timeDimensions', 'Orders.createdAt'); - expect(wrapper.vm.timeDimensions.length).toBe(0); - }); - - it('sets timeDimensions', async () => { - const cube = createCubeApi(); - jest - .spyOn(cube, 'request') - .mockImplementation(fetchMock(load)) - .mockImplementationOnce(fetchMock(meta)); - - const dimension = { - dimension: 'Orders.createdAt', - dateRange: ['2015-01-01', '2015-12-31'], - granularity: 'month', - }; - - const newDimension = { - dimension: 'LineItems.createdAt', - dateRange: ['2015-01-01', '2015-12-31'], - granularity: 'day', - }; - - const wrapper = mount(QueryBuilder, { - propsData: { - cubeApi: cube, - query: { - timeDimensions: [dimension], - }, - }, - }); - - await flushPromises(); - - expect(wrapper.vm.timeDimensions.length).toBe(1); - expect(wrapper.vm.timeDimensions[0].dimension.name).toBe('Orders.createdAt'); - expect(wrapper.vm.timeDimensions[0].granularity).toBe('month'); - wrapper.vm.setMembers('timeDimensions', [newDimension]); - expect(wrapper.vm.timeDimensions.length).toBe(1); - expect(wrapper.vm.timeDimensions[0].dimension.name).toBe('LineItems.createdAt'); - expect(wrapper.vm.timeDimensions[0].granularity).toBe('day'); - }); - }); - - describe('update background query on filters', () => { - it('adds filters', async () => { - const cube = createCubeApi(); - jest - .spyOn(cube, 'request') - .mockImplementation(fetchMock(load)) - .mockImplementationOnce(fetchMock(meta)); - - const wrapper = mount(QueryBuilder, { - propsData: { - cubeApi: cube, - query: {}, - }, - }); - - await flushPromises(); - - expect(wrapper.vm.filters.length).toBe(0); - wrapper.vm.addMember('filters', { - dimension: 'Orders.status', - operator: 'equals', - values: ['valid'], - }); - expect(wrapper.vm.filters.length).toBe(1); - expect(wrapper.vm.filters[0].member.name).toBe('Orders.status'); - }); - - it('updates filters', async () => { - const cube = createCubeApi(); - jest - .spyOn(cube, 'request') - .mockImplementation(fetchMock(load)) - .mockImplementationOnce(fetchMock(meta)); - - const filter = { - dimension: 'Orders.status', - operator: 'equals', - values: ['invalid'], - }; - - const newFilter = { - dimension: 'Orders.status', - operator: 'equals', - values: ['valid'], - }; - - const wrapper = mount(QueryBuilder, { - propsData: { - cubeApi: cube, - query: { - filters: [filter], - }, - }, - }); - - await flushPromises(); - - expect(wrapper.vm.filters.length).toBe(1); - expect(wrapper.vm.filters[0].member.name).toBe('Orders.status'); - expect(wrapper.vm.filters[0].values).toContain('invalid'); - wrapper.vm.updateMember('filters', 'Orders.status', newFilter); - expect(wrapper.vm.filters.length).toBe(1); - expect(wrapper.vm.filters[0].member.name).toBe('Orders.status'); - expect(wrapper.vm.filters[0].values).toContain('valid'); - }); - - it('removes filters', async () => { - const cube = createCubeApi(); - jest - .spyOn(cube, 'request') - .mockImplementation(fetchMock(load)) - .mockImplementationOnce(fetchMock(meta)); - - const filter = { - dimension: 'Orders.status', - operator: 'equals', - values: ['invalid'], - }; - - const wrapper = mount(QueryBuilder, { - propsData: { - cubeApi: cube, - query: { - filters: [filter], - }, - }, - }); - - await flushPromises(); - - expect(wrapper.vm.filters.length).toBe(1); - expect(wrapper.vm.filters[0].member.name).toBe('Orders.status'); - expect(wrapper.vm.filters[0].values).toContain('invalid'); - wrapper.vm.removeMember('filters', 'Orders.status'); - expect(wrapper.vm.filters.length).toBe(0); - }); - - it('sets filters', async () => { - const cube = createCubeApi(); - jest - .spyOn(cube, 'request') - .mockImplementation(fetchMock(load)) - .mockImplementationOnce(fetchMock(meta)); - - const filter = { - dimension: 'Orders.status', - operator: 'equals', - values: ['invalid'], - }; - - const newFilter = { - dimension: 'Orders.status', - operator: 'equals', - values: ['valid'], - }; - - const wrapper = mount(QueryBuilder, { - propsData: { - cubeApi: cube, - query: { - filters: [filter], - }, - }, - }); - - await flushPromises(); - - expect(wrapper.vm.filters.length).toBe(1); - expect(wrapper.vm.filters[0].member.name).toBe('Orders.status'); - expect(wrapper.vm.filters[0].values).toContain('invalid'); - wrapper.vm.setMembers('filters', [newFilter]); - expect(wrapper.vm.filters.length).toBe(1); - expect(wrapper.vm.filters[0].member.name).toBe('Orders.status'); - expect(wrapper.vm.filters[0].values).toContain('valid'); - }); - - it('sets filters with boolean logical operators', async () => { - const cube = createCubeApi(); - jest - .spyOn(cube, 'request') - .mockImplementation(fetchMock(load)) - .mockImplementationOnce(fetchMock(meta)); - - const filter = { - and: [ - { - dimension: 'Orders.status', - operator: 'equals', - values: ['this'], - }, - { - dimension: 'Orders.status', - operator: 'equals', - values: ['that'], - }, - ], - or: [ - { - dimension: 'Orders.status', - operator: 'equals', - values: ['this'], - }, - { - dimension: 'Orders.status', - operator: 'equals', - values: ['that'], - }, - { - and: [ - { - dimension: 'Orders.status', - operator: 'equals', - values: ['this'], - }, - { - dimension: 'Orders.status', - operator: 'equals', - values: ['that'], - }, - ], - }, - ], - }; - - const wrapper = mount(QueryBuilder, { - propsData: { - cubeApi: cube, - query: { - filters: [filter], - }, - }, - }); - - await flushPromises(); - - expect(wrapper.vm.filters[0].or.length).toBe(3); - expect(wrapper.vm.filters[0].and.length).toBe(2); - wrapper.vm.setMembers('filters', []); - expect(wrapper.vm.validatedQuery.filters).toBeUndefined(); - wrapper.vm.setMembers('filters', [filter]); - expect(wrapper.vm.validatedQuery.filters.length).toBe(1); - expect(wrapper.vm.validatedQuery.filters[0].and[0].member).toBe('Orders.status'); - expect(wrapper.vm.validatedQuery.filters[0].and[0].values).toContain('this'); - expect(wrapper.vm.validatedQuery.filters[0].and[1].values).toContain('that'); - expect(wrapper.vm.validatedQuery.filters[0].or[0].member).toBe('Orders.status'); - expect(wrapper.vm.validatedQuery.filters[0].or[0].values).toContain('this'); - expect(wrapper.vm.validatedQuery.filters[0].or[1].values).toContain('that'); - expect(wrapper.vm.validatedQuery.filters[0].or[2].and[0].member).toBe('Orders.status'); - expect(wrapper.vm.validatedQuery.filters[0].or[2].and[0].values).toContain('this'); - expect(wrapper.vm.validatedQuery.filters[0].or[2].and[1].values).toContain('that'); - }); - - it('filters with boolean logical operators without explicit set', async () => { - const cube = createCubeApi(); - jest - .spyOn(cube, 'request') - .mockImplementation(fetchMock(load)) - .mockImplementationOnce(fetchMock(meta)); - - const filter = { - or: [ - { - dimension: 'Orders.status', - operator: 'equals', - values: ['this'], - }, - { - dimension: 'Orders.status', - operator: 'equals', - values: ['that'], - }, - { - and: [ - { - dimension: 'Orders.status', - operator: 'equals', - values: ['this'], - }, - { - dimension: 'Orders.status', - operator: 'equals', - values: ['that'], - }, - ], - }, - ], - }; - - const wrapper = mount(QueryBuilder, { - propsData: { - cubeApi: cube, - query: { - filters: [filter], - }, - }, - }); - - await flushPromises(); - - expect(wrapper.vm.filters[0].or.length).toBe(3); - expect(wrapper.vm.validatedQuery.filters.length).toBe(1); - expect(wrapper.vm.validatedQuery.filters[0].or[0].member).toBe('Orders.status'); - expect(wrapper.vm.validatedQuery.filters[0].or[0].values).toContain('this'); - expect(wrapper.vm.validatedQuery.filters[0].or[1].values).toContain('that'); - expect(wrapper.vm.validatedQuery.filters[0].or[2].and[0].member).toBe('Orders.status'); - expect(wrapper.vm.validatedQuery.filters[0].or[2].and[0].values).toContain('this'); - expect(wrapper.vm.validatedQuery.filters[0].or[2].and[1].values).toContain('that'); - }); - - it.each([ - [ - { - and: [ - { - dimension: 'Orders.status', - values: ['this'], - }, - ], - }, - 0, - ], - [ - { - or: [ - { - dimension: 'Orders.status', - values: ['this'], - }, - ], - }, - 0, - ], - [ - { - or: [ - { - dimension: 'Orders.status', - values: ['this'], - }, - { - and: [ - { - dimension: 'Orders.status', - values: ['this'], - }, - ], - }, - ], - }, - 0, - ], - [ - { - and: [ - { - dimension: 'Orders.status', - values: ['this'], - }, - ], - or: [ - { - dimension: 'Orders.status', - operator: 'equals', - values: ['this'], - }, - ], - }, - 1, - ], - [ - { - or: [ - { - dimension: 'Orders.status', - values: ['this'], - }, - { - and: [ - { - dimension: 'Orders.status', - operator: 'equals', - values: ['this'], - }, - ], - }, - ], - }, - 1, - ], - ])('does not assign boolean logical operators having no operator', async (filter, expected) => { - const cube = createCubeApi(); - jest - .spyOn(cube, 'request') - .mockImplementation(fetchMock(load)) - .mockImplementationOnce(fetchMock(meta)); - - const wrapper = mount(QueryBuilder, { - propsData: { - cubeApi: cube, - query: { - filters: [], - }, - }, - }); - - await flushPromises(); - - wrapper.vm.setMembers('filters', [filter]); - expect(wrapper.vm.validatedQuery.filters.length).toBe(expected); - }); - - it('sets filters when using measure', async () => { - const cube = createCubeApi(); - jest - .spyOn(cube, 'request') - .mockImplementation(fetchMock(load)) - .mockImplementationOnce(fetchMock(meta)); - - const filter = { - member: 'Orders.number', - operator: 'gt', - values: ['1'], - }; - - const wrapper = mount(QueryBuilder, { - propsData: { - cubeApi: cube, - query: { - filters: [filter], - }, - }, - }); - - await flushPromises(); - - expect(wrapper.vm.filters.length).toBe(1); - expect(wrapper.vm.filters[0].member.name).toBe('Orders.number'); - expect(wrapper.vm.filters[0].values).toContain('1'); - }); - - it('sets limit', async () => { - const cube = createCubeApi(); - jest - .spyOn(cube, 'request') - .mockImplementation(fetchMock(load)) - .mockImplementationOnce(fetchMock(meta)); - - const filter = { - member: 'Orders.status', - operator: 'equals', - values: ['invalid'], - }; - - const wrapper = mount(QueryBuilder, { - propsData: { - cubeApi: cube, - query: { - filters: [filter], - limit: 10, - }, - }, - }); - - await flushPromises(); - - expect(wrapper.vm.limit).toBe(10); - }); - - it('sets offset', async () => { - const cube = createCubeApi(); - jest - .spyOn(cube, 'request') - .mockImplementation(fetchMock(load)) - .mockImplementationOnce(fetchMock(meta)); - - const filter = { - member: 'Orders.status', - operator: 'equals', - values: ['invalid'], - }; - - const wrapper = mount(QueryBuilder, { - propsData: { - cubeApi: cube, - query: { - filters: [filter], - offset: 10, - }, - }, - }); - - await flushPromises(); - - expect(wrapper.vm.offset).toBe(10); - }); - - it('sets renewQuery', async () => { - const cube = createCubeApi(); - jest - .spyOn(cube, 'request') - .mockImplementation(fetchMock(load)) - .mockImplementationOnce(fetchMock(meta)); - - const filter = { - member: 'Orders.status', - operator: 'equals', - values: ['invalid'], - }; - - const wrapper = mount(QueryBuilder, { - propsData: { - cubeApi: cube, - query: { - filters: [filter], - renewQuery: true, - }, - }, - }); - - await flushPromises(); - - expect(wrapper.vm.renewQuery).toBe(true); - }); - - it('ignore order if empty', async () => { - const cube = createCubeApi(); - jest - .spyOn(cube, 'request') - .mockImplementation(fetchMock(load)) - .mockImplementationOnce(fetchMock(meta)); - - const filter = { - member: 'Orders.status', - operator: 'equals', - values: ['invalid'], - }; - - const wrapper = mount(QueryBuilder, { - propsData: { - cubeApi: cube, - query: { - filters: [filter], - }, - }, - }); - - await flushPromises(); - - expect(wrapper.vm.order).toBe(null); - }); - - it('sets order', async () => { - const cube = createCubeApi(); - jest - .spyOn(cube, 'request') - .mockImplementation(fetchMock(load)) - .mockImplementationOnce(fetchMock(meta)); - - const filter = { - member: 'Orders.status', - operator: 'equals', - values: ['invalid'], - }; - - const wrapper = mount(QueryBuilder, { - propsData: { - cubeApi: cube, - query: { - dimensions: ['Orders.status'], - filters: [filter], - order: { - 'Orders.status': 'desc', - }, - }, - }, - }); - - await flushPromises(); - - expect(wrapper.vm.order['Orders.status']).toBe('desc'); - }); - - // todo: fix later - // it('is reactive when filter is changed', async () => { - // const cube = createCubeApi(); - // jest - // .spyOn(cube, 'request') - // .mockImplementation(fetchMock(load)) - // .mockImplementationOnce(fetchMock(meta)); - // - // const filter = { - // member: 'Orders.status', - // operator: 'equals', - // values: ['invalid'], - // }; - // - // const newFilter = { - // dimension: 'Orders.number', - // operator: 'equals', - // values: ['1'], - // }; - // - // const wrapper = mount(QueryBuilder, { - // propsData: { - // cubeApi: cube, - // query: { - // filters: [filter], - // }, - // }, - // }); - // - // await flushPromises(); - // - // expect(wrapper.vm.filters.length).toBe(1); - // expect(wrapper.vm.filters[0].member.name).toBe('Orders.status'); - // expect(wrapper.vm.filters[0].values).toContain('invalid'); - // - // wrapper.setProps({ - // query: { - // filters: [newFilter], - // }, - // }); - // - // await flushPromises(); - // - // expect(wrapper.vm.filters.length).toBe(1); - // expect(wrapper.vm.filters[0].member.name).toBe('Orders.number'); - // expect(wrapper.vm.filters[0].values).toContain('1'); - // }); - }); - - describe('builder slot updatePivotConfig.update', () => { - it.each([ - { x: ['Orders.status'] }, - { y: ['measures'] }, - { x: ['Orders.status', 'measures'], y: [] }, - { aliasSeries: ['one'] }, - { fillMissingDates: true }, - { fillMissingDates: false }, - ])('sets pivotConfig', async (pivotConfig) => { - const cube = createCubeApi(); - jest - .spyOn(cube, 'request') - .mockImplementation(fetchMock(load)) - .mockImplementationOnce(fetchMock(meta)); - - const wrapper = mount(QueryBuilder, { - propsData: { - cubeApi: cube, - query: { - measures: ['Orders.count'], - dimensions: ['Orders.status'], - }, - }, - scopedSlots: { - builder: function ({ updatePivotConfig }) { - return this.$createElement('input', { - on: { change: () => updatePivotConfig.update(pivotConfig) }, - }); - }, - }, - }); - - await flushPromises(); - - wrapper.find('input').trigger('change'); - expect(wrapper.vm.pivotConfig).toMatchObject(pivotConfig); - }); - }); - - describe('builder computed', () => { - describe('validatedQuery', () => { - it('correctly updates pivot config after chart type change', async () => { - const expectedPivotForTable = { - x: ['Orders.status'], - y: ['measures'], - fillMissingDates: true, - joinDateRange: false, - }; - - const expectedPivotForLine = { - x: ['Orders.createdAt.day'], - y: ['Orders.status', 'measures'], - fillMissingDates: true, - joinDateRange: false, - }; - - const cube = createCubeApi(); - jest - .spyOn(cube, 'request') - .mockImplementation(fetchMock(load)) - .mockImplementationOnce(fetchMock(meta)); - - const wrapper = mount(QueryBuilder, { - propsData: { - cubeApi: cube, - query: { - measures: ['Orders.count'], - timeDimensions: [{ - dimension: 'Orders.createdAt', - }], - }, - }, - scopedSlots: { - builder: function ({ updateChartType }) { - return this.$createElement('input', { - on: { change: () => updateChartType('line')} - }); - }, - }, - }); - - await flushPromises(); - - wrapper.vm.addMember('dimensions', 'Orders.status'); // to trigger first heuristics - await wrapper.vm.$nextTick(); - expect(wrapper.vm.pivotConfig).toEqual(expectedPivotForTable); - expect(wrapper.vm.chartType).toBe('table'); - wrapper.find('input').trigger('change'); - await wrapper.vm.$nextTick(); - expect(wrapper.vm.pivotConfig).toEqual(expectedPivotForLine); - expect(wrapper.vm.chartType).toBe('line'); - }); - }); - describe('orderMembers', () => { - it('does not contain time dimension if granularity is set to none', async () => { - const cube = createCubeApi(); - jest - .spyOn(cube, 'request') - .mockImplementation(fetchMock(load)) - .mockImplementationOnce(fetchMock(meta)); - - const wrapper = mount(QueryBuilder, { - propsData: { - cubeApi: cube, - query: { - measures: ['Orders.count'], - timeDimensions: [{ - dimension: 'Orders.createdAt', - }], - }, - }, - }); - - await flushPromises(); - - expect(wrapper.vm.orderMembers.length).toBe(1); - expect(wrapper.vm.orderMembers).toEqual( - expect.arrayContaining([ - expect.objectContaining({ - id: 'Orders.count', - title: 'Orders Count', - order: 'none', - }), - ]) - ); - }); - - it('contains time dimension if granularity is not none', async () => { - const cube = createCubeApi(); - jest - .spyOn(cube, 'request') - .mockImplementation(fetchMock(load)) - .mockImplementationOnce(fetchMock(meta)); - - const wrapper = mount(QueryBuilder, { - propsData: { - cubeApi: cube, - query: { - measures: ['Orders.count'], - timeDimensions: [{ - dimension: 'Orders.createdAt', - granularity: 'day', - }], - }, - }, - }); - - await flushPromises(); - - expect(wrapper.vm.orderMembers.length).toBe(2); - expect(wrapper.vm.orderMembers).toEqual( - expect.arrayContaining([ - expect.objectContaining({ - id: 'Orders.createdAt', - title: 'Orders Created at', - order: 'none' - }), - expect.objectContaining({ - id: 'Orders.count', - title: 'Orders Count', - order: 'none', - }) - ]) - ); - }); - }); - }); -}); diff --git a/packages/cubejs-client-vue/tests/unit/QueryRenderer.spec.js b/packages/cubejs-client-vue/tests/unit/QueryRenderer.spec.js deleted file mode 100644 index ad6487a84394e..0000000000000 --- a/packages/cubejs-client-vue/tests/unit/QueryRenderer.spec.js +++ /dev/null @@ -1,136 +0,0 @@ -import { shallowMount } from '@vue/test-utils'; -import flushPromises from 'flush-promises'; - -import QueryRenderer from '../../src/QueryRenderer'; -import fetchMock, { load } from './__mocks__/responses'; -import { createCubeApi } from './utils'; - -describe('QueryRenderer.vue', () => { - describe('Loads single query from api', () => { - it('Loads empty state', () => { - const cube = createCubeApi(); - jest.spyOn(cube, 'request').mockImplementation(fetchMock(load)); - - const wrapper = shallowMount(QueryRenderer, { - propsData: { - query: {}, - cubeApi: cube, - }, - slots: { - empty: `
i'm empty
`, - }, - }); - - expect(wrapper.text()).toContain(`i'm empty`); - expect(cube.request.mock.calls.length).toBe(0); - }); - - it('Loads error state', async () => { - const cube = createCubeApi(); - jest.spyOn(cube, 'request').mockImplementation(fetchMock({ error: 'error message' }, 400)); - - const wrapper = shallowMount(QueryRenderer, { - propsData: { - query: { - measures: ['Stories.count'], - }, - cubeApi: cube, - }, - scopedSlots: { - error: `
{{props.error}}
`, - }, - }); - - await flushPromises(); - - expect(wrapper.text()).toContain('error'); - expect(cube.request.mock.calls.length).toBe(1); - }); - - it('Loads resultSet', async () => { - const cube = createCubeApi(); - jest.spyOn(cube, 'request').mockImplementation(fetchMock(load)); - - const wrapper = shallowMount(QueryRenderer, { - propsData: { - query: { - measures: ['Stories.count'], - }, - cubeApi: cube, - }, - scopedSlots: { - default: `
Result set is loaded
`, - }, - }); - - await flushPromises(); - - expect(wrapper.text()).toContain('Result set is loaded'); - expect(cube.request.mock.calls.length).toBe(1); - }); - - // todo: fix - // it('Rerender on query nested property change', async () => { - // const cube = createCubeApi(); - // jest.spyOn(cube, 'request').mockImplementation(fetchMock(single)); - // - // const parent = mount({ - // components: { - // QueryRenderer, - // }, - // template: ` - //
- // - // {{query}} - // - //
- // `, - // data() { - // return { - // cubeApi: cube, - // query: { - // measures: ['Stories.count'], - // dimensions: [], - // filters: [], - // segments: [], - // timeDimensions: [], - // }, - // }; - // }, - // }); - // - // await flushPromises(); - // - // expect(cube.request.mock.calls.length).toBe(1); - // expect(parent.find('.query').element.textContent).toContain('Stories.count'); - // - // // await parent.setData({ - // // query: { - // // measures: ['Users.count'], - // // }, - // // }); - // - // // parent.vm.query.measures = ['Users.count']; - // // await flushPromises(); - // - // expect(cube.request.mock.calls.length).toBe(2); - // expect(parent.find('.query').element.textContent).toContain('Users.count'); - // - // parent.vm.query.measures.push('Users.count'); - // await flushPromises(); - // - // expect(cube.request.mock.calls.length).toBe(3); - // expect(parent.find('.query').element.textContent).toContain('Users.count'); - // - // parent.vm.query.timeDimensions.push({ - // dimension: 'Users.count', - // dateRange: 'last 6 days', - // granularity: 'week', - // }); - // await flushPromises(); - // - // expect(cube.request.mock.calls.length).toBe(4); - // expect(parent.find('.query').element.textContent).toContain('week'); - // }); - }); -}); diff --git a/packages/cubejs-client-vue/tests/unit/__mocks__/responses.js b/packages/cubejs-client-vue/tests/unit/__mocks__/responses.js deleted file mode 100644 index 58aeb40f3066d..0000000000000 --- a/packages/cubejs-client-vue/tests/unit/__mocks__/responses.js +++ /dev/null @@ -1,734 +0,0 @@ -export const meta = { - cubes: [ - { - name: 'LineItems', - title: 'Line Items', - connectedComponent: 1, - measures: [ - { - name: 'LineItems.count', - title: 'Line Items Count', - shortTitle: 'Count', - aliasName: 'line_items.count', - cumulativeTotal: false, - cumulative: false, - type: 'number', - drillMembers: ['LineItems.id', 'LineItems.createdAt'], - }, - { - name: 'LineItems.quantity', - title: 'Line Items Quantity', - shortTitle: 'Quantity', - aliasName: 'line_items.quantity', - cumulativeTotal: false, - cumulative: false, - type: 'number', - }, - { - name: 'LineItems.price', - title: 'Line Items Price', - shortTitle: 'Price', - aliasName: 'line_items.price', - cumulativeTotal: false, - cumulative: false, - type: 'number', - }, - ], - dimensions: [ - { - name: 'LineItems.createdAt', - title: 'Line Items Created at', - type: 'time', - aliasName: 'line_items.created_at', - shortTitle: 'Created at', - suggestFilterValues: true, - }, - ], - segments: [], - }, - { - name: 'Orders', - title: 'Orders', - connectedComponent: 1, - measures: [ - { - name: 'Orders.count', - title: 'Orders Count', - shortTitle: 'Count', - aliasName: 'orders.count', - cumulativeTotal: false, - cumulative: false, - type: 'number', - drillMembers: ['Orders.id', 'Orders.createdAt'], - }, - { - name: 'Orders.number', - title: 'Orders Number', - shortTitle: 'Number', - aliasName: 'orders.number', - cumulativeTotal: false, - cumulative: false, - type: 'number', - }, - ], - dimensions: [ - { - name: 'Orders.status', - title: 'Orders Status', - type: 'string', - aliasName: 'orders.status', - shortTitle: 'Status', - suggestFilterValues: true, - }, - { - name: 'Orders.createdAt', - title: 'Orders Created at', - type: 'time', - aliasName: 'orders.created_at', - shortTitle: 'Created at', - suggestFilterValues: true, - }, - { - name: 'Orders.completedAt', - title: 'Orders Completed at', - type: 'time', - aliasName: 'orders.completed_at', - shortTitle: 'Completed at', - suggestFilterValues: true, - }, - ], - segments: [], - }, - { - name: 'Users', - title: 'Users', - connectedComponent: 1, - measures: [ - { - name: 'Users.count', - title: 'Users Count', - shortTitle: 'Count', - aliasName: 'users.count', - cumulativeTotal: false, - cumulative: false, - type: 'number', - drillMembers: ['Users.city', 'Users.id', 'Users.createdAt'], - }, - ], - dimensions: [ - { - name: 'Users.city', - title: 'Users City', - type: 'string', - aliasName: 'users.city', - shortTitle: 'City', - suggestFilterValues: true, - }, - { - name: 'Users.gender', - title: 'Users Gender', - type: 'string', - aliasName: 'users.gender', - shortTitle: 'Gender', - suggestFilterValues: true, - }, - { - name: 'Users.company', - title: 'Users Company', - type: 'string', - aliasName: 'users.company', - shortTitle: 'Company', - suggestFilterValues: true, - }, - { - name: 'Users.createdAt', - title: 'Users Created at', - type: 'time', - aliasName: 'users.created_at', - shortTitle: 'Created at', - suggestFilterValues: true, - }, - ], - segments: [], - }, - ], -}; - -export const load = { - query: { - measures: ['Users.count'], - dimensions: ['Users.city'], - timezone: 'UTC', - timeDimensions: [], - }, - data: [ - { - 'Users.city': 'Mülheim', - 'Users.count': '4', - }, - { - 'Users.city': 'Metairie', - 'Users.count': '4', - }, - { - 'Users.city': 'Lions Bay', - 'Users.count': '4', - }, - { - 'Users.city': 'Torno', - 'Users.count': '3', - }, - { - 'Users.city': 'Houston', - 'Users.count': '3', - }, - { - 'Users.city': 'Naro', - 'Users.count': '3', - }, - { - 'Users.city': 'Tilly', - 'Users.count': '3', - }, - { - 'Users.city': 'Sooke', - 'Users.count': '3', - }, - { - 'Users.city': 'Kansas City', - 'Users.count': '3', - }, - { - 'Users.city': 'Warren', - 'Users.count': '3', - }, - { - 'Users.city': 'Nice', - 'Users.count': '3', - }, - { - 'Users.city': 'Muzaffarnagar', - 'Users.count': '3', - }, - { - 'Users.city': 'Yeovil', - 'Users.count': '3', - }, - { - 'Users.city': 'Delta', - 'Users.count': '3', - }, - { - 'Users.city': 'Sens', - 'Users.count': '2', - }, - { - 'Users.city': 'Prince George', - 'Users.count': '2', - }, - { - 'Users.city': 'Nederokkerzeel', - 'Users.count': '2', - }, - { - 'Users.city': 'Stigliano', - 'Users.count': '2', - }, - { - 'Users.city': 'Bhind', - 'Users.count': '2', - }, - { - 'Users.city': 'LamontzŽe', - 'Users.count': '2', - }, - { - 'Users.city': 'Portland', - 'Users.count': '2', - }, - { - 'Users.city': 'Morvi', - 'Users.count': '2', - }, - { - 'Users.city': 'Nova Iguaçu', - 'Users.count': '2', - }, - { - 'Users.city': 'Wanganui', - 'Users.count': '2', - }, - { - 'Users.city': 'Ockelbo', - 'Users.count': '2', - }, - { - 'Users.city': 'Gatineau', - 'Users.count': '2', - }, - { - 'Users.city': 'Austin', - 'Users.count': '2', - }, - { - 'Users.city': 'Osogbo', - 'Users.count': '2', - }, - { - 'Users.city': 'Lampeter', - 'Users.count': '2', - }, - { - 'Users.city': 'Camaçari', - 'Users.count': '2', - }, - { - 'Users.city': 'Ruda', - 'Users.count': '2', - }, - { - 'Users.city': 'Cincinnati', - 'Users.count': '2', - }, - { - 'Users.city': 'Ponte San Nicolò', - 'Users.count': '2', - }, - { - 'Users.city': 'Anand', - 'Users.count': '1', - }, - { - 'Users.city': 'Oyace', - 'Users.count': '1', - }, - { - 'Users.city': 'Lillianes', - 'Users.count': '1', - }, - { - 'Users.city': 'Slijpe', - 'Users.count': '1', - }, - { - 'Users.city': 'Castor', - 'Users.count': '1', - }, - { - 'Users.city': 'Curacaví', - 'Users.count': '1', - }, - { - 'Users.city': 'Rawalpindi', - 'Users.count': '1', - }, - { - 'Users.city': 'Saint-Jean-Geest', - 'Users.count': '1', - }, - { - 'Users.city': 'Buckingham', - 'Users.count': '1', - }, - { - 'Users.city': 'Berlare', - 'Users.count': '1', - }, - { - 'Users.city': 'Glovertown', - 'Users.count': '1', - }, - { - 'Users.city': 'Duncan', - 'Users.count': '1', - }, - { - 'Users.city': 'Longano', - 'Users.count': '1', - }, - { - 'Users.city': 'Chatillon', - 'Users.count': '1', - }, - { - 'Users.city': 'Biloxi', - 'Users.count': '1', - }, - { - 'Users.city': 'Saint-Dizier', - 'Users.count': '1', - }, - { - 'Users.city': 'Stintino', - 'Users.count': '1', - }, - { - 'Users.city': 'Raichur', - 'Users.count': '1', - }, - { - 'Users.city': 'Morrinsville', - 'Users.count': '1', - }, - { - 'Users.city': 'St. Albans', - 'Users.count': '1', - }, - { - 'Users.city': 'Argyle', - 'Users.count': '1', - }, - { - 'Users.city': 'Basingstoke', - 'Users.count': '1', - }, - { - 'Users.city': 'Machalí', - 'Users.count': '1', - }, - { - 'Users.city': 'Bernau', - 'Users.count': '1', - }, - { - 'Users.city': 'Logroño', - 'Users.count': '1', - }, - { - 'Users.city': 'D\ufffdgelis', - 'Users.count': '1', - }, - { - 'Users.city': 'Santa María', - 'Users.count': '1', - }, - { - 'Users.city': 'Halkirk', - 'Users.count': '1', - }, - { - 'Users.city': 'Pucón', - 'Users.count': '1', - }, - { - 'Users.city': 'La Baie', - 'Users.count': '1', - }, - { - 'Users.city': 'Merbes-Sainte-Marie', - 'Users.count': '1', - }, - { - 'Users.city': 'Kharagpur', - 'Users.count': '1', - }, - { - 'Users.city': 'Brussel', - 'Users.count': '1', - }, - { - 'Users.city': 'Whitby', - 'Users.count': '1', - }, - { - 'Users.city': 'Devizes', - 'Users.count': '1', - }, - { - 'Users.city': 'Cañas', - 'Users.count': '1', - }, - { - 'Users.city': 'Püttlingen', - 'Users.count': '1', - }, - { - 'Users.city': 'Springfield', - 'Users.count': '1', - }, - { - 'Users.city': 'Pali', - 'Users.count': '1', - }, - { - 'Users.city': 'Glendale', - 'Users.count': '1', - }, - { - 'Users.city': 'Pointe-Claire', - 'Users.count': '1', - }, - { - 'Users.city': 'San Martino in Pensilis', - 'Users.count': '1', - }, - { - 'Users.city': 'Zutphen', - 'Users.count': '1', - }, - { - 'Users.city': 'Victoria', - 'Users.count': '1', - }, - { - 'Users.city': 'San Giorgio Albanese', - 'Users.count': '1', - }, - { - 'Users.city': 'Marburg', - 'Users.count': '1', - }, - { - 'Users.city': 'Salice Salentino', - 'Users.count': '1', - }, - { - 'Users.city': 'Zeveneken', - 'Users.count': '1', - }, - { - 'Users.city': 'West Jordan', - 'Users.count': '1', - }, - { - 'Users.city': "Sant'Agapito", - 'Users.count': '1', - }, - { - 'Users.city': 'Sadiqabad', - 'Users.count': '1', - }, - { - 'Users.city': 'Wetzlar', - 'Users.count': '1', - }, - { - 'Users.city': 'Laces/Latsch', - 'Users.count': '1', - }, - { - 'Users.city': 'Ashoknagar-Kalyangarh', - 'Users.count': '1', - }, - { - 'Users.city': 'Pelago', - 'Users.count': '1', - }, - { - 'Users.city': 'Oevel', - 'Users.count': '1', - }, - { - 'Users.city': 'Olivar', - 'Users.count': '1', - }, - { - 'Users.city': 'Diets-Heur', - 'Users.count': '1', - }, - { - 'Users.city': 'Cockburn', - 'Users.count': '1', - }, - { - 'Users.city': 'Saint-Prime', - 'Users.count': '1', - }, - { - 'Users.city': 'Orta San Giulio', - 'Users.count': '1', - }, - { - 'Users.city': 'Tiarno di Sopra', - 'Users.count': '1', - }, - { - 'Users.city': 'Zuienkerke', - 'Users.count': '1', - }, - { - 'Users.city': 'Kungälv', - 'Users.count': '1', - }, - { - 'Users.city': 'Mérignac', - 'Users.count': '1', - }, - { - 'Users.city': 'Durness', - 'Users.count': '1', - }, - { - 'Users.city': 'Newtonmore', - 'Users.count': '1', - }, - { - 'Users.city': 'Lier', - 'Users.count': '1', - }, - { - 'Users.city': 'Cles', - 'Users.count': '1', - }, - { - 'Users.city': 'Chiaromonte', - 'Users.count': '1', - }, - { - 'Users.city': 'Genappe', - 'Users.count': '1', - }, - { - 'Users.city': 'Perugia', - 'Users.count': '1', - }, - { - 'Users.city': 'Modakeke', - 'Users.count': '1', - }, - { - 'Users.city': 'Poulseur', - 'Users.count': '1', - }, - { - 'Users.city': 'Gagliano del Capo', - 'Users.count': '1', - }, - { - 'Users.city': 'Paradise', - 'Users.count': '1', - }, - { - 'Users.city': 'San Fratello', - 'Users.count': '1', - }, - { - 'Users.city': "Bersillies-l'Abbaye", - 'Users.count': '1', - }, - { - 'Users.city': 'Dieppe', - 'Users.count': '1', - }, - { - 'Users.city': 'Massimino', - 'Users.count': '1', - }, - { - 'Users.city': 'Sachs Harbour', - 'Users.count': '1', - }, - { - 'Users.city': 'Altidona', - 'Users.count': '1', - }, - { - 'Users.city': 'Richmond', - 'Users.count': '1', - }, - { - 'Users.city': 'Boorsem', - 'Users.count': '1', - }, - { - 'Users.city': 'Schoonaarde', - 'Users.count': '1', - }, - { - 'Users.city': 'Garaguso', - 'Users.count': '1', - }, - { - 'Users.city': 'Rovereto', - 'Users.count': '1', - }, - { - 'Users.city': 'Saint-Pierre', - 'Users.count': '1', - }, - { - 'Users.city': 'Jerez de la Frontera', - 'Users.count': '1', - }, - { - 'Users.city': 'Cropalati', - 'Users.count': '1', - }, - { - 'Users.city': 'Siculiana', - 'Users.count': '1', - }, - { - 'Users.city': 'Trani', - 'Users.count': '1', - }, - ], - annotation: { - measures: { - 'Users.count': { - title: 'Users Count', - shortTitle: 'Count', - type: 'number', - }, - }, - dimensions: { - 'Users.city': { - title: 'Users City', - shortTitle: 'City', - type: 'string', - }, - }, - segments: {}, - timeDimensions: {}, - }, -}; - -export const single = { - query: { - measures: ['Users.count'], - dimensions: [], - timezone: 'UTC', - timeDimensions: [], - }, - data: [ - { - 'Users.city': 'Mülheim', - 'Users.count': '4', - }, - { - 'Users.city': 'Metairie', - 'Users.count': '4', - }, - ], - annotation: { - measures: { - 'Users.count': { - title: 'Users Count', - shortTitle: 'Count', - type: 'number', - }, - }, - dimensions: {}, - segments: {}, - timeDimensions: {}, - }, -}; - -export const sql = {}; - -export default (body = {}, status = 200) => () => ({ - async subscribe(callback) { - return callback( - { - status, - json: async () => body, - text: async () => JSON.stringify(body), - clone: function() { - return this; - }, - ok: status >= 200 && status <= 399 - }, - () => this.subscribe(callback) - ); - }, -}); diff --git a/packages/cubejs-client-vue/tests/unit/utils.js b/packages/cubejs-client-vue/tests/unit/utils.js deleted file mode 100644 index 6e4a0e6ddd03d..0000000000000 --- a/packages/cubejs-client-vue/tests/unit/utils.js +++ /dev/null @@ -1,7 +0,0 @@ -import cubejsApi from '@cubejs-client/core'; - -export function createCubeApi() { - return cubejsApi('token', { - apiUrl: 'http://localhost:4000' - }); -} diff --git a/packages/cubejs-client-vue3/package.json b/packages/cubejs-client-vue3/package.json index d6f1bdcf95eb8..3a494a1f100ad 100644 --- a/packages/cubejs-client-vue3/package.json +++ b/packages/cubejs-client-vue3/package.json @@ -38,8 +38,8 @@ "@vue/cli-plugin-unit-jest": "^5", "@vue/cli-service": "^5.0", "@vue/test-utils": "^2.4", - "@vue/vue2-jest": "^29", "@vue/vue3-jest": "^29", + "@babel/plugin-proposal-optional-chaining": "^7", "babel-core": "7.0.0-bridge.0", "babel-eslint": "^10.1.0", "babel-jest": "^29", diff --git a/packages/cubejs-docker/dev.Dockerfile b/packages/cubejs-docker/dev.Dockerfile index 82ed1e7cc3e65..5a24203814eae 100644 --- a/packages/cubejs-docker/dev.Dockerfile +++ b/packages/cubejs-docker/dev.Dockerfile @@ -82,7 +82,6 @@ COPY packages/cubejs-vertica-driver/package.json packages/cubejs-vertica-driver/ COPY packages/cubejs-templates/package.json packages/cubejs-templates/package.json COPY packages/cubejs-client-core/package.json packages/cubejs-client-core/package.json COPY packages/cubejs-client-react/package.json packages/cubejs-client-react/package.json -COPY packages/cubejs-client-vue/package.json packages/cubejs-client-vue/package.json COPY packages/cubejs-client-vue3/package.json packages/cubejs-client-vue3/package.json COPY packages/cubejs-client-ngx/package.json packages/cubejs-client-ngx/package.json COPY packages/cubejs-client-ws-transport/package.json packages/cubejs-client-ws-transport/package.json @@ -160,7 +159,6 @@ COPY packages/cubejs-vertica-driver/ packages/cubejs-vertica-driver/ COPY packages/cubejs-templates/ packages/cubejs-templates/ COPY packages/cubejs-client-core/ packages/cubejs-client-core/ COPY packages/cubejs-client-react/ packages/cubejs-client-react/ -COPY packages/cubejs-client-vue/ packages/cubejs-client-vue/ COPY packages/cubejs-client-vue3/ packages/cubejs-client-vue3/ COPY packages/cubejs-client-ngx/ packages/cubejs-client-ngx/ COPY packages/cubejs-client-ws-transport/ packages/cubejs-client-ws-transport/ diff --git a/packages/cubejs-docker/testing-drivers.Dockerfile b/packages/cubejs-docker/testing-drivers.Dockerfile index e5169371ab22e..fa0f0ae2a8b5d 100644 --- a/packages/cubejs-docker/testing-drivers.Dockerfile +++ b/packages/cubejs-docker/testing-drivers.Dockerfile @@ -76,7 +76,6 @@ COPY packages/cubejs-vertica-driver/package.json packages/cubejs-vertica-driver/ #COPY packages/cubejs-templates/package.json packages/cubejs-templates/package.json #COPY packages/cubejs-client-core/package.json packages/cubejs-client-core/package.json #COPY packages/cubejs-client-react/package.json packages/cubejs-client-react/package.json -#COPY packages/cubejs-client-vue/package.json packages/cubejs-client-vue/package.json #COPY packages/cubejs-client-vue3/package.json packages/cubejs-client-vue3/package.json #COPY packages/cubejs-client-ngx/package.json packages/cubejs-client-ngx/package.json #COPY packages/cubejs-client-ws-transport/package.json packages/cubejs-client-ws-transport/package.json @@ -153,7 +152,6 @@ COPY packages/cubejs-vertica-driver/ packages/cubejs-vertica-driver/ #COPY packages/cubejs-templates/ packages/cubejs-templates/ #COPY packages/cubejs-client-core/ packages/cubejs-client-core/ #COPY packages/cubejs-client-react/ packages/cubejs-client-react/ -#COPY packages/cubejs-client-vue/ packages/cubejs-client-vue/ #COPY packages/cubejs-client-vue3/ packages/cubejs-client-vue3/ #COPY packages/cubejs-client-ngx/ packages/cubejs-client-ngx/ #COPY packages/cubejs-client-ws-transport/ packages/cubejs-client-ws-transport/ diff --git a/rollup.config.js b/rollup.config.js index d976825c4901e..67cbeca6bbd32 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -181,15 +181,6 @@ export default bundle( external: ['react', 'prop-types'], }) ) - .concat( - bundle('cubejs-client-vue', 'cubejsVue', { - input: 'packages/cubejs-client-vue/src/index.js', - external: ['vue'], - globals: { - vue: 'Vue', - }, - }) - ) .concat( bundle('cubejs-client-vue3', 'cubejsVue3', { input: 'packages/cubejs-client-vue3/src/index.js', diff --git a/yarn.lock b/yarn.lock index 9f0aef4a1b6ed..54cbc073f5d76 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1681,19 +1681,19 @@ dependencies: "@babel/highlight" "^7.10.4" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.24", "@babel/code-frame@^7.24.7", "@babel/code-frame@^7.26.2": - version "7.26.2" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" - integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.24", "@babel/code-frame@^7.24.7", "@babel/code-frame@^7.26.2", "@babel/code-frame@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.27.1.tgz#200f715e66d52a23b221a9435534a91cc13ad5be" + integrity sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg== dependencies: - "@babel/helper-validator-identifier" "^7.25.9" + "@babel/helper-validator-identifier" "^7.27.1" js-tokens "^4.0.0" - picocolors "^1.0.0" + picocolors "^1.1.1" -"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.26.8": - version "7.26.8" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.8.tgz#821c1d35641c355284d4a870b8a4a7b0c141e367" - integrity sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ== +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.26.8", "@babel/compat-data@^7.27.2", "@babel/compat-data@^7.27.7", "@babel/compat-data@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.28.5.tgz#a8a4962e1567121ac0b3b487f52107443b455c7f" + integrity sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA== "@babel/core@7.25.2": version "7.25.2" @@ -1716,7 +1716,7 @@ json5 "^2.2.3" semver "^6.3.1" -"@babel/core@7.26.10", "@babel/core@^7.1.0", "@babel/core@^7.11.6", "@babel/core@^7.12.16", "@babel/core@^7.12.3", "@babel/core@^7.13.8", "@babel/core@^7.19.6", "@babel/core@^7.23.9", "@babel/core@^7.24", "@babel/core@^7.24.5", "@babel/core@^7.25.2", "@babel/core@^7.3.3", "@babel/core@^7.7.2", "@babel/core@^7.8.0": +"@babel/core@7.26.10": version "7.26.10" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.10.tgz#5c876f83c8c4dcb233ee4b670c0606f2ac3000f9" integrity sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ== @@ -1737,6 +1737,27 @@ json5 "^2.2.3" semver "^6.3.1" +"@babel/core@^7.1.0", "@babel/core@^7.11.6", "@babel/core@^7.12.16", "@babel/core@^7.12.3", "@babel/core@^7.13.8", "@babel/core@^7.19.6", "@babel/core@^7.23.9", "@babel/core@^7.24", "@babel/core@^7.24.5", "@babel/core@^7.25.2", "@babel/core@^7.3.3", "@babel/core@^7.7.2", "@babel/core@^7.8.0": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.28.5.tgz#4c81b35e51e1b734f510c99b07dfbc7bbbb48f7e" + integrity sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw== + dependencies: + "@babel/code-frame" "^7.27.1" + "@babel/generator" "^7.28.5" + "@babel/helper-compilation-targets" "^7.27.2" + "@babel/helper-module-transforms" "^7.28.3" + "@babel/helpers" "^7.28.4" + "@babel/parser" "^7.28.5" + "@babel/template" "^7.27.2" + "@babel/traverse" "^7.28.5" + "@babel/types" "^7.28.5" + "@jridgewell/remapping" "^2.3.5" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + "@babel/generator@7.26.10": version "7.26.10" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.10.tgz#a60d9de49caca16744e6340c3658dfef6138c3f7" @@ -1748,15 +1769,15 @@ "@jridgewell/trace-mapping" "^0.3.25" jsesc "^3.0.2" -"@babel/generator@^7.24", "@babel/generator@^7.25.0", "@babel/generator@^7.26.10", "@babel/generator@^7.27.0", "@babel/generator@^7.7.2": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.27.0.tgz#764382b5392e5b9aff93cadb190d0745866cbc2c" - integrity sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw== +"@babel/generator@^7.24", "@babel/generator@^7.25.0", "@babel/generator@^7.26.10", "@babel/generator@^7.28.5", "@babel/generator@^7.7.2": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.28.5.tgz#712722d5e50f44d07bc7ac9fe84438742dd61298" + integrity sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ== dependencies: - "@babel/parser" "^7.27.0" - "@babel/types" "^7.27.0" - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.25" + "@babel/parser" "^7.28.5" + "@babel/types" "^7.28.5" + "@jridgewell/gen-mapping" "^0.3.12" + "@jridgewell/trace-mapping" "^0.3.28" jsesc "^3.0.2" "@babel/helper-annotate-as-pure@7.24.7": @@ -1766,214 +1787,226 @@ dependencies: "@babel/types" "^7.24.7" -"@babel/helper-annotate-as-pure@7.25.9", "@babel/helper-annotate-as-pure@^7.16.0", "@babel/helper-annotate-as-pure@^7.18.6", "@babel/helper-annotate-as-pure@^7.25.9": +"@babel/helper-annotate-as-pure@7.25.9": version "7.25.9" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz#d8eac4d2dc0d7b6e11fa6e535332e0d3184f06b4" integrity sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g== dependencies: "@babel/types" "^7.25.9" -"@babel/helper-compilation-targets@^7.12.16", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.25.2", "@babel/helper-compilation-targets@^7.25.9", "@babel/helper-compilation-targets@^7.26.5": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.0.tgz#de0c753b1cd1d9ab55d473c5a5cf7170f0a81880" - integrity sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA== +"@babel/helper-annotate-as-pure@^7.27.1", "@babel/helper-annotate-as-pure@^7.27.3": + version "7.27.3" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz#f31fd86b915fc4daf1f3ac6976c59be7084ed9c5" + integrity sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg== dependencies: - "@babel/compat-data" "^7.26.8" - "@babel/helper-validator-option" "^7.25.9" + "@babel/types" "^7.27.3" + +"@babel/helper-compilation-targets@^7.12.16", "@babel/helper-compilation-targets@^7.25.2", "@babel/helper-compilation-targets@^7.26.5", "@babel/helper-compilation-targets@^7.27.1", "@babel/helper-compilation-targets@^7.27.2": + version "7.27.2" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz#46a0f6efab808d51d29ce96858dd10ce8732733d" + integrity sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ== + dependencies: + "@babel/compat-data" "^7.27.2" + "@babel/helper-validator-option" "^7.27.1" browserslist "^4.24.0" lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.16.0", "@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.22.15", "@babel/helper-create-class-features-plugin@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz#7644147706bb90ff613297d49ed5266bde729f83" - integrity sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.25.9" - "@babel/helper-member-expression-to-functions" "^7.25.9" - "@babel/helper-optimise-call-expression" "^7.25.9" - "@babel/helper-replace-supers" "^7.25.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" - "@babel/traverse" "^7.25.9" +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.27.1", "@babel/helper-create-class-features-plugin@^7.28.3", "@babel/helper-create-class-features-plugin@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.5.tgz#472d0c28028850968979ad89f173594a6995da46" + integrity sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.27.3" + "@babel/helper-member-expression-to-functions" "^7.28.5" + "@babel/helper-optimise-call-expression" "^7.27.1" + "@babel/helper-replace-supers" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + "@babel/traverse" "^7.28.5" semver "^6.3.1" -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.25.9": - version "7.26.3" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.26.3.tgz#5169756ecbe1d95f7866b90bb555b022595302a0" - integrity sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong== +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.27.1": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.28.5.tgz#7c1ddd64b2065c7f78034b25b43346a7e19ed997" + integrity sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw== dependencies: - "@babel/helper-annotate-as-pure" "^7.25.9" - regexpu-core "^6.2.0" + "@babel/helper-annotate-as-pure" "^7.27.3" + regexpu-core "^6.3.1" semver "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.6.1", "@babel/helper-define-polyfill-provider@^0.6.3": - version "0.6.4" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.4.tgz#15e8746368bfa671785f5926ff74b3064c291fab" - integrity sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw== +"@babel/helper-define-polyfill-provider@^0.6.1", "@babel/helper-define-polyfill-provider@^0.6.3", "@babel/helper-define-polyfill-provider@^0.6.5": + version "0.6.5" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz#742ccf1cb003c07b48859fc9fa2c1bbe40e5f753" + integrity sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg== dependencies: - "@babel/helper-compilation-targets" "^7.22.6" - "@babel/helper-plugin-utils" "^7.22.5" - debug "^4.1.1" + "@babel/helper-compilation-targets" "^7.27.2" + "@babel/helper-plugin-utils" "^7.27.1" + debug "^4.4.1" lodash.debounce "^4.0.8" - resolve "^1.14.2" + resolve "^1.22.10" -"@babel/helper-member-expression-to-functions@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz#9dfffe46f727005a5ea29051ac835fb735e4c1a3" - integrity sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ== +"@babel/helper-globals@^7.28.0": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/helper-globals/-/helper-globals-7.28.0.tgz#b9430df2aa4e17bc28665eadeae8aa1d985e6674" + integrity sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw== + +"@babel/helper-member-expression-to-functions@^7.27.1", "@babel/helper-member-expression-to-functions@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz#f3e07a10be37ed7a63461c63e6929575945a6150" + integrity sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg== dependencies: - "@babel/traverse" "^7.25.9" - "@babel/types" "^7.25.9" + "@babel/traverse" "^7.28.5" + "@babel/types" "^7.28.5" -"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.18.6", "@babel/helper-module-imports@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz#e7f8d20602ebdbf9ebbea0a0751fb0f2a4141715" - integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw== +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.25.9", "@babel/helper-module-imports@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz#7ef769a323e2655e126673bb6d2d6913bbead204" + integrity sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w== dependencies: - "@babel/traverse" "^7.25.9" - "@babel/types" "^7.25.9" + "@babel/traverse" "^7.27.1" + "@babel/types" "^7.27.1" -"@babel/helper-module-transforms@^7.25.2", "@babel/helper-module-transforms@^7.25.9", "@babel/helper-module-transforms@^7.26.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae" - integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw== +"@babel/helper-module-transforms@^7.25.2", "@babel/helper-module-transforms@^7.26.0", "@babel/helper-module-transforms@^7.27.1", "@babel/helper-module-transforms@^7.28.3": + version "7.28.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz#a2b37d3da3b2344fe085dab234426f2b9a2fa5f6" + integrity sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw== dependencies: - "@babel/helper-module-imports" "^7.25.9" - "@babel/helper-validator-identifier" "^7.25.9" - "@babel/traverse" "^7.25.9" + "@babel/helper-module-imports" "^7.27.1" + "@babel/helper-validator-identifier" "^7.27.1" + "@babel/traverse" "^7.28.3" -"@babel/helper-optimise-call-expression@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz#3324ae50bae7e2ab3c33f60c9a877b6a0146b54e" - integrity sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ== +"@babel/helper-optimise-call-expression@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz#c65221b61a643f3e62705e5dd2b5f115e35f9200" + integrity sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw== dependencies: - "@babel/types" "^7.25.9" + "@babel/types" "^7.27.1" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.24.7", "@babel/helper-plugin-utils@^7.25.7", "@babel/helper-plugin-utils@^7.25.9", "@babel/helper-plugin-utils@^7.26.5", "@babel/helper-plugin-utils@^7.8.0": - version "7.26.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz#18580d00c9934117ad719392c4f6585c9333cc35" - integrity sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg== +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.24.7", "@babel/helper-plugin-utils@^7.25.9", "@babel/helper-plugin-utils@^7.26.5", "@babel/helper-plugin-utils@^7.27.1", "@babel/helper-plugin-utils@^7.8.0": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz#ddb2f876534ff8013e6c2b299bf4d39b3c51d44c" + integrity sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw== -"@babel/helper-remap-async-to-generator@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz#e53956ab3d5b9fb88be04b3e2f31b523afd34b92" - integrity sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw== +"@babel/helper-remap-async-to-generator@^7.25.9", "@babel/helper-remap-async-to-generator@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz#4601d5c7ce2eb2aea58328d43725523fcd362ce6" + integrity sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA== dependencies: - "@babel/helper-annotate-as-pure" "^7.25.9" - "@babel/helper-wrap-function" "^7.25.9" - "@babel/traverse" "^7.25.9" + "@babel/helper-annotate-as-pure" "^7.27.1" + "@babel/helper-wrap-function" "^7.27.1" + "@babel/traverse" "^7.27.1" -"@babel/helper-replace-supers@^7.22.20", "@babel/helper-replace-supers@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz#ba447224798c3da3f8713fc272b145e33da6a5c5" - integrity sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ== +"@babel/helper-replace-supers@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz#b1ed2d634ce3bdb730e4b52de30f8cccfd692bc0" + integrity sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA== dependencies: - "@babel/helper-member-expression-to-functions" "^7.25.9" - "@babel/helper-optimise-call-expression" "^7.25.9" - "@babel/traverse" "^7.25.9" + "@babel/helper-member-expression-to-functions" "^7.27.1" + "@babel/helper-optimise-call-expression" "^7.27.1" + "@babel/traverse" "^7.27.1" -"@babel/helper-skip-transparent-expression-wrappers@^7.20.0", "@babel/helper-skip-transparent-expression-wrappers@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz#0b2e1b62d560d6b1954893fd2b705dc17c91f0c9" - integrity sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA== +"@babel/helper-skip-transparent-expression-wrappers@^7.20.0", "@babel/helper-skip-transparent-expression-wrappers@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz#62bb91b3abba8c7f1fec0252d9dbea11b3ee7a56" + integrity sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg== dependencies: - "@babel/traverse" "^7.25.9" - "@babel/types" "^7.25.9" + "@babel/traverse" "^7.27.1" + "@babel/types" "^7.27.1" -"@babel/helper-split-export-declaration@7.24.7", "@babel/helper-split-export-declaration@^7.22.6": +"@babel/helper-split-export-declaration@7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz#83949436890e07fa3d6873c61a96e3bbf692d856" integrity sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA== dependencies: "@babel/types" "^7.24.7" -"@babel/helper-string-parser@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c" - integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA== +"@babel/helper-string-parser@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687" + integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== -"@babel/helper-validator-identifier@^7.25.7", "@babel/helper-validator-identifier@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" - integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== +"@babel/helper-validator-identifier@^7.25.9", "@babel/helper-validator-identifier@^7.27.1", "@babel/helper-validator-identifier@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz#010b6938fab7cb7df74aa2bbc06aa503b8fe5fb4" + integrity sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q== -"@babel/helper-validator-option@^7.14.5", "@babel/helper-validator-option@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz#86e45bd8a49ab7e03f276577f96179653d41da72" - integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw== +"@babel/helper-validator-option@^7.25.9", "@babel/helper-validator-option@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz#fa52f5b1e7db1ab049445b421c4471303897702f" + integrity sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg== -"@babel/helper-wrap-function@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz#d99dfd595312e6c894bd7d237470025c85eea9d0" - integrity sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g== +"@babel/helper-wrap-function@^7.27.1": + version "7.28.3" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.28.3.tgz#fe4872092bc1438ffd0ce579e6f699609f9d0a7a" + integrity sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g== dependencies: - "@babel/template" "^7.25.9" - "@babel/traverse" "^7.25.9" - "@babel/types" "^7.25.9" + "@babel/template" "^7.27.2" + "@babel/traverse" "^7.28.3" + "@babel/types" "^7.28.2" -"@babel/helpers@^7.25.0", "@babel/helpers@^7.26.10": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.27.0.tgz#53d156098defa8243eab0f32fa17589075a1b808" - integrity sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg== +"@babel/helpers@^7.25.0", "@babel/helpers@^7.26.10", "@babel/helpers@^7.28.4": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.28.4.tgz#fe07274742e95bdf7cf1443593eeb8926ab63827" + integrity sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w== dependencies: - "@babel/template" "^7.27.0" - "@babel/types" "^7.27.0" + "@babel/template" "^7.27.2" + "@babel/types" "^7.28.4" "@babel/highlight@^7.10.4": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.25.7.tgz#20383b5f442aa606e7b5e3043b0b1aafe9f37de5" - integrity sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw== + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.25.9.tgz#8141ce68fc73757946f983b343f1231f4691acc6" + integrity sha512-llL88JShoCsth8fF8R4SJnIn+WLvR6ccFxu1H3FlMhDontdcmZWf2HgIZ7AIqV3Xcck1idlohrN4EUBQz6klbw== dependencies: - "@babel/helper-validator-identifier" "^7.25.7" + "@babel/helper-validator-identifier" "^7.25.9" chalk "^2.4.2" js-tokens "^4.0.0" picocolors "^1.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.4", "@babel/parser@^7.20.7", "@babel/parser@^7.23.0", "@babel/parser@^7.23.9", "@babel/parser@^7.24", "@babel/parser@^7.25.0", "@babel/parser@^7.26.10", "@babel/parser@^7.27.0", "@babel/parser@^7.7.0": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.27.0.tgz#3d7d6ee268e41d2600091cbd4e145ffee85a44ec" - integrity sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.0", "@babel/parser@^7.23.9", "@babel/parser@^7.24", "@babel/parser@^7.25.0", "@babel/parser@^7.26.10", "@babel/parser@^7.27.2", "@babel/parser@^7.28.5", "@babel/parser@^7.7.0": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.5.tgz#0b0225ee90362f030efd644e8034c99468893b08" + integrity sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ== dependencies: - "@babel/types" "^7.27.0" + "@babel/types" "^7.28.5" -"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz#cc2e53ebf0a0340777fff5ed521943e253b4d8fe" - integrity sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g== +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.25.9", "@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.28.5.tgz#fbde57974707bbfa0376d34d425ff4fa6c732421" + integrity sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/traverse" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/traverse" "^7.28.5" -"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz#af9e4fb63ccb8abcb92375b2fcfe36b60c774d30" - integrity sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw== +"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.25.9", "@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz#43f70a6d7efd52370eefbdf55ae03d91b293856d" + integrity sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz#e8dc26fcd616e6c5bf2bd0d5a2c151d4f92a9137" - integrity sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.25.9", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz#beb623bd573b8b6f3047bd04c32506adc3e58a72" + integrity sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz#807a667f9158acac6f6164b4beb85ad9ebc9e1d1" - integrity sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.25.9", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz#e134a5479eb2ba9c02714e8c1ebf1ec9076124fd" + integrity sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" - "@babel/plugin-transform-optional-chaining" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + "@babel/plugin-transform-optional-chaining" "^7.27.1" -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz#de7093f1e7deaf68eadd7cc6b07f2ab82543269e" - integrity sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg== +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.25.9", "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.28.3": + version "7.28.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.3.tgz#373f6e2de0016f73caf8f27004f61d167743742a" + integrity sha512-b6YTX108evsvE4YgWyQ921ZAFFQm3Bn+CA3+ZXlNVnPhx+UfsVURoPjfGAPCjBgrqo30yX/C2nZGX96DxvR9Iw== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/traverse" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/traverse" "^7.28.3" "@babel/plugin-proposal-class-properties@^7.12.13": version "7.18.6" @@ -1984,17 +2017,15 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-proposal-decorators@^7.12.13": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.23.3.tgz#c609ca70be908d187ee36ff49f1250c56cc98f15" - integrity sha512-u8SwzOcP0DYSsa++nHd/9exlHb0NAlHCb890qtZZbSwPX2bFv8LBEztxwN7Xg/dS8oAFFidhrI9PBcLBJSkGRQ== + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.28.0.tgz#419c8acc31088e05a774344c021800f7ddc39bf0" + integrity sha512-zOiZqvANjWDUaUS9xMxbMcK/Zccztbe/6ikvUXaG9nsPH3w6qh5UaPGAnirI/WhIbZ8m3OHU0ReyPrknG+ZKeg== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.20" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/plugin-syntax-decorators" "^7.23.3" + "@babel/helper-create-class-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/plugin-syntax-decorators" "^7.27.1" -"@babel/plugin-proposal-optional-chaining@^7.21.0": +"@babel/plugin-proposal-optional-chaining@^7": version "7.21.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz#886f5c8978deb7d30f678b2e24346b287234d3ea" integrity sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA== @@ -2029,12 +2060,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-syntax-decorators@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.23.3.tgz#a1d351d6c25bfdcf2e16f99b039101bc0ffcb0ca" - integrity sha512-cf7Niq4/+/juY67E0PbgH0TDhLQ5J7zS8C/Q5FFx+DWyrRa9sUQdTXkjqKu8zGvuqr7vw1muKiukseihU+PJDA== +"@babel/plugin-syntax-decorators@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.27.1.tgz#ee7dd9590aeebc05f9d4c8c0560007b05979a63d" + integrity sha512-YMq8Z87Lhl8EGkmb0MwYkt36QnxC+fzCgrl66ereamPlYToRpIk5nUjKUY3QKLWq8mwUB1BgbeXcTJhZOCDg5A== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-syntax-dynamic-import@^7.8.3": version "7.8.3" @@ -2043,12 +2074,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-import-assertions@^7.26.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz#620412405058efa56e4a564903b79355020f445f" - integrity sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg== +"@babel/plugin-syntax-import-assertions@^7.26.0", "@babel/plugin-syntax-import-assertions@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz#88894aefd2b03b5ee6ad1562a7c8e1587496aecd" + integrity sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-syntax-import-attributes@7.24.7": version "7.24.7" @@ -2057,12 +2088,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-syntax-import-attributes@^7.26.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz#3b1412847699eea739b4f2602c74ce36f6b0b0f7" - integrity sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A== +"@babel/plugin-syntax-import-attributes@^7.26.0", "@babel/plugin-syntax-import-attributes@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz#34c017d54496f9b11b61474e7ea3dfd5563ffe07" + integrity sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-syntax-import-meta@^7.8.3": version "7.10.4" @@ -2078,12 +2109,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.12.13", "@babel/plugin-syntax-jsx@^7.18.6", "@babel/plugin-syntax-jsx@^7.2.0", "@babel/plugin-syntax-jsx@^7.7.2": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz#a34313a178ea56f1951599b929c1ceacee719290" - integrity sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA== +"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.12.13", "@babel/plugin-syntax-jsx@^7.2.0", "@babel/plugin-syntax-jsx@^7.27.1", "@babel/plugin-syntax-jsx@^7.7.2": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz#2f9beb5eff30fa507c5532d107daac7b888fa34c" + integrity sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" @@ -2134,12 +2165,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.16.0", "@babel/plugin-syntax-typescript@^7.7.2": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz#24f460c85dbbc983cd2b9c4994178bcc01df958f" - integrity sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ== +"@babel/plugin-syntax-typescript@^7.27.1", "@babel/plugin-syntax-typescript@^7.7.2": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz#5147d29066a793450f220c63fa3a9431b7e6dd18" + integrity sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-syntax-unicode-sets-regex@^7.18.6": version "7.18.6" @@ -2149,14 +2180,14 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-arrow-functions@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz#7821d4410bee5daaadbb4cdd9a6649704e176845" - integrity sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg== +"@babel/plugin-transform-arrow-functions@^7.25.9", "@babel/plugin-transform-arrow-functions@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz#6e2061067ba3ab0266d834a9f94811196f2aba9a" + integrity sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-async-generator-functions@7.26.8", "@babel/plugin-transform-async-generator-functions@^7.26.8": +"@babel/plugin-transform-async-generator-functions@7.26.8": version "7.26.8" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.26.8.tgz#5e3991135e3b9c6eaaf5eff56d1ae5a11df45ff8" integrity sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg== @@ -2165,7 +2196,16 @@ "@babel/helper-remap-async-to-generator" "^7.25.9" "@babel/traverse" "^7.26.8" -"@babel/plugin-transform-async-to-generator@7.25.9", "@babel/plugin-transform-async-to-generator@^7.25.9": +"@babel/plugin-transform-async-generator-functions@^7.26.8", "@babel/plugin-transform-async-generator-functions@^7.28.0": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.28.0.tgz#1276e6c7285ab2cd1eccb0bc7356b7a69ff842c2" + integrity sha512-BEOdvX4+M765icNPZeidyADIvQ1m1gmunXufXxvRESy/jNNyfovIqUyE7MVgGBjWktCoJlzvFA1To2O4ymIO3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-remap-async-to-generator" "^7.27.1" + "@babel/traverse" "^7.28.0" + +"@babel/plugin-transform-async-to-generator@7.25.9": version "7.25.9" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz#c80008dacae51482793e5a9c08b39a5be7e12d71" integrity sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ== @@ -2174,349 +2214,368 @@ "@babel/helper-plugin-utils" "^7.25.9" "@babel/helper-remap-async-to-generator" "^7.25.9" -"@babel/plugin-transform-block-scoped-functions@^7.26.5": - version "7.26.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz#3dc4405d31ad1cbe45293aa57205a6e3b009d53e" - integrity sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ== +"@babel/plugin-transform-async-to-generator@^7.25.9", "@babel/plugin-transform-async-to-generator@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz#9a93893b9379b39466c74474f55af03de78c66e7" + integrity sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA== dependencies: - "@babel/helper-plugin-utils" "^7.26.5" + "@babel/helper-module-imports" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-remap-async-to-generator" "^7.27.1" -"@babel/plugin-transform-block-scoping@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz#c33665e46b06759c93687ca0f84395b80c0473a1" - integrity sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg== +"@babel/plugin-transform-block-scoped-functions@^7.26.5", "@babel/plugin-transform-block-scoped-functions@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz#558a9d6e24cf72802dd3b62a4b51e0d62c0f57f9" + integrity sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-class-properties@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz#a8ce84fedb9ad512549984101fa84080a9f5f51f" - integrity sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q== +"@babel/plugin-transform-block-scoping@^7.25.9", "@babel/plugin-transform-block-scoping@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.5.tgz#e0d3af63bd8c80de2e567e690a54e84d85eb16f6" + integrity sha512-45DmULpySVvmq9Pj3X9B+62Xe+DJGov27QravQJU1LLcapR6/10i+gYVAucGGJpHBp5mYxIMK4nDAT/QDLr47g== dependencies: - "@babel/helper-create-class-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-class-static-block@^7.26.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz#6c8da219f4eb15cae9834ec4348ff8e9e09664a0" - integrity sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ== +"@babel/plugin-transform-class-properties@^7.25.9", "@babel/plugin-transform-class-properties@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz#dd40a6a370dfd49d32362ae206ddaf2bb082a925" + integrity sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-create-class-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-classes@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz#7152457f7880b593a63ade8a861e6e26a4469f52" - integrity sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg== +"@babel/plugin-transform-class-static-block@^7.26.0", "@babel/plugin-transform-class-static-block@^7.28.3": + version "7.28.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.3.tgz#d1b8e69b54c9993bc558203e1f49bfc979bfd852" + integrity sha512-LtPXlBbRoc4Njl/oh1CeD/3jC+atytbnf/UqLoqTDcEYGUPj022+rvfkbDYieUrSj3CaV4yHDByPE+T2HwfsJg== dependencies: - "@babel/helper-annotate-as-pure" "^7.25.9" - "@babel/helper-compilation-targets" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-replace-supers" "^7.25.9" - "@babel/traverse" "^7.25.9" - globals "^11.1.0" + "@babel/helper-create-class-features-plugin" "^7.28.3" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-computed-properties@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz#db36492c78460e534b8852b1d5befe3c923ef10b" - integrity sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA== +"@babel/plugin-transform-classes@^7.25.9", "@babel/plugin-transform-classes@^7.28.4": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.4.tgz#75d66175486788c56728a73424d67cbc7473495c" + integrity sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/template" "^7.25.9" + "@babel/helper-annotate-as-pure" "^7.27.3" + "@babel/helper-compilation-targets" "^7.27.2" + "@babel/helper-globals" "^7.28.0" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-replace-supers" "^7.27.1" + "@babel/traverse" "^7.28.4" -"@babel/plugin-transform-destructuring@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz#966ea2595c498224340883602d3cfd7a0c79cea1" - integrity sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ== +"@babel/plugin-transform-computed-properties@^7.25.9", "@babel/plugin-transform-computed-properties@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz#81662e78bf5e734a97982c2b7f0a793288ef3caa" + integrity sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/template" "^7.27.1" -"@babel/plugin-transform-dotall-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz#bad7945dd07734ca52fe3ad4e872b40ed09bb09a" - integrity sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA== +"@babel/plugin-transform-destructuring@^7.25.9", "@babel/plugin-transform-destructuring@^7.28.0", "@babel/plugin-transform-destructuring@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.5.tgz#b8402764df96179a2070bb7b501a1586cf8ad7a7" + integrity sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/traverse" "^7.28.5" -"@babel/plugin-transform-duplicate-keys@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz#8850ddf57dce2aebb4394bb434a7598031059e6d" - integrity sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw== +"@babel/plugin-transform-dotall-regex@^7.25.9", "@babel/plugin-transform-dotall-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz#aa6821de864c528b1fecf286f0a174e38e826f4d" + integrity sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz#6f7259b4de127721a08f1e5165b852fcaa696d31" - integrity sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog== +"@babel/plugin-transform-duplicate-keys@^7.25.9", "@babel/plugin-transform-duplicate-keys@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz#f1fbf628ece18e12e7b32b175940e68358f546d1" + integrity sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-dynamic-import@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz#23e917de63ed23c6600c5dd06d94669dce79f7b8" - integrity sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg== +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.25.9", "@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz#5043854ca620a94149372e69030ff8cb6a9eb0ec" + integrity sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-exponentiation-operator@^7.26.3": - version "7.26.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz#e29f01b6de302c7c2c794277a48f04a9ca7f03bc" - integrity sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ== +"@babel/plugin-transform-dynamic-import@^7.25.9", "@babel/plugin-transform-dynamic-import@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz#4c78f35552ac0e06aa1f6e3c573d67695e8af5a4" + integrity sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-export-namespace-from@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz#90745fe55053394f554e40584cda81f2c8a402a2" - integrity sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww== +"@babel/plugin-transform-explicit-resource-management@^7.28.0": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.0.tgz#45be6211b778dbf4b9d54c4e8a2b42fa72e09a1a" + integrity sha512-K8nhUcn3f6iB+P3gwCv/no7OdzOZQcKchW6N389V6PD8NUWKZHzndOd9sPDVbMoBsbmjMqlB4L9fm+fEFNVlwQ== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/plugin-transform-destructuring" "^7.28.0" -"@babel/plugin-transform-for-of@^7.26.9": - version "7.26.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.26.9.tgz#27231f79d5170ef33b5111f07fe5cafeb2c96a56" - integrity sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg== +"@babel/plugin-transform-exponentiation-operator@^7.26.3", "@babel/plugin-transform-exponentiation-operator@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.5.tgz#7cc90a8170e83532676cfa505278e147056e94fe" + integrity sha512-D4WIMaFtwa2NizOp+dnoFjRez/ClKiC2BqqImwKd1X28nqBtZEyCYJ2ozQrrzlxAFrcrjxo39S6khe9RNDlGzw== dependencies: - "@babel/helper-plugin-utils" "^7.26.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-function-name@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz#939d956e68a606661005bfd550c4fc2ef95f7b97" - integrity sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA== +"@babel/plugin-transform-export-namespace-from@^7.25.9", "@babel/plugin-transform-export-namespace-from@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz#71ca69d3471edd6daa711cf4dfc3400415df9c23" + integrity sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ== dependencies: - "@babel/helper-compilation-targets" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/traverse" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-json-strings@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz#c86db407cb827cded902a90c707d2781aaa89660" - integrity sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw== +"@babel/plugin-transform-for-of@^7.26.9", "@babel/plugin-transform-for-of@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz#bc24f7080e9ff721b63a70ac7b2564ca15b6c40a" + integrity sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" -"@babel/plugin-transform-literals@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz#1a1c6b4d4aa59bc4cad5b6b3a223a0abd685c9de" - integrity sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ== +"@babel/plugin-transform-function-name@^7.25.9", "@babel/plugin-transform-function-name@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz#4d0bf307720e4dce6d7c30fcb1fd6ca77bdeb3a7" + integrity sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-compilation-targets" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/traverse" "^7.27.1" -"@babel/plugin-transform-logical-assignment-operators@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz#b19441a8c39a2fda0902900b306ea05ae1055db7" - integrity sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q== +"@babel/plugin-transform-json-strings@^7.25.9", "@babel/plugin-transform-json-strings@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz#a2e0ce6ef256376bd527f290da023983527a4f4c" + integrity sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-member-expression-literals@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz#63dff19763ea64a31f5e6c20957e6a25e41ed5de" - integrity sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA== +"@babel/plugin-transform-literals@^7.25.9", "@babel/plugin-transform-literals@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz#baaefa4d10a1d4206f9dcdda50d7d5827bb70b24" + integrity sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-modules-amd@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz#49ba478f2295101544abd794486cd3088dddb6c5" - integrity sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw== +"@babel/plugin-transform-logical-assignment-operators@^7.25.9", "@babel/plugin-transform-logical-assignment-operators@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.5.tgz#d028fd6db8c081dee4abebc812c2325e24a85b0e" + integrity sha512-axUuqnUTBuXyHGcJEVVh9pORaN6wC5bYfE7FGzPiaWa3syib9m7g+/IT/4VgCOe2Upef43PHzeAvcrVek6QuuA== dependencies: - "@babel/helper-module-transforms" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-modules-commonjs@^7.15.0", "@babel/plugin-transform-modules-commonjs@^7.2.0", "@babel/plugin-transform-modules-commonjs@^7.26.3": - version "7.26.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz#8f011d44b20d02c3de44d8850d971d8497f981fb" - integrity sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ== +"@babel/plugin-transform-member-expression-literals@^7.25.9", "@babel/plugin-transform-member-expression-literals@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz#37b88ba594d852418e99536f5612f795f23aeaf9" + integrity sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ== dependencies: - "@babel/helper-module-transforms" "^7.26.0" - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-modules-systemjs@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz#8bd1b43836269e3d33307151a114bcf3ba6793f8" - integrity sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA== +"@babel/plugin-transform-modules-amd@^7.25.9", "@babel/plugin-transform-modules-amd@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz#a4145f9d87c2291fe2d05f994b65dba4e3e7196f" + integrity sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA== dependencies: - "@babel/helper-module-transforms" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-validator-identifier" "^7.25.9" - "@babel/traverse" "^7.25.9" + "@babel/helper-module-transforms" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-modules-umd@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz#6710079cdd7c694db36529a1e8411e49fcbf14c9" - integrity sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw== +"@babel/plugin-transform-modules-commonjs@^7.15.0", "@babel/plugin-transform-modules-commonjs@^7.2.0", "@babel/plugin-transform-modules-commonjs@^7.26.3", "@babel/plugin-transform-modules-commonjs@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz#8e44ed37c2787ecc23bdc367f49977476614e832" + integrity sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw== dependencies: - "@babel/helper-module-transforms" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-module-transforms" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-named-capturing-groups-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz#454990ae6cc22fd2a0fa60b3a2c6f63a38064e6a" - integrity sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA== +"@babel/plugin-transform-modules-systemjs@^7.25.9", "@babel/plugin-transform-modules-systemjs@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.28.5.tgz#7439e592a92d7670dfcb95d0cbc04bd3e64801d2" + integrity sha512-vn5Jma98LCOeBy/KpeQhXcV2WZgaRUtjwQmjoBuLNlOmkg0fB5pdvYVeWRYI69wWKwK2cD1QbMiUQnoujWvrew== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-module-transforms" "^7.28.3" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-validator-identifier" "^7.28.5" + "@babel/traverse" "^7.28.5" -"@babel/plugin-transform-new-target@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz#42e61711294b105c248336dcb04b77054ea8becd" - integrity sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ== +"@babel/plugin-transform-modules-umd@^7.25.9", "@babel/plugin-transform-modules-umd@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz#63f2cf4f6dc15debc12f694e44714863d34cd334" + integrity sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-module-transforms" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-nullish-coalescing-operator@^7.26.6": - version "7.26.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz#fbf6b3c92cb509e7b319ee46e3da89c5bedd31fe" - integrity sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw== +"@babel/plugin-transform-named-capturing-groups-regex@^7.25.9", "@babel/plugin-transform-named-capturing-groups-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz#f32b8f7818d8fc0cc46ee20a8ef75f071af976e1" + integrity sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng== dependencies: - "@babel/helper-plugin-utils" "^7.26.5" + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-numeric-separator@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz#bfed75866261a8b643468b0ccfd275f2033214a1" - integrity sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q== +"@babel/plugin-transform-new-target@^7.25.9", "@babel/plugin-transform-new-target@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz#259c43939728cad1706ac17351b7e6a7bea1abeb" + integrity sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-object-rest-spread@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz#0203725025074164808bcf1a2cfa90c652c99f18" - integrity sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg== +"@babel/plugin-transform-nullish-coalescing-operator@^7.26.6", "@babel/plugin-transform-nullish-coalescing-operator@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz#4f9d3153bf6782d73dd42785a9d22d03197bc91d" + integrity sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA== dependencies: - "@babel/helper-compilation-targets" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/plugin-transform-parameters" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-object-super@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz#385d5de135162933beb4a3d227a2b7e52bb4cf03" - integrity sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A== +"@babel/plugin-transform-numeric-separator@^7.25.9", "@babel/plugin-transform-numeric-separator@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz#614e0b15cc800e5997dadd9bd6ea524ed6c819c6" + integrity sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-replace-supers" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-optional-catch-binding@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz#10e70d96d52bb1f10c5caaac59ac545ea2ba7ff3" - integrity sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g== +"@babel/plugin-transform-object-rest-spread@^7.25.9", "@babel/plugin-transform-object-rest-spread@^7.28.4": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.4.tgz#9ee1ceca80b3e6c4bac9247b2149e36958f7f98d" + integrity sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-compilation-targets" "^7.27.2" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/plugin-transform-destructuring" "^7.28.0" + "@babel/plugin-transform-parameters" "^7.27.7" + "@babel/traverse" "^7.28.4" -"@babel/plugin-transform-optional-chaining@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz#e142eb899d26ef715435f201ab6e139541eee7dd" - integrity sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A== +"@babel/plugin-transform-object-super@^7.25.9", "@babel/plugin-transform-object-super@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz#1c932cd27bf3874c43a5cac4f43ebf970c9871b5" + integrity sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-replace-supers" "^7.27.1" -"@babel/plugin-transform-parameters@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz#b856842205b3e77e18b7a7a1b94958069c7ba257" - integrity sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g== +"@babel/plugin-transform-optional-catch-binding@^7.25.9", "@babel/plugin-transform-optional-catch-binding@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz#84c7341ebde35ccd36b137e9e45866825072a30c" + integrity sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-private-methods@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz#847f4139263577526455d7d3223cd8bda51e3b57" - integrity sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw== +"@babel/plugin-transform-optional-chaining@^7.25.9", "@babel/plugin-transform-optional-chaining@^7.27.1", "@babel/plugin-transform-optional-chaining@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.5.tgz#8238c785f9d5c1c515a90bf196efb50d075a4b26" + integrity sha512-N6fut9IZlPnjPwgiQkXNhb+cT8wQKFlJNqcZkWlcTqkcqx6/kU4ynGmLFoa4LViBSirn05YAwk+sQBbPfxtYzQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" -"@babel/plugin-transform-private-property-in-object@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz#9c8b73e64e6cc3cbb2743633885a7dd2c385fe33" - integrity sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw== +"@babel/plugin-transform-parameters@^7.25.9", "@babel/plugin-transform-parameters@^7.27.7": + version "7.27.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz#1fd2febb7c74e7d21cf3b05f7aebc907940af53a" + integrity sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg== dependencies: - "@babel/helper-annotate-as-pure" "^7.25.9" - "@babel/helper-create-class-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-property-literals@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz#d72d588bd88b0dec8b62e36f6fda91cedfe28e3f" - integrity sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA== +"@babel/plugin-transform-private-methods@^7.25.9", "@babel/plugin-transform-private-methods@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz#fdacbab1c5ed81ec70dfdbb8b213d65da148b6af" + integrity sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-create-class-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-react-display-name@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.5.tgz#d5e910327d7931fb9f8f9b6c6999473ceae5a286" - integrity sha512-dHYCOnzSsXFz8UcdNQIHGvg94qPL/teF7CCiCEMRxmA1G2p5Mq4JnKVowCDxYfiQ9D7RstaAp9kwaSI+sXbnhw== +"@babel/plugin-transform-private-property-in-object@^7.25.9", "@babel/plugin-transform-private-property-in-object@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz#4dbbef283b5b2f01a21e81e299f76e35f900fb11" + integrity sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-annotate-as-pure" "^7.27.1" + "@babel/helper-create-class-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-react-jsx-development@^7.16.5", "@babel/plugin-transform-react-jsx-development@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz#dbe5c972811e49c7405b630e4d0d2e1380c0ddc5" - integrity sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA== +"@babel/plugin-transform-property-literals@^7.25.9", "@babel/plugin-transform-property-literals@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz#07eafd618800591e88073a0af1b940d9a42c6424" + integrity sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ== dependencies: - "@babel/plugin-transform-react-jsx" "^7.18.6" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-react-display-name@^7.28.0": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.28.0.tgz#6f20a7295fea7df42eb42fed8f896813f5b934de" + integrity sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-react-jsx-development@^7.18.6", "@babel/plugin-transform-react-jsx-development@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.27.1.tgz#47ff95940e20a3a70e68ad3d4fcb657b647f6c98" + integrity sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q== + dependencies: + "@babel/plugin-transform-react-jsx" "^7.27.1" "@babel/plugin-transform-react-jsx-self@^7.18.6", "@babel/plugin-transform-react-jsx-self@^7.24.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.7.tgz#3d11df143131fd8f5486a1f7d3839890f88f8c85" - integrity sha512-JD9MUnLbPL0WdVK8AWC7F7tTG2OS6u/AKKnsK+NdRhUiVdnzyR1S3kKQCaRLOiaULvUiqK6Z4JQE635VgtCFeg== + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz#af678d8506acf52c577cac73ff7fe6615c85fc92" + integrity sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-transform-react-jsx-source@^7.19.6", "@babel/plugin-transform-react-jsx-source@^7.24.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.7.tgz#a0d8372310d5ea5b0447dfa03a8485f960eff7be" - integrity sha512-S/JXG/KrbIY06iyJPKfxr0qRxnhNOdkNXYBl/rmwgDd72cQLH9tEGkDm/yJPGvcSIUoikzfjMios9i+xT/uv9w== + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz#dcfe2c24094bb757bf73960374e7c55e434f19f0" + integrity sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-react-jsx@^7.16.5", "@babel/plugin-transform-react-jsx@^7.18.6", "@babel/plugin-transform-react-jsx@^7.19.0": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.20.7.tgz#025d85a1935fd7e19dfdcb1b1d4df34d4da484f7" - integrity sha512-Tfq7qqD+tRj3EoDhY00nn2uP2hsRxgYGi5mLQ5TimKav0a9Lrpd4deE+fcLXU8zFYRjlKPHZhpCvfEA6qnBxqQ== +"@babel/plugin-transform-react-jsx@^7.19.0", "@babel/plugin-transform-react-jsx@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.27.1.tgz#1023bc94b78b0a2d68c82b5e96aed573bcfb9db0" + integrity sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw== dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/plugin-syntax-jsx" "^7.18.6" - "@babel/types" "^7.20.7" + "@babel/helper-annotate-as-pure" "^7.27.1" + "@babel/helper-module-imports" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/plugin-syntax-jsx" "^7.27.1" + "@babel/types" "^7.27.1" -"@babel/plugin-transform-react-pure-annotations@^7.16.5": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.5.tgz#6535d0fe67c7a3a26c5105f92c8cbcbe844cd94b" - integrity sha512-0nYU30hCxnCVCbRjSy9ahlhWZ2Sn6khbY4FqR91W+2RbSqkWEbVu2gXh45EqNy4Bq7sRU+H4i0/6YKwOSzh16A== +"@babel/plugin-transform-react-pure-annotations@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.27.1.tgz#339f1ce355eae242e0649f232b1c68907c02e879" + integrity sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.0" - "@babel/helper-plugin-utils" "^7.16.5" + "@babel/helper-annotate-as-pure" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-regenerator@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz#03a8a4670d6cebae95305ac6defac81ece77740b" - integrity sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg== +"@babel/plugin-transform-regenerator@^7.25.9", "@babel/plugin-transform-regenerator@^7.28.4": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.4.tgz#9d3fa3bebb48ddd0091ce5729139cd99c67cea51" + integrity sha512-+ZEdQlBoRg9m2NnzvEeLgtvBMO4tkFBw5SQIUgLICgTrumLoU7lr+Oghi6km2PFj+dbUt2u1oby2w3BDO9YQnA== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - regenerator-transform "^0.15.2" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-regexp-modifiers@^7.26.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz#2f5837a5b5cd3842a919d8147e9903cc7455b850" - integrity sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw== +"@babel/plugin-transform-regexp-modifiers@^7.26.0", "@babel/plugin-transform-regexp-modifiers@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz#df9ba5577c974e3f1449888b70b76169998a6d09" + integrity sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-reserved-words@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz#0398aed2f1f10ba3f78a93db219b27ef417fb9ce" - integrity sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg== +"@babel/plugin-transform-reserved-words@^7.25.9", "@babel/plugin-transform-reserved-words@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz#40fba4878ccbd1c56605a4479a3a891ac0274bb4" + integrity sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-runtime@7.26.10", "@babel/plugin-transform-runtime@^7.12.15", "@babel/plugin-transform-runtime@^7.13.9": +"@babel/plugin-transform-runtime@7.26.10": version "7.26.10" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.26.10.tgz#6b4504233de8238e7d666c15cde681dc62adff87" integrity sha512-NWaL2qG6HRpONTnj4JvDU6th4jYeZOJgu3QhmFTCihib0ermtOJqktA5BduGm3suhhVe9EMP9c9+mfJ/I9slqw== @@ -2528,83 +2587,97 @@ babel-plugin-polyfill-regenerator "^0.6.1" semver "^6.3.1" -"@babel/plugin-transform-shorthand-properties@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz#bb785e6091f99f826a95f9894fc16fde61c163f2" - integrity sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng== +"@babel/plugin-transform-runtime@^7.12.15", "@babel/plugin-transform-runtime@^7.13.9": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.28.5.tgz#ae3e21fbefe2831ebac04dfa6b463691696afe17" + integrity sha512-20NUVgOrinudkIBzQ2bNxP08YpKprUkRTiRSd2/Z5GOdPImJGkoN4Z7IQe1T5AdyKI1i5L6RBmluqdSzvaq9/w== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-module-imports" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + babel-plugin-polyfill-corejs2 "^0.4.14" + babel-plugin-polyfill-corejs3 "^0.13.0" + babel-plugin-polyfill-regenerator "^0.6.5" + semver "^6.3.1" -"@babel/plugin-transform-spread@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz#24a35153931b4ba3d13cec4a7748c21ab5514ef9" - integrity sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A== +"@babel/plugin-transform-shorthand-properties@^7.25.9", "@babel/plugin-transform-shorthand-properties@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz#532abdacdec87bfee1e0ef8e2fcdee543fe32b90" + integrity sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-sticky-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz#c7f02b944e986a417817b20ba2c504dfc1453d32" - integrity sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA== +"@babel/plugin-transform-spread@^7.25.9", "@babel/plugin-transform-spread@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz#1a264d5fc12750918f50e3fe3e24e437178abb08" + integrity sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" -"@babel/plugin-transform-template-literals@^7.26.8": - version "7.26.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.26.8.tgz#966b15d153a991172a540a69ad5e1845ced990b5" - integrity sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q== +"@babel/plugin-transform-sticky-regex@^7.25.9", "@babel/plugin-transform-sticky-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz#18984935d9d2296843a491d78a014939f7dcd280" + integrity sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g== dependencies: - "@babel/helper-plugin-utils" "^7.26.5" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-typeof-symbol@^7.26.7": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.0.tgz#044a0890f3ca694207c7826d0c7a65e5ac008aae" - integrity sha512-+LLkxA9rKJpNoGsbLnAgOCdESl73vwYn+V6b+5wHbrE7OGKVDPHIQvbFSzqE6rwqaCw2RE+zdJrlLkcf8YOA0w== +"@babel/plugin-transform-template-literals@^7.26.8", "@babel/plugin-transform-template-literals@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz#1a0eb35d8bb3e6efc06c9fd40eb0bcef548328b8" + integrity sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg== dependencies: - "@babel/helper-plugin-utils" "^7.26.5" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-typescript@^7.16.1": - version "7.16.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.1.tgz#cc0670b2822b0338355bc1b3d2246a42b8166409" - integrity sha512-NO4XoryBng06jjw/qWEU2LhcLJr1tWkhpMam/H4eas/CDKMX/b2/Ylb6EI256Y7+FVPCawwSM1rrJNOpDiz+Lg== +"@babel/plugin-transform-typeof-symbol@^7.26.7", "@babel/plugin-transform-typeof-symbol@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz#70e966bb492e03509cf37eafa6dcc3051f844369" + integrity sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw== dependencies: - "@babel/helper-create-class-features-plugin" "^7.16.0" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-typescript" "^7.16.0" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-unicode-escapes@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz#a75ef3947ce15363fccaa38e2dd9bc70b2788b82" - integrity sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q== +"@babel/plugin-transform-typescript@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.5.tgz#441c5f9a4a1315039516c6c612fc66d5f4594e72" + integrity sha512-x2Qa+v/CuEoX7Dr31iAfr0IhInrVOWZU/2vJMJ00FOR/2nM0BcBEclpaf9sWCDc+v5e9dMrhSH8/atq/kX7+bA== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-annotate-as-pure" "^7.27.3" + "@babel/helper-create-class-features-plugin" "^7.28.5" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + "@babel/plugin-syntax-typescript" "^7.27.1" -"@babel/plugin-transform-unicode-property-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz#a901e96f2c1d071b0d1bb5dc0d3c880ce8f53dd3" - integrity sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg== +"@babel/plugin-transform-unicode-escapes@^7.25.9", "@babel/plugin-transform-unicode-escapes@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz#3e3143f8438aef842de28816ece58780190cf806" + integrity sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-unicode-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz#5eae747fe39eacf13a8bd006a4fb0b5d1fa5e9b1" - integrity sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA== +"@babel/plugin-transform-unicode-property-regex@^7.25.9", "@babel/plugin-transform-unicode-property-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz#bdfe2d3170c78c5691a3c3be934c8c0087525956" + integrity sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-unicode-sets-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz#65114c17b4ffc20fa5b163c63c70c0d25621fabe" - integrity sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ== +"@babel/plugin-transform-unicode-regex@^7.25.9", "@babel/plugin-transform-unicode-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz#25948f5c395db15f609028e370667ed8bae9af97" + integrity sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-unicode-sets-regex@^7.25.9", "@babel/plugin-transform-unicode-sets-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz#6ab706d10f801b5c72da8bb2548561fa04193cd1" + integrity sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/preset-env@7.26.9", "@babel/preset-env@^7.12.16", "@babel/preset-env@^7.13.9", "@babel/preset-env@^7.24", "@babel/preset-env@^7.24.5", "@babel/preset-env@^7.3.1": +"@babel/preset-env@7.26.9": version "7.26.9" resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.26.9.tgz#2ec64e903d0efe743699f77a10bdf7955c2123c3" integrity sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ== @@ -2679,6 +2752,82 @@ core-js-compat "^3.40.0" semver "^6.3.1" +"@babel/preset-env@^7.12.16", "@babel/preset-env@^7.13.9", "@babel/preset-env@^7.24", "@babel/preset-env@^7.24.5", "@babel/preset-env@^7.3.1": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.28.5.tgz#82dd159d1563f219a1ce94324b3071eb89e280b0" + integrity sha512-S36mOoi1Sb6Fz98fBfE+UZSpYw5mJm0NUHtIKrOuNcqeFauy1J6dIvXm2KRVKobOSaGq4t/hBXdN4HGU3wL9Wg== + dependencies: + "@babel/compat-data" "^7.28.5" + "@babel/helper-compilation-targets" "^7.27.2" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-validator-option" "^7.27.1" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.28.5" + "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.27.1" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.27.1" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.27.1" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.28.3" + "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" + "@babel/plugin-syntax-import-assertions" "^7.27.1" + "@babel/plugin-syntax-import-attributes" "^7.27.1" + "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" + "@babel/plugin-transform-arrow-functions" "^7.27.1" + "@babel/plugin-transform-async-generator-functions" "^7.28.0" + "@babel/plugin-transform-async-to-generator" "^7.27.1" + "@babel/plugin-transform-block-scoped-functions" "^7.27.1" + "@babel/plugin-transform-block-scoping" "^7.28.5" + "@babel/plugin-transform-class-properties" "^7.27.1" + "@babel/plugin-transform-class-static-block" "^7.28.3" + "@babel/plugin-transform-classes" "^7.28.4" + "@babel/plugin-transform-computed-properties" "^7.27.1" + "@babel/plugin-transform-destructuring" "^7.28.5" + "@babel/plugin-transform-dotall-regex" "^7.27.1" + "@babel/plugin-transform-duplicate-keys" "^7.27.1" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.27.1" + "@babel/plugin-transform-dynamic-import" "^7.27.1" + "@babel/plugin-transform-explicit-resource-management" "^7.28.0" + "@babel/plugin-transform-exponentiation-operator" "^7.28.5" + "@babel/plugin-transform-export-namespace-from" "^7.27.1" + "@babel/plugin-transform-for-of" "^7.27.1" + "@babel/plugin-transform-function-name" "^7.27.1" + "@babel/plugin-transform-json-strings" "^7.27.1" + "@babel/plugin-transform-literals" "^7.27.1" + "@babel/plugin-transform-logical-assignment-operators" "^7.28.5" + "@babel/plugin-transform-member-expression-literals" "^7.27.1" + "@babel/plugin-transform-modules-amd" "^7.27.1" + "@babel/plugin-transform-modules-commonjs" "^7.27.1" + "@babel/plugin-transform-modules-systemjs" "^7.28.5" + "@babel/plugin-transform-modules-umd" "^7.27.1" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.27.1" + "@babel/plugin-transform-new-target" "^7.27.1" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.27.1" + "@babel/plugin-transform-numeric-separator" "^7.27.1" + "@babel/plugin-transform-object-rest-spread" "^7.28.4" + "@babel/plugin-transform-object-super" "^7.27.1" + "@babel/plugin-transform-optional-catch-binding" "^7.27.1" + "@babel/plugin-transform-optional-chaining" "^7.28.5" + "@babel/plugin-transform-parameters" "^7.27.7" + "@babel/plugin-transform-private-methods" "^7.27.1" + "@babel/plugin-transform-private-property-in-object" "^7.27.1" + "@babel/plugin-transform-property-literals" "^7.27.1" + "@babel/plugin-transform-regenerator" "^7.28.4" + "@babel/plugin-transform-regexp-modifiers" "^7.27.1" + "@babel/plugin-transform-reserved-words" "^7.27.1" + "@babel/plugin-transform-shorthand-properties" "^7.27.1" + "@babel/plugin-transform-spread" "^7.27.1" + "@babel/plugin-transform-sticky-regex" "^7.27.1" + "@babel/plugin-transform-template-literals" "^7.27.1" + "@babel/plugin-transform-typeof-symbol" "^7.27.1" + "@babel/plugin-transform-unicode-escapes" "^7.27.1" + "@babel/plugin-transform-unicode-property-regex" "^7.27.1" + "@babel/plugin-transform-unicode-regex" "^7.27.1" + "@babel/plugin-transform-unicode-sets-regex" "^7.27.1" + "@babel/preset-modules" "0.1.6-no-external-plugins" + babel-plugin-polyfill-corejs2 "^0.4.14" + babel-plugin-polyfill-corejs3 "^0.13.0" + babel-plugin-polyfill-regenerator "^0.6.5" + core-js-compat "^3.43.0" + semver "^6.3.1" + "@babel/preset-modules@0.1.6-no-external-plugins": version "0.1.6-no-external-plugins" resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a" @@ -2689,75 +2838,81 @@ esutils "^2.0.2" "@babel/preset-react@^7.12.13": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.16.5.tgz#09df3b7a6522cb3e6682dc89b4dfebb97d22031b" - integrity sha512-3kzUOQeaxY/2vhPDS7CX/KGEGu/1bOYGvdRDJ2U5yjEz5o5jmIeTPLoiQBPGjfhPascLuW5OlMiPzwOOuB6txg== + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.28.5.tgz#6fcc0400fa79698433d653092c3919bb4b0878d9" + integrity sha512-Z3J8vhRq7CeLjdC58jLv4lnZ5RKFUJWqH5emvxmv9Hv3BD1T9R/Im713R4MTKwvFaV74ejZ3sM01LyEKk4ugNQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" - "@babel/helper-validator-option" "^7.14.5" - "@babel/plugin-transform-react-display-name" "^7.16.5" - "@babel/plugin-transform-react-jsx" "^7.16.5" - "@babel/plugin-transform-react-jsx-development" "^7.16.5" - "@babel/plugin-transform-react-pure-annotations" "^7.16.5" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-validator-option" "^7.27.1" + "@babel/plugin-transform-react-display-name" "^7.28.0" + "@babel/plugin-transform-react-jsx" "^7.27.1" + "@babel/plugin-transform-react-jsx-development" "^7.27.1" + "@babel/plugin-transform-react-pure-annotations" "^7.27.1" "@babel/preset-typescript@^7.12.1", "@babel/preset-typescript@^7.13.0": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.16.5.tgz#b86a5b0ae739ba741347d2f58c52f52e63cf1ba1" - integrity sha512-lmAWRoJ9iOSvs3DqOndQpj8XqXkzaiQs50VG/zESiI9D3eoZhGriU675xNCr0UwvsuXrhMAGvyk1w+EVWF3u8Q== + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.28.5.tgz#540359efa3028236958466342967522fd8f2a60c" + integrity sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g== dependencies: - "@babel/helper-plugin-utils" "^7.16.5" - "@babel/helper-validator-option" "^7.14.5" - "@babel/plugin-transform-typescript" "^7.16.1" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-validator-option" "^7.27.1" + "@babel/plugin-syntax-jsx" "^7.27.1" + "@babel/plugin-transform-modules-commonjs" "^7.27.1" + "@babel/plugin-transform-typescript" "^7.28.5" "@babel/runtime-corejs3@^7.10.2": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.16.5.tgz#9057d879720c136193f0440bc400088212a74894" - integrity sha512-F1pMwvTiUNSAM8mc45kccMQxj31x3y3P+tA/X8hKNWp3/hUsxdGxZ3D3H8JIkxtfA8qGkaBTKvcmvStaYseAFw== + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.28.4.tgz#c25be39c7997ce2f130d70b9baecb8ed94df93fa" + integrity sha512-h7iEYiW4HebClDEhtvFObtPmIvrd1SSfpI9EhOeKk4CtIK/ngBWFpuhCzhdmRKtg71ylcue+9I6dv54XYO1epQ== dependencies: - core-js-pure "^3.19.0" - regenerator-runtime "^0.13.4" + core-js-pure "^3.43.0" -"@babel/runtime@7.26.10", "@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.1", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.4", "@babel/runtime@^7.11.1", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.9", "@babel/runtime@^7.15.4", "@babel/runtime@^7.16.3", "@babel/runtime@^7.18.3", "@babel/runtime@^7.21.0", "@babel/runtime@^7.24.8", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": +"@babel/runtime@7.26.10": version "7.26.10" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.10.tgz#a07b4d8fa27af131a633d7b3524db803eb4764c2" integrity sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw== dependencies: regenerator-runtime "^0.14.0" -"@babel/standalone@^7.24": - version "7.24.3" - resolved "https://registry.yarnpkg.com/@babel/standalone/-/standalone-7.24.3.tgz#df12f09f42fcbcc32b5a766c6745d61652f9d78e" - integrity sha512-PbObiI21Z/1DoJLr6DKsdmyp7uUIuw6zv5zIMorH98rOBE/TehkjK7xqXiwJmbCqi7deVbIksDerZ9Ds9hRLGw== - -"@babel/template@^7.0.0", "@babel/template@^7.25.0", "@babel/template@^7.25.9", "@babel/template@^7.26.9", "@babel/template@^7.27.0", "@babel/template@^7.3.3": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.0.tgz#b253e5406cc1df1c57dcd18f11760c2dbf40c0b4" - integrity sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA== - dependencies: - "@babel/code-frame" "^7.26.2" - "@babel/parser" "^7.27.0" - "@babel/types" "^7.27.0" +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.1", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.4", "@babel/runtime@^7.11.1", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.9", "@babel/runtime@^7.15.4", "@babel/runtime@^7.16.3", "@babel/runtime@^7.18.3", "@babel/runtime@^7.21.0", "@babel/runtime@^7.24.8", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.28.4.tgz#a70226016fabe25c5783b2f22d3e1c9bc5ca3326" + integrity sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ== -"@babel/traverse@^7.0.0", "@babel/traverse@^7.24", "@babel/traverse@^7.25.2", "@babel/traverse@^7.25.9", "@babel/traverse@^7.26.10", "@babel/traverse@^7.26.8", "@babel/traverse@^7.7.0", "@babel/traverse@^7.7.2": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.27.0.tgz#11d7e644779e166c0442f9a07274d02cd91d4a70" - integrity sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA== - dependencies: - "@babel/code-frame" "^7.26.2" - "@babel/generator" "^7.27.0" - "@babel/parser" "^7.27.0" - "@babel/template" "^7.27.0" - "@babel/types" "^7.27.0" +"@babel/standalone@^7.24": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/standalone/-/standalone-7.28.5.tgz#4fced2b23f9670a04b30cc4942c3e4b87bce4eff" + integrity sha512-1DViPYJpRU50irpGMfLBQ9B4kyfQuL6X7SS7pwTeWeZX0mNkjzPi0XFqxCjSdddZXUQy4AhnQnnesA/ZHnvAdw== + +"@babel/template@^7.0.0", "@babel/template@^7.25.0", "@babel/template@^7.26.9", "@babel/template@^7.27.1", "@babel/template@^7.27.2", "@babel/template@^7.3.3": + version "7.27.2" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.2.tgz#fa78ceed3c4e7b63ebf6cb39e5852fca45f6809d" + integrity sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw== + dependencies: + "@babel/code-frame" "^7.27.1" + "@babel/parser" "^7.27.2" + "@babel/types" "^7.27.1" + +"@babel/traverse@^7.0.0", "@babel/traverse@^7.24", "@babel/traverse@^7.25.2", "@babel/traverse@^7.26.10", "@babel/traverse@^7.26.8", "@babel/traverse@^7.27.1", "@babel/traverse@^7.28.0", "@babel/traverse@^7.28.3", "@babel/traverse@^7.28.4", "@babel/traverse@^7.28.5", "@babel/traverse@^7.7.0", "@babel/traverse@^7.7.2": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.5.tgz#450cab9135d21a7a2ca9d2d35aa05c20e68c360b" + integrity sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ== + dependencies: + "@babel/code-frame" "^7.27.1" + "@babel/generator" "^7.28.5" + "@babel/helper-globals" "^7.28.0" + "@babel/parser" "^7.28.5" + "@babel/template" "^7.27.2" + "@babel/types" "^7.28.5" debug "^4.3.1" - globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.24", "@babel/types@^7.24.7", "@babel/types@^7.25.2", "@babel/types@^7.25.9", "@babel/types@^7.26.10", "@babel/types@^7.27.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.27.0.tgz#ef9acb6b06c3173f6632d993ecb6d4ae470b4559" - integrity sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg== +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.24", "@babel/types@^7.24.7", "@babel/types@^7.25.2", "@babel/types@^7.25.9", "@babel/types@^7.26.10", "@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.28.2", "@babel/types@^7.28.4", "@babel/types@^7.28.5", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.5.tgz#10fc405f60897c35f07e85493c932c7b5ca0592b" + integrity sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA== dependencies: - "@babel/helper-string-parser" "^7.25.9" - "@babel/helper-validator-identifier" "^7.25.9" + "@babel/helper-string-parser" "^7.27.1" + "@babel/helper-validator-identifier" "^7.28.5" "@balena/dockerignore@^1.0.2": version "1.0.2" @@ -4610,6 +4765,22 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.24" +"@jridgewell/gen-mapping@^0.3.12": + version "0.3.13" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz#6342a19f44347518c93e43b1ac69deb3c4656a1f" + integrity sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA== + dependencies: + "@jridgewell/sourcemap-codec" "^1.5.0" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/remapping@^2.3.5": + version "2.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/remapping/-/remapping-2.3.5.tgz#375c476d1972947851ba1e15ae8f123047445aa1" + integrity sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" + "@jridgewell/resolve-uri@^3.1.0": version "3.1.1" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" @@ -4641,6 +4812,14 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" +"@jridgewell/trace-mapping@^0.3.28": + version "0.3.31" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz#db15d6781c931f3a251a3dac39501c98a6082fd0" + integrity sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + "@js-joda/core@^5.5.3", "@js-joda/core@^5.6.1": version "5.6.5" resolved "https://registry.yarnpkg.com/@js-joda/core/-/core-5.6.5.tgz#c766894b49eb8044480b91625fb7dc370e8182ef" @@ -9294,7 +9473,7 @@ resolved "https://registry.yarnpkg.com/@vue/cli-overlay/-/cli-overlay-5.0.8.tgz#b61477acdc43bbd42fce6326d228471201ecdcdd" integrity sha512-KmtievE/B4kcXp6SuM2gzsnSd8WebkQpg3XaB6GmFh1BJGRqa1UiW9up7L/Q67uOdTigHxr5Ar2lZms4RcDjwQ== -"@vue/cli-plugin-babel@^5", "@vue/cli-plugin-babel@^5.0": +"@vue/cli-plugin-babel@^5.0": version "5.0.8" resolved "https://registry.yarnpkg.com/@vue/cli-plugin-babel/-/cli-plugin-babel-5.0.8.tgz#54f9a07900f29baff54803dcfa916c602894feb7" integrity sha512-a4qqkml3FAJ3auqB2kN2EMPocb/iu0ykeELwed+9B1c1nQ1HKgslKMHMPavYx3Cd/QAx2mBD4hwKBqZXEI/CsQ== @@ -9306,7 +9485,7 @@ thread-loader "^3.0.0" webpack "^5.54.0" -"@vue/cli-plugin-eslint@^5", "@vue/cli-plugin-eslint@^5.0": +"@vue/cli-plugin-eslint@^5.0": version "5.0.8" resolved "https://registry.yarnpkg.com/@vue/cli-plugin-eslint/-/cli-plugin-eslint-5.0.8.tgz#754939265c2c5b746fa36c7d7705a89138e193bf" integrity sha512-d11+I5ONYaAPW1KyZj9GlrV/E6HZePq5L5eAF5GgoVdu6sxr6bDgEoxzhcS1Pk2eh8rn1MxG/FyyR+eCBj/CNg== @@ -9345,7 +9524,7 @@ resolved "https://registry.yarnpkg.com/@vue/cli-plugin-vuex/-/cli-plugin-vuex-5.0.8.tgz#0d4cb3020f9102bea9288d750729dde176c66ccd" integrity sha512-HSYWPqrunRE5ZZs8kVwiY6oWcn95qf/OQabwLfprhdpFWAGtLStShjsGED2aDpSSeGAskQETrtR/5h7VqgIlBA== -"@vue/cli-service@^5", "@vue/cli-service@^5.0": +"@vue/cli-service@^5.0": version "5.0.8" resolved "https://registry.yarnpkg.com/@vue/cli-service/-/cli-service-5.0.8.tgz#cf3f6f1b7bf0fba9cdab86b6bec4f9897f982dac" integrity sha512-nV7tYQLe7YsTtzFrfOMIHc5N2hp5lHG2rpYr0aNja9rNljdgcPZLyQRb2YRivTHqTv7lI962UXFURcpStHgyFw== @@ -9442,15 +9621,6 @@ "@vue/compiler-core" "3.3.8" "@vue/shared" "3.3.8" -"@vue/compiler-sfc@2.7.15": - version "2.7.15" - resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-2.7.15.tgz#62135fb2f69559fc723fd9c56b8e8b0ac7864a0b" - integrity sha512-FCvIEevPmgCgqFBH7wD+3B97y7u7oj/Wr69zADBf403Tui377bThTjBvekaZvlRr4IwUAu3M6hYZeULZFJbdYg== - dependencies: - "@babel/parser" "^7.18.4" - postcss "^8.4.14" - source-map "^0.6.1" - "@vue/compiler-sfc@3.3.8": version "3.3.8" resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.3.8.tgz#40b18e48aa00260950964d1d72157668521be0e1" @@ -9539,15 +9709,6 @@ resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.3.8.tgz#f044942142e1d3a395f24132e6203a784838542d" integrity sha512-8PGwybFwM4x8pcfgqEQFy70NaQxASvOC5DJwLQfpArw1UDfUXrJkdxD3BhVTMS+0Lef/TU7YO0Jvr0jJY8T+mw== -"@vue/test-utils@^1.3": - version "1.3.6" - resolved "https://registry.yarnpkg.com/@vue/test-utils/-/test-utils-1.3.6.tgz#6656bd8fa44dd088b4ad80ff1ee28abe7e5ddf87" - integrity sha512-udMmmF1ts3zwxUJEIAj5ziioR900reDrt6C9H3XpWPsLBx2lpHKoA4BTdd9HNIYbkGltWw+JjWJ+5O6QBwiyEw== - dependencies: - dom-event-types "^1.0.0" - lodash "^4.17.15" - pretty "^2.0.0" - "@vue/test-utils@^2.4": version "2.4.2" resolved "https://registry.yarnpkg.com/@vue/test-utils/-/test-utils-2.4.2.tgz#43ce99c4e2eab0adbf1220257dc9974bc5ae38a7" @@ -9567,18 +9728,6 @@ vue-hot-reload-api "^2.3.0" vue-style-loader "^4.1.0" -"@vue/vue2-jest@^29": - version "29.2.6" - resolved "https://registry.yarnpkg.com/@vue/vue2-jest/-/vue2-jest-29.2.6.tgz#b827c14fbdfca6e20aa807b00f309866fcf99f47" - integrity sha512-nPu9IvnEkP0AEpo9ETOAk50uqyBa0QMJ9GnPYkC7EukFN1z29QKjyucICayMt8KuHJ9oYBca2TDMH40HowY9mQ== - dependencies: - "@babel/plugin-transform-modules-commonjs" "^7.2.0" - "@vue/component-compiler-utils" "^3.1.0" - chalk "^2.1.0" - css-tree "^2.0.1" - source-map "0.5.6" - tsconfig "^7.0.0" - "@vue/vue3-jest@^29": version "29.2.6" resolved "https://registry.yarnpkg.com/@vue/vue3-jest/-/vue3-jest-29.2.6.tgz#2b32c61d99efa4e72a7d1365972dcf43b595b3f0" @@ -10622,6 +10771,15 @@ babel-plugin-polyfill-corejs2@^0.4.10: "@babel/helper-define-polyfill-provider" "^0.6.1" semver "^6.3.1" +babel-plugin-polyfill-corejs2@^0.4.14: + version "0.4.14" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz#8101b82b769c568835611542488d463395c2ef8f" + integrity sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg== + dependencies: + "@babel/compat-data" "^7.27.7" + "@babel/helper-define-polyfill-provider" "^0.6.5" + semver "^6.3.1" + babel-plugin-polyfill-corejs3@^0.11.0: version "0.11.1" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz#4e4e182f1bb37c7ba62e2af81d8dd09df31344f6" @@ -10630,6 +10788,14 @@ babel-plugin-polyfill-corejs3@^0.11.0: "@babel/helper-define-polyfill-provider" "^0.6.3" core-js-compat "^3.40.0" +babel-plugin-polyfill-corejs3@^0.13.0: + version "0.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz#bb7f6aeef7addff17f7602a08a6d19a128c30164" + integrity sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.6.5" + core-js-compat "^3.43.0" + babel-plugin-polyfill-regenerator@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.1.tgz#4f08ef4c62c7a7f66a35ed4c0d75e30506acc6be" @@ -10637,6 +10803,13 @@ babel-plugin-polyfill-regenerator@^0.6.1: dependencies: "@babel/helper-define-polyfill-provider" "^0.6.1" +babel-plugin-polyfill-regenerator@^0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz#32752e38ab6f6767b92650347bf26a31b16ae8c5" + integrity sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.6.5" + babel-preset-current-node-syntax@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" @@ -10737,6 +10910,11 @@ base64id@2.0.0: resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== +baseline-browser-mapping@^2.8.25: + version "2.8.31" + resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.8.31.tgz#16c0f1814638257932e0486dbfdbb3348d0a5710" + integrity sha512-a28v2eWrrRWPpJSzxc+mKwm0ZtVx/G8SepdQZDArnXYU/XS+IF6mp8aB/4E+hH1tyGCoDo3KlUCdlSxGDsRkAw== + basic-ftp@^5.0.2: version "5.0.5" resolved "https://registry.yarnpkg.com/basic-ftp/-/basic-ftp-5.0.5.tgz#14a474f5fffecca1f4f406f1c26b18f800225ac0" @@ -10979,6 +11157,17 @@ browserslist@^4.0.0, browserslist@^4.16.3, browserslist@^4.21.10, browserslist@^ node-releases "^2.0.19" update-browserslist-db "^1.1.1" +browserslist@^4.28.0: + version "4.28.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.28.0.tgz#9cefece0a386a17a3cd3d22ebf67b9deca1b5929" + integrity sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ== + dependencies: + baseline-browser-mapping "^2.8.25" + caniuse-lite "^1.0.30001754" + electron-to-chromium "^1.5.249" + node-releases "^2.0.27" + update-browserslist-db "^1.1.4" + bs-logger@^0.2.6: version "0.2.6" resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" @@ -11252,10 +11441,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001646, caniuse-lite@^1.0.30001688: - version "1.0.30001690" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001690.tgz#f2d15e3aaf8e18f76b2b8c1481abde063b8104c8" - integrity sha512-5ExiE3qQN6oF8Clf8ifIDcMRCRE/dMGcETG/XGMD8/XiXm6HXQgQTh1yZYLXXpSOsEUlJm1Xr7kGULZTuGtP/w== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001646, caniuse-lite@^1.0.30001688, caniuse-lite@^1.0.30001754: + version "1.0.30001757" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001757.tgz#a46ff91449c69522a462996c6aac4ef95d7ccc5e" + integrity sha512-r0nnL/I28Zi/yjk1el6ilj27tKcdjLsNqAOZr0yVjWPrSQyHgKI2INaEWw21bAQSv2LXRt1XuCS/GomNpWOxsQ== cardinal@^2.1.1: version "2.1.1" @@ -12112,10 +12301,17 @@ core-js-compat@^3.40.0, core-js-compat@^3.8.3: dependencies: browserslist "^4.24.4" -core-js-pure@^3.19.0: - version "3.19.3" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.19.3.tgz#c69b2b36b58927317824994b532ec3f0f7e49607" - integrity sha512-N3JruInmCyt7EJj5mAq3csCgGYgiSqu7p7TQp2KOztr180/OAIxyIvL1FCjzgmQk/t3Yniua50Fsak7FShI9lA== +core-js-compat@^3.43.0: + version "3.47.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.47.0.tgz#698224bbdbb6f2e3f39decdda4147b161e3772a3" + integrity sha512-IGfuznZ/n7Kp9+nypamBhvwdwLsW6KC8IOaURw2doAK5e98AG3acVLdh0woOnEqCfUtS+Vu882JE4k/DAm3ItQ== + dependencies: + browserslist "^4.28.0" + +core-js-pure@^3.43.0: + version "3.47.0" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.47.0.tgz#1104df8a3b6eb9189fcc559b5a65b90f66e7e887" + integrity sha512-BcxeDbzUrRnXGYIVAGFtcGQVNpFcUhVjr6W7F8XktvQW2iJP9e66GP6xdKotCRFlrxBvNIBrhwKteRXqMV86Nw== core-js@^1.0.0: version "1.2.7" @@ -12494,7 +12690,7 @@ cssstyle@^4.0.1: dependencies: rrweb-cssom "^0.6.0" -csstype@3.1.3, csstype@^3.0.2, csstype@^3.1.0, csstype@^3.1.2: +csstype@3.1.3, csstype@^3.0.2, csstype@^3.1.2: version "3.1.3" resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== @@ -12794,11 +12990,6 @@ dayjs@1.x, dayjs@^1.10.0, dayjs@^1.10.4: resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.10.7.tgz#2cf5f91add28116748440866a0a1d26f3a6ce468" integrity sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig== -de-indent@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" - integrity sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0= - debounce@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.1.tgz#38881d8f4166a5c5848020c11827b834bcb3e0a5" @@ -12825,6 +13016,13 @@ debug@^3.1.0, debug@^3.2.7: dependencies: ms "^2.1.1" +debug@^4.4.1: + version "4.4.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" + integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== + dependencies: + ms "^2.1.3" + debug@~3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" @@ -13217,11 +13415,6 @@ dom-converter@^0.2.0: dependencies: utila "~0.4" -dom-event-types@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/dom-event-types/-/dom-event-types-1.0.0.tgz#5830a0a29e1bf837fe50a70cd80a597232813cae" - integrity sha512-2G2Vwi2zXTHBGqXHsJ4+ak/iP0N8Ar+G8a7LiD2oup5o4sQWytwqqrZu/O6hIMV0KMID2PL69OhpshLO0n7UJQ== - dom-helpers@^5.0.1: version "5.2.1" resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902" @@ -13441,6 +13634,11 @@ ejs@^3.1.10, ejs@^3.1.7: dependencies: jake "^10.8.5" +electron-to-chromium@^1.5.249: + version "1.5.262" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.262.tgz#c31eed591c6628908451c9ca0f0758ed514aa003" + integrity sha512-NlAsMteRHek05jRUxUR0a5jpjYq9ykk6+kO0yRaMi5moe7u0fVIOeQ3Y30A8dIiWFBNUoQGi1ljb1i5VtS9WQQ== + electron-to-chromium@^1.5.73: version "1.5.79" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.79.tgz#4424f23f319db7a653cf9ee76102e4ac283e6b3e" @@ -15459,7 +15657,7 @@ global@~4.4.0: min-document "^2.19.0" process "^0.11.10" -globals@^11.1.0, globals@^11.12.0: +globals@^11.12.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== @@ -16484,7 +16682,7 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" -is-core-module@^2.13.0, is-core-module@^2.16.0, is-core-module@^2.2.0, is-core-module@^2.5.0, is-core-module@^2.8.0: +is-core-module@^2.13.0, is-core-module@^2.16.1, is-core-module@^2.5.0, is-core-module@^2.8.0: version "2.16.1" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== @@ -18032,10 +18230,10 @@ jsdom@^24.0.0: ws "^8.16.0" xml-name-validator "^5.0.0" -jsesc@^3.0.2, jsesc@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.0.2.tgz#bb8b09a6597ba426425f2e4a07245c3d00b9343e" - integrity sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g== +jsesc@^3.0.2, jsesc@~3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" + integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== jshs2@^0.4.4: version "0.4.4" @@ -19948,6 +20146,11 @@ node-releases@^2.0.19: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314" integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw== +node-releases@^2.0.27: + version "2.0.27" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.27.tgz#eedca519205cf20f650f61d56b070db111231e4e" + integrity sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA== + nopt@1.0.10: version "1.0.10" resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" @@ -20858,7 +21061,7 @@ path-key@^3.0.0, path-key@^3.1.0: resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -path-parse@^1.0.6, path-parse@^1.0.7: +path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== @@ -21484,7 +21687,7 @@ postcss@^7.0.36: picocolors "^0.2.1" source-map "^0.6.1" -postcss@^8.2.14, postcss@^8.2.6, postcss@^8.2.8, postcss@^8.3.5, postcss@^8.4.14, postcss@^8.4.21, postcss@^8.4.23, postcss@^8.4.31, postcss@^8.4.33, postcss@^8.4.43: +postcss@^8.2.14, postcss@^8.2.6, postcss@^8.2.8, postcss@^8.3.5, postcss@^8.4.21, postcss@^8.4.23, postcss@^8.4.31, postcss@^8.4.33, postcss@^8.4.43: version "8.5.3" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.3.tgz#1463b6f1c7fb16fe258736cba29a2de35237eafb" integrity sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A== @@ -21601,7 +21804,7 @@ pretty-format@^29.0.0, pretty-format@^29.5.0, pretty-format@^29.7.0: ansi-styles "^5.0.0" react-is "^18.0.0" -pretty@2.0.0, pretty@^2.0.0: +pretty@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/pretty/-/pretty-2.0.0.tgz#adbc7960b7bbfe289a557dc5f737619a220d06a5" integrity sha1-rbx5YLe7/iiaVX3F9zdhmiINBqU= @@ -22773,10 +22976,10 @@ reflect-metadata@^0.2.0: resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.2.2.tgz#400c845b6cba87a21f2c65c4aeb158f4fa4d9c5b" integrity sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q== -regenerate-unicode-properties@^10.2.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz#626e39df8c372338ea9b8028d1f99dc3fd9c3db0" - integrity sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA== +regenerate-unicode-properties@^10.2.2: + version "10.2.2" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz#aa113812ba899b630658c7623466be71e1f86f66" + integrity sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g== dependencies: regenerate "^1.4.2" @@ -22790,7 +22993,7 @@ regenerator-runtime@^0.11.0: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== -regenerator-runtime@^0.13.3, regenerator-runtime@^0.13.4: +regenerator-runtime@^0.13.3: version "0.13.9" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== @@ -22800,13 +23003,6 @@ regenerator-runtime@^0.14.0: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== -regenerator-transform@^0.15.2: - version "0.15.2" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4" - integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== - dependencies: - "@babel/runtime" "^7.8.4" - regex-parser@^2.2.11: version "2.2.11" resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.2.11.tgz#3b37ec9049e19479806e878cabe7c1ca83ccfe58" @@ -22827,29 +23023,29 @@ regexpp@^3.0.0, regexpp@^3.1.0: resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== -regexpu-core@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-6.2.0.tgz#0e5190d79e542bf294955dccabae04d3c7d53826" - integrity sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA== +regexpu-core@^6.3.1: + version "6.4.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-6.4.0.tgz#3580ce0c4faedef599eccb146612436b62a176e5" + integrity sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA== dependencies: regenerate "^1.4.2" - regenerate-unicode-properties "^10.2.0" + regenerate-unicode-properties "^10.2.2" regjsgen "^0.8.0" - regjsparser "^0.12.0" + regjsparser "^0.13.0" unicode-match-property-ecmascript "^2.0.0" - unicode-match-property-value-ecmascript "^2.1.0" + unicode-match-property-value-ecmascript "^2.2.1" regjsgen@^0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.8.0.tgz#df23ff26e0c5b300a6470cad160a9d090c3a37ab" integrity sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q== -regjsparser@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.12.0.tgz#0e846df6c6530586429377de56e0475583b088dc" - integrity sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ== +regjsparser@^0.13.0: + version "0.13.0" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.13.0.tgz#01f8351335cf7898d43686bc74d2dd71c847ecc0" + integrity sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q== dependencies: - jsesc "~3.0.2" + jsesc "~3.1.0" rehackt@^0.1.0: version "0.1.0" @@ -22951,22 +23147,23 @@ resolve@1.22.8: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -resolve@^1.1.6, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.1: - version "1.22.10" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" - integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== +resolve@^1.1.6, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.12.0, resolve@^1.17.0, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.1, resolve@^1.22.10: + version "1.22.11" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.11.tgz#aad857ce1ffb8bfa9b0b1ac29f1156383f68c262" + integrity sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ== dependencies: - is-core-module "^2.16.0" + is-core-module "^2.16.1" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" resolve@^2.0.0-next.3: - version "2.0.0-next.3" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.3.tgz#d41016293d4a8586a39ca5d9b5f15cbea1f55e46" - integrity sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q== + version "2.0.0-next.5" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.5.tgz#6b0ec3107e671e52b68cd068ef327173b90dc03c" + integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA== dependencies: - is-core-module "^2.2.0" - path-parse "^1.0.6" + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" response-iterator@^0.2.6: version "0.2.6" @@ -25423,10 +25620,10 @@ unicode-match-property-ecmascript@^2.0.0: unicode-canonical-property-names-ecmascript "^2.0.0" unicode-property-aliases-ecmascript "^2.0.0" -unicode-match-property-value-ecmascript@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" - integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== +unicode-match-property-value-ecmascript@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz#65a7adfad8574c219890e219285ce4c64ed67eaa" + integrity sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg== unicode-property-aliases-ecmascript@^2.0.0: version "2.0.0" @@ -25537,6 +25734,14 @@ update-browserslist-db@^1.1.1: escalade "^3.2.0" picocolors "^1.1.0" +update-browserslist-db@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz#7802aa2ae91477f255b86e0e46dbc787a206ad4a" + integrity sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A== + dependencies: + escalade "^3.2.0" + picocolors "^1.1.1" + uri-js@^4.2.2: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" @@ -25867,27 +26072,11 @@ vue-style-loader@^4.1.0, vue-style-loader@^4.1.3: hash-sum "^1.0.2" loader-utils "^1.0.2" -vue-template-compiler@^2.7: - version "2.7.15" - resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.7.15.tgz#ec88ba8ceafe0f17a528b89c57e01e02da92b0de" - integrity sha512-yQxjxMptBL7UAog00O8sANud99C6wJF+7kgbcwqkvA38vCGF7HWE66w0ZFnS/kX5gSoJr/PQ4/oS3Ne2pW37Og== - dependencies: - de-indent "^1.0.2" - he "^1.2.0" - vue-template-es2015-compiler@^1.9.0: version "1.9.1" resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825" integrity sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw== -vue@^2.7: - version "2.7.15" - resolved "https://registry.yarnpkg.com/vue/-/vue-2.7.15.tgz#94cd34e6e9f22cd2d35a02143f96a5beac1c1f54" - integrity sha512-a29fsXd2G0KMRqIFTpRgpSbWaNBK3lpCTOLuGLEDnlHWdjB8fwl6zyYZ8xCrqkJdatwZb4mGHiEfJjnw0Q6AwQ== - dependencies: - "@vue/compiler-sfc" "2.7.15" - csstype "^3.1.0" - vue@^3.0: version "3.3.8" resolved "https://registry.yarnpkg.com/vue/-/vue-3.3.8.tgz#532ff071af24f6a69e5ecc53a66858a9ee874ffc"