diff --git a/.github/workflows/merge-main.yml b/.github/workflows/merge-main.yml index 11f1c5399d..6b2c8e7943 100644 --- a/.github/workflows/merge-main.yml +++ b/.github/workflows/merge-main.yml @@ -117,9 +117,6 @@ jobs: parameters: -p ZONE=${{ env.ZONE }} -p NAME=${{ github.event.repository.name }} -p PROMOTE=${{ github.repository }}/backend:${{ env.ZONE }} - -p NODE_ENV='development' - -p API_URL='https://nrfc-api-test.api.gov.bc.ca' - -p X_API_KEY=${{ secrets.GWA_X_API_KEY }} -p CHES_CLIENT_ID=${{ secrets.CHES_CLIENT_ID }} -p CHES_CLIENT_SECRET=${{ secrets.CHES_CLIENT_SECRET }} -p CHES_TOKEN_URL='https://test.loginproxy.gov.bc.ca/auth/realms/comsvcauth/protocol/openid-connect/token' @@ -227,9 +224,6 @@ jobs: parameters: -p ZONE=${{ env.ZONE }} -p NAME=${{ github.event.repository.name }} -p PROMOTE=${{ github.repository }}/backend:${{ env.PREV }} - -p NODE_ENV='production' - -p API_URL='https://nrfc-api-prod.api.gov.bc.ca' - -p X_API_KEY=${{ secrets.GWA_X_API_KEY }} -p CHES_CLIENT_ID=${{ secrets.CHES_CLIENT_ID }} -p CHES_CLIENT_SECRET=${{ secrets.CHES_CLIENT_SECRET }} -p CHES_TOKEN_URL='https://loginproxy.gov.bc.ca/auth/realms/comsvcauth/protocol/openid-connect/token' diff --git a/.github/workflows/pr-open.yml b/.github/workflows/pr-open.yml index b4805a392b..0121d51ca2 100644 --- a/.github/workflows/pr-open.yml +++ b/.github/workflows/pr-open.yml @@ -120,6 +120,7 @@ jobs: name: Deploy Init needs: - builds + environment: dev runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v3 @@ -137,6 +138,7 @@ jobs: name: Deploy Database needs: - builds + environment: dev runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v3 @@ -156,6 +158,7 @@ jobs: name: Deploy Backend needs: - builds + environment: dev runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v3 @@ -171,9 +174,6 @@ jobs: parameters: -p ZONE=${{ github.event.number }} -p NAME=${{ github.event.repository.name }} -p PROMOTE=${{ github.repository }}/backend:${{ github.event.number }} - -p NODE_ENV='development' - -p API_URL='https://nrfc-api-test.api.gov.bc.ca' - -p X_API_KEY=${{ secrets.GWA_X_API_KEY }} -p CHES_CLIENT_ID=${{ secrets.CHES_CLIENT_ID }} -p CHES_CLIENT_SECRET=${{ secrets.CHES_CLIENT_SECRET }} -p CHES_TOKEN_URL='https://dev.loginproxy.gov.bc.ca/auth/realms/comsvcauth/protocol/openid-connect/token' @@ -183,6 +183,7 @@ jobs: name: Deploy Frontend needs: - builds + environment: dev runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v3 diff --git a/backend/openshift.deploy.yml b/backend/openshift.deploy.yml index e5ca034451..aee56a9a86 100644 --- a/backend/openshift.deploy.yml +++ b/backend/openshift.deploy.yml @@ -24,12 +24,6 @@ parameters: - name: PROMOTE description: Image (namespace/name:tag) to promote/import value: bcgov/nr-old-growth:prod-backend - - name: API_URL - description: URL for the forest client api - required: true - - name: X_API_KEY - description: Key to access to the forest client api - required: true - name: CHES_CLIENT_ID description: CHES service client id required: true @@ -42,9 +36,6 @@ parameters: - name: CHES_API_URL description: CHES service api url required: true - - name: NODE_ENV - description: environment mode - required: true - name: CPU_REQUEST value: 75m - name: CPU_LIMIT @@ -113,19 +104,10 @@ objects: imagePullPolicy: Always name: ${NAME} env: - - name: NODE_ENV - value: ${NODE_ENV} - name: FRONTEND_URL value: https://${NAME}-${ZONE}-frontend.${DOMAIN} - name: BACKEND_URL value: https://${NAME}-${ZONE}-backend.${DOMAIN} - - name: X_API_KEY - valueFrom: - secretKeyRef: - name: ${NAME}-${ZONE}-${COMPONENT} - key: x-api-key - - name: API_URL - value: ${API_URL} - name: CHES_CLIENT_ID valueFrom: secretKeyRef: diff --git a/frontend/package-lock.json b/frontend/package-lock.json index d6859d09db..44ef25e98a 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -21,6 +21,7 @@ "bootstrap-vue-3": "^0.5.1", "core-js": "^3.27.2", "dotenv": "^16.0.0", + "lodash": "^4.17.21", "serve": "^14.1.2", "unplugin-icons": "^0.15.1", "unplugin-vue-components": "^0.22.11", @@ -32,6 +33,7 @@ "devDependencies": { "@rushstack/eslint-patch": "^1.1.0", "@types/jsdom": "^20.0.1", + "@types/lodash": "^4.14.191", "@types/node": "^18.11.18", "@typescript-eslint/eslint-plugin": "^5.48.2", "@typescript-eslint/parser": "^5.48.2", @@ -529,9 +531,9 @@ } }, "node_modules/@cypress/request": { - "version": "2.88.10", - "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.10.tgz", - "integrity": "sha512-Zp7F+R93N0yZyG34GutyTNr+okam7s/Fzc1+i3kcqOP8vk6OuajuE9qZJ6Rs+10/1JFtXFYMdyarnU1rZuJesg==", + "version": "2.88.11", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.11.tgz", + "integrity": "sha512-M83/wfQ1EkspjkE2lNWNV5ui2Cv7UCv1swW1DqljahbzLVWltcsexQh8jYtuS/vzFXP+HySntGM83ZXA9fn17w==", "dev": true, "dependencies": { "aws-sign2": "~0.7.0", @@ -547,7 +549,7 @@ "json-stringify-safe": "~5.0.1", "mime-types": "~2.1.19", "performance-now": "^2.1.0", - "qs": "~6.5.2", + "qs": "~6.10.3", "safe-buffer": "^5.1.2", "tough-cookie": "~2.5.0", "tunnel-agent": "^0.6.0", @@ -752,9 +754,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz", - "integrity": "sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==", + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz", + "integrity": "sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==", "cpu": [ "loong64" ], @@ -827,9 +829,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.16.tgz", - "integrity": "sha512-G1+09TopOzo59/55lk5Q0UokghYLyHTKKzD5lXsAOOlGDbieGEFJpJBr3BLDbf7cz89KX04sBeExAR/pL/26sA==", + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz", + "integrity": "sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==", "cpu": [ "x64" ], @@ -1016,9 +1018,9 @@ "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==" }, "node_modules/@iconify/utils": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@iconify/utils/-/utils-2.0.11.tgz", - "integrity": "sha512-oEBZkHpkgySHcMZi80ycoJ+ZdLoJhmbN0+gUK8qNPY79ndus8fBHKPyjjwz5kIvr5U9yiym+xBTTnZOB3m5/Pw==", + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@iconify/utils/-/utils-2.0.12.tgz", + "integrity": "sha512-hhUyt1/k5RRhfcW/PRRdBw8e1ACehJT5QEZJRm7HnkCiUx11/0ccLr7K0OMlPSwjnfYcBS2gAUD3EpmL0iJCkQ==", "dependencies": { "@antfu/install-pkg": "^0.1.1", "@antfu/utils": "^0.7.2", @@ -1317,6 +1319,12 @@ "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, + "node_modules/@types/lodash": { + "version": "4.14.191", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.191.tgz", + "integrity": "sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==", + "dev": true + }, "node_modules/@types/node": { "version": "18.11.18", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", @@ -1621,9 +1629,9 @@ } }, "node_modules/@volar/vue-language-core/node_modules/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-bNH9mmM9qsJ2X4r2Nat1B//1dJVcn3+iBLa3IgqJ7EbGaDNepL9QSHOxN4ng33s52VMMhhIfgCYDk3C4ZmlDAg==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -1828,13 +1836,13 @@ } }, "node_modules/@vueuse/core": { - "version": "9.10.0", - "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-9.10.0.tgz", - "integrity": "sha512-CxMewME07qeuzuT/AOIQGv0EhhDoojniqU6pC3F8m5VC76L47UT18DcX88kWlP3I7d3qMJ4u/PD8iSRsy3bmNA==", + "version": "9.11.0", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-9.11.0.tgz", + "integrity": "sha512-7yZJ8LNOssA8ZmeSjd4F+wbFBA4csiP4TiaXgruqg1H4PAtzSkv93PPwFLvQkSnfo3Bar+e+6QoRvWjhz7l2Xg==", "dependencies": { "@types/web-bluetooth": "^0.0.16", - "@vueuse/metadata": "9.10.0", - "@vueuse/shared": "9.10.0", + "@vueuse/metadata": "9.11.0", + "@vueuse/shared": "9.11.0", "vue-demi": "*" }, "funding": { @@ -1867,17 +1875,17 @@ } }, "node_modules/@vueuse/metadata": { - "version": "9.10.0", - "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-9.10.0.tgz", - "integrity": "sha512-G5VZhgTCapzU9rv0Iq2HBrVOSGzOKb+OE668NxhXNcTjUjwYxULkEhAw70FtRLMZc+hxcFAzDZlKYA0xcwNMuw==", + "version": "9.11.0", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-9.11.0.tgz", + "integrity": "sha512-HhtG2SWkcfZBLbamHdvLn7jKOCFpw/ifXjVTd5ilFkj98WVUk/3UTQ03wF1XIkuhSO4+b45hD2lfG9/GdKCF7w==", "funding": { "url": "https://github.com/sponsors/antfu" } }, "node_modules/@vueuse/shared": { - "version": "9.10.0", - "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-9.10.0.tgz", - "integrity": "sha512-vakHJ2ZRklAzqmcVBL38RS7BxdBA4+5poG9NsSyqJxrt9kz0zX3P5CXMy0Hm6LFbZXUgvKdqAS3pUH1zX/5qTQ==", + "version": "9.11.0", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-9.11.0.tgz", + "integrity": "sha512-8lO7wD5abYxupKy2KynH1pSgP715ky6iCrWYb8aX2AuAVi9uHXj7qE1dw6BnmArSaLHci4x9iuzWPCpAzUkC/A==", "dependencies": { "vue-demi": "*" }, @@ -2303,6 +2311,7 @@ "version": "0.5.1", "resolved": "https://registry.npmjs.org/bootstrap-vue-3/-/bootstrap-vue-3-0.5.1.tgz", "integrity": "sha512-azgy+97Ih+TJvI1vJnqt4mptQ8Wvm3P8eKDvL9ZMGBWN/9k2ikU4Wx1OM0KNOZDcC4kyaWmC08n9cbaaShrkJg==", + "deprecated": "This package is deprecated and the repo was moved to bootstrap-vue organization. For updates on this project go to bootstrap-vue. The new package is called bootstrap-vue-next. Thanks for your support!", "dependencies": { "@nuxt/kit": "3.0.0", "@vueuse/core": "^9.6.0" @@ -2633,6 +2642,19 @@ "node": ">=6" } }, + "node_modules/call-bind": { + "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" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -2654,9 +2676,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001442", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001442.tgz", - "integrity": "sha512-239m03Pqy0hwxYPYR5JwOIxRJfLTWtle9FV8zosfV5pHg+/51uD4nxcUlM8+mWWGfwKtt8lJNHnD3cWw9VZ6ow==", + "version": "1.0.30001445", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001445.tgz", + "integrity": "sha512-8sdQIdMztYmzfTMO6KfLny878Ln9c2M0fc7EH60IjlP4Dc4PiCy7K2Vl3ITmWgOyPgVQKa5x+UP/KqFsxj4mBg==", "funding": [ { "type": "opencollective", @@ -3772,21 +3794,6 @@ "node": ">=12" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-loong64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz", - "integrity": "sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==", - "cpu": [ - "loong64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -4582,6 +4589,20 @@ "node": "*" } }, + "node_modules/get-intrinsic": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/get-stream": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", @@ -4743,6 +4764,18 @@ "node": ">=8" } }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/hash-sum": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", @@ -5134,9 +5167,9 @@ } }, "node_modules/jiti": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.16.1.tgz", - "integrity": "sha512-kJUp4Bj44uTaZAwG6R2/GjbodOWHULn8Swue0B7tY8v5BpTkUvDR+zBM5tsbC4x/jCeYDZ+mAdrUIScwIo4oPw==", + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.16.2.tgz", + "integrity": "sha512-OKBOVWmU3FxDt/UH4zSwiKPuc1nihFZiOD722FuJlngvLz2glX1v2/TJIgoA4+mrpnXxHV6dSAoCvPcYQtoG5A==", "bin": { "jiti": "bin/jiti.js" } @@ -5244,9 +5277,9 @@ } }, "node_modules/jsdom/node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.2.0.tgz", + "integrity": "sha512-LN6QV1IJ9ZhxWTNdktaPClrNfp8xdSAYS0Zk2ddX7XsXZAxckMHPCBcHRo0cTcEIgYPRiGEkmji3Idkh2yFtYw==", "devOptional": true, "engines": { "node": ">=6" @@ -5455,8 +5488,7 @@ "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "node_modules/lodash._reinterpolate": { "version": "3.0.0", @@ -5804,9 +5836,9 @@ } }, "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.8.tgz", + "integrity": "sha512-RZ6dBYuj8dRSfxpUSu+NsdF1dpPpluJxwOp+6IoDp/sH2QNDSvurYsAa+F1WxY2RjA1iP93xhcsUoYbF2XBqVg==", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -5888,6 +5920,15 @@ "integrity": "sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==", "devOptional": true }, + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/on-headers": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", @@ -6278,12 +6319,18 @@ "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" }, "node_modules/qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "version": "6.10.4", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.4.tgz", + "integrity": "sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==", "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, "engines": { "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/querystringify": { @@ -6725,6 +6772,20 @@ "node": ">=8" } }, + "node_modules/side-channel": { + "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", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/siginfo": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", @@ -7130,9 +7191,9 @@ } }, "node_modules/tough-cookie/node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.2.0.tgz", + "integrity": "sha512-LN6QV1IJ9ZhxWTNdktaPClrNfp8xdSAYS0Zk2ddX7XsXZAxckMHPCBcHRo0cTcEIgYPRiGEkmji3Idkh2yFtYw==", "dev": true, "engines": { "node": ">=6" @@ -7151,9 +7212,9 @@ } }, "node_modules/tr46/node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.2.0.tgz", + "integrity": "sha512-LN6QV1IJ9ZhxWTNdktaPClrNfp8xdSAYS0Zk2ddX7XsXZAxckMHPCBcHRo0cTcEIgYPRiGEkmji3Idkh2yFtYw==", "devOptional": true, "engines": { "node": ">=6" @@ -7413,9 +7474,9 @@ } }, "node_modules/unplugin-vue-components/node_modules/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-bNH9mmM9qsJ2X4r2Nat1B//1dJVcn3+iBLa3IgqJ7EbGaDNepL9QSHOxN4ng33s52VMMhhIfgCYDk3C4ZmlDAg==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -7433,12 +7494,12 @@ } }, "node_modules/untyped": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/untyped/-/untyped-1.2.1.tgz", - "integrity": "sha512-hEtBC6MvqXLEEpx5ItPhnpgHIf3hRP310IYHj7N3D5zjdLJnmJNsGRDFbovk6DM2dekF/OBWuxDr0b6479eUkA==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/untyped/-/untyped-1.2.2.tgz", + "integrity": "sha512-EANYd5L6AdpgfldlgMcmvOOnj092nWhy0ybhc7uhEH12ipytDYz89EOegBQKj8qWL3u1wgYnmFjADhsuCJs5Aw==", "dependencies": { - "@babel/core": "^7.20.7", - "@babel/standalone": "^7.20.11", + "@babel/core": "^7.20.12", + "@babel/standalone": "^7.20.12", "@babel/types": "^7.20.7", "scule": "^1.0.0" } @@ -7486,9 +7547,9 @@ } }, "node_modules/uri-js/node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.2.0.tgz", + "integrity": "sha512-LN6QV1IJ9ZhxWTNdktaPClrNfp8xdSAYS0Zk2ddX7XsXZAxckMHPCBcHRo0cTcEIgYPRiGEkmji3Idkh2yFtYw==", "engines": { "node": ">=6" } @@ -7618,12 +7679,12 @@ "url": "https://github.com/sponsors/antfu" } }, - "node_modules/vite-node/node_modules/@esbuild/linux-x64": { + "node_modules/vite-node/node_modules/@esbuild/linux-loong64": { "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz", - "integrity": "sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz", + "integrity": "sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==", "cpu": [ - "x64" + "loong64" ], "optional": true, "os": [ @@ -7795,160 +7856,10 @@ } } }, - "node_modules/vitest/node_modules/@esbuild/android-arm": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.16.tgz", - "integrity": "sha512-BUuWMlt4WSXod1HSl7aGK8fJOsi+Tab/M0IDK1V1/GstzoOpqc/v3DqmN8MkuapPKQ9Br1WtLAN4uEgWR8x64A==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vitest/node_modules/@esbuild/android-arm64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.16.tgz", - "integrity": "sha512-hFHVAzUKp9Tf8psGq+bDVv+6hTy1bAOoV/jJMUWwhUnIHsh6WbFMhw0ZTkqDuh7TdpffFoHOiIOIxmHc7oYRBQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vitest/node_modules/@esbuild/android-x64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.16.tgz", - "integrity": "sha512-9WhxJpeb6XumlfivldxqmkJepEcELekmSw3NkGrs+Edq6sS5KRxtUBQuKYDD7KqP59dDkxVbaoPIQFKWQG0KLg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vitest/node_modules/@esbuild/darwin-arm64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.16.tgz", - "integrity": "sha512-8Z+wld+vr/prHPi2O0X7o1zQOfMbXWGAw9hT0jEyU/l/Yrg+0Z3FO9pjPho72dVkZs4ewZk0bDOFLdZHm8jEfw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vitest/node_modules/@esbuild/darwin-x64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.16.tgz", - "integrity": "sha512-CYkxVvkZzGCqFrt7EgjFxQKhlUPyDkuR9P0Y5wEcmJqVI8ncerOIY5Kej52MhZyzOBXkYrJgZeVZC9xXXoEg9A==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vitest/node_modules/@esbuild/freebsd-arm64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.16.tgz", - "integrity": "sha512-fxrw4BYqQ39z/3Ja9xj/a1gMsVq0xEjhSyI4a9MjfvDDD8fUV8IYliac96i7tzZc3+VytyXX+XNsnpEk5sw5Wg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vitest/node_modules/@esbuild/freebsd-x64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.16.tgz", - "integrity": "sha512-8p3v1D+du2jiDvSoNVimHhj7leSfST9YlKsAEO7etBfuqjaBMndo0fmjNLp0JCMld+XIx9L80tooOkyUv1a1PQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vitest/node_modules/@esbuild/linux-arm": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.16.tgz", - "integrity": "sha512-bYaocE1/PTMRmkgSckZ0D0Xn2nox8v2qlk+MVVqm+VECNKDdZvghVZtH41dNtBbwADSvA6qkCHGYeWm9LrNCBw==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vitest/node_modules/@esbuild/linux-arm64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.16.tgz", - "integrity": "sha512-N3u6BBbCVY3xeP2D8Db7QY8I+nZ+2AgOopUIqk+5yCoLnsWkcVxD2ay5E9iIdvApFi1Vg1lZiiwaVp8bOpAc4A==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vitest/node_modules/@esbuild/linux-ia32": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.16.tgz", - "integrity": "sha512-dxjqLKUW8GqGemoRT9v8IgHk+T4tRm1rn1gUcArsp26W9EkK/27VSjBVUXhEG5NInHZ92JaQ3SSMdTwv/r9a2A==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/vitest/node_modules/@esbuild/linux-loong64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.16.tgz", - "integrity": "sha512-MdUFggHjRiCCwNE9+1AibewoNq6wf94GLB9Q9aXwl+a75UlRmbRK3h6WJyrSGA6ZstDJgaD2wiTSP7tQNUYxwA==", + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz", + "integrity": "sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==", "cpu": [ "loong64" ], @@ -7960,160 +7871,10 @@ "node": ">=12" } }, - "node_modules/vitest/node_modules/@esbuild/linux-mips64el": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.16.tgz", - "integrity": "sha512-CO3YmO7jYMlGqGoeFeKzdwx/bx8Vtq/SZaMAi+ZLDUnDUdfC7GmGwXzIwDJ70Sg+P9pAemjJyJ1icKJ9R3q/Fg==", - "cpu": [ - "mips64el" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vitest/node_modules/@esbuild/linux-ppc64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.16.tgz", - "integrity": "sha512-DSl5Czh5hCy/7azX0Wl9IdzPHX2H8clC6G87tBnZnzUpNgRxPFhfmArbaHoAysu4JfqCqbB/33u/GL9dUgCBAw==", - "cpu": [ - "ppc64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vitest/node_modules/@esbuild/linux-riscv64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.16.tgz", - "integrity": "sha512-sSVVMEXsqf1fQu0j7kkhXMViroixU5XoaJXl1u/u+jbXvvhhCt9YvA/B6VM3aM/77HuRQ94neS5bcisijGnKFQ==", - "cpu": [ - "riscv64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vitest/node_modules/@esbuild/linux-s390x": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.16.tgz", - "integrity": "sha512-jRqBCre9gZGoCdCN/UWCCMwCMsOg65IpY9Pyj56mKCF5zXy9d60kkNRdDN6YXGjr3rzcC4DXnS/kQVCGcC4yPQ==", - "cpu": [ - "s390x" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vitest/node_modules/@esbuild/netbsd-x64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.16.tgz", - "integrity": "sha512-xwjGJB5wwDEujLaJIrSMRqWkbigALpBNcsF9SqszoNKc+wY4kPTdKrSxiY5ik3IatojePP+WV108MvF6q6np4w==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vitest/node_modules/@esbuild/openbsd-x64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.16.tgz", - "integrity": "sha512-yeERkoxG2nR2oxO5n+Ms7MsCeNk23zrby2GXCqnfCpPp7KNc0vxaaacIxb21wPMfXXRhGBrNP4YLIupUBrWdlg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vitest/node_modules/@esbuild/sunos-x64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.16.tgz", - "integrity": "sha512-nHfbEym0IObXPhtX6Va3H5GaKBty2kdhlAhKmyCj9u255ktAj0b1YACUs9j5H88NRn9cJCthD1Ik/k9wn8YKVg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vitest/node_modules/@esbuild/win32-arm64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.16.tgz", - "integrity": "sha512-pdD+M1ZOFy4hE15ZyPX09fd5g4DqbbL1wXGY90YmleVS6Y5YlraW4BvHjim/X/4yuCpTsAFvsT4Nca2lbyDH/A==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vitest/node_modules/@esbuild/win32-ia32": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.16.tgz", - "integrity": "sha512-IPEMfU9p0c3Vb8PqxaPX6BM9rYwlTZGYOf9u+kMdhoILZkVKEjq6PKZO0lB+isojWwAnAqh4ZxshD96njTXajg==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vitest/node_modules/@esbuild/win32-x64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.16.tgz", - "integrity": "sha512-1YYpoJ39WV/2bnShPwgdzJklc+XS0bysN6Tpnt1cWPdeoKOG4RMEY1g7i534QxXX/rPvNx/NLJQTTCeORYzipg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/vitest/node_modules/esbuild": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.16.tgz", - "integrity": "sha512-24JyKq10KXM5EBIgPotYIJ2fInNWVVqflv3gicIyQqfmUqi4HvDW1VR790cBgLJHCl96Syy7lhoz7tLFcmuRmg==", + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.17.tgz", + "integrity": "sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==", "hasInstallScript": true, "bin": { "esbuild": "bin/esbuild" @@ -8122,34 +7883,34 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/android-arm": "0.16.16", - "@esbuild/android-arm64": "0.16.16", - "@esbuild/android-x64": "0.16.16", - "@esbuild/darwin-arm64": "0.16.16", - "@esbuild/darwin-x64": "0.16.16", - "@esbuild/freebsd-arm64": "0.16.16", - "@esbuild/freebsd-x64": "0.16.16", - "@esbuild/linux-arm": "0.16.16", - "@esbuild/linux-arm64": "0.16.16", - "@esbuild/linux-ia32": "0.16.16", - "@esbuild/linux-loong64": "0.16.16", - "@esbuild/linux-mips64el": "0.16.16", - "@esbuild/linux-ppc64": "0.16.16", - "@esbuild/linux-riscv64": "0.16.16", - "@esbuild/linux-s390x": "0.16.16", - "@esbuild/linux-x64": "0.16.16", - "@esbuild/netbsd-x64": "0.16.16", - "@esbuild/openbsd-x64": "0.16.16", - "@esbuild/sunos-x64": "0.16.16", - "@esbuild/win32-arm64": "0.16.16", - "@esbuild/win32-ia32": "0.16.16", - "@esbuild/win32-x64": "0.16.16" + "@esbuild/android-arm": "0.16.17", + "@esbuild/android-arm64": "0.16.17", + "@esbuild/android-x64": "0.16.17", + "@esbuild/darwin-arm64": "0.16.17", + "@esbuild/darwin-x64": "0.16.17", + "@esbuild/freebsd-arm64": "0.16.17", + "@esbuild/freebsd-x64": "0.16.17", + "@esbuild/linux-arm": "0.16.17", + "@esbuild/linux-arm64": "0.16.17", + "@esbuild/linux-ia32": "0.16.17", + "@esbuild/linux-loong64": "0.16.17", + "@esbuild/linux-mips64el": "0.16.17", + "@esbuild/linux-ppc64": "0.16.17", + "@esbuild/linux-riscv64": "0.16.17", + "@esbuild/linux-s390x": "0.16.17", + "@esbuild/linux-x64": "0.16.17", + "@esbuild/netbsd-x64": "0.16.17", + "@esbuild/openbsd-x64": "0.16.17", + "@esbuild/sunos-x64": "0.16.17", + "@esbuild/win32-arm64": "0.16.17", + "@esbuild/win32-ia32": "0.16.17", + "@esbuild/win32-x64": "0.16.17" } }, "node_modules/vitest/node_modules/rollup": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.9.1.tgz", - "integrity": "sha512-GswCYHXftN8ZKGVgQhTFUJB/NBXxrRGgO2NCy6E8s1rwEJ4Q9/VttNqcYfEvx4dTo4j58YqdC3OVztPzlKSX8w==", + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.10.0.tgz", + "integrity": "sha512-JmRYz44NjC1MjVF2VKxc0M1a97vn+cDxeqWmnwyAF4FvpjK8YFdHpaqvQB+3IxCvX05vJxKZkoMDU8TShhmJVA==", "bin": { "rollup": "dist/bin/rollup" }, @@ -8978,9 +8739,9 @@ "optional": true }, "@cypress/request": { - "version": "2.88.10", - "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.10.tgz", - "integrity": "sha512-Zp7F+R93N0yZyG34GutyTNr+okam7s/Fzc1+i3kcqOP8vk6OuajuE9qZJ6Rs+10/1JFtXFYMdyarnU1rZuJesg==", + "version": "2.88.11", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.11.tgz", + "integrity": "sha512-M83/wfQ1EkspjkE2lNWNV5ui2Cv7UCv1swW1DqljahbzLVWltcsexQh8jYtuS/vzFXP+HySntGM83ZXA9fn17w==", "dev": true, "requires": { "aws-sign2": "~0.7.0", @@ -8996,7 +8757,7 @@ "json-stringify-safe": "~5.0.1", "mime-types": "~2.1.19", "performance-now": "^2.1.0", - "qs": "~6.5.2", + "qs": "~6.10.3", "safe-buffer": "^5.1.2", "tough-cookie": "~2.5.0", "tunnel-agent": "^0.6.0", @@ -9106,9 +8867,9 @@ "optional": true }, "@esbuild/linux-loong64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz", - "integrity": "sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==", + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz", + "integrity": "sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==", "optional": true }, "@esbuild/linux-mips64el": { @@ -9136,9 +8897,9 @@ "optional": true }, "@esbuild/linux-x64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.16.tgz", - "integrity": "sha512-G1+09TopOzo59/55lk5Q0UokghYLyHTKKzD5lXsAOOlGDbieGEFJpJBr3BLDbf7cz89KX04sBeExAR/pL/26sA==", + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz", + "integrity": "sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==", "optional": true }, "@esbuild/netbsd-x64": { @@ -9246,9 +9007,9 @@ "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==" }, "@iconify/utils": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@iconify/utils/-/utils-2.0.11.tgz", - "integrity": "sha512-oEBZkHpkgySHcMZi80ycoJ+ZdLoJhmbN0+gUK8qNPY79ndus8fBHKPyjjwz5kIvr5U9yiym+xBTTnZOB3m5/Pw==", + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@iconify/utils/-/utils-2.0.12.tgz", + "integrity": "sha512-hhUyt1/k5RRhfcW/PRRdBw8e1ACehJT5QEZJRm7HnkCiUx11/0ccLr7K0OMlPSwjnfYcBS2gAUD3EpmL0iJCkQ==", "requires": { "@antfu/install-pkg": "^0.1.1", "@antfu/utils": "^0.7.2", @@ -9487,6 +9248,12 @@ "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, + "@types/lodash": { + "version": "4.14.191", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.191.tgz", + "integrity": "sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==", + "dev": true + }, "@types/node": { "version": "18.11.18", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", @@ -9693,9 +9460,9 @@ } }, "minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-bNH9mmM9qsJ2X4r2Nat1B//1dJVcn3+iBLa3IgqJ7EbGaDNepL9QSHOxN4ng33s52VMMhhIfgCYDk3C4ZmlDAg==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "requires": { "brace-expansion": "^2.0.1" } @@ -9882,13 +9649,13 @@ "requires": {} }, "@vueuse/core": { - "version": "9.10.0", - "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-9.10.0.tgz", - "integrity": "sha512-CxMewME07qeuzuT/AOIQGv0EhhDoojniqU6pC3F8m5VC76L47UT18DcX88kWlP3I7d3qMJ4u/PD8iSRsy3bmNA==", + "version": "9.11.0", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-9.11.0.tgz", + "integrity": "sha512-7yZJ8LNOssA8ZmeSjd4F+wbFBA4csiP4TiaXgruqg1H4PAtzSkv93PPwFLvQkSnfo3Bar+e+6QoRvWjhz7l2Xg==", "requires": { "@types/web-bluetooth": "^0.0.16", - "@vueuse/metadata": "9.10.0", - "@vueuse/shared": "9.10.0", + "@vueuse/metadata": "9.11.0", + "@vueuse/shared": "9.11.0", "vue-demi": "*" }, "dependencies": { @@ -9901,14 +9668,14 @@ } }, "@vueuse/metadata": { - "version": "9.10.0", - "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-9.10.0.tgz", - "integrity": "sha512-G5VZhgTCapzU9rv0Iq2HBrVOSGzOKb+OE668NxhXNcTjUjwYxULkEhAw70FtRLMZc+hxcFAzDZlKYA0xcwNMuw==" + "version": "9.11.0", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-9.11.0.tgz", + "integrity": "sha512-HhtG2SWkcfZBLbamHdvLn7jKOCFpw/ifXjVTd5ilFkj98WVUk/3UTQ03wF1XIkuhSO4+b45hD2lfG9/GdKCF7w==" }, "@vueuse/shared": { - "version": "9.10.0", - "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-9.10.0.tgz", - "integrity": "sha512-vakHJ2ZRklAzqmcVBL38RS7BxdBA4+5poG9NsSyqJxrt9kz0zX3P5CXMy0Hm6LFbZXUgvKdqAS3pUH1zX/5qTQ==", + "version": "9.11.0", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-9.11.0.tgz", + "integrity": "sha512-8lO7wD5abYxupKy2KynH1pSgP715ky6iCrWYb8aX2AuAVi9uHXj7qE1dw6BnmArSaLHci4x9iuzWPCpAzUkC/A==", "requires": { "vue-demi": "*" }, @@ -10418,6 +10185,16 @@ "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", "dev": true }, + "call-bind": { + "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" + } + }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -10430,9 +10207,9 @@ "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==" }, "caniuse-lite": { - "version": "1.0.30001442", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001442.tgz", - "integrity": "sha512-239m03Pqy0hwxYPYR5JwOIxRJfLTWtle9FV8zosfV5pHg+/51uD4nxcUlM8+mWWGfwKtt8lJNHnD3cWw9VZ6ow==" + "version": "1.0.30001445", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001445.tgz", + "integrity": "sha512-8sdQIdMztYmzfTMO6KfLny878Ln9c2M0fc7EH60IjlP4Dc4PiCy7K2Vl3ITmWgOyPgVQKa5x+UP/KqFsxj4mBg==" }, "caseless": { "version": "0.12.0", @@ -11047,14 +10824,6 @@ "esbuild-windows-32": "0.14.54", "esbuild-windows-64": "0.14.54", "esbuild-windows-arm64": "0.14.54" - }, - "dependencies": { - "@esbuild/linux-loong64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz", - "integrity": "sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==", - "optional": true - } } }, "esbuild-android-64": { @@ -11763,6 +11532,17 @@ "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==" }, + "get-intrinsic": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, "get-stream": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", @@ -11882,6 +11662,12 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true + }, "hash-sum": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", @@ -12151,9 +11937,9 @@ } }, "jiti": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.16.1.tgz", - "integrity": "sha512-kJUp4Bj44uTaZAwG6R2/GjbodOWHULn8Swue0B7tY8v5BpTkUvDR+zBM5tsbC4x/jCeYDZ+mAdrUIScwIo4oPw==" + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.16.2.tgz", + "integrity": "sha512-OKBOVWmU3FxDt/UH4zSwiKPuc1nihFZiOD722FuJlngvLz2glX1v2/TJIgoA4+mrpnXxHV6dSAoCvPcYQtoG5A==" }, "joi": { "version": "17.7.0", @@ -12240,9 +12026,9 @@ }, "dependencies": { "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.2.0.tgz", + "integrity": "sha512-LN6QV1IJ9ZhxWTNdktaPClrNfp8xdSAYS0Zk2ddX7XsXZAxckMHPCBcHRo0cTcEIgYPRiGEkmji3Idkh2yFtYw==", "devOptional": true }, "tough-cookie": { @@ -12400,8 +12186,7 @@ "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "lodash._reinterpolate": { "version": "3.0.0", @@ -12668,9 +12453,9 @@ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" }, "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.8.tgz", + "integrity": "sha512-RZ6dBYuj8dRSfxpUSu+NsdF1dpPpluJxwOp+6IoDp/sH2QNDSvurYsAa+F1WxY2RjA1iP93xhcsUoYbF2XBqVg==", "requires": { "whatwg-url": "^5.0.0" }, @@ -12734,6 +12519,12 @@ "integrity": "sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==", "devOptional": true }, + "object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true + }, "on-headers": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", @@ -13016,10 +12807,13 @@ "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" }, "qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "dev": true + "version": "6.10.4", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.4.tgz", + "integrity": "sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } }, "querystringify": { "version": "2.2.0", @@ -13334,6 +13128,17 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" }, + "side-channel": { + "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", + "object-inspect": "^1.9.0" + } + }, "siginfo": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", @@ -13642,9 +13447,9 @@ }, "dependencies": { "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.2.0.tgz", + "integrity": "sha512-LN6QV1IJ9ZhxWTNdktaPClrNfp8xdSAYS0Zk2ddX7XsXZAxckMHPCBcHRo0cTcEIgYPRiGEkmji3Idkh2yFtYw==", "dev": true } } @@ -13659,9 +13464,9 @@ }, "dependencies": { "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.2.0.tgz", + "integrity": "sha512-LN6QV1IJ9ZhxWTNdktaPClrNfp8xdSAYS0Zk2ddX7XsXZAxckMHPCBcHRo0cTcEIgYPRiGEkmji3Idkh2yFtYw==", "devOptional": true } } @@ -13843,9 +13648,9 @@ } }, "minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-bNH9mmM9qsJ2X4r2Nat1B//1dJVcn3+iBLa3IgqJ7EbGaDNepL9QSHOxN4ng33s52VMMhhIfgCYDk3C4ZmlDAg==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "requires": { "brace-expansion": "^2.0.1" } @@ -13859,12 +13664,12 @@ "dev": true }, "untyped": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/untyped/-/untyped-1.2.1.tgz", - "integrity": "sha512-hEtBC6MvqXLEEpx5ItPhnpgHIf3hRP310IYHj7N3D5zjdLJnmJNsGRDFbovk6DM2dekF/OBWuxDr0b6479eUkA==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/untyped/-/untyped-1.2.2.tgz", + "integrity": "sha512-EANYd5L6AdpgfldlgMcmvOOnj092nWhy0ybhc7uhEH12ipytDYz89EOegBQKj8qWL3u1wgYnmFjADhsuCJs5Aw==", "requires": { - "@babel/core": "^7.20.7", - "@babel/standalone": "^7.20.11", + "@babel/core": "^7.20.12", + "@babel/standalone": "^7.20.12", "@babel/types": "^7.20.7", "scule": "^1.0.0" } @@ -13896,9 +13701,9 @@ }, "dependencies": { "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.2.0.tgz", + "integrity": "sha512-LN6QV1IJ9ZhxWTNdktaPClrNfp8xdSAYS0Zk2ddX7XsXZAxckMHPCBcHRo0cTcEIgYPRiGEkmji3Idkh2yFtYw==" } } }, @@ -13984,10 +13789,10 @@ "vite": "^3.0.0 || ^4.0.0" }, "dependencies": { - "@esbuild/linux-x64": { + "@esbuild/linux-loong64": { "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz", - "integrity": "sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz", + "integrity": "sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==", "optional": true }, "esbuild": { @@ -14071,165 +13876,45 @@ "why-is-node-running": "^2.2.2" }, "dependencies": { - "@esbuild/android-arm": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.16.tgz", - "integrity": "sha512-BUuWMlt4WSXod1HSl7aGK8fJOsi+Tab/M0IDK1V1/GstzoOpqc/v3DqmN8MkuapPKQ9Br1WtLAN4uEgWR8x64A==", - "optional": true - }, - "@esbuild/android-arm64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.16.tgz", - "integrity": "sha512-hFHVAzUKp9Tf8psGq+bDVv+6hTy1bAOoV/jJMUWwhUnIHsh6WbFMhw0ZTkqDuh7TdpffFoHOiIOIxmHc7oYRBQ==", - "optional": true - }, - "@esbuild/android-x64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.16.tgz", - "integrity": "sha512-9WhxJpeb6XumlfivldxqmkJepEcELekmSw3NkGrs+Edq6sS5KRxtUBQuKYDD7KqP59dDkxVbaoPIQFKWQG0KLg==", - "optional": true - }, - "@esbuild/darwin-arm64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.16.tgz", - "integrity": "sha512-8Z+wld+vr/prHPi2O0X7o1zQOfMbXWGAw9hT0jEyU/l/Yrg+0Z3FO9pjPho72dVkZs4ewZk0bDOFLdZHm8jEfw==", - "optional": true - }, - "@esbuild/darwin-x64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.16.tgz", - "integrity": "sha512-CYkxVvkZzGCqFrt7EgjFxQKhlUPyDkuR9P0Y5wEcmJqVI8ncerOIY5Kej52MhZyzOBXkYrJgZeVZC9xXXoEg9A==", - "optional": true - }, - "@esbuild/freebsd-arm64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.16.tgz", - "integrity": "sha512-fxrw4BYqQ39z/3Ja9xj/a1gMsVq0xEjhSyI4a9MjfvDDD8fUV8IYliac96i7tzZc3+VytyXX+XNsnpEk5sw5Wg==", - "optional": true - }, - "@esbuild/freebsd-x64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.16.tgz", - "integrity": "sha512-8p3v1D+du2jiDvSoNVimHhj7leSfST9YlKsAEO7etBfuqjaBMndo0fmjNLp0JCMld+XIx9L80tooOkyUv1a1PQ==", - "optional": true - }, - "@esbuild/linux-arm": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.16.tgz", - "integrity": "sha512-bYaocE1/PTMRmkgSckZ0D0Xn2nox8v2qlk+MVVqm+VECNKDdZvghVZtH41dNtBbwADSvA6qkCHGYeWm9LrNCBw==", - "optional": true - }, - "@esbuild/linux-arm64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.16.tgz", - "integrity": "sha512-N3u6BBbCVY3xeP2D8Db7QY8I+nZ+2AgOopUIqk+5yCoLnsWkcVxD2ay5E9iIdvApFi1Vg1lZiiwaVp8bOpAc4A==", - "optional": true - }, - "@esbuild/linux-ia32": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.16.tgz", - "integrity": "sha512-dxjqLKUW8GqGemoRT9v8IgHk+T4tRm1rn1gUcArsp26W9EkK/27VSjBVUXhEG5NInHZ92JaQ3SSMdTwv/r9a2A==", - "optional": true - }, "@esbuild/linux-loong64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.16.tgz", - "integrity": "sha512-MdUFggHjRiCCwNE9+1AibewoNq6wf94GLB9Q9aXwl+a75UlRmbRK3h6WJyrSGA6ZstDJgaD2wiTSP7tQNUYxwA==", - "optional": true - }, - "@esbuild/linux-mips64el": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.16.tgz", - "integrity": "sha512-CO3YmO7jYMlGqGoeFeKzdwx/bx8Vtq/SZaMAi+ZLDUnDUdfC7GmGwXzIwDJ70Sg+P9pAemjJyJ1icKJ9R3q/Fg==", - "optional": true - }, - "@esbuild/linux-ppc64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.16.tgz", - "integrity": "sha512-DSl5Czh5hCy/7azX0Wl9IdzPHX2H8clC6G87tBnZnzUpNgRxPFhfmArbaHoAysu4JfqCqbB/33u/GL9dUgCBAw==", - "optional": true - }, - "@esbuild/linux-riscv64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.16.tgz", - "integrity": "sha512-sSVVMEXsqf1fQu0j7kkhXMViroixU5XoaJXl1u/u+jbXvvhhCt9YvA/B6VM3aM/77HuRQ94neS5bcisijGnKFQ==", - "optional": true - }, - "@esbuild/linux-s390x": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.16.tgz", - "integrity": "sha512-jRqBCre9gZGoCdCN/UWCCMwCMsOg65IpY9Pyj56mKCF5zXy9d60kkNRdDN6YXGjr3rzcC4DXnS/kQVCGcC4yPQ==", - "optional": true - }, - "@esbuild/netbsd-x64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.16.tgz", - "integrity": "sha512-xwjGJB5wwDEujLaJIrSMRqWkbigALpBNcsF9SqszoNKc+wY4kPTdKrSxiY5ik3IatojePP+WV108MvF6q6np4w==", - "optional": true - }, - "@esbuild/openbsd-x64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.16.tgz", - "integrity": "sha512-yeERkoxG2nR2oxO5n+Ms7MsCeNk23zrby2GXCqnfCpPp7KNc0vxaaacIxb21wPMfXXRhGBrNP4YLIupUBrWdlg==", - "optional": true - }, - "@esbuild/sunos-x64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.16.tgz", - "integrity": "sha512-nHfbEym0IObXPhtX6Va3H5GaKBty2kdhlAhKmyCj9u255ktAj0b1YACUs9j5H88NRn9cJCthD1Ik/k9wn8YKVg==", - "optional": true - }, - "@esbuild/win32-arm64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.16.tgz", - "integrity": "sha512-pdD+M1ZOFy4hE15ZyPX09fd5g4DqbbL1wXGY90YmleVS6Y5YlraW4BvHjim/X/4yuCpTsAFvsT4Nca2lbyDH/A==", - "optional": true - }, - "@esbuild/win32-ia32": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.16.tgz", - "integrity": "sha512-IPEMfU9p0c3Vb8PqxaPX6BM9rYwlTZGYOf9u+kMdhoILZkVKEjq6PKZO0lB+isojWwAnAqh4ZxshD96njTXajg==", - "optional": true - }, - "@esbuild/win32-x64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.16.tgz", - "integrity": "sha512-1YYpoJ39WV/2bnShPwgdzJklc+XS0bysN6Tpnt1cWPdeoKOG4RMEY1g7i534QxXX/rPvNx/NLJQTTCeORYzipg==", + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz", + "integrity": "sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==", "optional": true }, "esbuild": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.16.tgz", - "integrity": "sha512-24JyKq10KXM5EBIgPotYIJ2fInNWVVqflv3gicIyQqfmUqi4HvDW1VR790cBgLJHCl96Syy7lhoz7tLFcmuRmg==", + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.17.tgz", + "integrity": "sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==", "requires": { - "@esbuild/android-arm": "0.16.16", - "@esbuild/android-arm64": "0.16.16", - "@esbuild/android-x64": "0.16.16", - "@esbuild/darwin-arm64": "0.16.16", - "@esbuild/darwin-x64": "0.16.16", - "@esbuild/freebsd-arm64": "0.16.16", - "@esbuild/freebsd-x64": "0.16.16", - "@esbuild/linux-arm": "0.16.16", - "@esbuild/linux-arm64": "0.16.16", - "@esbuild/linux-ia32": "0.16.16", - "@esbuild/linux-loong64": "0.16.16", - "@esbuild/linux-mips64el": "0.16.16", - "@esbuild/linux-ppc64": "0.16.16", - "@esbuild/linux-riscv64": "0.16.16", - "@esbuild/linux-s390x": "0.16.16", - "@esbuild/linux-x64": "0.16.16", - "@esbuild/netbsd-x64": "0.16.16", - "@esbuild/openbsd-x64": "0.16.16", - "@esbuild/sunos-x64": "0.16.16", - "@esbuild/win32-arm64": "0.16.16", - "@esbuild/win32-ia32": "0.16.16", - "@esbuild/win32-x64": "0.16.16" + "@esbuild/android-arm": "0.16.17", + "@esbuild/android-arm64": "0.16.17", + "@esbuild/android-x64": "0.16.17", + "@esbuild/darwin-arm64": "0.16.17", + "@esbuild/darwin-x64": "0.16.17", + "@esbuild/freebsd-arm64": "0.16.17", + "@esbuild/freebsd-x64": "0.16.17", + "@esbuild/linux-arm": "0.16.17", + "@esbuild/linux-arm64": "0.16.17", + "@esbuild/linux-ia32": "0.16.17", + "@esbuild/linux-loong64": "0.16.17", + "@esbuild/linux-mips64el": "0.16.17", + "@esbuild/linux-ppc64": "0.16.17", + "@esbuild/linux-riscv64": "0.16.17", + "@esbuild/linux-s390x": "0.16.17", + "@esbuild/linux-x64": "0.16.17", + "@esbuild/netbsd-x64": "0.16.17", + "@esbuild/openbsd-x64": "0.16.17", + "@esbuild/sunos-x64": "0.16.17", + "@esbuild/win32-arm64": "0.16.17", + "@esbuild/win32-ia32": "0.16.17", + "@esbuild/win32-x64": "0.16.17" } }, "rollup": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.9.1.tgz", - "integrity": "sha512-GswCYHXftN8ZKGVgQhTFUJB/NBXxrRGgO2NCy6E8s1rwEJ4Q9/VttNqcYfEvx4dTo4j58YqdC3OVztPzlKSX8w==", + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.10.0.tgz", + "integrity": "sha512-JmRYz44NjC1MjVF2VKxc0M1a97vn+cDxeqWmnwyAF4FvpjK8YFdHpaqvQB+3IxCvX05vJxKZkoMDU8TShhmJVA==", "requires": { "fsevents": "~2.3.2" } diff --git a/frontend/package.json b/frontend/package.json index 0b92cbdef4..72cb6c18d6 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -44,6 +44,7 @@ "bootstrap-vue-3": "^0.5.1", "core-js": "^3.27.2", "dotenv": "^16.0.0", + "lodash": "^4.17.21", "serve": "^14.1.2", "unplugin-icons": "^0.15.1", "unplugin-vue-components": "^0.22.11", @@ -55,6 +56,7 @@ "devDependencies": { "@rushstack/eslint-patch": "^1.1.0", "@types/jsdom": "^20.0.1", + "@types/lodash": "^4.14.191", "@types/node": "^18.11.18", "@typescript-eslint/eslint-plugin": "^5.48.2", "@typescript-eslint/parser": "^5.48.2", diff --git a/frontend/src/App.vue b/frontend/src/App.vue index dbb6de93c3..4f3c6c66fd 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -18,9 +18,7 @@ diff --git a/frontend/src/common/CollapseCard.vue b/frontend/src/common/CollapseCard.vue index 7a9808d243..02e42bc5b8 100644 --- a/frontend/src/common/CollapseCard.vue +++ b/frontend/src/common/CollapseCard.vue @@ -37,7 +37,7 @@ @@ -46,11 +46,10 @@ diff --git a/frontend/src/common/FormCheckboxGroup.vue b/frontend/src/common/FormCheckboxGroup.vue index ab9500add0..54c8bfa0ea 100644 --- a/frontend/src/common/FormCheckboxGroup.vue +++ b/frontend/src/common/FormCheckboxGroup.vue @@ -21,7 +21,7 @@ import FormFieldTemplate from "./FormFieldTemplate.vue"; import type { FormFieldTemplateType, FormCheckBoxGroupOptionType, -} from "../core/AppType"; +} from "../core/FormType"; const props = defineProps({ // form field template props (optional): label, required, tooltip, note, id, errorMsg @@ -46,7 +46,7 @@ const computedValue = computed({ return props.value; }, set(newValue: Array) { - emit("updateValue", props.fieldProps.id, newValue); + emit("updateValue", newValue, props.fieldProps.id); }, }); diff --git a/frontend/src/common/FormComponentOptions.vue b/frontend/src/common/FormComponentOptions.vue index 759cc9b89f..89876458a9 100644 --- a/frontend/src/common/FormComponentOptions.vue +++ b/frontend/src/common/FormComponentOptions.vue @@ -2,40 +2,40 @@
diff --git a/frontend/src/common/FormFieldTemplate.vue b/frontend/src/common/FormFieldTemplate.vue index 744454d383..110af4165f 100644 --- a/frontend/src/common/FormFieldTemplate.vue +++ b/frontend/src/common/FormFieldTemplate.vue @@ -20,7 +20,7 @@ diff --git a/frontend/src/common/FormInput.vue b/frontend/src/common/FormInput.vue index f9e3999719..b81d2a79c6 100644 --- a/frontend/src/common/FormInput.vue +++ b/frontend/src/common/FormInput.vue @@ -9,7 +9,7 @@ import { computed } from "vue"; import type { PropType } from "vue"; import FormFieldTemplate from "./FormFieldTemplate.vue"; -import type { FormFieldTemplateType } from "../core/AppType"; +import type { FormFieldTemplateType } from "../core/FormType"; const props = defineProps({ // form field template props (optional): label, required, tooltip, note, id, errorMsg @@ -29,7 +29,7 @@ const computedValue = computed({ return props.value; }, set(newValue: string | number) { - emit("updateValue", props.fieldProps.id, newValue); + emit("updateValue", newValue, props.fieldProps.id); }, }); diff --git a/frontend/src/common/FormRadioGroup.vue b/frontend/src/common/FormRadioGroup.vue index b83de953de..4ef81dbb6a 100644 --- a/frontend/src/common/FormRadioGroup.vue +++ b/frontend/src/common/FormRadioGroup.vue @@ -21,7 +21,7 @@ import FormFieldTemplate from "./FormFieldTemplate.vue"; import type { FormFieldTemplateType, FormRadioGroupOptionType, -} from "../core/AppType"; +} from "../core/FormType"; const props = defineProps({ // form field template props (optional): label, required, tooltip, note, id, errorMsg @@ -45,7 +45,7 @@ const computedValue = computed({ return props.value; }, set(newValue: Array) { - emit("updateValue", props.fieldProps.id, newValue); + emit("updateValue", newValue, props.fieldProps.id); }, }); diff --git a/frontend/src/common/FormSelect.vue b/frontend/src/common/FormSelect.vue index ec41054fbf..380d00c80a 100644 --- a/frontend/src/common/FormSelect.vue +++ b/frontend/src/common/FormSelect.vue @@ -19,7 +19,7 @@ import type { CommonObjectType, FormFieldTemplateType, FromSelectOptionType, -} from "../core/AppType"; +} from "../core/FormType"; const props = defineProps({ // form field template props (optional): label, required, tooltip, note, id, errorMsg @@ -44,7 +44,7 @@ const computedValue = computed({ return props.value; }, set(newValue: CommonObjectType | string) { - emit("updateValue", props.fieldProps.id, newValue); + emit("updateValue", newValue, props.fieldProps.id); }, }); diff --git a/frontend/src/common/FormTable.vue b/frontend/src/common/FormTable.vue index ab6b068cc8..f301847511 100644 --- a/frontend/src/common/FormTable.vue +++ b/frontend/src/common/FormTable.vue @@ -13,8 +13,38 @@ @@ -38,7 +68,8 @@ diff --git a/frontend/src/common/examples/FormJsonSchemaExample.vue b/frontend/src/common/examples/FormJsonSchemaExample.vue index c6d4773765..9a07254237 100644 --- a/frontend/src/common/examples/FormJsonSchemaExample.vue +++ b/frontend/src/common/examples/FormJsonSchemaExample.vue @@ -27,12 +27,6 @@ import { ref } from "vue"; import FormComponentOptions from "../FormComponentOptions.vue"; import CollapseCard from "../CollapseCard.vue"; -import type { - FormFieldTemplateType, - FromSelectOptionType, - FormCheckBoxGroupOptionType, - FormRadioGroupOptionType, -} from "../../core/AppType"; /* ------- container props ----------*/ const containerProps = { diff --git a/frontend/src/common/examples/SingleFormComponentExample.vue b/frontend/src/common/examples/SingleFormComponentExample.vue index 8fb92194ae..6b41062cca 100644 --- a/frontend/src/common/examples/SingleFormComponentExample.vue +++ b/frontend/src/common/examples/SingleFormComponentExample.vue @@ -58,7 +58,7 @@ import type { FromSelectOptionType, FormCheckBoxGroupOptionType, FormRadioGroupOptionType, -} from "../../core/AppType"; +} from "../../core/FormType"; /* ------- form data ----------- */ const form = ref({ diff --git a/frontend/src/core/AppType.ts b/frontend/src/core/FormType.ts similarity index 82% rename from frontend/src/core/AppType.ts rename to frontend/src/core/FormType.ts index 597c1fec18..7edf38cb24 100644 --- a/frontend/src/core/AppType.ts +++ b/frontend/src/core/FormType.ts @@ -46,7 +46,6 @@ export interface FormSectionSchemaType { export interface FormComponentSchemaType { fieldProps: FormFieldTemplateType; type: string; - disabled?: boolean; state?: boolean; depend?: { fieldId: string; @@ -61,15 +60,22 @@ export interface FormComponentSchemaType { subfields?: Array; // for table and group } -export interface FormValidationRequiredField { - containerId: string; - fieldId: string; +/* ---------------- form validation type -------------- */ +export interface FormValidationRequiredFieldType { + path: string; + subPath?: string; subFieldId?: string; } -export interface FormValidationResultType { - containerId: string; - fieldId: string; - subFieldId?: string; +export interface FormFieldValidationResultType { + path: string; errorMsg: string; } + +export interface FormValidationResultType { + [key: string]: Array; +} + +export interface FormDisableType { + [key: string]: Array; +} diff --git a/frontend/src/helpers/AppState.ts b/frontend/src/helpers/AppState.ts deleted file mode 100644 index 75008140cd..0000000000 --- a/frontend/src/helpers/AppState.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { reactive } from "vue"; -import type { FormValidationResultType } from "../core/AppType"; - -// global app states - -// vue3 is hard to detect array or object change, so we make them as global state, so the change can be detected by the component is using the value -export const validationResult = reactive({ - value: [] as Array, - setValue(result: Array) { - this.value = result; - }, -}); diff --git a/frontend/src/helpers/formvalidation/MissingFieldCheck.ts b/frontend/src/helpers/formvalidation/MissingFieldCheck.ts new file mode 100644 index 0000000000..70b2859eed --- /dev/null +++ b/frontend/src/helpers/formvalidation/MissingFieldCheck.ts @@ -0,0 +1,55 @@ +import _ from "lodash"; +import type { + FormValidationRequiredFieldType, + CommonObjectType, +} from "../../core/FormType"; + +export const checkMissingRequireField = ( + requireList: Array, + formData: CommonObjectType +) => { + // todo: so far it supports at most 2 level in-depth array, if the depth increase, need to redesign the structure + + let missingRequire = false; + + for (let i = 0; i < requireList.length; i++) { + const require = requireList[i]; + if (!require.subFieldId) { + if (_.get(formData, require.path) == "") { + missingRequire = true; + break; + } + } else if (_.get(formData, require.path)) { + // check table and group, to see if each row got all required fields + for (let j = 0; j < _.get(formData, require.path).length; j++) { + if (!require.subPath) { + if ( + _.get(formData, `${require.path}.${j}.${require.subFieldId}`) == "" + ) { + missingRequire = true; + break; + } + } else { + const subArray = _.get( + formData, + `${require.path}.${j}.${require.subPath}` + ); + if (Array.isArray(subArray)) { + for (let k = 0; k < subArray.length; k++) { + if ( + _.get( + formData, + `${require.path}.${j}.${require.subPath}.${k}.${require.subFieldId}` + ) == "" + ) { + missingRequire = true; + break; + } + } + } + } + } + } + } + return missingRequire; +}; diff --git a/frontend/src/pages/MyApplicationPage.vue b/frontend/src/pages/MyApplicationPage.vue deleted file mode 100644 index 09637efd4e..0000000000 --- a/frontend/src/pages/MyApplicationPage.vue +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/applynewclient/ApplyNewClientPage.vue b/frontend/src/pages/applynewclient/ApplyNewClientPage.vue index bed4dc2d33..319966a267 100644 --- a/frontend/src/pages/applynewclient/ApplyNewClientPage.vue +++ b/frontend/src/pages/applynewclient/ApplyNewClientPage.vue @@ -7,13 +7,7 @@ - + import { ref, computed } from "vue"; +import ConfirmModal from "../../common/ConfirmModal.vue"; +import PrimarySquareButton from "../../common/buttons/PrimarySquareButton.vue"; import FormSections from "./formsections/FormSections.vue"; import SubmitFailText from "./SubmitFailText.vue"; import SubmitSucessText from "./SubmitSucessText.vue"; -import ConfirmModal from "../../common/ConfirmModal.vue"; -import PrimarySquareButton from "../../common/buttons/PrimarySquareButton.vue"; -import { validationResult } from "../../helpers/AppState"; +import { checkMissingRequireField } from "../../helpers/formvalidation/MissingFieldCheck"; import { - newClientData, commonRequiredFields, businessRequiredFields, individualRequiredFields, -} from "./NewClient"; +} from "./formvalidationrules/RequiredFields"; +import { formData } from "../../store/newclientform/FormData"; +import { validationResult } from "../../store/newclientform/FormValidation"; import { primary } from "../../utils/color"; -import type { FormValidationRequiredField } from "../../core/AppType"; - -const data = ref(JSON.parse(JSON.stringify(newClientData))); - -/* --------------- update form value functions --------------------- */ -const updateFormValue = ( - containerId: string, - fieldId: string, - newValue: any -) => { - console.log( - "containerId", - containerId, - "fieldId", - fieldId, - "newValue", - newValue - ); - data.value[containerId][fieldId] = newValue; - console.log("data", data.value); - // todo: this is where to check if each field meets its validation rules - - // an example to remove hardcode validation error - if (data.value.begin.client_type == "individual") - validationResult.setValue([]); -}; -const updateFormArrayValue = ( - containerId: string, - fieldId: string, - subFieldId: string, - newValue: any, - rowIndex: number -) => { - data.value[containerId][fieldId][rowIndex][subFieldId] = newValue; - // todo: this is where to check if each sub field meets its validation rules -}; -const addRow = (containerId: string, fieldId: string) => { - const newContainer = newClientData[containerId as keyof typeof newClientData]; - const defaultNew = JSON.parse( - JSON.stringify(newContainer[fieldId as keyof typeof newContainer][0]) - ); - data.value[containerId][fieldId].push({ - ...defaultNew, - index: Math.floor(Math.random() * 10000000), - }); -}; -const deleteRow = (containerId: string, fieldId: string, rowIndex: number) => { - data.value[containerId][fieldId].splice(rowIndex, 1); -}; /* -------------- check when to enable submit button ------------------- */ -const checkMissingRequireField = ( - requireList: Array, - formData: any -) => { - let missingRequire = false; - for (let i = 0; i < requireList.length; i++) { - const require = requireList[i]; - if (!require.subFieldId) { - if (formData[require.containerId][require.fieldId] == "") { - missingRequire = true; - break; - } - } else { - // check table and group, to see if each row got all required fields - for ( - let j = 0; - j < formData[require.containerId][require.fieldId].length; - j++ - ) { - const row = formData[require.containerId][require.fieldId][j]; - if (row[require.subFieldId] == "") { - missingRequire = true; - break; - } - } - } - } - return missingRequire; -}; const computedButtonDisable = computed(() => { // check when to enable the submit button // enable the submit button when got all required fields - // create required lists, and then check the data for those required ones + // checkMissingRequireField returns true if has a missing field if ( - data.value.begin["client_type"] == "individual" || - data.value.begin["client_type"] == "soleProprietorship" + formData.state.begin["client_type"] == "individual" || + formData.state.begin["client_type"] == "soleProprietorship" ) return ( - checkMissingRequireField(commonRequiredFields, data.value) || - checkMissingRequireField(individualRequiredFields, data.value) + checkMissingRequireField(commonRequiredFields, formData.state) || + checkMissingRequireField(individualRequiredFields, formData.state) ); return ( - checkMissingRequireField(commonRequiredFields, data.value) || - checkMissingRequireField(businessRequiredFields, data.value) + checkMissingRequireField(commonRequiredFields, formData.state) || + checkMissingRequireField(businessRequiredFields, formData.state) ); }); -/* -------------------- data validation check --------------------------- */ - /* ---------- modal placehoder to confirm submit ----------- */ const success = ref(false); const error = ref(false); @@ -153,15 +68,33 @@ const loading = ref(false); const modalShow = ref(false); const openModal = () => { modalShow.value = true; + console.log("formdata", formData.state); }; const onModalOkay = () => { modalShow.value = false; - // todo: call the data validatio api and receive the result from backend and pass it to form sections + /* -------------------- data validation check --------------------------- */ + validationResult.actions.setValidationResult({ + begin: [ + { + path: "begin.client_type", + errorMsg: "WrongType, select inidividual to get rid of this error", + }, + ], + location: [ + { + path: "location.address.0.country", + errorMsg: "Must be Canada", + }, + { + path: "location.address.0.contact.0.cell_phone", + errorMsg: "Can not be empty", + }, + ], + }); - // a hardcode example to pass validationResult - validationResult.setValue([ - { containerId: "begin", fieldId: "client_type", errorMsg: "WrongType" }, - ]); + /* ------------ return confirmation Id -------------- */ + // todo: if all validation rules pass, call backend api to write form data into tables, and return a confirmation id + // set success to be true, and display success text message to the user }; const onModalCancel = () => { modalShow.value = false; diff --git a/frontend/src/pages/applynewclient/NewClient.ts b/frontend/src/pages/applynewclient/NewClient.ts deleted file mode 100644 index 17cdc6b1c5..0000000000 --- a/frontend/src/pages/applynewclient/NewClient.ts +++ /dev/null @@ -1,323 +0,0 @@ -import type { - FormSectionSchemaType, - FormComponentSchemaType, - FormRadioGroupOptionType, - FormValidationRequiredField, -} from "../../core/AppType"; - -const formApplyReason: Array = [ - { code: "never_had", text: "I've never had a client number" }, - { - code: "need_new", - text: "I need a new client number because of an amalgamation", - }, - { code: "joint_venture", text: "I'm entering into a joint venture" }, -]; - -const formTenureType: Array = [ - { code: "forest", text: "Forest" }, - { code: "range", text: "Range" }, - { code: "oilgas", text: "Oil & gas" }, -]; - -export const newClientData = { - begin: { - reason: [""], - tenure_type: [""], - client_type: "", - }, - information: { - first_name: "", - last_name: "", - birthdate: "", - registration_number: "", - doing_business_as_check: false, - doing_business_as: "", - business_name: "", - worksafebc_number: "", - }, - contact: { - address: [ - { - stree_address: "", - country: "", - province: "", - city: "", - postal_code: "", - index: 0, // any array data need to have this index, as an auto generated random number to be as unique identity - }, - ], - }, - authorized: { - individuals: [ - { - contact_type: "", - firsname_or_company: "", - last_name: "", - phone: "", - email: "", - index: 0, // need use this index to be unique identity when display data in form tables - }, - ], - }, -}; - -// each id is aligned with the newClientData -export const beginSectionSchema: FormSectionSchemaType = { - container: { title: "Let's begin", id: "begin" }, // property for CollapseCard when use it - content: [ - // form content for each CollapseCard - { - fieldProps: { label: "Why are you applying?", id: "reason" }, - type: "radiogroup", - options: formApplyReason, - }, - { - fieldProps: { label: "Select your tenure type", id: "tenure_type" }, - type: "radiogroup", - options: formTenureType, - }, - { - fieldProps: { - label: "What type of business are you?", - required: true, - id: "client_type", - }, - type: "select", - options: [ - { value: "individual", text: "Individual" }, - { value: "company", text: "Company" }, - ], - }, - ], -}; - -const informationSectionCommonSchema: Array = [ - { - fieldProps: { label: "First name", required: true, id: "first_name" }, - type: "input", - }, - { - fieldProps: { label: "Last name", id: "last_name" }, - type: "input", - }, - { - fieldProps: { - label: "Please select your birthdate", - required: true, - id: "birthdate", - }, - type: "input", // todo: change to date - }, -]; - -export const informationSectionSchema: { - individual: FormSectionSchemaType; - soleProprietorship: FormSectionSchemaType; - company: FormSectionSchemaType; -} = { - individual: { - container: { title: "Individual information", id: "information" }, - content: informationSectionCommonSchema, - }, - soleProprietorship: { - container: { title: "Individual information", id: "information" }, - content: [ - ...informationSectionCommonSchema, - { - fieldProps: { label: "Registration number", id: "registration_number" }, - type: "input", - }, - { - fieldProps: { - label: "Are you 'doing business as'?", - id: "doing_business_as_check", - }, - type: "checkbox", - }, - { - fieldProps: { - label: "Doing business as", - id: "doing_business_as", - }, - type: "input", - depend: { - fieldId: "doing_business_as_check", - value: true, - }, - }, - ], - }, - company: { - container: { title: "Company information", id: "information" }, - content: [ - { - fieldProps: { - label: "Registered business name", - id: "business_name", - required: true, - note: "Start typing to search BC registered businesses database", - }, - type: "input", - }, - { - fieldProps: { - label: "Incorporation or registration number", - id: "registration_number", - required: true, - }, - type: "input", - }, - { - fieldProps: { - label: "WorkSafe BC number", - id: "worksafebc_number", - }, - type: "input", - }, - { - fieldProps: { - label: "Are you 'doing business as'?", - id: "doing_business_as_check", - required: true, - }, - type: "checkbox", - }, - { - fieldProps: { - label: "Doing business as", - id: "doing_business_as", - }, - type: "input", - depend: { - fieldId: "doing_business_as_check", - value: true, - }, - }, - ], - }, -}; - -export const contactSectionSchema: FormSectionSchemaType = { - container: { title: "Contact Information", id: "contact" }, - content: [ - { - fieldProps: { - id: "address", - }, - type: "group", - addButtonText: "+ Add another address", - deleteButtonText: "- Remove this address", - subfields: [ - { - fieldProps: { - label: "Street address", - id: "stree_address", - required: true, - }, - type: "input", - }, - { - fieldProps: { - label: "Country", - id: "country", - required: true, - }, - type: "input", - }, - { - fieldProps: { - label: "Province", - id: "province", - required: true, - }, - type: "input", - }, - { - fieldProps: { - label: "City", - id: "city", - required: true, - }, - type: "input", - }, - { - fieldProps: { - label: "Postal code", - id: "postal_code", - required: true, - }, - type: "input", - }, - ], - }, - ], -}; - -export const authorizedSectionSchema: FormSectionSchemaType = { - container: { title: "Add authorized individuals", id: "authorized" }, - content: [ - { - fieldProps: { - id: "individuals", - }, - type: "table", - addButtonText: "+ Add another authorized person", - subfields: [ - { - fieldProps: { label: "Contact Type", id: "contact_type" }, - type: "select", - options: [], - }, - { - fieldProps: { - label: "First name or company", - id: "firsname_or_company", - }, - type: "input", - }, - { - fieldProps: { - label: "Last name", - id: "last_name", - }, - type: "input", - }, - { - fieldProps: { - label: "Phone number", - id: "phone", - }, - type: "input", - }, - { - fieldProps: { - label: "Email", - id: "email", - }, - type: "input", - }, - ], - }, - ], -}; - -/* --------------- Required Fields --------------------- */ -export const commonRequiredFields: Array = [ - { containerId: "begin", fieldId: "client_type" }, - { containerId: "contact", fieldId: "address", subFieldId: "stree_address" }, - { containerId: "contact", fieldId: "address", subFieldId: "country" }, - { containerId: "contact", fieldId: "address", subFieldId: "province" }, - { containerId: "contact", fieldId: "address", subFieldId: "city" }, - { containerId: "contact", fieldId: "address", subFieldId: "postal_code" }, -]; - -export const businessRequiredFields: Array = [ - { containerId: "information", fieldId: "business_name" }, - { containerId: "information", fieldId: "registration_number" }, -]; - -export const individualRequiredFields: Array = [ - { containerId: "information", fieldId: "first_name" }, - { containerId: "information", fieldId: "birthdate" }, -]; diff --git a/frontend/src/pages/applynewclient/formsections/FormSectionTemplate.vue b/frontend/src/pages/applynewclient/formsections/FormSectionTemplate.vue index 6e543e568c..08ec9d3d08 100644 --- a/frontend/src/pages/applynewclient/formsections/FormSectionTemplate.vue +++ b/frontend/src/pages/applynewclient/formsections/FormSectionTemplate.vue @@ -8,27 +8,66 @@