From 5ea918b96e361194bf0ac922e25863f87bb18a42 Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Fri, 2 Dec 2022 20:20:22 +0800 Subject: [PATCH 01/20] fix(nocodb): handle comparing a date with empty string in pg --- .../lib/sql/formulav2/formulaQueryBuilderv2.ts | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/formulav2/formulaQueryBuilderv2.ts b/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/formulav2/formulaQueryBuilderv2.ts index 0c382ea3b4..925ab10066 100644 --- a/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/formulav2/formulaQueryBuilderv2.ts +++ b/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/formulav2/formulaQueryBuilderv2.ts @@ -55,8 +55,11 @@ export default async function formulaQueryBuilderv2( jsep.plugins.register(jsepCurlyHook); const tree = jsep(_tree); + const columnIdToUidt = {}; + // todo: improve - implement a common solution for filter, sort, formula, etc for (const col of await model.getColumns()) { + columnIdToUidt[col.id] = col.uidt; if (col.id in aliasToColumn) continue; switch (col.uidt) { case UITypes.Formula: @@ -659,6 +662,20 @@ export default async function formulaQueryBuilderv2( const right = fn(pt.right, null, pt.operator).toQuery(); let sql = `${left} ${pt.operator} ${right}${colAlias}`; + // comparing a date with empty string would throw + // `ERROR: zero-length delimited identifier` in Postgres + if ( + knex.clientType() === 'pg' && + columnIdToUidt[pt.left.name] === UITypes.Date && + pt.right.value === '' + ) { + if (pt.operator === '=') { + sql = `${left} IS NULL ${colAlias}`; + } else if (pt.operator === '!=') { + sql = `${left} IS NOT NULL ${colAlias}`; + } + } + // handle NULL values when calling CONCAT for sqlite3 if (pt.left.fnName === 'CONCAT' && knex.clientType() === 'sqlite3') { sql = `COALESCE(${left}, '') ${pt.operator} COALESCE(${right},'')${colAlias}`; From f8b5d2f3fc4c18fdb55e9aadcbc11ad223c7ad20 Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Sat, 3 Dec 2022 12:31:13 +0800 Subject: [PATCH 02/20] feat(nocodb): add validateDateWithUnknownFormat --- .../lib/sql/helpers/formulaFnHelper.ts | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/helpers/formulaFnHelper.ts b/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/helpers/formulaFnHelper.ts index f8057a2473..e3268d7406 100644 --- a/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/helpers/formulaFnHelper.ts +++ b/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/helpers/formulaFnHelper.ts @@ -1,3 +1,7 @@ +import dayjs, { extend } from 'dayjs'; +import customParseFormat from 'dayjs/plugin/customParseFormat.js'; +extend(customParseFormat); + export function getWeekdayByText(v: string) { return { monday: 0, @@ -21,3 +25,28 @@ export function getWeekdayByIndex(idx: number): string { 6: 'sunday', }[idx || 0]; } + +export function validateDateWithUnknownFormat(v: string) { + const dateFormats = [ + 'DD-MM-YYYY', + 'MM-DD-YYYY', + 'YYYY-MM-DD', + 'DD/MM/YYYY', + 'MM/DD/YYYY', + 'YYYY/MM/DD', + 'DD MM YYYY', + 'MM DD YYYY', + 'YYYY MM DD', + ]; + for (const format of dateFormats) { + if (dayjs(v, format, true).isValid() as any) { + return true; + } + for (const timeFormat of ['HH:mm', 'HH:mm:ss', 'HH:mm:ss.SSS']) { + if (dayjs(v, `${format} ${timeFormat}`, true).isValid() as any) { + return true; + } + } + } + return false; +} From d138c79709c90934ac0dfe9d4b73814737eb3482 Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Sat, 3 Dec 2022 12:31:37 +0800 Subject: [PATCH 03/20] fix(nocodb): handle comparing a date in IF in pg --- .../sql/formulav2/formulaQueryBuilderv2.ts | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/formulav2/formulaQueryBuilderv2.ts b/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/formulav2/formulaQueryBuilderv2.ts index 925ab10066..2478f5a251 100644 --- a/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/formulav2/formulaQueryBuilderv2.ts +++ b/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/formulav2/formulaQueryBuilderv2.ts @@ -8,6 +8,7 @@ import { XKnex } from '../../../index'; import LinkToAnotherRecordColumn from '../../../../../models/LinkToAnotherRecordColumn'; import LookupColumn from '../../../../../models/LookupColumn'; import { jsepCurlyHook, UITypes } from 'nocodb-sdk'; +import { validateDateWithUnknownFormat } from '../helpers/formulaFnHelper'; // todo: switch function based on database @@ -666,12 +667,20 @@ export default async function formulaQueryBuilderv2( // `ERROR: zero-length delimited identifier` in Postgres if ( knex.clientType() === 'pg' && - columnIdToUidt[pt.left.name] === UITypes.Date && - pt.right.value === '' + columnIdToUidt[pt.left.name] === UITypes.Date ) { - if (pt.operator === '=') { - sql = `${left} IS NULL ${colAlias}`; - } else if (pt.operator === '!=') { + // The correct way to compare with Date should be using + // `IS_AFTER`, `IS_BEFORE`, or `IS_SAME` + // This is to prevent empty data returned to UI due to incorrect SQL + if (pt.right.value === '') { + if (pt.operator === '=') { + sql = `${left} IS NULL ${colAlias}`; + } else { + sql = `${left} IS NOT NULL ${colAlias}`; + } + } else if (!validateDateWithUnknownFormat(pt.right.value)) { + // left tree value is date but right tree value is not date + // return true if left tree value is not null, else false sql = `${left} IS NOT NULL ${colAlias}`; } } From 3e8e36083aaeb883cea691385bbbce504fa2fc63 Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Mon, 5 Dec 2022 18:01:37 +0800 Subject: [PATCH 04/20] feat(workflows): handle pre-release logic --- .github/workflows/release-docker.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/release-docker.yml b/.github/workflows/release-docker.yml index 2f19829129..adc17aacee 100644 --- a/.github/workflows/release-docker.yml +++ b/.github/workflows/release-docker.yml @@ -50,6 +50,10 @@ jobs: run: | DOCKER_REPOSITORY=nocodb DOCKER_BUILD_TAG=${{ github.event.inputs.tag || inputs.tag }} + DOCKER_BUILD_LATEST_TAG=latest + if [[ "$DOCKER_BUILD_TAG" =~ "-beta." ]]; then + DOCKER_BUILD_LATEST_TAG=$(echo $DOCKER_BUILD_TAG | awk -F '-beta.' '{print $1}')-beta.latest + fi if [[ ${{ github.event.inputs.targetEnv || inputs.targetEnv }} == 'DEV' ]]; then if [[ ${{ github.event.inputs.currentVersion || inputs.currentVersion || 'N/A' }} != 'N/A' ]]; then DOCKER_BUILD_TAG=${{ github.event.inputs.currentVersion || inputs.currentVersion }}-${{ github.event.inputs.tag || inputs.tag }} @@ -62,8 +66,10 @@ jobs: fi echo "DOCKER_REPOSITORY=${DOCKER_REPOSITORY}" >> $GITHUB_OUTPUT echo "DOCKER_BUILD_TAG=${DOCKER_BUILD_TAG}" >> $GITHUB_OUTPUT + echo "DOCKER_BUILD_LATEST_TAG=${DOCKER_BUILD_LATEST_TAG}" >> $GITHUB_OUTPUT echo DOCKER_REPOSITORY: ${DOCKER_REPOSITORY} echo DOCKER_BUILD_TAG: ${DOCKER_BUILD_TAG} + echo DOCKER_BUILD_LATEST_TAG: ${DOCKER_BUILD_LATEST_TAG} - name: Checkout uses: actions/checkout@v3 @@ -134,7 +140,7 @@ jobs: push: true tags: | nocodb/${{ steps.get-docker-repository.outputs.DOCKER_REPOSITORY }}:${{ steps.get-docker-repository.outputs.DOCKER_BUILD_TAG }} - nocodb/${{ steps.get-docker-repository.outputs.DOCKER_REPOSITORY }}:latest + nocodb/${{ steps.get-docker-repository.outputs.DOCKER_REPOSITORY }}:${{ steps.get-docker-repository.outputs.DOCKER_BUILD_LATEST_TAG }} # Temp fix # https://github.com/docker/build-push-action/issues/252 From aa8dfdea42df4ce86b6db73350631520d10bc046 Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Mon, 5 Dec 2022 18:22:53 +0800 Subject: [PATCH 05/20] feat(nc-gui): disable release info if the version is beta --- packages/nc-gui/components/general/ReleaseInfo.vue | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/nc-gui/components/general/ReleaseInfo.vue b/packages/nc-gui/components/general/ReleaseInfo.vue index 14d9a3a595..bbc12007a3 100644 --- a/packages/nc-gui/components/general/ReleaseInfo.vue +++ b/packages/nc-gui/components/general/ReleaseInfo.vue @@ -7,6 +7,9 @@ const { currentVersion, latestRelease, hiddenRelease } = useGlobal() const releaseAlert = computed({ get() { + if (currentVersion.value?.includes('-beta.') || latestRelease.value?.includes('-beta.')) { + return false + } return ( currentVersion.value && latestRelease.value && 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 06/20] 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 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 07/20] =?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 08/20] 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 09/20] 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 10/20] 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 11/20] 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 12/20] 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 402ff5e45e7783524c9504d05b3961b27fad8eee Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Thu, 8 Dec 2022 19:51:47 +0800 Subject: [PATCH 13/20] fix(nocodb): handle empty left tree for IF case --- .../sql/formulav2/formulaQueryBuilderv2.ts | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/formulav2/formulaQueryBuilderv2.ts b/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/formulav2/formulaQueryBuilderv2.ts index 2478f5a251..d0c60e1a7e 100644 --- a/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/formulav2/formulaQueryBuilderv2.ts +++ b/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/formulav2/formulaQueryBuilderv2.ts @@ -684,6 +684,25 @@ export default async function formulaQueryBuilderv2( sql = `${left} IS NOT NULL ${colAlias}`; } } + if ( + knex.clientType() === 'pg' && + columnIdToUidt[pt.right.name] === UITypes.Date + ) { + // The correct way to compare with Date should be using + // `IS_AFTER`, `IS_BEFORE`, or `IS_SAME` + // This is to prevent empty data returned to UI due to incorrect SQL + if (pt.left.value === '') { + if (pt.operator === '=') { + sql = `${right} IS NULL ${colAlias}`; + } else { + sql = `${right} IS NOT NULL ${colAlias}`; + } + } else if (!validateDateWithUnknownFormat(pt.left.value)) { + // right tree value is date but left tree value is not date + // return true if right tree value is not null, else false + sql = `${right} IS NOT NULL ${colAlias}`; + } + } // handle NULL values when calling CONCAT for sqlite3 if (pt.left.fnName === 'CONCAT' && knex.clientType() === 'sqlite3') { 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 14/20] 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 15/20] 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", From f62850e88be59d53369030658e96cee1ae6a97ac Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Fri, 9 Dec 2022 11:47:30 +0800 Subject: [PATCH 16/20] docs: add tagging --- .../en/engineering/builds-and-releases.md | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/packages/noco-docs/content/en/engineering/builds-and-releases.md b/packages/noco-docs/content/en/engineering/builds-and-releases.md index 93273cd0e8..c5d362afe6 100644 --- a/packages/noco-docs/content/en/engineering/builds-and-releases.md +++ b/packages/noco-docs/content/en/engineering/builds-and-releases.md @@ -6,7 +6,9 @@ category: "Engineering" menuTitle: "Releases & Builds" --- ## Builds of NocoDB + There are 3 kinds of docker builds in NocoDB + - Release builds [nocodb/nocodb](https://hub.docker.com/r/nocodb/nocodb) : built during NocoDB release. - Daily builds [nocodb/nocodb-daily](https://hub.docker.com/r/nocodb/nocodb-daily) : built every 6 hours from Develop branch. - Daily builds [nocodb/nocodb-timely](https://hub.docker.com/r/nocodb/nocodb-timely): built for every PR. @@ -26,12 +28,24 @@ Below is an overview of how to make these builds and what happens behind the sce ![image](https://user-images.githubusercontent.com/35857179/167240383-dda05f76-8323-4f4a-b3e7-9db886dbd68d.png) - Then there would be two cases - you can either leave target tag and pervious tag blank or manually input some values -> Target Tag means the target deployment version, while Previous Tag means the latest version as of now. Previous Tag is used for Release Note only - showing the file / commit differences between two tags. +- Target Tag means the target deployment version, while Previous Tag means the latest version as of now. Previous Tag is used for Release Note only - showing the file / commit differences between two tags. + +### Tagging + +The naming convention would be following given the actual release tag is `0.100.0` + +- `0.100.0-beta.1` (first version of pre-release) +- `0.100.0-beta.2` (include bug fix changes on top of the previous version) +- `0.100.0-beta.3`(include bug fix changes on top of the previous version) +- and so on ... +- `0.100.0` (actual release) +- `0.100.1` (minor bug fix release) +- `0.100.2` (minor bug fix release) ### Case 1: Leaving inputs blank - If Previous Tag is blank, then the value will be fetched from [latest](https://github.com/nocodb/nocodb/releases/latest) -- If Target Tag is blank, then the value will be Previous Tag plus one. Example: 0.90.11 (Previous Tag) + 1 = 0.90.12 (Target Tag) +- If Target Tag is blank, then the value will be Previous Tag plus one. Example: 0.90.11 (Previous Tag) + 0.0.1 = 0.90.12 (Target Tag) ### Case 2: Manually Input From 005d06c48142d62c99533a741bb4db704b64673f Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Fri, 9 Dec 2022 12:51:48 +0800 Subject: [PATCH 17/20] feat(nocodb): add compare-versions --- packages/nocodb/package-lock.json | 13 ++++++++++++- packages/nocodb/package.json | 1 + 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/packages/nocodb/package-lock.json b/packages/nocodb/package-lock.json index 4d65271a41..92db6b2218 100644 --- a/packages/nocodb/package-lock.json +++ b/packages/nocodb/package-lock.json @@ -23,6 +23,7 @@ "bullmq": "^1.81.1", "clear": "^0.1.0", "colors": "1.4.0", + "compare-versions": "^5.0.1", "cookie-parser": "^1.4.5", "cors": "^2.8.5", "cron": "^1.8.2", @@ -152,7 +153,7 @@ } }, "../nocodb-sdk": { - "version": "0.100.2", + "version": "0.100.2-beta.0", "license": "AGPL-3.0-or-later", "dependencies": { "axios": "^0.21.1", @@ -3774,6 +3775,11 @@ "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", "dev": true }, + "node_modules/compare-versions": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-5.0.1.tgz", + "integrity": "sha512-v8Au3l0b+Nwkp4G142JcgJFh1/TUhdxut7wzD1Nq1dyp5oa3tXaqb03EXOAB6jS4gMlalkjAUPZBMiAfKUixHQ==" + }, "node_modules/component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", @@ -20693,6 +20699,11 @@ "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", "dev": true }, + "compare-versions": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-5.0.1.tgz", + "integrity": "sha512-v8Au3l0b+Nwkp4G142JcgJFh1/TUhdxut7wzD1Nq1dyp5oa3tXaqb03EXOAB6jS4gMlalkjAUPZBMiAfKUixHQ==" + }, "component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", diff --git a/packages/nocodb/package.json b/packages/nocodb/package.json index af6b535349..fe73da02f8 100644 --- a/packages/nocodb/package.json +++ b/packages/nocodb/package.json @@ -63,6 +63,7 @@ "bullmq": "^1.81.1", "clear": "^0.1.0", "colors": "1.4.0", + "compare-versions": "^5.0.1", "cookie-parser": "^1.4.5", "cors": "^2.8.5", "cron": "^1.8.2", From 6f1214ffeff55a50f3d23b922baaff84fc214c2b Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Fri, 9 Dec 2022 12:52:25 +0800 Subject: [PATCH 18/20] chore(nocodb): update sdk version --- packages/nocodb/package-lock.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/nocodb/package-lock.json b/packages/nocodb/package-lock.json index 92db6b2218..ac03d8a5a1 100644 --- a/packages/nocodb/package-lock.json +++ b/packages/nocodb/package-lock.json @@ -153,7 +153,7 @@ } }, "../nocodb-sdk": { - "version": "0.100.2-beta.0", + "version": "0.100.2", "license": "AGPL-3.0-or-later", "dependencies": { "axios": "^0.21.1", From 4bd9289e52c7d716d9dad2add57c24495e6c6b49 Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Fri, 9 Dec 2022 12:52:40 +0800 Subject: [PATCH 19/20] feat(nc-gui): show current version even for beta --- packages/nc-gui/components/general/ReleaseInfo.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/nc-gui/components/general/ReleaseInfo.vue b/packages/nc-gui/components/general/ReleaseInfo.vue index bbc12007a3..058262417f 100644 --- a/packages/nc-gui/components/general/ReleaseInfo.vue +++ b/packages/nc-gui/components/general/ReleaseInfo.vue @@ -25,7 +25,7 @@ const releaseAlert = computed({ async function fetchReleaseInfo() { try { const versionInfo = await $api.utils.appVersion() - if (versionInfo && versionInfo.releaseVersion && versionInfo.currentVersion && !/[^0-9.]/.test(versionInfo.currentVersion)) { + if (versionInfo && versionInfo.releaseVersion && versionInfo.currentVersion) { currentVersion.value = versionInfo.currentVersion latestRelease.value = versionInfo.releaseVersion } else { From ef8e21f43d545af2abfbc7d597c0e32f3c1289aa Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Fri, 9 Dec 2022 12:54:15 +0800 Subject: [PATCH 20/20] feat(nocodb): get latest non-beta version as release version --- packages/nocodb/src/lib/meta/api/utilApis.ts | 22 +++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/packages/nocodb/src/lib/meta/api/utilApis.ts b/packages/nocodb/src/lib/meta/api/utilApis.ts index cdd9f0a321..16cee5adcb 100644 --- a/packages/nocodb/src/lib/meta/api/utilApis.ts +++ b/packages/nocodb/src/lib/meta/api/utilApis.ts @@ -1,5 +1,6 @@ // // Project CRUD import { Request, Response } from 'express'; +import { compareVersions, validate } from 'compare-versions'; import { ViewTypes } from 'nocodb-sdk'; import Project from '../../models/Project'; @@ -65,17 +66,22 @@ export async function versionInfo(_req: Request, res: Response) { (versionCache.lastFetched && versionCache.lastFetched < Date.now() - 1000 * 60 * 60) ) { - versionCache.releaseVersion = await axios - .get('https://github.com/nocodb/nocodb/releases/latest', { + const nonBetaTags = await axios + .get('https://api.github.com/repos/nocodb/nocodb/tags', { timeout: 5000, }) - .then((response) => - response.request.res.responseUrl.replace( - 'https://github.com/nocodb/nocodb/releases/tag/', - '' - ) - ) + .then((response) => { + return response.data + .map((x) => x.name) + .filter( + (v) => validate(v) && !v.includes('finn') && !v.includes('beta') + ) + .sort((x, y) => compareVersions(y, x)); + }) .catch(() => null); + if (nonBetaTags && nonBetaTags.length > 0) { + versionCache.releaseVersion = nonBetaTags[0]; + } versionCache.lastFetched = Date.now(); }