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/.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/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/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/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/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/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/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/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-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-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/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/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/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-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/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-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-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/.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 80c1f8f88ea64..0000000000000 --- a/packages/cubejs-client-vue/CHANGELOG.md +++ /dev/null @@ -1,1342 +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.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 3bf284b83eb13..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 - ---- -**NOTE** - -This package is only compatible with Vue 2. If you are using Vue 3, consider the `@cubejs-client/vue3` package instead. - ---- - -## 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 a2ff3aad8f0a0..0000000000000 --- a/packages/cubejs-client-vue/package.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "name": "@cubejs-client/vue", - "version": "1.5.9", - "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.9", - "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/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..3a494a1f100ad 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": { @@ -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-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/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/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-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/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-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-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/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"] 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/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/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/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), } } 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/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)"# 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" }, 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"