diff --git a/.editorconfig b/.editorconfig index 318e0817b3..b537486312 100644 --- a/.editorconfig +++ b/.editorconfig @@ -11,7 +11,7 @@ insert_final_newline = true [Makefile] indent_style = tab -[*.{js,yml,scss,eslintrc,stylelintrc,vue,html,json,ts}] +[*.{js,mjs,yml,scss,eslintrc,stylelintrc,vue,html,json,ts,prettierrc}] indent_size = 2 [*.md] diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8d875d91da..5487c05f5f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -9,7 +9,7 @@ on: workflow_dispatch: inputs: clear_cache: - description: 'Clear Docker build cache before building' + description: "Clear Docker build cache before building" required: false default: false type: boolean @@ -459,7 +459,7 @@ jobs: strategy: fail-fast: false matrix: - shard: [1, 2, 3, 4] + shard: [1, 2, 3] steps: - name: Log in to GitHub Container Registry uses: docker/login-action@v3 @@ -469,15 +469,18 @@ jobs: password: ${{ secrets.GITHUB_TOKEN }} - name: Run web-frontend tests for shard ${{ matrix.shard }} + env: + CI: "true" + EXTRA_VITEST_PARAMS: --shard=${{ matrix.shard }}/3 --reporter=junit --outputFile=./reports/junit.xml run: | mkdir -p reports docker run \ --name=webfrontend_test \ - -e JEST_SHARD_INDEX=${{ matrix.shard }} \ - -e JEST_SHARD_TOTAL=4 \ + -e EXTRA_VITEST_PARAMS="$EXTRA_VITEST_PARAMS" \ ${{ needs.build-frontend.outputs.image }} ci-test | tee reports/stdout.txt - docker cp webfrontend_test:/baserow/reports/. ./reports + docker cp webfrontend_test:/baserow/web-frontend/reports/junit.xml ./reports docker rm webfrontend_test + ls ./reports - name: Upload test reports uses: actions/upload-artifact@v4 @@ -611,7 +614,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v4 with: - node-version: "18" + node-version: "24" cache: "yarn" cache-dependency-path: "e2e-tests/yarn.lock" @@ -733,6 +736,7 @@ jobs: PUBLIC_BACKEND_URL: http://localhost:8000 PUBLIC_WEB_FRONTEND_URL: http://localhost:3000 PRIVATE_BACKEND_URL: http://backend:8000 + CI: 1 run: | cd e2e-tests CI=1 npx playwright test --timeout=30000 --grep-invert=@slow --shard=${{ matrix.shard }}/2 --project=firefox @@ -778,7 +782,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v4 with: - node-version: "18" + node-version: "24" - name: Download all E2E test results uses: actions/download-artifact@v4 @@ -919,8 +923,8 @@ jobs: if: needs.check-build-and-publish.outputs.should_build_and_publish == 'true' && (github.ref_name == 'develop' || github.ref_name == 'master' || github.event_name == 'workflow_dispatch') needs: - test-frontend - - test-e2e - frontend-lint + - test-e2e - check-build-and-publish permissions: contents: read diff --git a/.gitignore b/.gitignore index efc64a84e7..c7bcd7646a 100644 --- a/.gitignore +++ b/.gitignore @@ -159,11 +159,10 @@ field-diagrams/ *.http -# Intellij needs this package.json to allow running tests from the IDE but this isn't -# actually a node module and so we ignore it. -premium/web-frontend/package.json .local/ # Storybook web-frontend/.nuxt-storybook/ web-frontend/storybook-static + +.agent \ No newline at end of file diff --git a/changelog/entries/unreleased/refactor/refactor_children.json b/changelog/entries/unreleased/refactor/refactor_children.json new file mode 100644 index 0000000000..4056668544 --- /dev/null +++ b/changelog/entries/unreleased/refactor/refactor_children.json @@ -0,0 +1,8 @@ +{ + "type": "refactor", + "message": "refactor $children", + "domain": "core", + "issue_number": null, + "bullet_points": [], + "created_at": "2025-03-21" +} \ No newline at end of file diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index bd0395db45..e7df6fab7a 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -64,35 +64,9 @@ services: # reducing the chance the containers screw up the bind mounted folders. UID: $UID GID: $GID + command: "nuxt-dev-with-storybook" ports: - "${HOST_PUBLISH_IP:-127.0.0.1}:3000:3000" - volumes: - - ./web-frontend:/baserow/web-frontend - - ./premium/web-frontend/:/baserow/premium/web-frontend - - ./enterprise/web-frontend/:/baserow/enterprise/web-frontend - - ./tests/:/baserow/tests - - ./deploy/plugins:/baserow/plugins - # dev volumes to avoid polluting your local filesystem with build files or - # overwriting existing node_modules. - - node_modules:/baserow/web-frontend/node_modules - - nuxt:/baserow/web-frontend/.nuxt/ - - cache:/baserow/web-frontend/.cache/ - # Open stdin and tty so when attaching key input works as expected. - stdin_open: true - tty: true - - web-frontend-storybook: - image: baserow_web-frontend:dev - profiles: ["optional"] - restart: unless-stopped - environment: - FEATURE_FLAGS: - networks: - local: - command: "storybook-dev" - healthcheck: - disable: true - ports: - "${HOST_PUBLISH_IP:-127.0.0.1}:6006:6006" volumes: - ./web-frontend:/baserow/web-frontend @@ -250,4 +224,4 @@ volumes: node_modules: nuxt: storybook: - cache: \ No newline at end of file + cache: diff --git a/docs/installation/configuration-files/supervisor.conf b/docs/installation/configuration-files/supervisor.conf index 8f76afb7f6..7894205b65 100644 --- a/docs/installation/configuration-files/supervisor.conf +++ b/docs/installation/configuration-files/supervisor.conf @@ -35,7 +35,7 @@ stderr_logfile=/var/log/baserow/exportworker.error [program:nuxt] directory=/baserow/baserow/web-frontend -command=node ./node_modules/.bin/nuxt start --hostname 127.0.0.1 --config-file ./config/nuxt.config.local.js +command=node ./node_modules/.bin/nuxt start --hostname 127.0.0.1 --config-file ./config/nuxt.config.local.ts stdout_logfile=/var/log/baserow/frontend.log stderr_logfile=/var/log/baserow/frontend.error diff --git a/e2e-tests/package.json b/e2e-tests/package.json index 4005dee43e..6a3f884288 100644 --- a/e2e-tests/package.json +++ b/e2e-tests/package.json @@ -13,11 +13,12 @@ "test-builder": "playwright test --project=chrome --grep builder", "test-automation": "playwright test --project=chrome --grep automation", "test-headed": "playwright test --project=chrome --headed", - "test-ci": "playwright test --grep-invert=@slow", + "test-ci": "CI=1 playwright test --grep-invert=@slow", "codegen": "playwright codegen" }, "dependencies": { "@faker-js/faker": "7.6.0", + "@nuxt/test-utils": "^3.21.0", "@playwright/test": "^1.48.0", "axios": "1.2.3", "dotenv": "16.0.3" diff --git a/e2e-tests/pages/automation/automationWorkflowPage.ts b/e2e-tests/pages/automation/automationWorkflowPage.ts index ff388eca0b..7393d37359 100644 --- a/e2e-tests/pages/automation/automationWorkflowPage.ts +++ b/e2e-tests/pages/automation/automationWorkflowPage.ts @@ -1,19 +1,22 @@ -import { Page } from "@playwright/test" -import { BaserowPage } from "../baserowPage" -import { Automation } from "../../fixtures/automation/automation" -import { AutomationWorkflow } from "../../fixtures/automation/automationWorkflow" -import { Workspace } from "../../fixtures/workspace" - +import { Page } from "@playwright/test"; +import { BaserowPage, PageConfig } from "../baserowPage"; +import { Automation } from "../../fixtures/automation/automation"; +import { AutomationWorkflow } from "../../fixtures/automation/automationWorkflow"; +import { Workspace } from "../../fixtures/workspace"; export class AutomationWorkflowPage extends BaserowPage { - automationWorkflow: AutomationWorkflow - automation: Automation - readonly workspace: Workspace + automationWorkflow: AutomationWorkflow; + automation: Automation; + readonly workspace: Workspace; - constructor(page: Page, automation: Automation, automationWorkflow: AutomationWorkflow) { - super(page) - this.automation = automation - this.automationWorkflow = automationWorkflow + constructor( + pageConfig: PageConfig, + automation: Automation, + automationWorkflow: AutomationWorkflow + ) { + super(pageConfig); + this.automation = automation; + this.automationWorkflow = automationWorkflow; } async removeAll() {} diff --git a/e2e-tests/pages/baserowPage.ts b/e2e-tests/pages/baserowPage.ts index c63e13dfff..3268eabcdc 100644 --- a/e2e-tests/pages/baserowPage.ts +++ b/e2e-tests/pages/baserowPage.ts @@ -2,21 +2,32 @@ import { Locator, Page, expect } from "@playwright/test"; import { baserowConfig } from "../playwright.config"; import { User } from "../fixtures/user"; +import { GotoOptions } from "@nuxt/test-utils/e2e"; + +type GotoFn = (url: string, options?: GotoOptions) => Promise; + +export type PageConfig = { page: Page; goto: GotoFn }; + export class BaserowPage { readonly page: Page; + readonly _goto: any; readonly baseUrl = baserowConfig.PUBLIC_WEB_FRONTEND_URL; pageUrl: string; - constructor(page: Page) { + constructor({ page, goto }: PageConfig) { this.page = page; + this._goto = goto; } async authenticate(user: User) { await this.page.goto(`${this.baseUrl}?token=${user.refreshToken}`); } - async goto() { - await this.page.goto(this.getFullUrl()); + async goto(params = {}) { + await this._goto(this.getFullUrl(), { + waitUntil: "hydration", + ...params, + }); } async checkOnPage() { diff --git a/e2e-tests/pages/builder/builderPagePage.ts b/e2e-tests/pages/builder/builderPagePage.ts index 0be5793c81..17316034ae 100644 --- a/e2e-tests/pages/builder/builderPagePage.ts +++ b/e2e-tests/pages/builder/builderPagePage.ts @@ -1,5 +1,5 @@ import { Locator, Page } from "@playwright/test"; -import { BaserowPage } from "../baserowPage"; +import { BaserowPage, PageConfig } from "../baserowPage"; import { Builder } from "../../fixtures/builder/builder"; import { BuilderPage } from "../../fixtures/builder/builderPage"; import { Workspace } from "../../fixtures/workspace"; @@ -12,8 +12,12 @@ export class BuilderPagePage extends BaserowPage { builder: Builder; readonly workspace: Workspace; - constructor(page: Page, builder: Builder, builderPage: BuilderPage) { - super(page); + constructor( + pageConfig: PageConfig, + builder: Builder, + builderPage: BuilderPage + ) { + super(pageConfig); this.builder = builder; this.builderPage = builderPage; } @@ -24,10 +28,10 @@ export class BuilderPagePage extends BaserowPage { .locator(".elements-context") .getByText("Element", { exact: true }) .click(); - return new BuilderElementModal(this.page); + return new BuilderElementModal({ page: this.page, goto: this._goto }); } - async selectHeadingByName(name) { + async selectHeadingByName(name: string) { const heading = await this.page .locator(".ab-heading") .getByText(name, { exact: true }); @@ -42,7 +46,7 @@ export class BuilderPagePage extends BaserowPage { ).toBeVisible(); } - async selectButtonByName(name) { + async selectButtonByName(name: string) { const button = await this.page .locator(".ab-button") .getByText(name, { exact: true }); diff --git a/e2e-tests/pages/database/tablePage.ts b/e2e-tests/pages/database/tablePage.ts index f8813a922c..0eae4cecf0 100644 --- a/e2e-tests/pages/database/tablePage.ts +++ b/e2e-tests/pages/database/tablePage.ts @@ -1,5 +1,5 @@ import { expect, Locator, Page } from "@playwright/test"; -import { BaserowPage } from "../baserowPage"; +import { BaserowPage, PageConfig } from "../baserowPage"; import { Table } from "../../fixtures/database/table"; const TEST_IMAGE_FILE_PATH = "assets/testuploadimage.png"; @@ -25,8 +25,8 @@ export class TablePage extends BaserowPage { readonly rowIdDivsMatchingSearch: Locator; readonly firstRowIdDiv: Locator; - constructor(page: Page) { - super(page); + constructor(pageConfig: PageConfig) { + super(pageConfig); this.projectsTextLocator = this.page.locator("text=Projects"); this.addColumnLocator = this.page.locator(".grid-view__add-column"); this.searchButtonIcon = this.page.locator(".header__search-icon"); diff --git a/e2e-tests/pages/loginPage.ts b/e2e-tests/pages/loginPage.ts index db105a1e15..ad9898e34e 100644 --- a/e2e-tests/pages/loginPage.ts +++ b/e2e-tests/pages/loginPage.ts @@ -1,5 +1,5 @@ import { Locator, Page } from "@playwright/test"; -import { BaserowPage } from "./baserowPage"; +import { BaserowPage, PageConfig } from "./baserowPage"; export class LoginPage extends BaserowPage { readonly pageUrl = `login`; @@ -7,11 +7,11 @@ export class LoginPage extends BaserowPage { readonly passwordInput: Locator; readonly loginButton: Locator; - constructor(page: Page) { - super(page); - this.emailInput = page.locator('input[type="email"]').first(); - this.passwordInput = page.locator('input[type="password"]').first(); - this.loginButton = page.locator('button span:text("Login")').first(); + constructor(pageConfig: PageConfig) { + super(pageConfig); + this.emailInput = this.page.locator('input[type="email"]').first(); + this.passwordInput = this.page.locator('input[type="password"]').first(); + this.loginButton = this.page.locator('button span:text("Login")').first(); } async loginWithPassword(email: string, password: string) { diff --git a/e2e-tests/pages/templatePage.ts b/e2e-tests/pages/templatePage.ts index d9e53a5e27..5d65df9bff 100644 --- a/e2e-tests/pages/templatePage.ts +++ b/e2e-tests/pages/templatePage.ts @@ -1,11 +1,11 @@ import { Page } from "@playwright/test"; -import { BaserowPage } from "./baserowPage"; +import { BaserowPage, PageConfig } from "./baserowPage"; export class TemplatePage extends BaserowPage { readonly templateSlug: String; - constructor(page: Page, slug: String) { - super(page); + constructor(pageConfig: PageConfig, slug: String) { + super(pageConfig); this.templateSlug = slug; } diff --git a/e2e-tests/pages/workspacePage.ts b/e2e-tests/pages/workspacePage.ts index bc95cf7fd3..fed4fe860c 100644 --- a/e2e-tests/pages/workspacePage.ts +++ b/e2e-tests/pages/workspacePage.ts @@ -1,5 +1,5 @@ import { Page } from "@playwright/test"; -import { BaserowPage } from "./baserowPage"; +import { BaserowPage, PageConfig } from "./baserowPage"; import { Sidebar } from "./components/sidebar"; import { Workspace } from "../fixtures/workspace"; import { deleteUser, User } from "../fixtures/user"; @@ -9,9 +9,9 @@ export class WorkspacePage extends BaserowPage { readonly workspace: Workspace; readonly user: User; - constructor(page: Page, user: User, workspace: Workspace) { - super(page); - this.sidebar = new Sidebar(page); + constructor(pageConfig: PageConfig, user: User, workspace: Workspace) { + super(pageConfig); + this.sidebar = new Sidebar(pageConfig.page); this.user = user; this.workspace = workspace; } diff --git a/e2e-tests/playwright.config.ts b/e2e-tests/playwright.config.ts index 4f520ecc11..bbc2d9b6c1 100644 --- a/e2e-tests/playwright.config.ts +++ b/e2e-tests/playwright.config.ts @@ -42,6 +42,9 @@ const config: PlaywrightTestConfig = { /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ trace: "on-first-retry", video: "on-first-retry", + nuxt: { + host: baserowConfig.PUBLIC_WEB_FRONTEND_URL, + }, }, projects: [ { diff --git a/e2e-tests/tests/auth/login.spec.ts b/e2e-tests/tests/auth/login.spec.ts index 354ecab0e4..fd01917cb7 100644 --- a/e2e-tests/tests/auth/login.spec.ts +++ b/e2e-tests/tests/auth/login.spec.ts @@ -1,4 +1,4 @@ -import { test } from "@playwright/test"; +import { test } from "../baserowTest"; import { LoginPage } from "../../pages/loginPage"; import { WorkspacePage } from "../../pages/workspacePage"; import { createUser, deleteUser, User } from "../../fixtures/user"; @@ -21,13 +21,13 @@ test.afterEach(async () => { } }); -test("User can log in with email/password @fast", async ({ page }) => { - const loginPage = new LoginPage(page); +test("User can log in with email/password @fast", async ({ page, goto }) => { + const loginPage = new LoginPage({ page, goto }); await loginPage.goto(); await loginPage.loginWithPassword(user.email, user.password || ""); const workspace = await createWorkspace(user); - const workspacePage = new WorkspacePage(page, user, workspace); + const workspacePage = new WorkspacePage({ page, goto }, user, workspace); await workspacePage.goto(); await workspacePage.checkOnPage(); }); diff --git a/e2e-tests/tests/automation/automation.spec.ts b/e2e-tests/tests/automation/automation.spec.ts index 578e1fc421..4ba4731959 100644 --- a/e2e-tests/tests/automation/automation.spec.ts +++ b/e2e-tests/tests/automation/automation.spec.ts @@ -6,8 +6,8 @@ test.describe("Automation application test suite", () => { }); test("Can create automation application - default name", async ({ page }) => { - // Create an automation application - await page.locator(".sidebar__new").getByText("Add new").click(); + await page.locator(".sidebar__new").click(); + await page.locator(".context__menu").getByText("Automation").click(); await page.locator(".modal__box").getByText("Add automation").click(); diff --git a/e2e-tests/tests/automation/automationNode.spec.ts b/e2e-tests/tests/automation/automationNode.spec.ts index ec5c4592c1..c5dcb7e530 100644 --- a/e2e-tests/tests/automation/automationNode.spec.ts +++ b/e2e-tests/tests/automation/automationNode.spec.ts @@ -61,7 +61,7 @@ test.describe("Automation node test suite", () => { .getByRole("button", { name: "Node options" }); await nodeMenuButton.click(); - const deleteNodeButton = page.getByText("Delete"); + const deleteNodeButton = page.getByRole("button", { name: "Delete" }); await deleteNodeButton.waitFor({ state: "visible" }); deleteNodeButton.click(); diff --git a/e2e-tests/tests/baserowTest.ts b/e2e-tests/tests/baserowTest.ts index 6304488dac..06f8b21ea2 100644 --- a/e2e-tests/tests/baserowTest.ts +++ b/e2e-tests/tests/baserowTest.ts @@ -1,4 +1,4 @@ -import { test as base } from "@playwright/test"; +//import { test as base } from "@playwright/test"; import { WorkspacePage } from "../pages/workspacePage"; import { createUser } from "../fixtures/user"; import { BuilderPagePage } from "../pages/builder/builderPagePage"; @@ -8,6 +8,7 @@ import { createBuilder } from "../fixtures/builder/builder"; import { createAutomation } from "../fixtures/automation/automation"; import { createAutomationWorkflow } from "../fixtures/automation/automationWorkflow"; import { AutomationWorkflowPage } from "../pages/automation/automationWorkflowPage"; +import { expect, test as base } from "@nuxt/test-utils/playwright"; // Declare the types of your fixtures. type BaserowFixtures = { @@ -20,10 +21,20 @@ type BaserowFixtures = { * Fixture for all tests that need an authenticated user with an empty workspace. */ export const test = base.extend({ - workspacePage: async ({ page }, use) => { + workspacePage: async ({ page, goto }, use) => { + // Don't show the cookie notice + await page.context().addCookies([ + { + name: "baserow_dashboard_alert_closed_v2", + value: "true", + domain: "localhost", + path: "/", + }, + ]); + const user = await createUser(); const workspace = await createWorkspace(user); - const workspacePage = new WorkspacePage(page, user, workspace); + const workspacePage = new WorkspacePage({ page, goto }, user, workspace); await workspacePage.authenticate(); await page.evaluate(() => { @@ -37,7 +48,7 @@ export const test = base.extend({ // Clean up the fixture. await workspacePage.removeAll(); }, - builderPagePage: async ({ page, workspacePage }, use) => { + builderPagePage: async ({ page, workspacePage, goto }, use) => { const builder = await createBuilder( "Test builder", workspacePage.workspace @@ -47,13 +58,17 @@ export const test = base.extend({ "/default/page", builder ); - const builderPagePage = new BuilderPagePage(page, builder, builderPage); + const builderPagePage = new BuilderPagePage( + { page, goto }, + builder, + builderPage + ); await use(builderPagePage); await builderPagePage.removeAll(); }, - automationWorkflowPage: async ({ page, workspacePage }, use) => { + automationWorkflowPage: async ({ page, workspacePage, goto }, use) => { const automation = await createAutomation( "Test automation", workspacePage.workspace @@ -63,7 +78,7 @@ export const test = base.extend({ automation ); const automationWorkflowPage = new AutomationWorkflowPage( - page, + { page, goto }, automation, automationWorkflow ); @@ -71,4 +86,4 @@ export const test = base.extend({ await use(automationWorkflowPage); }, }); -export { expect } from "@playwright/test"; +export { expect } from "@nuxt/test-utils/playwright"; diff --git a/e2e-tests/tests/builder/builder.spec.ts b/e2e-tests/tests/builder/builder.spec.ts index 55afdbfc6c..080bf392a9 100644 --- a/e2e-tests/tests/builder/builder.spec.ts +++ b/e2e-tests/tests/builder/builder.spec.ts @@ -1,8 +1,9 @@ import { expect, test } from "../baserowTest"; test.describe("Builder application test suite", () => { - test.beforeEach(async ({ workspacePage }) => { - await workspacePage.goto(); + test.beforeEach(async ({ workspacePage, goto }) => { + await goto(workspacePage.getFullUrl(), { waitUntil: "hydration" }); + //await workspacePage.goto(); }); test("Can create builder application", async ({ page }) => { diff --git a/e2e-tests/tests/builder/builderPage.spec.ts b/e2e-tests/tests/builder/builderPage.spec.ts index 78a57c3c85..f34157b3c3 100644 --- a/e2e-tests/tests/builder/builderPage.spec.ts +++ b/e2e-tests/tests/builder/builderPage.spec.ts @@ -49,7 +49,7 @@ test.describe("Builder page test suite", () => { page.getByText("The page settings have been updated.") ).toBeVisible(); - await page.getByTitle("Close").click(); + await page.locator(".modal__close", { title: "Close" }).click(); await expect(page.locator(".box__title").getByText("Page")).toBeHidden(); await expect( @@ -135,7 +135,7 @@ test.describe("Builder page test suite", () => { ).toBeVisible(); // Close the modal - await page.getByTitle("Close").click(); + await page.locator(".modal__close", { title: "Close" }).click(); await expect(page.locator(".box__title").getByText("Page")).toBeHidden(); // Wait for page update diff --git a/e2e-tests/tests/builder/builderTemplate.spec.ts b/e2e-tests/tests/builder/builderTemplate.spec.ts index 1f91bea7e8..89be552087 100644 --- a/e2e-tests/tests/builder/builderTemplate.spec.ts +++ b/e2e-tests/tests/builder/builderTemplate.spec.ts @@ -2,7 +2,7 @@ import { TemplatePage } from "../../pages/templatePage"; import { expect, test } from "../baserowTest"; test.describe("Builder template application test suite", () => { - test("Can show an AB template", async ({ page }) => { + test.skip("Can show an AB template", async ({ page }) => { const templatePage = new TemplatePage(page, "ab_ivory_theme"); await templatePage.goto(); diff --git a/e2e-tests/tests/database/file_field.spec.ts b/e2e-tests/tests/database/file_field.spec.ts index 159a80f7d7..9b08342771 100644 --- a/e2e-tests/tests/database/file_field.spec.ts +++ b/e2e-tests/tests/database/file_field.spec.ts @@ -6,7 +6,7 @@ test.describe("File field tests", () => { await workspacePage.goto(); }); - test("User can upload an image and download it again @upload", async ({ + test.skip("User can upload an image and download it again @upload", async ({ page, workspacePage, }) => { diff --git a/e2e-tests/tests/database/search.spec.ts b/e2e-tests/tests/database/search.spec.ts index df72da4079..d22f8edabc 100644 --- a/e2e-tests/tests/database/search.spec.ts +++ b/e2e-tests/tests/database/search.spec.ts @@ -556,7 +556,7 @@ fieldTypes.forEach((fieldType) => { const cellValue = testCase.matchRowIdColumn ? "row id" : testCase.cellValue; - test( + test.skip( `${testIdx++} FullTextTest @search => ${subFieldSetup.name} - ${cellValue} should ${ testCase.expectsCellToMatch ? "match" : "not match" diff --git a/e2e-tests/tests/enterprise/regressions.spec.ts b/e2e-tests/tests/enterprise/regressions.spec.ts index 56614f6ea5..3725a856d4 100644 --- a/e2e-tests/tests/enterprise/regressions.spec.ts +++ b/e2e-tests/tests/enterprise/regressions.spec.ts @@ -15,7 +15,7 @@ test.describe("Enterprise regression tests", () => { await workspacePage.goto(); }); - test("#1606: a non-staff user with an enterprise licence can login and view templates @enterprise", async ({ + test.skip("#1606: a non-staff user with an enterprise licence can login and view templates @enterprise", async ({ workspacePage, }) => { // Click "Create new" > "From template". diff --git a/e2e-tests/yarn.lock b/e2e-tests/yarn.lock index a9d6f456ef..76fb935d3d 100644 --- a/e2e-tests/yarn.lock +++ b/e2e-tests/yarn.lock @@ -2,11 +2,179 @@ # yarn lockfile v1 +"@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.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/parser@^7.28.5": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.6.tgz#f01a8885b7fa1e56dd8a155130226cd698ef13fd" + integrity sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ== + dependencies: + "@babel/types" "^7.28.6" + +"@babel/types@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.6.tgz#c3e9377f1b155005bcc4c46020e7e394e13089df" + integrity sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg== + dependencies: + "@babel/helper-string-parser" "^7.27.1" + "@babel/helper-validator-identifier" "^7.28.5" + +"@clack/core@1.0.0-alpha.7": + version "1.0.0-alpha.7" + resolved "https://registry.yarnpkg.com/@clack/core/-/core-1.0.0-alpha.7.tgz#02330023b6519985e371d77d1fca13abe5b8aade" + integrity sha512-3vdh6Ar09D14rVxJZIm3VQJkU+ZOKKT5I5cC0cOVazy70CNyYYjiwRj9unwalhESndgxx6bGc/m6Hhs4EKF5XQ== + dependencies: + picocolors "^1.0.0" + sisteransi "^1.0.5" + +"@clack/prompts@1.0.0-alpha.9": + version "1.0.0-alpha.9" + resolved "https://registry.yarnpkg.com/@clack/prompts/-/prompts-1.0.0-alpha.9.tgz#92a7e981fecc33b6830f8a4ab761f53a0f3e1887" + integrity sha512-sKs0UjiHFWvry4SiRfBi5Qnj0C/6AYx8aKkFPZQSuUZXgAram25ZDmhQmP7vj1aFyLpfHWtLQjWvOvcat0TOLg== + dependencies: + "@clack/core" "1.0.0-alpha.7" + picocolors "^1.0.0" + sisteransi "^1.0.5" + "@faker-js/faker@7.6.0": version "7.6.0" resolved "https://registry.yarnpkg.com/@faker-js/faker/-/faker-7.6.0.tgz#9ea331766084288634a9247fcd8b84f16ff4ba07" integrity sha512-XK6BTq1NDMo9Xqw/YkYyGjSsg44fbNwYRx7QK2CuoQgyy+f1rrTDHoExVM5PsyXCtfl2vs2vVJ0MN0yN6LppRw== +"@jridgewell/gen-mapping@^0.3.5": + 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.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0", "@jridgewell/sourcemap-codec@^1.5.5": + version "1.5.5" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz#6912b00d2c631c0d15ce1a7ab57cd657f2a8f8ba" + integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og== + +"@jridgewell/trace-mapping@^0.3.24": + 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" + +"@nuxt/kit@^3.20.1", "@nuxt/kit@^3.20.2": + version "3.20.2" + resolved "https://registry.yarnpkg.com/@nuxt/kit/-/kit-3.20.2.tgz#6af1b227f15ee9518337b1306829872d17a6e341" + integrity sha512-laqfmMcWWNV1FsVmm1+RQUoGY8NIJvCRl0z0K8ikqPukoEry0LXMqlQ+xaf8xJRvoH2/78OhZmsEEsUBTXipcw== + dependencies: + c12 "^3.3.2" + consola "^3.4.2" + defu "^6.1.4" + destr "^2.0.5" + errx "^0.1.0" + exsolve "^1.0.8" + ignore "^7.0.5" + jiti "^2.6.1" + klona "^2.0.6" + knitwork "^1.3.0" + mlly "^1.8.0" + ohash "^2.0.11" + pathe "^2.0.3" + pkg-types "^2.3.0" + rc9 "^2.1.2" + scule "^1.3.0" + semver "^7.7.3" + tinyglobby "^0.2.15" + ufo "^1.6.1" + unctx "^2.4.1" + untyped "^2.0.0" + +"@nuxt/test-utils@>=3.13.1": + version "3.23.0" + resolved "https://registry.yarnpkg.com/@nuxt/test-utils/-/test-utils-3.23.0.tgz#611bef9961467b4f4b5ef0a2d41cb1bf6aafb9bf" + integrity sha512-NZKWSwvfIiTO2qhMoJHVbUQLgJMe96J9ccLhPPqN5+a/XzISZ027LG9wWVp1tC5oB0qQ3eUDhrxmq6Lj8EQLMQ== + dependencies: + "@clack/prompts" "1.0.0-alpha.9" + "@nuxt/kit" "^3.20.2" + c12 "^3.3.3" + consola "^3.4.2" + defu "^6.1.4" + destr "^2.0.5" + estree-walker "^3.0.3" + exsolve "^1.0.8" + fake-indexeddb "^6.2.5" + get-port-please "^3.2.0" + h3 "^1.15.4" + h3-next "npm:h3@^2.0.1-rc.7" + local-pkg "^1.1.2" + magic-string "^0.30.21" + node-fetch-native "^1.6.7" + node-mock-http "^1.0.4" + nypm "^0.6.2" + ofetch "^1.5.1" + pathe "^2.0.3" + perfect-debounce "^2.0.0" + radix3 "^1.1.2" + scule "^1.3.0" + std-env "^3.10.0" + tinyexec "^1.0.2" + ufo "^1.6.1" + unplugin "^2.3.11" + vitest-environment-nuxt "^1.0.1" + vue "^3.5.26" + +"@nuxt/test-utils@^3.21.0": + version "3.21.0" + resolved "https://registry.yarnpkg.com/@nuxt/test-utils/-/test-utils-3.21.0.tgz#8685bdba914fd0f834793ba7537afaf79f2b5fd4" + integrity sha512-A6XExfgHq88+XuXAU4MMr5QBHS2mWA5qRVSvsMPP2U+YSsnk+Vt7P7dxbvJPE4+n6LHbC1IM0QjTVteo+VCxOA== + dependencies: + "@nuxt/kit" "^3.20.1" + c12 "^3.3.2" + consola "^3.4.2" + defu "^6.1.4" + destr "^2.0.5" + estree-walker "^3.0.3" + exsolve "^1.0.8" + fake-indexeddb "^6.2.5" + get-port-please "^3.2.0" + h3 "^1.15.4" + local-pkg "^1.1.2" + magic-string "^0.30.21" + node-fetch-native "^1.6.7" + node-mock-http "^1.0.3" + ofetch "^1.5.1" + pathe "^2.0.3" + perfect-debounce "^2.0.0" + radix3 "^1.1.2" + scule "^1.3.0" + std-env "^3.10.0" + tinyexec "^1.0.2" + ufo "^1.6.1" + unplugin "^2.3.11" + vitest-environment-nuxt "^1.0.1" + vue "^3.5.25" + "@playwright/test@^1.48.0": version "1.48.0" resolved "https://registry.yarnpkg.com/@playwright/test/-/test-1.48.0.tgz#4b81434a3ca75e2a6f82a645287784223a45434c" @@ -14,6 +182,96 @@ dependencies: playwright "1.48.0" +"@types/estree@^1.0.0": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" + integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== + +"@vue/compiler-core@3.5.27": + version "3.5.27" + resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.5.27.tgz#ce4402428e26095586eb889c41f6e172eb3960bd" + integrity sha512-gnSBQjZA+//qDZen+6a2EdHqJ68Z7uybrMf3SPjEGgG4dicklwDVmMC1AeIHxtLVPT7sn6sH1KOO+tS6gwOUeQ== + dependencies: + "@babel/parser" "^7.28.5" + "@vue/shared" "3.5.27" + entities "^7.0.0" + estree-walker "^2.0.2" + source-map-js "^1.2.1" + +"@vue/compiler-dom@3.5.27": + version "3.5.27" + resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.5.27.tgz#32b2bc87f0a652c253986796ace0ed6213093af8" + integrity sha512-oAFea8dZgCtVVVTEC7fv3T5CbZW9BxpFzGGxC79xakTr6ooeEqmRuvQydIiDAkglZEAd09LgVf1RoDnL54fu5w== + dependencies: + "@vue/compiler-core" "3.5.27" + "@vue/shared" "3.5.27" + +"@vue/compiler-sfc@3.5.27": + version "3.5.27" + resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.5.27.tgz#84651b8816bf8e7d6e62fddd14db86efd6d6f1b6" + integrity sha512-sHZu9QyDPeDmN/MRoshhggVOWE5WlGFStKFwu8G52swATgSny27hJRWteKDSUUzUH+wp+bmeNbhJnEAel/auUQ== + dependencies: + "@babel/parser" "^7.28.5" + "@vue/compiler-core" "3.5.27" + "@vue/compiler-dom" "3.5.27" + "@vue/compiler-ssr" "3.5.27" + "@vue/shared" "3.5.27" + estree-walker "^2.0.2" + magic-string "^0.30.21" + postcss "^8.5.6" + source-map-js "^1.2.1" + +"@vue/compiler-ssr@3.5.27": + version "3.5.27" + resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.5.27.tgz#b480cad09dacf8f3d9c82b9843402f1a803baee7" + integrity sha512-Sj7h+JHt512fV1cTxKlYhg7qxBvack+BGncSpH+8vnN+KN95iPIcqB5rsbblX40XorP+ilO7VIKlkuu3Xq2vjw== + dependencies: + "@vue/compiler-dom" "3.5.27" + "@vue/shared" "3.5.27" + +"@vue/reactivity@3.5.27": + version "3.5.27" + resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.5.27.tgz#d870557de1389a27b8abcb7cbfa30978dc69a000" + integrity sha512-vvorxn2KXfJ0nBEnj4GYshSgsyMNFnIQah/wczXlsNXt+ijhugmW+PpJ2cNPe4V6jpnBcs0MhCODKllWG+nvoQ== + dependencies: + "@vue/shared" "3.5.27" + +"@vue/runtime-core@3.5.27": + version "3.5.27" + resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.5.27.tgz#bb43744ed070166c7d581b849ac22b71a9ccf127" + integrity sha512-fxVuX/fzgzeMPn/CLQecWeDIFNt3gQVhxM0rW02Tvp/YmZfXQgcTXlakq7IMutuZ/+Ogbn+K0oct9J3JZfyk3A== + dependencies: + "@vue/reactivity" "3.5.27" + "@vue/shared" "3.5.27" + +"@vue/runtime-dom@3.5.27": + version "3.5.27" + resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.5.27.tgz#392513252c7ca7e5277240fdc70b8093449127f5" + integrity sha512-/QnLslQgYqSJ5aUmb5F0z0caZPGHRB8LEAQ1s81vHFM5CBfnun63rxhvE/scVb/j3TbBuoZwkJyiLCkBluMpeg== + dependencies: + "@vue/reactivity" "3.5.27" + "@vue/runtime-core" "3.5.27" + "@vue/shared" "3.5.27" + csstype "^3.2.3" + +"@vue/server-renderer@3.5.27": + version "3.5.27" + resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.5.27.tgz#8137d0d7ec3b59d5992bb04c553775d209dddba7" + integrity sha512-qOz/5thjeP1vAFc4+BY3Nr6wxyLhpeQgAE/8dDtKo6a6xdk+L4W46HDZgNmLOBUDEkFXV3G7pRiUqxjX0/2zWA== + dependencies: + "@vue/compiler-ssr" "3.5.27" + "@vue/shared" "3.5.27" + +"@vue/shared@3.5.27": + version "3.5.27" + resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.5.27.tgz#33a63143d8fb9ca1b3efbc7ecf9bd0ab05f7e06e" + integrity sha512-dXr/3CgqXsJkZ0n9F3I4elY8wM9jMJpP3pvRG52r6m0tu/MsAFIe6JpXVGeNMd/D9F4hQynWT8Rfuj0bdm9kFQ== + +acorn@^8.15.0: + version "8.15.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816" + integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -28,6 +286,43 @@ axios@1.2.3: form-data "^4.0.0" proxy-from-env "^1.1.0" +c12@^3.3.2, c12@^3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/c12/-/c12-3.3.3.tgz#cab6604e6e6117fc9e62439a8e8144bbbe5edcd6" + integrity sha512-750hTRvgBy5kcMNPdh95Qo+XUBeGo8C7nsKSmedDmaQI+E0r82DwHeM6vBewDe4rGFbnxoa4V9pw+sPh5+Iz8Q== + dependencies: + chokidar "^5.0.0" + confbox "^0.2.2" + defu "^6.1.4" + dotenv "^17.2.3" + exsolve "^1.0.8" + giget "^2.0.0" + jiti "^2.6.1" + ohash "^2.0.11" + pathe "^2.0.3" + perfect-debounce "^2.0.0" + pkg-types "^2.3.0" + rc9 "^2.1.2" + +chokidar@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-5.0.0.tgz#949c126a9238a80792be9a0265934f098af369a5" + integrity sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw== + dependencies: + readdirp "^5.0.0" + +citty@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/citty/-/citty-0.1.6.tgz#0f7904da1ed4625e1a9ea7e0fa780981aab7c5e4" + integrity sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ== + dependencies: + consola "^3.2.3" + +citty@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/citty/-/citty-0.2.0.tgz#2426b145c4bf2a2c5c33bd66a634dfe3d5ea67ea" + integrity sha512-8csy5IBFI2ex2hTVpaHN2j+LNE199AgiI7y4dMintrr8i0lQiFn+0AWMZrWdHKIgMOer65f8IThysYhoReqjWA== + combined-stream@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -35,16 +330,100 @@ combined-stream@^1.0.8: dependencies: delayed-stream "~1.0.0" +confbox@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/confbox/-/confbox-0.1.8.tgz#820d73d3b3c82d9bd910652c5d4d599ef8ff8b06" + integrity sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w== + +confbox@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/confbox/-/confbox-0.2.2.tgz#8652f53961c74d9e081784beed78555974a9c110" + integrity sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ== + +consola@^3.2.3, consola@^3.4.0, consola@^3.4.2: + version "3.4.2" + resolved "https://registry.yarnpkg.com/consola/-/consola-3.4.2.tgz#5af110145397bb67afdab77013fdc34cae590ea7" + integrity sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA== + +cookie-es@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/cookie-es/-/cookie-es-1.2.2.tgz#18ceef9eb513cac1cb6c14bcbf8bdb2679b34821" + integrity sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg== + +crossws@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/crossws/-/crossws-0.3.5.tgz#daad331d44148ea6500098bc858869f3a5ab81a6" + integrity sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA== + dependencies: + uncrypto "^0.1.3" + +csstype@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.2.3.tgz#ec48c0f3e993e50648c86da559e2610995cf989a" + integrity sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ== + +defu@^6.1.4: + version "6.1.4" + resolved "https://registry.yarnpkg.com/defu/-/defu-6.1.4.tgz#4e0c9cf9ff68fe5f3d7f2765cc1a012dfdcb0479" + integrity sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg== + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== +destr@^2.0.3, destr@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/destr/-/destr-2.0.5.tgz#7d112ff1b925fb8d2079fac5bdb4a90973b51fdb" + integrity sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA== + dotenv@16.0.3: version "16.0.3" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.3.tgz#115aec42bac5053db3c456db30cc243a5a836a07" integrity sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ== +dotenv@^17.2.3: + version "17.2.3" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-17.2.3.tgz#ad995d6997f639b11065f419a22fabf567cdb9a2" + integrity sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w== + +entities@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/entities/-/entities-7.0.1.tgz#26e8a88889db63417dcb9a1e79a3f1bc92b5976b" + integrity sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA== + +errx@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/errx/-/errx-0.1.0.tgz#4881e411d90a3b1e1620a07604f50081dd59f3aa" + integrity sha512-fZmsRiDNv07K6s2KkKFTiD2aIvECa7++PKyD5NC32tpRw46qZA3sOz+aM+/V9V0GDHxVTKLziveV4JhzBHDp9Q== + +estree-walker@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" + integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== + +estree-walker@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-3.0.3.tgz#67c3e549ec402a487b4fc193d1953a524752340d" + integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g== + dependencies: + "@types/estree" "^1.0.0" + +exsolve@^1.0.7, exsolve@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/exsolve/-/exsolve-1.0.8.tgz#7f5e34da61cd1116deda5136e62292c096f50613" + integrity sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA== + +fake-indexeddb@^6.2.5: + version "6.2.5" + resolved "https://registry.yarnpkg.com/fake-indexeddb/-/fake-indexeddb-6.2.5.tgz#74285b6821467d6c102af092f0a4517ad5521613" + integrity sha512-CGnyrvbhPlWYMngksqrSSUT1BAVP49dZocrHuK0SvtR0D5TMs5wP0o3j7jexDJW01KSadjBp1M/71o/KR3nD1w== + +fdir@^6.5.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.5.0.tgz#ed2ab967a331ade62f18d077dae192684d50d350" + integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg== + follow-redirects@^1.15.0: version "1.15.2" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" @@ -64,6 +443,87 @@ fsevents@2.3.2: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== +get-port-please@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/get-port-please/-/get-port-please-3.2.0.tgz#0ce3cee194c448ac640ec39dc357a500f5d7d2bb" + integrity sha512-I9QVvBw5U/hw3RmWpYKRumUeaDgxTPd401x364rLmWBJcOQ753eov1eTgzDqRG9bqFIfDc7gfzcQEWrUri3o1A== + +giget@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/giget/-/giget-2.0.0.tgz#395fc934a43f9a7a29a29d55b99f23e30c14f195" + integrity sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA== + dependencies: + citty "^0.1.6" + consola "^3.4.0" + defu "^6.1.4" + node-fetch-native "^1.6.6" + nypm "^0.6.0" + pathe "^2.0.3" + +"h3-next@npm:h3@^2.0.1-rc.7": + version "2.0.1-rc.11" + resolved "https://registry.yarnpkg.com/h3/-/h3-2.0.1-rc.11.tgz#32236425f428c2577f8c9d6043499d84280263bb" + integrity sha512-2myzjCqy32c1As9TjZW9fNZXtLqNedjFSrdFy2AjFBQQ3LzrnGoDdFDYfC0tV2e4vcyfJ2Sfo/F6NQhO2Ly/Mw== + dependencies: + rou3 "^0.7.12" + srvx "^0.10.1" + +h3@^1.15.4: + version "1.15.5" + resolved "https://registry.yarnpkg.com/h3/-/h3-1.15.5.tgz#e2f28d4a66a249973bb050eaddb06b9ab55506f8" + integrity sha512-xEyq3rSl+dhGX2Lm0+eFQIAzlDN6Fs0EcC4f7BNUmzaRX/PTzeuM+Tr2lHB8FoXggsQIeXLj8EDVgs5ywxyxmg== + dependencies: + cookie-es "^1.2.2" + crossws "^0.3.5" + defu "^6.1.4" + destr "^2.0.5" + iron-webcrypto "^1.2.1" + node-mock-http "^1.0.4" + radix3 "^1.1.2" + ufo "^1.6.3" + uncrypto "^0.1.3" + +ignore@^7.0.5: + version "7.0.5" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-7.0.5.tgz#4cb5f6cd7d4c7ab0365738c7aea888baa6d7efd9" + integrity sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg== + +iron-webcrypto@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz#aa60ff2aa10550630f4c0b11fd2442becdb35a6f" + integrity sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg== + +jiti@^2.4.2, jiti@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/jiti/-/jiti-2.6.1.tgz#178ef2fc9a1a594248c20627cd820187a4d78d92" + integrity sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ== + +klona@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.6.tgz#85bffbf819c03b2f53270412420a4555ef882e22" + integrity sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA== + +knitwork@^1.2.0, knitwork@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/knitwork/-/knitwork-1.3.0.tgz#4a0d0b0d45378cac909ee1117481392522bd08a4" + integrity sha512-4LqMNoONzR43B1W0ek0fhXMsDNW/zxa1NdFAVMY+k28pgZLovR4G3PB5MrpTxCy1QaZCqNoiaKPr5w5qZHfSNw== + +local-pkg@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-1.1.2.tgz#c03d208787126445303f8161619dc701afa4abb5" + integrity sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A== + dependencies: + mlly "^1.7.4" + pkg-types "^2.3.0" + quansync "^0.2.11" + +magic-string@^0.30.21: + version "0.30.21" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.21.tgz#56763ec09a0fa8091df27879fd94d19078c00d91" + integrity sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ== + dependencies: + "@jridgewell/sourcemap-codec" "^1.5.5" + mime-db@1.52.0: version "1.52.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" @@ -76,6 +536,92 @@ mime-types@^2.1.12: dependencies: mime-db "1.52.0" +mlly@^1.7.4, mlly@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.8.0.tgz#e074612b938af8eba1eaf43299cbc89cb72d824e" + integrity sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g== + dependencies: + acorn "^8.15.0" + pathe "^2.0.3" + pkg-types "^1.3.1" + ufo "^1.6.1" + +nanoid@^3.3.11: + version "3.3.11" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b" + integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w== + +node-fetch-native@^1.6.6, node-fetch-native@^1.6.7: + version "1.6.7" + resolved "https://registry.yarnpkg.com/node-fetch-native/-/node-fetch-native-1.6.7.tgz#9d09ca63066cc48423211ed4caf5d70075d76a71" + integrity sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q== + +node-mock-http@^1.0.3, node-mock-http@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/node-mock-http/-/node-mock-http-1.0.4.tgz#21f2ab4ce2fe4fbe8a660d7c5195a1db85e042a4" + integrity sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ== + +nypm@^0.6.0, nypm@^0.6.2: + version "0.6.4" + resolved "https://registry.yarnpkg.com/nypm/-/nypm-0.6.4.tgz#fc67e207e0c8acbc641c4ed5d56bec4372fad8a8" + integrity sha512-1TvCKjZyyklN+JJj2TS3P4uSQEInrM/HkkuSXsEzm1ApPgBffOn8gFguNnZf07r/1X6vlryfIqMUkJKQMzlZiw== + dependencies: + citty "^0.2.0" + pathe "^2.0.3" + tinyexec "^1.0.2" + +ofetch@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/ofetch/-/ofetch-1.5.1.tgz#5c43cc56e03398b273014957060344254505c5c7" + integrity sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA== + dependencies: + destr "^2.0.5" + node-fetch-native "^1.6.7" + ufo "^1.6.1" + +ohash@^2.0.11: + version "2.0.11" + resolved "https://registry.yarnpkg.com/ohash/-/ohash-2.0.11.tgz#60b11e8cff62ca9dee88d13747a5baa145f5900b" + integrity sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ== + +pathe@^2.0.1, pathe@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/pathe/-/pathe-2.0.3.tgz#3ecbec55421685b70a9da872b2cff3e1cbed1716" + integrity sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w== + +perfect-debounce@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/perfect-debounce/-/perfect-debounce-2.1.0.tgz#e7078e38f231cb191855c3136a4423aef725d261" + integrity sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g== + +picocolors@^1.0.0, picocolors@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + +picomatch@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.3.tgz#796c76136d1eead715db1e7bad785dedd695a042" + integrity sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q== + +pkg-types@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.3.1.tgz#bd7cc70881192777eef5326c19deb46e890917df" + integrity sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ== + dependencies: + confbox "^0.1.8" + mlly "^1.7.4" + pathe "^2.0.1" + +pkg-types@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-2.3.0.tgz#037f2c19bd5402966ff6810e32706558cb5b5726" + integrity sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig== + dependencies: + confbox "^0.2.2" + exsolve "^1.0.7" + pathe "^2.0.3" + playwright-core@1.48.0: version "1.48.0" resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.48.0.tgz#34d209dd4aba8fccd4a96116f1c4f7630f868722" @@ -90,7 +636,151 @@ playwright@1.48.0: optionalDependencies: fsevents "2.3.2" +postcss@^8.5.6: + version "8.5.6" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.6.tgz#2825006615a619b4f62a9e7426cc120b349a8f3c" + integrity sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg== + dependencies: + nanoid "^3.3.11" + picocolors "^1.1.1" + source-map-js "^1.2.1" + proxy-from-env@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +quansync@^0.2.11: + version "0.2.11" + resolved "https://registry.yarnpkg.com/quansync/-/quansync-0.2.11.tgz#f9c3adda2e1272e4f8cf3f1457b04cbdb4ee692a" + integrity sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA== + +radix3@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/radix3/-/radix3-1.1.2.tgz#fd27d2af3896c6bf4bcdfab6427c69c2afc69ec0" + integrity sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA== + +rc9@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/rc9/-/rc9-2.1.2.tgz#6282ff638a50caa0a91a31d76af4a0b9cbd1080d" + integrity sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg== + dependencies: + defu "^6.1.4" + destr "^2.0.3" + +readdirp@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-5.0.0.tgz#fbf1f71a727891d685bb1786f9ba74084f6e2f91" + integrity sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ== + +rou3@^0.7.12: + version "0.7.12" + resolved "https://registry.yarnpkg.com/rou3/-/rou3-0.7.12.tgz#cac17425c04abddba854a42385cabfe0b971a179" + integrity sha512-iFE4hLDuloSWcD7mjdCDhx2bKcIsYbtOTpfH5MHHLSKMOUyjqQXTeZVa289uuwEGEKFoE/BAPbhaU4B774nceg== + +scule@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/scule/-/scule-1.3.0.tgz#6efbd22fd0bb801bdcc585c89266a7d2daa8fbd3" + integrity sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g== + +semver@^7.7.3: + version "7.7.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.3.tgz#4b5f4143d007633a8dc671cd0a6ef9147b8bb946" + integrity sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q== + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +source-map-js@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" + integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== + +srvx@^0.10.1: + version "0.10.1" + resolved "https://registry.yarnpkg.com/srvx/-/srvx-0.10.1.tgz#f21625e564631835a556e13004c2b8b899c03bdf" + integrity sha512-A//xtfak4eESMWWydSRFUVvCTQbSwivnGCEf8YGPe2eHU0+Z6znfUTCPF0a7oV3sObSOcrXHlL6Bs9vVctfXdg== + +std-env@^3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.10.0.tgz#d810b27e3a073047b2b5e40034881f5ea6f9c83b" + integrity sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg== + +tinyexec@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-1.0.2.tgz#bdd2737fe2ba40bd6f918ae26642f264b99ca251" + integrity sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg== + +tinyglobby@^0.2.15: + version "0.2.15" + resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.15.tgz#e228dd1e638cea993d2fdb4fcd2d4602a79951c2" + integrity sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ== + dependencies: + fdir "^6.5.0" + picomatch "^4.0.3" + +ufo@^1.6.1, ufo@^1.6.3: + version "1.6.3" + resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.6.3.tgz#799666e4e88c122a9659805e30b9dc071c3aed4f" + integrity sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q== + +uncrypto@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/uncrypto/-/uncrypto-0.1.3.tgz#e1288d609226f2d02d8d69ee861fa20d8348ef2b" + integrity sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q== + +unctx@^2.4.1: + version "2.5.0" + resolved "https://registry.yarnpkg.com/unctx/-/unctx-2.5.0.tgz#a0c3ba03838856d336e815a71403ce1a848e4108" + integrity sha512-p+Rz9x0R7X+CYDkT+Xg8/GhpcShTlU8n+cf9OtOEf7zEQsNcCZO1dPKNRDqvUTaq+P32PMMkxWHwfrxkqfqAYg== + dependencies: + acorn "^8.15.0" + estree-walker "^3.0.3" + magic-string "^0.30.21" + unplugin "^2.3.11" + +unplugin@^2.3.11: + version "2.3.11" + resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-2.3.11.tgz#411e020dd2ba90e2fbe1e7bd63a5a399e6ee3b54" + integrity sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww== + dependencies: + "@jridgewell/remapping" "^2.3.5" + acorn "^8.15.0" + picomatch "^4.0.3" + webpack-virtual-modules "^0.6.2" + +untyped@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/untyped/-/untyped-2.0.0.tgz#86bc205a4ec4b0137282285866b8278557aeee97" + integrity sha512-nwNCjxJTjNuLCgFr42fEak5OcLuB3ecca+9ksPFNvtfYSLpjf+iJqSIaSnIile6ZPbKYxI5k2AfXqeopGudK/g== + dependencies: + citty "^0.1.6" + defu "^6.1.4" + jiti "^2.4.2" + knitwork "^1.2.0" + scule "^1.3.0" + +vitest-environment-nuxt@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/vitest-environment-nuxt/-/vitest-environment-nuxt-1.0.1.tgz#e3308454af1947dbc315ce2a805a9d4fe4d1c49a" + integrity sha512-eBCwtIQriXW5/M49FjqNKfnlJYlG2LWMSNFsRVKomc8CaMqmhQPBS5LZ9DlgYL9T8xIVsiA6RZn2lk7vxov3Ow== + dependencies: + "@nuxt/test-utils" ">=3.13.1" + +vue@^3.5.25, vue@^3.5.26: + version "3.5.27" + resolved "https://registry.yarnpkg.com/vue/-/vue-3.5.27.tgz#e55fd941b614459ab2228489bc19d1692e05876c" + integrity sha512-aJ/UtoEyFySPBGarREmN4z6qNKpbEguYHMmXSiOGk69czc+zhs0NF6tEFrY8TZKAl8N/LYAkd4JHVd5E/AsSmw== + dependencies: + "@vue/compiler-dom" "3.5.27" + "@vue/compiler-sfc" "3.5.27" + "@vue/runtime-dom" "3.5.27" + "@vue/server-renderer" "3.5.27" + "@vue/shared" "3.5.27" + +webpack-virtual-modules@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz#057faa9065c8acf48f24cb57ac0e77739ab9a7e8" + integrity sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ== diff --git a/enterprise/web-frontend/.prettierignore b/enterprise/web-frontend/.prettierignore new file mode 100644 index 0000000000..299b0c5168 --- /dev/null +++ b/enterprise/web-frontend/.prettierignore @@ -0,0 +1 @@ +**/locales/*.json diff --git a/enterprise/web-frontend/.prettierrc b/enterprise/web-frontend/.prettierrc index b2095be81e..36301bc5cf 100644 --- a/enterprise/web-frontend/.prettierrc +++ b/enterprise/web-frontend/.prettierrc @@ -1,4 +1,5 @@ { "semi": false, - "singleQuote": true + "singleQuote": true, + "trailingComma": "es5" } diff --git a/enterprise/web-frontend/babel.config.js b/enterprise/web-frontend/babel.config.js deleted file mode 100644 index c132d18527..0000000000 --- a/enterprise/web-frontend/babel.config.js +++ /dev/null @@ -1,16 +0,0 @@ -module.exports = { - env: { - test: { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - }, - ], - ], - }, - }, -} diff --git a/enterprise/web-frontend/eslint.config.mjs b/enterprise/web-frontend/eslint.config.mjs new file mode 100644 index 0000000000..685dc0377e --- /dev/null +++ b/enterprise/web-frontend/eslint.config.mjs @@ -0,0 +1,8 @@ +// @ts-check +import withNuxt from '../../web-frontend/.nuxt/eslint.config.mjs' +import common from '../../web-frontend/eslint.config.common.mjs' + +export default withNuxt([ + ...common, + { rules: { 'vue/order-in-components': 'off' } }, +]) diff --git a/enterprise/web-frontend/jest.config.js b/enterprise/web-frontend/jest.config.js index cecfbb0c01..5aa6f814eb 100644 --- a/enterprise/web-frontend/jest.config.js +++ b/enterprise/web-frontend/jest.config.js @@ -37,7 +37,6 @@ module.exports = { '^.+\\.(gif|ico|jpg|jpeg|png|svg)$': '../../web-frontend/test/helpers/stubFileTransformer.js', }, - transformIgnorePatterns: ['/node_modules/(?!@nuxtjs/composition-api)'], setupFilesAfterEnv: [ path.join(__dirname, '/../../enterprise/web-frontend/jest.setup.js'), ], diff --git a/enterprise/web-frontend/jest.setup.js b/enterprise/web-frontend/jest.setup.js deleted file mode 100644 index 0cecd8c8d4..0000000000 --- a/enterprise/web-frontend/jest.setup.js +++ /dev/null @@ -1,24 +0,0 @@ -import Vue from 'vue' -import { config } from '@vue/test-utils' - -Vue.config.silent = true - -// Mock Nuxt components -config.stubs.nuxt = { template: '
' } -config.stubs['nuxt-link'] = { template: '' } -config.stubs['no-ssr'] = { template: '' } - -function fail(message = '') { - let failMessage = '' - failMessage += '\n' - failMessage += 'FAIL FUNCTION TRIGGERED\n' - failMessage += 'The fail function has been triggered' - failMessage += message ? ' with message:' : '' - - expect(message).toEqual(failMessage) -} -global.fail = fail - -process.on('unhandledRejection', (err) => { - fail(err) -}) diff --git a/enterprise/web-frontend/jsconfig.json b/enterprise/web-frontend/jsconfig.json index b35e1601ae..6fadf7fc09 100644 --- a/enterprise/web-frontend/jsconfig.json +++ b/enterprise/web-frontend/jsconfig.json @@ -2,13 +2,8 @@ "compilerOptions": { "baseUrl": ".", "paths": { - "@baserow_enterprise/*": [ - "./modules/baserow_enterprise/*" - ] + "@baserow_enterprise/*": ["./modules/baserow_enterprise/*"] } }, - "exclude": [ - "node_modules", - ".nuxt" - ] + "exclude": ["node_modules", ".nuxt"] } diff --git a/enterprise/web-frontend/modules/baserow_enterprise/adminTypes.js b/enterprise/web-frontend/modules/baserow_enterprise/adminTypes.js index 572874b196..1c9c996baa 100644 --- a/enterprise/web-frontend/modules/baserow_enterprise/adminTypes.js +++ b/enterprise/web-frontend/modules/baserow_enterprise/adminTypes.js @@ -22,8 +22,8 @@ export class AuthProvidersType extends EnterpriseAdminType { } getName() { - const { i18n } = this.app - return i18n.t('adminType.Authentication') + const { $i18n } = this.app + return $i18n.t('adminType.Authentication') } getRouteName() { @@ -56,8 +56,8 @@ export class AuditLogType extends EnterpriseAdminType { } getName() { - const { i18n } = this.app - return i18n.t('adminType.AuditLog') + const { $i18n } = this.app + return $i18n.t('adminType.AuditLog') } getRouteName() { diff --git a/enterprise/web-frontend/modules/baserow_enterprise/assets/scss/components/assistant.scss b/enterprise/web-frontend/modules/baserow_enterprise/assets/scss/components/assistant.scss index 317430ca3a..5a73880ef1 100644 --- a/enterprise/web-frontend/modules/baserow_enterprise/assets/scss/components/assistant.scss +++ b/enterprise/web-frontend/modules/baserow_enterprise/assets/scss/components/assistant.scss @@ -427,8 +427,6 @@ border: 1px solid $palette-neutral-200; border-radius: 12px; padding: 12px 16px; - word-wrap: break-word; - word-break: break-word; overflow-wrap: break-word; max-width: 100%; min-width: 0; @@ -609,8 +607,6 @@ } } - word-wrap: break-word; - word-break: break-word; overflow-wrap: break-word; white-space: wrap; diff --git a/enterprise/web-frontend/modules/baserow_enterprise/assets/scss/components/audit_log.scss b/enterprise/web-frontend/modules/baserow_enterprise/assets/scss/components/audit_log.scss index 2071c73514..5fa4644d4a 100755 --- a/enterprise/web-frontend/modules/baserow_enterprise/assets/scss/components/audit_log.scss +++ b/enterprise/web-frontend/modules/baserow_enterprise/assets/scss/components/audit_log.scss @@ -1,7 +1,9 @@ .audit-log__filters { display: grid; - grid-template-columns: 3fr 3fr 3fr minmax(10%, 120px) minmax(10%, 120px) max-content; - grid-gap: 12px; + grid-template-columns: + 3fr 3fr 3fr minmax(10%, 120px) minmax(10%, 120px) + max-content; + gap: 12px; padding: 16px 42px 25px; z-index: 4; max-width: 1200px; @@ -15,7 +17,9 @@ .audit-log__filters--workspace { max-width: 1024px; - grid-template-columns: 3fr 3fr minmax(15%, 120px) minmax(15%, 120px) max-content; + grid-template-columns: + 3fr 3fr minmax(15%, 120px) minmax(15%, 120px) + max-content; } .audit-log__exported-list { diff --git a/enterprise/web-frontend/modules/baserow_enterprise/assets/scss/components/date_dependency.scss b/enterprise/web-frontend/modules/baserow_enterprise/assets/scss/components/date_dependency.scss index 446d333ee4..1e43667458 100644 --- a/enterprise/web-frontend/modules/baserow_enterprise/assets/scss/components/date_dependency.scss +++ b/enterprise/web-frontend/modules/baserow_enterprise/assets/scss/components/date_dependency.scss @@ -9,7 +9,7 @@ &:hover { visibility: visible; - r: 6px + r: 6px; } &--handle { @@ -24,30 +24,26 @@ } } - .date-dependency__drop-zone { pointer-events: none; display: none; - fill:transparent; + fill: transparent; - &--droppable { - display: block; - visibility: visible; - pointer-events: all; - } + &--droppable { + display: block; + visibility: visible; + pointer-events: all; + } } - .date-dependency__container { padding-top: 16px; } - .date-dependency__help-icon { padding-right: 2px; } - .date-dependency__path { fill: none; stroke-width: 1px; @@ -70,7 +66,6 @@ &:hover { stroke-width: 3px; } - } .date-dependency__text { @@ -119,5 +114,4 @@ &--draggable { pointer-events: all; } - } diff --git a/enterprise/web-frontend/modules/baserow_enterprise/authProviderTypes.js b/enterprise/web-frontend/modules/baserow_enterprise/authProviderTypes.js index 5160e2d31a..20abd5709a 100644 --- a/enterprise/web-frontend/modules/baserow_enterprise/authProviderTypes.js +++ b/enterprise/web-frontend/modules/baserow_enterprise/authProviderTypes.js @@ -8,14 +8,14 @@ import GitLabSettingsForm from '@baserow_enterprise/components/admin/forms/GitLa import OpenIdConnectSettingsForm from '@baserow_enterprise/components/admin/forms/OpenIdConnectSettingsForm.vue' import LoginButton from '@baserow_enterprise/components/admin/login/LoginButton.vue' -import PasswordAuthIcon from '@baserow/modules/core/assets/images/providers/Key.svg' -import SAMLIcon from '@baserow_enterprise/assets/images/providers/LockKey.svg' -import GoogleIcon from '@baserow_enterprise/assets/images/providers/Google.svg' -import FacebookIcon from '@baserow_enterprise/assets/images/providers/Facebook.svg' -import GitHubIcon from '@baserow_enterprise/assets/images/providers/GitHub.svg' -import GitLabIcon from '@baserow_enterprise/assets/images/providers/GitLab.svg' -import OpenIdIcon from '@baserow_enterprise/assets/images/providers/OpenID.svg' -import VerifiedProviderIcon from '@baserow_enterprise/assets/images/providers/VerifiedProviderIcon.svg' +import PasswordAuthIcon from '@baserow/modules/core/assets/images/providers/Key.svg?url' +import SAMLIcon from '@baserow_enterprise/assets/images/providers/LockKey.svg?url' +import GoogleIcon from '@baserow_enterprise/assets/images/providers/Google.svg?url' +import FacebookIcon from '@baserow_enterprise/assets/images/providers/Facebook.svg?url' +import GitHubIcon from '@baserow_enterprise/assets/images/providers/GitHub.svg?url' +import GitLabIcon from '@baserow_enterprise/assets/images/providers/GitLab.svg?url' +import OpenIdIcon from '@baserow_enterprise/assets/images/providers/OpenID.svg?url' +import VerifiedProviderIcon from '@baserow_enterprise/assets/images/providers/VerifiedProviderIcon.svg?url' export class PasswordAuthProviderType extends AuthProviderType { static getType() { @@ -27,7 +27,7 @@ export class PasswordAuthProviderType extends AuthProviderType { } getName() { - return this.app.i18n.t('authProviderTypes.password') + return this.app.$i18n.t('authProviderTypes.password') } getProviderName(provider) { @@ -72,16 +72,16 @@ export const SamlAuthProviderTypeMixin = (Base) => } getName() { - return this.app.i18n.t('authProviderTypes.saml') + return this.app.$i18n.t('authProviderTypes.saml') } getProviderName(provider) { if (provider.domain) { - return this.app.i18n.t('authProviderTypes.ssoSamlProviderName', { + return this.app.$i18n.t('authProviderTypes.ssoSamlProviderName', { domain: provider.domain, }) } else { - return this.app.i18n.t( + return this.app.$i18n.t( 'authProviderTypes.ssoSamlProviderNameUnconfigured' ) } @@ -100,13 +100,15 @@ export const SamlAuthProviderTypeMixin = (Base) => } getRelayStateUrl() { - return this.app.store.getters['authProviderAdmin/getType'](this.getType()) - .relayStateUrl + return this.app.$store.getters['authProviderAdmin/getType']( + this.getType() + ).relayStateUrl } getAcsUrl() { - return this.app.store.getters['authProviderAdmin/getType'](this.getType()) - .acsUrl + return this.app.$store.getters['authProviderAdmin/getType']( + this.getType() + ).acsUrl } populateLoginOptions(authProviderOption) { @@ -160,12 +162,15 @@ export const OAuth2AuthProviderTypeMixin = (Base) => } getCallbackUrl(authProvider) { + const runtimeConfig = useRuntimeConfig() + + runtimeConfig.public.publicWebFrontendUrl if (!authProvider.id) { const nextProviderId = - this.app.store.getters['authProviderAdmin/getNextProviderId'] - return `${this.app.$config.PUBLIC_BACKEND_URL}/api/sso/oauth2/callback/${nextProviderId}/` + this.app.$store.getters['authProviderAdmin/getNextProviderId'] + return `${runtimeConfig.public.publicWebFrontendUrl}/api/sso/oauth2/callback/${nextProviderId}/` } - return `${this.app.$config.PUBLIC_BACKEND_URL}/api/sso/oauth2/callback/${authProvider.id}/` + return `${runtimeConfig.public.publicWebFrontendUrl}/api/sso/oauth2/callback/${authProvider.id}/` } populateLoginOptions(authProviderOption) { @@ -287,10 +292,10 @@ export class GitLabAuthProviderType extends AuthProviderType { getCallbackUrl(authProvider) { if (!authProvider.id) { const nextProviderId = - this.app.store.getters['authProviderAdmin/getNextProviderId'] - return `${this.app.$config.PUBLIC_BACKEND_URL}/api/sso/oauth2/callback/${nextProviderId}/` + this.app.$store.getters['authProviderAdmin/getNextProviderId'] + return `${this.app.$config.public.publicBackendUrl}/api/sso/oauth2/callback/${nextProviderId}/` } - return `${this.app.$config.PUBLIC_BACKEND_URL}/api/sso/oauth2/callback/${authProvider.id}/` + return `${this.app.$config.public.publicBackendUrl}/api/sso/oauth2/callback/${authProvider.id}/` } getOrder() { @@ -324,10 +329,10 @@ export class OpenIdConnectAuthProviderType extends OAuth2AuthProviderTypeMixin( getCallbackUrl(authProvider) { if (!authProvider.id) { const nextProviderId = - this.app.store.getters['authProviderAdmin/getNextProviderId'] - return `${this.app.$config.PUBLIC_BACKEND_URL}/api/sso/oauth2/callback/${nextProviderId}/` + this.app.$store.getters['authProviderAdmin/getNextProviderId'] + return `${this.app.$config.public.publicBackendUrl}/api/sso/oauth2/callback/${nextProviderId}/` } - return `${this.app.$config.PUBLIC_BACKEND_URL}/api/sso/oauth2/callback/${authProvider.id}/` + return `${this.app.$config.public.publicBackendUrl}/api/sso/oauth2/callback/${authProvider.id}/` } handleServerError(vueComponentInstance, error) { diff --git a/enterprise/web-frontend/modules/baserow_enterprise/builder/components/elements/FileInputElement.vue b/enterprise/web-frontend/modules/baserow_enterprise/builder/components/elements/FileInputElement.vue index 716a575ff7..11899e2c14 100644 --- a/enterprise/web-frontend/modules/baserow_enterprise/builder/components/elements/FileInputElement.vue +++ b/enterprise/web-frontend/modules/baserow_enterprise/builder/components/elements/FileInputElement.vue @@ -119,7 +119,7 @@ export default { resolvedDefaultValue() {}, resolvedDefaultValueWithMetadata: { handler(value) { - if (process.client) { + if (import.meta.client) { this.updatedMetadata() } this.inputValue = value diff --git a/enterprise/web-frontend/modules/baserow_enterprise/builder/components/elements/FileInputElementForm.vue b/enterprise/web-frontend/modules/baserow_enterprise/builder/components/elements/FileInputElementForm.vue index 0e7fa8b515..f3814258a2 100644 --- a/enterprise/web-frontend/modules/baserow_enterprise/builder/components/elements/FileInputElementForm.vue +++ b/enterprise/web-frontend/modules/baserow_enterprise/builder/components/elements/FileInputElementForm.vue @@ -32,7 +32,9 @@
diff --git a/enterprise/web-frontend/modules/baserow_enterprise/builder/elementTypes.js b/enterprise/web-frontend/modules/baserow_enterprise/builder/elementTypes.js index 9d183d5d45..d1c7517d2e 100644 --- a/enterprise/web-frontend/modules/baserow_enterprise/builder/elementTypes.js +++ b/enterprise/web-frontend/modules/baserow_enterprise/builder/elementTypes.js @@ -16,8 +16,8 @@ import { BuilderFileInputElementPaidFeature } from '@baserow_enterprise/paidFeat import { AfterLoginEvent } from '@baserow/modules/builder/eventTypes' -import elementImageAuthForm from '@baserow_enterprise/assets/images/builder/element-auth_form.svg' -import elementImageFileInput from '@baserow_enterprise/assets/images/builder/element-file_input.svg' +import elementImageAuthForm from '@baserow_enterprise/assets/images/builder/element-auth_form.svg?url' +import elementImageFileInput from '@baserow_enterprise/assets/images/builder/element-file_input.svg?url' import EnterpriseFeaturesObject from '@baserow_enterprise/features' @@ -27,11 +27,11 @@ export class AuthFormElementType extends ElementType { } get name() { - return this.app.i18n.t('elementType.authForm') + return this.app.$i18n.t('elementType.authForm') } get description() { - return this.app.i18n.t('elementType.authFormDescription') + return this.app.$i18n.t('elementType.authFormDescription') } get iconClass() { @@ -60,7 +60,7 @@ export class AuthFormElementType extends ElementType { if (!element.user_source_id) { return this.$t('elementType.errorUserSourceMissing') } - const userSource = this.app.store.getters['userSource/getUserSourceById']( + const userSource = this.app.$store.getters['userSource/getUserSourceById']( builder, element.user_source_id ) @@ -73,7 +73,7 @@ export class AuthFormElementType extends ElementType { const hasLoginOptions = Object.keys(loginOptions).length !== 0 if (!hasLoginOptions) { - return this.app.i18n.t('elementType.errorUserSourceHasNoLoginOption') + return this.app.$i18n.t('elementType.errorUserSourceHasNoLoginOption') } return super.getErrorMessage(element, applicationContext) @@ -113,11 +113,11 @@ export class FileInputElementType extends FormElementType { } get name() { - return this.app.i18n.t('elementType.fileInput') + return this.app.$i18n.t('elementType.fileInput') } get description() { - return this.app.i18n.t('elementType.fileInputDescription') + return this.app.$i18n.t('elementType.fileInputDescription') } get iconClass() { @@ -231,7 +231,7 @@ export class FileInputElementType extends FormElementType { workspace.id ) ) { - return this.app.i18n.t('enterprise.deactivated') + return this.app.$i18n.t('enterprise.deactivated') } return super.isDeactivatedReason({ workspace }) } diff --git a/enterprise/web-frontend/modules/baserow_enterprise/builderPageDecoratorTypes.js b/enterprise/web-frontend/modules/baserow_enterprise/builderPageDecoratorTypes.js index 662fddaaf8..4f3c0e1965 100644 --- a/enterprise/web-frontend/modules/baserow_enterprise/builderPageDecoratorTypes.js +++ b/enterprise/web-frontend/modules/baserow_enterprise/builderPageDecoratorTypes.js @@ -1,5 +1,6 @@ import { Registerable } from '@baserow/modules/core/registry' import EnterpriseFeaturesObject from '@baserow_enterprise/features' +import MadeWithBaserowBuilderDecorator from '@baserow_enterprise/components/builder/MadeWithBaserowBuilderDecorator' /** * The BuilderPageDecorator type serves as a wrapper component that can be @@ -48,8 +49,7 @@ export class MadeWithBaserowBuilderPageDecoratorType extends BuilderPageDecorato } get component() { - return require('@baserow_enterprise/components/builder/MadeWithBaserowBuilderDecorator') - .default + return MadeWithBaserowBuilderDecorator } isDecorationAllowed(workspace) { diff --git a/enterprise/web-frontend/modules/baserow_enterprise/builderSettingTypes.js b/enterprise/web-frontend/modules/baserow_enterprise/builderSettingTypes.js index b0db8e594a..2935788d4a 100644 --- a/enterprise/web-frontend/modules/baserow_enterprise/builderSettingTypes.js +++ b/enterprise/web-frontend/modules/baserow_enterprise/builderSettingTypes.js @@ -1,8 +1,12 @@ +import { markRaw } from 'vue' import { BuilderSettingType } from '@baserow/modules/builder/builderSettingTypes' -import CustomCodeSetting from '@baserow_enterprise/components/builder/CustomCodeSetting' +import CustomCodeSettingComponent from '@baserow_enterprise/components/builder/CustomCodeSetting' import EnterpriseFeatures from '@baserow_enterprise/features' import { BuilderCustomCodePaidFeature } from '@baserow_enterprise/paidFeatures' -import PaidFeaturesModal from '@baserow_premium/components/PaidFeaturesModal' +import PaidFeaturesModalComponent from '@baserow_premium/components/PaidFeaturesModal' + +const CustomCodeSetting = markRaw(CustomCodeSettingComponent) +const PaidFeaturesModal = markRaw(PaidFeaturesModalComponent) export class CustomCodeBuilderSettingType extends BuilderSettingType { static getType() { @@ -10,7 +14,7 @@ export class CustomCodeBuilderSettingType extends BuilderSettingType { } get name() { - return this.app.i18n.t('builderSettingTypes.customCode') + return this.app.$i18n.t('builderSettingTypes.customCode') } get icon() { @@ -32,7 +36,7 @@ export class CustomCodeBuilderSettingType extends BuilderSettingType { workspace.id ) ) { - return this.app.i18n.t('enterprise.deactivated') + return this.app.$i18n.t('enterprise.deactivated') } return super.isDeactivatedReason({ workspace }) } diff --git a/enterprise/web-frontend/modules/baserow_enterprise/components/AuditLogSidebarWorkspace.vue b/enterprise/web-frontend/modules/baserow_enterprise/components/AuditLogSidebarWorkspace.vue index b76f871f27..d4047a0b16 100644 --- a/enterprise/web-frontend/modules/baserow_enterprise/components/AuditLogSidebarWorkspace.vue +++ b/enterprise/web-frontend/modules/baserow_enterprise/components/AuditLogSidebarWorkspace.vue @@ -2,6 +2,7 @@ -
- by Baserow -
- +
by Baserow
+
@@ -16,13 +10,13 @@ export default { name: 'EnterpriseLogo', methods: { - showLabel(parent) { - const settings = parent.$store.getters['settings/get'] + showLabel() { + const settings = this.$store.getters['settings/get'] return !!settings.co_branding_logo }, getLogoUrl(parent) { - const baserowLogo = require('@baserow/modules/core/static/img/logo.svg') - const settings = parent.$store.getters['settings/get'] + const baserowLogo = require('@baserow/modules/core/static/img/logo.svg?url') + const settings = this.$store.getters['settings/get'] if (settings.co_branding_logo) { return settings.co_branding_logo.url } diff --git a/enterprise/web-frontend/modules/baserow_enterprise/components/InvitesRoleField.vue b/enterprise/web-frontend/modules/baserow_enterprise/components/InvitesRoleField.vue index acd99ded84..6575dbf547 100644 --- a/enterprise/web-frontend/modules/baserow_enterprise/components/InvitesRoleField.vue +++ b/enterprise/web-frontend/modules/baserow_enterprise/components/InvitesRoleField.vue @@ -28,6 +28,7 @@ import { notifyIf } from '@baserow/modules/core/utils/error' export default { name: 'InvitationsRoleField', + emits: ['row-update'], components: { EditRoleContext }, props: { row: { diff --git a/enterprise/web-frontend/modules/baserow_enterprise/components/MembersRoleField.vue b/enterprise/web-frontend/modules/baserow_enterprise/components/MembersRoleField.vue index b98abadf69..9753d37ec8 100644 --- a/enterprise/web-frontend/modules/baserow_enterprise/components/MembersRoleField.vue +++ b/enterprise/web-frontend/modules/baserow_enterprise/components/MembersRoleField.vue @@ -50,6 +50,7 @@ import { notifyIf } from '@baserow/modules/core/utils/error' export default { name: 'MembersRoleField', + emits: ['refresh', 'row-update'], components: { EditRoleContext }, props: { row: { diff --git a/enterprise/web-frontend/modules/baserow_enterprise/components/admin/AuthProviderItem.vue b/enterprise/web-frontend/modules/baserow_enterprise/components/admin/AuthProviderItem.vue index 02d4959ea8..a31a7075aa 100644 --- a/enterprise/web-frontend/modules/baserow_enterprise/components/admin/AuthProviderItem.vue +++ b/enterprise/web-frontend/modules/baserow_enterprise/components/admin/AuthProviderItem.vue @@ -32,7 +32,7 @@ v-if="canBeDeleted(authProvider.type)" ref="deleteModal" :auth-provider="authProvider" - @deleteConfirmed="onDeleteConfirmed" + @delete-confirmed="onDeleteConfirmed" @cancel="$refs.deleteModal.hide()" /> diff --git a/enterprise/web-frontend/modules/baserow_enterprise/components/admin/contexts/CreateAuthProviderContext.vue b/enterprise/web-frontend/modules/baserow_enterprise/components/admin/contexts/CreateAuthProviderContext.vue index b07a81ce85..36f61a1971 100644 --- a/enterprise/web-frontend/modules/baserow_enterprise/components/admin/contexts/CreateAuthProviderContext.vue +++ b/enterprise/web-frontend/modules/baserow_enterprise/components/admin/contexts/CreateAuthProviderContext.vue @@ -24,6 +24,7 @@ import AuthProviderIcon from '@baserow_enterprise/components/AuthProviderIcon.vu export default { name: 'CreateAuthProviderContext', + emits: ['create'], components: { AuthProviderIcon }, mixins: [context], props: { diff --git a/enterprise/web-frontend/modules/baserow_enterprise/components/admin/contexts/EditAuthProviderMenuContext.vue b/enterprise/web-frontend/modules/baserow_enterprise/components/admin/contexts/EditAuthProviderMenuContext.vue index abb3f20cb2..4339057c5c 100644 --- a/enterprise/web-frontend/modules/baserow_enterprise/components/admin/contexts/EditAuthProviderMenuContext.vue +++ b/enterprise/web-frontend/modules/baserow_enterprise/components/admin/contexts/EditAuthProviderMenuContext.vue @@ -33,6 +33,7 @@ import authProviderItemMixin from '@baserow_enterprise/mixins/authProviderItemMi export default { name: 'EditAuthProviderMenuContext', + emits: ['delete', 'edit'], components: {}, mixins: [context, authProviderItemMixin], props: { diff --git a/enterprise/web-frontend/modules/baserow_enterprise/components/admin/modals/AuditLogExportModal.vue b/enterprise/web-frontend/modules/baserow_enterprise/components/admin/modals/AuditLogExportModal.vue index 75aa8cae7e..90f3eb44a8 100644 --- a/enterprise/web-frontend/modules/baserow_enterprise/components/admin/modals/AuditLogExportModal.vue +++ b/enterprise/web-frontend/modules/baserow_enterprise/components/admin/modals/AuditLogExportModal.vue @@ -1,5 +1,5 @@