From cf5015b85d5cc82ec8b168c9cd50dd6610fa64f6 Mon Sep 17 00:00:00 2001 From: Vibhav Bobade Date: Tue, 25 Oct 2022 03:20:16 +0530 Subject: [PATCH 01/41] chore: previews for every PR release using Uffizzi add github workflows to take the prebuilt docker image for the PR to create a preview deployment on Uffizzi. Comment will be posted to every PR on a successful deployment. --- .github/uffizzi/docker-compose.uffizzi.yml | 24 ++++++ .github/workflows/release-pr.yml | 71 +++++++++++++++-- .github/workflows/uffizzi-preview.yml | 88 ++++++++++++++++++++++ 3 files changed, 176 insertions(+), 7 deletions(-) create mode 100644 .github/uffizzi/docker-compose.uffizzi.yml create mode 100644 .github/workflows/uffizzi-preview.yml diff --git a/.github/uffizzi/docker-compose.uffizzi.yml b/.github/uffizzi/docker-compose.uffizzi.yml new file mode 100644 index 0000000000..eb33d7d3e9 --- /dev/null +++ b/.github/uffizzi/docker-compose.uffizzi.yml @@ -0,0 +1,24 @@ +version: '3' + +x-uffizzi: + ingress: + service: nocodb + port: 8080 + +services: + root_db: + image: postgres + restart: always + environment: + POSTGRES_PASSWORD: password + POSTGRES_USER: postgres + POSTGRES_DB: root_db + nocodb: + image: "${NOCODB_IMAGE}" + ports: + - "8080:8080" + restart: always + environment: + NC_DB: "pg://localhost:5432?u=postgres&p=password&d=root_db" + NC_ADMIN_EMAIL: admin@nocodb.com + NC_ADMIN_PASSWORD: password \ No newline at end of file diff --git a/.github/workflows/release-pr.yml b/.github/workflows/release-pr.yml index d104e79089..80c4780c31 100644 --- a/.github/workflows/release-pr.yml +++ b/.github/workflows/release-pr.yml @@ -6,7 +6,8 @@ on: # reopened: closed pull request is reopened # synchronize: commit(s) pushed to the pull request # ready_for_review: non PR release - types: [opened, reopened, synchronize, ready_for_review] + # closed: pull request is closed, used to delete uffizzi previews + types: [opened, reopened, synchronize, ready_for_review, closed] paths: - "packages/nocodb-sdk/**" - "packages/nc-gui/**" @@ -20,7 +21,7 @@ concurrency: jobs: # enrich tag for pr release set-tag: - if: ${{ github.event.pull_request.head.repo.full_name == github.repository && github.actor != 'dependabot[bot]' && github.event.pull_request.draft == false && github.base_ref == 'develop' }} + if: ${{ github.event.pull_request.head.repo.full_name == github.repository && github.actor != 'dependabot[bot]' && github.event.pull_request.draft == false && github.base_ref == 'develop' && github.event.action != 'closed' }} runs-on: 'ubuntu-latest' steps: - name: set-tag @@ -47,7 +48,7 @@ jobs: # Build, install, publish frontend and backend to npm release-npm: - if: ${{ github.event.pull_request.head.repo.full_name == github.repository && github.actor != 'dependabot[bot]' && github.event.pull_request.draft == false && github.base_ref == 'develop' }} + if: ${{ github.event.pull_request.head.repo.full_name == github.repository && github.actor != 'dependabot[bot]' && github.event.pull_request.draft == false && github.base_ref == 'develop' && github.event.action != 'closed' }} needs: [set-tag] uses: ./.github/workflows/release-npm.yml with: @@ -58,7 +59,7 @@ jobs: # Build docker image and push to docker hub release-docker: - if: ${{ github.event.pull_request.head.repo.full_name == github.repository && github.actor != 'dependabot[bot]' && github.event.pull_request.draft == false && github.base_ref == 'develop' }} + if: ${{ github.event.pull_request.head.repo.full_name == github.repository && github.actor != 'dependabot[bot]' && github.event.pull_request.draft == false && github.base_ref == 'develop' && github.event.action != 'closed' }} needs: [release-npm, set-tag] uses: ./.github/workflows/release-docker.yml with: @@ -72,7 +73,7 @@ jobs: # Build executables and publish to GitHub release-executables: - if: ${{ github.event.pull_request.head.repo.full_name == github.repository && github.actor != 'dependabot[bot]' && github.event.pull_request.draft == false && github.base_ref == 'develop' }} + if: ${{ github.event.pull_request.head.repo.full_name == github.repository && github.actor != 'dependabot[bot]' && github.event.pull_request.draft == false && github.base_ref == 'develop' && github.event.action != 'closed' }} needs: [set-tag, release-npm] uses: ./.github/workflows/release-timely-executables.yml with: @@ -82,7 +83,7 @@ jobs: # Add a comment for PR docker build leave-comment: - if: ${{ github.event.pull_request.head.repo.full_name == github.repository && github.actor != 'dependabot[bot]' && github.event.pull_request.draft == false && github.base_ref == 'develop' }} + if: ${{ github.event.pull_request.head.repo.full_name == github.repository && github.actor != 'dependabot[bot]' && github.event.pull_request.draft == false && github.base_ref == 'develop' && github.event.action != 'closed' }} runs-on: 'ubuntu-latest' needs: [release-docker, set-tag] steps: @@ -94,9 +95,45 @@ jobs: docker run -d -p 8888:8080 nocodb/nocodb-timely:${{ needs.set-tag.outputs.current_version }}-${{ needs.set-tag.outputs.target_tag }} ``` + # Create a preview for the pull request + preview-pull-request: + name: "Trigger Uffizzi Preview" + if: ${{ github.event.pull_request.head.repo.full_name == github.repository && github.actor != 'dependabot[bot]' && github.event.pull_request.draft == false && github.base_ref == 'develop' && github.event.action != 'closed' }} + runs-on: 'ubuntu-latest' + needs: [release-docker, set-tag] + outputs: + compose-file-cache-key: ${{ env.COMPOSE_FILE_HASH }} + steps: + - name: Checkout git repo + uses: actions/checkout@v3 + - name: Render Compose File + run: | + NOCODB_IMAGE=nocodb/nocodb-timely:${{ needs.set-tag.outputs.current_version }}-${{ needs.set-tag.outputs.target_tag }} + export NOCODB_IMAGE + # Render simple template from environment variables. + envsubst < .github/uffizzi/docker-compose.uffizzi.yml > docker-compose.rendered.yml + cat docker-compose.rendered.yml + - name: Upload Rendered Compose File as Artifact + uses: actions/upload-artifact@v3 + with: + name: preview-spec + path: docker-compose.rendered.yml + retention-days: 2 + - name: Serialize PR Event to File + run: | + cat << EOF > event.json + ${{ toJSON(github.event) }} + EOF + - name: Upload PR Event as Artifact + uses: actions/upload-artifact@v3 + with: + name: preview-spec + path: event.json + retention-days: 2 + # Add a comment for PR executable build leave-executable-comment: - if: ${{ github.event.pull_request.head.repo.full_name == github.repository && github.actor != 'dependabot[bot]' && github.event.pull_request.draft == false && github.base_ref == 'develop' }} + if: ${{ github.event.pull_request.head.repo.full_name == github.repository && github.actor != 'dependabot[bot]' && github.event.pull_request.draft == false && github.base_ref == 'develop' && github.event.action != 'closed' }} runs-on: 'ubuntu-latest' needs: [release-executables, set-tag] steps: @@ -129,3 +166,23 @@ jobs: ``` For executables visit [here](https://github.com/nocodb/nocodb-timely/releases/tag/${{ needs.set-tag.outputs.current_version }}-${{ needs.set-tag.outputs.target_tag }}) + + # delete the uffizzi preview created off of this PR + delete-uffizzi-preview: + name: Call for Preview Deletion + runs-on: ubuntu-latest + if: ${{ github.event.pull_request.head.repo.full_name == github.repository && github.actor != 'dependabot[bot]' && github.event.pull_request.draft == false && github.base_ref == 'develop' && github.event.action == 'closed' }} + steps: + # If this PR is closing, we will not render a compose file nor pass it to the next workflow. + - name: Serialize PR Event to File + run: | + cat << EOF > event.json + ${{ toJSON(github.event) }} + + EOF + - name: Upload PR Event as Artifact + uses: actions/upload-artifact@v3 + with: + name: preview-spec + path: event.json + retention-days: 2 \ No newline at end of file diff --git a/.github/workflows/uffizzi-preview.yml b/.github/workflows/uffizzi-preview.yml new file mode 100644 index 0000000000..470acaa0e0 --- /dev/null +++ b/.github/workflows/uffizzi-preview.yml @@ -0,0 +1,88 @@ +name: Deploy Uffizzi Preview + +on: + workflow_run: + workflows: + - "PR Release" + types: + - completed + +jobs: + cache-compose-file: + name: Cache Compose File + runs-on: ubuntu-latest + outputs: + compose-file-cache-key: ${{ env.COMPOSE_FILE_HASH }} + pr-number: ${{ env.PR_NUMBER }} + steps: + - name: 'Download artifacts' + # Fetch output (zip archive) from the workflow run that triggered this workflow. + uses: actions/github-script@v6 + with: + script: | + let allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({ + owner: context.repo.owner, + repo: context.repo.repo, + run_id: context.payload.workflow_run.id, + }); + let matchArtifact = allArtifacts.data.artifacts.filter((artifact) => { + return artifact.name == "preview-spec" + })[0]; + let download = await github.rest.actions.downloadArtifact({ + owner: context.repo.owner, + repo: context.repo.repo, + artifact_id: matchArtifact.id, + archive_format: 'zip', + }); + let fs = require('fs'); + fs.writeFileSync(`${process.env.GITHUB_WORKSPACE}/preview-spec.zip`, Buffer.from(download.data)); + + - name: 'Unzip artifact' + run: unzip preview-spec.zip + + - name: Read Event into ENV + run: | + echo 'EVENT_JSON<> $GITHUB_ENV + cat event.json >> $GITHUB_ENV + echo 'EOF' >> $GITHUB_ENV + + - name: Hash Rendered Compose File + id: hash + # If the previous workflow was triggered by a PR close event, we will not have a compose file artifact. + if: ${{ fromJSON(env.EVENT_JSON).action != 'closed' }} + run: echo "COMPOSE_FILE_HASH=$(md5sum docker-compose.rendered.yml | awk '{ print $1 }')" >> $GITHUB_ENV + + - name: Cache Rendered Compose File + if: ${{ fromJSON(env.EVENT_JSON).action != 'closed' }} + uses: actions/cache@v3 + with: + path: docker-compose.rendered.yml + key: ${{ env.COMPOSE_FILE_HASH }} + + - name: Read PR Number From Event Object + id: pr + run: echo "PR_NUMBER=${{ fromJSON(env.EVENT_JSON).number }}" >> $GITHUB_ENV + + - name: DEBUG - Print Job Outputs + if: ${{ runner.debug }} + run: | + echo "PR number: ${{ env.PR_NUMBER }}" + echo "Compose file hash: ${{ env.COMPOSE_FILE_HASH }}" + cat event.json + + deploy-uffizzi-preview: + name: Use Remote Workflow to Preview on Uffizzi + needs: + - cache-compose-file + uses: UffizziCloud/preview-action/.github/workflows/reusable.yaml@v2 + with: + # If this workflow was triggered by a PR close event, cache-key will be an empty string + # and this reusable workflow will delete the preview deployment. + compose-file-cache-key: ${{ needs.cache-compose-file.outputs.compose-file-cache-key }} + compose-file-cache-path: docker-compose.rendered.yml + server: https://app.uffizzi.com + pr-number: ${{ needs.cache-compose-file.outputs.pr-number }} + permissions: + contents: read + pull-requests: write + id-token: write \ No newline at end of file From 0662e1d32f6d5c042f11dbab87908332aa7a749f Mon Sep 17 00:00:00 2001 From: Muhammed Mustafa Date: Thu, 1 Dec 2022 14:13:20 +0530 Subject: [PATCH 02/41] feat(playwright): Added tests for single select, multi select, single line text, long text and attachments --- .../pages/Dashboard/common/Cell/index.ts | 17 +- tests/playwright/tests/gridOperations.spec.ts | 117 ----------- .../tests/keyboardShortcuts.spec.ts | 192 ++++++++++++++++++ 3 files changed, 208 insertions(+), 118 deletions(-) delete mode 100644 tests/playwright/tests/gridOperations.spec.ts diff --git a/tests/playwright/pages/Dashboard/common/Cell/index.ts b/tests/playwright/pages/Dashboard/common/Cell/index.ts index 22052a2ca6..4e1ddb538e 100644 --- a/tests/playwright/pages/Dashboard/common/Cell/index.ts +++ b/tests/playwright/pages/Dashboard/common/Cell/index.ts @@ -51,7 +51,20 @@ export class CellPageObject extends BasePage { index, columnHeader, }); - await this.get({ index, columnHeader }).locator('input').fill(text); + const isInputBox = async () => (await this.get({ index, columnHeader }).locator('input').count()) > 0; + + for (let i = 0; i < 10; i++) { + if (await isInputBox()) { + break; + } + await this.rootPage.waitForTimeout(200); + } + + if (await isInputBox()) { + await this.get({ index, columnHeader }).locator('input').fill(text); + } else { + await this.get({ index, columnHeader }).locator('textarea').fill(text); + } } async inCellExpand({ index, columnHeader }: { index: number; columnHeader: string }) { @@ -192,7 +205,9 @@ export class CellPageObject extends BasePage { ...clickOptions: Parameters ) { await this.get({ index, columnHeader }).click(...clickOptions); + await (await this.get({ index, columnHeader }).elementHandle()).waitForElementState('stable'); await this.get({ index, columnHeader }).press((await this.isMacOs()) ? 'Meta+C' : 'Control+C'); + await this.verifyToast({ message: 'Copied to clipboard' }); } } diff --git a/tests/playwright/tests/gridOperations.spec.ts b/tests/playwright/tests/gridOperations.spec.ts deleted file mode 100644 index d05b9fcc54..0000000000 --- a/tests/playwright/tests/gridOperations.spec.ts +++ /dev/null @@ -1,117 +0,0 @@ -import { expect, test } from '@playwright/test'; -import { DashboardPage } from '../pages/Dashboard'; -import setup from '../setup'; - -test.describe('Grid operations', () => { - let dashboard: DashboardPage; - let context: any; - - test.beforeEach(async ({ page }) => { - context = await setup({ page }); - dashboard = new DashboardPage(page, context.project); - }); - - test('Clipboard support', async () => { - // close 'Team & Auth' tab - await dashboard.closeTab({ title: 'Team & Auth' }); - - await dashboard.treeView.createTable({ title: 'Sheet1' }); - - await dashboard.grid.column.create({ - title: 'Number', - type: 'Number', - }); - await dashboard.grid.column.create({ - title: 'Checkbox', - type: 'Checkbox', - }); - await dashboard.grid.column.create({ - title: 'Date', - type: 'Date', - }); - await dashboard.grid.column.create({ - title: 'Attachment', - type: 'Attachment', - }); - - await dashboard.grid.addNewRow({ - index: 0, - }); - await dashboard.grid.cell.click({ - index: 0, - columnHeader: 'Number', - }); - await dashboard.grid.cell.fillText({ - index: 0, - columnHeader: 'Number', - text: '123', - }); - await dashboard.grid.cell.click({ - index: 0, - columnHeader: 'Checkbox', - }); - - const today = new Date().toISOString().slice(0, 10); - await dashboard.grid.cell.date.open({ - index: 0, - columnHeader: 'Date', - }); - await dashboard.grid.cell.date.selectDate({ - date: today, - }); - await dashboard.grid.cell.date.close(); - - await dashboard.grid.cell.attachment.addFile({ - index: 0, - columnHeader: 'Attachment', - filePath: `${process.cwd()}/fixtures/sampleFiles/1.json`, - }); - - await dashboard.grid.cell.copyToClipboard({ - index: 0, - columnHeader: 'Title', - }); - expect(await dashboard.grid.cell.getClipboardText()).toBe('Row 0'); - - await dashboard.grid.cell.copyToClipboard({ - index: 0, - columnHeader: 'Number', - }); - expect(await dashboard.grid.cell.getClipboardText()).toBe('123'); - - await dashboard.grid.cell.copyToClipboard( - { - index: 0, - columnHeader: 'Checkbox', - }, - { position: { x: 1, y: 1 } } - ); - await new Promise(resolve => setTimeout(resolve, 5000)); - expect(await dashboard.grid.cell.getClipboardText()).toBe('true'); - - await dashboard.grid.cell.click({ - index: 0, - columnHeader: 'Checkbox', - }); - await dashboard.grid.cell.copyToClipboard( - { - index: 0, - columnHeader: 'Checkbox', - }, - { position: { x: 1, y: 1 } } - ); - expect(await dashboard.grid.cell.getClipboardText()).toBe('false'); - - await dashboard.grid.cell.copyToClipboard({ - index: 0, - columnHeader: 'Date', - }); - expect(await dashboard.grid.cell.getClipboardText()).toBe(today); - - await dashboard.grid.cell.copyToClipboard({ - index: 0, - columnHeader: 'Attachment', - }); - // expect(await dashboard.grid.cell.getClipboardText()).toBe('1.json'); - }); -}); diff --git a/tests/playwright/tests/keyboardShortcuts.spec.ts b/tests/playwright/tests/keyboardShortcuts.spec.ts index 168bbe948c..fe21e61855 100644 --- a/tests/playwright/tests/keyboardShortcuts.spec.ts +++ b/tests/playwright/tests/keyboardShortcuts.spec.ts @@ -101,4 +101,196 @@ test.describe('Verify shortcuts', () => { await page.waitForTimeout(2000); await grid.cell.verify({ index: 1, columnHeader: 'Country', value: 'NewAlgeria' }); }); + + test('Clipboard support for cells', async () => { + // close 'Team & Auth' tab + await dashboard.closeTab({ title: 'Team & Auth' }); + + await dashboard.treeView.createTable({ title: 'Sheet1' }); + + await dashboard.grid.column.create({ + title: 'SingleLineText', + type: 'SingleLineText', + }); + await dashboard.grid.column.create({ + title: 'LongText', + type: 'LongText', + }); + await dashboard.grid.column.create({ + title: 'Number', + type: 'Number', + }); + await dashboard.grid.column.create({ + title: 'SingleSelect', + type: 'SingleSelect', + }); + await dashboard.grid.column.create({ + title: 'MultiSelect', + type: 'MultiSelect', + }); + await dashboard.grid.column.create({ + title: 'Checkbox', + type: 'Checkbox', + }); + await dashboard.grid.column.create({ + title: 'Date', + type: 'Date', + }); + await dashboard.grid.column.create({ + title: 'Attachment', + type: 'Attachment', + }); + + // ######################################## + + await dashboard.grid.addNewRow({ + index: 0, + }); + await dashboard.grid.cell.click({ + index: 0, + columnHeader: 'SingleLineText', + }); + await dashboard.grid.cell.fillText({ + index: 0, + columnHeader: 'SingleLineText', + text: 'SingleLineText', + }); + + await dashboard.grid.cell.click({ + index: 0, + columnHeader: 'LongText', + }); + await dashboard.grid.cell.fillText({ + index: 0, + columnHeader: 'LongText', + text: 'LongText', + }); + + await grid.cell.selectOption.select({ index: 0, columnHeader: 'SingleSelect', option: 'Option 1' }); + await grid.cell.selectOption.select({ + index: 0, + columnHeader: 'MultiSelect', + option: 'Option 2', + multiSelect: true, + }); + await grid.cell.selectOption.select({ + index: 0, + columnHeader: 'MultiSelect', + option: 'Option 1', + multiSelect: true, + }); + await dashboard.grid.cell.click({ + index: 0, + columnHeader: 'Number', + }); + await dashboard.grid.cell.fillText({ + index: 0, + columnHeader: 'Number', + text: '123', + }); + await dashboard.grid.cell.click({ + index: 0, + columnHeader: 'Checkbox', + }); + + const today = new Date().toISOString().slice(0, 10); + await dashboard.grid.cell.date.open({ + index: 0, + columnHeader: 'Date', + }); + await dashboard.grid.cell.date.selectDate({ + date: today, + }); + await dashboard.grid.cell.date.close(); + + await dashboard.grid.cell.attachment.addFile({ + index: 0, + columnHeader: 'Attachment', + filePath: `${process.cwd()}/fixtures/sampleFiles/1.json`, + }); + + // ######################################## + + await dashboard.grid.cell.copyToClipboard({ + index: 0, + columnHeader: 'SingleLineText', + }); + expect(await dashboard.grid.cell.getClipboardText()).toBe('SingleLineText'); + + await dashboard.grid.cell.copyToClipboard({ + index: 0, + columnHeader: 'LongText', + }); + expect(await dashboard.grid.cell.getClipboardText()).toBe('LongText'); + + await dashboard.grid.cell.copyToClipboard( + { + index: 0, + columnHeader: 'SingleSelect', + }, + { position: { x: 1, y: 1 } } + ); + expect(await dashboard.grid.cell.getClipboardText()).toBe('Option 1'); + + await dashboard.grid.cell.copyToClipboard( + { + index: 0, + columnHeader: 'MultiSelect', + }, + { position: { x: 1, y: 1 } } + ); + expect(await dashboard.grid.cell.getClipboardText()).toContain('Option 1'); + expect(await dashboard.grid.cell.getClipboardText()).toContain('Option 2'); + + await dashboard.grid.cell.copyToClipboard({ + index: 0, + columnHeader: 'Title', + }); + expect(await dashboard.grid.cell.getClipboardText()).toBe('Row 0'); + + await dashboard.grid.cell.copyToClipboard({ + index: 0, + columnHeader: 'Number', + }); + expect(await dashboard.grid.cell.getClipboardText()).toBe('123'); + + await dashboard.grid.cell.copyToClipboard( + { + index: 0, + columnHeader: 'Checkbox', + }, + { position: { x: 1, y: 1 } } + ); + await new Promise(resolve => setTimeout(resolve, 5000)); + expect(await dashboard.grid.cell.getClipboardText()).toBe('true'); + + await dashboard.grid.cell.click({ + index: 0, + columnHeader: 'Checkbox', + }); + await dashboard.grid.cell.copyToClipboard( + { + index: 0, + columnHeader: 'Checkbox', + }, + { position: { x: 1, y: 1 } } + ); + expect(await dashboard.grid.cell.getClipboardText()).toBe('false'); + + await dashboard.grid.cell.copyToClipboard({ + index: 0, + columnHeader: 'Date', + }); + expect(await dashboard.grid.cell.getClipboardText()).toBe(today); + + await dashboard.grid.cell.copyToClipboard( + { + index: 0, + columnHeader: 'Attachment', + }, + { position: { x: 1, y: 1 } } + ); + const attachmentsInfo = JSON.parse(await dashboard.grid.cell.getClipboardText()); + expect(attachmentsInfo[0]['title']).toBe('1.json'); + }); }); From 66b6d650415f1ac04f9c87850cb0a1c39af2d517 Mon Sep 17 00:00:00 2001 From: Muhammed Mustafa Date: Thu, 1 Dec 2022 14:24:49 +0530 Subject: [PATCH 03/41] feat(playwright): Added tests for Phone number --- .../tests/keyboardShortcuts.spec.ts | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/tests/playwright/tests/keyboardShortcuts.spec.ts b/tests/playwright/tests/keyboardShortcuts.spec.ts index fe21e61855..54a1ee136b 100644 --- a/tests/playwright/tests/keyboardShortcuts.spec.ts +++ b/tests/playwright/tests/keyboardShortcuts.spec.ts @@ -120,6 +120,10 @@ test.describe('Verify shortcuts', () => { title: 'Number', type: 'Number', }); + await dashboard.grid.column.create({ + title: 'PhoneNumber', + type: 'PhoneNumber', + }); await dashboard.grid.column.create({ title: 'SingleSelect', type: 'SingleSelect', @@ -188,6 +192,15 @@ test.describe('Verify shortcuts', () => { columnHeader: 'Number', text: '123', }); + await dashboard.grid.cell.click({ + index: 0, + columnHeader: 'PhoneNumber', + }); + await dashboard.grid.cell.fillText({ + index: 0, + columnHeader: 'PhoneNumber', + text: '987654321', + }); await dashboard.grid.cell.click({ index: 0, columnHeader: 'Checkbox', @@ -254,6 +267,12 @@ test.describe('Verify shortcuts', () => { }); expect(await dashboard.grid.cell.getClipboardText()).toBe('123'); + await dashboard.grid.cell.copyToClipboard({ + index: 0, + columnHeader: 'PhoneNumber', + }); + expect(await dashboard.grid.cell.getClipboardText()).toBe('987654321'); + await dashboard.grid.cell.copyToClipboard( { index: 0, From 868b109ae5f7be869266e9f368ecd1c01f4dcdb5 Mon Sep 17 00:00:00 2001 From: Muhammed Mustafa Date: Thu, 1 Dec 2022 14:38:37 +0530 Subject: [PATCH 04/41] feat(playwright): Added tests for Email, URL, Decimal and Percent --- .../tests/keyboardShortcuts.spec.ts | 83 ++++++++++++++++++- 1 file changed, 82 insertions(+), 1 deletion(-) diff --git a/tests/playwright/tests/keyboardShortcuts.spec.ts b/tests/playwright/tests/keyboardShortcuts.spec.ts index 54a1ee136b..d9af966294 100644 --- a/tests/playwright/tests/keyboardShortcuts.spec.ts +++ b/tests/playwright/tests/keyboardShortcuts.spec.ts @@ -124,6 +124,22 @@ test.describe('Verify shortcuts', () => { title: 'PhoneNumber', type: 'PhoneNumber', }); + await dashboard.grid.column.create({ + title: 'Email', + type: 'Email', + }); + await dashboard.grid.column.create({ + title: 'URL', + type: 'URL', + }); + await dashboard.grid.column.create({ + title: 'Decimal', + type: 'Decimal', + }); + await dashboard.grid.column.create({ + title: 'Percent', + type: 'Percent', + }); await dashboard.grid.column.create({ title: 'SingleSelect', type: 'SingleSelect', @@ -201,6 +217,47 @@ test.describe('Verify shortcuts', () => { columnHeader: 'PhoneNumber', text: '987654321', }); + + await dashboard.grid.cell.click({ + index: 0, + columnHeader: 'Email', + }); + await dashboard.grid.cell.fillText({ + index: 0, + columnHeader: 'Email', + text: 'test@example.com', + }); + + await dashboard.grid.cell.click({ + index: 0, + columnHeader: 'URL', + }); + await dashboard.grid.cell.fillText({ + index: 0, + columnHeader: 'URL', + text: 'nocodb.com', + }); + + await dashboard.grid.cell.click({ + index: 0, + columnHeader: 'Decimal', + }); + await dashboard.grid.cell.fillText({ + index: 0, + columnHeader: 'Decimal', + text: '1.1', + }); + + await dashboard.grid.cell.click({ + index: 0, + columnHeader: 'Percent', + }); + await dashboard.grid.cell.fillText({ + index: 0, + columnHeader: 'Percent', + text: '80', + }); + await dashboard.grid.cell.click({ index: 0, columnHeader: 'Checkbox', @@ -222,7 +279,7 @@ test.describe('Verify shortcuts', () => { filePath: `${process.cwd()}/fixtures/sampleFiles/1.json`, }); - // ######################################## + // // ######################################## await dashboard.grid.cell.copyToClipboard({ index: 0, @@ -273,6 +330,30 @@ test.describe('Verify shortcuts', () => { }); expect(await dashboard.grid.cell.getClipboardText()).toBe('987654321'); + await dashboard.grid.cell.copyToClipboard({ + index: 0, + columnHeader: 'Email', + }); + expect(await dashboard.grid.cell.getClipboardText()).toBe('test@example.com'); + + await dashboard.grid.cell.copyToClipboard({ + index: 0, + columnHeader: 'URL', + }); + expect(await dashboard.grid.cell.getClipboardText()).toBe('nocodb.com'); + + await dashboard.grid.cell.copyToClipboard({ + index: 0, + columnHeader: 'Decimal', + }); + expect(await dashboard.grid.cell.getClipboardText()).toBe('1.1'); + + await dashboard.grid.cell.copyToClipboard({ + index: 0, + columnHeader: 'Percent', + }); + expect(await dashboard.grid.cell.getClipboardText()).toBe('80'); + await dashboard.grid.cell.copyToClipboard( { index: 0, From 295d0deaa8bf85051125ea8d7763a40b02d7fe88 Mon Sep 17 00:00:00 2001 From: Muhammed Mustafa Date: Thu, 1 Dec 2022 18:34:43 +0530 Subject: [PATCH 05/41] feat(playwright): Added tests for Currency, Duration, Rating --- .../pages/Dashboard/Grid/Column/index.ts | 16 ++--- .../pages/Dashboard/common/Cell/RatingCell.ts | 8 +++ .../tests/keyboardShortcuts.spec.ts | 60 ++++++++++++++++++- 3 files changed, 76 insertions(+), 8 deletions(-) diff --git a/tests/playwright/pages/Dashboard/Grid/Column/index.ts b/tests/playwright/pages/Dashboard/Grid/Column/index.ts index 48107c7800..370ee2894d 100644 --- a/tests/playwright/pages/Dashboard/Grid/Column/index.ts +++ b/tests/playwright/pages/Dashboard/Grid/Column/index.ts @@ -34,7 +34,7 @@ export class ColumnPageObject extends BasePage { childColumn = '', relationType = '', rollupType = '', - format = '', + format, insertAfterColumnTitle, insertBeforeColumnTitle, }: { @@ -81,12 +81,14 @@ export class ColumnPageObject extends BasePage { }); break; case 'Duration': - await this.get().locator('.ant-select-single').nth(1).click(); - await this.rootPage - .locator(`.ant-select-item`, { - hasText: format, - }) - .click(); + if (format) { + await this.get().locator('.ant-select-single').nth(1).click(); + await this.rootPage + .locator(`.ant-select-item`, { + hasText: format, + }) + .click(); + } break; case 'Formula': await this.get().locator('.nc-formula-input').fill(formula); diff --git a/tests/playwright/pages/Dashboard/common/Cell/RatingCell.ts b/tests/playwright/pages/Dashboard/common/Cell/RatingCell.ts index e5ec9a7bc9..da8b44d9f7 100644 --- a/tests/playwright/pages/Dashboard/common/Cell/RatingCell.ts +++ b/tests/playwright/pages/Dashboard/common/Cell/RatingCell.ts @@ -14,6 +14,14 @@ export class RatingCellPageObject extends BasePage { return this.cell.get({ index, columnHeader }); } + async select({ index, columnHeader, rating }: { index?: number; columnHeader: string; rating: number }) { + await this.waitForResponse({ + uiAction: this.get({ index, columnHeader }).locator('.ant-rate-star > div').nth(rating).click(), + httpMethodsToMatch: ['POST', 'PATCH'], + requestUrlPathToMatch: 'api/v1/db/data/noco/', + }); + } + async verify({ index, columnHeader, rating }: { index?: number; columnHeader: string; rating: number }) { await expect(await this.get({ index, columnHeader }).locator(`div[role="radio"][aria-checked="true"]`)).toHaveCount( rating diff --git a/tests/playwright/tests/keyboardShortcuts.spec.ts b/tests/playwright/tests/keyboardShortcuts.spec.ts index d9af966294..d9de119030 100644 --- a/tests/playwright/tests/keyboardShortcuts.spec.ts +++ b/tests/playwright/tests/keyboardShortcuts.spec.ts @@ -140,6 +140,18 @@ test.describe('Verify shortcuts', () => { title: 'Percent', type: 'Percent', }); + await dashboard.grid.column.create({ + title: 'Currency', + type: 'Currency', + }); + await dashboard.grid.column.create({ + title: 'Duration', + type: 'Duration', + }); + await dashboard.grid.column.create({ + title: 'Rating', + type: 'Rating', + }); await dashboard.grid.column.create({ title: 'SingleSelect', type: 'SingleSelect', @@ -258,6 +270,31 @@ test.describe('Verify shortcuts', () => { text: '80', }); + await dashboard.grid.cell.click({ + index: 0, + columnHeader: 'Currency', + }); + await dashboard.grid.cell.fillText({ + index: 0, + columnHeader: 'Currency', + text: '20', + }); + + await dashboard.grid.cell.click({ + index: 0, + columnHeader: 'Duration', + }); + await dashboard.grid.cell.fillText({ + index: 0, + columnHeader: 'Duration', + text: '0008', + }); + + await dashboard.grid.cell.rating.select({ + index: 0, + columnHeader: 'Rating', + rating: 3, + }); await dashboard.grid.cell.click({ index: 0, columnHeader: 'Checkbox', @@ -279,7 +316,7 @@ test.describe('Verify shortcuts', () => { filePath: `${process.cwd()}/fixtures/sampleFiles/1.json`, }); - // // ######################################## + // ######################################## await dashboard.grid.cell.copyToClipboard({ index: 0, @@ -354,6 +391,27 @@ test.describe('Verify shortcuts', () => { }); expect(await dashboard.grid.cell.getClipboardText()).toBe('80'); + await dashboard.grid.cell.copyToClipboard({ + index: 0, + columnHeader: 'Currency', + }); + expect(await dashboard.grid.cell.getClipboardText()).toBe('20'); + + await dashboard.grid.cell.copyToClipboard({ + index: 0, + columnHeader: 'Duration', + }); + expect(await dashboard.grid.cell.getClipboardText()).toBe('480'); + + await dashboard.grid.cell.copyToClipboard( + { + index: 0, + columnHeader: 'Rating', + }, + { position: { x: 1, y: 1 } } + ); + expect(await dashboard.grid.cell.getClipboardText()).toBe('4'); + await dashboard.grid.cell.copyToClipboard( { index: 0, From a5f05eea3fc695be421dcdf36d13ee319541de4c Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Fri, 2 Dec 2022 18:53:21 +0800 Subject: [PATCH 06/41] fix(nocodb): provide header in XLSX.utils.json_to_sheet --- packages/nocodb/src/lib/meta/api/dataApis/helpers.ts | 5 ++++- .../src/lib/meta/api/publicApis/publicDataExportApis.ts | 4 +++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/nocodb/src/lib/meta/api/dataApis/helpers.ts b/packages/nocodb/src/lib/meta/api/dataApis/helpers.ts index b68a10f1d3..5bb19fa1b4 100644 --- a/packages/nocodb/src/lib/meta/api/dataApis/helpers.ts +++ b/packages/nocodb/src/lib/meta/api/dataApis/helpers.ts @@ -58,7 +58,10 @@ export async function extractXlsxData(view: View, req: Request) { }); const { offset, dbRows, elapsed } = await getDbRows(baseModel, view, req); - const data = XLSX.utils.json_to_sheet(dbRows); + + const fields = req.query.fields as string[]; + + const data = XLSX.utils.json_to_sheet(dbRows, { header: fields }); return { offset, dbRows, elapsed, data }; } diff --git a/packages/nocodb/src/lib/meta/api/publicApis/publicDataExportApis.ts b/packages/nocodb/src/lib/meta/api/publicApis/publicDataExportApis.ts index 6d56f2f393..530504c9b7 100644 --- a/packages/nocodb/src/lib/meta/api/publicApis/publicDataExportApis.ts +++ b/packages/nocodb/src/lib/meta/api/publicApis/publicDataExportApis.ts @@ -32,7 +32,9 @@ async function exportExcel(req: Request, res: Response) { const { offset, dbRows, elapsed } = await getDbRows(model, view, req); - const data = XLSX.utils.json_to_sheet(dbRows); + const fields = req.query.fields as string[]; + + const data = XLSX.utils.json_to_sheet(dbRows, { header: fields }); const wb = XLSX.utils.book_new(); XLSX.utils.book_append_sheet(wb, data, view.title); const buf = XLSX.write(wb, { type: 'base64', bookType: 'xlsx' }); From e0c67ae656dcb9d3aad7f12b16b0224186b6d0f2 Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Sat, 3 Dec 2022 17:39:14 +0800 Subject: [PATCH 07/41] feat(playwrights): add download xlsx test --- .../Dashboard/common/Toolbar/ViewMenu.ts | 40 +++++++++++++++++++ tests/playwright/tests/viewMenu.spec.ts | 20 ++++++++++ 2 files changed, 60 insertions(+) diff --git a/tests/playwright/pages/Dashboard/common/Toolbar/ViewMenu.ts b/tests/playwright/pages/Dashboard/common/Toolbar/ViewMenu.ts index ca999fb118..7b534a1c17 100644 --- a/tests/playwright/pages/Dashboard/common/Toolbar/ViewMenu.ts +++ b/tests/playwright/pages/Dashboard/common/Toolbar/ViewMenu.ts @@ -4,6 +4,7 @@ import { GridPage } from '../../Grid'; import { ToolbarPage } from './index'; // @ts-ignore import fs from 'fs'; +import XLSX from 'xlsx'; export class ToolbarViewMenuPage extends BasePage { readonly toolbar: ToolbarPage; @@ -46,6 +47,33 @@ export class ToolbarViewMenuPage extends BasePage { await expect(file).toEqual(expectedData); } + async verifyDownloadAsXLSX({ + downloadLocator, + expectedDataFile, + }: { + downloadLocator: Locator; + expectedDataFile: string; + }) { + const [download] = await Promise.all([ + // Start waiting for the download + this.rootPage.waitForEvent('download'), + // Perform the action that initiates download + downloadLocator.click(), + ]); + + // Save downloaded file somewhere + await download.saveAs('./output/at.xlsx'); + + // convert xlsx to csv + const wb = XLSX.readFile('./output/at.xlsx'); + XLSX.writeFile(wb, './output/at.txt', { bookType: 'csv' }); + + // verify downloaded content against expected content + const expectedData = fs.readFileSync(expectedDataFile, 'utf8'); + const file = fs.readFileSync('./output/at.txt', 'utf8'); + await expect(file).toEqual(expectedData); + } + // menu items // Collaborative View // Download @@ -68,6 +96,13 @@ export class ToolbarViewMenuPage extends BasePage { .last(), expectedDataFile: verificationInfo?.verificationFile ?? './fixtures/expectedBaseDownloadData.txt', }); + } else if (subMenu === 'Download as XLSX') { + await this.verifyDownloadAsXLSX({ + downloadLocator: await this.rootPage + .locator(`.ant-dropdown-menu-title-content:has-text("${subMenu}")`) + .last(), + expectedDataFile: verificationInfo?.verificationFile ?? './fixtures/expectedBaseDownloadData.txt', + }); } else { await this.rootPage.locator(`.ant-dropdown-menu-title-content:has-text("${subMenu}")`).last().click(); } @@ -78,6 +113,11 @@ export class ToolbarViewMenuPage extends BasePage { message: 'Successfully exported all table data', }); break; + case 'Download as XLSX': + await this.verifyToast({ + message: 'Successfully exported all table data', + }); + break; case 'Locked View': await this.verifyToast({ message: 'Successfully Switched to locked view', diff --git a/tests/playwright/tests/viewMenu.spec.ts b/tests/playwright/tests/viewMenu.spec.ts index 51037e3b6b..94a2b67b51 100644 --- a/tests/playwright/tests/viewMenu.spec.ts +++ b/tests/playwright/tests/viewMenu.spec.ts @@ -56,4 +56,24 @@ test.describe('Grid view locked', () => { }, }); }); + + test.only('Download XLSX', async () => { + // close 'Team & Auth' tab + await dashboard.closeTab({ title: 'Team & Auth' }); + await dashboard.treeView.openTable({ title: 'Country' }); + + await dashboard.grid.toolbar.clickFields(); + // Hide 'LastUpdate' column + await dashboard.grid.toolbar.fields.click({ + title: 'LastUpdate', + }); + + await dashboard.grid.toolbar.viewsMenu.click({ + menu: 'Download', + subMenu: 'Download as XLSX', + verificationInfo: { + verificationFile: isPg(context) ? './fixtures/expectedBaseDownloadDataPg.txt' : null, + }, + }); + }); }); From f6e12f86fafc52a6908dbc7a24a44814b3b2521e Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Sat, 3 Dec 2022 18:16:13 +0800 Subject: [PATCH 08/41] feat(playwright): clean up export tests --- .../fixtures/expectedBaseDownloadData.txt | 110 ------------------ .../fixtures/expectedBaseDownloadDataPg.txt | 110 ------------------ tests/playwright/fixtures/expectedData.txt | 4 - .../fixtures/expectedDataSqlite.txt | 19 --- .../Dashboard/common/Toolbar/ViewMenu.ts | 12 +- .../pages/Dashboard/common/Toolbar/index.ts | 2 +- tests/playwright/tests/viewGridShare.spec.ts | 2 +- tests/playwright/tests/viewMenu.spec.ts | 6 +- 8 files changed, 11 insertions(+), 254 deletions(-) delete mode 100644 tests/playwright/fixtures/expectedBaseDownloadData.txt delete mode 100644 tests/playwright/fixtures/expectedBaseDownloadDataPg.txt delete mode 100644 tests/playwright/fixtures/expectedData.txt delete mode 100644 tests/playwright/fixtures/expectedDataSqlite.txt diff --git a/tests/playwright/fixtures/expectedBaseDownloadData.txt b/tests/playwright/fixtures/expectedBaseDownloadData.txt deleted file mode 100644 index ffce972614..0000000000 --- a/tests/playwright/fixtures/expectedBaseDownloadData.txt +++ /dev/null @@ -1,110 +0,0 @@ -Country,City List -Afghanistan,Kabul -Algeria,"Batna, Bchar, Skikda" -American Samoa,Tafuna -Angola,"Benguela, Namibe" -Anguilla,South Hill -Argentina,"Almirante Brown, Avellaneda, Baha Blanca, Crdoba, Escobar, Ezeiza, La Plata, Merlo, Quilmes, San Miguel de Tucumn, Santa F, Tandil, Vicente Lpez" -Armenia,Yerevan -Australia,Woodridge -Austria,"Graz, Linz, Salzburg" -Azerbaijan,"Baku, Sumqayit" -Bahrain,al-Manama -Bangladesh,"Dhaka, Jamalpur, Tangail" -Belarus,"Mogiljov, Molodetno" -Bolivia,"El Alto, Sucre" -Brazil,"Alvorada, Angra dos Reis, Anpolis, Aparecida de Goinia, Araatuba, Bag, Belm, Blumenau, Boa Vista, Braslia, Goinia, Guaruj, guas Lindas de Gois, Ibirit, Juazeiro do Norte, Juiz de Fora, Luzinia, Maring, Po, Poos de Caldas, Rio Claro, Santa Brbara dOeste, Santo Andr, So Bernardo do Campo, So Leopoldo" -Brunei,Bandar Seri Begawan -Bulgaria,"Ruse, Stara Zagora" -Cambodia,"Battambang, Phnom Penh" -Cameroon,"Bamenda, Yaound" -Canada,"Gatineau, Halifax, Lethbridge, London, Oshawa, Richmond Hill, Vancouver" -Chad,NDjamna -Chile,"Antofagasta, Coquimbo, Rancagua" -China,"Baicheng, Baiyin, Binzhou, Changzhou, Datong, Daxian, Dongying, Emeishan, Enshi, Ezhou, Fuyu, Fuzhou, Haining, Hami, Hohhot, Huaian, Jinchang, Jining, Jinzhou, Junan, Korla, Laiwu, Laohekou, Lengshuijiang, Leshan" -Colombia,"Buenaventura, Dos Quebradas, Florencia, Pereira, Sincelejo, Sogamoso" -"Congo, The Democratic Republic of the","Lubumbashi, Mwene-Ditu" -Czech Republic,Olomouc -Dominican Republic,"La Romana, San Felipe de Puerto Plata, Santiago de los Caballeros" -Ecuador,"Loja, Portoviejo, Robamba" -Egypt,"Bilbays, Idfu, Mit Ghamr, Qalyub, Sawhaj, Shubra al-Khayma" -Estonia,Tartu -Ethiopia,Addis Abeba -Faroe Islands,Trshavn -Finland,Oulu -France,"Brest, Le Mans, Toulon, Toulouse" -French Guiana,Cayenne -French Polynesia,"Faaa, Papeete" -Gambia,Banjul -Germany,"Duisburg, Erlangen, Halle/Saale, Mannheim, Saarbrcken, Siegen, Witten" -Greece,"Athenai, Patras" -Greenland,Nuuk -Holy See (Vatican City State),Citt del Vaticano -Hong Kong,Kowloon and New Kowloon -Hungary,Szkesfehrvr -India,"Adoni, Ahmadnagar, Allappuzha (Alleppey), Ambattur, Amroha, Balurghat, Berhampore (Baharampur), Bhavnagar, Bhilwara, Bhimavaram, Bhopal, Bhusawal, Bijapur, Chandrapur, Chapra, Dhule (Dhulia), Etawah, Firozabad, Gandhinagar, Gulbarga, Haldia, Halisahar, Hoshiarpur, Hubli-Dharwad, Jaipur" -Indonesia,"Cianjur, Ciomas, Ciparay, Gorontalo, Jakarta, Lhokseumawe, Madiun, Pangkal Pinang, Pemalang, Pontianak, Probolinggo, Purwakarta, Surakarta, Tegal" -Iran,"Arak, Esfahan, Kermanshah, Najafabad, Qomsheh, Shahr-e Kord, Sirjan, Tabriz" -Iraq,Mosul -Israel,"Ashdod, Ashqelon, Bat Yam, Tel Aviv-Jaffa" -Italy,"Alessandria, Bergamo, Brescia, Brindisi, Livorno, Syrakusa, Udine" -Japan,"Akishima, Fukuyama, Higashiosaka, Hino, Hiroshima, Isesaki, Iwaki, Iwakuni, Iwatsuki, Izumisano, Kakamigahara, Kamakura, Kanazawa, Koriyama, Kurashiki, Kuwana, Matsue, Miyakonojo, Nagareyama, Okayama, Okinawa, Omiya, Onomichi, Otsu, Sagamihara" -Kazakstan,"Pavlodar, Zhezqazghan" -Kenya,"Kisumu, Nyeri" -Kuwait,Jalib al-Shuyukh -Latvia,"Daugavpils, Liepaja" -Liechtenstein,Vaduz -Lithuania,Vilnius -Madagascar,Mahajanga -Malawi,Lilongwe -Malaysia,"Ipoh, Kuching, Sungai Petani" -Mexico,"Acua, Allende, Atlixco, Carmen, Celaya, Coacalco de Berriozbal, Coatzacoalcos, Cuauhtmoc, Cuautla, Cuernavaca, El Fuerte, Guadalajara, Hidalgo, Huejutla de Reyes, Huixquilucan, Jos Azueta, Jurez, La Paz, Matamoros, Mexicali, Monclova, Nezahualcyotl, Pachuca de Soto, Salamanca, San Felipe del Progreso" -Moldova,Chisinau -Morocco,"Beni-Mellal, Nador, Sal" -Mozambique,"Beira, Naala-Porto, Tete" -Myanmar,"Monywa, Myingyan" -Nauru,Yangor -Nepal,Birgunj -Netherlands,"Amersfoort, Apeldoorn, Ede, Emmen, s-Hertogenbosch" -New Zealand,Hamilton -Nigeria,"Benin City, Deba Habe, Effon-Alaiye, Ife, Ikerre, Ilorin, Kaduna, Ogbomosho, Ondo, Owo, Oyo, Sokoto, Zaria" -North Korea,Pyongyang -Oman,"Masqat, Salala" -Pakistan,"Dadu, Mandi Bahauddin, Mardan, Okara, Shikarpur" -Paraguay,"Asuncin, Ciudad del Este, San Lorenzo" -Peru,"Callao, Hunuco, Lima, Sullana" -Philippines,"Baybay, Bayugan, Bislig, Cabuyao, Cavite, Davao, Gingoog, Hagonoy, Iligan, Imus, Lapu-Lapu, Mandaluyong, Ozamis, Santa Rosa, Taguig, Talavera, Tanauan, Tanza, Tarlac, Tuguegarao" -Poland,"Bydgoszcz, Czestochowa, Jastrzebie-Zdrj, Kalisz, Lublin, Plock, Tychy, Wroclaw" -Puerto Rico,"Arecibo, Ponce" -Romania,"Botosani, Bucuresti" -Runion,Saint-Denis -Russian Federation,"Atinsk, Balaiha, Dzerzinsk, Elista, Ivanovo, Jaroslavl, Jelets, Kaliningrad, Kamyin, Kirovo-Tepetsk, Kolpino, Korolev, Kurgan, Kursk, Lipetsk, Ljubertsy, Maikop, Moscow, Nabereznyje Telny, Niznekamsk, Novoterkassk, Pjatigorsk, Serpuhov, Smolensk, Syktyvkar" -Saint Vincent and the Grenadines,Kingstown -Saudi Arabia,"Abha, al-Hawiya, al-Qatif, Jedda, Tabuk" -Senegal,Ziguinchor -Slovakia,Bratislava -South Africa,"Boksburg, Botshabelo, Chatsworth, Johannesburg, Kimberley, Klerksdorp, Newcastle, Paarl, Rustenburg, Soshanguve, Springs" -South Korea,"Cheju, Kimchon, Naju, Tonghae, Uijongbu" -Spain,"A Corua (La Corua), Donostia-San Sebastin, Gijn, Ourense (Orense), Santiago de Compostela" -Sri Lanka,Jaffna -Sudan,"al-Qadarif, Omdurman" -Sweden,Malm -Switzerland,"Basel, Bern, Lausanne" -Taiwan,"Changhwa, Chiayi, Chungho, Fengshan, Hsichuh, Lungtan, Nantou, Tanshui, Touliu, Tsaotun" -Tanzania,"Mwanza, Tabora, Zanzibar" -Thailand,"Nakhon Sawan, Pak Kret, Songkhla" -Tonga,Nukualofa -Tunisia,Sousse -Turkey,"Adana, Balikesir, Batman, Denizli, Eskisehir, Gaziantep, Inegl, Kilis, Ktahya, Osmaniye, Sivas, Sultanbeyli, Tarsus, Tokat, Usak" -Turkmenistan,Ashgabat -Tuvalu,Funafuti -Ukraine,"Kamjanets-Podilskyi, Konotop, Mukateve, ostka, Simferopol, Sumy" -United Arab Emirates,"Abu Dhabi, al-Ayn, Sharja" -United Kingdom,"Bradford, Dundee, London, Southampton, Southend-on-Sea, Southport, Stockport, York" -United States,"Akron, Arlington, Augusta-Richmond County, Aurora, Bellevue, Brockton, Cape Coral, Citrus Heights, Clarksville, Compton, Dallas, Dayton, El Monte, Fontana, Garden Grove, Garland, Grand Prairie, Greensboro, Joliet, Kansas City, Lancaster, Laredo, Lincoln, Manchester, Memphis" -Venezuela,"Barcelona, Caracas, Cuman, Maracabo, Ocumare del Tuy, Valencia, Valle de la Pascua" -Vietnam,"Cam Ranh, Haiphong, Hanoi, Nam Dinh, Nha Trang, Vinh" -"Virgin Islands, U.S.",Charlotte Amalie -Yemen,"Aden, Hodeida, Sanaa, Taizz" -Yugoslavia,"Kragujevac, Novi Sad" -Zambia,Kitwe \ No newline at end of file diff --git a/tests/playwright/fixtures/expectedBaseDownloadDataPg.txt b/tests/playwright/fixtures/expectedBaseDownloadDataPg.txt deleted file mode 100644 index ffce972614..0000000000 --- a/tests/playwright/fixtures/expectedBaseDownloadDataPg.txt +++ /dev/null @@ -1,110 +0,0 @@ -Country,City List -Afghanistan,Kabul -Algeria,"Batna, Bchar, Skikda" -American Samoa,Tafuna -Angola,"Benguela, Namibe" -Anguilla,South Hill -Argentina,"Almirante Brown, Avellaneda, Baha Blanca, Crdoba, Escobar, Ezeiza, La Plata, Merlo, Quilmes, San Miguel de Tucumn, Santa F, Tandil, Vicente Lpez" -Armenia,Yerevan -Australia,Woodridge -Austria,"Graz, Linz, Salzburg" -Azerbaijan,"Baku, Sumqayit" -Bahrain,al-Manama -Bangladesh,"Dhaka, Jamalpur, Tangail" -Belarus,"Mogiljov, Molodetno" -Bolivia,"El Alto, Sucre" -Brazil,"Alvorada, Angra dos Reis, Anpolis, Aparecida de Goinia, Araatuba, Bag, Belm, Blumenau, Boa Vista, Braslia, Goinia, Guaruj, guas Lindas de Gois, Ibirit, Juazeiro do Norte, Juiz de Fora, Luzinia, Maring, Po, Poos de Caldas, Rio Claro, Santa Brbara dOeste, Santo Andr, So Bernardo do Campo, So Leopoldo" -Brunei,Bandar Seri Begawan -Bulgaria,"Ruse, Stara Zagora" -Cambodia,"Battambang, Phnom Penh" -Cameroon,"Bamenda, Yaound" -Canada,"Gatineau, Halifax, Lethbridge, London, Oshawa, Richmond Hill, Vancouver" -Chad,NDjamna -Chile,"Antofagasta, Coquimbo, Rancagua" -China,"Baicheng, Baiyin, Binzhou, Changzhou, Datong, Daxian, Dongying, Emeishan, Enshi, Ezhou, Fuyu, Fuzhou, Haining, Hami, Hohhot, Huaian, Jinchang, Jining, Jinzhou, Junan, Korla, Laiwu, Laohekou, Lengshuijiang, Leshan" -Colombia,"Buenaventura, Dos Quebradas, Florencia, Pereira, Sincelejo, Sogamoso" -"Congo, The Democratic Republic of the","Lubumbashi, Mwene-Ditu" -Czech Republic,Olomouc -Dominican Republic,"La Romana, San Felipe de Puerto Plata, Santiago de los Caballeros" -Ecuador,"Loja, Portoviejo, Robamba" -Egypt,"Bilbays, Idfu, Mit Ghamr, Qalyub, Sawhaj, Shubra al-Khayma" -Estonia,Tartu -Ethiopia,Addis Abeba -Faroe Islands,Trshavn -Finland,Oulu -France,"Brest, Le Mans, Toulon, Toulouse" -French Guiana,Cayenne -French Polynesia,"Faaa, Papeete" -Gambia,Banjul -Germany,"Duisburg, Erlangen, Halle/Saale, Mannheim, Saarbrcken, Siegen, Witten" -Greece,"Athenai, Patras" -Greenland,Nuuk -Holy See (Vatican City State),Citt del Vaticano -Hong Kong,Kowloon and New Kowloon -Hungary,Szkesfehrvr -India,"Adoni, Ahmadnagar, Allappuzha (Alleppey), Ambattur, Amroha, Balurghat, Berhampore (Baharampur), Bhavnagar, Bhilwara, Bhimavaram, Bhopal, Bhusawal, Bijapur, Chandrapur, Chapra, Dhule (Dhulia), Etawah, Firozabad, Gandhinagar, Gulbarga, Haldia, Halisahar, Hoshiarpur, Hubli-Dharwad, Jaipur" -Indonesia,"Cianjur, Ciomas, Ciparay, Gorontalo, Jakarta, Lhokseumawe, Madiun, Pangkal Pinang, Pemalang, Pontianak, Probolinggo, Purwakarta, Surakarta, Tegal" -Iran,"Arak, Esfahan, Kermanshah, Najafabad, Qomsheh, Shahr-e Kord, Sirjan, Tabriz" -Iraq,Mosul -Israel,"Ashdod, Ashqelon, Bat Yam, Tel Aviv-Jaffa" -Italy,"Alessandria, Bergamo, Brescia, Brindisi, Livorno, Syrakusa, Udine" -Japan,"Akishima, Fukuyama, Higashiosaka, Hino, Hiroshima, Isesaki, Iwaki, Iwakuni, Iwatsuki, Izumisano, Kakamigahara, Kamakura, Kanazawa, Koriyama, Kurashiki, Kuwana, Matsue, Miyakonojo, Nagareyama, Okayama, Okinawa, Omiya, Onomichi, Otsu, Sagamihara" -Kazakstan,"Pavlodar, Zhezqazghan" -Kenya,"Kisumu, Nyeri" -Kuwait,Jalib al-Shuyukh -Latvia,"Daugavpils, Liepaja" -Liechtenstein,Vaduz -Lithuania,Vilnius -Madagascar,Mahajanga -Malawi,Lilongwe -Malaysia,"Ipoh, Kuching, Sungai Petani" -Mexico,"Acua, Allende, Atlixco, Carmen, Celaya, Coacalco de Berriozbal, Coatzacoalcos, Cuauhtmoc, Cuautla, Cuernavaca, El Fuerte, Guadalajara, Hidalgo, Huejutla de Reyes, Huixquilucan, Jos Azueta, Jurez, La Paz, Matamoros, Mexicali, Monclova, Nezahualcyotl, Pachuca de Soto, Salamanca, San Felipe del Progreso" -Moldova,Chisinau -Morocco,"Beni-Mellal, Nador, Sal" -Mozambique,"Beira, Naala-Porto, Tete" -Myanmar,"Monywa, Myingyan" -Nauru,Yangor -Nepal,Birgunj -Netherlands,"Amersfoort, Apeldoorn, Ede, Emmen, s-Hertogenbosch" -New Zealand,Hamilton -Nigeria,"Benin City, Deba Habe, Effon-Alaiye, Ife, Ikerre, Ilorin, Kaduna, Ogbomosho, Ondo, Owo, Oyo, Sokoto, Zaria" -North Korea,Pyongyang -Oman,"Masqat, Salala" -Pakistan,"Dadu, Mandi Bahauddin, Mardan, Okara, Shikarpur" -Paraguay,"Asuncin, Ciudad del Este, San Lorenzo" -Peru,"Callao, Hunuco, Lima, Sullana" -Philippines,"Baybay, Bayugan, Bislig, Cabuyao, Cavite, Davao, Gingoog, Hagonoy, Iligan, Imus, Lapu-Lapu, Mandaluyong, Ozamis, Santa Rosa, Taguig, Talavera, Tanauan, Tanza, Tarlac, Tuguegarao" -Poland,"Bydgoszcz, Czestochowa, Jastrzebie-Zdrj, Kalisz, Lublin, Plock, Tychy, Wroclaw" -Puerto Rico,"Arecibo, Ponce" -Romania,"Botosani, Bucuresti" -Runion,Saint-Denis -Russian Federation,"Atinsk, Balaiha, Dzerzinsk, Elista, Ivanovo, Jaroslavl, Jelets, Kaliningrad, Kamyin, Kirovo-Tepetsk, Kolpino, Korolev, Kurgan, Kursk, Lipetsk, Ljubertsy, Maikop, Moscow, Nabereznyje Telny, Niznekamsk, Novoterkassk, Pjatigorsk, Serpuhov, Smolensk, Syktyvkar" -Saint Vincent and the Grenadines,Kingstown -Saudi Arabia,"Abha, al-Hawiya, al-Qatif, Jedda, Tabuk" -Senegal,Ziguinchor -Slovakia,Bratislava -South Africa,"Boksburg, Botshabelo, Chatsworth, Johannesburg, Kimberley, Klerksdorp, Newcastle, Paarl, Rustenburg, Soshanguve, Springs" -South Korea,"Cheju, Kimchon, Naju, Tonghae, Uijongbu" -Spain,"A Corua (La Corua), Donostia-San Sebastin, Gijn, Ourense (Orense), Santiago de Compostela" -Sri Lanka,Jaffna -Sudan,"al-Qadarif, Omdurman" -Sweden,Malm -Switzerland,"Basel, Bern, Lausanne" -Taiwan,"Changhwa, Chiayi, Chungho, Fengshan, Hsichuh, Lungtan, Nantou, Tanshui, Touliu, Tsaotun" -Tanzania,"Mwanza, Tabora, Zanzibar" -Thailand,"Nakhon Sawan, Pak Kret, Songkhla" -Tonga,Nukualofa -Tunisia,Sousse -Turkey,"Adana, Balikesir, Batman, Denizli, Eskisehir, Gaziantep, Inegl, Kilis, Ktahya, Osmaniye, Sivas, Sultanbeyli, Tarsus, Tokat, Usak" -Turkmenistan,Ashgabat -Tuvalu,Funafuti -Ukraine,"Kamjanets-Podilskyi, Konotop, Mukateve, ostka, Simferopol, Sumy" -United Arab Emirates,"Abu Dhabi, al-Ayn, Sharja" -United Kingdom,"Bradford, Dundee, London, Southampton, Southend-on-Sea, Southport, Stockport, York" -United States,"Akron, Arlington, Augusta-Richmond County, Aurora, Bellevue, Brockton, Cape Coral, Citrus Heights, Clarksville, Compton, Dallas, Dayton, El Monte, Fontana, Garden Grove, Garland, Grand Prairie, Greensboro, Joliet, Kansas City, Lancaster, Laredo, Lincoln, Manchester, Memphis" -Venezuela,"Barcelona, Caracas, Cuman, Maracabo, Ocumare del Tuy, Valencia, Valle de la Pascua" -Vietnam,"Cam Ranh, Haiphong, Hanoi, Nam Dinh, Nha Trang, Vinh" -"Virgin Islands, U.S.",Charlotte Amalie -Yemen,"Aden, Hodeida, Sanaa, Taizz" -Yugoslavia,"Kragujevac, Novi Sad" -Zambia,Kitwe \ No newline at end of file diff --git a/tests/playwright/fixtures/expectedData.txt b/tests/playwright/fixtures/expectedData.txt deleted file mode 100644 index 6de66cde96..0000000000 --- a/tests/playwright/fixtures/expectedData.txt +++ /dev/null @@ -1,4 +0,0 @@ -Address,District,PostalCode,Phone,Location,Customer List,Staff List,City,Staff List1 -1661 Abha Drive,Tamil Nadu,14400,270456873752,"{""x"":78.8214191,""y"":10.3812871}",1,,Pudukkottai, -1993 Tabuk Lane,Tamil Nadu,64221,648482415405,"{""x"":80.1270701,""y"":12.9246028}",2,,Tambaram, -381 Kabul Way,Taipei,87272,55477302294,"{""x"":0,""y"":0}",2,,Hsichuh, \ No newline at end of file diff --git a/tests/playwright/fixtures/expectedDataSqlite.txt b/tests/playwright/fixtures/expectedDataSqlite.txt deleted file mode 100644 index cbf8d9cccb..0000000000 --- a/tests/playwright/fixtures/expectedDataSqlite.txt +++ /dev/null @@ -1,19 +0,0 @@ -Address,District,PostalCode,Phone,Customer List,Staff List,City,Staff List1 -1013 Tabuk Boulevard," ",96203," ",2,,Kanchrapara, -1168 Najafabad Parkway," ",40301," ",1,,Kabul, -1294 Firozabad Drive," ",70618," ",2,,Pingxiang, -1342 Abha Boulevard," ",10714," ",2,,Bucuresti, -1368 Maracabo Boulevard," ",32716," ",2,,South Hill, -1427 Tabuk Place," ",31342," ",2,,Cape Coral, -1519 Santiago de los Caballeros Loop," ",22025," ",2,,Mwene-Ditu, -1661 Abha Drive," ",14400," ",1,,Pudukkottai, -17 Kabul Boulevard," ",38594," ",1,,Nagareyama, -1838 Tabriz Lane," ",1195," ",1,,Dhaka, -1888 Kabul Drive," ",20936," ",1,,Ife, -1892 Nabereznyje Telny Lane," ",28396," ",2,,Tafuna, -1993 Tabuk Lane," ",64221," ",2,,Tambaram, -217 Botshabelo Place," ",49521," ",2,,Davao, -381 Kabul Way," ",87272," ",2,,Hsichuh, -44 Najafabad Way," ",61391," ",2,,Donostia-San Sebastin, -48 Maracabo Place," ",1570," ",1,,Talavera, -669 Firozabad Loop," ",92265," ",1,,al-Ayn, \ No newline at end of file diff --git a/tests/playwright/pages/Dashboard/common/Toolbar/ViewMenu.ts b/tests/playwright/pages/Dashboard/common/Toolbar/ViewMenu.ts index 7b534a1c17..e5a4b050da 100644 --- a/tests/playwright/pages/Dashboard/common/Toolbar/ViewMenu.ts +++ b/tests/playwright/pages/Dashboard/common/Toolbar/ViewMenu.ts @@ -62,15 +62,15 @@ export class ToolbarViewMenuPage extends BasePage { ]); // Save downloaded file somewhere - await download.saveAs('./output/at.xlsx'); + await download.saveAs('./output/test.xlsx'); // convert xlsx to csv - const wb = XLSX.readFile('./output/at.xlsx'); - XLSX.writeFile(wb, './output/at.txt', { bookType: 'csv' }); + const wb = XLSX.readFile('./output/test.xlsx'); + XLSX.writeFile(wb, './output/test.csv', { bookType: 'csv' }); // verify downloaded content against expected content const expectedData = fs.readFileSync(expectedDataFile, 'utf8'); - const file = fs.readFileSync('./output/at.txt', 'utf8'); + const file = fs.readFileSync('./output/test.csv', 'utf8'); await expect(file).toEqual(expectedData); } @@ -94,14 +94,14 @@ export class ToolbarViewMenuPage extends BasePage { downloadLocator: await this.rootPage .locator(`.ant-dropdown-menu-title-content:has-text("${subMenu}")`) .last(), - expectedDataFile: verificationInfo?.verificationFile ?? './fixtures/expectedBaseDownloadData.txt', + expectedDataFile: verificationInfo?.verificationFile ?? './fixtures/expectedBaseDownloadData.csv', }); } else if (subMenu === 'Download as XLSX') { await this.verifyDownloadAsXLSX({ downloadLocator: await this.rootPage .locator(`.ant-dropdown-menu-title-content:has-text("${subMenu}")`) .last(), - expectedDataFile: verificationInfo?.verificationFile ?? './fixtures/expectedBaseDownloadData.txt', + expectedDataFile: verificationInfo?.verificationFile ?? './fixtures/expectedBaseDownloadData.csv', }); } else { await this.rootPage.locator(`.ant-dropdown-menu-title-content:has-text("${subMenu}")`).last().click(); diff --git a/tests/playwright/pages/Dashboard/common/Toolbar/index.ts b/tests/playwright/pages/Dashboard/common/Toolbar/index.ts index 02c1f6bedb..f33b6bd1bd 100644 --- a/tests/playwright/pages/Dashboard/common/Toolbar/index.ts +++ b/tests/playwright/pages/Dashboard/common/Toolbar/index.ts @@ -111,7 +111,7 @@ export class ToolbarPage extends BasePage { await this.get().locator(`.nc-toolbar-btn.nc-add-new-row-btn`).click(); } - async clickDownload(type: string, verificationFile = 'expectedData.txt') { + async clickDownload(type: string, verificationFile = 'expectedData.csv') { await this.get().locator(`.nc-toolbar-btn.nc-actions-menu-btn`).click(); const [download] = await Promise.all([ diff --git a/tests/playwright/tests/viewGridShare.spec.ts b/tests/playwright/tests/viewGridShare.spec.ts index 6e6f82baa5..61b6c1f73c 100644 --- a/tests/playwright/tests/viewGridShare.spec.ts +++ b/tests/playwright/tests/viewGridShare.spec.ts @@ -139,7 +139,7 @@ test.describe('Shared view', () => { // verify download await sharedPage.grid.toolbar.clickDownload( 'Download as CSV', - isSqlite(context) || isPg(context) ? 'expectedDataSqlite.txt' : 'expectedData.txt' + isSqlite(context) || isPg(context) ? 'expectedDataSqlite.csv' : 'expectedData.csv' ); }); diff --git a/tests/playwright/tests/viewMenu.spec.ts b/tests/playwright/tests/viewMenu.spec.ts index 94a2b67b51..521549c5ae 100644 --- a/tests/playwright/tests/viewMenu.spec.ts +++ b/tests/playwright/tests/viewMenu.spec.ts @@ -52,12 +52,12 @@ test.describe('Grid view locked', () => { menu: 'Download', subMenu: 'Download as CSV', verificationInfo: { - verificationFile: isPg(context) ? './fixtures/expectedBaseDownloadDataPg.txt' : null, + verificationFile: isPg(context) ? './fixtures/expectedBaseDownloadDataPg.csv' : null, }, }); }); - test.only('Download XLSX', async () => { + test('Download XLSX', async () => { // close 'Team & Auth' tab await dashboard.closeTab({ title: 'Team & Auth' }); await dashboard.treeView.openTable({ title: 'Country' }); @@ -72,7 +72,7 @@ test.describe('Grid view locked', () => { menu: 'Download', subMenu: 'Download as XLSX', verificationInfo: { - verificationFile: isPg(context) ? './fixtures/expectedBaseDownloadDataPg.txt' : null, + verificationFile: isPg(context) ? './fixtures/expectedBaseDownloadDataPg.csv' : null, }, }); }); From 32115b17718016968d1c1902fd6ca174de795226 Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Sat, 3 Dec 2022 23:19:23 +0800 Subject: [PATCH 09/41] fix(playwright): use txt instead of csv for fs reader --- .../fixtures/expectedBaseDownloadData.txt | 110 ++++++++++++++++++ .../fixtures/expectedBaseDownloadDataPg.txt | 110 ++++++++++++++++++ tests/playwright/fixtures/expectedData.txt | 4 + .../fixtures/expectedDataSqlite.txt | 19 +++ .../Dashboard/common/Toolbar/ViewMenu.ts | 8 +- .../pages/Dashboard/common/Toolbar/index.ts | 2 +- tests/playwright/tests/viewGridShare.spec.ts | 2 +- tests/playwright/tests/viewMenu.spec.ts | 4 +- 8 files changed, 251 insertions(+), 8 deletions(-) create mode 100644 tests/playwright/fixtures/expectedBaseDownloadData.txt create mode 100644 tests/playwright/fixtures/expectedBaseDownloadDataPg.txt create mode 100644 tests/playwright/fixtures/expectedData.txt create mode 100644 tests/playwright/fixtures/expectedDataSqlite.txt diff --git a/tests/playwright/fixtures/expectedBaseDownloadData.txt b/tests/playwright/fixtures/expectedBaseDownloadData.txt new file mode 100644 index 0000000000..9002600ee2 --- /dev/null +++ b/tests/playwright/fixtures/expectedBaseDownloadData.txt @@ -0,0 +1,110 @@ +Country,City List +Afghanistan,Kabul +Algeria,"Batna, Bchar, Skikda" +American Samoa,Tafuna +Angola,"Benguela, Namibe" +Anguilla,South Hill +Argentina,"Almirante Brown, Avellaneda, Baha Blanca, Crdoba, Escobar, Ezeiza, La Plata, Merlo, Quilmes, San Miguel de Tucumn, Santa F, Tandil, Vicente Lpez" +Armenia,Yerevan +Australia,Woodridge +Austria,"Graz, Linz, Salzburg" +Azerbaijan,"Baku, Sumqayit" +Bahrain,al-Manama +Bangladesh,"Dhaka, Jamalpur, Tangail" +Belarus,"Mogiljov, Molodetno" +Bolivia,"El Alto, Sucre" +Brazil,"Alvorada, Angra dos Reis, Anpolis, Aparecida de Goinia, Araatuba, Bag, Belm, Blumenau, Boa Vista, Braslia, Goinia, Guaruj, guas Lindas de Gois, Ibirit, Juazeiro do Norte, Juiz de Fora, Luzinia, Maring, Po, Poos de Caldas, Rio Claro, Santa Brbara dOeste, Santo Andr, So Bernardo do Campo, So Leopoldo" +Brunei,Bandar Seri Begawan +Bulgaria,"Ruse, Stara Zagora" +Cambodia,"Battambang, Phnom Penh" +Cameroon,"Bamenda, Yaound" +Canada,"Gatineau, Halifax, Lethbridge, London, Oshawa, Richmond Hill, Vancouver" +Chad,NDjamna +Chile,"Antofagasta, Coquimbo, Rancagua" +China,"Baicheng, Baiyin, Binzhou, Changzhou, Datong, Daxian, Dongying, Emeishan, Enshi, Ezhou, Fuyu, Fuzhou, Haining, Hami, Hohhot, Huaian, Jinchang, Jining, Jinzhou, Junan, Korla, Laiwu, Laohekou, Lengshuijiang, Leshan" +Colombia,"Buenaventura, Dos Quebradas, Florencia, Pereira, Sincelejo, Sogamoso" +"Congo, The Democratic Republic of the","Lubumbashi, Mwene-Ditu" +Czech Republic,Olomouc +Dominican Republic,"La Romana, San Felipe de Puerto Plata, Santiago de los Caballeros" +Ecuador,"Loja, Portoviejo, Robamba" +Egypt,"Bilbays, Idfu, Mit Ghamr, Qalyub, Sawhaj, Shubra al-Khayma" +Estonia,Tartu +Ethiopia,Addis Abeba +Faroe Islands,Trshavn +Finland,Oulu +France,"Brest, Le Mans, Toulon, Toulouse" +French Guiana,Cayenne +French Polynesia,"Faaa, Papeete" +Gambia,Banjul +Germany,"Duisburg, Erlangen, Halle/Saale, Mannheim, Saarbrcken, Siegen, Witten" +Greece,"Athenai, Patras" +Greenland,Nuuk +Holy See (Vatican City State),Citt del Vaticano +Hong Kong,Kowloon and New Kowloon +Hungary,Szkesfehrvr +India,"Adoni, Ahmadnagar, Allappuzha (Alleppey), Ambattur, Amroha, Balurghat, Berhampore (Baharampur), Bhavnagar, Bhilwara, Bhimavaram, Bhopal, Bhusawal, Bijapur, Chandrapur, Chapra, Dhule (Dhulia), Etawah, Firozabad, Gandhinagar, Gulbarga, Haldia, Halisahar, Hoshiarpur, Hubli-Dharwad, Jaipur" +Indonesia,"Cianjur, Ciomas, Ciparay, Gorontalo, Jakarta, Lhokseumawe, Madiun, Pangkal Pinang, Pemalang, Pontianak, Probolinggo, Purwakarta, Surakarta, Tegal" +Iran,"Arak, Esfahan, Kermanshah, Najafabad, Qomsheh, Shahr-e Kord, Sirjan, Tabriz" +Iraq,Mosul +Israel,"Ashdod, Ashqelon, Bat Yam, Tel Aviv-Jaffa" +Italy,"Alessandria, Bergamo, Brescia, Brindisi, Livorno, Syrakusa, Udine" +Japan,"Akishima, Fukuyama, Higashiosaka, Hino, Hiroshima, Isesaki, Iwaki, Iwakuni, Iwatsuki, Izumisano, Kakamigahara, Kamakura, Kanazawa, Koriyama, Kurashiki, Kuwana, Matsue, Miyakonojo, Nagareyama, Okayama, Okinawa, Omiya, Onomichi, Otsu, Sagamihara" +Kazakstan,"Pavlodar, Zhezqazghan" +Kenya,"Kisumu, Nyeri" +Kuwait,Jalib al-Shuyukh +Latvia,"Daugavpils, Liepaja" +Liechtenstein,Vaduz +Lithuania,Vilnius +Madagascar,Mahajanga +Malawi,Lilongwe +Malaysia,"Ipoh, Kuching, Sungai Petani" +Mexico,"Acua, Allende, Atlixco, Carmen, Celaya, Coacalco de Berriozbal, Coatzacoalcos, Cuauhtmoc, Cuautla, Cuernavaca, El Fuerte, Guadalajara, Hidalgo, Huejutla de Reyes, Huixquilucan, Jos Azueta, Jurez, La Paz, Matamoros, Mexicali, Monclova, Nezahualcyotl, Pachuca de Soto, Salamanca, San Felipe del Progreso" +Moldova,Chisinau +Morocco,"Beni-Mellal, Nador, Sal" +Mozambique,"Beira, Naala-Porto, Tete" +Myanmar,"Monywa, Myingyan" +Nauru,Yangor +Nepal,Birgunj +Netherlands,"Amersfoort, Apeldoorn, Ede, Emmen, s-Hertogenbosch" +New Zealand,Hamilton +Nigeria,"Benin City, Deba Habe, Effon-Alaiye, Ife, Ikerre, Ilorin, Kaduna, Ogbomosho, Ondo, Owo, Oyo, Sokoto, Zaria" +North Korea,Pyongyang +Oman,"Masqat, Salala" +Pakistan,"Dadu, Mandi Bahauddin, Mardan, Okara, Shikarpur" +Paraguay,"Asuncin, Ciudad del Este, San Lorenzo" +Peru,"Callao, Hunuco, Lima, Sullana" +Philippines,"Baybay, Bayugan, Bislig, Cabuyao, Cavite, Davao, Gingoog, Hagonoy, Iligan, Imus, Lapu-Lapu, Mandaluyong, Ozamis, Santa Rosa, Taguig, Talavera, Tanauan, Tanza, Tarlac, Tuguegarao" +Poland,"Bydgoszcz, Czestochowa, Jastrzebie-Zdrj, Kalisz, Lublin, Plock, Tychy, Wroclaw" +Puerto Rico,"Arecibo, Ponce" +Romania,"Botosani, Bucuresti" +Runion,Saint-Denis +Russian Federation,"Atinsk, Balaiha, Dzerzinsk, Elista, Ivanovo, Jaroslavl, Jelets, Kaliningrad, Kamyin, Kirovo-Tepetsk, Kolpino, Korolev, Kurgan, Kursk, Lipetsk, Ljubertsy, Maikop, Moscow, Nabereznyje Telny, Niznekamsk, Novoterkassk, Pjatigorsk, Serpuhov, Smolensk, Syktyvkar" +Saint Vincent and the Grenadines,Kingstown +Saudi Arabia,"Abha, al-Hawiya, al-Qatif, Jedda, Tabuk" +Senegal,Ziguinchor +Slovakia,Bratislava +South Africa,"Boksburg, Botshabelo, Chatsworth, Johannesburg, Kimberley, Klerksdorp, Newcastle, Paarl, Rustenburg, Soshanguve, Springs" +South Korea,"Cheju, Kimchon, Naju, Tonghae, Uijongbu" +Spain,"A Corua (La Corua), Donostia-San Sebastin, Gijn, Ourense (Orense), Santiago de Compostela" +Sri Lanka,Jaffna +Sudan,"al-Qadarif, Omdurman" +Sweden,Malm +Switzerland,"Basel, Bern, Lausanne" +Taiwan,"Changhwa, Chiayi, Chungho, Fengshan, Hsichuh, Lungtan, Nantou, Tanshui, Touliu, Tsaotun" +Tanzania,"Mwanza, Tabora, Zanzibar" +Thailand,"Nakhon Sawan, Pak Kret, Songkhla" +Tonga,Nukualofa +Tunisia,Sousse +Turkey,"Adana, Balikesir, Batman, Denizli, Eskisehir, Gaziantep, Inegl, Kilis, Ktahya, Osmaniye, Sivas, Sultanbeyli, Tarsus, Tokat, Usak" +Turkmenistan,Ashgabat +Tuvalu,Funafuti +Ukraine,"Kamjanets-Podilskyi, Konotop, Mukateve, ostka, Simferopol, Sumy" +United Arab Emirates,"Abu Dhabi, al-Ayn, Sharja" +United Kingdom,"Bradford, Dundee, London, Southampton, Southend-on-Sea, Southport, Stockport, York" +United States,"Akron, Arlington, Augusta-Richmond County, Aurora, Bellevue, Brockton, Cape Coral, Citrus Heights, Clarksville, Compton, Dallas, Dayton, El Monte, Fontana, Garden Grove, Garland, Grand Prairie, Greensboro, Joliet, Kansas City, Lancaster, Laredo, Lincoln, Manchester, Memphis" +Venezuela,"Barcelona, Caracas, Cuman, Maracabo, Ocumare del Tuy, Valencia, Valle de la Pascua" +Vietnam,"Cam Ranh, Haiphong, Hanoi, Nam Dinh, Nha Trang, Vinh" +"Virgin Islands, U.S.",Charlotte Amalie +Yemen,"Aden, Hodeida, Sanaa, Taizz" +Yugoslavia,"Kragujevac, Novi Sad" +Zambia,Kitwe \ No newline at end of file diff --git a/tests/playwright/fixtures/expectedBaseDownloadDataPg.txt b/tests/playwright/fixtures/expectedBaseDownloadDataPg.txt new file mode 100644 index 0000000000..ffce972614 --- /dev/null +++ b/tests/playwright/fixtures/expectedBaseDownloadDataPg.txt @@ -0,0 +1,110 @@ +Country,City List +Afghanistan,Kabul +Algeria,"Batna, Bchar, Skikda" +American Samoa,Tafuna +Angola,"Benguela, Namibe" +Anguilla,South Hill +Argentina,"Almirante Brown, Avellaneda, Baha Blanca, Crdoba, Escobar, Ezeiza, La Plata, Merlo, Quilmes, San Miguel de Tucumn, Santa F, Tandil, Vicente Lpez" +Armenia,Yerevan +Australia,Woodridge +Austria,"Graz, Linz, Salzburg" +Azerbaijan,"Baku, Sumqayit" +Bahrain,al-Manama +Bangladesh,"Dhaka, Jamalpur, Tangail" +Belarus,"Mogiljov, Molodetno" +Bolivia,"El Alto, Sucre" +Brazil,"Alvorada, Angra dos Reis, Anpolis, Aparecida de Goinia, Araatuba, Bag, Belm, Blumenau, Boa Vista, Braslia, Goinia, Guaruj, guas Lindas de Gois, Ibirit, Juazeiro do Norte, Juiz de Fora, Luzinia, Maring, Po, Poos de Caldas, Rio Claro, Santa Brbara dOeste, Santo Andr, So Bernardo do Campo, So Leopoldo" +Brunei,Bandar Seri Begawan +Bulgaria,"Ruse, Stara Zagora" +Cambodia,"Battambang, Phnom Penh" +Cameroon,"Bamenda, Yaound" +Canada,"Gatineau, Halifax, Lethbridge, London, Oshawa, Richmond Hill, Vancouver" +Chad,NDjamna +Chile,"Antofagasta, Coquimbo, Rancagua" +China,"Baicheng, Baiyin, Binzhou, Changzhou, Datong, Daxian, Dongying, Emeishan, Enshi, Ezhou, Fuyu, Fuzhou, Haining, Hami, Hohhot, Huaian, Jinchang, Jining, Jinzhou, Junan, Korla, Laiwu, Laohekou, Lengshuijiang, Leshan" +Colombia,"Buenaventura, Dos Quebradas, Florencia, Pereira, Sincelejo, Sogamoso" +"Congo, The Democratic Republic of the","Lubumbashi, Mwene-Ditu" +Czech Republic,Olomouc +Dominican Republic,"La Romana, San Felipe de Puerto Plata, Santiago de los Caballeros" +Ecuador,"Loja, Portoviejo, Robamba" +Egypt,"Bilbays, Idfu, Mit Ghamr, Qalyub, Sawhaj, Shubra al-Khayma" +Estonia,Tartu +Ethiopia,Addis Abeba +Faroe Islands,Trshavn +Finland,Oulu +France,"Brest, Le Mans, Toulon, Toulouse" +French Guiana,Cayenne +French Polynesia,"Faaa, Papeete" +Gambia,Banjul +Germany,"Duisburg, Erlangen, Halle/Saale, Mannheim, Saarbrcken, Siegen, Witten" +Greece,"Athenai, Patras" +Greenland,Nuuk +Holy See (Vatican City State),Citt del Vaticano +Hong Kong,Kowloon and New Kowloon +Hungary,Szkesfehrvr +India,"Adoni, Ahmadnagar, Allappuzha (Alleppey), Ambattur, Amroha, Balurghat, Berhampore (Baharampur), Bhavnagar, Bhilwara, Bhimavaram, Bhopal, Bhusawal, Bijapur, Chandrapur, Chapra, Dhule (Dhulia), Etawah, Firozabad, Gandhinagar, Gulbarga, Haldia, Halisahar, Hoshiarpur, Hubli-Dharwad, Jaipur" +Indonesia,"Cianjur, Ciomas, Ciparay, Gorontalo, Jakarta, Lhokseumawe, Madiun, Pangkal Pinang, Pemalang, Pontianak, Probolinggo, Purwakarta, Surakarta, Tegal" +Iran,"Arak, Esfahan, Kermanshah, Najafabad, Qomsheh, Shahr-e Kord, Sirjan, Tabriz" +Iraq,Mosul +Israel,"Ashdod, Ashqelon, Bat Yam, Tel Aviv-Jaffa" +Italy,"Alessandria, Bergamo, Brescia, Brindisi, Livorno, Syrakusa, Udine" +Japan,"Akishima, Fukuyama, Higashiosaka, Hino, Hiroshima, Isesaki, Iwaki, Iwakuni, Iwatsuki, Izumisano, Kakamigahara, Kamakura, Kanazawa, Koriyama, Kurashiki, Kuwana, Matsue, Miyakonojo, Nagareyama, Okayama, Okinawa, Omiya, Onomichi, Otsu, Sagamihara" +Kazakstan,"Pavlodar, Zhezqazghan" +Kenya,"Kisumu, Nyeri" +Kuwait,Jalib al-Shuyukh +Latvia,"Daugavpils, Liepaja" +Liechtenstein,Vaduz +Lithuania,Vilnius +Madagascar,Mahajanga +Malawi,Lilongwe +Malaysia,"Ipoh, Kuching, Sungai Petani" +Mexico,"Acua, Allende, Atlixco, Carmen, Celaya, Coacalco de Berriozbal, Coatzacoalcos, Cuauhtmoc, Cuautla, Cuernavaca, El Fuerte, Guadalajara, Hidalgo, Huejutla de Reyes, Huixquilucan, Jos Azueta, Jurez, La Paz, Matamoros, Mexicali, Monclova, Nezahualcyotl, Pachuca de Soto, Salamanca, San Felipe del Progreso" +Moldova,Chisinau +Morocco,"Beni-Mellal, Nador, Sal" +Mozambique,"Beira, Naala-Porto, Tete" +Myanmar,"Monywa, Myingyan" +Nauru,Yangor +Nepal,Birgunj +Netherlands,"Amersfoort, Apeldoorn, Ede, Emmen, s-Hertogenbosch" +New Zealand,Hamilton +Nigeria,"Benin City, Deba Habe, Effon-Alaiye, Ife, Ikerre, Ilorin, Kaduna, Ogbomosho, Ondo, Owo, Oyo, Sokoto, Zaria" +North Korea,Pyongyang +Oman,"Masqat, Salala" +Pakistan,"Dadu, Mandi Bahauddin, Mardan, Okara, Shikarpur" +Paraguay,"Asuncin, Ciudad del Este, San Lorenzo" +Peru,"Callao, Hunuco, Lima, Sullana" +Philippines,"Baybay, Bayugan, Bislig, Cabuyao, Cavite, Davao, Gingoog, Hagonoy, Iligan, Imus, Lapu-Lapu, Mandaluyong, Ozamis, Santa Rosa, Taguig, Talavera, Tanauan, Tanza, Tarlac, Tuguegarao" +Poland,"Bydgoszcz, Czestochowa, Jastrzebie-Zdrj, Kalisz, Lublin, Plock, Tychy, Wroclaw" +Puerto Rico,"Arecibo, Ponce" +Romania,"Botosani, Bucuresti" +Runion,Saint-Denis +Russian Federation,"Atinsk, Balaiha, Dzerzinsk, Elista, Ivanovo, Jaroslavl, Jelets, Kaliningrad, Kamyin, Kirovo-Tepetsk, Kolpino, Korolev, Kurgan, Kursk, Lipetsk, Ljubertsy, Maikop, Moscow, Nabereznyje Telny, Niznekamsk, Novoterkassk, Pjatigorsk, Serpuhov, Smolensk, Syktyvkar" +Saint Vincent and the Grenadines,Kingstown +Saudi Arabia,"Abha, al-Hawiya, al-Qatif, Jedda, Tabuk" +Senegal,Ziguinchor +Slovakia,Bratislava +South Africa,"Boksburg, Botshabelo, Chatsworth, Johannesburg, Kimberley, Klerksdorp, Newcastle, Paarl, Rustenburg, Soshanguve, Springs" +South Korea,"Cheju, Kimchon, Naju, Tonghae, Uijongbu" +Spain,"A Corua (La Corua), Donostia-San Sebastin, Gijn, Ourense (Orense), Santiago de Compostela" +Sri Lanka,Jaffna +Sudan,"al-Qadarif, Omdurman" +Sweden,Malm +Switzerland,"Basel, Bern, Lausanne" +Taiwan,"Changhwa, Chiayi, Chungho, Fengshan, Hsichuh, Lungtan, Nantou, Tanshui, Touliu, Tsaotun" +Tanzania,"Mwanza, Tabora, Zanzibar" +Thailand,"Nakhon Sawan, Pak Kret, Songkhla" +Tonga,Nukualofa +Tunisia,Sousse +Turkey,"Adana, Balikesir, Batman, Denizli, Eskisehir, Gaziantep, Inegl, Kilis, Ktahya, Osmaniye, Sivas, Sultanbeyli, Tarsus, Tokat, Usak" +Turkmenistan,Ashgabat +Tuvalu,Funafuti +Ukraine,"Kamjanets-Podilskyi, Konotop, Mukateve, ostka, Simferopol, Sumy" +United Arab Emirates,"Abu Dhabi, al-Ayn, Sharja" +United Kingdom,"Bradford, Dundee, London, Southampton, Southend-on-Sea, Southport, Stockport, York" +United States,"Akron, Arlington, Augusta-Richmond County, Aurora, Bellevue, Brockton, Cape Coral, Citrus Heights, Clarksville, Compton, Dallas, Dayton, El Monte, Fontana, Garden Grove, Garland, Grand Prairie, Greensboro, Joliet, Kansas City, Lancaster, Laredo, Lincoln, Manchester, Memphis" +Venezuela,"Barcelona, Caracas, Cuman, Maracabo, Ocumare del Tuy, Valencia, Valle de la Pascua" +Vietnam,"Cam Ranh, Haiphong, Hanoi, Nam Dinh, Nha Trang, Vinh" +"Virgin Islands, U.S.",Charlotte Amalie +Yemen,"Aden, Hodeida, Sanaa, Taizz" +Yugoslavia,"Kragujevac, Novi Sad" +Zambia,Kitwe \ No newline at end of file diff --git a/tests/playwright/fixtures/expectedData.txt b/tests/playwright/fixtures/expectedData.txt new file mode 100644 index 0000000000..6de66cde96 --- /dev/null +++ b/tests/playwright/fixtures/expectedData.txt @@ -0,0 +1,4 @@ +Address,District,PostalCode,Phone,Location,Customer List,Staff List,City,Staff List1 +1661 Abha Drive,Tamil Nadu,14400,270456873752,"{""x"":78.8214191,""y"":10.3812871}",1,,Pudukkottai, +1993 Tabuk Lane,Tamil Nadu,64221,648482415405,"{""x"":80.1270701,""y"":12.9246028}",2,,Tambaram, +381 Kabul Way,Taipei,87272,55477302294,"{""x"":0,""y"":0}",2,,Hsichuh, \ No newline at end of file diff --git a/tests/playwright/fixtures/expectedDataSqlite.txt b/tests/playwright/fixtures/expectedDataSqlite.txt new file mode 100644 index 0000000000..cbf8d9cccb --- /dev/null +++ b/tests/playwright/fixtures/expectedDataSqlite.txt @@ -0,0 +1,19 @@ +Address,District,PostalCode,Phone,Customer List,Staff List,City,Staff List1 +1013 Tabuk Boulevard," ",96203," ",2,,Kanchrapara, +1168 Najafabad Parkway," ",40301," ",1,,Kabul, +1294 Firozabad Drive," ",70618," ",2,,Pingxiang, +1342 Abha Boulevard," ",10714," ",2,,Bucuresti, +1368 Maracabo Boulevard," ",32716," ",2,,South Hill, +1427 Tabuk Place," ",31342," ",2,,Cape Coral, +1519 Santiago de los Caballeros Loop," ",22025," ",2,,Mwene-Ditu, +1661 Abha Drive," ",14400," ",1,,Pudukkottai, +17 Kabul Boulevard," ",38594," ",1,,Nagareyama, +1838 Tabriz Lane," ",1195," ",1,,Dhaka, +1888 Kabul Drive," ",20936," ",1,,Ife, +1892 Nabereznyje Telny Lane," ",28396," ",2,,Tafuna, +1993 Tabuk Lane," ",64221," ",2,,Tambaram, +217 Botshabelo Place," ",49521," ",2,,Davao, +381 Kabul Way," ",87272," ",2,,Hsichuh, +44 Najafabad Way," ",61391," ",2,,Donostia-San Sebastin, +48 Maracabo Place," ",1570," ",1,,Talavera, +669 Firozabad Loop," ",92265," ",1,,al-Ayn, \ No newline at end of file diff --git a/tests/playwright/pages/Dashboard/common/Toolbar/ViewMenu.ts b/tests/playwright/pages/Dashboard/common/Toolbar/ViewMenu.ts index e5a4b050da..838bf6adbf 100644 --- a/tests/playwright/pages/Dashboard/common/Toolbar/ViewMenu.ts +++ b/tests/playwright/pages/Dashboard/common/Toolbar/ViewMenu.ts @@ -66,11 +66,11 @@ export class ToolbarViewMenuPage extends BasePage { // convert xlsx to csv const wb = XLSX.readFile('./output/test.xlsx'); - XLSX.writeFile(wb, './output/test.csv', { bookType: 'csv' }); + XLSX.writeFile(wb, './output/test.txt', { bookType: 'csv' }); // verify downloaded content against expected content const expectedData = fs.readFileSync(expectedDataFile, 'utf8'); - const file = fs.readFileSync('./output/test.csv', 'utf8'); + const file = fs.readFileSync('./output/test.txt', 'utf8'); await expect(file).toEqual(expectedData); } @@ -94,14 +94,14 @@ export class ToolbarViewMenuPage extends BasePage { downloadLocator: await this.rootPage .locator(`.ant-dropdown-menu-title-content:has-text("${subMenu}")`) .last(), - expectedDataFile: verificationInfo?.verificationFile ?? './fixtures/expectedBaseDownloadData.csv', + expectedDataFile: verificationInfo?.verificationFile ?? './fixtures/expectedBaseDownloadData.txt', }); } else if (subMenu === 'Download as XLSX') { await this.verifyDownloadAsXLSX({ downloadLocator: await this.rootPage .locator(`.ant-dropdown-menu-title-content:has-text("${subMenu}")`) .last(), - expectedDataFile: verificationInfo?.verificationFile ?? './fixtures/expectedBaseDownloadData.csv', + expectedDataFile: verificationInfo?.verificationFile ?? './fixtures/expectedBaseDownloadData.txt', }); } else { await this.rootPage.locator(`.ant-dropdown-menu-title-content:has-text("${subMenu}")`).last().click(); diff --git a/tests/playwright/pages/Dashboard/common/Toolbar/index.ts b/tests/playwright/pages/Dashboard/common/Toolbar/index.ts index f33b6bd1bd..02c1f6bedb 100644 --- a/tests/playwright/pages/Dashboard/common/Toolbar/index.ts +++ b/tests/playwright/pages/Dashboard/common/Toolbar/index.ts @@ -111,7 +111,7 @@ export class ToolbarPage extends BasePage { await this.get().locator(`.nc-toolbar-btn.nc-add-new-row-btn`).click(); } - async clickDownload(type: string, verificationFile = 'expectedData.csv') { + async clickDownload(type: string, verificationFile = 'expectedData.txt') { await this.get().locator(`.nc-toolbar-btn.nc-actions-menu-btn`).click(); const [download] = await Promise.all([ diff --git a/tests/playwright/tests/viewGridShare.spec.ts b/tests/playwright/tests/viewGridShare.spec.ts index 61b6c1f73c..6e6f82baa5 100644 --- a/tests/playwright/tests/viewGridShare.spec.ts +++ b/tests/playwright/tests/viewGridShare.spec.ts @@ -139,7 +139,7 @@ test.describe('Shared view', () => { // verify download await sharedPage.grid.toolbar.clickDownload( 'Download as CSV', - isSqlite(context) || isPg(context) ? 'expectedDataSqlite.csv' : 'expectedData.csv' + isSqlite(context) || isPg(context) ? 'expectedDataSqlite.txt' : 'expectedData.txt' ); }); diff --git a/tests/playwright/tests/viewMenu.spec.ts b/tests/playwright/tests/viewMenu.spec.ts index 521549c5ae..39ac76bd33 100644 --- a/tests/playwright/tests/viewMenu.spec.ts +++ b/tests/playwright/tests/viewMenu.spec.ts @@ -52,7 +52,7 @@ test.describe('Grid view locked', () => { menu: 'Download', subMenu: 'Download as CSV', verificationInfo: { - verificationFile: isPg(context) ? './fixtures/expectedBaseDownloadDataPg.csv' : null, + verificationFile: isPg(context) ? './fixtures/expectedBaseDownloadDataPg.txt' : null, }, }); }); @@ -72,7 +72,7 @@ test.describe('Grid view locked', () => { menu: 'Download', subMenu: 'Download as XLSX', verificationInfo: { - verificationFile: isPg(context) ? './fixtures/expectedBaseDownloadDataPg.csv' : null, + verificationFile: isPg(context) ? './fixtures/expectedBaseDownloadDataPg.txt' : null, }, }); }); From 1268b42eed6dbc1b4888b9cc7c9e70047ea78cad Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Sun, 4 Dec 2022 00:58:24 +0800 Subject: [PATCH 10/41] fix(playwright): CRLF -> LF --- .../fixtures/expectedBaseDownloadDataPg.txt | 218 +++++++++--------- tests/playwright/fixtures/expectedData.txt | 6 +- .../fixtures/expectedDataSqlite.txt | 36 +-- 3 files changed, 130 insertions(+), 130 deletions(-) diff --git a/tests/playwright/fixtures/expectedBaseDownloadDataPg.txt b/tests/playwright/fixtures/expectedBaseDownloadDataPg.txt index ffce972614..36d43c36ba 100644 --- a/tests/playwright/fixtures/expectedBaseDownloadDataPg.txt +++ b/tests/playwright/fixtures/expectedBaseDownloadDataPg.txt @@ -1,110 +1,110 @@ -Country,City List -Afghanistan,Kabul -Algeria,"Batna, Bchar, Skikda" -American Samoa,Tafuna -Angola,"Benguela, Namibe" -Anguilla,South Hill -Argentina,"Almirante Brown, Avellaneda, Baha Blanca, Crdoba, Escobar, Ezeiza, La Plata, Merlo, Quilmes, San Miguel de Tucumn, Santa F, Tandil, Vicente Lpez" -Armenia,Yerevan -Australia,Woodridge -Austria,"Graz, Linz, Salzburg" -Azerbaijan,"Baku, Sumqayit" -Bahrain,al-Manama -Bangladesh,"Dhaka, Jamalpur, Tangail" -Belarus,"Mogiljov, Molodetno" -Bolivia,"El Alto, Sucre" -Brazil,"Alvorada, Angra dos Reis, Anpolis, Aparecida de Goinia, Araatuba, Bag, Belm, Blumenau, Boa Vista, Braslia, Goinia, Guaruj, guas Lindas de Gois, Ibirit, Juazeiro do Norte, Juiz de Fora, Luzinia, Maring, Po, Poos de Caldas, Rio Claro, Santa Brbara dOeste, Santo Andr, So Bernardo do Campo, So Leopoldo" -Brunei,Bandar Seri Begawan -Bulgaria,"Ruse, Stara Zagora" -Cambodia,"Battambang, Phnom Penh" -Cameroon,"Bamenda, Yaound" -Canada,"Gatineau, Halifax, Lethbridge, London, Oshawa, Richmond Hill, Vancouver" -Chad,NDjamna -Chile,"Antofagasta, Coquimbo, Rancagua" -China,"Baicheng, Baiyin, Binzhou, Changzhou, Datong, Daxian, Dongying, Emeishan, Enshi, Ezhou, Fuyu, Fuzhou, Haining, Hami, Hohhot, Huaian, Jinchang, Jining, Jinzhou, Junan, Korla, Laiwu, Laohekou, Lengshuijiang, Leshan" -Colombia,"Buenaventura, Dos Quebradas, Florencia, Pereira, Sincelejo, Sogamoso" -"Congo, The Democratic Republic of the","Lubumbashi, Mwene-Ditu" -Czech Republic,Olomouc -Dominican Republic,"La Romana, San Felipe de Puerto Plata, Santiago de los Caballeros" -Ecuador,"Loja, Portoviejo, Robamba" -Egypt,"Bilbays, Idfu, Mit Ghamr, Qalyub, Sawhaj, Shubra al-Khayma" -Estonia,Tartu -Ethiopia,Addis Abeba -Faroe Islands,Trshavn -Finland,Oulu -France,"Brest, Le Mans, Toulon, Toulouse" -French Guiana,Cayenne -French Polynesia,"Faaa, Papeete" -Gambia,Banjul -Germany,"Duisburg, Erlangen, Halle/Saale, Mannheim, Saarbrcken, Siegen, Witten" -Greece,"Athenai, Patras" -Greenland,Nuuk -Holy See (Vatican City State),Citt del Vaticano -Hong Kong,Kowloon and New Kowloon -Hungary,Szkesfehrvr -India,"Adoni, Ahmadnagar, Allappuzha (Alleppey), Ambattur, Amroha, Balurghat, Berhampore (Baharampur), Bhavnagar, Bhilwara, Bhimavaram, Bhopal, Bhusawal, Bijapur, Chandrapur, Chapra, Dhule (Dhulia), Etawah, Firozabad, Gandhinagar, Gulbarga, Haldia, Halisahar, Hoshiarpur, Hubli-Dharwad, Jaipur" -Indonesia,"Cianjur, Ciomas, Ciparay, Gorontalo, Jakarta, Lhokseumawe, Madiun, Pangkal Pinang, Pemalang, Pontianak, Probolinggo, Purwakarta, Surakarta, Tegal" -Iran,"Arak, Esfahan, Kermanshah, Najafabad, Qomsheh, Shahr-e Kord, Sirjan, Tabriz" -Iraq,Mosul -Israel,"Ashdod, Ashqelon, Bat Yam, Tel Aviv-Jaffa" -Italy,"Alessandria, Bergamo, Brescia, Brindisi, Livorno, Syrakusa, Udine" -Japan,"Akishima, Fukuyama, Higashiosaka, Hino, Hiroshima, Isesaki, Iwaki, Iwakuni, Iwatsuki, Izumisano, Kakamigahara, Kamakura, Kanazawa, Koriyama, Kurashiki, Kuwana, Matsue, Miyakonojo, Nagareyama, Okayama, Okinawa, Omiya, Onomichi, Otsu, Sagamihara" -Kazakstan,"Pavlodar, Zhezqazghan" -Kenya,"Kisumu, Nyeri" -Kuwait,Jalib al-Shuyukh -Latvia,"Daugavpils, Liepaja" -Liechtenstein,Vaduz -Lithuania,Vilnius -Madagascar,Mahajanga -Malawi,Lilongwe -Malaysia,"Ipoh, Kuching, Sungai Petani" -Mexico,"Acua, Allende, Atlixco, Carmen, Celaya, Coacalco de Berriozbal, Coatzacoalcos, Cuauhtmoc, Cuautla, Cuernavaca, El Fuerte, Guadalajara, Hidalgo, Huejutla de Reyes, Huixquilucan, Jos Azueta, Jurez, La Paz, Matamoros, Mexicali, Monclova, Nezahualcyotl, Pachuca de Soto, Salamanca, San Felipe del Progreso" -Moldova,Chisinau -Morocco,"Beni-Mellal, Nador, Sal" -Mozambique,"Beira, Naala-Porto, Tete" -Myanmar,"Monywa, Myingyan" -Nauru,Yangor -Nepal,Birgunj -Netherlands,"Amersfoort, Apeldoorn, Ede, Emmen, s-Hertogenbosch" -New Zealand,Hamilton -Nigeria,"Benin City, Deba Habe, Effon-Alaiye, Ife, Ikerre, Ilorin, Kaduna, Ogbomosho, Ondo, Owo, Oyo, Sokoto, Zaria" -North Korea,Pyongyang -Oman,"Masqat, Salala" -Pakistan,"Dadu, Mandi Bahauddin, Mardan, Okara, Shikarpur" -Paraguay,"Asuncin, Ciudad del Este, San Lorenzo" -Peru,"Callao, Hunuco, Lima, Sullana" -Philippines,"Baybay, Bayugan, Bislig, Cabuyao, Cavite, Davao, Gingoog, Hagonoy, Iligan, Imus, Lapu-Lapu, Mandaluyong, Ozamis, Santa Rosa, Taguig, Talavera, Tanauan, Tanza, Tarlac, Tuguegarao" -Poland,"Bydgoszcz, Czestochowa, Jastrzebie-Zdrj, Kalisz, Lublin, Plock, Tychy, Wroclaw" -Puerto Rico,"Arecibo, Ponce" -Romania,"Botosani, Bucuresti" -Runion,Saint-Denis -Russian Federation,"Atinsk, Balaiha, Dzerzinsk, Elista, Ivanovo, Jaroslavl, Jelets, Kaliningrad, Kamyin, Kirovo-Tepetsk, Kolpino, Korolev, Kurgan, Kursk, Lipetsk, Ljubertsy, Maikop, Moscow, Nabereznyje Telny, Niznekamsk, Novoterkassk, Pjatigorsk, Serpuhov, Smolensk, Syktyvkar" -Saint Vincent and the Grenadines,Kingstown -Saudi Arabia,"Abha, al-Hawiya, al-Qatif, Jedda, Tabuk" -Senegal,Ziguinchor -Slovakia,Bratislava -South Africa,"Boksburg, Botshabelo, Chatsworth, Johannesburg, Kimberley, Klerksdorp, Newcastle, Paarl, Rustenburg, Soshanguve, Springs" -South Korea,"Cheju, Kimchon, Naju, Tonghae, Uijongbu" -Spain,"A Corua (La Corua), Donostia-San Sebastin, Gijn, Ourense (Orense), Santiago de Compostela" -Sri Lanka,Jaffna -Sudan,"al-Qadarif, Omdurman" -Sweden,Malm -Switzerland,"Basel, Bern, Lausanne" -Taiwan,"Changhwa, Chiayi, Chungho, Fengshan, Hsichuh, Lungtan, Nantou, Tanshui, Touliu, Tsaotun" -Tanzania,"Mwanza, Tabora, Zanzibar" -Thailand,"Nakhon Sawan, Pak Kret, Songkhla" -Tonga,Nukualofa -Tunisia,Sousse -Turkey,"Adana, Balikesir, Batman, Denizli, Eskisehir, Gaziantep, Inegl, Kilis, Ktahya, Osmaniye, Sivas, Sultanbeyli, Tarsus, Tokat, Usak" -Turkmenistan,Ashgabat -Tuvalu,Funafuti -Ukraine,"Kamjanets-Podilskyi, Konotop, Mukateve, ostka, Simferopol, Sumy" -United Arab Emirates,"Abu Dhabi, al-Ayn, Sharja" -United Kingdom,"Bradford, Dundee, London, Southampton, Southend-on-Sea, Southport, Stockport, York" -United States,"Akron, Arlington, Augusta-Richmond County, Aurora, Bellevue, Brockton, Cape Coral, Citrus Heights, Clarksville, Compton, Dallas, Dayton, El Monte, Fontana, Garden Grove, Garland, Grand Prairie, Greensboro, Joliet, Kansas City, Lancaster, Laredo, Lincoln, Manchester, Memphis" -Venezuela,"Barcelona, Caracas, Cuman, Maracabo, Ocumare del Tuy, Valencia, Valle de la Pascua" -Vietnam,"Cam Ranh, Haiphong, Hanoi, Nam Dinh, Nha Trang, Vinh" -"Virgin Islands, U.S.",Charlotte Amalie -Yemen,"Aden, Hodeida, Sanaa, Taizz" -Yugoslavia,"Kragujevac, Novi Sad" +Country,City List +Afghanistan,Kabul +Algeria,"Batna, Bchar, Skikda" +American Samoa,Tafuna +Angola,"Benguela, Namibe" +Anguilla,South Hill +Argentina,"Almirante Brown, Avellaneda, Baha Blanca, Crdoba, Escobar, Ezeiza, La Plata, Merlo, Quilmes, San Miguel de Tucumn, Santa F, Tandil, Vicente Lpez" +Armenia,Yerevan +Australia,Woodridge +Austria,"Graz, Linz, Salzburg" +Azerbaijan,"Baku, Sumqayit" +Bahrain,al-Manama +Bangladesh,"Dhaka, Jamalpur, Tangail" +Belarus,"Mogiljov, Molodetno" +Bolivia,"El Alto, Sucre" +Brazil,"Alvorada, Angra dos Reis, Anpolis, Aparecida de Goinia, Araatuba, Bag, Belm, Blumenau, Boa Vista, Braslia, Goinia, Guaruj, guas Lindas de Gois, Ibirit, Juazeiro do Norte, Juiz de Fora, Luzinia, Maring, Po, Poos de Caldas, Rio Claro, Santa Brbara dOeste, Santo Andr, So Bernardo do Campo, So Leopoldo" +Brunei,Bandar Seri Begawan +Bulgaria,"Ruse, Stara Zagora" +Cambodia,"Battambang, Phnom Penh" +Cameroon,"Bamenda, Yaound" +Canada,"Gatineau, Halifax, Lethbridge, London, Oshawa, Richmond Hill, Vancouver" +Chad,NDjamna +Chile,"Antofagasta, Coquimbo, Rancagua" +China,"Baicheng, Baiyin, Binzhou, Changzhou, Datong, Daxian, Dongying, Emeishan, Enshi, Ezhou, Fuyu, Fuzhou, Haining, Hami, Hohhot, Huaian, Jinchang, Jining, Jinzhou, Junan, Korla, Laiwu, Laohekou, Lengshuijiang, Leshan" +Colombia,"Buenaventura, Dos Quebradas, Florencia, Pereira, Sincelejo, Sogamoso" +"Congo, The Democratic Republic of the","Lubumbashi, Mwene-Ditu" +Czech Republic,Olomouc +Dominican Republic,"La Romana, San Felipe de Puerto Plata, Santiago de los Caballeros" +Ecuador,"Loja, Portoviejo, Robamba" +Egypt,"Bilbays, Idfu, Mit Ghamr, Qalyub, Sawhaj, Shubra al-Khayma" +Estonia,Tartu +Ethiopia,Addis Abeba +Faroe Islands,Trshavn +Finland,Oulu +France,"Brest, Le Mans, Toulon, Toulouse" +French Guiana,Cayenne +French Polynesia,"Faaa, Papeete" +Gambia,Banjul +Germany,"Duisburg, Erlangen, Halle/Saale, Mannheim, Saarbrcken, Siegen, Witten" +Greece,"Athenai, Patras" +Greenland,Nuuk +Holy See (Vatican City State),Citt del Vaticano +Hong Kong,Kowloon and New Kowloon +Hungary,Szkesfehrvr +India,"Adoni, Ahmadnagar, Allappuzha (Alleppey), Ambattur, Amroha, Balurghat, Berhampore (Baharampur), Bhavnagar, Bhilwara, Bhimavaram, Bhopal, Bhusawal, Bijapur, Chandrapur, Chapra, Dhule (Dhulia), Etawah, Firozabad, Gandhinagar, Gulbarga, Haldia, Halisahar, Hoshiarpur, Hubli-Dharwad, Jaipur" +Indonesia,"Cianjur, Ciomas, Ciparay, Gorontalo, Jakarta, Lhokseumawe, Madiun, Pangkal Pinang, Pemalang, Pontianak, Probolinggo, Purwakarta, Surakarta, Tegal" +Iran,"Arak, Esfahan, Kermanshah, Najafabad, Qomsheh, Shahr-e Kord, Sirjan, Tabriz" +Iraq,Mosul +Israel,"Ashdod, Ashqelon, Bat Yam, Tel Aviv-Jaffa" +Italy,"Alessandria, Bergamo, Brescia, Brindisi, Livorno, Syrakusa, Udine" +Japan,"Akishima, Fukuyama, Higashiosaka, Hino, Hiroshima, Isesaki, Iwaki, Iwakuni, Iwatsuki, Izumisano, Kakamigahara, Kamakura, Kanazawa, Koriyama, Kurashiki, Kuwana, Matsue, Miyakonojo, Nagareyama, Okayama, Okinawa, Omiya, Onomichi, Otsu, Sagamihara" +Kazakstan,"Pavlodar, Zhezqazghan" +Kenya,"Kisumu, Nyeri" +Kuwait,Jalib al-Shuyukh +Latvia,"Daugavpils, Liepaja" +Liechtenstein,Vaduz +Lithuania,Vilnius +Madagascar,Mahajanga +Malawi,Lilongwe +Malaysia,"Ipoh, Kuching, Sungai Petani" +Mexico,"Acua, Allende, Atlixco, Carmen, Celaya, Coacalco de Berriozbal, Coatzacoalcos, Cuauhtmoc, Cuautla, Cuernavaca, El Fuerte, Guadalajara, Hidalgo, Huejutla de Reyes, Huixquilucan, Jos Azueta, Jurez, La Paz, Matamoros, Mexicali, Monclova, Nezahualcyotl, Pachuca de Soto, Salamanca, San Felipe del Progreso" +Moldova,Chisinau +Morocco,"Beni-Mellal, Nador, Sal" +Mozambique,"Beira, Naala-Porto, Tete" +Myanmar,"Monywa, Myingyan" +Nauru,Yangor +Nepal,Birgunj +Netherlands,"Amersfoort, Apeldoorn, Ede, Emmen, s-Hertogenbosch" +New Zealand,Hamilton +Nigeria,"Benin City, Deba Habe, Effon-Alaiye, Ife, Ikerre, Ilorin, Kaduna, Ogbomosho, Ondo, Owo, Oyo, Sokoto, Zaria" +North Korea,Pyongyang +Oman,"Masqat, Salala" +Pakistan,"Dadu, Mandi Bahauddin, Mardan, Okara, Shikarpur" +Paraguay,"Asuncin, Ciudad del Este, San Lorenzo" +Peru,"Callao, Hunuco, Lima, Sullana" +Philippines,"Baybay, Bayugan, Bislig, Cabuyao, Cavite, Davao, Gingoog, Hagonoy, Iligan, Imus, Lapu-Lapu, Mandaluyong, Ozamis, Santa Rosa, Taguig, Talavera, Tanauan, Tanza, Tarlac, Tuguegarao" +Poland,"Bydgoszcz, Czestochowa, Jastrzebie-Zdrj, Kalisz, Lublin, Plock, Tychy, Wroclaw" +Puerto Rico,"Arecibo, Ponce" +Romania,"Botosani, Bucuresti" +Runion,Saint-Denis +Russian Federation,"Atinsk, Balaiha, Dzerzinsk, Elista, Ivanovo, Jaroslavl, Jelets, Kaliningrad, Kamyin, Kirovo-Tepetsk, Kolpino, Korolev, Kurgan, Kursk, Lipetsk, Ljubertsy, Maikop, Moscow, Nabereznyje Telny, Niznekamsk, Novoterkassk, Pjatigorsk, Serpuhov, Smolensk, Syktyvkar" +Saint Vincent and the Grenadines,Kingstown +Saudi Arabia,"Abha, al-Hawiya, al-Qatif, Jedda, Tabuk" +Senegal,Ziguinchor +Slovakia,Bratislava +South Africa,"Boksburg, Botshabelo, Chatsworth, Johannesburg, Kimberley, Klerksdorp, Newcastle, Paarl, Rustenburg, Soshanguve, Springs" +South Korea,"Cheju, Kimchon, Naju, Tonghae, Uijongbu" +Spain,"A Corua (La Corua), Donostia-San Sebastin, Gijn, Ourense (Orense), Santiago de Compostela" +Sri Lanka,Jaffna +Sudan,"al-Qadarif, Omdurman" +Sweden,Malm +Switzerland,"Basel, Bern, Lausanne" +Taiwan,"Changhwa, Chiayi, Chungho, Fengshan, Hsichuh, Lungtan, Nantou, Tanshui, Touliu, Tsaotun" +Tanzania,"Mwanza, Tabora, Zanzibar" +Thailand,"Nakhon Sawan, Pak Kret, Songkhla" +Tonga,Nukualofa +Tunisia,Sousse +Turkey,"Adana, Balikesir, Batman, Denizli, Eskisehir, Gaziantep, Inegl, Kilis, Ktahya, Osmaniye, Sivas, Sultanbeyli, Tarsus, Tokat, Usak" +Turkmenistan,Ashgabat +Tuvalu,Funafuti +Ukraine,"Kamjanets-Podilskyi, Konotop, Mukateve, ostka, Simferopol, Sumy" +United Arab Emirates,"Abu Dhabi, al-Ayn, Sharja" +United Kingdom,"Bradford, Dundee, London, Southampton, Southend-on-Sea, Southport, Stockport, York" +United States,"Akron, Arlington, Augusta-Richmond County, Aurora, Bellevue, Brockton, Cape Coral, Citrus Heights, Clarksville, Compton, Dallas, Dayton, El Monte, Fontana, Garden Grove, Garland, Grand Prairie, Greensboro, Joliet, Kansas City, Lancaster, Laredo, Lincoln, Manchester, Memphis" +Venezuela,"Barcelona, Caracas, Cuman, Maracabo, Ocumare del Tuy, Valencia, Valle de la Pascua" +Vietnam,"Cam Ranh, Haiphong, Hanoi, Nam Dinh, Nha Trang, Vinh" +"Virgin Islands, U.S.",Charlotte Amalie +Yemen,"Aden, Hodeida, Sanaa, Taizz" +Yugoslavia,"Kragujevac, Novi Sad" Zambia,Kitwe \ No newline at end of file diff --git a/tests/playwright/fixtures/expectedData.txt b/tests/playwright/fixtures/expectedData.txt index 6de66cde96..8e6d239482 100644 --- a/tests/playwright/fixtures/expectedData.txt +++ b/tests/playwright/fixtures/expectedData.txt @@ -1,4 +1,4 @@ -Address,District,PostalCode,Phone,Location,Customer List,Staff List,City,Staff List1 -1661 Abha Drive,Tamil Nadu,14400,270456873752,"{""x"":78.8214191,""y"":10.3812871}",1,,Pudukkottai, -1993 Tabuk Lane,Tamil Nadu,64221,648482415405,"{""x"":80.1270701,""y"":12.9246028}",2,,Tambaram, +Address,District,PostalCode,Phone,Location,Customer List,Staff List,City,Staff List1 +1661 Abha Drive,Tamil Nadu,14400,270456873752,"{""x"":78.8214191,""y"":10.3812871}",1,,Pudukkottai, +1993 Tabuk Lane,Tamil Nadu,64221,648482415405,"{""x"":80.1270701,""y"":12.9246028}",2,,Tambaram, 381 Kabul Way,Taipei,87272,55477302294,"{""x"":0,""y"":0}",2,,Hsichuh, \ No newline at end of file diff --git a/tests/playwright/fixtures/expectedDataSqlite.txt b/tests/playwright/fixtures/expectedDataSqlite.txt index cbf8d9cccb..188590b915 100644 --- a/tests/playwright/fixtures/expectedDataSqlite.txt +++ b/tests/playwright/fixtures/expectedDataSqlite.txt @@ -1,19 +1,19 @@ -Address,District,PostalCode,Phone,Customer List,Staff List,City,Staff List1 -1013 Tabuk Boulevard," ",96203," ",2,,Kanchrapara, -1168 Najafabad Parkway," ",40301," ",1,,Kabul, -1294 Firozabad Drive," ",70618," ",2,,Pingxiang, -1342 Abha Boulevard," ",10714," ",2,,Bucuresti, -1368 Maracabo Boulevard," ",32716," ",2,,South Hill, -1427 Tabuk Place," ",31342," ",2,,Cape Coral, -1519 Santiago de los Caballeros Loop," ",22025," ",2,,Mwene-Ditu, -1661 Abha Drive," ",14400," ",1,,Pudukkottai, -17 Kabul Boulevard," ",38594," ",1,,Nagareyama, -1838 Tabriz Lane," ",1195," ",1,,Dhaka, -1888 Kabul Drive," ",20936," ",1,,Ife, -1892 Nabereznyje Telny Lane," ",28396," ",2,,Tafuna, -1993 Tabuk Lane," ",64221," ",2,,Tambaram, -217 Botshabelo Place," ",49521," ",2,,Davao, -381 Kabul Way," ",87272," ",2,,Hsichuh, -44 Najafabad Way," ",61391," ",2,,Donostia-San Sebastin, -48 Maracabo Place," ",1570," ",1,,Talavera, +Address,District,PostalCode,Phone,Customer List,Staff List,City,Staff List1 +1013 Tabuk Boulevard," ",96203," ",2,,Kanchrapara, +1168 Najafabad Parkway," ",40301," ",1,,Kabul, +1294 Firozabad Drive," ",70618," ",2,,Pingxiang, +1342 Abha Boulevard," ",10714," ",2,,Bucuresti, +1368 Maracabo Boulevard," ",32716," ",2,,South Hill, +1427 Tabuk Place," ",31342," ",2,,Cape Coral, +1519 Santiago de los Caballeros Loop," ",22025," ",2,,Mwene-Ditu, +1661 Abha Drive," ",14400," ",1,,Pudukkottai, +17 Kabul Boulevard," ",38594," ",1,,Nagareyama, +1838 Tabriz Lane," ",1195," ",1,,Dhaka, +1888 Kabul Drive," ",20936," ",1,,Ife, +1892 Nabereznyje Telny Lane," ",28396," ",2,,Tafuna, +1993 Tabuk Lane," ",64221," ",2,,Tambaram, +217 Botshabelo Place," ",49521," ",2,,Davao, +381 Kabul Way," ",87272," ",2,,Hsichuh, +44 Najafabad Way," ",61391," ",2,,Donostia-San Sebastin, +48 Maracabo Place," ",1570," ",1,,Talavera, 669 Firozabad Loop," ",92265," ",1,,al-Ayn, \ No newline at end of file From 0bb221760e71efc06ec95b0635757986831a897b Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Sun, 4 Dec 2022 01:12:32 +0800 Subject: [PATCH 11/41] fix(playwright): change to UTF-8 --- tests/playwright/fixtures/expectedBaseDownloadData.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/playwright/fixtures/expectedBaseDownloadData.txt b/tests/playwright/fixtures/expectedBaseDownloadData.txt index 9002600ee2..36d43c36ba 100644 --- a/tests/playwright/fixtures/expectedBaseDownloadData.txt +++ b/tests/playwright/fixtures/expectedBaseDownloadData.txt @@ -1,4 +1,4 @@ -Country,City List +Country,City List Afghanistan,Kabul Algeria,"Batna, Bchar, Skikda" American Samoa,Tafuna From 3e90051885ef3ac4ecf51c818214af0c0368d29c Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Sun, 4 Dec 2022 01:15:00 +0800 Subject: [PATCH 12/41] fix(playwright): export test --- .../pages/Dashboard/common/Toolbar/ViewMenu.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/tests/playwright/pages/Dashboard/common/Toolbar/ViewMenu.ts b/tests/playwright/pages/Dashboard/common/Toolbar/ViewMenu.ts index 838bf6adbf..508e958be9 100644 --- a/tests/playwright/pages/Dashboard/common/Toolbar/ViewMenu.ts +++ b/tests/playwright/pages/Dashboard/common/Toolbar/ViewMenu.ts @@ -39,11 +39,11 @@ export class ToolbarViewMenuPage extends BasePage { ]); // Save downloaded file somewhere - await download.saveAs('./output/at.txt'); + await download.saveAs('./output/test.txt'); // verify downloaded content against expected content - const expectedData = fs.readFileSync(expectedDataFile, 'utf8'); - const file = fs.readFileSync('./output/at.txt', 'utf8'); + const expectedData = fs.readFileSync(expectedDataFile, 'utf8').replace(/\r/g, '').split('\n'); + const file = fs.readFileSync('./output/test.txt', 'utf8').replace(/\r/g, '').split('\n'); await expect(file).toEqual(expectedData); } @@ -71,7 +71,8 @@ export class ToolbarViewMenuPage extends BasePage { // verify downloaded content against expected content const expectedData = fs.readFileSync(expectedDataFile, 'utf8'); const file = fs.readFileSync('./output/test.txt', 'utf8'); - await expect(file).toEqual(expectedData); + // XLSX writes file with UTF-8 BOM, adds '\ufeff' to cater it + await expect(file).toEqual('\ufeff' + expectedData); } // menu items From acbcc1477131a9583182bccaf1b7361d0689bcb4 Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Sun, 4 Dec 2022 11:55:56 +0800 Subject: [PATCH 13/41] fix(playwright): remove \r --- tests/playwright/pages/Dashboard/common/Toolbar/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/playwright/pages/Dashboard/common/Toolbar/index.ts b/tests/playwright/pages/Dashboard/common/Toolbar/index.ts index 02c1f6bedb..c97c263051 100644 --- a/tests/playwright/pages/Dashboard/common/Toolbar/index.ts +++ b/tests/playwright/pages/Dashboard/common/Toolbar/index.ts @@ -128,8 +128,8 @@ export class ToolbarPage extends BasePage { await download.saveAs('./output/at.txt'); // verify downloaded content against expected content - const expectedData = fs.readFileSync(`./fixtures/${verificationFile}`, 'utf8'); - const file = fs.readFileSync('./output/at.txt', 'utf8'); + const expectedData = fs.readFileSync(`./fixtures/${verificationFile}`, 'utf8').replace(/\r/g, '').split('\n'); + const file = fs.readFileSync('./output/at.txt', 'utf8').replace(/\r/g, '').split('\n'); await expect(file).toEqual(expectedData); } From 770affe3022cd25b3998f008c7a98bb9e6fb0716 Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Mon, 5 Dec 2022 14:27:01 +0800 Subject: [PATCH 14/41] fix(nc-gui): retrieve the correct column name based on the formula --- .../components/smartsheet/column/FormulaOptions.vue | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/nc-gui/components/smartsheet/column/FormulaOptions.vue b/packages/nc-gui/components/smartsheet/column/FormulaOptions.vue index 1ccb069b43..0ec293ef2f 100644 --- a/packages/nc-gui/components/smartsheet/column/FormulaOptions.vue +++ b/packages/nc-gui/components/smartsheet/column/FormulaOptions.vue @@ -2,8 +2,8 @@ import type { Ref } from 'vue' import type { ListItem as AntListItem } from 'ant-design-vue' import jsep from 'jsep' -import type { ColumnType } from 'nocodb-sdk' -import { UITypes, jsepCurlyHook } from 'nocodb-sdk' +import type { ColumnType, FormulaType } from 'nocodb-sdk' +import { UITypes, jsepCurlyHook, substituteColumnIdWithAliasInFormula } from 'nocodb-sdk' import { MetaInj, NcAutocompleteTree, @@ -604,7 +604,11 @@ function scrollToSelectedOption() { } // set default value -vModel.value.formula_raw = (column?.value?.colOptions as Record)?.formula_raw || '' +vModel.value.formula_raw = substituteColumnIdWithAliasInFormula( + (column.value?.colOptions as FormulaType)?.formula, + meta?.value?.columns as ColumnType[], + (column.value?.colOptions as any)?.formula_raw, +) // set additional validations setAdditionalValidations({ From 3d90d2d12ff32715884d1c7d36108db710b614a2 Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Mon, 5 Dec 2022 15:34:52 +0800 Subject: [PATCH 15/41] fix(nc-gui): handle new formula case --- .../smartsheet/column/FormulaOptions.vue | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/packages/nc-gui/components/smartsheet/column/FormulaOptions.vue b/packages/nc-gui/components/smartsheet/column/FormulaOptions.vue index 0ec293ef2f..c55bc8ec85 100644 --- a/packages/nc-gui/components/smartsheet/column/FormulaOptions.vue +++ b/packages/nc-gui/components/smartsheet/column/FormulaOptions.vue @@ -604,11 +604,16 @@ function scrollToSelectedOption() { } // set default value -vModel.value.formula_raw = substituteColumnIdWithAliasInFormula( - (column.value?.colOptions as FormulaType)?.formula, - meta?.value?.columns as ColumnType[], - (column.value?.colOptions as any)?.formula_raw, -) +if ((column.value?.colOptions as any)?.formula_raw) { + vModel.value.formula_raw = + substituteColumnIdWithAliasInFormula( + (column.value?.colOptions as FormulaType)?.formula, + meta?.value?.columns as ColumnType[], + (column.value?.colOptions as any)?.formula_raw, + ) || '' +} else { + vModel.value.formula_raw = '' +} // set additional validations setAdditionalValidations({ From 7ee02b4e7c61736672087601b1a486b6c4541f03 Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Mon, 5 Dec 2022 16:35:00 +0800 Subject: [PATCH 16/41] fix(nocodb-sdk): include node.value for literal case --- packages/nocodb-sdk/src/lib/formulaHelpers.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/nocodb-sdk/src/lib/formulaHelpers.ts b/packages/nocodb-sdk/src/lib/formulaHelpers.ts index 237e1ac4af..94f22b79b5 100644 --- a/packages/nocodb-sdk/src/lib/formulaHelpers.ts +++ b/packages/nocodb-sdk/src/lib/formulaHelpers.ts @@ -19,7 +19,10 @@ export const jsepCurlyHook = { context.index += 1; env.node = { type: jsep.IDENTIFIER, - name: nodes.map((node) => node.name).join(' '), + // column name with space would break it down to jsep.IDENTIFIER + jsep.LITERAL + // either take node.name for jsep.IDENTIFIER + // or take node.value for jsep.LITERAL + name: nodes.map((node) => node.name || node.value).join(' '), }; return env.node; } else { From d5ee38bbf26af0f3220b530ccb8ef219eb16051c Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Mon, 5 Dec 2022 16:38:36 +0800 Subject: [PATCH 17/41] chore: update package-lock.json --- packages/nc-gui/package-lock.json | 69 ++++++++++++++++++------------- packages/nocodb/package-lock.json | 47 +++++++++++++++++---- 2 files changed, 79 insertions(+), 37 deletions(-) diff --git a/packages/nc-gui/package-lock.json b/packages/nc-gui/package-lock.json index ece9e3e56f..c4a1c9ac9a 100644 --- a/packages/nc-gui/package-lock.json +++ b/packages/nc-gui/package-lock.json @@ -90,6 +90,28 @@ "windicss": "^3.5.6" } }, + "../nocodb-sdk": { + "version": "0.100.2", + "license": "AGPL-3.0-or-later", + "dependencies": { + "axios": "^0.21.1", + "jsep": "^1.3.6" + }, + "devDependencies": { + "@typescript-eslint/eslint-plugin": "^4.0.1", + "@typescript-eslint/parser": "^4.0.1", + "cspell": "^4.1.0", + "eslint": "^7.8.0", + "eslint-config-prettier": "^6.11.0", + "eslint-plugin-eslint-comments": "^3.2.0", + "eslint-plugin-functional": "^3.0.2", + "eslint-plugin-import": "^2.22.0", + "eslint-plugin-prettier": "^4.0.0", + "npm-run-all": "^4.1.5", + "prettier": "^2.1.1", + "typescript": "^4.0.2" + } + }, "node_modules/@ampproject/remapping": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", @@ -8417,6 +8439,7 @@ "version": "1.15.1", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", + "devOptional": true, "funding": [ { "type": "individual", @@ -11772,21 +11795,8 @@ } }, "node_modules/nocodb-sdk": { - "version": "0.100.2", - "resolved": "file:../nocodb-sdk", - "license": "AGPL-3.0-or-later", - "dependencies": { - "axios": "^0.21.1", - "jsep": "^1.3.6" - } - }, - "node_modules/nocodb-sdk/node_modules/axios": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", - "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", - "dependencies": { - "follow-redirects": "^1.14.0" - } + "resolved": "../nocodb-sdk", + "link": true }, "node_modules/node-abi": { "version": "3.23.0", @@ -23632,7 +23642,8 @@ "follow-redirects": { "version": "1.15.1", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", - "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==" + "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", + "devOptional": true }, "form-data": { "version": "4.0.0", @@ -26100,20 +26111,22 @@ } }, "nocodb-sdk": { - "version": "0.100.2", + "version": "file:../nocodb-sdk", "requires": { + "@typescript-eslint/eslint-plugin": "^4.0.1", + "@typescript-eslint/parser": "^4.0.1", "axios": "^0.21.1", - "jsep": "^1.3.6" - }, - "dependencies": { - "axios": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", - "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", - "requires": { - "follow-redirects": "^1.14.0" - } - } + "cspell": "^4.1.0", + "eslint": "^7.8.0", + "eslint-config-prettier": "^6.11.0", + "eslint-plugin-eslint-comments": "^3.2.0", + "eslint-plugin-functional": "^3.0.2", + "eslint-plugin-import": "^2.22.0", + "eslint-plugin-prettier": "^4.0.0", + "jsep": "^1.3.6", + "npm-run-all": "^4.1.5", + "prettier": "^2.1.1", + "typescript": "^4.0.2" } }, "node-abi": { diff --git a/packages/nocodb/package-lock.json b/packages/nocodb/package-lock.json index a3e2075d27..4d65271a41 100644 --- a/packages/nocodb/package-lock.json +++ b/packages/nocodb/package-lock.json @@ -151,6 +151,28 @@ "vuedraggable": "^2.24.3" } }, + "../nocodb-sdk": { + "version": "0.100.2", + "license": "AGPL-3.0-or-later", + "dependencies": { + "axios": "^0.21.1", + "jsep": "^1.3.6" + }, + "devDependencies": { + "@typescript-eslint/eslint-plugin": "^4.0.1", + "@typescript-eslint/parser": "^4.0.1", + "cspell": "^4.1.0", + "eslint": "^7.8.0", + "eslint-config-prettier": "^6.11.0", + "eslint-plugin-eslint-comments": "^3.2.0", + "eslint-plugin-functional": "^3.0.2", + "eslint-plugin-import": "^2.22.0", + "eslint-plugin-prettier": "^4.0.0", + "npm-run-all": "^4.1.5", + "prettier": "^2.1.1", + "typescript": "^4.0.2" + } + }, "node_modules/@azure/abort-controller": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-1.1.0.tgz", @@ -10634,13 +10656,8 @@ "dev": true }, "node_modules/nocodb-sdk": { - "version": "0.100.2", - "resolved": "file:../nocodb-sdk", - "license": "AGPL-3.0-or-later", - "dependencies": { - "axios": "^0.21.1", - "jsep": "^1.3.6" - } + "resolved": "../nocodb-sdk", + "link": true }, "node_modules/node-abort-controller": { "version": "3.0.1", @@ -26042,10 +26059,22 @@ "dev": true }, "nocodb-sdk": { - "version": "0.100.2", + "version": "file:../nocodb-sdk", "requires": { + "@typescript-eslint/eslint-plugin": "^4.0.1", + "@typescript-eslint/parser": "^4.0.1", "axios": "^0.21.1", - "jsep": "^1.3.6" + "cspell": "^4.1.0", + "eslint": "^7.8.0", + "eslint-config-prettier": "^6.11.0", + "eslint-plugin-eslint-comments": "^3.2.0", + "eslint-plugin-functional": "^3.0.2", + "eslint-plugin-import": "^2.22.0", + "eslint-plugin-prettier": "^4.0.0", + "jsep": "^1.3.6", + "npm-run-all": "^4.1.5", + "prettier": "^2.1.1", + "typescript": "^4.0.2" } }, "node-abort-controller": { From 55b6d0822305c0fdb3f671d63eb731a942debcae Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Mon, 5 Dec 2022 16:38:45 +0800 Subject: [PATCH 18/41] chore(nc-gui): lint --- packages/nc-gui/components/dashboard/TreeView.vue | 2 +- .../nc-gui/components/smartsheet/column/QrCodeOptions.vue | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/nc-gui/components/dashboard/TreeView.vue b/packages/nc-gui/components/dashboard/TreeView.vue index 45947b5a76..f21928d9a9 100644 --- a/packages/nc-gui/components/dashboard/TreeView.vue +++ b/packages/nc-gui/components/dashboard/TreeView.vue @@ -22,7 +22,7 @@ import { useTabs, useToggle, useUIPermission, - watchEffect + watchEffect, } from '#imports' import MdiView from '~icons/mdi/eye-circle-outline' import MdiTableLarge from '~icons/mdi/table-large' diff --git a/packages/nc-gui/components/smartsheet/column/QrCodeOptions.vue b/packages/nc-gui/components/smartsheet/column/QrCodeOptions.vue index b699866817..ecab893a65 100644 --- a/packages/nc-gui/components/smartsheet/column/QrCodeOptions.vue +++ b/packages/nc-gui/components/smartsheet/column/QrCodeOptions.vue @@ -25,9 +25,7 @@ const { setAdditionalValidations, validateInfos, column } = useColumnCreateStore const columnsAllowedAsQrValue = computed(() => { return fields.value ?.filter( - (el) => - el.fk_column_id && - AllowedColumnTypesForQrCode.includes(metaColumnById.value[el.fk_column_id].uidt as UITypes), + (el) => el.fk_column_id && AllowedColumnTypesForQrCode.includes(metaColumnById.value[el.fk_column_id].uidt as UITypes), ) .map((field) => { return { From c82f9bf3853910811667c43b0dd83612d0250942 Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Mon, 5 Dec 2022 19:34:53 +0800 Subject: [PATCH 19/41] fix(playwright): lint blocking --- tests/playwright/pages/Dashboard/index.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/tests/playwright/pages/Dashboard/index.ts b/tests/playwright/pages/Dashboard/index.ts index 847fac607f..bbfab4c6db 100644 --- a/tests/playwright/pages/Dashboard/index.ts +++ b/tests/playwright/pages/Dashboard/index.ts @@ -116,11 +116,9 @@ export class DashboardPage extends BasePage { if (mode === 'standard') { if (title === 'Team & Auth') { - await expect(this.rootPage).toHaveURL( - `/#/nc/${this.project.id}/auth` - ); + await expect(this.rootPage).toHaveURL(`/#/nc/${this.project.id}/auth`); } else { - await expect(this.rootPage).toHaveURL(new RegExp(`#\/nc\/${this.project.id}\/table\/md_.{14}`)); + await expect(this.rootPage).toHaveURL(new RegExp(`#/nc/${this.project.id}/table/md_.{14}`)); } } } From eb9c2ee2ba05f5b574d10ff7eec319ef8fd413ba Mon Sep 17 00:00:00 2001 From: Vibhav Bobade Date: Mon, 5 Dec 2022 20:02:25 +0530 Subject: [PATCH 20/41] Add other DBs to uffizzi preview --- .github/uffizzi/docker-compose.uffizzi.yml | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/.github/uffizzi/docker-compose.uffizzi.yml b/.github/uffizzi/docker-compose.uffizzi.yml index eb33d7d3e9..c900c3a5a4 100644 --- a/.github/uffizzi/docker-compose.uffizzi.yml +++ b/.github/uffizzi/docker-compose.uffizzi.yml @@ -6,13 +6,27 @@ x-uffizzi: port: 8080 services: - root_db: + postgres: image: postgres restart: always environment: POSTGRES_PASSWORD: password POSTGRES_USER: postgres POSTGRES_DB: root_db + mssql: + image: "mcr.microsoft.com/mssql/server:2017-latest" + restart: always + environment: + ACCEPT_EULA: "Y" + SA_PASSWORD: Password123. + mysql: + environment: + MYSQL_DATABASE: root_db + MYSQL_PASSWORD: password + MYSQL_ROOT_PASSWORD: password + MYSQL_USER: noco + image: "mysql:5.7" + restart: always nocodb: image: "${NOCODB_IMAGE}" ports: @@ -21,4 +35,4 @@ services: environment: NC_DB: "pg://localhost:5432?u=postgres&p=password&d=root_db" NC_ADMIN_EMAIL: admin@nocodb.com - NC_ADMIN_PASSWORD: password \ No newline at end of file + NC_ADMIN_PASSWORD: password From df92d5476e03e4093ec01dd780026eba08be3113 Mon Sep 17 00:00:00 2001 From: Vibhav Bobade Date: Mon, 5 Dec 2022 20:05:25 +0530 Subject: [PATCH 21/41] trigger preview --- packages/nocodb-sdk/.cspell.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/nocodb-sdk/.cspell.json b/packages/nocodb-sdk/.cspell.json index 59c785dd42..f122c09e5f 100644 --- a/packages/nocodb-sdk/.cspell.json +++ b/packages/nocodb-sdk/.cspell.json @@ -31,4 +31,4 @@ "tsconfig.json", "node_modules/**" ] -} +} From 247276e75530c381f0e9cf5a924f6e1d7108850f Mon Sep 17 00:00:00 2001 From: navi Date: Mon, 5 Dec 2022 16:16:43 +0000 Subject: [PATCH 22/41] New translations en.json (Japanese) --- packages/nc-gui/lang/ja.json | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/nc-gui/lang/ja.json b/packages/nc-gui/lang/ja.json index c07195ef1c..bac04c4881 100644 --- a/packages/nc-gui/lang/ja.json +++ b/packages/nc-gui/lang/ja.json @@ -16,7 +16,7 @@ "cancel": "キャンセル", "submit": "送信", "create": "作成", - "duplicate": "Duplicate", + "duplicate": "複製", "insert": "挿入", "delete": "削除", "update": "更新", @@ -56,22 +56,22 @@ "notification": "通知", "reference": "リファレンス", "function": "関数", - "confirm": "Confirm", - "generate": "Generate", - "copy": "Copy", + "confirm": "確認", + "generate": "生成", + "copy": "コピー", "misc": "Miscellaneous", "lock": "Lock", "unlock": "Unlock", "credentials": "Credentials", - "help": "Help", + "help": "ヘルプ", "questions": "Questions", "reachOut": "Reach out here", - "betaNote": "This feature is currently in beta.", + "betaNote": "この機能はまだベータ版です", "moreInfo": "More information can be found here", - "logs": "Logs", + "logs": "ログ", "groupingField": "Grouping Field", - "insertAfter": "Insert After", - "insertBefore": "Insert Before", + "insertAfter": "後に挿入", + "insertBefore": "前に挿入", "hideField": "Hide Field", "sortAsc": "Sort Ascending", "sortDesc": "Sort Descending" From 297b58dcb9428e20acabfe6c43dd9ef512354e5a Mon Sep 17 00:00:00 2001 From: mertmit Date: Mon, 5 Dec 2022 19:39:06 +0300 Subject: [PATCH 23/41] fix: typescript compile error Signed-off-by: mertmit --- packages/nocodb/src/lib/meta/helpers/extractProps.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/nocodb/src/lib/meta/helpers/extractProps.ts b/packages/nocodb/src/lib/meta/helpers/extractProps.ts index 426937d196..639891992c 100644 --- a/packages/nocodb/src/lib/meta/helpers/extractProps.ts +++ b/packages/nocodb/src/lib/meta/helpers/extractProps.ts @@ -1,6 +1,6 @@ import DOMPurify from 'isomorphic-dompurify'; -export function extractProps(body: T, props: string[]): Partial { +export function extractProps(body: T, props: string[]): Partial { // todo: throw error if no props found return props.reduce((o, key) => { if (key in body) o[key] = body[key]; @@ -8,7 +8,7 @@ export function extractProps(body: T, props: string[]): Partial { }, {}); } -export function extractPropsAndSanitize( +export function extractPropsAndSanitize( body: T, props: string[] ): Partial { From 947c2fd53fb928108ea1ba613f35b8efcdebc282 Mon Sep 17 00:00:00 2001 From: mertmit Date: Mon, 5 Dec 2022 21:52:01 +0300 Subject: [PATCH 24/41] fix: add useNullAsDefault flag for sqlite on root level Signed-off-by: mertmit --- .../nocodb/src/lib/db/sql-client/lib/sqlite/SqliteClient.ts | 2 ++ .../nocodb/src/lib/db/sql-data-mapper/lib/sql/CustomKnex.ts | 5 +++++ packages/nocodb/src/lib/meta/MetaAPILogger.ts | 1 - packages/nocodb/src/lib/meta/NcMetaIOImpl.ts | 4 ---- packages/nocodb/src/lib/meta/api/projectApis.ts | 1 - packages/nocodb/src/lib/utils/NcConfigFactory.ts | 2 -- 6 files changed, 7 insertions(+), 8 deletions(-) diff --git a/packages/nocodb/src/lib/db/sql-client/lib/sqlite/SqliteClient.ts b/packages/nocodb/src/lib/db/sql-client/lib/sqlite/SqliteClient.ts index 115e5e7d03..ccced13ce2 100644 --- a/packages/nocodb/src/lib/db/sql-client/lib/sqlite/SqliteClient.ts +++ b/packages/nocodb/src/lib/db/sql-client/lib/sqlite/SqliteClient.ts @@ -19,6 +19,8 @@ class SqliteClient extends KnexClient { private _version: any; constructor(connectionConfig) { + // sqlite does not support inserting default values and knex fires a warning without this flag + connectionConfig.connection.useNullAsDefault = true; super(connectionConfig); this.sqlClient = knex(connectionConfig.connection); this.queries = queries; diff --git a/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/CustomKnex.ts b/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/CustomKnex.ts index 526f954df6..b114d11526 100644 --- a/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/CustomKnex.ts +++ b/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/CustomKnex.ts @@ -988,6 +988,11 @@ function parseNestedCondition(obj, qb, pKey?, table?, tableAlias?) { type CustomKnex = Knex; function CustomKnex(arg: string | Knex.Config | any): CustomKnex { + // sqlite does not support inserting default values and knex fires a warning without this flag + if (arg?.client === 'sqlite3') { + arg.useNullAsDefault = true; + } + const kn: any = knex(arg); const knexRaw = kn.raw; diff --git a/packages/nocodb/src/lib/meta/MetaAPILogger.ts b/packages/nocodb/src/lib/meta/MetaAPILogger.ts index 8531e96c44..88aac02eec 100644 --- a/packages/nocodb/src/lib/meta/MetaAPILogger.ts +++ b/packages/nocodb/src/lib/meta/MetaAPILogger.ts @@ -11,7 +11,6 @@ export default class MetaAPILogger { connection: { filename: 'noco_log.db', }, - useNullAsDefault: true, }); } diff --git a/packages/nocodb/src/lib/meta/NcMetaIOImpl.ts b/packages/nocodb/src/lib/meta/NcMetaIOImpl.ts index e2b3e87a0c..578afa059f 100644 --- a/packages/nocodb/src/lib/meta/NcMetaIOImpl.ts +++ b/packages/nocodb/src/lib/meta/NcMetaIOImpl.ts @@ -77,10 +77,6 @@ export default class NcMetaIOImpl extends NcMetaIO { constructor(app: Noco, config: NcConfig, trx = null) { super(app, config); - if (this.config?.meta?.db?.client === 'sqlite3') { - this.config.meta.db.useNullAsDefault = true; - } - if (this.config?.meta?.db) { this.connection = trx || XKnex(this.config?.meta?.db); } else { diff --git a/packages/nocodb/src/lib/meta/api/projectApis.ts b/packages/nocodb/src/lib/meta/api/projectApis.ts index cafc073080..e2f07a1147 100644 --- a/packages/nocodb/src/lib/meta/api/projectApis.ts +++ b/packages/nocodb/src/lib/meta/api/projectApis.ts @@ -138,7 +138,6 @@ async function projectCreate(req: Request, res) { connection: { filename: `${toolDir}/nc_minimal_dbs/${projectTitle}_${dbId}.db`, }, - useNullAsDefault: true, }, }, inflection_column: 'camelize', diff --git a/packages/nocodb/src/lib/utils/NcConfigFactory.ts b/packages/nocodb/src/lib/utils/NcConfigFactory.ts index 75c7924475..7424b1b2ba 100644 --- a/packages/nocodb/src/lib/utils/NcConfigFactory.ts +++ b/packages/nocodb/src/lib/utils/NcConfigFactory.ts @@ -200,7 +200,6 @@ export default class NcConfigFactory implements NcConfig { }, database: url.searchParams.get('d') || url.searchParams.get('database'), - useNullAsDefault: true, }, } as any; } else { @@ -496,7 +495,6 @@ export default class NcConfigFactory implements NcConfig { connection: { ...dbConnectionConfig, database: dbConnectionConfig.connection.filename, - useNullAsDefault: true, }, }; } From 81f8a591e4a19c3ada1e89fade91f31aa7c31180 Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Tue, 6 Dec 2022 11:28:57 +0800 Subject: [PATCH 25/41] fix(nc-gui): parse string date if date is not null --- packages/nc-gui/components/template/Editor.vue | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/nc-gui/components/template/Editor.vue b/packages/nc-gui/components/template/Editor.vue index 21d92a40a4..770109fd9a 100644 --- a/packages/nc-gui/components/template/Editor.vue +++ b/packages/nc-gui/components/template/Editor.vue @@ -431,7 +431,9 @@ async function importTemplate() { input = null } } else if (v.uidt === UITypes.Date) { - input = parseStringDate(input, v.meta.date_format) + if (input) { + input = parseStringDate(input, v.meta.date_format) + } } res[col.destCn] = input } From 0c6becac7109f2fcdb00d0426cbf156486bc625e Mon Sep 17 00:00:00 2001 From: navi Date: Tue, 6 Dec 2022 04:28:14 +0000 Subject: [PATCH 26/41] New translations en.json (Japanese) --- packages/nc-gui/lang/ja.json | 274 +++++++++++++++++------------------ 1 file changed, 137 insertions(+), 137 deletions(-) diff --git a/packages/nc-gui/lang/ja.json b/packages/nc-gui/lang/ja.json index bac04c4881..a9cab22389 100644 --- a/packages/nc-gui/lang/ja.json +++ b/packages/nc-gui/lang/ja.json @@ -62,19 +62,19 @@ "misc": "Miscellaneous", "lock": "Lock", "unlock": "Unlock", - "credentials": "Credentials", + "credentials": "認証情報", "help": "ヘルプ", "questions": "Questions", "reachOut": "Reach out here", "betaNote": "この機能はまだベータ版です", "moreInfo": "More information can be found here", "logs": "ログ", - "groupingField": "Grouping Field", + "groupingField": "グループ フィールド", "insertAfter": "後に挿入", "insertBefore": "前に挿入", "hideField": "Hide Field", - "sortAsc": "Sort Ascending", - "sortDesc": "Sort Descending" + "sortAsc": "昇順", + "sortDesc": "降順" }, "objects": { "project": "プロジェクト", @@ -113,7 +113,7 @@ "orgLevelCreator": "Organization Level Creator", "orgLevelViewer": "Organization Level Viewer" }, - "sqlVIew": "SQL View" + "sqlVIew": "SQL ビュー" }, "datatype": { "ID": "ID", @@ -195,17 +195,17 @@ "headLogin": "ログイン | NocoDB", "resetPassword": "パスワードをリセットする", "teamAndSettings": "チームと設定", - "apiDocs": "API Docs", - "importFromAirtable": "Import From Airtable", - "generateToken": "Generate Token", + "apiDocs": "API ドキュメント", + "importFromAirtable": "Airtable からインポート", + "generateToken": "トークンを生成", "APIsAndSupport": "APIとサポート", - "helpCenter": "Help center", - "swaggerDocumentation": "Swagger Documentation", + "helpCenter": "ヘルプセンター", + "swaggerDocumentation": "Swagger ドキュメント", "quickImportFrom": "Quick Import From", "quickImport": "Quick Import", - "advancedSettings": "Advanced Settings", - "codeSnippet": "Code Snippet", - "keyboardShortcut": "Keyboard Shortcuts" + "advancedSettings": "詳細設定", + "codeSnippet": "コードスニペット", + "keyboardShortcut": "キーボードショートカット" }, "labels": { "createdBy": "Created By", @@ -226,7 +226,7 @@ "port": "ポート番号", "username": "ユーザー名", "password": "パスワード", - "schemaName": "Schema name", + "schemaName": "スキーマ名", "database": "データベース", "action": "アクション", "actions": "アクション", @@ -266,7 +266,7 @@ "bookDemo": "デモを予約", "getAnswered": "あなたの質問に回答しましょう", "joinDiscord": "Discord に参加", - "joinCommunity": "Join NocoDB Community", + "joinCommunity": "NocoDB のコミュニティに参加", "joinReddit": "/r/NocoDB に参加", "followNocodb": "NocoDB をフォロー" }, @@ -278,11 +278,11 @@ "onDelete": "削除中", "account": "アカウント", "language": "言語", - "primaryColor": "Primary Color", - "accentColor": "Accent Color", - "customTheme": "Custom Theme", + "primaryColor": "プライマリカラー", + "accentColor": "アクセントカラー", + "customTheme": "カスタムテーマ", "requestDataSource": "Request a data source you need?", - "apiKey": "API Key", + "apiKey": "API キー", "sharedBase": "Shared Base", "importData": "Import Data", "importSecondaryViews": "Import Secondary Views", @@ -290,25 +290,25 @@ "importLookupColumns": "Import Lookup Columns", "importAttachmentColumns": "Import Attachment Columns", "importFormulaColumns": "Import Formula Columns", - "noData": "No Data", - "goToDashboard": "Go to Dashboard", - "importing": "Importing", - "flattenNested": "Flatten Nested", + "noData": "データがありません", + "goToDashboard": "ダッシュボードに移動", + "importing": "インポート中", + "flattenNested": "入れ子を平坦化", "downloadAllowed": "ダウンロードを許可", "weAreHiring": "We are Hiring!", - "primaryKey": "Primary key", + "primaryKey": "プライマリーキー", "hasMany": "has many", "belongsTo": "belongs to", "manyToMany": "have many to many relation", "extraConnectionParameters": "Extra connection parameters", - "commentsOnly": "Comments only", - "documentation": "Documentation", - "subscribeNewsletter": "Subscribe to our weekly newsletter", - "signUpWithGoogle": "Sign up with Google", - "signInWithGoogle": "Sign in with Google", - "agreeToTos": "By signing up, you agree to the Terms of Service", - "welcomeToNc": "Welcome to NocoDB!", - "inviteOnlySignup": "Allow signup only using invite url" + "commentsOnly": "コメントのみ", + "documentation": "ドキュメント", + "subscribeNewsletter": "週刊ニュースレターを購読する", + "signUpWithGoogle": "Googleでログイン", + "signInWithGoogle": "Googleでログイン", + "agreeToTos": "サインアップすることで、利用規約に同意するものとみなされます。", + "welcomeToNc": "NocoDB へようこそ!", + "inviteOnlySignup": "招待URL からのサインアップのみ許可" }, "activity": { "createProject": "プロジェクトを作成", @@ -336,7 +336,7 @@ "translate": "翻訳に協力する", "account": { "authToken": "Auth Tokenをコピー", - "swagger": "Swagger: REST APIs", + "swagger": "Swagger: REST API", "projInfo": "プロジェクト情報をコピー", "themes": "テーマ" }, @@ -353,14 +353,14 @@ "invite": "招待", "inviteMore": "さらに招待", "inviteTeam": "チームへ招待", - "inviteUser": "Invite User", + "inviteUser": "ユーザーを招待", "inviteToken": "招待用トークン", "newUser": "ユーザーを作成", "editUser": "ユーザーを編集", "deleteUser": "プロジェクトからユーザーを削除", "resendInvite": "招待用メールを再送信", "copyInviteURL": "招待用 URL をコピー", - "copyPasswordResetURL": "Copy password reset URL", + "copyPasswordResetURL": "パスワードリセット URL をコピー", "newRole": "新しいロール", "reloadRoles": "ロールをリロード", "nextPage": "次のページ", @@ -376,13 +376,13 @@ "setPrimary": "プライマリ値として設定", "addRow": "行を追加", "saveRow": "行を保存", - "saveAndExit": "Save & Exit", - "saveAndStay": "Save & Stay", + "saveAndExit": "保存して終了", + "saveAndStay": "保存して続ける", "insertRow": "行を挿入", "deleteRow": "行を削除", "deleteSelectedRow": "選択行を削除", "importExcel": "エクセルファイルをインポート", - "importCSV": "Import CSV", + "importCSV": "CSV のインポート", "downloadCSV": "CSVをダウンロード", "downloadExcel": "XLSXをダウンロード", "uploadCSV": "CSVをアップロード", @@ -421,21 +421,21 @@ "editConnJson": "コネクション JSON を編集", "sponsorUs": "スポンサーになる", "sendEmail": "メールを送信", - "addUserToProject": "Add user to project", + "addUserToProject": "ユーザーをプロジェクトに追加", "getApiSnippet": "APIスニペットを取得", - "clearCell": "Clear cell", + "clearCell": "セルをクリア", "addFilterGroup": "フィルターグループを追加", - "linkRecord": "Link record", - "addNewRecord": "Add new record", - "useConnectionUrl": "Use Connection URL", + "linkRecord": "レコードをリンク", + "addNewRecord": "レコードを追加", + "useConnectionUrl": "接続 URL を使用", "toggleCommentsDraw": "Toggle comments draw", - "expandRecord": "Expand Record", - "deleteRecord": "Delete Record", + "expandRecord": "レコードを展開", + "deleteRecord": "レコードを削除", "erd": { - "showColumns": "Show Columns", - "showPkAndFk": "Show Primary and Foreign Keys", - "showSqlViews": "Show SQL Views", - "showMMTables": "Show Many to Many tables", + "showColumns": "列を表示", + "showPkAndFk": "プライマリキーと外部キーを表示", + "showSqlViews": "SQL ビューを表示", + "showMMTables": "多対多のテーブルを表示", "showJunctionTableNames": "Show Junction Table Names" }, "kanban": { @@ -492,20 +492,20 @@ "defaultValue": "デフォルト値", "filterByEmail": "メールアドレスでフィルタ", "filterQuery": "クエリを入力", - "selectField": "Select field" + "selectField": "フィールドを選択" }, "msg": { "warning": { "nonEditableFields": { - "computedFieldUnableToClear": "Warning: Computed field - unable to clear text", - "qrFieldsCannotBeDirectlyChanged": "Warning: QR fields cannot be directly changed." + "computedFieldUnableToClear": "警告: 計算フィールド - テキストをクリアできません", + "qrFieldsCannotBeDirectlyChanged": "警告:QRコードフィールドは直接変更できません。" } }, "info": { - "pasteNotSupported": "Paste operation is not supported on the active cell", + "pasteNotSupported": "現在アクティブなセルでは貼り付けはサポートされていません", "roles": { - "orgCreator": "Creator can create new projects and access any invited project.", - "orgViewer": "Viewer is not allowed to create new projects but they can access any invited project." + "orgCreator": "「作成者」は新しいプロジェクトを作成でき、かつ招待されたプロジェクトにもアクセスできます。", + "orgViewer": "ビューアーは新規プロジェクトを作成することはできませんが、招待されたプロジェクトにアクセスできます。" }, "footerInfo": "1ページあたりの行数", "upload": "アップロードするファイルを選択してください", @@ -600,29 +600,29 @@ "credentials": "Where to find this?" }, "import": { - "clickOrDrag": "Click or drag file to this area to upload" + "clickOrDrag": "この領域をクリック、またはファイルをドラッグしてアップロード" }, - "metaDataRecreated": "Table metadata recreated successfully", - "invalidCredentials": "Invalid credentials", + "metaDataRecreated": "テーブルメタデータを再作成しました", + "invalidCredentials": "不正な認証情報です", "downloadingMoreFiles": "Downloading more files", - "copiedToClipboard": "Copied to clipboard", - "requriedFieldsCantBeMoved": "Required field can't be moved", - "updateNotAllowedWithoutPK": "Update not allowed for table which doesn't have primary key", - "autoIncFieldNotEditable": "Auto increment field is not editable", - "editingPKnotSupported": "Editing primary key not supported", - "deletedCache": "Deleted cache successfully", - "cacheEmpty": "Cache is empty", - "exportedCache": "Exported Cache Successfully", - "valueAlreadyInList": "This value is already in the list", - "noColumnsToUpdate": "No columns to update", - "tableDeleted": "Deleted table successfully", + "copiedToClipboard": "クリップボードにコピーしました", + "requriedFieldsCantBeMoved": "必須フィールドは移動できません", + "updateNotAllowedWithoutPK": "プライマリキーを持たないテーブルは更新できません", + "autoIncFieldNotEditable": "オートインクリメントフィールドは編集できません", + "editingPKnotSupported": "プライマリキーは編集できません", + "deletedCache": "キャッシュをクリアしました", + "cacheEmpty": "キャッシュは空です", + "exportedCache": "キャッシュをエクスポートしました", + "valueAlreadyInList": "この値は既にリストにあります", + "noColumnsToUpdate": "更新するカラムはありません", + "tableDeleted": "テーブルを削除しました", "generatePublicShareableReadonlyBase": "Generate publicly shareable readonly base", - "deleteViewConfirmation": "Are you sure you want to delete this view?", - "deleteTableConfirmation": "Do you want to delete the table", + "deleteViewConfirmation": "このビューを本当に削除しますか?", + "deleteTableConfirmation": "テーブルを削除しますか?", "showM2mTables": "Show M2M Tables", "deleteKanbanStackConfirmation": "スタックを削除すると、`{stackToBeDeleted}`から選択肢`{groupingField}`も削除されます。レコードは未分類スタックに移動します。", - "computedFieldEditWarning": "Computed field: contents are read-only. Use column edit menu to reconfigure", - "computedFieldDeleteWarning": "Computed field: contents are read-only. Unable to clear content." + "computedFieldEditWarning": "計算フィールド: コンテンツは読み取り専用です。列編集メニューを使用して再設定してください。", + "computedFieldDeleteWarning": "計算フィールド: コンテンツは読み取り専用です。コンテンツを消去できません。" }, "error": { "searchProject": "{search} の検索結果が見つかりませんでした", @@ -638,53 +638,53 @@ "passwdRequired": "パスワードが必要です", "passwdLength": "パスワードは8文字以上にしてください", "passwdMismatch": "パスワードが一致していません", - "completeRuleSet": "At least 8 characters with one Uppercase, one number and one special character", - "atLeast8Char": "At least 8 characters", - "atLeastOneUppercase": "One Uppercase letter", - "atLeastOneNumber": "One Number", - "atLeastOneSpecialChar": "One special character", - "allowedSpecialCharList": "Allowed special character list" + "completeRuleSet": "英大文字、数字、記号をそれぞれ1文字以上含みかつ 8 文字以上", + "atLeast8Char": "8 文字以上", + "atLeastOneUppercase": "英大文字 1 文字", + "atLeastOneNumber": "数字 1 文字", + "atLeastOneSpecialChar": "記号 1 文字", + "allowedSpecialCharList": "利用できる記号の一覧" }, - "invalidURL": "Invalid URL", - "internalError": "Some internal error occurred", - "templateGeneratorNotFound": "Template Generator cannot be found!", - "fileUploadFailed": "Failed to upload file", - "primaryColumnUpdateFailed": "Failed to update primary column", - "formDescriptionTooLong": "Data too long for Form Description", - "columnsRequired": "Following columns are required", - "selectAtleastOneColumn": "At least one column has to be selected", - "columnDescriptionNotFound": "Cannot find the destination column for", + "invalidURL": "無効なURL", + "internalError": "内部エラーが発生しました", + "templateGeneratorNotFound": "テンプレートジェネレーターが見つかりません!", + "fileUploadFailed": "ファイルのアップロードに失敗しました", + "primaryColumnUpdateFailed": "プライマリカラムの更新に失敗しました", + "formDescriptionTooLong": "フォームの説明が長すぎます", + "columnsRequired": "以下のカラムが必要です", + "selectAtleastOneColumn": "少なくとも1つのカラムを選択してください", + "columnDescriptionNotFound": "次の宛先カラムが見つかりません:", "duplicateMappingFound": "Duplicate mapping found, please remove one of the mapping", "nullValueViolatesNotNull": "Null value violates not-null constraint", - "sourceHasInvalidNumbers": "Source data contains some invalid numbers", - "sourceHasInvalidBoolean": "Source data contains some invalid boolean values", + "sourceHasInvalidNumbers": "ソースデータに無効な数値が含まれています", + "sourceHasInvalidBoolean": "ソースデータに無効なブール値が含まれています", "invalidForm": "Invalid Form", - "formValidationFailed": "Form validation failed", - "youHaveBeenSignedOut": "You have been signed out", - "failedToLoadList": "Failed to load list", + "formValidationFailed": "入力内容に誤りがあります", + "youHaveBeenSignedOut": "サインアウトしました", + "failedToLoadList": "リストの読み込みに失敗しました", "failedToLoadChildrenList": "Failed to load children list", - "deleteFailed": "Delete failed", - "unlinkFailed": "Unlink failed", + "deleteFailed": "削除に失敗しました", + "unlinkFailed": "リンク解除に失敗しました", "rowUpdateFailed": "行の更新に失敗", "deleteRowFailed": "行の削除に失敗", "setFormDataFailed": "Failed to set form data", "formViewUpdateFailed": "Failed to update form view", - "tableNameRequired": "Table name is required", - "nameShouldStartWithAnAlphabetOr_": "Name should start with an alphabet or _", - "followingCharactersAreNotAllowed": "Following characters are not allowed", - "columnNameRequired": "Column name is required", - "projectNameExceeds50Characters": "Project name exceeds 50 characters", - "projectNameCannotStartWithSpace": "Project name cannot start with space", - "requiredField": "Required field", - "ipNotAllowed": "IP not allowed", + "tableNameRequired": "テーブル名が必要です", + "nameShouldStartWithAnAlphabetOr_": "名前はアルファベットまたは_で始まる必要があります", + "followingCharactersAreNotAllowed": "以下の文字種は使用できません", + "columnNameRequired": "列名が必要です", + "projectNameExceeds50Characters": "プロジェクト名が50文字を超えています", + "projectNameCannotStartWithSpace": "プロジェクト名の先頭にはスペースは利用できません", + "requiredField": "必須フィールド", + "ipNotAllowed": "IPアドレスが許可されていません", "targetFileIsNotAnAcceptedFileType": "Target file is not an accepted file type", "theAcceptedFileTypeIsCsv": "The accepted file type is .csv", "theAcceptedFileTypesAreXlsXlsxXlsmOdsOts": "The accepted file types are .xls, .xlsx, .xlsm, .ods, .ots", - "parameterKeyCannotBeEmpty": "Parameter key cannot be empty", - "duplicateParameterKeysAreNotAllowed": "Duplicate parameter keys are not allowed", - "fieldRequired": "{value} cannot be empty.", - "projectNotAccessible": "Project not accessible", - "copyToClipboardError": "Failed to copy to clipboard" + "parameterKeyCannotBeEmpty": "パラメータキーは空にできません", + "duplicateParameterKeysAreNotAllowed": "パラメータキーの重複は許可されていません", + "fieldRequired": "{value} を空にすることはできません。", + "projectNotAccessible": "このプロジェクトにはアクセスできません", + "copyToClipboardError": "クリップボードへのコピーに失敗しました" }, "toast": { "exportMetadata": "プロジェクトメタデータは正常にエクスポートされました", @@ -704,39 +704,39 @@ "futureRelease": "近日公開!" }, "success": { - "columnDuplicated": "Column duplicated successfully", - "updatedUIACL": "Updated UI ACL for tables successfully", - "pluginUninstalled": "Plugin uninstalled successfully", - "pluginSettingsSaved": "Plugin settings saved successfully", - "pluginTested": "Successfully tested plugin settings", - "tableRenamed": "Table renamed successfully", - "viewDeleted": "View deleted successfully", + "columnDuplicated": "カラムを複製しました", + "updatedUIACL": "テーブルの UI ACL を更新しました", + "pluginUninstalled": "プラグインをアンインストールしました", + "pluginSettingsSaved": "プラグインの設定を保存しました", + "pluginTested": "プラグイン設定のテストに成功しました", + "tableRenamed": "テーブル名を変更しました", + "viewDeleted": "ビューを削除しました", "primaryColumnUpdated": "Successfully updated as primary column", - "tableDataExported": "Successfully exported all table data", - "updated": "Successfully updated", - "sharedViewDeleted": "Deleted shared view successfully", - "userDeleted": "User deleted successfully", - "viewRenamed": "View renamed successfully", - "tokenGenerated": "Token generated successfully", - "tokenDeleted": "Token deleted successfully", - "userAddedToProject": "Successfully added user to project", - "userAdded": "Successfully added user", - "userDeletedFromProject": "Successfully deleted user from project", - "inviteEmailSent": "Invite Email sent successfully", - "inviteURLCopied": "Invite URL copied to clipboard", - "passwordResetURLCopied": "Password reset URL copied to clipboard", + "tableDataExported": "テーブルの全データをエクスポートしました", + "updated": "正常に更新されました", + "sharedViewDeleted": "共有ビューを削除しました", + "userDeleted": "ユーザを削除しました", + "viewRenamed": "ビュー名を変更しました", + "tokenGenerated": "トークンを生成しました", + "tokenDeleted": "トークンを削除しました", + "userAddedToProject": "プロジェクトにユーザーを追加しました", + "userAdded": "ユーザーを追加しました", + "userDeletedFromProject": "プロジェクトからユーザーを削除しました", + "inviteEmailSent": "招待メールを送信しました", + "inviteURLCopied": "招待 URL をクリップボードにコピーしました", + "passwordResetURLCopied": "パスワードリセット URL をクリップボードにコピーしました", "shareableURLCopied": "Copied shareable base URL to clipboard!", - "embeddableHTMLCodeCopied": "Copied embeddable HTML code!", - "userDetailsUpdated": "Successfully updated the user details", - "tableDataImported": "Successfully imported table data", - "webhookUpdated": "Webhook details updated successfully", + "embeddableHTMLCodeCopied": "埋め込み用 HTML をコピーしました", + "userDetailsUpdated": "ユーザーの詳細を更新しました", + "tableDataImported": "テーブルへデータをインポートしました", + "webhookUpdated": "Webhook の詳細を更新しました", "webhookDeleted": "Hook deleted successfully", - "webhookTested": "Webhook tested successfully", + "webhookTested": "Webhook のテストに成功しました", "columnUpdated": "列が更新されました", - "columnCreated": "Column created", - "passwordChanged": "Password changed successfully. Please login again.", - "settingsSaved": "Settings saved successfully", - "roleUpdated": "Role updated successfully" + "columnCreated": "列を作成しました", + "passwordChanged": "パスワードが変更されました。もう一度ログインしてください。", + "settingsSaved": "設定を保存しました", + "roleUpdated": "ロールを更新しました" } } } From acd3d3dd79cb16db12a871c6321faff0cd7df1fd Mon Sep 17 00:00:00 2001 From: Vibhav Bobade Date: Tue, 6 Dec 2022 12:53:10 +0530 Subject: [PATCH 27/41] revert mssql and mysql in uffizzi previews --- .github/uffizzi/docker-compose.uffizzi.yml | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/.github/uffizzi/docker-compose.uffizzi.yml b/.github/uffizzi/docker-compose.uffizzi.yml index c900c3a5a4..4232733013 100644 --- a/.github/uffizzi/docker-compose.uffizzi.yml +++ b/.github/uffizzi/docker-compose.uffizzi.yml @@ -13,20 +13,6 @@ services: POSTGRES_PASSWORD: password POSTGRES_USER: postgres POSTGRES_DB: root_db - mssql: - image: "mcr.microsoft.com/mssql/server:2017-latest" - restart: always - environment: - ACCEPT_EULA: "Y" - SA_PASSWORD: Password123. - mysql: - environment: - MYSQL_DATABASE: root_db - MYSQL_PASSWORD: password - MYSQL_ROOT_PASSWORD: password - MYSQL_USER: noco - image: "mysql:5.7" - restart: always nocodb: image: "${NOCODB_IMAGE}" ports: From 328184eb09b9dc7af1d1cea5f44a65810e64007e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 6 Dec 2022 16:03:38 +0000 Subject: [PATCH 28/41] chore(deps): bump qs from 6.10.1 to 6.11.0 in /packages/noco-docs Bumps [qs](https://github.com/ljharb/qs) from 6.10.1 to 6.11.0. - [Release notes](https://github.com/ljharb/qs/releases) - [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md) - [Commits](https://github.com/ljharb/qs/compare/v6.10.1...v6.11.0) --- updated-dependencies: - dependency-name: qs dependency-type: indirect ... Signed-off-by: dependabot[bot] --- packages/noco-docs/package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/noco-docs/package-lock.json b/packages/noco-docs/package-lock.json index 8d7e5b58a7..b649a13567 100644 --- a/packages/noco-docs/package-lock.json +++ b/packages/noco-docs/package-lock.json @@ -12676,9 +12676,9 @@ } }, "node_modules/qs": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", - "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "dependencies": { "side-channel": "^1.0.4" }, @@ -26779,9 +26779,9 @@ "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" }, "qs": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", - "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "requires": { "side-channel": "^1.0.4" } From 123562e934ae84700dea779128d0b619272081af Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 6 Dec 2022 16:20:59 +0000 Subject: [PATCH 29/41] chore(deps): bump qs and express in /packages/nc-cli Bumps [qs](https://github.com/ljharb/qs) to 6.11.0 and updates ancestor dependency [express](https://github.com/expressjs/express). These dependencies need to be updated together. Updates `qs` from 6.9.6 to 6.11.0 - [Release notes](https://github.com/ljharb/qs/releases) - [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md) - [Commits](https://github.com/ljharb/qs/compare/v6.9.6...v6.11.0) Updates `express` from 4.17.2 to 4.18.2 - [Release notes](https://github.com/expressjs/express/releases) - [Changelog](https://github.com/expressjs/express/blob/master/History.md) - [Commits](https://github.com/expressjs/express/compare/4.17.2...4.18.2) --- updated-dependencies: - dependency-name: qs dependency-type: indirect - dependency-name: express dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- packages/nc-cli/package-lock.json | 410 +++++++++++++++--------------- packages/nc-cli/package.json | 2 +- 2 files changed, 203 insertions(+), 209 deletions(-) diff --git a/packages/nc-cli/package-lock.json b/packages/nc-cli/package-lock.json index bdcd528f31..efb0fac26f 100644 --- a/packages/nc-cli/package-lock.json +++ b/packages/nc-cli/package-lock.json @@ -16,7 +16,7 @@ "colors": "1.4.0", "download": "^8.0.0", "download-git-repo": "^3.0.2", - "express": "^4.17.1", + "express": "^4.18.2", "fs-extra": "^9.0.1", "glob": "^7.1.6", "inquirer": "^7.3.3", @@ -1208,12 +1208,12 @@ } }, "node_modules/accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dependencies": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" }, "engines": { "node": ">= 0.6" @@ -2292,23 +2292,26 @@ "dev": true }, "node_modules/body-parser": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.1.tgz", - "integrity": "sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA==", + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", "dependencies": { - "bytes": "3.1.1", + "bytes": "3.1.2", "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.8.1", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.9.6", - "raw-body": "2.4.2", - "type-is": "~1.6.18" + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, "node_modules/body-parser/node_modules/debug": { @@ -2322,7 +2325,7 @@ "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/boxen": { "version": "4.2.0", @@ -2488,9 +2491,9 @@ } }, "node_modules/bytes": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", - "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "engines": { "node": ">= 0.8" } @@ -2611,7 +2614,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, "dependencies": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -4321,9 +4323,9 @@ } }, "node_modules/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", "engines": { "node": ">= 0.6" } @@ -4884,17 +4886,21 @@ } }, "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } }, "node_modules/detect-file": { "version": "1.0.0", @@ -5179,7 +5185,7 @@ "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { "version": "1.4.38", @@ -5229,7 +5235,7 @@ "node_modules/encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "engines": { "node": ">= 0.8" } @@ -5381,7 +5387,7 @@ "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, "node_modules/escape-string-regexp": { "version": "2.0.0", @@ -5476,7 +5482,7 @@ "node_modules/etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "engines": { "node": ">= 0.6" } @@ -5736,37 +5742,38 @@ } }, "node_modules/express": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.2.tgz", - "integrity": "sha512-oxlxJxcQlYwqPWKVJJtvQiwHgosH/LrLSPA+H4UxpyvSS6jC5aH+5MoHFM+KABgTOt0APue4w66Ha8jCUo9QGg==", + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", "dependencies": { - "accepts": "~1.3.7", + "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.19.1", + "body-parser": "1.20.1", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.4.1", + "cookie": "0.5.0", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "~1.1.2", + "depd": "2.0.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "~1.1.2", + "finalhandler": "1.2.0", "fresh": "0.5.2", + "http-errors": "2.0.0", "merge-descriptors": "1.0.1", "methods": "~1.1.2", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", "proxy-addr": "~2.0.7", - "qs": "6.9.6", + "qs": "6.11.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.17.2", - "serve-static": "1.14.2", + "send": "0.18.0", + "serve-static": "1.15.0", "setprototypeof": "1.2.0", - "statuses": "~1.5.0", + "statuses": "2.0.1", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" @@ -6083,16 +6090,16 @@ } }, "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "parseurl": "~1.3.3", - "statuses": "~1.5.0", + "statuses": "2.0.1", "unpipe": "~1.0.0" }, "engines": { @@ -6110,7 +6117,7 @@ "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/find-cache-dir": { "version": "2.1.0", @@ -6495,7 +6502,7 @@ "node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "engines": { "node": ">= 0.6" } @@ -6585,7 +6592,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -7368,7 +7374,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true, "engines": { "node": ">= 0.4" }, @@ -7520,18 +7525,18 @@ "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==" }, "node_modules/http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dependencies": { - "depd": "~1.1.2", + "depd": "2.0.0", "inherits": "2.0.4", "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", + "statuses": "2.0.1", "toidentifier": "1.0.1" }, "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/http-proxy-agent": { @@ -9270,7 +9275,7 @@ "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "engines": { "node": ">= 0.6" } @@ -9664,9 +9669,9 @@ "integrity": "sha1-eJkHjmS/PIo9cyYBs9QP8F21j6A=" }, "node_modules/negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "engines": { "node": ">= 0.6" } @@ -10179,7 +10184,6 @@ "version": "1.12.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -10289,9 +10293,9 @@ } }, "node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dependencies": { "ee-first": "1.1.1" }, @@ -11306,9 +11310,12 @@ } }, "node_modules/qs": { - "version": "6.9.6", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz", - "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, "engines": { "node": ">=0.6" }, @@ -11376,12 +11383,12 @@ } }, "node_modules/raw-body": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz", - "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "dependencies": { - "bytes": "3.1.1", - "http-errors": "1.8.1", + "bytes": "3.1.2", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" }, @@ -12009,23 +12016,23 @@ } }, "node_modules/send": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", - "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "dependencies": { "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", + "depd": "2.0.0", + "destroy": "1.2.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "1.8.1", + "http-errors": "2.0.0", "mime": "1.6.0", "ms": "2.1.3", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "range-parser": "~1.2.1", - "statuses": "~1.5.0" + "statuses": "2.0.1" }, "engines": { "node": ">= 0.8.0" @@ -12042,7 +12049,7 @@ "node_modules/send/node_modules/debug/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/serialize-error": { "version": "2.1.0", @@ -12054,14 +12061,14 @@ } }, "node_modules/serve-static": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", - "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "dependencies": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.17.2" + "send": "0.18.0" }, "engines": { "node": ">= 0.8.0" @@ -12188,7 +12195,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, "dependencies": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -13039,11 +13045,11 @@ } }, "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/stream-events": { @@ -13445,14 +13451,6 @@ "readable-stream": "^3.0.1" } }, - "node_modules/tedious/node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/tedious/node_modules/iconv-lite": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.2.tgz", @@ -14776,7 +14774,7 @@ "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "engines": { "node": ">= 0.8" } @@ -16443,12 +16441,12 @@ } }, "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" } }, "acorn": { @@ -17297,20 +17295,22 @@ "dev": true }, "body-parser": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.1.tgz", - "integrity": "sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA==", + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", "requires": { - "bytes": "3.1.1", + "bytes": "3.1.2", "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.8.1", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.9.6", - "raw-body": "2.4.2", - "type-is": "~1.6.18" + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, "dependencies": { "debug": { @@ -17324,7 +17324,7 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" } } }, @@ -17446,9 +17446,9 @@ "dev": true }, "bytes": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", - "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==" + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" }, "cache-base": { "version": "1.0.1", @@ -17549,7 +17549,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, "requires": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -18865,9 +18864,9 @@ "dev": true }, "cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" }, "cookie-signature": { "version": "1.0.6", @@ -19309,14 +19308,14 @@ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" }, "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" }, "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" }, "detect-file": { "version": "1.0.0", @@ -19535,7 +19534,7 @@ "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "electron-to-chromium": { "version": "1.4.38", @@ -19579,7 +19578,7 @@ "encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" }, "end-of-stream": { "version": "1.4.4", @@ -19695,7 +19694,7 @@ "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, "escape-string-regexp": { "version": "2.0.0", @@ -19767,7 +19766,7 @@ "etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" }, "event-target-shim": { "version": "5.0.1", @@ -19957,37 +19956,38 @@ } }, "express": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.2.tgz", - "integrity": "sha512-oxlxJxcQlYwqPWKVJJtvQiwHgosH/LrLSPA+H4UxpyvSS6jC5aH+5MoHFM+KABgTOt0APue4w66Ha8jCUo9QGg==", + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", "requires": { - "accepts": "~1.3.7", + "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.19.1", + "body-parser": "1.20.1", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.4.1", + "cookie": "0.5.0", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "~1.1.2", + "depd": "2.0.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "~1.1.2", + "finalhandler": "1.2.0", "fresh": "0.5.2", + "http-errors": "2.0.0", "merge-descriptors": "1.0.1", "methods": "~1.1.2", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", "proxy-addr": "~2.0.7", - "qs": "6.9.6", + "qs": "6.11.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.17.2", - "serve-static": "1.14.2", + "send": "0.18.0", + "serve-static": "1.15.0", "setprototypeof": "1.2.0", - "statuses": "~1.5.0", + "statuses": "2.0.1", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" @@ -20237,16 +20237,16 @@ } }, "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "requires": { "debug": "2.6.9", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "parseurl": "~1.3.3", - "statuses": "~1.5.0", + "statuses": "2.0.1", "unpipe": "~1.0.0" }, "dependencies": { @@ -20261,7 +20261,7 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" } } }, @@ -20561,7 +20561,7 @@ "fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" }, "from2": { "version": "2.3.0", @@ -20629,7 +20629,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -21229,8 +21228,7 @@ "has-symbols": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" }, "has-to-string-tag-x": { "version": "1.4.1", @@ -21342,14 +21340,14 @@ "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==" }, "http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "requires": { - "depd": "~1.1.2", + "depd": "2.0.0", "inherits": "2.0.4", "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", + "statuses": "2.0.1", "toidentifier": "1.0.1" } }, @@ -22626,7 +22624,7 @@ "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" }, "mem": { "version": "5.1.1", @@ -22929,9 +22927,9 @@ "integrity": "sha1-eJkHjmS/PIo9cyYBs9QP8F21j6A=" }, "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" }, "neo-async": { "version": "2.6.2", @@ -23343,8 +23341,7 @@ "object-inspect": { "version": "1.12.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", - "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", - "dev": true + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==" }, "object-is": { "version": "1.1.5", @@ -23421,9 +23418,9 @@ } }, "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "requires": { "ee-first": "1.1.1" } @@ -24164,9 +24161,12 @@ "dev": true }, "qs": { - "version": "6.9.6", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz", - "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==" + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "requires": { + "side-channel": "^1.0.4" + } }, "query-string": { "version": "5.1.1", @@ -24205,12 +24205,12 @@ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" }, "raw-body": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz", - "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "requires": { - "bytes": "3.1.1", - "http-errors": "1.8.1", + "bytes": "3.1.2", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" } @@ -24682,23 +24682,23 @@ } }, "send": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", - "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "requires": { "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", + "depd": "2.0.0", + "destroy": "1.2.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "1.8.1", + "http-errors": "2.0.0", "mime": "1.6.0", "ms": "2.1.3", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "range-parser": "~1.2.1", - "statuses": "~1.5.0" + "statuses": "2.0.1" }, "dependencies": { "debug": { @@ -24712,7 +24712,7 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" } } } @@ -24725,14 +24725,14 @@ "dev": true }, "serve-static": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", - "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "requires": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.17.2" + "send": "0.18.0" } }, "set-blocking": { @@ -24830,7 +24830,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, "requires": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -25517,9 +25516,9 @@ } }, "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" }, "stream-events": { "version": "1.0.5", @@ -25827,11 +25826,6 @@ "readable-stream": "^3.0.1" } }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - }, "iconv-lite": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.2.tgz", @@ -26806,7 +26800,7 @@ "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" }, "unset-value": { "version": "1.0.0", diff --git a/packages/nc-cli/package.json b/packages/nc-cli/package.json index cceabe8ed3..6f7eef8141 100644 --- a/packages/nc-cli/package.json +++ b/packages/nc-cli/package.json @@ -73,7 +73,7 @@ "colors": "1.4.0", "download": "^8.0.0", "download-git-repo": "^3.0.2", - "express": "^4.17.1", + "express": "^4.18.2", "fs-extra": "^9.0.1", "glob": "^7.1.6", "inquirer": "^7.3.3", From b6af22d34595566f719b73245f0eedc910fb6e50 Mon Sep 17 00:00:00 2001 From: William Stein Date: Tue, 6 Dec 2022 10:55:13 -0800 Subject: [PATCH 30/41] fix trivial typos in a README --- packages/nocodb/README.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/packages/nocodb/README.md b/packages/nocodb/README.md index b348b6d25c..7318eee241 100644 --- a/packages/nocodb/README.md +++ b/packages/nocodb/README.md @@ -4,19 +4,18 @@ Even though this package is a backend project, you can still visit the dashboard as it includes ``nc-lib-gui``. -``` - +```sh npm install npm run watch:run # open localhost:8080/dashboard in browser ``` -As ``nc-lib-gui`` is hosted in npm registry, for local development, you should run ``nc-gui`` separately. +As ``nc-lib-gui`` is hosted in the npm registry, for local development, you should run ``nc-gui`` separately. -If you wish to combine the frontend and backend together in your local devlopment environment, you may use ``packages/nc-lib-gui`` as a local depenedency by updating the ``packages/nocodb/package.json`` to +If you wish to combine the frontend and backend together in your local development environment, you may use ``packages/nc-lib-gui`` as a local dependency by updating the ``packages/nocodb/package.json`` to ```json "nc-lib-gui": "file:../nc-lib-gui" ``` -In this case, whenever there is any changes made in frontend, you need to run ``npm run build:copy`` under ``packages/nc-gui/``. +In this case, whenever there are any changes made in the frontend, you need to run ``npm run build:copy`` under ``packages/nc-gui/``. From 76bbd5eafda00e645bc1efc63fc3e01d69ddbb0b Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Wed, 7 Dec 2022 11:36:29 +0800 Subject: [PATCH 31/41] chore(nc-gui): remove non-general shortcut $e --- packages/nc-gui/components/smartsheet/Grid.vue | 4 ---- 1 file changed, 4 deletions(-) diff --git a/packages/nc-gui/components/smartsheet/Grid.vue b/packages/nc-gui/components/smartsheet/Grid.vue index 0243f4613e..0bcddde8d4 100644 --- a/packages/nc-gui/components/smartsheet/Grid.vue +++ b/packages/nc-gui/components/smartsheet/Grid.vue @@ -227,7 +227,6 @@ const { selectCell, startSelectRange, endSelectRange, clearSelectedRange, copyVa switch (e.key) { case 'ArrowUp': e.preventDefault() - $e('c:shortcut', { key: 'CTRL + ArrowUp' }) selectedCell.row = 0 selectedCell.col = selectedCell.col ?? 0 scrollToCell?.() @@ -235,7 +234,6 @@ const { selectCell, startSelectRange, endSelectRange, clearSelectedRange, copyVa return true case 'ArrowDown': e.preventDefault() - $e('c:shortcut', { key: 'CTRL + ArrowDown' }) selectedCell.row = data.value.length - 1 selectedCell.col = selectedCell.col ?? 0 scrollToCell?.() @@ -243,7 +241,6 @@ const { selectCell, startSelectRange, endSelectRange, clearSelectedRange, copyVa return true case 'ArrowRight': e.preventDefault() - $e('c:shortcut', { key: 'CTRL + ArrowRight' }) selectedCell.row = selectedCell.row ?? 0 selectedCell.col = fields.value?.length - 1 scrollToCell?.() @@ -251,7 +248,6 @@ const { selectCell, startSelectRange, endSelectRange, clearSelectedRange, copyVa return true case 'ArrowLeft': e.preventDefault() - $e('c:shortcut', { key: 'CTRL + ArrowLeft' }) selectedCell.row = selectedCell.row ?? 0 selectedCell.col = 0 scrollToCell?.() From e47082b060d5a91dc872d19697aa59d16713be09 Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Wed, 7 Dec 2022 17:29:32 +0800 Subject: [PATCH 32/41] docs: remove heroku info --- README.md | 25 ------------ markdown/readme/languages/chinese.md | 15 ------- markdown/readme/languages/dutch.md | 11 ----- markdown/readme/languages/french.md | 11 ----- markdown/readme/languages/german.md | 13 ------ markdown/readme/languages/indonesian.md | 13 ------ markdown/readme/languages/italian.md | 11 ----- markdown/readme/languages/japanese.md | 13 ------ markdown/readme/languages/korean.md | 13 ------ markdown/readme/languages/portuguese.md | 13 ------ markdown/readme/languages/russian.md | 13 ------ markdown/readme/languages/spanish.md | 13 ------ .../en/getting-started/installation.md | 20 +--------- .../content/en/getting-started/upgrading.md | 40 +------------------ 14 files changed, 3 insertions(+), 221 deletions(-) diff --git a/README.md b/README.md index d96964efb8..b4dc25ff27 100644 --- a/README.md +++ b/README.md @@ -33,16 +33,6 @@ Turns any MySQL, PostgreSQL, SQL Server, SQLite & MariaDB into a smart-spreadshe ![All Views](https://user-images.githubusercontent.com/35857179/194825053-3aa3373d-3e0f-4b42-b3f1-42928332054a.gif) -

- - Deploy NocoDB to Heroku with 1-Click - -

-
[](markdown/readme/languages/chinese.md) @@ -80,20 +70,6 @@ Turns any MySQL, PostgreSQL, SQL Server, SQLite & MariaDB into a smart-spreadshe # Quick try -## 1-Click Deploy to Heroku - -Before doing so, make sure you have a Heroku account. By default, an add-on Heroku Postgres will be used as meta database. You can see the connection string defined in `DATABASE_URL` by navigating to Heroku App Settings and selecting Config Vars. - - - Deploy NocoDB to Heroku with 1-Click - - -
- ## NPX You can run below command if you need an interactive configuration. @@ -226,7 +202,6 @@ Access Dashboard using : [http://localhost:8080/dashboard](http://localhost:8080 # Table of Contents - [Quick try](#quick-try) - * [1-Click Deploy to Heroku](#1-click-deploy-to-heroku) * [NPX](#npx) * [Node Application](#node-application) * [Docker](#docker) diff --git a/markdown/readme/languages/chinese.md b/markdown/readme/languages/chinese.md index f8814e2f7d..3880ac417e 100644 --- a/markdown/readme/languages/chinese.md +++ b/markdown/readme/languages/chinese.md @@ -33,21 +33,6 @@ # 快速尝试 -### 一键部署 - -在部署之前,请确保你有一个 Heroku 账户。默认情况下,将使用一个附加的 Heroku Postgres 作为数据库。你可以通过访问 Heroku 应用程序设置并选择 Config Vars 来查看 DATABASE_URL 中定义的连接方式。 - -#### Heroku - - - 一键部署 NocoDB 到 Heroku - -
- ## NPX 如果你需要一个交互式的配置,你可以运行下面的命令。 diff --git a/markdown/readme/languages/dutch.md b/markdown/readme/languages/dutch.md index 6a0e2f6bca..479ea75f27 100644 --- a/markdown/readme/languages/dutch.md +++ b/markdown/readme/languages/dutch.md @@ -36,17 +36,6 @@ Draait elke MySQL, PostgreSQL, SQL Server, SQLITE & MARIADB in een Smart-Spreads ### 1-Click Deploy -#### Heroku - - - Deploy NocoDB to Heroku with 1-Click - -
- ### Docker gebruiken ```bash diff --git a/markdown/readme/languages/french.md b/markdown/readme/languages/french.md index 2c5dda6dd0..98cecdbca5 100644 --- a/markdown/readme/languages/french.md +++ b/markdown/readme/languages/french.md @@ -36,17 +36,6 @@ Transformez n'importe quel MySQL, PostgreSQL, SQL Server, SQLite & Mariadb en un # Essayez rapidement ### Déploiement en 1 Clic -#### Heroku -Avant de le faire, assurez-vous que vous avez un compte Heroku. Par défaut, un add-on Heroku Postgres sera utilisé comme meta database. Vous pouvez voir la string pour se connecter définie en tant que `DATABASE_URL` en naviguant dans Heroku App Settings et en sélectionnant Config Vars. - - Deploy NocoDB to Heroku with 1-Click - -
- ### Utilisez Docker ```bash docker run -d --name nocodb -p 8080:8080 nocodb/nocodb:latest diff --git a/markdown/readme/languages/german.md b/markdown/readme/languages/german.md index 3ead650a12..2784eb794e 100644 --- a/markdown/readme/languages/german.md +++ b/markdown/readme/languages/german.md @@ -34,19 +34,6 @@ Verwandelt jeden MySQL, PostgreSQL, SQL Server, SQLite & MariaDB in eine Smart-T # Schneller Versuch -### 1-Klick-Bereitstellung - -#### Heroku - - - Deploy NocoDB to Heroku with 1-Click - -
- ### Verwenden von Docker ```bash diff --git a/markdown/readme/languages/indonesian.md b/markdown/readme/languages/indonesian.md index 1e5e289f4e..db92fd3bc9 100644 --- a/markdown/readme/languages/indonesian.md +++ b/markdown/readme/languages/indonesian.md @@ -34,19 +34,6 @@ Mengubah MySQL, PostgreSQL, SQL Server, SQLite & MariaDB apapun menjadi spreadsh # Mulai Cepat -### 1-Klik Deploy - -#### Heroku - - - Deploy NocoDB to Heroku with 1-Click - -
- ### Menggunakan Docker ```bash diff --git a/markdown/readme/languages/italian.md b/markdown/readme/languages/italian.md index a5321b98a4..bcbd745cb9 100644 --- a/markdown/readme/languages/italian.md +++ b/markdown/readme/languages/italian.md @@ -35,17 +35,6 @@ Trasforma qualsiasi MySQL, PostgreSQL, SQL Server, SQLite & Mariadb in un foglio ### 1-Click Deploy -#### Heroku - - - Deploy NocoDB to Heroku with 1-Click - -
- ### Con Docker ```bash diff --git a/markdown/readme/languages/japanese.md b/markdown/readme/languages/japanese.md index 97c465b1e2..9f5dc2dd4c 100644 --- a/markdown/readme/languages/japanese.md +++ b/markdown/readme/languages/japanese.md @@ -34,19 +34,6 @@ MySQL、PostgreSQL、SQL Server、SQLite&Mariadbをスマートスプレッド # クイック試し -### 1-Click Deploy - -#### Heroku - - - Deploy NocoDB to Heroku with 1-Click - -
- ### Docker を使う ```bash diff --git a/markdown/readme/languages/korean.md b/markdown/readme/languages/korean.md index fc4d43340c..0e87dfd4dc 100644 --- a/markdown/readme/languages/korean.md +++ b/markdown/readme/languages/korean.md @@ -34,19 +34,6 @@ MySQL, PostgreSQL, SQL Server, SQLite, MariaDB를 똑똑한 스프레드시트 # 바로 써보기 -### 원클릭 배포 - -#### Heroku - - - NocoDB를 Heroku에 원클릭 배포하기 - -
- ### Docker 사용 ```bash diff --git a/markdown/readme/languages/portuguese.md b/markdown/readme/languages/portuguese.md index f63554eea6..e643bcc0d6 100644 --- a/markdown/readme/languages/portuguese.md +++ b/markdown/readme/languages/portuguese.md @@ -34,19 +34,6 @@ Transforma qualquer MySQL, PostgreSQL, SQL Server, Sqlite e MariaDB em uma plani # Experimente rápida -### 1-Click Deploy - -#### Heroku - - - Deploy NocoDB to Heroku with 1-Click - -
- ### Usando o Docker. ```bash diff --git a/markdown/readme/languages/russian.md b/markdown/readme/languages/russian.md index 038c56bf28..51aa48597b 100644 --- a/markdown/readme/languages/russian.md +++ b/markdown/readme/languages/russian.md @@ -34,19 +34,6 @@ # Быстрый старт -### 1-Нажмите на Deploy - -#### Heroku - - - Deploy NocoDB to Heroku with 1-Click - -
- ### Используя Docker ```bash diff --git a/markdown/readme/languages/spanish.md b/markdown/readme/languages/spanish.md index 04d8068c6b..d70f3ba6b1 100644 --- a/markdown/readme/languages/spanish.md +++ b/markdown/readme/languages/spanish.md @@ -34,19 +34,6 @@ Convierte cualquier MySQL, PostgreSQL, SQL Server, SQLite y Mariadb en una hoja # Prueba rápida -### Implementación en 1-Click - -#### Heroku - - - Deploy NocoDB to Heroku with 1-Click - -
- ### Usando docker ```bash diff --git a/packages/noco-docs/content/en/getting-started/installation.md b/packages/noco-docs/content/en/getting-started/installation.md index f019870064..a23eb4fcaa 100644 --- a/packages/noco-docs/content/en/getting-started/installation.md +++ b/packages/noco-docs/content/en/getting-started/installation.md @@ -14,18 +14,6 @@ Simple installation - takes about three minutes! ## Quick try -### Heroku - -Before doing so, make sure you have a Heroku account. By default, an add-on Heroku Postgres will be used as meta database. You can see the connection string defined in `DATABASE_URL` by navigating to Heroku App Settings and selecting Config Vars. - - - Deploy NocoDB to Heroku with 1-Click - - ### Docker If you are a Docker user, you may try this way! @@ -466,7 +454,7 @@ It is mandatory to configure `NC_DB` environment variables for production usecas | NC_DB | Yes | See our database URLs | A local SQLite will be created in root folder | | | NC_DB_JSON | Yes | Can be used instead of `NC_DB` and value should be valid knex connection JSON | | | | NC_DB_JSON_FILE | Yes | Can be used instead of `NC_DB` and value should be a valid path to knex connection JSON | | | -| DATABASE_URL | No | JDBC URL Format. Can be used instead of NC_DB. Used in 1-Click Heroku deployment | | | +| DATABASE_URL | No | JDBC URL Format. Can be used instead of NC_DB. | | | | DATABASE_URL_FILE | No | Can be used instead of DATABASE_URL: path to file containing JDBC URL Format. | | | | NC_AUTH_JWT_SECRET | Yes | JWT secret used for auth and storing other secrets | A Random secret will be generated | | | PORT | No | For setting app running port | `8080` | | @@ -486,7 +474,6 @@ It is mandatory to configure `NC_DB` environment variables for production usecas | NC_GOOGLE_CLIENT_ID | No | Google client id to enable google authentication | | | | NC_GOOGLE_CLIENT_SECRET | No | Google client secret to enable google authentication | | | | NC_MIGRATIONS_DISABLED | No | Disable NocoDB migration | | | -| NC_ONE_CLICK | No | Used for Heroku one-click deployment | | | | NC_MIN | No | If set to any non-empty string the default splash screen(initial welcome animation) and matrix screensaver will disable | | | | NC_SENTRY_DSN | No | For Sentry monitoring | | | | NC_REDIS_URL | No | Custom Redis URL. Example: `redis://:authpassword@127.0.0.1:6380/4` | Meta data will be stored in memory | | @@ -526,7 +513,4 @@ It is mandatory to configure `NC_DB` environment variables for production usecas ### Using NPX - - -### Heroku Deployment - + \ No newline at end of file diff --git a/packages/noco-docs/content/en/getting-started/upgrading.md b/packages/noco-docs/content/en/getting-started/upgrading.md index e1f6d75685..84b628abb9 100644 --- a/packages/noco-docs/content/en/getting-started/upgrading.md +++ b/packages/noco-docs/content/en/getting-started/upgrading.md @@ -1,6 +1,6 @@ --- title: 'Upgrading' -description: 'Upgrading NocoDB : Docker, Node, Heroku and Homebrew!' +description: 'Upgrading NocoDB : Docker, Node and Homebrew!' position: 20 category: 'Getting started' menuTitle: 'Upgrading' @@ -60,44 +60,6 @@ npm uninstall nocodb npm install --save nocodb ``` -## Heroku - -### Using the Heroku CLI login - -```bash -heroku container:login -docker pull nocodb/nocodb:latest -docker tag nocodb/nocodb:latest registry.heroku.com//web -docker push registry.heroku.com//web -heroku container:release -a web -``` - -#### On Apple M1 Chipset - -> Please make sure you change Docker's default architecture to `linux/amd64` by running the following command _before_ executing the aforementioned steps -> -> ```export DOCKER_DEFAULT_PLATFORM=linux/amd64``` -> -> More details can be found [here](https://medium.com/geekculture/from-apple-silicon-to-heroku-docker-registry-without-swearing-36a2f59b30a3). - -### Using GitHub - -Fork the [nocodb-seed-heroku repository](https://github.com/nocodb/nocodb-seed-heroku) to your GitHub account. -Login to Heroku, go to your NocoDB app, and head to the "Deploy" tab. -Select "GitHub" in the "Deployment method" section. - -In the "Connect to GitHub" section, search for your forked nocodb-seed-heroku repo. Connect to it: - -![image](https://user-images.githubusercontent.com/55474996/143479577-e8bdc1f0-99d1-4072-8d95-4879cc54ddb2.png) - -In the "Automatic deploys" section, select "Enable Automatic Deploys": - -![image](https://user-images.githubusercontent.com/55474996/143479705-b5280199-aa31-40db-a5aa-7586eb918c01.png) - -Head back to your forked nocodb-seed-heroku repo on your GitHub account. Edit one of your files and make a simple modification (example, add some random characters to the readme.md) and commit the change directly to the main branch. - -This will trigger the Heroku deployment. Your app should now be updated to the latest release of NocoDB. - ## Homebrew Run following commands to upgrade Homebrew Nocodb version. From 552352e830206dd768b688f4df065777d9bce912 Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Wed, 7 Dec 2022 17:41:09 +0800 Subject: [PATCH 33/41] docs: remove 1-click deploy title --- markdown/readme/languages/dutch.md | 2 -- markdown/readme/languages/french.md | 1 - markdown/readme/languages/italian.md | 3 +-- 3 files changed, 1 insertion(+), 5 deletions(-) diff --git a/markdown/readme/languages/dutch.md b/markdown/readme/languages/dutch.md index 479ea75f27..ed45c20743 100644 --- a/markdown/readme/languages/dutch.md +++ b/markdown/readme/languages/dutch.md @@ -34,8 +34,6 @@ Draait elke MySQL, PostgreSQL, SQL Server, SQLITE & MARIADB in een Smart-Spreads # Snel proberen -### 1-Click Deploy - ### Docker gebruiken ```bash diff --git a/markdown/readme/languages/french.md b/markdown/readme/languages/french.md index 98cecdbca5..cce007c8c8 100644 --- a/markdown/readme/languages/french.md +++ b/markdown/readme/languages/french.md @@ -34,7 +34,6 @@ Transformez n'importe quel MySQL, PostgreSQL, SQL Server, SQLite & Mariadb en un # Essayez rapidement -### Déploiement en 1 Clic ### Utilisez Docker ```bash diff --git a/markdown/readme/languages/italian.md b/markdown/readme/languages/italian.md index bcbd745cb9..d9a01cab86 100644 --- a/markdown/readme/languages/italian.md +++ b/markdown/readme/languages/italian.md @@ -31,9 +31,8 @@ Trasforma qualsiasi MySQL, PostgreSQL, SQL Server, SQLite & Mariadb in un foglio

NocoDB - The Open Source Airtable alternative | Product Hunt

-# Prova veloce -### 1-Click Deploy +# Prova veloce ### Con Docker From 730c356b1e9718117a4f2bfcf21008e5a3e773c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=AF=97=E4=BA=BA=E7=9A=84=E5=92=B8=E9=B1=BC?= Date: Wed, 7 Dec 2022 23:05:30 +0800 Subject: [PATCH 34/41] =?UTF-8?q?fix:=20can=E2=80=99t=20find=20Id?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nocodb/src/lib/db/sql-data-mapper/lib/sql/BaseModelSqlv2.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/BaseModelSqlv2.ts b/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/BaseModelSqlv2.ts index 429252ae59..ee0a73bf84 100644 --- a/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/BaseModelSqlv2.ts +++ b/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/BaseModelSqlv2.ts @@ -1995,7 +1995,7 @@ class BaseModelSqlv2 { if (Object.keys(d).length) { const response = await transaction(this.model.table_name) .del() - .where(d); + .where(await this.model.mapAliasToColumn(d)); res.push(response); } } From 4ba0f5089e8c7dce75f01199dc704f1055f3ea59 Mon Sep 17 00:00:00 2001 From: Semjon Geist Date: Wed, 7 Dec 2022 16:13:29 +0100 Subject: [PATCH 35/41] fix(nc-gui): fix col = 0 case in getColVal (#4631) --- packages/nc-gui/utils/parsers/parserHelpers.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/nc-gui/utils/parsers/parserHelpers.ts b/packages/nc-gui/utils/parsers/parserHelpers.ts index b0759389b6..36986b3007 100644 --- a/packages/nc-gui/utils/parsers/parserHelpers.ts +++ b/packages/nc-gui/utils/parsers/parserHelpers.ts @@ -21,7 +21,7 @@ const booleanOptions = [ const aggBooleanOptions: any = booleanOptions.reduce((obj, o) => ({ ...obj, ...o }), {}) const getColVal = (row: any, col?: number) => { - return row && col ? row[col] : row + return row && col !== undefined ? row[col] : row } export const isCheckboxType: any = (values: [], col?: number) => { From 04ef1b8e71990a67983a5aea27870d21a2f7dc11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=AF=97=E4=BA=BA=E7=9A=84=E5=92=B8=E9=B1=BC?= Date: Thu, 8 Dec 2022 00:51:37 +0800 Subject: [PATCH 36/41] fix: change conditions --- .../src/lib/db/sql-data-mapper/lib/sql/BaseModelSqlv2.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/BaseModelSqlv2.ts b/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/BaseModelSqlv2.ts index ee0a73bf84..825b05c268 100644 --- a/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/BaseModelSqlv2.ts +++ b/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/BaseModelSqlv2.ts @@ -1992,10 +1992,11 @@ class BaseModelSqlv2 { const res = []; for (const d of ids) { - if (Object.keys(d).length) { + const data = await this.model.mapAliasToColumn(d); + if (Object.keys(data).length) { const response = await transaction(this.model.table_name) .del() - .where(await this.model.mapAliasToColumn(d)); + .where(data); res.push(response); } } From 219a21acedd1428191d99dcf9c53b55622739a2d Mon Sep 17 00:00:00 2001 From: navi Date: Wed, 7 Dec 2022 18:24:17 +0000 Subject: [PATCH 37/41] New translations en.json (German) --- packages/nc-gui/lang/de.json | 62 ++++++++++++++++++------------------ 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/packages/nc-gui/lang/de.json b/packages/nc-gui/lang/de.json index 20b037afbf..7304e360f8 100644 --- a/packages/nc-gui/lang/de.json +++ b/packages/nc-gui/lang/de.json @@ -16,7 +16,7 @@ "cancel": "Abbrechen", "submit": "Übertragen", "create": "Erstellen", - "duplicate": "Duplicate", + "duplicate": "Duplizieren", "insert": "Einfügen", "delete": "Löschen", "update": "Aktualisieren", @@ -69,12 +69,12 @@ "betaNote": "Diese Funktion befindet sich derzeit in der Beta.", "moreInfo": "Mehr Informationen können hier gefunden werden", "logs": "Protokolle", - "groupingField": "Grouping Field", - "insertAfter": "Insert After", - "insertBefore": "Insert Before", - "hideField": "Hide Field", - "sortAsc": "Sort Ascending", - "sortDesc": "Sort Descending" + "groupingField": "Gruppierungsfeld", + "insertAfter": "danach einfügen", + "insertBefore": "davor einfügen", + "hideField": "Feld ausblenden", + "sortAsc": "Aufsteigend sortieren", + "sortDesc": "Absteigend sortieren" }, "objects": { "project": "Projekt", @@ -205,10 +205,10 @@ "quickImport": "Schnell Importieren", "advancedSettings": "Erweiterte Einstellungen", "codeSnippet": "Code Ausschnitt", - "keyboardShortcut": "Keyboard Shortcuts" + "keyboardShortcut": "Tastenkürzel" }, "labels": { - "createdBy": "Created By", + "createdBy": "Erstellt von", "notifyVia": "Benachrichtigen mit", "projName": "Projektname", "tableName": "Tabellenname", @@ -247,8 +247,8 @@ "created": "Erstellt", "sqlOutput": "SQL-Ausgabe", "addOption": "Option hinzufügen", - "qrCodeValueColumn": "Column with QR code value", - "qrCodeValueTooLong": "Too many characters for a QR code", + "qrCodeValueColumn": "Spalte mit QR-Code", + "qrCodeValueTooLong": "Zu viele Zeichen für einen QR-Code", "aggregateFunction": "Globale Funktion", "dbCreateIfNotExists": "Datenbank: Erstellen, falls nicht vorhanden", "clientKey": "Client-Schlüssel", @@ -291,24 +291,24 @@ "importAttachmentColumns": "Import Attachment Columns", "importFormulaColumns": "Import Formula Columns", "noData": "Keine Daten", - "goToDashboard": "Go to Dashboard", - "importing": "Importing", + "goToDashboard": "Zum Dashboard gehen", + "importing": "Wird importiert", "flattenNested": "Flatten Nested", "downloadAllowed": "Download erlaubt", "weAreHiring": "Wir stellen ein!", "primaryKey": "Primärschlüssel", "hasMany": "hat viele", "belongsTo": "gehört zu", - "manyToMany": "have many to many relation", - "extraConnectionParameters": "Extra connection parameters", + "manyToMany": "haben M:N-Beziehnungen", + "extraConnectionParameters": "Zusätzliche Verbindungsparameter", "commentsOnly": "Nur Kommentare", "documentation": "Dokumentation", "subscribeNewsletter": "Abonnieren Sie unseren wöchentlichen Newsletter", - "signUpWithGoogle": "Sign up with Google", - "signInWithGoogle": "Sign in with Google", + "signUpWithGoogle": "Mit Google anmelden", + "signInWithGoogle": "Mit Google einloggen", "agreeToTos": "Mit Ihrer Anmeldung stimmen Sie den allgemeinen Nutzungsbedingungen zu", "welcomeToNc": "Willkommen bei NocoDB!", - "inviteOnlySignup": "Allow signup only using invite url" + "inviteOnlySignup": "Anmeldung nur über Einladungs-URL zulassen" }, "activity": { "createProject": "Projekt erstellen", @@ -353,7 +353,7 @@ "invite": "Einladen", "inviteMore": "Mehr einladen", "inviteTeam": "Team einladen", - "inviteUser": "Invite User", + "inviteUser": "Benutzer einladen", "inviteToken": "Token einladen", "newUser": "Neuer Benutzer", "editUser": "Benutzer bearbeiten", @@ -376,8 +376,8 @@ "setPrimary": "Als Primärwert festlegen", "addRow": "Neue Zeile hinzufügen", "saveRow": "Zeile speichern", - "saveAndExit": "Save & Exit", - "saveAndStay": "Save & Stay", + "saveAndExit": "Speichern & Verlassen", + "saveAndStay": "Speichern & Bleiben", "insertRow": "Neue Zeile einfügen", "deleteRow": "Zeile löschen", "deleteSelectedRow": "Ausgewählte Zeilen löschen", @@ -421,9 +421,9 @@ "editConnJson": "Verbindung JSON bearbeiten", "sponsorUs": "Sponsor uns", "sendEmail": "E-MAIL SENDEN", - "addUserToProject": "Add user to project", - "getApiSnippet": "Get API Snippet", - "clearCell": "Clear cell", + "addUserToProject": "Benutzer zum Projekt hinzufügen", + "getApiSnippet": "zeige API Snippet", + "clearCell": "Zelle leeren", "addFilterGroup": "Add Filter Group", "linkRecord": "Link record", "addNewRecord": "Add new record", @@ -492,7 +492,7 @@ "defaultValue": "Standardwert", "filterByEmail": "Filtern nach E-Mail", "filterQuery": "Filter-Abfrage", - "selectField": "Select field" + "selectField": "Feld wählen" }, "msg": { "warning": { @@ -668,13 +668,13 @@ "rowUpdateFailed": "Row update failed", "deleteRowFailed": "Fehler beim Löschen der Zeile", "setFormDataFailed": "Failed to set form data", - "formViewUpdateFailed": "Failed to update form view", - "tableNameRequired": "Table name is required", - "nameShouldStartWithAnAlphabetOr_": "Name should start with an alphabet or _", - "followingCharactersAreNotAllowed": "Following characters are not allowed", - "columnNameRequired": "Column name is required", + "formViewUpdateFailed": "Fehler beim Aktualisieren der Formularansicht", + "tableNameRequired": "Tabellenname ist erforderlich", + "nameShouldStartWithAnAlphabetOr_": "Name muss mit einem Buchstaben oder _ beginnen", + "followingCharactersAreNotAllowed": "Folgende Zeichen sind nicht erlaubt", + "columnNameRequired": "Spaltenname ist erforderlich", "projectNameExceeds50Characters": "Projektname überschreitet 50 Zeichen", - "projectNameCannotStartWithSpace": "Project name cannot start with space", + "projectNameCannotStartWithSpace": "Projektname darf nicht mit einem Leerzeichen beginnen", "requiredField": "Pflichtfeld", "ipNotAllowed": "IP nicht erlaubt", "targetFileIsNotAnAcceptedFileType": "Target file is not an accepted file type", From 07bc52b8ec76b2ea3a5e6e6c7b8d5d8ceb16520b Mon Sep 17 00:00:00 2001 From: Pranav C Date: Thu, 8 Dec 2022 12:44:25 +0530 Subject: [PATCH 38/41] chore(nocodb): upgrade nc-help - includes fix for #4628 Signed-off-by: Pranav C --- packages/nocodb/package-lock.json | 136 ++++++++++++++++++++++-------- packages/nocodb/package.json | 2 +- 2 files changed, 101 insertions(+), 37 deletions(-) diff --git a/packages/nocodb/package-lock.json b/packages/nocodb/package-lock.json index 4d65271a41..6efa3fe845 100644 --- a/packages/nocodb/package-lock.json +++ b/packages/nocodb/package-lock.json @@ -63,7 +63,7 @@ "multer": "^1.4.2", "mysql2": "^2.2.5", "nanoid": "^3.1.20", - "nc-help": "0.2.79", + "nc-help": "0.2.82", "nc-lib-gui": "0.100.2", "nc-plugin": "0.1.2", "ncp": "^2.0.0", @@ -477,11 +477,11 @@ } }, "node_modules/@babel/runtime": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.0.tgz", - "integrity": "sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA==", + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.6.tgz", + "integrity": "sha512-Q+8MqP7TiHMWzSfwiJwXCjyf4GYA4Dgw3emg/7xmwsdLJOZUp+nMqcOwOzzYheuM1rhDu8FSj2l0aoMygEuXuA==", "dependencies": { - "regenerator-runtime": "^0.13.4" + "regenerator-runtime": "^0.13.11" }, "engines": { "node": ">=6.9.0" @@ -728,6 +728,11 @@ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, + "node_modules/@ioredis/commands": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz", + "integrity": "sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==" + }, "node_modules/@jridgewell/resolve-uri": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", @@ -3031,14 +3036,14 @@ "dev": true }, "node_modules/bull": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/bull/-/bull-4.9.0.tgz", - "integrity": "sha512-yiaSb41dywjIhJ3i1mczjQGDmM6pLIoM1Ea0Gcf5HKDxOoEzL5i9XEEKW7fbsj7u083UEOnQ4gSWfbWIUDO6JQ==", + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/bull/-/bull-4.10.2.tgz", + "integrity": "sha512-xa65xtWjQsLqYU/eNaXxq9VRG8xd6qNsQEjR7yjYuae05xKrzbVMVj2QgrYsTMmSs/vsqJjHqHSRRiW1+IkGXQ==", "dependencies": { "cron-parser": "^4.2.1", "debuglog": "^1.0.0", "get-port": "^5.1.1", - "ioredis": "^4.28.5", + "ioredis": "^5.0.0", "lodash": "^4.17.21", "msgpackr": "^1.5.2", "p-timeout": "^3.2.0", @@ -3046,7 +3051,38 @@ "uuid": "^8.3.0" }, "engines": { - "node": ">=10.1" + "node": ">=12" + } + }, + "node_modules/bull/node_modules/denque": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", + "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/bull/node_modules/ioredis": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.2.4.tgz", + "integrity": "sha512-qIpuAEt32lZJQ0XyrloCRdlEdUUNGG9i0UOk6zgzK6igyudNWqEBxfH6OlbnOOoBBvr1WB02mm8fR55CnikRng==", + "dependencies": { + "@ioredis/commands": "^1.1.1", + "cluster-key-slot": "^1.1.0", + "debug": "^4.3.4", + "denque": "^2.0.1", + "lodash.defaults": "^4.2.0", + "lodash.isarguments": "^3.1.0", + "redis-errors": "^1.2.0", + "redis-parser": "^3.0.0", + "standard-as-callback": "^2.1.0" + }, + "engines": { + "node": ">=12.22.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ioredis" } }, "node_modules/bullmq": { @@ -10589,9 +10625,9 @@ } }, "node_modules/nc-help": { - "version": "0.2.79", - "resolved": "https://registry.npmjs.org/nc-help/-/nc-help-0.2.79.tgz", - "integrity": "sha512-r5lzCJE6OGA32KFhNm2uZdt+KtCGNZNTVJztjLnMPKTzHqHxM6+IqrNohOdwdW2b4qMu2LTM+gXloYacbLY6Qg==", + "version": "0.2.82", + "resolved": "https://registry.npmjs.org/nc-help/-/nc-help-0.2.82.tgz", + "integrity": "sha512-R/jGDhMt4qEA17Hev6XbJHSkNm2W+n2vkilUMhOK/oBvFtG/2Vf9fsTdBanFW6ZY7y7Tdhi5BFTVvGtx/CRlrw==", "dependencies": { "@rudderstack/rudder-sdk-node": "^1.1.3", "axios": "^0.21.1", @@ -12801,9 +12837,9 @@ "dev": true }, "node_modules/regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" }, "node_modules/regex-not": { "version": "1.0.2", @@ -13241,9 +13277,9 @@ } }, "node_modules/safe-stable-stringify": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.0.tgz", - "integrity": "sha512-eehKHKpab6E741ud7ZIMcXhKcP6TSIezPkNZhy5U8xC6+VvrRdUA2tMgxGxaGl4cz7c2Ew5+mg5+wNB16KQqrA==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.1.tgz", + "integrity": "sha512-dVHE6bMtS/bnL2mwualjc6IxEv1F+OCUpA46pKUj6F8uDbUM0jCCulPqRNPSnWwGNKx5etqMjZYdXtrm5KJZGA==", "engines": { "node": ">=10" } @@ -18010,11 +18046,11 @@ } }, "@babel/runtime": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.0.tgz", - "integrity": "sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA==", + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.6.tgz", + "integrity": "sha512-Q+8MqP7TiHMWzSfwiJwXCjyf4GYA4Dgw3emg/7xmwsdLJOZUp+nMqcOwOzzYheuM1rhDu8FSj2l0aoMygEuXuA==", "requires": { - "regenerator-runtime": "^0.13.4" + "regenerator-runtime": "^0.13.11" } }, "@bitauth/libauth": { @@ -18208,6 +18244,11 @@ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, + "@ioredis/commands": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz", + "integrity": "sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==" + }, "@jridgewell/resolve-uri": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", @@ -20092,19 +20133,42 @@ "dev": true }, "bull": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/bull/-/bull-4.9.0.tgz", - "integrity": "sha512-yiaSb41dywjIhJ3i1mczjQGDmM6pLIoM1Ea0Gcf5HKDxOoEzL5i9XEEKW7fbsj7u083UEOnQ4gSWfbWIUDO6JQ==", + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/bull/-/bull-4.10.2.tgz", + "integrity": "sha512-xa65xtWjQsLqYU/eNaXxq9VRG8xd6qNsQEjR7yjYuae05xKrzbVMVj2QgrYsTMmSs/vsqJjHqHSRRiW1+IkGXQ==", "requires": { "cron-parser": "^4.2.1", "debuglog": "^1.0.0", "get-port": "^5.1.1", - "ioredis": "^4.28.5", + "ioredis": "^5.0.0", "lodash": "^4.17.21", "msgpackr": "^1.5.2", "p-timeout": "^3.2.0", "semver": "^7.3.2", "uuid": "^8.3.0" + }, + "dependencies": { + "denque": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", + "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==" + }, + "ioredis": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.2.4.tgz", + "integrity": "sha512-qIpuAEt32lZJQ0XyrloCRdlEdUUNGG9i0UOk6zgzK6igyudNWqEBxfH6OlbnOOoBBvr1WB02mm8fR55CnikRng==", + "requires": { + "@ioredis/commands": "^1.1.1", + "cluster-key-slot": "^1.1.0", + "debug": "^4.3.4", + "denque": "^2.0.1", + "lodash.defaults": "^4.2.0", + "lodash.isarguments": "^3.1.0", + "redis-errors": "^1.2.0", + "redis-parser": "^3.0.0", + "standard-as-callback": "^2.1.0" + } + } } }, "bullmq": { @@ -26004,9 +26068,9 @@ "integrity": "sha512-3AryS9uwa5NfISLxMciUonrH7YfXp+nlahB9T7girXIsLQrmwX4MdnuKs32akduCOGpKmjTJSWmATULbuMkbfw==" }, "nc-help": { - "version": "0.2.79", - "resolved": "https://registry.npmjs.org/nc-help/-/nc-help-0.2.79.tgz", - "integrity": "sha512-r5lzCJE6OGA32KFhNm2uZdt+KtCGNZNTVJztjLnMPKTzHqHxM6+IqrNohOdwdW2b4qMu2LTM+gXloYacbLY6Qg==", + "version": "0.2.82", + "resolved": "https://registry.npmjs.org/nc-help/-/nc-help-0.2.82.tgz", + "integrity": "sha512-R/jGDhMt4qEA17Hev6XbJHSkNm2W+n2vkilUMhOK/oBvFtG/2Vf9fsTdBanFW6ZY7y7Tdhi5BFTVvGtx/CRlrw==", "requires": { "@rudderstack/rudder-sdk-node": "^1.1.3", "axios": "^0.21.1", @@ -27717,9 +27781,9 @@ "dev": true }, "regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" }, "regex-not": { "version": "1.0.2", @@ -28050,9 +28114,9 @@ } }, "safe-stable-stringify": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.0.tgz", - "integrity": "sha512-eehKHKpab6E741ud7ZIMcXhKcP6TSIezPkNZhy5U8xC6+VvrRdUA2tMgxGxaGl4cz7c2Ew5+mg5+wNB16KQqrA==" + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.1.tgz", + "integrity": "sha512-dVHE6bMtS/bnL2mwualjc6IxEv1F+OCUpA46pKUj6F8uDbUM0jCCulPqRNPSnWwGNKx5etqMjZYdXtrm5KJZGA==" }, "safer-buffer": { "version": "2.1.2", diff --git a/packages/nocodb/package.json b/packages/nocodb/package.json index af6b535349..a421d41fe6 100644 --- a/packages/nocodb/package.json +++ b/packages/nocodb/package.json @@ -103,7 +103,7 @@ "multer": "^1.4.2", "mysql2": "^2.2.5", "nanoid": "^3.1.20", - "nc-help": "0.2.79", + "nc-help": "0.2.82", "nc-lib-gui": "0.100.2", "nc-plugin": "0.1.2", "ncp": "^2.0.0", From 059a37ac6dfc2f2670bd71eed6455b18f7d8723f Mon Sep 17 00:00:00 2001 From: navi Date: Thu, 8 Dec 2022 08:06:54 +0000 Subject: [PATCH 39/41] New translations en.json (Russian) --- packages/nc-gui/lang/ru.json | 126 +++++++++++++++++------------------ 1 file changed, 63 insertions(+), 63 deletions(-) diff --git a/packages/nc-gui/lang/ru.json b/packages/nc-gui/lang/ru.json index 0f896804ca..6d859b2666 100644 --- a/packages/nc-gui/lang/ru.json +++ b/packages/nc-gui/lang/ru.json @@ -16,7 +16,7 @@ "cancel": "Отмена", "submit": "Отправить", "create": "Создать", - "duplicate": "Duplicate", + "duplicate": "Копировать", "insert": "Вставить", "delete": "Удалить", "update": "Обновить", @@ -56,25 +56,25 @@ "notification": "Уведомление", "reference": "Ссылка", "function": "Функция", - "confirm": "Confirm", + "confirm": "Подтвердить", "generate": "Generate", - "copy": "Copy", - "misc": "Miscellaneous", - "lock": "Lock", - "unlock": "Unlock", - "credentials": "Credentials", - "help": "Help", - "questions": "Questions", + "copy": "Копировать", + "misc": "Прочее", + "lock": "Блокировать", + "unlock": "Разблокировать", + "credentials": "Учетные данные", + "help": "Помощь", + "questions": "Вопросы", "reachOut": "Reach out here", - "betaNote": "This feature is currently in beta.", - "moreInfo": "More information can be found here", - "logs": "Logs", - "groupingField": "Grouping Field", - "insertAfter": "Insert After", - "insertBefore": "Insert Before", - "hideField": "Hide Field", - "sortAsc": "Sort Ascending", - "sortDesc": "Sort Descending" + "betaNote": "Эта функция еще на стадии бета-версии.", + "moreInfo": "Больше информации можно найти здесь", + "logs": "Журналы", + "groupingField": "Поле группировки", + "insertAfter": "Вставить после", + "insertBefore": "Вставить перед", + "hideField": "Скрыть поле", + "sortAsc": "По Возрастанию", + "sortDesc": "По убыванию" }, "objects": { "project": "Проект", @@ -110,10 +110,10 @@ "editor": "Редактор", "commenter": "Комментатор", "viewer": "Просмотр", - "orgLevelCreator": "Organization Level Creator", - "orgLevelViewer": "Organization Level Viewer" + "orgLevelCreator": "Уровень Создатель", + "orgLevelViewer": "Уровень Читатель" }, - "sqlVIew": "SQL View" + "sqlVIew": "Просмотр SQL" }, "datatype": { "ID": "Идентификатор", @@ -194,21 +194,21 @@ "headCreateProject": "Создать проект |. NOCODB", "headLogin": "Войти |. NOCODB", "resetPassword": "Сбросить пароль", - "teamAndSettings": "Team & Settings", - "apiDocs": "API Docs", - "importFromAirtable": "Import From Airtable", - "generateToken": "Generate Token", + "teamAndSettings": "Команда и настройки", + "apiDocs": "Документация API", + "importFromAirtable": "Импортировать из Airtable", + "generateToken": "Создать Токен", "APIsAndSupport": "APIs & Support", - "helpCenter": "Help center", - "swaggerDocumentation": "Swagger Documentation", - "quickImportFrom": "Quick Import From", - "quickImport": "Quick Import", - "advancedSettings": "Advanced Settings", + "helpCenter": "Центр поддержки", + "swaggerDocumentation": "Документация Swagger", + "quickImportFrom": "Быстрый импорт из", + "quickImport": "Быстрый импорт", + "advancedSettings": "Расширенные настройки", "codeSnippet": "Code Snippet", - "keyboardShortcut": "Keyboard Shortcuts" + "keyboardShortcut": "Горячие клавиши" }, "labels": { - "createdBy": "Created By", + "createdBy": "Автор", "notifyVia": "Уведомлять через", "projName": "Название проекта", "tableName": "Название таблицы", @@ -226,7 +226,7 @@ "port": "Номер порта", "username": "Имя пользователя", "password": "Пароль", - "schemaName": "Schema name", + "schemaName": "Имя схемы", "database": "База данных", "action": "Действие", "actions": "Действия", @@ -247,8 +247,8 @@ "created": "Созданный", "sqlOutput": "Вывод SQL", "addOption": "Добавить настройку", - "qrCodeValueColumn": "Column with QR code value", - "qrCodeValueTooLong": "Too many characters for a QR code", + "qrCodeValueColumn": "Столбец с QR-кодом", + "qrCodeValueTooLong": "Слишком много символов для QR-кода", "aggregateFunction": "Агрегатная функция", "dbCreateIfNotExists": "База данных: создать, если не существует", "clientKey": "Ключ клиента", @@ -266,7 +266,7 @@ "bookDemo": "Забронировать бесплатное демо", "getAnswered": "Получите ответы на ваши вопросы", "joinDiscord": "Присоединиться к", - "joinCommunity": "Join NocoDB Community", + "joinCommunity": "Присоединяйтесь к сообществу NocoDB", "joinReddit": "Присоединиться /r/NocoDB", "followNocodb": "Следите за NocoDB" }, @@ -276,11 +276,11 @@ "childColumn": "Дочерний столбец", "onUpdate": "При обновлении", "onDelete": "При удалении", - "account": "Account", - "language": "Language", - "primaryColor": "Primary Color", + "account": "Учётная запись", + "language": "Язык", + "primaryColor": "Основной цвет", "accentColor": "Accent Color", - "customTheme": "Custom Theme", + "customTheme": "Пользовательская тема", "requestDataSource": "Request a data source you need?", "apiKey": "API Key", "sharedBase": "Shared Base", @@ -429,12 +429,12 @@ "addNewRecord": "Add new record", "useConnectionUrl": "Use Connection URL", "toggleCommentsDraw": "Toggle comments draw", - "expandRecord": "Expand Record", - "deleteRecord": "Delete Record", + "expandRecord": "Развернуть запись", + "deleteRecord": "Удалить запись", "erd": { - "showColumns": "Show Columns", + "showColumns": "Показать колонки", "showPkAndFk": "Show Primary and Foreign Keys", - "showSqlViews": "Show SQL Views", + "showSqlViews": "Показать SQL представления", "showMMTables": "Show Many to Many tables", "showJunctionTableNames": "Show Junction Table Names" }, @@ -442,7 +442,7 @@ "collapseStack": "Collapse Stack", "deleteStack": "Delete Stack", "stackedBy": "Stacked By", - "chooseGroupingField": "Choose a Grouping Field", + "chooseGroupingField": "Выберите поле группировки", "addOrEditStack": "Add / Edit Stack" } }, @@ -492,20 +492,20 @@ "defaultValue": "Значение по умолчанию", "filterByEmail": "Фильтр по электронной почте", "filterQuery": "Filter query", - "selectField": "Select field" + "selectField": "Выбрать поле" }, "msg": { "warning": { "nonEditableFields": { - "computedFieldUnableToClear": "Warning: Computed field - unable to clear text", - "qrFieldsCannotBeDirectlyChanged": "Warning: QR fields cannot be directly changed." + "computedFieldUnableToClear": "Предупреждение: Вычисляемое поле - невозможно очистить текст", + "qrFieldsCannotBeDirectlyChanged": "Внимание: QR-поля не могут быть изменены напрямую." } }, "info": { - "pasteNotSupported": "Paste operation is not supported on the active cell", + "pasteNotSupported": "Операция Вставки не поддерживается в выделенной ячейке", "roles": { "orgCreator": "Creator can create new projects and access any invited project.", - "orgViewer": "Viewer is not allowed to create new projects but they can access any invited project." + "orgViewer": "Читателю не может создавать новые проекты, но может получить доступ к любому проекту по приглашению." }, "footerInfo": "Строк на страницу", "upload": "Выберите файл для загрузки", @@ -597,25 +597,25 @@ "addDefaultColumns": "Добавьте столбцы по умолчанию", "tableNameInDb": "Название таблицы как сохранено в базе данных", "airtable": { - "credentials": "Where to find this?" + "credentials": "Где найти это?" }, "import": { - "clickOrDrag": "Click or drag file to this area to upload" + "clickOrDrag": "Нажмите или перетащите файл в эту область для загрузки" }, - "metaDataRecreated": "Table metadata recreated successfully", - "invalidCredentials": "Invalid credentials", + "metaDataRecreated": "Метаданные таблицы успешно воссозданы", + "invalidCredentials": "Неверные учетные данные", "downloadingMoreFiles": "Downloading more files", - "copiedToClipboard": "Copied to clipboard", - "requriedFieldsCantBeMoved": "Required field can't be moved", - "updateNotAllowedWithoutPK": "Update not allowed for table which doesn't have primary key", + "copiedToClipboard": "Скопировано в буфер", + "requriedFieldsCantBeMoved": "Обязательное поле не может быть перемещено", + "updateNotAllowedWithoutPK": "Обновление не разрешено для таблицы, которая не имеет первичного ключа", "autoIncFieldNotEditable": "Auto increment field is not editable", - "editingPKnotSupported": "Editing primary key not supported", - "deletedCache": "Deleted cache successfully", - "cacheEmpty": "Cache is empty", + "editingPKnotSupported": "Редактирование первичного ключа не поддерживается", + "deletedCache": "Очистка кэша завершена", + "cacheEmpty": "Кэш пуст", "exportedCache": "Exported Cache Successfully", - "valueAlreadyInList": "This value is already in the list", - "noColumnsToUpdate": "No columns to update", - "tableDeleted": "Deleted table successfully", + "valueAlreadyInList": "Это значение уже есть в списке", + "noColumnsToUpdate": "Нет столбцов для обновления", + "tableDeleted": "Таблица успешно удалена", "generatePublicShareableReadonlyBase": "Generate publicly shareable readonly base", "deleteViewConfirmation": "Are you sure you want to delete this view?", "deleteTableConfirmation": "Do you want to delete the table", From d38403dff0effddf03b55e24ac1cfc6c967e0302 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=AF=97=E4=BA=BA=E7=9A=84=E5=92=B8=E9=B1=BC?= Date: Thu, 8 Dec 2022 20:48:10 +0800 Subject: [PATCH 40/41] fix: test unit error --- .../lib/db/sql-data-mapper/lib/sql/BaseModelSqlv2.ts | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/BaseModelSqlv2.ts b/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/BaseModelSqlv2.ts index 825b05c268..25f5d7c348 100644 --- a/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/BaseModelSqlv2.ts +++ b/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/BaseModelSqlv2.ts @@ -1987,16 +1987,19 @@ class BaseModelSqlv2 { async bulkDelete(ids: any[], { cookie }: { cookie?: any } = {}) { let transaction; try { + const deleteIds = await Promise.all( + ids.map((d) => this.model.mapAliasToColumn(d)) + ); + transaction = await this.dbDriver.transaction(); // await this.beforeDeleteb(ids, transaction); const res = []; - for (const d of ids) { - const data = await this.model.mapAliasToColumn(d); - if (Object.keys(data).length) { + for (const d of deleteIds) { + if (Object.keys(d).length) { const response = await transaction(this.model.table_name) .del() - .where(data); + .where(d); res.push(response); } } From eafac8951de0e9cb94b258aed9e83ee68103dc2e Mon Sep 17 00:00:00 2001 From: navi Date: Thu, 8 Dec 2022 20:16:10 +0000 Subject: [PATCH 41/41] New translations en.json (Russian) --- packages/nc-gui/lang/ru.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/nc-gui/lang/ru.json b/packages/nc-gui/lang/ru.json index 6d859b2666..8449d73f9a 100644 --- a/packages/nc-gui/lang/ru.json +++ b/packages/nc-gui/lang/ru.json @@ -617,8 +617,8 @@ "noColumnsToUpdate": "Нет столбцов для обновления", "tableDeleted": "Таблица успешно удалена", "generatePublicShareableReadonlyBase": "Generate publicly shareable readonly base", - "deleteViewConfirmation": "Are you sure you want to delete this view?", - "deleteTableConfirmation": "Do you want to delete the table", + "deleteViewConfirmation": "Вы действительно хотите удалить это представление?", + "deleteTableConfirmation": "Вы действительно хотите удалить эту таблицу", "showM2mTables": "Show M2M Tables", "deleteKanbanStackConfirmation": "Deleting this stack will also remove the select option `{stackToBeDeleted}` from the `{groupingField}`. The records will move to the uncategorized stack.", "computedFieldEditWarning": "Computed field: contents are read-only. Use column edit menu to reconfigure", @@ -639,13 +639,13 @@ "passwdLength": "Ваш пароль должен быть не короче 8 символов", "passwdMismatch": "Пароли не совпадают", "completeRuleSet": "At least 8 characters with one Uppercase, one number and one special character", - "atLeast8Char": "At least 8 characters", - "atLeastOneUppercase": "One Uppercase letter", - "atLeastOneNumber": "One Number", - "atLeastOneSpecialChar": "One special character", - "allowedSpecialCharList": "Allowed special character list" + "atLeast8Char": "Минимум 8 символов", + "atLeastOneUppercase": "Одна прописная буква", + "atLeastOneNumber": "Одна цифра", + "atLeastOneSpecialChar": "Один специальный символ", + "allowedSpecialCharList": "Список разрешенных специальных символов" }, - "invalidURL": "Invalid URL", + "invalidURL": "Неверный URL", "internalError": "Some internal error occurred", "templateGeneratorNotFound": "Template Generator cannot be found!", "fileUploadFailed": "Failed to upload file",