diff --git a/.github/workflows/workflow.yml b/.github/workflows/workflow.yml index 5a2d7e6f..3d77b1aa 100644 --- a/.github/workflows/workflow.yml +++ b/.github/workflows/workflow.yml @@ -3,7 +3,7 @@ on: push: branches: - master - - support-ngx-translate-17 + - polls pull_request: branches: - master @@ -12,7 +12,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - node-version: [20.x] + node-version: [22.x] steps: - uses: actions/checkout@v2 diff --git a/angular.json b/angular.json index bf5f0608..7431ffe5 100644 --- a/angular.json +++ b/angular.json @@ -13,7 +13,8 @@ "@schematics/angular:component": { "style": "scss", "inlineStyle": true, - "export": true + "export": true, + "changeDetection": "OnPush" } }, "root": "projects/stream-chat-angular", diff --git a/package-lock.json b/package-lock.json index 487e7a14..ba06f0fa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,7 +21,7 @@ "@ctrl/ngx-emoji-mart": "^8.2.0", "@floating-ui/dom": "^1.6.3", "@ngx-translate/core": "^14.0.0", - "@stream-io/stream-chat-css": "5.8.0", + "@stream-io/stream-chat-css": "5.14.0", "@stream-io/transliterate": "^1.5.2", "angular-mentions": "1.4.0", "dayjs": "^1.11.10", @@ -34,7 +34,7 @@ "replace": "^1.2.2", "rxjs": "~7.4.0", "starwars-names": "^1.6.0", - "stream-chat": "9.0.0", + "stream-chat": "9.20.0", "ts-node": "^10.9.2", "tslib": "^2.3.0", "uuid": "^9.0.1", @@ -79,7 +79,7 @@ "typedoc-plugin-markdown": "^3.17.1", "typedoc-plugin-reference-excluder": "^1.1.3", "typescript": "~4.8.4", - "vercel": "^34.2.0", + "vercel": "^48.1.6", "wait-on": "^6.0.0", "webpack-bundle-analyzer": "^4.5.0" } @@ -3325,6 +3325,7 @@ "resolved": "https://registry.npmjs.org/@edge-runtime/format/-/format-2.2.1.tgz", "integrity": "sha512-JQTRVuiusQLNNLe2W9tnzBlV/GvSVcozLl4XZHk5swnRZ/v6jp8TqR8P7sqmJsQqblDZ3EztcWmLDbhRje/+8g==", "dev": true, + "license": "MPL-2.0", "engines": { "node": ">=16" } @@ -3334,6 +3335,7 @@ "resolved": "https://registry.npmjs.org/@edge-runtime/node-utils/-/node-utils-2.3.0.tgz", "integrity": "sha512-uUtx8BFoO1hNxtHjp3eqVPC/mWImGb2exOfGjMLUoipuWgjej+f4o/VP4bUI8U40gu7Teogd5VTeZUkGvJSPOQ==", "dev": true, + "license": "MPL-2.0", "engines": { "node": ">=16" } @@ -3343,6 +3345,7 @@ "resolved": "https://registry.npmjs.org/@edge-runtime/ponyfill/-/ponyfill-2.4.2.tgz", "integrity": "sha512-oN17GjFr69chu6sDLvXxdhg0Qe8EZviGSuqzR9qOiKh4MhFYGdBBcqRNzdmYeAdeRzOW2mM9yil4RftUQ7sUOA==", "dev": true, + "license": "MPL-2.0", "engines": { "node": ">=16" } @@ -3352,6 +3355,7 @@ "resolved": "https://registry.npmjs.org/@edge-runtime/primitives/-/primitives-4.1.0.tgz", "integrity": "sha512-Vw0lbJ2lvRUqc7/soqygUX216Xb8T3WBZ987oywz6aJqRxcwSVWwr9e+Nqo2m9bxobA9mdbWNNoRY6S9eko1EQ==", "dev": true, + "license": "MPL-2.0", "engines": { "node": ">=16" } @@ -3361,6 +3365,7 @@ "resolved": "https://registry.npmjs.org/@edge-runtime/vm/-/vm-3.2.0.tgz", "integrity": "sha512-0dEVyRLM/lG4gp1R/Ik5bfPl/1wX00xFwd5KcNH602tzBa09oF7pbTKETEhR1GjZ75K6OJnYFu8II2dyMhONMw==", "dev": true, + "license": "MPL-2.0", "dependencies": { "@edge-runtime/primitives": "4.1.0" }, @@ -3368,6 +3373,40 @@ "node": ">=16" } }, + "node_modules/@emnapi/core": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.5.0.tgz", + "integrity": "sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.1.0", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.5.0.tgz", + "integrity": "sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz", + "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@es-joy/jsdoccomment": { "version": "0.42.0", "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.42.0.tgz", @@ -3864,6 +3903,7 @@ "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" } @@ -4040,6 +4080,29 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@isaacs/fs-minipass/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -4150,106 +4213,148 @@ "dev": true }, "node_modules/@mapbox/node-pre-gyp": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", - "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-2.0.0.tgz", + "integrity": "sha512-llMXd39jtP0HpQLVI37Bf1m2ADlEb35GYSh1SDSLsBhR+5iCxiNGlT31yqbNtVHygHAtMy6dWFERpU2JgufhPg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { + "consola": "^3.2.3", "detect-libc": "^2.0.0", - "https-proxy-agent": "^5.0.0", - "make-dir": "^3.1.0", + "https-proxy-agent": "^7.0.5", "node-fetch": "^2.6.7", - "nopt": "^5.0.0", - "npmlog": "^5.0.1", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.11" + "nopt": "^8.0.0", + "semver": "^7.5.3", + "tar": "^7.4.0" }, "bin": { "node-pre-gyp": "bin/node-pre-gyp" + }, + "engines": { + "node": ">=18" } }, - "node_modules/@mapbox/node-pre-gyp/node_modules/are-we-there-yet": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", - "deprecated": "This package is no longer supported.", + "node_modules/@mapbox/node-pre-gyp/node_modules/abbrev": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz", + "integrity": "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==", "dev": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, + "license": "ISC", "engines": { - "node": ">=10" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@mapbox/node-pre-gyp/node_modules/gauge": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", - "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", - "deprecated": "This package is no longer supported.", + "node_modules/@mapbox/node-pre-gyp/node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "dev": true, + "license": "MIT", "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.1", - "object-assign": "^4.1.1", - "signal-exit": "^3.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" + "agent-base": "^7.1.2", + "debug": "4" }, "engines": { - "node": ">=10" + "node": ">= 14" } }, - "node_modules/@mapbox/node-pre-gyp/node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "node_modules/@mapbox/node-pre-gyp/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/minizlib": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", "dev": true, + "license": "MIT", "dependencies": { - "whatwg-url": "^5.0.0" + "minipass": "^7.1.2" }, "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "node": ">= 18" } }, "node_modules/@mapbox/node-pre-gyp/node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz", + "integrity": "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==", "dev": true, + "license": "ISC", "dependencies": { - "abbrev": "1" + "abbrev": "^3.0.0" }, "bin": { "nopt": "bin/nopt.js" }, "engines": { - "node": ">=6" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@mapbox/node-pre-gyp/node_modules/npmlog": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", - "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", - "deprecated": "This package is no longer supported.", + "node_modules/@mapbox/node-pre-gyp/node_modules/tar": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.1.tgz", + "integrity": "sha512-nlGpxf+hv0v7GkWBK2V9spgactGOp0qvfWRxUMjqHyzrt3SgwE48DIv/FhqPHJYLHpgW1opq3nERbz5Anq7n1g==", "dev": true, + "license": "ISC", "dependencies": { - "are-we-there-yet": "^2.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^3.0.0", - "set-blocking": "^2.0.0" + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.0.5.tgz", + "integrity": "sha512-TBr9Cf9onSAS2LQ2+QHx6XcC6h9+RIzJgbqG3++9TUZSH204AwEy5jg3BTQ0VATsyoGj4ee49tN/y6rvaOOtcg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.5.0", + "@emnapi/runtime": "^1.5.0", + "@tybys/wasm-util": "^0.10.1" } }, "node_modules/@ngtools/webpack": { @@ -4620,6 +4725,26 @@ "@octokit/openapi-types": "^22.2.0" } }, + "node_modules/@oxc-project/runtime": { + "version": "0.82.3", + "resolved": "https://registry.npmjs.org/@oxc-project/runtime/-/runtime-0.82.3.tgz", + "integrity": "sha512-LNh5GlJvYHAnMurO+EyA8jJwN1rki7l3PSHuosDh2I7h00T6/u9rCkUjg/SvPmT1CZzvhuW0y+gf7jcqUy/Usg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.82.3", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.82.3.tgz", + "integrity": "sha512-6nCUxBnGX0c6qfZW5MaF6/fmu5dHJDMiMPaioKHKs5mi5+8/FHQ7WGjgQIz1zxpmceMYfdIXkOaLYE+ejbuOtA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", @@ -4677,6 +4802,212 @@ "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==", "dev": true }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.0.0-beta.35", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-beta.35.tgz", + "integrity": "sha512-zVTg0544Ib1ldJSWwjy8URWYHlLFJ98rLnj+2FIj5fRs4KqGKP4VgH/pVUbXNGxeLFjItie6NSK1Un7nJixneQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.0.0-beta.35", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-beta.35.tgz", + "integrity": "sha512-WPy0qx22CABTKDldEExfpYHWHulRoPo+m/YpyxP+6ODUPTQexWl8Wp12fn1CVP0xi0rOBj7ugs6+kKMAJW56wQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.0.0-beta.35", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-beta.35.tgz", + "integrity": "sha512-3k1TabJafF/GgNubXMkfp93d5p30SfIMOmQ5gm1tFwO+baMxxVPwDs3FDvSl+feCWwXxBA+bzemgkaDlInmp1Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.0.0-beta.35", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-beta.35.tgz", + "integrity": "sha512-GAiapN5YyIocnBVNEiOxMfWO9NqIeEKKWohj1sPLGc61P+9N1meXOOCiAPbLU+adXq0grtbYySid+Or7f2q+Mg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.0.0-beta.35", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-beta.35.tgz", + "integrity": "sha512-okPKKIE73qkUMvq7dxDyzD0VIysdV4AirHqjf8tGTjuNoddUAl3WAtMYbuZCEKJwUyI67UINKO1peFVlYEb+8w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.0.0-beta.35", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-beta.35.tgz", + "integrity": "sha512-Nky8Q2cxyKVkEETntrvcmlzNir5khQbDfX3PflHPbZY7XVZalllRqw7+MW5vn+jTsk5BfKVeLsvrF4344IU55g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.0.0-beta.35", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-beta.35.tgz", + "integrity": "sha512-8aHpWVSfZl3Dy2VNFG9ywmlCPAJx45g0z+qdOeqmYceY7PBAT4QGzii9ig1hPb1pY8K45TXH44UzQwr2fx352Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.0.0-beta.35", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-beta.35.tgz", + "integrity": "sha512-1r1Ac/vTcm1q4kRiX/NB6qtorF95PhjdCxKH3Z5pb+bWMDZnmcz18fzFlT/3C6Qpj/ZqUF+EUrG4QEDXtVXGgg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.0.0-beta.35", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-beta.35.tgz", + "integrity": "sha512-AFl1LnuhUBDfX2j+cE6DlVGROv4qG7GCPDhR1kJqi2+OuXGDkeEjqRvRQOFErhKz1ckkP/YakvN7JheLJ2PKHQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.0.0-beta.35", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-beta.35.tgz", + "integrity": "sha512-Tuwb8vPs+TVJlHhyLik+nwln/burvIgaPDgg6wjNZ23F1ttjZi0w0rQSZfAgsX4jaUbylwCETXQmTp3w6vcJMw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rolldown/binding-wasm32-wasi": { + "version": "1.0.0-beta.35", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-beta.35.tgz", + "integrity": "sha512-rG0OozgqNUYcpu50MpICMlJflexRVtQfjlN9QYf6hoel46VvY0FbKGwBKoeUp2K5D4i8lV04DpEMfTZlzRjeiA==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^1.0.3" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.0.0-beta.35", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-beta.35.tgz", + "integrity": "sha512-WeOfAZrycFo9+ZqTDp3YDCAOLolymtKGwImrr9n+OW0lpwI2UKyKXbAwGXRhydAYbfrNmuqWyfyoAnLh3X9Hjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rolldown/binding-win32-ia32-msvc": { + "version": "1.0.0-beta.35", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.0.0-beta.35.tgz", + "integrity": "sha512-XkLT7ikKGiUDvLh7qtJHRukbyyP1BIrD1xb7A+w4PjIiOKeOH8NqZ+PBaO4plT7JJnLxx+j9g/3B7iylR1nTFQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.0.0-beta.35", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-beta.35.tgz", + "integrity": "sha512-rftASFKVzjbcQHTCYHaBIDrnQFzbeV50tm4hVugG3tPjd435RHZC2pbeGV5IPdKEqyJSuurM/GfbV3kLQ3LY/A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.35", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.35.tgz", + "integrity": "sha512-slYrCpoxJUqzFDDNlvrOYRazQUNRvWPjXA17dAOISY3rDMxX6k8K4cj2H+hEYMHF81HO3uNd5rHVigAWRM5dSg==", + "dev": true, + "license": "MIT" + }, "node_modules/@rollup/plugin-json": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.1.0.tgz", @@ -4723,14 +5054,15 @@ } }, "node_modules/@rollup/pluginutils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", - "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", + "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", "dev": true, + "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" + "picomatch": "^4.0.2" }, "engines": { "node": ">=14.0.0" @@ -4744,6 +5076,19 @@ } } }, + "node_modules/@rollup/pluginutils/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/@schematics/angular": { "version": "15.0.5", "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-15.0.5.tgz", @@ -5410,7 +5755,8 @@ "version": "0.25.24", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz", "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@sindresorhus/is": { "version": "4.6.0", @@ -5437,9 +5783,9 @@ } }, "node_modules/@stream-io/stream-chat-css": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@stream-io/stream-chat-css/-/stream-chat-css-5.8.0.tgz", - "integrity": "sha512-p9Z1Ktx3E+o+7EFubNyZWNjg26UNgux8IAK0nhoC04t47Cok5pSHcUbPmTgiICSPXYNNEcDxrCil5crM0ItUUA==", + "version": "5.14.0", + "resolved": "https://registry.npmjs.org/@stream-io/stream-chat-css/-/stream-chat-css-5.14.0.tgz", + "integrity": "sha512-FhTpHhIIkEKDlTCWQ2cZdNwkhJMnyDW6R5s7xh+PAnmyeQavKY0WrX7tsXpP/M0Sqrfw3KLkIq6lC+hMgUB5Ow==", "license": "MIT" }, "node_modules/@stream-io/transliterate": { @@ -5482,6 +5828,7 @@ "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.11.1.tgz", "integrity": "sha512-7hWZS0NRpEsNV8vWJzg7FEz6V8MaLNeJOmwmghqUXTpzk16V1LLZhdo+4QvE/+zv4cVci0OviuJFnqhEfoV3+g==", "dev": true, + "license": "MIT", "dependencies": { "fast-glob": "^3.2.7", "minimatch": "^3.0.4", @@ -5509,6 +5856,17 @@ "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==" }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", + "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@types/body-parser": { "version": "1.19.5", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", @@ -6220,190 +6578,156 @@ "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", "dev": true }, - "node_modules/@vercel/build-utils": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/@vercel/build-utils/-/build-utils-8.2.0.tgz", - "integrity": "sha512-yDr/zp/SX45mIy6DO8IRD6hmEs6gIr33/ajT3y8efUt/crQvgNtaSkbx9ubbwkR4RV/qKL213v6kXxj+EpsnlQ==", - "dev": true - }, - "node_modules/@vercel/error-utils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@vercel/error-utils/-/error-utils-2.0.2.tgz", - "integrity": "sha512-Sj0LFafGpYr6pfCqrQ82X6ukRl5qpmVrHM/191kNYFqkkB9YkjlMAj6QcEsvCG259x4QZ7Tya++0AB85NDPbKQ==", - "dev": true - }, - "node_modules/@vercel/fun": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@vercel/fun/-/fun-1.1.0.tgz", - "integrity": "sha512-SpuPAo+MlAYMtcMcC0plx7Tv4Mp7SQhJJj1iIENlOnABL24kxHpL09XLQMGzZIzIW7upR8c3edwgfpRtp+dhVw==", + "node_modules/@vercel/blob": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@vercel/blob/-/blob-1.0.2.tgz", + "integrity": "sha512-Im/KeFH4oPx7UsM+QiteimnE07bIUD7JK6CBafI9Z0jRFogaialTBMiZj8EKk/30ctUYsrpIIyP9iIY1YxWnUQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@tootallnate/once": "2.0.0", - "async-listen": "1.2.0", - "debug": "4.1.1", - "execa": "3.2.0", - "fs-extra": "8.1.0", - "generic-pool": "3.4.2", - "micro": "9.3.5-canary.3", - "ms": "2.1.1", - "node-fetch": "2.6.7", - "path-match": "1.2.4", - "promisepipe": "3.0.0", - "semver": "7.3.5", - "stat-mode": "0.3.0", - "stream-to-promise": "2.2.0", - "tar": "4.4.18", - "tree-kill": "1.2.2", - "uid-promise": "1.0.0", - "uuid": "3.3.2", - "xdg-app-paths": "5.1.0", - "yauzl-promise": "2.1.3" + "async-retry": "^1.3.3", + "is-buffer": "^2.0.5", + "is-node-process": "^1.2.0", + "throttleit": "^2.1.0", + "undici": "^5.28.4" }, "engines": { - "node": ">= 10" + "node": ">=16.14" } }, - "node_modules/@vercel/fun/node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "node_modules/@vercel/fun/node_modules/debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "node_modules/@vercel/build-utils": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@vercel/build-utils/-/build-utils-12.1.0.tgz", + "integrity": "sha512-yqpAh2KHm9iWUXo/aRWiLIxi8dMAwFtse2iZsg2QNEMs9W20va6L8PMFvdAa5MX9pgRwc38gbjD3V7drxSwq4g==", "dev": true, - "dependencies": { - "ms": "^2.1.1" - } + "license": "Apache-2.0" }, - "node_modules/@vercel/fun/node_modules/execa": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-3.2.0.tgz", - "integrity": "sha512-kJJfVbI/lZE1PZYDI5VPxp8zXPO9rtxOkhpZ0jMKha56AI9y2gGVC6bkukStQf0ka5Rh15BA5m7cCCH4jmHqkw==", + "node_modules/@vercel/detect-agent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@vercel/detect-agent/-/detect-agent-1.0.0.tgz", + "integrity": "sha512-AIPgNkmtFcDgPCl+xvTT1ga90OL7OTX2RKM4zu0PMpwBthPfN2DpdHy10n3bh8K+CA22GDU0/ncjzprZsrk0sw==", "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "p-finally": "^2.0.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, + "license": "Apache-2.0", "engines": { - "node": "^8.12.0 || >=9.7.0" + "node": ">=14" } }, - "node_modules/@vercel/fun/node_modules/fs-minipass": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "node_modules/@vercel/error-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@vercel/error-utils/-/error-utils-2.0.3.tgz", + "integrity": "sha512-CqC01WZxbLUxoiVdh9B/poPbNpY9U+tO1N9oWHwTl5YAZxcqXmmWJ8KNMFItJCUUWdY3J3xv8LvAuQv2KZ5YdQ==", "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@vercel/express": { + "version": "0.0.22", + "resolved": "https://registry.npmjs.org/@vercel/express/-/express-0.0.22.tgz", + "integrity": "sha512-tbTy5tLA2ouIlLtiJvkb4VcCgzbgOonTupYYJzJrhFd4FDxcS0nSSmu7O/QDivpZz5c3Uk9xW5qLYnPn4rjrXQ==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "minipass": "^2.6.0" + "@vercel/nft": "0.30.1", + "@vercel/node": "5.3.24", + "@vercel/static-config": "3.1.2", + "fs-extra": "11.1.0", + "path-to-regexp": "8.3.0", + "rolldown": "1.0.0-beta.35", + "ts-morph": "12.0.0", + "zod": "3.22.4" } }, - "node_modules/@vercel/fun/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "node_modules/@vercel/express/node_modules/fs-extra": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.0.tgz", + "integrity": "sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==", "dev": true, + "license": "MIT", "dependencies": { - "pump": "^3.0.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=14.14" } }, - "node_modules/@vercel/fun/node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "node_modules/@vercel/express/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", "dev": true, - "engines": { - "node": ">=8.12.0" + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/@vercel/fun/node_modules/minipass": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "node_modules/@vercel/express/node_modules/path-to-regexp": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", + "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==", "dev": true, - "dependencies": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/@vercel/fun/node_modules/minizlib": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "node_modules/@vercel/express/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, - "dependencies": { - "minipass": "^2.9.0" + "license": "MIT", + "engines": { + "node": ">= 10.0.0" } }, - "node_modules/@vercel/fun/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "node_modules/@vercel/fun": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@vercel/fun/-/fun-1.1.6.tgz", + "integrity": "sha512-xDiM+bD0fSZyzcjsAua3D+guXclvHOSTzr03UcZEQwYzIjwWjLduT7bl2gAaeNIe7fASAIZd0P00clcj0On4rQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "minimist": "^1.2.6" + "@tootallnate/once": "2.0.0", + "async-listen": "1.2.0", + "debug": "4.3.4", + "generic-pool": "3.4.2", + "micro": "9.3.5-canary.3", + "ms": "2.1.1", + "node-fetch": "2.6.7", + "path-match": "1.2.4", + "promisepipe": "3.0.0", + "semver": "7.5.4", + "stat-mode": "0.3.0", + "stream-to-promise": "2.2.0", + "tar": "6.2.1", + "tinyexec": "0.3.2", + "tree-kill": "1.2.2", + "uid-promise": "1.0.0", + "xdg-app-paths": "5.1.0", + "yauzl-promise": "2.1.3" }, - "bin": { - "mkdirp": "bin/cmd.js" + "engines": { + "node": ">= 18" } }, "node_modules/@vercel/fun/node_modules/ms": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "node_modules/@vercel/fun/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==", - "dev": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/@vercel/fun/node_modules/p-finally": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz", - "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==", "dev": true, - "engines": { - "node": ">=8" - } + "license": "MIT" }, "node_modules/@vercel/fun/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -6414,58 +6738,24 @@ "node": ">=10" } }, - "node_modules/@vercel/fun/node_modules/tar": { - "version": "4.4.18", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.18.tgz", - "integrity": "sha512-ZuOtqqmkV9RE1+4odd+MhBpibmCxNP6PJhH/h2OqNuotTX7/XHPZQJv2pKvWMplFH9SIZZhitehh6vBH6LO8Pg==", - "dev": true, - "dependencies": { - "chownr": "^1.1.4", - "fs-minipass": "^1.2.7", - "minipass": "^2.9.0", - "minizlib": "^1.3.3", - "mkdirp": "^0.5.5", - "safe-buffer": "^5.2.1", - "yallist": "^3.1.1" - }, - "engines": { - "node": ">=4.5" - } - }, - "node_modules/@vercel/fun/node_modules/uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "dev": true, - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/@vercel/fun/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, "node_modules/@vercel/gatsby-plugin-vercel-analytics": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@vercel/gatsby-plugin-vercel-analytics/-/gatsby-plugin-vercel-analytics-1.0.11.tgz", "integrity": "sha512-iTEA0vY6RBPuEzkwUTVzSHDATo1aF6bdLLspI68mQ/BTbi5UQEGjpjyzdKOVcSYApDtFU6M6vypZ1t4vIEnHvw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "web-vitals": "0.2.4" } }, "node_modules/@vercel/gatsby-plugin-vercel-builder": { - "version": "2.0.31", - "resolved": "https://registry.npmjs.org/@vercel/gatsby-plugin-vercel-builder/-/gatsby-plugin-vercel-builder-2.0.31.tgz", - "integrity": "sha512-p0ggHYNe8tMVlsBYVHwjavLpOtkxbw+VN1ywzsIcqnwJpYi9HSgbm+zRxmNqz/4autn6KZCmgEcWanhjhMaH5Q==", + "version": "2.0.95", + "resolved": "https://registry.npmjs.org/@vercel/gatsby-plugin-vercel-builder/-/gatsby-plugin-vercel-builder-2.0.95.tgz", + "integrity": "sha512-G0sHN+aNMhQud+J0qksXwsnlYLFSC6h253KlvnxAAqxDjmZVKE6SfVmXWHLklVAfbvg5un9fwYDCMY0H3wiiUQ==", "dev": true, "dependencies": { "@sinclair/typebox": "0.25.24", - "@vercel/build-utils": "8.2.0", - "@vercel/routing-utils": "3.1.0", + "@vercel/build-utils": "12.1.0", "esbuild": "0.14.47", "etag": "1.8.1", "fs-extra": "11.1.0" @@ -6477,6 +6767,7 @@ "integrity": "sha512-wI4ZiIfFxpkuxB8ju4MHrGwGLyp1+awEHAHVpx6w7a+1pmYIq8T9FGEVVwFo0iFierDoMj++Xq69GXWYn2EiwA==", "dev": true, "hasInstallScript": true, + "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -6514,6 +6805,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -6530,6 +6822,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -6546,6 +6839,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -6562,6 +6856,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" @@ -6578,6 +6873,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" @@ -6594,6 +6890,7 @@ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -6610,6 +6907,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -6626,6 +6924,7 @@ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -6642,6 +6941,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -6658,6 +6958,7 @@ "mips64el" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -6674,6 +6975,7 @@ "ppc64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -6690,6 +6992,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "netbsd" @@ -6706,6 +7009,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "openbsd" @@ -6722,6 +7026,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "sunos" @@ -6738,6 +7043,7 @@ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -6754,6 +7060,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -6770,6 +7077,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -6783,6 +7091,7 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.0.tgz", "integrity": "sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -6793,10 +7102,11 @@ } }, "node_modules/@vercel/gatsby-plugin-vercel-builder/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", "dev": true, + "license": "MIT", "dependencies": { "universalify": "^2.0.0" }, @@ -6809,72 +7119,173 @@ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10.0.0" } }, "node_modules/@vercel/go": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@vercel/go/-/go-3.1.1.tgz", - "integrity": "sha512-mrzomNYltxkjvtUmaYry5YEyvwTz6c/QQHE5Gr/pPGRIniUiP6T6OFOJ49RBN7e6pRXaNzHPVuidiuBhvHh5+Q==", - "dev": true + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@vercel/go/-/go-3.2.3.tgz", + "integrity": "sha512-PErgHlV7cf8hyPq31aRsL4xm5t4rCSO6vN5AQLlAGSy3ctdgqG7sI6hq/CAKo3CfgIhVHUwNYapFJgGJB/s4OA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@vercel/h3": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@vercel/h3/-/h3-0.1.2.tgz", + "integrity": "sha512-6KkCdsqPBPR83b6R6jvC/2TgU1jWdZI8cTMq/OcgcNLmni5mHFxy+YMaXgxPXgevUxve5+ag7c1bv66wPPYZZw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@vercel/node": "5.3.24", + "@vercel/static-config": "3.1.2" + } + }, + "node_modules/@vercel/hono": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@vercel/hono/-/hono-0.1.2.tgz", + "integrity": "sha512-sVjshneJZ6ww5PSU4DhUK9dPr5Q9/UREKMk/00oCUw/XZhosJ2OxXYvZzDlexB1YtgqtbAxZUkE0jWkTwPOSWQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@vercel/node": "5.3.24", + "@vercel/static-config": "3.1.2", + "ts-morph": "12.0.0" + } }, "node_modules/@vercel/hydrogen": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@vercel/hydrogen/-/hydrogen-1.0.2.tgz", - "integrity": "sha512-/Q2MKk1GfOuZAnkE9jQexjtUQqanbY65R+xtJWd9yKIgwcfRI1hxiNH3uXyVM5AvLoY+fxxULkSuxDtUKpkJpQ==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@vercel/hydrogen/-/hydrogen-1.2.4.tgz", + "integrity": "sha512-eb16oesfgHuBlXxe+WqI+rMdP4QpeHXLJh9ropFy+StkWC2F0ZFKegutEpvJCRg0FHttRnn9uMzMmzJ2F4xKkg==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@vercel/static-config": "3.0.0", + "@vercel/static-config": "3.1.2", "ts-morph": "12.0.0" } }, "node_modules/@vercel/next": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/@vercel/next/-/next-4.2.11.tgz", - "integrity": "sha512-jCMTa75CIkX8vfY4BiW6BajSLXXQRE1doNeX9nO+gzYtaKTfxB5FiVKNAocjDwP249WIR0o1vziHus5bX84jFg==", + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@vercel/next/-/next-4.13.0.tgz", + "integrity": "sha512-DIfZucRjTihIUolR2v9MpugpazPoo02NkwA+Pk+/NmmSunf7XLSC42QG1OkSyzeGsXQ0t4nPAY6NQKYp9+NZnQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@vercel/nft": "0.27.0" + "@vercel/nft": "0.30.1" } }, "node_modules/@vercel/nft": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@vercel/nft/-/nft-0.27.0.tgz", - "integrity": "sha512-W5pValyhToK9hbgEUAM6sLRUIl1I++RsFnXKHXtND50P1+vZ+OYPCzq1OOz0Ok6ghK6aOwae8G/rEAXkLedC+w==", + "version": "0.30.1", + "resolved": "https://registry.npmjs.org/@vercel/nft/-/nft-0.30.1.tgz", + "integrity": "sha512-2mgJZv4AYBFkD/nJ4QmiX5Ymxi+AisPLPcS/KPXVqniyQNqKXX+wjieAbDXQP3HcogfEbpHoRMs49Cd4pfkk8g==", "dev": true, + "license": "MIT", "dependencies": { - "@mapbox/node-pre-gyp": "^1.0.5", - "@rollup/pluginutils": "^4.0.0", + "@mapbox/node-pre-gyp": "^2.0.0", + "@rollup/pluginutils": "^5.1.3", "acorn": "^8.6.0", "acorn-import-attributes": "^1.9.5", "async-sema": "^3.1.1", "bindings": "^1.4.0", "estree-walker": "2.0.2", - "glob": "^7.1.3", + "glob": "^10.4.5", "graceful-fs": "^4.2.9", - "micromatch": "^4.0.2", "node-gyp-build": "^4.2.2", + "picomatch": "^4.0.2", "resolve-from": "^5.0.0" }, "bin": { "nft": "out/cli.js" }, "engines": { - "node": ">=16" + "node": ">=18" } }, - "node_modules/@vercel/nft/node_modules/@rollup/pluginutils": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", - "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", + "node_modules/@vercel/nft/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@vercel/nft/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@vercel/nft/node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/@vercel/nft/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">= 8.0.0" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@vercel/nft/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/@vercel/nft/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, "node_modules/@vercel/nft/node_modules/resolve-from": { @@ -6882,36 +7293,40 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/@vercel/node": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@vercel/node/-/node-3.1.5.tgz", - "integrity": "sha512-1LVqdL/HKrfuLGIWEHm7O/zA6admKRClIuJOVsasvW0PHrrwUUfcoKvgHj/sH6HUEzgE9WIelqFLe8/j/tzA4A==", + "version": "5.3.24", + "resolved": "https://registry.npmjs.org/@vercel/node/-/node-5.3.24.tgz", + "integrity": "sha512-yk8pdoNbAbUO5zcmqyMPQ6kNvN896c/gJbsiGS5RvO9Gyehib5IxUOap6SnLSExH4tWAl1XTbOptfuysqZpYog==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@edge-runtime/node-utils": "2.3.0", "@edge-runtime/primitives": "4.1.0", "@edge-runtime/vm": "3.2.0", "@types/node": "16.18.11", - "@vercel/build-utils": "8.2.0", - "@vercel/error-utils": "2.0.2", - "@vercel/nft": "0.27.0", - "@vercel/static-config": "3.0.0", + "@vercel/build-utils": "12.1.0", + "@vercel/error-utils": "2.0.3", + "@vercel/nft": "0.30.1", + "@vercel/static-config": "3.1.2", "async-listen": "3.0.0", "cjs-module-lexer": "1.2.3", "edge-runtime": "2.5.9", "es-module-lexer": "1.4.1", "esbuild": "0.14.47", "etag": "1.8.1", + "mime-types": "2.1.35", "node-fetch": "2.6.9", - "path-to-regexp": "6.2.1", + "path-to-regexp": "6.1.0", + "path-to-regexp-updated": "npm:path-to-regexp@6.3.0", "ts-morph": "12.0.0", "ts-node": "10.9.1", "typescript": "4.9.5", - "undici": "5.26.5" + "undici": "5.28.4" } }, "node_modules/@vercel/node/node_modules/async-listen": { @@ -6919,6 +7334,7 @@ "resolved": "https://registry.npmjs.org/async-listen/-/async-listen-3.0.0.tgz", "integrity": "sha512-V+SsTpDqkrWTimiotsyl33ePSjA5/KrithwupuvJ6ztsqPvGv6ge4OredFhPffVXiLN/QUWvE0XcqJaYgt6fOg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 14" } @@ -6927,7 +7343,8 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@vercel/node/node_modules/esbuild": { "version": "0.14.47", @@ -6935,6 +7352,7 @@ "integrity": "sha512-wI4ZiIfFxpkuxB8ju4MHrGwGLyp1+awEHAHVpx6w7a+1pmYIq8T9FGEVVwFo0iFierDoMj++Xq69GXWYn2EiwA==", "dev": true, "hasInstallScript": true, + "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -6972,6 +7390,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -6988,6 +7407,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -7004,6 +7424,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -7020,6 +7441,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" @@ -7036,6 +7458,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" @@ -7052,6 +7475,7 @@ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -7068,6 +7492,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -7084,6 +7509,7 @@ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -7100,6 +7526,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -7116,6 +7543,7 @@ "mips64el" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -7132,6 +7560,7 @@ "ppc64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -7148,6 +7577,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "netbsd" @@ -7164,6 +7594,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "openbsd" @@ -7180,6 +7611,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "sunos" @@ -7196,6 +7628,7 @@ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -7212,6 +7645,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -7228,6 +7662,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -7241,6 +7676,7 @@ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", "dev": true, + "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -7257,16 +7693,18 @@ } }, "node_modules/@vercel/node/node_modules/path-to-regexp": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", - "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==", - "dev": true + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.1.0.tgz", + "integrity": "sha512-h9DqehX3zZZDCEm+xbfU0ZmwCGFCAAraPJWMXJ4+v32NjZJilVg3k1TcKsRgIb8IQ/izZSaydDc1OhJCZvs2Dw==", + "dev": true, + "license": "MIT" }, "node_modules/@vercel/node/node_modules/ts-node": { "version": "10.9.1", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", "dev": true, + "license": "MIT", "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -7310,6 +7748,7 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -7318,21 +7757,37 @@ "node": ">=4.2.0" } }, + "node_modules/@vercel/node/node_modules/undici": { + "version": "5.28.4", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz", + "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@fastify/busboy": "^2.0.0" + }, + "engines": { + "node": ">=14.0" + } + }, "node_modules/@vercel/python": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@vercel/python/-/python-4.2.0.tgz", - "integrity": "sha512-oubkmRRxWQJGGYFq5Q49/2c94aHKCYXB+DkdtaW55syQ9N0LVBXCnCMZ4ZatSrSI18d9mMoDSx3xi4gtByy9NA==", - "dev": true + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@vercel/python/-/python-5.0.5.tgz", + "integrity": "sha512-XLG/fDe2hflzNtSWuoASTo+N2c4hl6SbcufvBRYa7BnBQK9t4ZH1IEu+vJkq2AUoVczp5JEYLEXkIGm8KBtoeg==", + "dev": true, + "license": "Apache-2.0" }, "node_modules/@vercel/redwood": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@vercel/redwood/-/redwood-2.0.9.tgz", - "integrity": "sha512-zv0uJa+XtCJ15TdfCI5ybZM1hS3OBl28idCfN3vtWR+g5HjDSW8acYOzRw2Xy7wM1f+Fje1/Nx2AdYjCM4TWTA==", + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/@vercel/redwood/-/redwood-2.3.6.tgz", + "integrity": "sha512-Rm9xECWNIJOwtPsZ1/XcgyJj95KM7cWwNHYPMw8dzFAnLQGyapGe/YHEjxV6POI2RF8R0nFmU1t+45XBweYJJA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@vercel/nft": "0.27.0", - "@vercel/routing-utils": "3.1.0", - "semver": "6.3.1" + "@vercel/nft": "0.30.1", + "@vercel/static-config": "3.1.2", + "semver": "6.3.1", + "ts-morph": "12.0.0" } }, "node_modules/@vercel/redwood/node_modules/semver": { @@ -7340,63 +7795,59 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@vercel/remix-builder": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@vercel/remix-builder/-/remix-builder-2.1.6.tgz", - "integrity": "sha512-n2gnNW9HTWlTuEwTbtVI9GRHoQi/2kPu44l0zvFDw8GlsswW0/qJPvr8SFG83FDylQcafvW8LUWO9oXefuVrFA==", + "version": "5.4.12", + "resolved": "https://registry.npmjs.org/@vercel/remix-builder/-/remix-builder-5.4.12.tgz", + "integrity": "sha512-25HHNUpIu3TfuZnphDDX7yG+4QugbxDq0bB8d1KCeOWsKH+z0Zscg7rchs3Pqy6kdhV/US6zH+YAogtwMvdDMg==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@vercel/error-utils": "2.0.2", - "@vercel/nft": "0.27.0", - "@vercel/static-config": "3.0.0", + "@vercel/error-utils": "2.0.3", + "@vercel/nft": "0.30.1", + "@vercel/static-config": "3.1.2", + "path-to-regexp": "6.1.0", + "path-to-regexp-updated": "npm:path-to-regexp@6.3.0", "ts-morph": "12.0.0" } }, - "node_modules/@vercel/routing-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@vercel/routing-utils/-/routing-utils-3.1.0.tgz", - "integrity": "sha512-Ci5xTjVTJY/JLZXpCXpLehMft97i9fH34nu9PGav6DtwkVUF6TOPX86U0W0niQjMZ5n6/ZP0BwcJK2LOozKaGw==", - "dev": true, - "dependencies": { - "path-to-regexp": "6.1.0" - }, - "optionalDependencies": { - "ajv": "^6.0.0" - } - }, - "node_modules/@vercel/routing-utils/node_modules/path-to-regexp": { + "node_modules/@vercel/remix-builder/node_modules/path-to-regexp": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.1.0.tgz", "integrity": "sha512-h9DqehX3zZZDCEm+xbfU0ZmwCGFCAAraPJWMXJ4+v32NjZJilVg3k1TcKsRgIb8IQ/izZSaydDc1OhJCZvs2Dw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@vercel/ruby": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@vercel/ruby/-/ruby-2.1.0.tgz", - "integrity": "sha512-UZYwlSEEfVnfzTmgkD+kxex9/gkZGt7unOWNyWFN7V/ZnZSsGBUgv6hXLnwejdRi3EztgRQEBd1kUKlXdIeC0Q==", - "dev": true + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@vercel/ruby/-/ruby-2.2.1.tgz", + "integrity": "sha512-DsmTCggOa/Uvt/9JkafXx9U+Bz5eNIb6Bs422EOQo2zKwcxW88ITSh8mM5m0dQ0+B4k02X/moVim6iFa4sjazg==", + "dev": true, + "license": "Apache-2.0" }, "node_modules/@vercel/static-build": { - "version": "2.5.9", - "resolved": "https://registry.npmjs.org/@vercel/static-build/-/static-build-2.5.9.tgz", - "integrity": "sha512-jnFwCvRlBsSg8vDPahuSOvo3LvmTCzlNi6ES3fy+kaXxUK/xxDA8BGssDvWRLJIGSHNjfi6M92zGy15vjpG92A==", + "version": "2.7.23", + "resolved": "https://registry.npmjs.org/@vercel/static-build/-/static-build-2.7.23.tgz", + "integrity": "sha512-F9u6FGWShfHbhldA9nRW6FdHfM7nVESYVGg+XOuWUlnyHnN6HiOFAze8wCb5yOuF5XXlp3bpn2IUByy4CPnjHQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@vercel/gatsby-plugin-vercel-analytics": "1.0.11", - "@vercel/gatsby-plugin-vercel-builder": "2.0.31", - "@vercel/static-config": "3.0.0", + "@vercel/gatsby-plugin-vercel-builder": "2.0.95", + "@vercel/static-config": "3.1.2", "ts-morph": "12.0.0" } }, "node_modules/@vercel/static-config": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@vercel/static-config/-/static-config-3.0.0.tgz", - "integrity": "sha512-2qtvcBJ1bGY0dYGYh3iM7yGKkk971FujLEDXzuW5wcZsPr1GSEjO/w2iSr3qve6nDDtBImsGoDEnus5FI4+fIw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@vercel/static-config/-/static-config-3.1.2.tgz", + "integrity": "sha512-2d+TXr6K30w86a+WbMbGm2W91O0UzO5VeemZYBBUJbCjk/5FLLGIi8aV6RS2+WmaRvtcqNTn2pUA7nCOK3bGcQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "ajv": "8.6.3", "json-schema-to-ts": "1.6.4", @@ -7408,6 +7859,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz", "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -7634,6 +8086,7 @@ "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", "dev": true, + "license": "MIT", "peerDependencies": { "acorn": "^8" } @@ -7860,6 +8313,16 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/ansis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/ansis/-/ansis-4.2.0.tgz", + "integrity": "sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + } + }, "node_modules/any-promise": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", @@ -7985,13 +8448,35 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/async-listen/-/async-listen-1.2.0.tgz", "integrity": "sha512-CcEtRh/oc9Jc4uWeUwdpG/+Mb2YUHKmdaTf0gUr7Wa+bfp4xx70HOb3RuSTJMvqKNB1TkdTfjLdrcz2X4rkkZA==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/async-retry": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", + "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "retry": "0.13.1" + } + }, + "node_modules/async-retry/node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } }, "node_modules/async-sema": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/async-sema/-/async-sema-3.1.1.tgz", "integrity": "sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/asynckit": { "version": "0.4.0", @@ -8246,6 +8731,7 @@ "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", "dev": true, + "license": "MIT", "dependencies": { "file-uri-to-path": "1.0.0" } @@ -8415,6 +8901,7 @@ "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", "dev": true, + "license": "MIT", "engines": { "node": "*" } @@ -8553,6 +9040,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -8669,7 +9169,8 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/clean-stack": { "version": "2.2.0", @@ -8841,7 +9342,8 @@ "version": "10.1.1", "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-10.1.1.tgz", "integrity": "sha512-67ueh2IRGst/51p0n6FvPrnRjAGHY5F8xdjkgrYE7DDzpJe6qA07RYQ9VcoUeo5ATOjSOiWpSL3SWBRRbempMw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/color-convert": { "version": "2.0.1", @@ -9065,6 +9567,16 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, + "node_modules/consola": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", + "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, "node_modules/console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", @@ -9152,6 +9664,7 @@ "resolved": "https://registry.npmjs.org/convert-hrtime/-/convert-hrtime-3.0.0.tgz", "integrity": "sha512-7V+KqSvMiHp8yWDuwfww06XleMWVVB9b9tURBx+G7UTADuo5hYPuowKloz4OzOqbPezxgo+fdQ1522WzPG4OeA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -9757,10 +10270,11 @@ } }, "node_modules/detect-libc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", - "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.1.tgz", + "integrity": "sha512-ecqj/sy1jcK1uWrwpR67UhYrIFQ+5WlGxth34WquCbamhFA6hkkwiu37o6J5xCHdo1oixJRfVRw+ywV+Hq/0Aw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=8" } @@ -9926,6 +10440,20 @@ "url": "https://dotenvx.com" } }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", @@ -9991,6 +10519,7 @@ "resolved": "https://registry.npmjs.org/edge-runtime/-/edge-runtime-2.5.9.tgz", "integrity": "sha512-pk+k0oK0PVXdlT4oRp4lwh+unuKB7Ng4iZ2HB+EZ7QCEQizX360Rp/F4aRpgpRgdP2ufB35N+1KppHmYjqIGSg==", "dev": true, + "license": "MPL-2.0", "dependencies": { "@edge-runtime/format": "2.2.1", "@edge-runtime/ponyfill": "2.4.2", @@ -10014,6 +10543,7 @@ "resolved": "https://registry.npmjs.org/async-listen/-/async-listen-3.0.1.tgz", "integrity": "sha512-cWMaNwUJnf37C/S5TfCkk/15MwbPRwVYALA2jtjkbHjCmAPiDXyNJy2q3p1KAZzDLHAWyarUWSujUoHR4pEgrA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 14" } @@ -10023,6 +10553,7 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", "dev": true, + "license": "ISC", "engines": { "node": ">=14" }, @@ -10095,12 +10626,23 @@ } }, "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.1.0.tgz", + "integrity": "sha512-EoulkdKF/1xa92q25PbjuDcgJ9RDHYU2Rs3SCIvs2/dSQ3BpmxneNHmA/M7fe60M3PrV7nNGTTNbkK62l6vXiQ==", "dev": true, + "license": "MIT", "dependencies": { - "once": "^1.4.0" + "once": "~1.3.0" + } + }, + "node_modules/end-of-stream/node_modules/once": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", + "integrity": "sha512-6vaNInhu+CHxtONf3zw3vq4SP2DOQhjBvIa3rNcG0+P7eKWlYH6Peu7rHizSloRU2EwMz6GraLieis9Ac9+p1w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" } }, "node_modules/engine.io": { @@ -10370,13 +10912,10 @@ } }, "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.4" - }, + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -10385,7 +10924,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true, "engines": { "node": ">= 0.4" } @@ -10422,6 +10960,33 @@ "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", "dev": true }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/esbuild": { "version": "0.17.8", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.8.tgz", @@ -10468,6 +11033,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -10660,6 +11226,7 @@ "riscv64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -10676,6 +11243,7 @@ "s390x" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -11351,7 +11919,8 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/events-intercept/-/events-intercept-2.0.0.tgz", "integrity": "sha512-blk1va0zol9QOrdZt0rFXo5KMkNPVSp92Eju/Qz8THwKWKRKeE0T8Br/1aW6+Edkyq9xHYgYxn2QtOnUKPUp+Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/execa": { "version": "5.1.1", @@ -11585,6 +12154,7 @@ "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", "dev": true, + "license": "MIT", "dependencies": { "pend": "~1.2.0" } @@ -11620,7 +12190,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fill-range": { "version": "7.0.1", @@ -11809,6 +12380,22 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/form-data": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -11944,7 +12531,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -12000,6 +12586,7 @@ "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.4.2.tgz", "integrity": "sha512-H7cUpwCQSiJmAHM4c/aFu6fUfrhWXW1ncyh8ftxEPMu6AiYkHw9K8br720TGPZJbk5eOH2bynjZD1yPvdDAmag==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } @@ -12022,16 +12609,21 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "dev": true, + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -12055,6 +12647,19 @@ "node": ">=8.0.0" } }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", @@ -12197,12 +12802,12 @@ } }, "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -12322,23 +12927,11 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "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, + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -12350,7 +12943,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, "dependencies": { "has-symbols": "^1.0.3" }, @@ -12371,7 +12963,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, "dependencies": { "function-bind": "^1.1.2" }, @@ -13044,6 +13635,30 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/is-builtin-module": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", @@ -13173,6 +13788,13 @@ "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", "dev": true }, + "node_modules/is-node-process": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-node-process/-/is-node-process-1.2.0.tgz", + "integrity": "sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==", + "dev": true, + "license": "MIT" + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -13606,6 +14228,16 @@ "@sideway/pinpoint": "^2.0.0" } }, + "node_modules/jose": { + "version": "5.9.6", + "resolved": "https://registry.npmjs.org/jose/-/jose-5.9.6.tgz", + "integrity": "sha512-AMlnetc9+CV9asI19zHmrgS/WYsWUwCn2R7RzlbJWD7F9eWYUTGyBmU9o6PxngtLGOiDGPRu+Uc4fhKzbpteZQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -13669,6 +14301,7 @@ "resolved": "https://registry.npmjs.org/json-schema-to-ts/-/json-schema-to-ts-1.6.4.tgz", "integrity": "sha512-pR4yQ9DHz6itqswtHCm26mw45FSNfQ9rEQjosaZErhn5J3J2sIViQiz8rDaezjKAhFGpmsoczYVBgGHzFw/stA==", "dev": true, + "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.6", "ts-toolbelt": "^6.15.5" @@ -14050,9 +14683,9 @@ "dev": true }, "node_modules/linkifyjs": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/linkifyjs/-/linkifyjs-4.2.0.tgz", - "integrity": "sha512-pCj3PrQyATaoTYKHrgWRF3SJwsm61udVh+vuls/Rl6SptiDhgE7ziUIudAedRY9QEfynmM7/RmLEfPUyw1HPCw==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/linkifyjs/-/linkifyjs-4.3.2.tgz", + "integrity": "sha512-NT1CJtq3hHIreOianA8aSXn6Cw0JzYOuDQbOrSPe7gqFnCpKP++MQe3ODgO3oh2GJFORkAAdqredOa60z63GbA==", "license": "MIT" }, "node_modules/lint-staged": { @@ -14718,6 +15351,15 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -14786,6 +15428,7 @@ "resolved": "https://registry.npmjs.org/micro/-/micro-9.3.5-canary.3.tgz", "integrity": "sha512-viYIo9PefV+w9dvoIBh1gI44Mvx1BOk67B4BpC2QK77qdY0xZF0Q+vWLt/BII6cLkIc8rLmSIcJaB/OrXXKe1g==", "dev": true, + "license": "MIT", "dependencies": { "arg": "4.1.0", "content-type": "1.0.4", @@ -14802,13 +15445,15 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.0.tgz", "integrity": "sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/micro/node_modules/bytes": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -14818,6 +15463,7 @@ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -14827,6 +15473,7 @@ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -14836,6 +15483,7 @@ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", "dev": true, + "license": "MIT", "dependencies": { "depd": "~1.1.2", "inherits": "2.0.4", @@ -14852,6 +15500,7 @@ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz", "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", "dev": true, + "license": "MIT", "dependencies": { "bytes": "3.1.0", "http-errors": "1.7.3", @@ -14866,13 +15515,15 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/micro/node_modules/toidentifier": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.6" } @@ -15173,6 +15824,7 @@ "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -15477,6 +16129,27 @@ "node": ">=18" } }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, "node_modules/node-forge": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", @@ -18764,6 +19437,7 @@ "resolved": "https://registry.npmjs.org/os-paths/-/os-paths-4.4.0.tgz", "integrity": "sha512-wrAwOeXp1RRMFfQY8Sy7VaGVmPocaLwSFOYCGKSyo8qmJ+/yaafCl5BCA1IQZWqFSRBrKDYFeR9d/VyQzfH/jg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6.0" } @@ -18910,6 +19584,13 @@ "node": ">=6" } }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, "node_modules/pacote": { "version": "15.0.6", "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.0.6.tgz", @@ -19063,6 +19744,7 @@ "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -19123,7 +19805,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/path-exists": { "version": "4.0.0", @@ -19155,7 +19838,9 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/path-match/-/path-match-1.2.4.tgz", "integrity": "sha512-UWlehEdqu36jmh4h5CWJ7tARp1OEVKGHKm6+dg9qMq5RKUTV5WJrGgaZ3dN2m7WFAXDbjlHzvJvL/IUpy84Ktw==", + "deprecated": "This package is archived and no longer maintained. For support, visit https://github.com/expressjs/express/discussions", "dev": true, + "license": "MIT", "dependencies": { "http-errors": "~1.4.0", "path-to-regexp": "^1.0.0" @@ -19166,6 +19851,7 @@ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.4.0.tgz", "integrity": "sha512-oLjPqve1tuOl5aRhv8GK5eHpqP1C9fb+Ol+XTLjKfLltE44zdDbEdjPSbU7Ch5rSNsVFqZn97SrMmZLdu1/YMw==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "2.0.1", "statuses": ">= 1.2.1 < 2" @@ -19178,19 +19864,22 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/path-match/node_modules/isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/path-match/node_modules/path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz", + "integrity": "sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==", "dev": true, + "license": "MIT", "dependencies": { "isarray": "0.0.1" } @@ -19202,16 +19891,17 @@ "dev": true }, "node_modules/path-scurry": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz", - "integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=16 || 14 >=14.18" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -19241,6 +19931,14 @@ "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", "dev": true }, + "node_modules/path-to-regexp-updated": { + "name": "path-to-regexp", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", + "dev": true, + "license": "MIT" + }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -19254,7 +19952,8 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/picocolors": { "version": "1.0.0", @@ -20008,6 +20707,7 @@ "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz", "integrity": "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==", "dev": true, + "license": "MIT", "dependencies": { "parse-ms": "^2.1.0" }, @@ -20065,7 +20765,8 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/promisepipe/-/promisepipe-3.0.0.tgz", "integrity": "sha512-V6TbZDJ/ZswevgkDNpGt/YqNCiZP9ASfgU+p83uJE6NrGtvSGoOcHLiDCqkMs2+yg7F5qHdLV8d0aS8O26G/KA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/proto-list": { "version": "1.2.4", @@ -20113,16 +20814,6 @@ "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", "license": "MIT" }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "node_modules/punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -20934,6 +21625,38 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/rolldown": { + "version": "1.0.0-beta.35", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-beta.35.tgz", + "integrity": "sha512-gJATyqcsJe0Cs8RMFO8XgFjfTc0lK1jcSvirDQDSIfsJE+vt53QH/Ob+OBSJsXb98YtZXHfP/bHpELpPwCprow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/runtime": "=0.82.3", + "@oxc-project/types": "=0.82.3", + "@rolldown/pluginutils": "1.0.0-beta.35", + "ansis": "^4.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.0.0-beta.35", + "@rolldown/binding-darwin-arm64": "1.0.0-beta.35", + "@rolldown/binding-darwin-x64": "1.0.0-beta.35", + "@rolldown/binding-freebsd-x64": "1.0.0-beta.35", + "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-beta.35", + "@rolldown/binding-linux-arm64-gnu": "1.0.0-beta.35", + "@rolldown/binding-linux-arm64-musl": "1.0.0-beta.35", + "@rolldown/binding-linux-x64-gnu": "1.0.0-beta.35", + "@rolldown/binding-linux-x64-musl": "1.0.0-beta.35", + "@rolldown/binding-openharmony-arm64": "1.0.0-beta.35", + "@rolldown/binding-wasm32-wasi": "1.0.0-beta.35", + "@rolldown/binding-win32-arm64-msvc": "1.0.0-beta.35", + "@rolldown/binding-win32-ia32-msvc": "1.0.0-beta.35", + "@rolldown/binding-win32-x64-msvc": "1.0.0-beta.35" + } + }, "node_modules/rollup": { "version": "3.29.4", "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", @@ -22298,7 +23021,8 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-0.3.0.tgz", "integrity": "sha512-QjMLR0A3WwFY2aZdV0okfFEJB5TRjkggXZjxP3A1RsWsNHNu3YPv8btmtc6iCFZ0Rul3FE93OYogvhOUClU+ng==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/statuses": { "version": "1.5.0", @@ -22322,19 +23046,19 @@ } }, "node_modules/stream-chat": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/stream-chat/-/stream-chat-9.0.0.tgz", - "integrity": "sha512-I4+/DEp7dP3WBgRmqHaLswL+Y2fyQkUWJhYBS5zx4bpu1cYM6WEir9HYjToDNuJjltqa/FFIEF/tMPWr7iTc0A==", + "version": "9.20.0", + "resolved": "https://registry.npmjs.org/stream-chat/-/stream-chat-9.20.0.tgz", + "integrity": "sha512-DGl3etjkG1/GxXbyUZQHPT6Z3bOwm5ppUNqrrWNYqRqf30UWqotmsRf8HwnilXtvZ8/p/ANZ11nHxbdy72jVZg==", "license": "SEE LICENSE IN LICENSE", "dependencies": { "@types/jsonwebtoken": "^9.0.8", "@types/ws": "^8.5.14", "axios": "^1.6.0", "base64-js": "^1.5.1", - "form-data": "^4.0.0", + "form-data": "^4.0.4", "isomorphic-ws": "^5.0.0", "jsonwebtoken": "^9.0.2", - "linkifyjs": "^4.2.0", + "linkifyjs": "^4.3.2", "ws": "^8.18.1" }, "engines": { @@ -22351,19 +23075,6 @@ "proxy-from-env": "^1.1.0" } }, - "node_modules/stream-chat/node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/stream-chat/node_modules/ws": { "version": "8.18.1", "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz", @@ -22430,6 +23141,7 @@ "resolved": "https://registry.npmjs.org/stream-to-array/-/stream-to-array-2.3.0.tgz", "integrity": "sha512-UsZtOYEn4tWU2RGLOXr/o/xjRBftZRlG3dEWoaHr8j4GuypJ3isitGbVyjQKAuMu+xbiop8q224TjiZWc4XTZA==", "dev": true, + "license": "MIT", "dependencies": { "any-promise": "^1.1.0" } @@ -22439,30 +23151,13 @@ "resolved": "https://registry.npmjs.org/stream-to-promise/-/stream-to-promise-2.2.0.tgz", "integrity": "sha512-HAGUASw8NT0k8JvIVutB2Y/9iBk7gpgEyAudXwNJmZERdMITGdajOa4VJfD/kNiA3TppQpTP4J+CtcHwdzKBAw==", "dev": true, + "license": "MIT", "dependencies": { "any-promise": "~1.3.0", "end-of-stream": "~1.1.0", "stream-to-array": "~2.3.0" } }, - "node_modules/stream-to-promise/node_modules/end-of-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.1.0.tgz", - "integrity": "sha512-EoulkdKF/1xa92q25PbjuDcgJ9RDHYU2Rs3SCIvs2/dSQ3BpmxneNHmA/M7fe60M3PrV7nNGTTNbkK62l6vXiQ==", - "dev": true, - "dependencies": { - "once": "~1.3.0" - } - }, - "node_modules/stream-to-promise/node_modules/once": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", - "integrity": "sha512-6vaNInhu+CHxtONf3zw3vq4SP2DOQhjBvIa3rNcG0+P7eKWlYH6Peu7rHizSloRU2EwMz6GraLieis9Ac9+p1w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, "node_modules/streamroller": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-2.2.4.tgz", @@ -22975,6 +23670,19 @@ "node": ">=0.8" } }, + "node_modules/throttleit": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-2.1.0.tgz", + "integrity": "sha512-nt6AMGKW1p/70DF/hGBdJB57B8Tspmbp5gfJ8ilhLnt7kkr2ye7hzD6NVG8GGErk2HWF34igrL2CXmNIkzKqKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -23001,6 +23709,7 @@ "resolved": "https://registry.npmjs.org/time-span/-/time-span-4.0.0.tgz", "integrity": "sha512-MyqZCTGLDZ77u4k+jqg4UlrzPTPZ49NDlaekU6uuFaJLzPIN1woaRXCbGeqOfxwc3Y37ZROGAJ614Rdv7Olt+g==", "dev": true, + "license": "MIT", "dependencies": { "convert-hrtime": "^3.0.0" }, @@ -23011,6 +23720,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "dev": true, + "license": "MIT" + }, "node_modules/tmp": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", @@ -23071,7 +23787,8 @@ "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/traverse": { "version": "0.6.6", @@ -23105,6 +23822,7 @@ "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-12.0.0.tgz", "integrity": "sha512-VHC8XgU2fFW7yO1f/b3mxKDje1vmyzFXHWzOYmKEkCEwcLjDtbdLgBQviqj4ZwP4MJkQtRo6Ha2I29lq/B+VxA==", "dev": true, + "license": "MIT", "dependencies": { "@ts-morph/common": "~0.11.0", "code-block-writer": "^10.1.1" @@ -23156,12 +23874,14 @@ "version": "6.15.5", "resolved": "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.15.5.tgz", "integrity": "sha512-FZIXf1ksVyLcfr7M317jbB67XFJhOO1YqdTcuGaq9q5jLUoTikukZ+98TPjKiP2jC5CgmYdWWYs0s2nLSU0/1A==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" }, "node_modules/tsutils": { "version": "3.21.0", @@ -23353,7 +24073,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/uid-promise/-/uid-promise-1.0.0.tgz", "integrity": "sha512-R8375j0qwXyIu/7R0tjdF06/sElHqbmdmWC9M2qQHpEVbvE4I5+38KJI7LUUmQMp7NVq4tKHiBMkT0NFM453Ig==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/undefsafe": { "version": "2.0.5", @@ -23362,10 +24083,11 @@ "license": "MIT" }, "node_modules/undici": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.26.5.tgz", - "integrity": "sha512-cSb4bPFd5qgR7qr2jYAi0hlX9n5YKK2ONKkLFkxl+v/9BvC0sOpZjBHDBSXc5lWAf5ty9oZdRXytBIHzgUcerw==", + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz", + "integrity": "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==", "dev": true, + "license": "MIT", "dependencies": { "@fastify/busboy": "^2.0.0" }, @@ -23642,78 +24364,67 @@ } }, "node_modules/vercel": { - "version": "34.2.0", - "resolved": "https://registry.npmjs.org/vercel/-/vercel-34.2.0.tgz", - "integrity": "sha512-OUMvETq+5Iq9L5m1v/E9SPUUfKnKnJjynv0ydeAqWnXoYAwgcaJCg+3HVOEk1VhjhgcGzSS1uGHvlcLmK6XRkA==", - "dev": true, - "dependencies": { - "@vercel/build-utils": "8.2.0", - "@vercel/fun": "1.1.0", - "@vercel/go": "3.1.1", - "@vercel/hydrogen": "1.0.2", - "@vercel/next": "4.2.11", - "@vercel/node": "3.1.5", - "@vercel/python": "4.2.0", - "@vercel/redwood": "2.0.9", - "@vercel/remix-builder": "2.1.6", - "@vercel/ruby": "2.1.0", - "@vercel/static-build": "2.5.9", - "chokidar": "3.3.1" + "version": "48.1.6", + "resolved": "https://registry.npmjs.org/vercel/-/vercel-48.1.6.tgz", + "integrity": "sha512-bcfocpaHfG0FHpTdY59Pfgm26cznI7+9KhGAnVkv4pU+oM6Ggc+w/nnsjuS5EY+/v3vI3f8cYamE6DDqQ3CpEQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@vercel/blob": "1.0.2", + "@vercel/build-utils": "12.1.0", + "@vercel/detect-agent": "1.0.0", + "@vercel/express": "0.0.22", + "@vercel/fun": "1.1.6", + "@vercel/go": "3.2.3", + "@vercel/h3": "0.1.2", + "@vercel/hono": "0.1.2", + "@vercel/hydrogen": "1.2.4", + "@vercel/next": "4.13.0", + "@vercel/node": "5.3.24", + "@vercel/python": "5.0.5", + "@vercel/redwood": "2.3.6", + "@vercel/remix-builder": "5.4.12", + "@vercel/ruby": "2.2.1", + "@vercel/static-build": "2.7.23", + "chokidar": "4.0.0", + "jose": "5.9.6" }, "bin": { - "vc": "dist/index.js", - "vercel": "dist/index.js" + "vc": "dist/vc.js", + "vercel": "dist/vc.js" }, "engines": { - "node": ">= 16" + "node": ">= 18" } }, "node_modules/vercel/node_modules/chokidar": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.1.tgz", - "integrity": "sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.0.tgz", + "integrity": "sha512-mxIojEAQcuEvT/lyXq+jf/3cO/KoA6z4CeNDGGevTybECPOMFCnQy3OPahluUkbqgPNGw5Bi78UC7Po6Lhy+NA==", "dev": true, + "license": "MIT", "dependencies": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.3.0" + "readdirp": "^4.0.1" }, "engines": { - "node": ">= 8.10.0" + "node": ">= 14.16.0" }, - "optionalDependencies": { - "fsevents": "~2.1.2" - } - }, - "node_modules/vercel/node_modules/fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "deprecated": "\"Please update to latest v2.3 or v2.2\"", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "funding": { + "url": "https://paulmillr.com/funding/" } }, "node_modules/vercel/node_modules/readdirp": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.3.0.tgz", - "integrity": "sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", "dev": true, - "dependencies": { - "picomatch": "^2.0.7" - }, + "license": "MIT", "engines": { - "node": ">=8.10.0" + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" } }, "node_modules/void-elements": { @@ -23849,13 +24560,15 @@ "version": "0.2.4", "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-0.2.4.tgz", "integrity": "sha512-6BjspCO9VriYy12z356nL6JBS0GYeEcA457YyRzD+dD6XYCQ75NKhcOHUMHentOE7OcVCIXXDvOm0jKFfQG2Gg==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, "node_modules/webpack": { "version": "5.76.1", @@ -24136,6 +24849,7 @@ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dev": true, + "license": "MIT", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -24302,6 +25016,7 @@ "resolved": "https://registry.npmjs.org/xdg-app-paths/-/xdg-app-paths-5.1.0.tgz", "integrity": "sha512-RAQ3WkPf4KTU1A8RtFx3gWywzVKe00tfOPFfl2NDGqbIFENQO4kqAJp7mhQjNj/33W5x5hiWWUdyfPq/5SU3QA==", "dev": true, + "license": "MIT", "dependencies": { "xdg-portable": "^7.0.0" }, @@ -24314,6 +25029,7 @@ "resolved": "https://registry.npmjs.org/xdg-portable/-/xdg-portable-7.3.0.tgz", "integrity": "sha512-sqMMuL1rc0FmMBOzCpd0yuy9trqF2yTTVe+E9ogwCSWQCdDEtQUwrZPT6AxqtsFGRNxycgncbP/xmOOSPw5ZUw==", "dev": true, + "license": "MIT", "dependencies": { "os-paths": "^4.0.1" }, @@ -24417,6 +25133,7 @@ "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "dev": true, + "license": "MIT", "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" @@ -24427,6 +25144,7 @@ "resolved": "https://registry.npmjs.org/yauzl-clone/-/yauzl-clone-1.0.4.tgz", "integrity": "sha512-igM2RRCf3k8TvZoxR2oguuw4z1xasOnA31joCqHIyLkeWrvAc2Jgay5ISQ2ZplinkoGaJ6orCz56Ey456c5ESA==", "dev": true, + "license": "MIT", "dependencies": { "events-intercept": "^2.0.0" }, @@ -24439,6 +25157,7 @@ "resolved": "https://registry.npmjs.org/yauzl-promise/-/yauzl-promise-2.1.3.tgz", "integrity": "sha512-A1pf6fzh6eYkK0L4Qp7g9jzJSDrM6nN0bOn5T0IbY4Yo3w+YkWlHFkJP7mzknMXjqusHFHlKsK2N+4OLsK2MRA==", "dev": true, + "license": "MIT", "dependencies": { "yauzl": "^2.9.1", "yauzl-clone": "^1.0.4" @@ -24479,6 +25198,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/zod": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz", + "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, "node_modules/zone.js": { "version": "0.11.4", "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.11.4.tgz", @@ -26783,6 +27512,37 @@ "@edge-runtime/primitives": "4.1.0" } }, + "@emnapi/core": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.5.0.tgz", + "integrity": "sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==", + "dev": true, + "optional": true, + "requires": { + "@emnapi/wasi-threads": "1.1.0", + "tslib": "^2.4.0" + } + }, + "@emnapi/runtime": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.5.0.tgz", + "integrity": "sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==", + "dev": true, + "optional": true, + "requires": { + "tslib": "^2.4.0" + } + }, + "@emnapi/wasi-threads": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz", + "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==", + "dev": true, + "optional": true, + "requires": { + "tslib": "^2.4.0" + } + }, "@es-joy/jsdoccomment": { "version": "0.42.0", "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.42.0.tgz", @@ -27172,6 +27932,23 @@ } } }, + "@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "dev": true, + "requires": { + "minipass": "^7.0.4" + }, + "dependencies": { + "minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true + } + } + }, "@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -27265,81 +28042,105 @@ "dev": true }, "@mapbox/node-pre-gyp": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", - "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-2.0.0.tgz", + "integrity": "sha512-llMXd39jtP0HpQLVI37Bf1m2ADlEb35GYSh1SDSLsBhR+5iCxiNGlT31yqbNtVHygHAtMy6dWFERpU2JgufhPg==", "dev": true, "requires": { + "consola": "^3.2.3", "detect-libc": "^2.0.0", - "https-proxy-agent": "^5.0.0", - "make-dir": "^3.1.0", + "https-proxy-agent": "^7.0.5", "node-fetch": "^2.6.7", - "nopt": "^5.0.0", - "npmlog": "^5.0.1", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.11" + "nopt": "^8.0.0", + "semver": "^7.5.3", + "tar": "^7.4.0" }, "dependencies": { - "are-we-there-yet": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", - "dev": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - } + "abbrev": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz", + "integrity": "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==", + "dev": true }, - "gauge": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", - "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true + }, + "chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "dev": true + }, + "https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "dev": true, "requires": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.1", - "object-assign": "^4.1.1", - "signal-exit": "^3.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" + "agent-base": "^7.1.2", + "debug": "4" } }, - "node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true + }, + "minizlib": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", "dev": true, "requires": { - "whatwg-url": "^5.0.0" + "minipass": "^7.1.2" } }, "nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz", + "integrity": "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==", "dev": true, "requires": { - "abbrev": "1" + "abbrev": "^3.0.0" } }, - "npmlog": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", - "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "tar": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.1.tgz", + "integrity": "sha512-nlGpxf+hv0v7GkWBK2V9spgactGOp0qvfWRxUMjqHyzrt3SgwE48DIv/FhqPHJYLHpgW1opq3nERbz5Anq7n1g==", "dev": true, "requires": { - "are-we-there-yet": "^2.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^3.0.0", - "set-blocking": "^2.0.0" + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" } + }, + "yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "dev": true } } }, + "@napi-rs/wasm-runtime": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.0.5.tgz", + "integrity": "sha512-TBr9Cf9onSAS2LQ2+QHx6XcC6h9+RIzJgbqG3++9TUZSH204AwEy5jg3BTQ0VATsyoGj4ee49tN/y6rvaOOtcg==", + "dev": true, + "optional": true, + "requires": { + "@emnapi/core": "^1.5.0", + "@emnapi/runtime": "^1.5.0", + "@tybys/wasm-util": "^0.10.1" + } + }, "@ngtools/webpack": { "version": "15.0.5", "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-15.0.5.tgz", @@ -27607,6 +28408,18 @@ "@octokit/openapi-types": "^22.2.0" } }, + "@oxc-project/runtime": { + "version": "0.82.3", + "resolved": "https://registry.npmjs.org/@oxc-project/runtime/-/runtime-0.82.3.tgz", + "integrity": "sha512-LNh5GlJvYHAnMurO+EyA8jJwN1rki7l3PSHuosDh2I7h00T6/u9rCkUjg/SvPmT1CZzvhuW0y+gf7jcqUy/Usg==", + "dev": true + }, + "@oxc-project/types": { + "version": "0.82.3", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.82.3.tgz", + "integrity": "sha512-6nCUxBnGX0c6qfZW5MaF6/fmu5dHJDMiMPaioKHKs5mi5+8/FHQ7WGjgQIz1zxpmceMYfdIXkOaLYE+ejbuOtA==", + "dev": true + }, "@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", @@ -27654,6 +28467,113 @@ "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==", "dev": true }, + "@rolldown/binding-android-arm64": { + "version": "1.0.0-beta.35", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-beta.35.tgz", + "integrity": "sha512-zVTg0544Ib1ldJSWwjy8URWYHlLFJ98rLnj+2FIj5fRs4KqGKP4VgH/pVUbXNGxeLFjItie6NSK1Un7nJixneQ==", + "dev": true, + "optional": true + }, + "@rolldown/binding-darwin-arm64": { + "version": "1.0.0-beta.35", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-beta.35.tgz", + "integrity": "sha512-WPy0qx22CABTKDldEExfpYHWHulRoPo+m/YpyxP+6ODUPTQexWl8Wp12fn1CVP0xi0rOBj7ugs6+kKMAJW56wQ==", + "dev": true, + "optional": true + }, + "@rolldown/binding-darwin-x64": { + "version": "1.0.0-beta.35", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-beta.35.tgz", + "integrity": "sha512-3k1TabJafF/GgNubXMkfp93d5p30SfIMOmQ5gm1tFwO+baMxxVPwDs3FDvSl+feCWwXxBA+bzemgkaDlInmp1Q==", + "dev": true, + "optional": true + }, + "@rolldown/binding-freebsd-x64": { + "version": "1.0.0-beta.35", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-beta.35.tgz", + "integrity": "sha512-GAiapN5YyIocnBVNEiOxMfWO9NqIeEKKWohj1sPLGc61P+9N1meXOOCiAPbLU+adXq0grtbYySid+Or7f2q+Mg==", + "dev": true, + "optional": true + }, + "@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.0.0-beta.35", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-beta.35.tgz", + "integrity": "sha512-okPKKIE73qkUMvq7dxDyzD0VIysdV4AirHqjf8tGTjuNoddUAl3WAtMYbuZCEKJwUyI67UINKO1peFVlYEb+8w==", + "dev": true, + "optional": true + }, + "@rolldown/binding-linux-arm64-gnu": { + "version": "1.0.0-beta.35", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-beta.35.tgz", + "integrity": "sha512-Nky8Q2cxyKVkEETntrvcmlzNir5khQbDfX3PflHPbZY7XVZalllRqw7+MW5vn+jTsk5BfKVeLsvrF4344IU55g==", + "dev": true, + "optional": true + }, + "@rolldown/binding-linux-arm64-musl": { + "version": "1.0.0-beta.35", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-beta.35.tgz", + "integrity": "sha512-8aHpWVSfZl3Dy2VNFG9ywmlCPAJx45g0z+qdOeqmYceY7PBAT4QGzii9ig1hPb1pY8K45TXH44UzQwr2fx352Q==", + "dev": true, + "optional": true + }, + "@rolldown/binding-linux-x64-gnu": { + "version": "1.0.0-beta.35", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-beta.35.tgz", + "integrity": "sha512-1r1Ac/vTcm1q4kRiX/NB6qtorF95PhjdCxKH3Z5pb+bWMDZnmcz18fzFlT/3C6Qpj/ZqUF+EUrG4QEDXtVXGgg==", + "dev": true, + "optional": true + }, + "@rolldown/binding-linux-x64-musl": { + "version": "1.0.0-beta.35", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-beta.35.tgz", + "integrity": "sha512-AFl1LnuhUBDfX2j+cE6DlVGROv4qG7GCPDhR1kJqi2+OuXGDkeEjqRvRQOFErhKz1ckkP/YakvN7JheLJ2PKHQ==", + "dev": true, + "optional": true + }, + "@rolldown/binding-openharmony-arm64": { + "version": "1.0.0-beta.35", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-beta.35.tgz", + "integrity": "sha512-Tuwb8vPs+TVJlHhyLik+nwln/burvIgaPDgg6wjNZ23F1ttjZi0w0rQSZfAgsX4jaUbylwCETXQmTp3w6vcJMw==", + "dev": true, + "optional": true + }, + "@rolldown/binding-wasm32-wasi": { + "version": "1.0.0-beta.35", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-beta.35.tgz", + "integrity": "sha512-rG0OozgqNUYcpu50MpICMlJflexRVtQfjlN9QYf6hoel46VvY0FbKGwBKoeUp2K5D4i8lV04DpEMfTZlzRjeiA==", + "dev": true, + "optional": true, + "requires": { + "@napi-rs/wasm-runtime": "^1.0.3" + } + }, + "@rolldown/binding-win32-arm64-msvc": { + "version": "1.0.0-beta.35", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-beta.35.tgz", + "integrity": "sha512-WeOfAZrycFo9+ZqTDp3YDCAOLolymtKGwImrr9n+OW0lpwI2UKyKXbAwGXRhydAYbfrNmuqWyfyoAnLh3X9Hjg==", + "dev": true, + "optional": true + }, + "@rolldown/binding-win32-ia32-msvc": { + "version": "1.0.0-beta.35", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.0.0-beta.35.tgz", + "integrity": "sha512-XkLT7ikKGiUDvLh7qtJHRukbyyP1BIrD1xb7A+w4PjIiOKeOH8NqZ+PBaO4plT7JJnLxx+j9g/3B7iylR1nTFQ==", + "dev": true, + "optional": true + }, + "@rolldown/binding-win32-x64-msvc": { + "version": "1.0.0-beta.35", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-beta.35.tgz", + "integrity": "sha512-rftASFKVzjbcQHTCYHaBIDrnQFzbeV50tm4hVugG3tPjd435RHZC2pbeGV5IPdKEqyJSuurM/GfbV3kLQ3LY/A==", + "dev": true, + "optional": true + }, + "@rolldown/pluginutils": { + "version": "1.0.0-beta.35", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.35.tgz", + "integrity": "sha512-slYrCpoxJUqzFDDNlvrOYRazQUNRvWPjXA17dAOISY3rDMxX6k8K4cj2H+hEYMHF81HO3uNd5rHVigAWRM5dSg==", + "dev": true + }, "@rollup/plugin-json": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.1.0.tgz", @@ -27678,14 +28598,22 @@ } }, "@rollup/pluginutils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", - "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", + "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", "dev": true, "requires": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" + "picomatch": "^4.0.2" + }, + "dependencies": { + "picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true + } } }, "@schematics/angular": { @@ -28146,9 +29074,9 @@ "dev": true }, "@stream-io/stream-chat-css": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@stream-io/stream-chat-css/-/stream-chat-css-5.8.0.tgz", - "integrity": "sha512-p9Z1Ktx3E+o+7EFubNyZWNjg26UNgux8IAK0nhoC04t47Cok5pSHcUbPmTgiICSPXYNNEcDxrCil5crM0ItUUA==" + "version": "5.14.0", + "resolved": "https://registry.npmjs.org/@stream-io/stream-chat-css/-/stream-chat-css-5.14.0.tgz", + "integrity": "sha512-FhTpHhIIkEKDlTCWQ2cZdNwkhJMnyDW6R5s7xh+PAnmyeQavKY0WrX7tsXpP/M0Sqrfw3KLkIq6lC+hMgUB5Ow==" }, "@stream-io/transliterate": { "version": "1.5.2", @@ -28204,6 +29132,16 @@ "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==" }, + "@tybys/wasm-util": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", + "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", + "dev": true, + "optional": true, + "requires": { + "tslib": "^2.4.0" + } + }, "@types/body-parser": { "version": "1.19.5", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", @@ -28725,187 +29663,128 @@ "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", "dev": true }, + "@vercel/blob": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@vercel/blob/-/blob-1.0.2.tgz", + "integrity": "sha512-Im/KeFH4oPx7UsM+QiteimnE07bIUD7JK6CBafI9Z0jRFogaialTBMiZj8EKk/30ctUYsrpIIyP9iIY1YxWnUQ==", + "dev": true, + "requires": { + "async-retry": "^1.3.3", + "is-buffer": "^2.0.5", + "is-node-process": "^1.2.0", + "throttleit": "^2.1.0", + "undici": "^5.28.4" + } + }, "@vercel/build-utils": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/@vercel/build-utils/-/build-utils-8.2.0.tgz", - "integrity": "sha512-yDr/zp/SX45mIy6DO8IRD6hmEs6gIr33/ajT3y8efUt/crQvgNtaSkbx9ubbwkR4RV/qKL213v6kXxj+EpsnlQ==", + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@vercel/build-utils/-/build-utils-12.1.0.tgz", + "integrity": "sha512-yqpAh2KHm9iWUXo/aRWiLIxi8dMAwFtse2iZsg2QNEMs9W20va6L8PMFvdAa5MX9pgRwc38gbjD3V7drxSwq4g==", + "dev": true + }, + "@vercel/detect-agent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@vercel/detect-agent/-/detect-agent-1.0.0.tgz", + "integrity": "sha512-AIPgNkmtFcDgPCl+xvTT1ga90OL7OTX2RKM4zu0PMpwBthPfN2DpdHy10n3bh8K+CA22GDU0/ncjzprZsrk0sw==", "dev": true }, "@vercel/error-utils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@vercel/error-utils/-/error-utils-2.0.2.tgz", - "integrity": "sha512-Sj0LFafGpYr6pfCqrQ82X6ukRl5qpmVrHM/191kNYFqkkB9YkjlMAj6QcEsvCG259x4QZ7Tya++0AB85NDPbKQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@vercel/error-utils/-/error-utils-2.0.3.tgz", + "integrity": "sha512-CqC01WZxbLUxoiVdh9B/poPbNpY9U+tO1N9oWHwTl5YAZxcqXmmWJ8KNMFItJCUUWdY3J3xv8LvAuQv2KZ5YdQ==", "dev": true }, + "@vercel/express": { + "version": "0.0.22", + "resolved": "https://registry.npmjs.org/@vercel/express/-/express-0.0.22.tgz", + "integrity": "sha512-tbTy5tLA2ouIlLtiJvkb4VcCgzbgOonTupYYJzJrhFd4FDxcS0nSSmu7O/QDivpZz5c3Uk9xW5qLYnPn4rjrXQ==", + "dev": true, + "requires": { + "@vercel/nft": "0.30.1", + "@vercel/node": "5.3.24", + "@vercel/static-config": "3.1.2", + "fs-extra": "11.1.0", + "path-to-regexp": "8.3.0", + "rolldown": "1.0.0-beta.35", + "ts-morph": "12.0.0", + "zod": "3.22.4" + }, + "dependencies": { + "fs-extra": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.0.tgz", + "integrity": "sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "path-to-regexp": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", + "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==", + "dev": true + }, + "universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true + } + } + }, "@vercel/fun": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@vercel/fun/-/fun-1.1.0.tgz", - "integrity": "sha512-SpuPAo+MlAYMtcMcC0plx7Tv4Mp7SQhJJj1iIENlOnABL24kxHpL09XLQMGzZIzIW7upR8c3edwgfpRtp+dhVw==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@vercel/fun/-/fun-1.1.6.tgz", + "integrity": "sha512-xDiM+bD0fSZyzcjsAua3D+guXclvHOSTzr03UcZEQwYzIjwWjLduT7bl2gAaeNIe7fASAIZd0P00clcj0On4rQ==", "dev": true, "requires": { "@tootallnate/once": "2.0.0", "async-listen": "1.2.0", - "debug": "4.1.1", - "execa": "3.2.0", - "fs-extra": "8.1.0", + "debug": "4.3.4", "generic-pool": "3.4.2", "micro": "9.3.5-canary.3", "ms": "2.1.1", "node-fetch": "2.6.7", "path-match": "1.2.4", "promisepipe": "3.0.0", - "semver": "7.3.5", + "semver": "7.5.4", "stat-mode": "0.3.0", "stream-to-promise": "2.2.0", - "tar": "4.4.18", + "tar": "6.2.1", + "tinyexec": "0.3.2", "tree-kill": "1.2.2", "uid-promise": "1.0.0", - "uuid": "3.3.2", "xdg-app-paths": "5.1.0", "yauzl-promise": "2.1.3" }, "dependencies": { - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "execa": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-3.2.0.tgz", - "integrity": "sha512-kJJfVbI/lZE1PZYDI5VPxp8zXPO9rtxOkhpZ0jMKha56AI9y2gGVC6bkukStQf0ka5Rh15BA5m7cCCH4jmHqkw==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "p-finally": "^2.0.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - } - }, - "fs-minipass": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", - "dev": true, - "requires": { - "minipass": "^2.6.0" - } - }, - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true - }, - "minipass": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", - "dev": true, - "requires": { - "minipass": "^2.9.0" - } - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - }, "ms": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "dev": true }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dev": true, - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "p-finally": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz", - "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==", - "dev": true - }, "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "requires": { "lru-cache": "^6.0.0" } - }, - "tar": { - "version": "4.4.18", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.18.tgz", - "integrity": "sha512-ZuOtqqmkV9RE1+4odd+MhBpibmCxNP6PJhH/h2OqNuotTX7/XHPZQJv2pKvWMplFH9SIZZhitehh6vBH6LO8Pg==", - "dev": true, - "requires": { - "chownr": "^1.1.4", - "fs-minipass": "^1.2.7", - "minipass": "^2.9.0", - "minizlib": "^1.3.3", - "mkdirp": "^0.5.5", - "safe-buffer": "^5.2.1", - "yallist": "^3.1.1" - } - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true } } }, @@ -28919,14 +29798,13 @@ } }, "@vercel/gatsby-plugin-vercel-builder": { - "version": "2.0.31", - "resolved": "https://registry.npmjs.org/@vercel/gatsby-plugin-vercel-builder/-/gatsby-plugin-vercel-builder-2.0.31.tgz", - "integrity": "sha512-p0ggHYNe8tMVlsBYVHwjavLpOtkxbw+VN1ywzsIcqnwJpYi9HSgbm+zRxmNqz/4autn6KZCmgEcWanhjhMaH5Q==", + "version": "2.0.95", + "resolved": "https://registry.npmjs.org/@vercel/gatsby-plugin-vercel-builder/-/gatsby-plugin-vercel-builder-2.0.95.tgz", + "integrity": "sha512-G0sHN+aNMhQud+J0qksXwsnlYLFSC6h253KlvnxAAqxDjmZVKE6SfVmXWHLklVAfbvg5un9fwYDCMY0H3wiiUQ==", "dev": true, "requires": { "@sinclair/typebox": "0.25.24", - "@vercel/build-utils": "8.2.0", - "@vercel/routing-utils": "3.1.0", + "@vercel/build-utils": "12.1.0", "esbuild": "0.14.47", "etag": "1.8.1", "fs-extra": "11.1.0" @@ -29091,9 +29969,9 @@ } }, "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", "dev": true, "requires": { "graceful-fs": "^4.1.6", @@ -29109,60 +29987,125 @@ } }, "@vercel/go": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@vercel/go/-/go-3.1.1.tgz", - "integrity": "sha512-mrzomNYltxkjvtUmaYry5YEyvwTz6c/QQHE5Gr/pPGRIniUiP6T6OFOJ49RBN7e6pRXaNzHPVuidiuBhvHh5+Q==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@vercel/go/-/go-3.2.3.tgz", + "integrity": "sha512-PErgHlV7cf8hyPq31aRsL4xm5t4rCSO6vN5AQLlAGSy3ctdgqG7sI6hq/CAKo3CfgIhVHUwNYapFJgGJB/s4OA==", "dev": true }, + "@vercel/h3": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@vercel/h3/-/h3-0.1.2.tgz", + "integrity": "sha512-6KkCdsqPBPR83b6R6jvC/2TgU1jWdZI8cTMq/OcgcNLmni5mHFxy+YMaXgxPXgevUxve5+ag7c1bv66wPPYZZw==", + "dev": true, + "requires": { + "@vercel/node": "5.3.24", + "@vercel/static-config": "3.1.2" + } + }, + "@vercel/hono": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@vercel/hono/-/hono-0.1.2.tgz", + "integrity": "sha512-sVjshneJZ6ww5PSU4DhUK9dPr5Q9/UREKMk/00oCUw/XZhosJ2OxXYvZzDlexB1YtgqtbAxZUkE0jWkTwPOSWQ==", + "dev": true, + "requires": { + "@vercel/node": "5.3.24", + "@vercel/static-config": "3.1.2", + "ts-morph": "12.0.0" + } + }, "@vercel/hydrogen": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@vercel/hydrogen/-/hydrogen-1.0.2.tgz", - "integrity": "sha512-/Q2MKk1GfOuZAnkE9jQexjtUQqanbY65R+xtJWd9yKIgwcfRI1hxiNH3uXyVM5AvLoY+fxxULkSuxDtUKpkJpQ==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@vercel/hydrogen/-/hydrogen-1.2.4.tgz", + "integrity": "sha512-eb16oesfgHuBlXxe+WqI+rMdP4QpeHXLJh9ropFy+StkWC2F0ZFKegutEpvJCRg0FHttRnn9uMzMmzJ2F4xKkg==", "dev": true, "requires": { - "@vercel/static-config": "3.0.0", + "@vercel/static-config": "3.1.2", "ts-morph": "12.0.0" } }, "@vercel/next": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/@vercel/next/-/next-4.2.11.tgz", - "integrity": "sha512-jCMTa75CIkX8vfY4BiW6BajSLXXQRE1doNeX9nO+gzYtaKTfxB5FiVKNAocjDwP249WIR0o1vziHus5bX84jFg==", + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@vercel/next/-/next-4.13.0.tgz", + "integrity": "sha512-DIfZucRjTihIUolR2v9MpugpazPoo02NkwA+Pk+/NmmSunf7XLSC42QG1OkSyzeGsXQ0t4nPAY6NQKYp9+NZnQ==", "dev": true, "requires": { - "@vercel/nft": "0.27.0" + "@vercel/nft": "0.30.1" } }, "@vercel/nft": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@vercel/nft/-/nft-0.27.0.tgz", - "integrity": "sha512-W5pValyhToK9hbgEUAM6sLRUIl1I++RsFnXKHXtND50P1+vZ+OYPCzq1OOz0Ok6ghK6aOwae8G/rEAXkLedC+w==", + "version": "0.30.1", + "resolved": "https://registry.npmjs.org/@vercel/nft/-/nft-0.30.1.tgz", + "integrity": "sha512-2mgJZv4AYBFkD/nJ4QmiX5Ymxi+AisPLPcS/KPXVqniyQNqKXX+wjieAbDXQP3HcogfEbpHoRMs49Cd4pfkk8g==", "dev": true, "requires": { - "@mapbox/node-pre-gyp": "^1.0.5", - "@rollup/pluginutils": "^4.0.0", + "@mapbox/node-pre-gyp": "^2.0.0", + "@rollup/pluginutils": "^5.1.3", "acorn": "^8.6.0", "acorn-import-attributes": "^1.9.5", "async-sema": "^3.1.1", "bindings": "^1.4.0", "estree-walker": "2.0.2", - "glob": "^7.1.3", + "glob": "^10.4.5", "graceful-fs": "^4.2.9", - "micromatch": "^4.0.2", "node-gyp-build": "^4.2.2", + "picomatch": "^4.0.2", "resolve-from": "^5.0.0" }, "dependencies": { - "@rollup/pluginutils": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", - "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", + "brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + } + }, + "jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "requires": { + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" + } + }, + "minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "requires": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" + "brace-expansion": "^2.0.1" } }, + "minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true + }, + "picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true + }, "resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", @@ -29172,31 +30115,33 @@ } }, "@vercel/node": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@vercel/node/-/node-3.1.5.tgz", - "integrity": "sha512-1LVqdL/HKrfuLGIWEHm7O/zA6admKRClIuJOVsasvW0PHrrwUUfcoKvgHj/sH6HUEzgE9WIelqFLe8/j/tzA4A==", + "version": "5.3.24", + "resolved": "https://registry.npmjs.org/@vercel/node/-/node-5.3.24.tgz", + "integrity": "sha512-yk8pdoNbAbUO5zcmqyMPQ6kNvN896c/gJbsiGS5RvO9Gyehib5IxUOap6SnLSExH4tWAl1XTbOptfuysqZpYog==", "dev": true, "requires": { "@edge-runtime/node-utils": "2.3.0", "@edge-runtime/primitives": "4.1.0", "@edge-runtime/vm": "3.2.0", "@types/node": "16.18.11", - "@vercel/build-utils": "8.2.0", - "@vercel/error-utils": "2.0.2", - "@vercel/nft": "0.27.0", - "@vercel/static-config": "3.0.0", + "@vercel/build-utils": "12.1.0", + "@vercel/error-utils": "2.0.3", + "@vercel/nft": "0.30.1", + "@vercel/static-config": "3.1.2", "async-listen": "3.0.0", "cjs-module-lexer": "1.2.3", "edge-runtime": "2.5.9", "es-module-lexer": "1.4.1", "esbuild": "0.14.47", "etag": "1.8.1", + "mime-types": "2.1.35", "node-fetch": "2.6.9", - "path-to-regexp": "6.2.1", + "path-to-regexp": "6.1.0", + "path-to-regexp-updated": "npm:path-to-regexp@6.3.0", "ts-morph": "12.0.0", "ts-node": "10.9.1", "typescript": "4.9.5", - "undici": "5.26.5" + "undici": "5.28.4" }, "dependencies": { "async-listen": { @@ -29368,9 +30313,9 @@ } }, "path-to-regexp": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", - "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.1.0.tgz", + "integrity": "sha512-h9DqehX3zZZDCEm+xbfU0ZmwCGFCAAraPJWMXJ4+v32NjZJilVg3k1TcKsRgIb8IQ/izZSaydDc1OhJCZvs2Dw==", "dev": true }, "ts-node": { @@ -29399,24 +30344,34 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "dev": true + }, + "undici": { + "version": "5.28.4", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz", + "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==", + "dev": true, + "requires": { + "@fastify/busboy": "^2.0.0" + } } } }, "@vercel/python": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@vercel/python/-/python-4.2.0.tgz", - "integrity": "sha512-oubkmRRxWQJGGYFq5Q49/2c94aHKCYXB+DkdtaW55syQ9N0LVBXCnCMZ4ZatSrSI18d9mMoDSx3xi4gtByy9NA==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@vercel/python/-/python-5.0.5.tgz", + "integrity": "sha512-XLG/fDe2hflzNtSWuoASTo+N2c4hl6SbcufvBRYa7BnBQK9t4ZH1IEu+vJkq2AUoVczp5JEYLEXkIGm8KBtoeg==", "dev": true }, "@vercel/redwood": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@vercel/redwood/-/redwood-2.0.9.tgz", - "integrity": "sha512-zv0uJa+XtCJ15TdfCI5ybZM1hS3OBl28idCfN3vtWR+g5HjDSW8acYOzRw2Xy7wM1f+Fje1/Nx2AdYjCM4TWTA==", + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/@vercel/redwood/-/redwood-2.3.6.tgz", + "integrity": "sha512-Rm9xECWNIJOwtPsZ1/XcgyJj95KM7cWwNHYPMw8dzFAnLQGyapGe/YHEjxV6POI2RF8R0nFmU1t+45XBweYJJA==", "dev": true, "requires": { - "@vercel/nft": "0.27.0", - "@vercel/routing-utils": "3.1.0", - "semver": "6.3.1" + "@vercel/nft": "0.30.1", + "@vercel/static-config": "3.1.2", + "semver": "6.3.1", + "ts-morph": "12.0.0" }, "dependencies": { "semver": { @@ -29428,25 +30383,17 @@ } }, "@vercel/remix-builder": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@vercel/remix-builder/-/remix-builder-2.1.6.tgz", - "integrity": "sha512-n2gnNW9HTWlTuEwTbtVI9GRHoQi/2kPu44l0zvFDw8GlsswW0/qJPvr8SFG83FDylQcafvW8LUWO9oXefuVrFA==", + "version": "5.4.12", + "resolved": "https://registry.npmjs.org/@vercel/remix-builder/-/remix-builder-5.4.12.tgz", + "integrity": "sha512-25HHNUpIu3TfuZnphDDX7yG+4QugbxDq0bB8d1KCeOWsKH+z0Zscg7rchs3Pqy6kdhV/US6zH+YAogtwMvdDMg==", "dev": true, "requires": { - "@vercel/error-utils": "2.0.2", - "@vercel/nft": "0.27.0", - "@vercel/static-config": "3.0.0", + "@vercel/error-utils": "2.0.3", + "@vercel/nft": "0.30.1", + "@vercel/static-config": "3.1.2", + "path-to-regexp": "6.1.0", + "path-to-regexp-updated": "npm:path-to-regexp@6.3.0", "ts-morph": "12.0.0" - } - }, - "@vercel/routing-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@vercel/routing-utils/-/routing-utils-3.1.0.tgz", - "integrity": "sha512-Ci5xTjVTJY/JLZXpCXpLehMft97i9fH34nu9PGav6DtwkVUF6TOPX86U0W0niQjMZ5n6/ZP0BwcJK2LOozKaGw==", - "dev": true, - "requires": { - "ajv": "^6.0.0", - "path-to-regexp": "6.1.0" }, "dependencies": { "path-to-regexp": { @@ -29458,27 +30405,27 @@ } }, "@vercel/ruby": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@vercel/ruby/-/ruby-2.1.0.tgz", - "integrity": "sha512-UZYwlSEEfVnfzTmgkD+kxex9/gkZGt7unOWNyWFN7V/ZnZSsGBUgv6hXLnwejdRi3EztgRQEBd1kUKlXdIeC0Q==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@vercel/ruby/-/ruby-2.2.1.tgz", + "integrity": "sha512-DsmTCggOa/Uvt/9JkafXx9U+Bz5eNIb6Bs422EOQo2zKwcxW88ITSh8mM5m0dQ0+B4k02X/moVim6iFa4sjazg==", "dev": true }, "@vercel/static-build": { - "version": "2.5.9", - "resolved": "https://registry.npmjs.org/@vercel/static-build/-/static-build-2.5.9.tgz", - "integrity": "sha512-jnFwCvRlBsSg8vDPahuSOvo3LvmTCzlNi6ES3fy+kaXxUK/xxDA8BGssDvWRLJIGSHNjfi6M92zGy15vjpG92A==", + "version": "2.7.23", + "resolved": "https://registry.npmjs.org/@vercel/static-build/-/static-build-2.7.23.tgz", + "integrity": "sha512-F9u6FGWShfHbhldA9nRW6FdHfM7nVESYVGg+XOuWUlnyHnN6HiOFAze8wCb5yOuF5XXlp3bpn2IUByy4CPnjHQ==", "dev": true, "requires": { "@vercel/gatsby-plugin-vercel-analytics": "1.0.11", - "@vercel/gatsby-plugin-vercel-builder": "2.0.31", - "@vercel/static-config": "3.0.0", + "@vercel/gatsby-plugin-vercel-builder": "2.0.95", + "@vercel/static-config": "3.1.2", "ts-morph": "12.0.0" } }, "@vercel/static-config": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@vercel/static-config/-/static-config-3.0.0.tgz", - "integrity": "sha512-2qtvcBJ1bGY0dYGYh3iM7yGKkk971FujLEDXzuW5wcZsPr1GSEjO/w2iSr3qve6nDDtBImsGoDEnus5FI4+fIw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@vercel/static-config/-/static-config-3.1.2.tgz", + "integrity": "sha512-2d+TXr6K30w86a+WbMbGm2W91O0UzO5VeemZYBBUJbCjk/5FLLGIi8aV6RS2+WmaRvtcqNTn2pUA7nCOK3bGcQ==", "dev": true, "requires": { "ajv": "8.6.3", @@ -29867,6 +30814,12 @@ "color-convert": "^2.0.1" } }, + "ansis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/ansis/-/ansis-4.2.0.tgz", + "integrity": "sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==", + "dev": true + }, "any-promise": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", @@ -29973,6 +30926,23 @@ "integrity": "sha512-CcEtRh/oc9Jc4uWeUwdpG/+Mb2YUHKmdaTf0gUr7Wa+bfp4xx70HOb3RuSTJMvqKNB1TkdTfjLdrcz2X4rkkZA==", "dev": true }, + "async-retry": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", + "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", + "dev": true, + "requires": { + "retry": "0.13.1" + }, + "dependencies": { + "retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true + } + } + }, "async-sema": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/async-sema/-/async-sema-3.1.1.tgz", @@ -30390,6 +31360,15 @@ "set-function-length": "^1.2.1" } }, + "call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "requires": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + } + }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -30785,6 +31764,12 @@ "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", "dev": true }, + "consola": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", + "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", + "dev": true + }, "console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", @@ -31307,9 +32292,9 @@ "dev": true }, "detect-libc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", - "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.1.tgz", + "integrity": "sha512-ecqj/sy1jcK1uWrwpR67UhYrIFQ+5WlGxth34WquCbamhFA6hkkwiu37o6J5xCHdo1oixJRfVRw+ywV+Hq/0Aw==", "dev": true }, "detect-node": { @@ -31433,6 +32418,16 @@ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==" }, + "dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "requires": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + } + }, "duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", @@ -31583,12 +32578,23 @@ } }, "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.1.0.tgz", + "integrity": "sha512-EoulkdKF/1xa92q25PbjuDcgJ9RDHYU2Rs3SCIvs2/dSQ3BpmxneNHmA/M7fe60M3PrV7nNGTTNbkK62l6vXiQ==", "dev": true, "requires": { - "once": "^1.4.0" + "once": "~1.3.0" + }, + "dependencies": { + "once": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", + "integrity": "sha512-6vaNInhu+CHxtONf3zw3vq4SP2DOQhjBvIa3rNcG0+P7eKWlYH6Peu7rHizSloRU2EwMz6GraLieis9Ac9+p1w==", + "dev": true, + "requires": { + "wrappy": "1" + } + } } }, "engine.io": { @@ -31773,19 +32779,14 @@ } }, "es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dev": true, - "requires": { - "get-intrinsic": "^1.2.4" - } + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==" }, "es-errors": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" }, "es-get-iterator": { "version": "1.1.3", @@ -31818,6 +32819,25 @@ "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", "dev": true }, + "es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "requires": { + "es-errors": "^1.3.0" + } + }, + "es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "requires": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + } + }, "esbuild": { "version": "0.17.8", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.8.tgz", @@ -32746,6 +33766,18 @@ } } }, + "form-data": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + } + }, "forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -32855,8 +33887,7 @@ "function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" }, "function-timeout": { "version": "1.0.2", @@ -32910,16 +33941,20 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, "get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "dev": true, + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "requires": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" } }, "get-own-enumerable-property-symbols": { @@ -32934,6 +33969,15 @@ "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true }, + "get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "requires": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + } + }, "get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", @@ -33054,13 +34098,9 @@ } }, "gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.3" - } + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==" }, "graceful-fs": { "version": "4.2.11", @@ -33148,23 +34188,15 @@ "es-define-property": "^1.0.0" } }, - "has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "dev": true - }, "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 + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==" }, "has-tostringtag": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, "requires": { "has-symbols": "^1.0.3" } @@ -33179,7 +34211,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, "requires": { "function-bind": "^1.1.2" } @@ -33686,6 +34717,12 @@ "has-tostringtag": "^1.0.0" } }, + "is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true + }, "is-builtin-module": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", @@ -33767,6 +34804,12 @@ "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", "dev": true }, + "is-node-process": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-node-process/-/is-node-process-1.2.0.tgz", + "integrity": "sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==", + "dev": true + }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -34066,6 +35109,12 @@ "@sideway/pinpoint": "^2.0.0" } }, + "jose": { + "version": "5.9.6", + "resolved": "https://registry.npmjs.org/jose/-/jose-5.9.6.tgz", + "integrity": "sha512-AMlnetc9+CV9asI19zHmrgS/WYsWUwCn2R7RzlbJWD7F9eWYUTGyBmU9o6PxngtLGOiDGPRu+Uc4fhKzbpteZQ==", + "dev": true + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -34409,9 +35458,9 @@ "dev": true }, "linkifyjs": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/linkifyjs/-/linkifyjs-4.2.0.tgz", - "integrity": "sha512-pCj3PrQyATaoTYKHrgWRF3SJwsm61udVh+vuls/Rl6SptiDhgE7ziUIudAedRY9QEfynmM7/RmLEfPUyw1HPCw==" + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/linkifyjs/-/linkifyjs-4.3.2.tgz", + "integrity": "sha512-NT1CJtq3hHIreOianA8aSXn6Cw0JzYOuDQbOrSPe7gqFnCpKP++MQe3ODgO3oh2GJFORkAAdqredOa60z63GbA==" }, "lint-staged": { "version": "11.1.2", @@ -34937,6 +35986,11 @@ } } }, + "math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==" + }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -35512,6 +36566,15 @@ "skin-tone": "^2.0.0" } }, + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, + "requires": { + "whatwg-url": "^5.0.0" + } + }, "node-forge": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", @@ -37870,6 +38933,12 @@ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" }, + "package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true + }, "pacote": { "version": "15.0.6", "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.0.6.tgz", @@ -38092,9 +39161,9 @@ "dev": true }, "path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz", + "integrity": "sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==", "dev": true, "requires": { "isarray": "0.0.1" @@ -38109,9 +39178,9 @@ "dev": true }, "path-scurry": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz", - "integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, "requires": { "lru-cache": "^10.2.0", @@ -38138,6 +39207,12 @@ "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", "dev": true }, + "path-to-regexp-updated": { + "version": "npm:path-to-regexp@6.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", + "dev": true + }, "path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -38752,16 +39827,6 @@ "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==" }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -39358,6 +40423,32 @@ "glob": "^7.1.3" } }, + "rolldown": { + "version": "1.0.0-beta.35", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-beta.35.tgz", + "integrity": "sha512-gJATyqcsJe0Cs8RMFO8XgFjfTc0lK1jcSvirDQDSIfsJE+vt53QH/Ob+OBSJsXb98YtZXHfP/bHpELpPwCprow==", + "dev": true, + "requires": { + "@oxc-project/runtime": "=0.82.3", + "@oxc-project/types": "=0.82.3", + "@rolldown/binding-android-arm64": "1.0.0-beta.35", + "@rolldown/binding-darwin-arm64": "1.0.0-beta.35", + "@rolldown/binding-darwin-x64": "1.0.0-beta.35", + "@rolldown/binding-freebsd-x64": "1.0.0-beta.35", + "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-beta.35", + "@rolldown/binding-linux-arm64-gnu": "1.0.0-beta.35", + "@rolldown/binding-linux-arm64-musl": "1.0.0-beta.35", + "@rolldown/binding-linux-x64-gnu": "1.0.0-beta.35", + "@rolldown/binding-linux-x64-musl": "1.0.0-beta.35", + "@rolldown/binding-openharmony-arm64": "1.0.0-beta.35", + "@rolldown/binding-wasm32-wasi": "1.0.0-beta.35", + "@rolldown/binding-win32-arm64-msvc": "1.0.0-beta.35", + "@rolldown/binding-win32-ia32-msvc": "1.0.0-beta.35", + "@rolldown/binding-win32-x64-msvc": "1.0.0-beta.35", + "@rolldown/pluginutils": "1.0.0-beta.35", + "ansis": "^4.0.0" + } + }, "rollup": { "version": "3.29.4", "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", @@ -40375,18 +41466,18 @@ } }, "stream-chat": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/stream-chat/-/stream-chat-9.0.0.tgz", - "integrity": "sha512-I4+/DEp7dP3WBgRmqHaLswL+Y2fyQkUWJhYBS5zx4bpu1cYM6WEir9HYjToDNuJjltqa/FFIEF/tMPWr7iTc0A==", + "version": "9.20.0", + "resolved": "https://registry.npmjs.org/stream-chat/-/stream-chat-9.20.0.tgz", + "integrity": "sha512-DGl3etjkG1/GxXbyUZQHPT6Z3bOwm5ppUNqrrWNYqRqf30UWqotmsRf8HwnilXtvZ8/p/ANZ11nHxbdy72jVZg==", "requires": { "@types/jsonwebtoken": "^9.0.8", "@types/ws": "^8.5.14", "axios": "^1.6.0", "base64-js": "^1.5.1", - "form-data": "^4.0.0", + "form-data": "^4.0.4", "isomorphic-ws": "^5.0.0", "jsonwebtoken": "^9.0.2", - "linkifyjs": "^4.2.0", + "linkifyjs": "^4.3.2", "ws": "^8.18.1" }, "dependencies": { @@ -40400,16 +41491,6 @@ "proxy-from-env": "^1.1.0" } }, - "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, "ws": { "version": "8.18.1", "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz", @@ -40478,26 +41559,6 @@ "any-promise": "~1.3.0", "end-of-stream": "~1.1.0", "stream-to-array": "~2.3.0" - }, - "dependencies": { - "end-of-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.1.0.tgz", - "integrity": "sha512-EoulkdKF/1xa92q25PbjuDcgJ9RDHYU2Rs3SCIvs2/dSQ3BpmxneNHmA/M7fe60M3PrV7nNGTTNbkK62l6vXiQ==", - "dev": true, - "requires": { - "once": "~1.3.0" - } - }, - "once": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", - "integrity": "sha512-6vaNInhu+CHxtONf3zw3vq4SP2DOQhjBvIa3rNcG0+P7eKWlYH6Peu7rHizSloRU2EwMz6GraLieis9Ac9+p1w==", - "dev": true, - "requires": { - "wrappy": "1" - } - } } }, "streamroller": { @@ -40877,6 +41938,12 @@ "thenify": ">= 3.1.0 < 4" } }, + "throttleit": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-2.1.0.tgz", + "integrity": "sha512-nt6AMGKW1p/70DF/hGBdJB57B8Tspmbp5gfJ8ilhLnt7kkr2ye7hzD6NVG8GGErk2HWF34igrL2CXmNIkzKqKw==", + "dev": true + }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -40906,6 +41973,12 @@ "convert-hrtime": "^3.0.0" } }, + "tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "dev": true + }, "tmp": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", @@ -41005,9 +42078,9 @@ "dev": true }, "tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" }, "tsutils": { "version": "3.21.0", @@ -41141,9 +42214,9 @@ "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==" }, "undici": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.26.5.tgz", - "integrity": "sha512-cSb4bPFd5qgR7qr2jYAi0hlX9n5YKK2ONKkLFkxl+v/9BvC0sOpZjBHDBSXc5lWAf5ty9oZdRXytBIHzgUcerw==", + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz", + "integrity": "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==", "dev": true, "requires": { "@fastify/busboy": "^2.0.0" @@ -41331,56 +42404,45 @@ "dev": true }, "vercel": { - "version": "34.2.0", - "resolved": "https://registry.npmjs.org/vercel/-/vercel-34.2.0.tgz", - "integrity": "sha512-OUMvETq+5Iq9L5m1v/E9SPUUfKnKnJjynv0ydeAqWnXoYAwgcaJCg+3HVOEk1VhjhgcGzSS1uGHvlcLmK6XRkA==", - "dev": true, - "requires": { - "@vercel/build-utils": "8.2.0", - "@vercel/fun": "1.1.0", - "@vercel/go": "3.1.1", - "@vercel/hydrogen": "1.0.2", - "@vercel/next": "4.2.11", - "@vercel/node": "3.1.5", - "@vercel/python": "4.2.0", - "@vercel/redwood": "2.0.9", - "@vercel/remix-builder": "2.1.6", - "@vercel/ruby": "2.1.0", - "@vercel/static-build": "2.5.9", - "chokidar": "3.3.1" + "version": "48.1.6", + "resolved": "https://registry.npmjs.org/vercel/-/vercel-48.1.6.tgz", + "integrity": "sha512-bcfocpaHfG0FHpTdY59Pfgm26cznI7+9KhGAnVkv4pU+oM6Ggc+w/nnsjuS5EY+/v3vI3f8cYamE6DDqQ3CpEQ==", + "dev": true, + "requires": { + "@vercel/blob": "1.0.2", + "@vercel/build-utils": "12.1.0", + "@vercel/detect-agent": "1.0.0", + "@vercel/express": "0.0.22", + "@vercel/fun": "1.1.6", + "@vercel/go": "3.2.3", + "@vercel/h3": "0.1.2", + "@vercel/hono": "0.1.2", + "@vercel/hydrogen": "1.2.4", + "@vercel/next": "4.13.0", + "@vercel/node": "5.3.24", + "@vercel/python": "5.0.5", + "@vercel/redwood": "2.3.6", + "@vercel/remix-builder": "5.4.12", + "@vercel/ruby": "2.2.1", + "@vercel/static-build": "2.7.23", + "chokidar": "4.0.0", + "jose": "5.9.6" }, "dependencies": { "chokidar": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.1.tgz", - "integrity": "sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.0.tgz", + "integrity": "sha512-mxIojEAQcuEvT/lyXq+jf/3cO/KoA6z4CeNDGGevTybECPOMFCnQy3OPahluUkbqgPNGw5Bi78UC7Po6Lhy+NA==", "dev": true, "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.1.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.3.0" + "readdirp": "^4.0.1" } }, - "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "dev": true, - "optional": true - }, "readdirp": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.3.0.tgz", - "integrity": "sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ==", - "dev": true, - "requires": { - "picomatch": "^2.0.7" - } + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true } } }, @@ -41933,6 +42995,12 @@ "integrity": "sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==", "dev": true }, + "zod": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz", + "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==", + "dev": true + }, "zone.js": { "version": "0.11.4", "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.11.4.tgz", diff --git a/package.json b/package.json index ea7934a4..a9d793fc 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ "generate-docs": "npm run typedoc:services && npm run typedoc:components && npm run copy-docs:v6", "typedoc:services": "typedoc --plugin typedoc-plugin-markdown --plugin typedoc-plugin-reference-excluder --cleanOutputDir true --excludeConstructors true --hideBreadcrumbs true --hideInPageTOC true --excludePrivate true --out temp-service-docs --exclude '!**/*service.ts' --excludeNotDocumented --tsconfig projects/stream-chat-angular/tsconfig.lib.json projects/stream-chat-angular/src/public-api.ts", "typedoc:components": "typedoc --plugin typedoc-plugin-markdown --plugin typedoc-plugin-reference-excluder --cleanOutputDir true --excludeConstructors true --sort source-order --hideBreadcrumbs true --hideInPageTOC true --excludePrivate true --excludeNotDocumented --out temp-component-docs --exclude '!**/*component.ts' --tsconfig projects/stream-chat-angular/tsconfig.lib.json projects/stream-chat-angular/src/public-api.ts", - "copy-docs:v6": "ts-node copy-generated-service-docs.ts ../docs/data/docs/chat-sdk/angular/06-services & (ts-node remove-generated-component-docs-content ../docs/data/docs/chat-sdk/angular/05-components && ts-node copy-generated-component-docs.ts ../docs/data/docs/chat-sdk/angular/05-components)" + "copy-docs:v6": "ts-node copy-generated-service-docs.ts ../docs/data/docs/chat-sdk/angular/v6-latest/06-services & (ts-node remove-generated-component-docs-content ../docs/data/docs/chat-sdk/angular/v6-latest/05-components && ts-node copy-generated-component-docs.ts ../docs/data/docs/chat-sdk/angular/v6-latest/05-components)" }, "lint-staged": { "**/*": [ @@ -50,9 +50,9 @@ "branches": [ "master", { - "name": "support-ngx-translate-17", - "prerelease": "next", - "channel": "next" + "name": "polls", + "prerelease": "beta", + "channel": "beta" } ], "dryRun": false, @@ -116,7 +116,7 @@ "@ctrl/ngx-emoji-mart": "^8.2.0", "@floating-ui/dom": "^1.6.3", "@ngx-translate/core": "^14.0.0", - "@stream-io/stream-chat-css": "5.8.0", + "@stream-io/stream-chat-css": "5.14.0", "@stream-io/transliterate": "^1.5.2", "angular-mentions": "1.4.0", "dayjs": "^1.11.10", @@ -129,7 +129,7 @@ "replace": "^1.2.2", "rxjs": "~7.4.0", "starwars-names": "^1.6.0", - "stream-chat": "9.0.0", + "stream-chat": "9.20.0", "ts-node": "^10.9.2", "tslib": "^2.3.0", "uuid": "^9.0.1", @@ -174,7 +174,7 @@ "typedoc-plugin-markdown": "^3.17.1", "typedoc-plugin-reference-excluder": "^1.1.3", "typescript": "~4.8.4", - "vercel": "^34.2.0", + "vercel": "^48.1.6", "wait-on": "^6.0.0", "webpack-bundle-analyzer": "^4.5.0" } diff --git a/projects/sample-app/src/app/app.component.html b/projects/sample-app/src/app/app.component.html index 671bde4c..1047e187 100644 --- a/projects/sample-app/src/app/app.component.html +++ b/projects/sample-app/src/app/app.component.html @@ -26,7 +26,10 @@ - + + + + + + + + + + + + + + diff --git a/projects/sample-app/src/app/app.component.ts b/projects/sample-app/src/app/app.component.ts index 2d9a6917..6de60d4f 100644 --- a/projects/sample-app/src/app/app.component.ts +++ b/projects/sample-app/src/app/app.component.ts @@ -30,6 +30,15 @@ export class AppComponent implements AfterViewInit { @ViewChild('emojiPickerTemplate') emojiPickerTemplate!: TemplateRef; @ViewChild('avatar') avatarTemplate!: TemplateRef; + @ViewChild('pollTemplate') pollTemplate!: TemplateRef<{ + pollId: string; + messageId: string; + }>; + @ViewChild('pollComposerTemplate') + pollComposerTemplate!: TemplateRef<{ + pollCompose: (pollId: string) => void; + cancel: () => void; + }>; theme$: Observable; counter = 0; @@ -59,6 +68,7 @@ export class AppComponent implements AfterViewInit { : environment.userToken, { timeout: 10000 } ); + this.chatService.chatClient.polls.registerSubscriptions(); void this.channelService.init( environment.channelsFilter || { type: 'messaging', @@ -78,6 +88,10 @@ export class AppComponent implements AfterViewInit { this.customTemplateService.emojiPickerTemplate$.next( this.emojiPickerTemplate ); + this.customTemplateService.pollTemplate$.next(this.pollTemplate); + this.customTemplateService.pollComposerTemplate$.next( + this.pollComposerTemplate + ); } closeMenu(event: Event) { diff --git a/projects/sample-app/src/app/app.module.ts b/projects/sample-app/src/app/app.module.ts index 20d80588..8ae83457 100644 --- a/projects/sample-app/src/app/app.module.ts +++ b/projects/sample-app/src/app/app.module.ts @@ -8,6 +8,7 @@ import { StreamAutocompleteTextareaModule, StreamChatModule, VoiceRecorderModule, + StreamPollsModule, } from 'stream-chat-angular'; import { EmojiPickerComponent } from './emoji-picker/emoji-picker.component'; import { PickerModule } from '@ctrl/ngx-emoji-mart'; @@ -20,6 +21,7 @@ import { PickerModule } from '@ctrl/ngx-emoji-mart'; StreamChatModule, PickerModule, VoiceRecorderModule, + StreamPollsModule, StreamAutocompleteTextareaModule, ], bootstrap: [AppComponent], diff --git a/projects/stream-chat-angular/package.json b/projects/stream-chat-angular/package.json index 060780a1..9a491b77 100644 --- a/projects/stream-chat-angular/package.json +++ b/projects/stream-chat-angular/package.json @@ -1,6 +1,6 @@ { "name": "stream-chat-angular", - "version": "6.2.0", + "version": "6.3.0-beta.2", "description": "Angular components to create chat conversations or livestream style chat", "author": "GetStream", "homepage": "https://getstream.io/chat/", @@ -19,12 +19,16 @@ "peerDependencies": { "@angular/common": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0", "@angular/core": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0", + "@angular/forms": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0", "@breezystack/lamejs": "^1.2.7", "@ngx-translate/core": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0", "rxjs": "^7.4.0", - "stream-chat": "^9.0.0" + "stream-chat": "^9.20.0" }, "peerDependenciesMeta": { + "@angular/forms": { + "optional": true + }, "@breezystack/lamejs": { "optional": true } diff --git a/projects/stream-chat-angular/src/assets/i18n/en.ts b/projects/stream-chat-angular/src/assets/i18n/en.ts index 2da264e6..b0e79b42 100644 --- a/projects/stream-chat-angular/src/assets/i18n/en.ts +++ b/projects/stream-chat-angular/src/assets/i18n/en.ts @@ -133,5 +133,51 @@ export const en = { 'and others': 'and others', 'Message was blocked by moderation policies': 'Message was blocked by moderation policies', + 'Vote ended': 'Vote ended', + 'Select one': 'Select one', + 'Select up to {{count}}': 'Select up to {{count}}', + 'Select one or more': 'Select one or more', + 'See all options ({{count}})': 'See all options ({{count}})', + 'Suggest an option': 'Suggest an option', + 'Add a comment': 'Add a comment', + 'Update your comment': 'Update your comment', + 'View {{ count }} comments': 'View {{ count }} comments', + 'View {{ count }} comment': 'View {{ count }} comment', + 'View results': 'View results', + 'End vote': 'End vote', + 'After a poll is closed, no more votes can be cast': + 'After a poll is closed, no more votes can be cast', + 'Failed to end vote': 'Failed to end vote', + 'Failed to cast vote': 'Failed to cast vote', + Anonymous: 'Anonymous', + '{{ count }} votes': '{{ count }} votes', + 'Show all': 'Show all', + 'Poll results': 'Poll results', + 'Error loading votes': 'Error loading votes', + 'Poll comments': 'Poll comments', + 'Error loading answers': 'Error loading answers', + Comment: 'Comment', + 'Failed to add comment': 'Failed to add comment', + 'Failed to add option ({{ message }})': + 'Failed to add option ({{ message }})', + 'Option already exists': 'Option already exists', + 'You have reached the maximum number of votes allowed': + 'You have reached the maximum number of votes allowed', + 'Create poll': 'Create poll', + Create: 'Create', + Question: 'Question', + 'Ask a question': 'Ask a question', + 'Question is required': 'Question is required', + Options: 'Options', + 'Add an option': 'Add an option', + 'Multiple answers': 'Multiple answers', + 'Maximum number of votes': 'Maximum number of votes', + 'Provide a value between {{ min }} and {{ max }}': + 'Provide a value between {{ min }} and {{ max }}', + 'Anonymous poll': 'Anonymous poll', + 'Allow option suggestions': 'Allow option suggestions', + 'Allow comments': 'Allow comments', + 'Failed to create poll': 'Failed to create poll', + 'Provide at least one option': 'Provide at least one option', }, }; diff --git a/projects/stream-chat-angular/src/assets/version.ts b/projects/stream-chat-angular/src/assets/version.ts index 485c5d64..b20bc8c8 100644 --- a/projects/stream-chat-angular/src/assets/version.ts +++ b/projects/stream-chat-angular/src/assets/version.ts @@ -1 +1 @@ -export const version = '6.2.0'; +export const version = '6.3.0-beta.2'; diff --git a/projects/stream-chat-angular/src/lib/channel-preview/channel-preview.component.ts b/projects/stream-chat-angular/src/lib/channel-preview/channel-preview.component.ts index 15ae26ef..bd2ee312 100644 --- a/projects/stream-chat-angular/src/lib/channel-preview/channel-preview.component.ts +++ b/projects/stream-chat-angular/src/lib/channel-preview/channel-preview.component.ts @@ -169,6 +169,8 @@ export class ChannelPreviewComponent implements OnInit, OnDestroy { ) || message.text; } else if (message?.attachments && message.attachments.length) { this.latestMessageText = 'streamChat.🏙 Attachment...'; + } else if (message?.poll_id) { + this.latestMessageText = `📊 ${message.poll?.name}`; } if (this.latestMessage && this.latestMessage.type === 'regular') { this.latestMessageTime = isOnSeparateDate( diff --git a/projects/stream-chat-angular/src/lib/channel.service.spec.ts b/projects/stream-chat-angular/src/lib/channel.service.spec.ts index b65f17d8..0c817d35 100644 --- a/projects/stream-chat-angular/src/lib/channel.service.spec.ts +++ b/projects/stream-chat-angular/src/lib/channel.service.spec.ts @@ -1246,6 +1246,7 @@ describe('ChannelService', () => { quoted_message_id: quotedMessageId, isVote: true, options: ['A', 'B', 'C'], + poll_id: undefined, }); expect(channel.state.addMessageSorted).toHaveBeenCalledWith( @@ -1284,6 +1285,7 @@ describe('ChannelService', () => { quoted_message_id: undefined, // @ts-expect-error testing custom proerpty custom: 'red', + poll_id: undefined, }); expect(channel.state.addMessageSorted).toHaveBeenCalledWith( @@ -1304,6 +1306,7 @@ describe('ChannelService', () => { id: jasmine.any(String), parent_id: undefined, quoted_message_id: undefined, + poll_id: undefined, }); expect(channel.state.addMessageSorted).toHaveBeenCalledWith( diff --git a/projects/stream-chat-angular/src/lib/channel.service.thread.spec.ts b/projects/stream-chat-angular/src/lib/channel.service.thread.spec.ts index 4d50886c..d0a1b19f 100644 --- a/projects/stream-chat-angular/src/lib/channel.service.thread.spec.ts +++ b/projects/stream-chat-angular/src/lib/channel.service.thread.spec.ts @@ -558,6 +558,7 @@ describe('ChannelService - threads', () => { parent_id: 'parentId', quoted_message_id: undefined, ...customData, + poll_id: undefined, }); expect(channel.state.addMessageSorted).toHaveBeenCalledWith( diff --git a/projects/stream-chat-angular/src/lib/channel.service.ts b/projects/stream-chat-angular/src/lib/channel.service.ts index 4bb98927..3b5c1562 100644 --- a/projects/stream-chat-angular/src/lib/channel.service.ts +++ b/projects/stream-chat-angular/src/lib/channel.service.ts @@ -831,6 +831,7 @@ export class ChannelService { * @param parentId Id of the parent message (if sending a thread reply) * @param quotedMessageId Id of the message to quote (if sending a quote reply) * @param customData + * @param pollId Id of the poll (if sending a poll message) */ async sendMessage( text: string, @@ -838,7 +839,8 @@ export class ChannelService { mentionedUsers: UserResponse[] = [], parentId: string | undefined = undefined, quotedMessageId: string | undefined = undefined, - customData: undefined | CustomMessageData = undefined + customData: undefined | CustomMessageData = undefined, + pollId: string | undefined = undefined ) { let input: MessageInput = { text, @@ -847,6 +849,7 @@ export class ChannelService { parentId, quotedMessageId, customData, + pollId, }; if (this.beforeSendMessage) { input = await this.beforeSendMessage(input); @@ -858,7 +861,8 @@ export class ChannelService { input.mentionedUsers, input.parentId, input.quotedMessageId, - input.customData + input.customData, + input.pollId ); const channel = this.activeChannelSubject.getValue()!; channel.state.addMessageSorted(preview, true); @@ -1206,6 +1210,7 @@ export class ChannelService { mentioned_users: preview.mentioned_users?.map((u) => u.id), parent_id: preview.parent_id, quoted_message_id: preview.quoted_message_id, + poll_id: preview.poll_id, ...customData, } as Message); // TODO: find out why we need typecast here channel.state.addMessageSorted( diff --git a/projects/stream-chat-angular/src/lib/custom-templates.service.ts b/projects/stream-chat-angular/src/lib/custom-templates.service.ts index 756e79e5..b88d77e3 100644 --- a/projects/stream-chat-angular/src/lib/custom-templates.service.ts +++ b/projects/stream-chat-angular/src/lib/custom-templates.service.ts @@ -373,6 +373,19 @@ export class CustomTemplatesService { messageBlockedTemplate$ = new BehaviorSubject< TemplateRef | undefined >(undefined); + /** + * Template to display polls inside [message component](/chat/docs/sdk/angular/components/MessageComponent/). There is no default template, but the `PollsModule` contains default components. + */ + pollTemplate$ = new BehaviorSubject< + TemplateRef<{ pollId: string; messageId: string }> | undefined + >(undefined); + /** + * Template to display poll composer inside [message input component](/chat/docs/sdk/angular/components/MessageInputComponent/). There is no default template, but the `PollsModule` contains default components. + */ + pollComposerTemplate$ = new BehaviorSubject< + | TemplateRef<{ pollCompose: (pollId: string) => void; cancel: () => void }> + | undefined + >(undefined); constructor() {} } diff --git a/projects/stream-chat-angular/src/lib/icon/icon.component.ts b/projects/stream-chat-angular/src/lib/icon/icon.component.ts index 6a788b83..43157a27 100644 --- a/projects/stream-chat-angular/src/lib/icon/icon.component.ts +++ b/projects/stream-chat-angular/src/lib/icon/icon.component.ts @@ -22,7 +22,8 @@ export type Icon = | 'play' | 'pause' | 'mic' - | 'bin'; + | 'bin' + | 'poll'; /** * The `Icon` component can be used to display different icons (i. e. message delivered icon). diff --git a/projects/stream-chat-angular/src/lib/message-actions.service.ts b/projects/stream-chat-angular/src/lib/message-actions.service.ts index 9f38f5b5..da69892a 100644 --- a/projects/stream-chat-angular/src/lib/message-actions.service.ts +++ b/projects/stream-chat-angular/src/lib/message-actions.service.ts @@ -184,6 +184,10 @@ export class MessageActionsService { * @internal */ messageMenuOpenedFor$ = new BehaviorSubject(undefined); + /** + * @internal + */ + modalOpenedForMessage = new BehaviorSubject(undefined); private hasDisplayedClipboardWarning = false; constructor( diff --git a/projects/stream-chat-angular/src/lib/message-input/message-input.component.html b/projects/stream-chat-angular/src/lib/message-input/message-input.component.html index 29d5296f..98b595de 100644 --- a/projects/stream-chat-angular/src/lib/message-input/message-input.component.html +++ b/projects/stream-chat-angular/src/lib/message-input/message-input.component.html @@ -66,6 +66,16 @@ + + +
+ + +
+ diff --git a/projects/stream-chat-angular/src/lib/message-input/message-input.component.spec.ts b/projects/stream-chat-angular/src/lib/message-input/message-input.component.spec.ts index 69af6ad3..254310cd 100644 --- a/projects/stream-chat-angular/src/lib/message-input/message-input.component.spec.ts +++ b/projects/stream-chat-angular/src/lib/message-input/message-input.component.spec.ts @@ -307,6 +307,8 @@ describe('MessageInputComponent', () => { [], mentionedUsers, undefined, + undefined, + undefined, undefined ); @@ -486,6 +488,8 @@ describe('MessageInputComponent', () => { attachments, [], undefined, + undefined, + undefined, undefined ); }); @@ -589,6 +593,8 @@ describe('MessageInputComponent', () => { jasmine.any(Array), jasmine.any(Object), undefined, + undefined, + undefined, undefined ); }); @@ -627,6 +633,8 @@ describe('MessageInputComponent', () => { undefined, [], undefined, + undefined, + undefined, undefined ); }); @@ -709,7 +717,9 @@ describe('MessageInputComponent', () => { [], [], 'parent message', - 'message-to-quote' + 'message-to-quote', + undefined, + undefined ); expect(typingStoppedSpy).toHaveBeenCalledWith('parent message'); diff --git a/projects/stream-chat-angular/src/lib/message-input/message-input.component.ts b/projects/stream-chat-angular/src/lib/message-input/message-input.component.ts index c67cf21f..0c8e2634 100644 --- a/projects/stream-chat-angular/src/lib/message-input/message-input.component.ts +++ b/projects/stream-chat-angular/src/lib/message-input/message-input.component.ts @@ -108,6 +108,10 @@ export class MessageInputComponent * You can enable/disable voice recordings with this input */ @Input() displayVoiceRecordingButton = false; + /** + * You can enable/disable polls with this input + */ + @Input() displayPollCreateButton = false; /** * Emits when a message was successfuly sent or updated */ @@ -122,6 +126,7 @@ export class MessageInputComponent isFileUploadAuthorized: boolean | undefined; canSendLinks: boolean | undefined; canSendMessages: boolean | undefined; + canSendPolls: boolean | undefined; attachmentUploads$: Observable; customAttachments$: Observable; attachmentUploadInProgressCounter$: Observable; @@ -141,6 +146,7 @@ export class MessageInputComponent | undefined; textareaPlaceholder: string; fileInputId = uuidv4(); + isComposerOpen = false; @ViewChild('fileInput') private fileInput!: ElementRef; @ViewChild(TextareaDirective, { static: false }) private textareaAnchor!: TextareaDirective; @@ -152,6 +158,7 @@ export class MessageInputComponent private readonly defaultTextareaPlaceholder = 'streamChat.Type your message'; private readonly slowModeTextareaPlaceholder = 'streamChat.Slow Mode ON'; private messageToEdit?: StreamMessage; + private pollId: string | undefined; constructor( private channelService: ChannelService, @@ -184,6 +191,7 @@ export class MessageInputComponent if (channel && this.channel && channel.id !== this.channel.id) { this.textareaValue = ''; this.attachmentService.resetAttachmentUploads(); + this.pollId = undefined; this.voiceRecorderService.isRecorderVisible$.next(false); } const capabilities = channel?.data?.own_capabilities as string[]; @@ -191,6 +199,7 @@ export class MessageInputComponent this.isFileUploadAuthorized = capabilities.indexOf('upload-file') !== -1; this.canSendLinks = capabilities.indexOf('send-links') !== -1; + this.canSendPolls = capabilities.indexOf('send-poll') !== -1; this.channel = channel; this.setCanSendMessages(); } @@ -377,7 +386,8 @@ export class MessageInputComponent const textContainsOnlySpaceChars = !text.replace(/ /g, ''); //spcae if ( (!text || textContainsOnlySpaceChars) && - (!attachments || attachments.length === 0) + (!attachments || attachments.length === 0) && + !this.pollId ) { return; } @@ -390,8 +400,10 @@ export class MessageInputComponent ); return; } + const pollId = this.pollId; if (!this.isUpdate) { this.textareaValue = ''; + this.pollId = undefined; } try { const message = await (this.isUpdate @@ -405,7 +417,9 @@ export class MessageInputComponent attachments, this.mentionedUsers, this.parentMessageId, - this.quotedMessage?.id + this.quotedMessage?.id, + undefined, + pollId )); this.messageUpdate.emit({ message }); if (this.isUpdate) { @@ -509,6 +523,20 @@ export class MessageInputComponent } } + openPollComposer() { + this.isComposerOpen = true; + } + + closePollComposer = () => { + this.isComposerOpen = false; + }; + + addPoll = (pollId: string) => { + this.isComposerOpen = false; + this.pollId = pollId; + void this.messageSent(); + }; + async voiceRecordingReady(recording: AudioRecording) { try { await this.attachmentService.uploadVoiceRecording(recording); @@ -641,8 +669,10 @@ export class MessageInputComponent this.message!.attachments || [] ); this.textareaValue = this.message!.text || ''; + this.pollId = this.message!.poll_id; } else { this.textareaValue = ''; + this.pollId = undefined; } } } diff --git a/projects/stream-chat-angular/src/lib/message-preview.ts b/projects/stream-chat-angular/src/lib/message-preview.ts index 6e46c35b..5fb8a419 100644 --- a/projects/stream-chat-angular/src/lib/message-preview.ts +++ b/projects/stream-chat-angular/src/lib/message-preview.ts @@ -13,7 +13,8 @@ export const createMessagePreview = ( mentionedUsers: UserResponse[] = [], parentId: undefined | string = undefined, quotedMessageId: undefined | string = undefined, - customData: undefined | CustomMessageData + customData: undefined | CustomMessageData, + pollId: undefined | string = undefined ) => { const clientSideId = `${user.id}-${uuidv4()}`; @@ -31,6 +32,7 @@ export const createMessagePreview = ( mentioned_users: mentionedUsers, parent_id: parentId, quoted_message_id: quotedMessageId, + poll_id: pollId, ...customData, } as unknown as MessageResponse; }; diff --git a/projects/stream-chat-angular/src/lib/message/message.component.html b/projects/stream-chat-angular/src/lib/message/message.component.html index 19c08f96..820c4975 100644 --- a/projects/stream-chat-angular/src/lib/message/message.component.html +++ b/projects/stream-chat-angular/src/lib/message/message.component.html @@ -167,7 +167,7 @@
+ + +
+ + +
-
+
diff --git a/projects/stream-chat-angular/src/lib/modal/stream-modal.module.ts b/projects/stream-chat-angular/src/lib/modal/stream-modal.module.ts new file mode 100644 index 00000000..e0168ae8 --- /dev/null +++ b/projects/stream-chat-angular/src/lib/modal/stream-modal.module.ts @@ -0,0 +1,11 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { ModalComponent } from './modal.component'; +import { IconModule } from '../icon/icon.module'; + +@NgModule({ + declarations: [ModalComponent], + imports: [CommonModule, IconModule], + exports: [ModalComponent], +}) +export class StreamModalModule {} diff --git a/projects/stream-chat-angular/src/lib/notification-list/stream-notification.module.ts b/projects/stream-chat-angular/src/lib/notification-list/stream-notification.module.ts new file mode 100644 index 00000000..1894a5de --- /dev/null +++ b/projects/stream-chat-angular/src/lib/notification-list/stream-notification.module.ts @@ -0,0 +1,12 @@ +import { NgModule } from '@angular/core'; +import { NotificationListComponent } from './notification-list.component'; +import { NotificationComponent } from '../notification/notification.component'; +import { CommonModule } from '@angular/common'; +import { TranslateModule } from '@ngx-translate/core'; + +@NgModule({ + declarations: [NotificationComponent, NotificationListComponent], + imports: [CommonModule, TranslateModule], + exports: [NotificationComponent, NotificationListComponent], +}) +export class StreamNotificationModule {} diff --git a/projects/stream-chat-angular/src/lib/paginated-list/stream-paginated-list.module.ts b/projects/stream-chat-angular/src/lib/paginated-list/stream-paginated-list.module.ts new file mode 100644 index 00000000..e9efa3d3 --- /dev/null +++ b/projects/stream-chat-angular/src/lib/paginated-list/stream-paginated-list.module.ts @@ -0,0 +1,12 @@ +import { NgModule } from '@angular/core'; +import { PaginatedListComponent } from './paginated-list.component'; +import { CommonModule } from '@angular/common'; +import { TranslateModule } from '@ngx-translate/core'; +import { IconModule } from '../icon/icon.module'; + +@NgModule({ + declarations: [PaginatedListComponent], + imports: [CommonModule, TranslateModule, IconModule], + exports: [PaginatedListComponent], +}) +export class StreamPaginatedListModule {} diff --git a/projects/stream-chat-angular/src/lib/polls/base-poll.component.ts b/projects/stream-chat-angular/src/lib/polls/base-poll.component.ts new file mode 100644 index 00000000..7ddaa214 --- /dev/null +++ b/projects/stream-chat-angular/src/lib/polls/base-poll.component.ts @@ -0,0 +1,123 @@ +import { + AfterViewInit, + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + Input, + OnChanges, + OnDestroy, + SimpleChanges, +} from '@angular/core'; +import { ChatClientService } from '../chat-client.service'; +import { Poll, User } from 'stream-chat'; +import { ChannelService } from '../channel.service'; +import { Subscription } from 'rxjs'; +import { CustomTemplatesService } from '../custom-templates.service'; +import { NotificationService } from '../notification.service'; + +/** + * @internal + */ +@Component({ + selector: 'stream-base-poll', + template: '', + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export abstract class BasePollComponent + implements OnChanges, AfterViewInit, OnDestroy +{ + /** + * The poll id to display + */ + @Input() pollId: string | undefined; + /** + * The message id the poll is attached to + */ + @Input() messageId: string | undefined; + canVote = false; + canQueryVotes = false; + private pollStateUnsubscribe?: () => void; + private isViewInited = false; + private capabilitySubscription?: Subscription; + protected dismissNotificationFn: (() => void) | undefined; + + constructor( + public customTemplatesService: CustomTemplatesService, + private chatClientService: ChatClientService, + private cdRef: ChangeDetectorRef, + private channelService: ChannelService, + protected notificationService: NotificationService + ) { + this.capabilitySubscription = this.channelService.activeChannel$.subscribe( + (channel) => { + if (channel) { + const capabilities = channel.data?.own_capabilities as string[]; + this.canVote = capabilities.indexOf('cast-poll-vote') !== -1; + this.canQueryVotes = capabilities.indexOf('query-poll-votes') !== -1; + } + } + ); + } + + ngOnChanges(changes: SimpleChanges): void { + if (changes['pollId']) { + if (this.pollId) { + this.setupStateStoreSelector(); + } else { + this.pollStateUnsubscribe?.(); + } + this.dismissNotificationFn?.(); + } + } + + ngAfterViewInit(): void { + this.isViewInited = true; + } + + ngOnDestroy(): void { + this.pollStateUnsubscribe?.(); + this.dismissNotificationFn?.(); + this.capabilitySubscription?.unsubscribe(); + } + + protected get poll(): Poll | undefined { + return this.chatClientService.chatClient.polls.fromState(this.pollId ?? ''); + } + + protected setupStateStoreSelector(): void { + this.pollStateUnsubscribe?.(); + const poll = this.chatClientService.chatClient.polls.fromState( + this.pollId ?? '' + ); + if (poll) { + this.pollStateUnsubscribe = this.stateStoreSelector(poll, () => { + this.markForCheck(); + }); + } + } + + protected addNotification( + ...args: Parameters< + typeof this.notificationService.addTemporaryNotification + > + ) { + this.dismissNotificationFn?.(); + this.dismissNotificationFn = + this.notificationService.addTemporaryNotification(...args); + } + + protected abstract stateStoreSelector( + poll: Poll, + markForCheck: () => void + ): () => void; + + protected get currentUser(): User | undefined { + return this.chatClientService.chatClient.user; + } + + protected markForCheck(): void { + if (this.isViewInited) { + this.cdRef.detectChanges(); + } + } +} diff --git a/projects/stream-chat-angular/src/lib/polls/poll-actions/add-option/add-option.component.html b/projects/stream-chat-angular/src/lib/polls/poll-actions/add-option/add-option.component.html new file mode 100644 index 00000000..fc13dfdd --- /dev/null +++ b/projects/stream-chat-angular/src/lib/polls/poll-actions/add-option/add-option.component.html @@ -0,0 +1,40 @@ +
+
+
+ {{ "streamChat.Suggest an option" | translate }} +
+
+
+ +
+ {{ + formGroup.get("text")?.errors?.duplicate + ? ("streamChat.Option already exists" | translate) + : "" + }} +
+
+
+ + +
+
+
+
diff --git a/projects/stream-chat-angular/src/lib/polls/poll-actions/add-option/add-option.component.ts b/projects/stream-chat-angular/src/lib/polls/poll-actions/add-option/add-option.component.ts new file mode 100644 index 00000000..19e76944 --- /dev/null +++ b/projects/stream-chat-angular/src/lib/polls/poll-actions/add-option/add-option.component.ts @@ -0,0 +1,78 @@ +import { + ChangeDetectionStrategy, + Component, + HostBinding, + Input, +} from '@angular/core'; +import { FormControl, FormGroup, Validators } from '@angular/forms'; +import { BasePollComponent } from '../../base-poll.component'; +import { Poll, PollOption } from 'stream-chat'; +import { createUniqueValidator } from '../../unique.validator'; + +/** + * + */ +@Component({ + selector: 'stream-add-option', + templateUrl: './add-option.component.html', + styles: [], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class AddOptionComponent extends BasePollComponent { + @HostBinding('class') class = 'str-chat__dialog'; + /** + * The callback to close the modal the component is displayed in + */ + @Input() closeModal: () => void = () => {}; + formGroup = new FormGroup({ + text: new FormControl('', [ + Validators.required, + createUniqueValidator((value) => { + return !this.options.some( + (option) => + option.text.trim().toLowerCase() === value.trim().toLowerCase() + ); + }), + ]), + }); + options: PollOption[] = []; + + async addOption() { + if (this.formGroup.invalid || !this.messageId) { + return; + } + try { + await this.poll?.createOption({ + text: this.formGroup.value.text!, + }); + this.closeModal(); + this.markForCheck(); + } catch (error) { + this.notificationService.addTemporaryNotification( + 'streamChat.Failed to add option ({{ message }})', + 'error', + undefined, + { message: error } + ); + this.markForCheck(); + throw error; + } + } + + protected stateStoreSelector( + poll: Poll, + markForCheck: () => void + ): () => void { + const unsubscribe = poll.state.subscribeWithSelector( + (state) => ({ + options: state.options, + }), + (state) => { + this.options = state.options; + markForCheck(); + } + ); + + return unsubscribe; + } +} diff --git a/projects/stream-chat-angular/src/lib/polls/poll-actions/poll-actions.component.html b/projects/stream-chat-angular/src/lib/polls/poll-actions/poll-actions.component.html new file mode 100644 index 00000000..ba5bef51 --- /dev/null +++ b/projects/stream-chat-angular/src/lib/polls/poll-actions/poll-actions.component.html @@ -0,0 +1,155 @@ +
+ + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+
+
+ streamChat.Poll options +
+
+
+
{{ name }}
+ + +
+
+
+ + + + + + + + + + + + + + + + + +
+
+
streamChat.End vote
+
+ streamChat.After a poll is closed, no more votes can be cast +
+ +
+ + +
+
+
+
diff --git a/projects/stream-chat-angular/src/lib/polls/poll-actions/poll-actions.component.ts b/projects/stream-chat-angular/src/lib/polls/poll-actions/poll-actions.component.ts new file mode 100644 index 00000000..f1bb9c65 --- /dev/null +++ b/projects/stream-chat-angular/src/lib/polls/poll-actions/poll-actions.component.ts @@ -0,0 +1,154 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + Input, + TemplateRef, + ViewChild, +} from '@angular/core'; +import { BasePollComponent } from '../base-poll.component'; +import { Poll, PollAnswer, PollOption } from 'stream-chat'; +import { ModalContext } from '../../types'; +import { CustomTemplatesService } from '../../custom-templates.service'; +import { ChatClientService } from '../../chat-client.service'; +import { ChannelService } from '../../channel.service'; +import { MessageActionsService } from '../../message-actions.service'; +import { NotificationService } from '../../notification.service'; + +type Action = + | 'allOptions' + | 'suggestOption' + | 'addAnswer' + | 'viewComments' + | 'viewResults' + | 'endVote'; + +/** + * + */ +@Component({ + selector: 'stream-poll-actions', + templateUrl: './poll-actions.component.html', + styles: [], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class PollActionsComponent extends BasePollComponent { + /** + * If there are more options than this number, the "See all options" button will be displayed + */ + @Input() maxOptionsDisplayed: number | undefined = 10; + /** + * The maximum number of options allowed for the poll, this is defined by Stream API + */ + @Input() maxPollOptions = 100; + name = ''; + options: PollOption[] = []; + isClosed = false; + allowUserSuggestions = false; + allowAnswers = false; + answerCount = 0; + isOwnPoll = false; + ownAnwer: PollAnswer | undefined; + selectedAction: Action | undefined = undefined; + isModalOpen = false; + @ViewChild('allOptions') allOptions!: TemplateRef; + @ViewChild('suggestOption') suggestOption!: TemplateRef; + @ViewChild('addAnswer') addAnswer!: TemplateRef; + @ViewChild('viewComments') viewComments!: TemplateRef; + @ViewChild('viewResults') viewResults!: TemplateRef; + @ViewChild('endVote') endVote!: TemplateRef; + + constructor( + customTemplatesService: CustomTemplatesService, + chatClientService: ChatClientService, + cdRef: ChangeDetectorRef, + channelService: ChannelService, + notificationService: NotificationService, + private messageService: MessageActionsService + ) { + super( + customTemplatesService, + chatClientService, + cdRef, + channelService, + notificationService + ); + } + + protected stateStoreSelector( + poll: Poll, + markForCheck: () => void + ): () => void { + const unsubscribe = poll.state.subscribeWithSelector( + (state) => ({ + options: state.options, + is_closed: state.is_closed, + allow_user_suggested_options: state.allow_user_suggested_options, + allow_answers: state.allow_answers, + answer_count: state.answers_count, + created_by: state.created_by, + name: state.name, + own_answer: state.ownAnswer, + max_votes_allowed: state.max_votes_allowed, + own_votes_by_option_id: state.ownVotesByOptionId, + }), + (state) => { + this.options = state.options; + this.isClosed = state.is_closed ?? false; + this.allowUserSuggestions = state.allow_user_suggested_options ?? false; + this.allowAnswers = state.allow_answers ?? false; + this.answerCount = state.answer_count ?? 0; + this.isOwnPoll = state.created_by?.id === this.currentUser?.id; + this.name = state.name; + this.ownAnwer = state.own_answer ?? undefined; + markForCheck(); + } + ); + + return unsubscribe; + } + + modalOpened = (action: Action) => { + this.selectedAction = action; + if (!this.isModalOpen) { + this.isModalOpen = true; + this.messageService.modalOpenedForMessage.next(this.messageId); + } + }; + + modalClosed = () => { + this.selectedAction = undefined; + if (this.isModalOpen) { + this.isModalOpen = false; + this.messageService.modalOpenedForMessage.next(undefined); + this.markForCheck(); + } + }; + + async closePoll() { + try { + await this.poll?.close(); + this.modalClosed(); + this.markForCheck(); + } catch (error) { + this.notificationService.addTemporaryNotification( + 'streamChat.Failed to end vote' + ); + throw error; + } + } + + getModalContext(): ModalContext { + return { + isOpen: this.isModalOpen, + isOpenChangeHandler: (isOpen: boolean) => { + if (isOpen) { + this.modalOpened(this.selectedAction!); + } else { + this.modalClosed(); + } + }, + content: this[this.selectedAction!], + }; + } +} diff --git a/projects/stream-chat-angular/src/lib/polls/poll-actions/poll-answers-list/poll-answers-list.component.html b/projects/stream-chat-angular/src/lib/polls/poll-actions/poll-answers-list/poll-answers-list.component.html new file mode 100644 index 00000000..3b06069d --- /dev/null +++ b/projects/stream-chat-angular/src/lib/polls/poll-actions/poll-answers-list/poll-answers-list.component.html @@ -0,0 +1,40 @@ +
+
+
+ streamChat.Poll comments +
+
+
+
+ + +
+

+ {{ answer.answer_text }} +

+ +
+
+
+ +
+
+
diff --git a/projects/stream-chat-angular/src/lib/polls/poll-actions/poll-answers-list/poll-answers-list.component.ts b/projects/stream-chat-angular/src/lib/polls/poll-actions/poll-answers-list/poll-answers-list.component.ts new file mode 100644 index 00000000..b69ea266 --- /dev/null +++ b/projects/stream-chat-angular/src/lib/polls/poll-actions/poll-answers-list/poll-answers-list.component.ts @@ -0,0 +1,95 @@ +import { + ChangeDetectionStrategy, + Component, + EventEmitter, + HostBinding, + OnChanges, + Output, + SimpleChanges, +} from '@angular/core'; +import { BasePollComponent } from '../../base-poll.component'; +import { Poll, PollAnswer } from 'stream-chat'; + +/** + * + */ +@Component({ + selector: 'stream-poll-answers-list', + templateUrl: './poll-answers-list.component.html', + styles: [], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class PollAnswersListComponent + extends BasePollComponent + implements OnChanges +{ + @HostBinding('class') class = 'str-chat__modal__poll-answer-list'; + /** + * The even that's emitted when the update/add comment button is clicked + */ + @Output() upsertOwnAnswer = new EventEmitter(); + isLoading = false; + next?: string | undefined; + answers: PollAnswer[] = []; + isClosed = false; + ownAnswer: PollAnswer | undefined; + + ngOnChanges(changes: SimpleChanges): void { + super.ngOnChanges(changes); + if (changes['pollId']) { + void this.queryAnswers(); + } + } + + async queryAnswers() { + if (!this.poll) { + return; + } + try { + this.isLoading = true; + const response = await this.poll.queryAnswers({ + filter: {}, + sort: { created_at: -1 }, + options: { + next: this.next, + }, + }); + + this.next = response.next; + this.answers = [...this.answers, ...response.votes]; + this.markForCheck(); + } catch (error) { + this.notificationService.addTemporaryNotification( + 'streamChat.Error loading answers' + ); + this.markForCheck(); + throw error; + } finally { + this.isLoading = false; + this.markForCheck(); + } + } + + trackByAnswerId(_: number, answer: PollAnswer) { + return answer.id; + } + + protected stateStoreSelector( + poll: Poll, + markForCheck: () => void + ): () => void { + const unsubscribe = poll.state.subscribeWithSelector( + (state) => ({ + is_closed: state.is_closed, + own_answer: state.ownAnswer, + }), + (state) => { + this.isClosed = state.is_closed ?? false; + this.ownAnswer = state.own_answer ?? undefined; + markForCheck(); + } + ); + + return unsubscribe; + } +} diff --git a/projects/stream-chat-angular/src/lib/polls/poll-actions/poll-results/poll-results-list/poll-results-list.component.html b/projects/stream-chat-angular/src/lib/polls/poll-actions/poll-results/poll-results-list/poll-results-list.component.html new file mode 100644 index 00000000..2ea49f22 --- /dev/null +++ b/projects/stream-chat-angular/src/lib/polls/poll-actions/poll-results/poll-results-list/poll-results-list.component.html @@ -0,0 +1,76 @@ +
+
+ + +
+ streamChat.Poll results +
+
+ +
+ +
+
+ +
+
{{ name }}
+
+
+
+
+ {{ option.text }} +
+
+
+ + {{ 'streamChat.{{ count }} votes' | translate:{count: + voteCountsByOption[option.id] ?? 0} }} + +
+
+ +
+ + + +
+
+ +
+
+
+
+
diff --git a/projects/stream-chat-angular/src/lib/polls/poll-actions/poll-results/poll-results-list/poll-results-list.component.ts b/projects/stream-chat-angular/src/lib/polls/poll-actions/poll-results/poll-results-list/poll-results-list.component.ts new file mode 100644 index 00000000..223a2cbf --- /dev/null +++ b/projects/stream-chat-angular/src/lib/polls/poll-actions/poll-results/poll-results-list/poll-results-list.component.ts @@ -0,0 +1,69 @@ +import { ChangeDetectionStrategy, Component, HostBinding } from '@angular/core'; +import { BasePollComponent } from '../../../base-poll.component'; +import { Poll, PollOption, PollVote } from 'stream-chat'; + +/** + * + */ +@Component({ + selector: 'stream-poll-results-list', + templateUrl: './poll-results-list.component.html', + styles: [], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class PollResultsListComponent extends BasePollComponent { + @HostBinding('class') class = 'str-chat__modal__poll-results'; + name = ''; + options: PollOption[] = []; + optionToView: PollOption | undefined; + votePreviewCount = 5; + maxVotedOptionIds: string[] = []; + voteCountsByOption: Record = {}; + latestVotesByOption: Record = {}; + + protected stateStoreSelector( + poll: Poll, + markForCheck: () => void + ): () => void { + const unsubscribe = poll.state.subscribeWithSelector( + (state) => ({ + name: state.name, + options: state.options, + maxVotedOptionIds: state.maxVotedOptionIds, + vote_counts_by_option: state.vote_counts_by_option, + latest_votes_by_option: state.latest_votes_by_option, + }), + (state) => { + this.name = state.name; + this.options = [...state.options]; + this.options.sort((a, b) => { + return ( + (state.vote_counts_by_option[b.id] ?? 0) - + (state.vote_counts_by_option[a.id] ?? 0) + ); + }); + this.maxVotedOptionIds = state.maxVotedOptionIds; + this.voteCountsByOption = state.vote_counts_by_option; + this.latestVotesByOption = state.latest_votes_by_option; + markForCheck(); + } + ); + + return unsubscribe; + } + + isWinner(optionId: string) { + return ( + this.maxVotedOptionIds.length === 1 && + this.maxVotedOptionIds[0] === optionId + ); + } + + trackByOptionId(_: number, option: PollOption) { + return option.id; + } + + trackByVoteId(_: number, vote: PollVote) { + return vote.id; + } +} diff --git a/projects/stream-chat-angular/src/lib/polls/poll-actions/poll-results/poll-vote-results-list/poll-vote-results-list.component.html b/projects/stream-chat-angular/src/lib/polls/poll-actions/poll-results/poll-vote-results-list/poll-vote-results-list.component.html new file mode 100644 index 00000000..19786a58 --- /dev/null +++ b/projects/stream-chat-angular/src/lib/polls/poll-actions/poll-results/poll-vote-results-list/poll-vote-results-list.component.html @@ -0,0 +1,26 @@ +
+
+
{{ option?.text }}
+
+
+ + {{ 'streamChat.{{ count }} votes' | translate:{count: voteCount ?? 0} }} + +
+
+ + + + + +
diff --git a/projects/stream-chat-angular/src/lib/polls/poll-actions/poll-results/poll-vote-results-list/poll-vote-results-list.component.ts b/projects/stream-chat-angular/src/lib/polls/poll-actions/poll-results/poll-vote-results-list/poll-vote-results-list.component.ts new file mode 100644 index 00000000..bf7a2340 --- /dev/null +++ b/projects/stream-chat-angular/src/lib/polls/poll-actions/poll-results/poll-vote-results-list/poll-vote-results-list.component.ts @@ -0,0 +1,99 @@ +import { + ChangeDetectionStrategy, + Component, + Input, + OnChanges, + SimpleChanges, +} from '@angular/core'; +import { BasePollComponent } from '../../../base-poll.component'; +import { Poll, PollOption, PollVote } from 'stream-chat'; + +/** + * + */ +@Component({ + selector: 'stream-poll-vote-results-list', + templateUrl: './poll-vote-results-list.component.html', + styles: [], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class PollVoteResultsListComponent + extends BasePollComponent + implements OnChanges +{ + /** + * The poll option to display the votes for + */ + @Input() option: PollOption | undefined; + isWinner = false; + voteCount = 0; + isLoading = false; + next?: string | undefined; + votes: PollVote[] = []; + + ngOnChanges(changes: SimpleChanges): void { + super.ngOnChanges(changes); + if (changes['option']) { + this.setupStateStoreSelector(); + this.next = undefined; + this.votes = []; + void this.loadVotes(); + } + } + + async loadVotes() { + if (!this.poll) { + return; + } + try { + this.isLoading = true; + const response = await this.poll.queryOptionVotes({ + filter: { + option_id: this.option?.id ?? '', + }, + sort: { created_at: -1 }, + options: { + next: this.next, + }, + }); + + this.next = response.next; + this.votes = [...this.votes, ...response.votes]; + this.markForCheck(); + } catch (error) { + this.notificationService.addTemporaryNotification( + 'streamChat.Error loading votes' + ); + throw error; + this.markForCheck(); + } finally { + this.isLoading = false; + this.markForCheck(); + } + } + + trackByVoteId = (_: number, vote: PollVote) => { + return vote.id; + }; + + protected stateStoreSelector( + poll: Poll, + markForCheck: () => void + ): () => void { + const subscribe = poll.state.subscribeWithSelector( + (state) => ({ + voteCount: state.vote_counts_by_option[this.option?.id ?? ''], + maxVotedOptionIds: state.maxVotedOptionIds, + }), + (state) => { + this.isWinner = + state.maxVotedOptionIds?.includes(this.option?.id ?? '') && + state.maxVotedOptionIds.length === 1; + this.voteCount = state.voteCount ?? 0; + markForCheck(); + } + ); + + return subscribe; + } +} diff --git a/projects/stream-chat-angular/src/lib/polls/poll-actions/poll-results/poll-vote/poll-vote.component.html b/projects/stream-chat-angular/src/lib/polls/poll-actions/poll-results/poll-vote/poll-vote.component.html new file mode 100644 index 00000000..bc9a9c7c --- /dev/null +++ b/projects/stream-chat-angular/src/lib/polls/poll-actions/poll-results/poll-vote/poll-vote.component.html @@ -0,0 +1,17 @@ +
+
+ +
+ {{ vote?.user?.name ?? anonymousTranslation }} +
+
+
+ {{ parseDate(vote!.created_at) }} +
+
diff --git a/projects/stream-chat-angular/src/lib/polls/poll-actions/poll-results/poll-vote/poll-vote.component.ts b/projects/stream-chat-angular/src/lib/polls/poll-actions/poll-results/poll-vote/poll-vote.component.ts new file mode 100644 index 00000000..99bf977d --- /dev/null +++ b/projects/stream-chat-angular/src/lib/polls/poll-actions/poll-results/poll-vote/poll-vote.component.ts @@ -0,0 +1,36 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; +import { TranslateService } from '@ngx-translate/core'; +import { PollAnswer, PollVote } from 'stream-chat'; +import { DateParserService } from '../../../../date-parser.service'; + +/** + * + */ +@Component({ + selector: 'stream-poll-vote', + templateUrl: './poll-vote.component.html', + styles: [], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class PollVoteComponent { + /** + * The poll vote or answer to display + */ + @Input() vote: PollVote | PollAnswer | undefined; + anonymousTranslation = 'Anonymous'; + + constructor( + private translateService: TranslateService, + private dateParser: DateParserService + ) { + this.translateService + .get('streamChat.Anonymous') + .subscribe((translation: string) => { + this.anonymousTranslation = translation; + }); + } + + parseDate(date: string) { + return this.dateParser.parseDateTime(new Date(date)); + } +} diff --git a/projects/stream-chat-angular/src/lib/polls/poll-actions/upsert-answer/upsert-answer.component.html b/projects/stream-chat-angular/src/lib/polls/poll-actions/upsert-answer/upsert-answer.component.html new file mode 100644 index 00000000..e1c97008 --- /dev/null +++ b/projects/stream-chat-angular/src/lib/polls/poll-actions/upsert-answer/upsert-answer.component.html @@ -0,0 +1,34 @@ +
+
+
+ {{ + (answer ? "streamChat.Update your comment" : "streamChat.Add a comment") + | translate + }} +
+
+
+ +
+
+ + +
+
+
+
diff --git a/projects/stream-chat-angular/src/lib/polls/poll-actions/upsert-answer/upsert-answer.component.ts b/projects/stream-chat-angular/src/lib/polls/poll-actions/upsert-answer/upsert-answer.component.ts new file mode 100644 index 00000000..f680b0e3 --- /dev/null +++ b/projects/stream-chat-angular/src/lib/polls/poll-actions/upsert-answer/upsert-answer.component.ts @@ -0,0 +1,66 @@ +import { + ChangeDetectionStrategy, + Component, + HostBinding, + Input, + OnChanges, + SimpleChanges, +} from '@angular/core'; +import { FormControl, FormGroup, Validators } from '@angular/forms'; +import { Poll, PollAnswer } from 'stream-chat'; +import { BasePollComponent } from '../../base-poll.component'; + +/** + * + */ +@Component({ + selector: 'stream-upsert-answer', + templateUrl: './upsert-answer.component.html', + styles: [], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class UpsertAnswerComponent + extends BasePollComponent + implements OnChanges +{ + @HostBinding('class') class = 'str-chat__dialog'; + /** + * The poll comment to edit, when in edit mode + */ + @Input() answer: PollAnswer | undefined; + /** + * The callback to close the modal the component is displayed in + */ + @Input() closeModal: () => void = () => {}; + formGroup = new FormGroup({ + comment: new FormControl('', [Validators.required]), + }); + + ngOnChanges(changes: SimpleChanges): void { + super.ngOnChanges(changes); + if (changes['answer']) { + this.formGroup.get('comment')?.setValue(this.answer?.answer_text ?? ''); + } + } + + async addComment() { + if (this.formGroup.invalid || !this.messageId) { + return; + } + try { + await this.poll?.addAnswer(this.formGroup.value.comment!, this.messageId); + this.closeModal(); + this.markForCheck(); + } catch (error) { + this.notificationService.addTemporaryNotification( + 'streamChat.Failed to add comment' + ); + this.markForCheck(); + throw error; + } + } + + protected stateStoreSelector(_: Poll, __: () => void): () => void { + return () => {}; + } +} diff --git a/projects/stream-chat-angular/src/lib/polls/poll-composer/poll-composer.component.html b/projects/stream-chat-angular/src/lib/polls/poll-composer/poll-composer.component.html new file mode 100644 index 00000000..887bb351 --- /dev/null +++ b/projects/stream-chat-angular/src/lib/polls/poll-composer/poll-composer.component.html @@ -0,0 +1,221 @@ + + + + + + + + + + +
+
+
+ {{ "streamChat.Create poll" | translate }} +
+
+
+
+
+ +
+
+ {{ + (formGroup.get("name")?.errors?.required && + formGroup.get("name")?.touched + ? "streamChat.Question is required" + : "" + ) | translate + }} +
+ +
+
+
+ + {{ "streamChat.Options" | translate }} + +
+ {{ + (formGroup.get("options")?.errors?.atLeastOne && + formGroup.get("options")?.touched + ? "streamChat.Provide at least one option" + : "" + ) | translate + }} +
+ +
+ + + +
+
+ +
+
+
+
+
+
+ +
+ +
+
+ {{ + (formGroup.get("maximum_number_of_votes")?.errors && + formGroup.get("maximum_number_of_votes")?.touched + ? "streamChat.Provide a value between {{ min }} + and {{ max }}" : "" ) | translate: { min: 2, max: 10 } }} +
+ +
+
+ + + +
+
+ +
+ + +
+
+
+ + +
+ +
+
diff --git a/projects/stream-chat-angular/src/lib/polls/poll-composer/poll-composer.component.ts b/projects/stream-chat-angular/src/lib/polls/poll-composer/poll-composer.component.ts new file mode 100644 index 00000000..c608a471 --- /dev/null +++ b/projects/stream-chat-angular/src/lib/polls/poll-composer/poll-composer.component.ts @@ -0,0 +1,150 @@ +import { + Component, + EventEmitter, + Output, + TemplateRef, + ViewChild, +} from '@angular/core'; +import { FormArray, FormControl, FormGroup, Validators } from '@angular/forms'; +import { VotingVisibility } from 'stream-chat'; +import { CustomTemplatesService } from '../../custom-templates.service'; +import { ModalContext } from '../../types'; +import { ChatClientService } from '../../chat-client.service'; +import { NotificationService } from '../../notification.service'; +import { atLeastOneOption, maximumNumberOfVotes } from './validators'; + +/** + * + */ +@Component({ + selector: 'stream-poll-composer', + templateUrl: './poll-composer.component.html', + styles: [], +}) +export class PollComposerComponent { + /** + * Emitted when a poll is created, the poll id is emitted + */ + @Output() pollCompose = new EventEmitter(); + /** + * Emitted when the poll composing is cancelled + */ + @Output() cancel = new EventEmitter(); + formGroup = new FormGroup({ + name: new FormControl('', [Validators.required]), + options: new FormArray>( + [new FormControl('')], + [atLeastOneOption()] + ), + multiple_answers: new FormControl(false), + maximum_number_of_votes: new FormControl(null, [ + Validators.min(2), + Validators.max(10), + ]), + is_anonymous: new FormControl(false), + allow_user_suggested_options: new FormControl(false), + allow_answers: new FormControl(false), + }); + isModalOpen = true; + @ViewChild('formContent') private formContent!: TemplateRef; + + constructor( + readonly customTemplatesService: CustomTemplatesService, + private chatService: ChatClientService, + private notificationService: NotificationService + ) { + this.formGroup + .get('maximum_number_of_votes') + ?.addValidators([ + maximumNumberOfVotes( + this.formGroup.get('multiple_answers') as FormControl + ), + ]); + this.formGroup.get('maximum_number_of_votes')?.disable(); + this.formGroup.valueChanges.subscribe((value) => { + if ( + value.multiple_answers && + this.formGroup.get('maximum_number_of_votes')?.disabled + ) { + this.formGroup.get('maximum_number_of_votes')?.enable(); + } else if ( + !value.multiple_answers && + this.formGroup.get('maximum_number_of_votes')?.enabled + ) { + this.formGroup.get('maximum_number_of_votes')?.disable(); + } + }); + } + + optionChanged(index: number) { + const control = this.options.at(index); + const penultimateIndex = this.options.length - 2; + if (index === this.options.length - 1 && control.value?.length === 1) { + this.addOption(); + } else if ( + index === penultimateIndex && + control.value?.length === 0 && + this.options.at(this.options.length - 1).value?.length === 0 + ) { + this.removeLastOption(); + } + } + + get options() { + return this.formGroup.get('options') as FormArray< + FormControl + >; + } + + addOption() { + const control = new FormControl('', []); + this.options.push(control); + } + + removeLastOption() { + this.options.removeAt(this.options.length - 1); + } + + getModalContext(): ModalContext { + return { + isOpen: this.isModalOpen, + isOpenChangeHandler: (isOpen: boolean) => { + if (!isOpen) { + this.cancel.emit(); + } + this.isModalOpen = isOpen; + }, + content: this.formContent, + }; + } + + async createPoll() { + try { + const maxVotesControl = this.formGroup.get('maximum_number_of_votes'); + const response = await this.chatService.chatClient.polls.createPoll({ + name: this.formGroup.get('name')!.value!, + options: this.formGroup + .get('options')! + .value.filter((v) => !!v) + .map((v) => ({ text: v! })), + enforce_unique_vote: !this.formGroup.get('multiple_answers')?.value, + max_votes_allowed: maxVotesControl?.value + ? +maxVotesControl.value + : undefined, + voting_visibility: this.formGroup.get('is_anonymous')?.value + ? VotingVisibility.anonymous + : VotingVisibility.public, + allow_user_suggested_options: !!this.formGroup.get( + 'allow_user_suggested_options' + )?.value, + allow_answers: !!this.formGroup.get('allow_answers')?.value, + }); + this.pollCompose.emit(response?.id); + } catch (error) { + this.notificationService.addTemporaryNotification( + 'streamChat.Failed to create poll' + ); + throw error; + } + } +} diff --git a/projects/stream-chat-angular/src/lib/polls/poll-composer/validators.ts b/projects/stream-chat-angular/src/lib/polls/poll-composer/validators.ts new file mode 100644 index 00000000..2669f320 --- /dev/null +++ b/projects/stream-chat-angular/src/lib/polls/poll-composer/validators.ts @@ -0,0 +1,27 @@ +import { + AbstractControl, + FormArray, + FormControl, + ValidatorFn, +} from '@angular/forms'; + +export function atLeastOneOption(): ValidatorFn { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + return (control: AbstractControl) => { + const formArray = control as FormArray>; + const hasAtLeastOne = formArray.value.some((item) => !!item); + return hasAtLeastOne ? null : { atLeastOne: true }; + }; +} + +export function maximumNumberOfVotes( + canHaveMultipleVotes: FormControl +): ValidatorFn { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + return (control: AbstractControl) => { + const formControl = control as FormControl; + return canHaveMultipleVotes.value && !formControl.value + ? { maximumNumberOfVotes: true } + : null; + }; +} diff --git a/projects/stream-chat-angular/src/lib/polls/poll-header/poll-header.component.html b/projects/stream-chat-angular/src/lib/polls/poll-header/poll-header.component.html new file mode 100644 index 00000000..c1f2196c --- /dev/null +++ b/projects/stream-chat-angular/src/lib/polls/poll-header/poll-header.component.html @@ -0,0 +1,6 @@ +
+
{{ name }}
+
+ {{ selectionInstructions.text | translate : selectionInstructions }} +
+
diff --git a/projects/stream-chat-angular/src/lib/polls/poll-header/poll-header.component.ts b/projects/stream-chat-angular/src/lib/polls/poll-header/poll-header.component.ts new file mode 100644 index 00000000..0982b830 --- /dev/null +++ b/projects/stream-chat-angular/src/lib/polls/poll-header/poll-header.component.ts @@ -0,0 +1,100 @@ +import { Component, ChangeDetectionStrategy } from '@angular/core'; +import { Poll, PollState } from 'stream-chat'; +import { BasePollComponent } from '../base-poll.component'; + +type SelectionInstructions = { + text: string; + count: number | undefined; +}; + +/** + * + */ +@Component({ + selector: 'stream-poll-header', + templateUrl: './poll-header.component.html', + styles: [], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class PollHeaderComponent extends BasePollComponent { + name = ''; + selectionInstructions: SelectionInstructions = { + text: '', + count: undefined, + }; + + protected stateStoreSelector( + poll: Poll, + markForCheck: () => void + ): () => void { + const unsubscribe = poll.state.subscribeWithSelector( + (state) => ({ + name: state.name, + is_closed: state.is_closed, + enforce_unique_vote: state.enforce_unique_vote, + max_votes_allowed: state.max_votes_allowed, + options: state.options, + }), + (state) => { + const name = state.name; + const selectionInstructions = this.getSelectionInstructions(state); + + let changed = false; + if (name !== this.name) { + this.name = name; + changed = true; + } + if ( + selectionInstructions.text !== this.selectionInstructions.text || + selectionInstructions.count !== this.selectionInstructions.count + ) { + this.selectionInstructions = selectionInstructions; + changed = true; + } + + if (changed) { + markForCheck(); + } + } + ); + + return unsubscribe; + } + + getSelectionInstructions( + state: Pick< + PollState, + 'is_closed' | 'enforce_unique_vote' | 'max_votes_allowed' | 'options' + > + ): SelectionInstructions { + if (state.is_closed) + return { + text: 'streamChat.Vote ended', + count: undefined, + }; + if (state.enforce_unique_vote || state.options.length === 1) { + return { + text: 'streamChat.Select one', + count: undefined, + }; + } + if (state.max_votes_allowed) + return { + text: 'streamChat.Select up to {{count}}', + count: + state.max_votes_allowed > state.options.length + ? state.options.length + : state.max_votes_allowed, + }; + if (state.options.length > 1) { + return { + text: 'streamChat.Select one or more', + count: undefined, + }; + } + return { + text: '', + count: undefined, + }; + } +} diff --git a/projects/stream-chat-angular/src/lib/polls/poll-option-selector/poll-option-selector.component.html b/projects/stream-chat-angular/src/lib/polls/poll-option-selector/poll-option-selector.component.html new file mode 100644 index 00000000..02bee898 --- /dev/null +++ b/projects/stream-chat-angular/src/lib/polls/poll-option-selector/poll-option-selector.component.html @@ -0,0 +1,61 @@ +
+ + + +
+

{{ option?.text }}

+ +
+ +
+
+
+ + {{ 'streamChat.{{ count }} votes' | translate:{count: voteCount} }} + + + {{ voteCount }} + +
+
+ +
+ + +
+
+ + +
+
diff --git a/projects/stream-chat-angular/src/lib/polls/poll-option-selector/poll-option-selector.component.ts b/projects/stream-chat-angular/src/lib/polls/poll-option-selector/poll-option-selector.component.ts new file mode 100644 index 00000000..44f9cb23 --- /dev/null +++ b/projects/stream-chat-angular/src/lib/polls/poll-option-selector/poll-option-selector.component.ts @@ -0,0 +1,168 @@ +import { + ChangeDetectionStrategy, + Component, + Input, + OnChanges, + SimpleChanges, +} from '@angular/core'; +import { BasePollComponent } from '../base-poll.component'; +import { + isVoteAnswer, + Poll, + PollOption, + PollVote, + VotingVisibility, +} from 'stream-chat'; + +/** + * + */ +@Component({ + selector: 'stream-poll-option-selector', + templateUrl: './poll-option-selector.component.html', + styles: [], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class PollOptionSelectorComponent + extends BasePollComponent + implements OnChanges +{ + @Input() option: PollOption | undefined; + @Input() displayAvatarCount = 3; + @Input() voteCountVerbose = false; + isClosed = false; + latestVotes: PollVote[] = []; + isWinner = false; + ownVote: PollVote | undefined; + voteCount = 0; + votingVisibility: VotingVisibility | undefined; + winningOptionCount = 0; + maxVoteAllowedCount = 0; + ownVoteCount = 0; + + ngOnChanges(changes: SimpleChanges): void { + super.ngOnChanges(changes); + if (changes['option']) { + this.setupStateStoreSelector(); + } + } + + async toggleVote() { + if (!this.canVote || !this.option?.id || !this.messageId || this.isClosed) + return; + const haveVotedForTheOption = !!this.ownVote; + if ( + !haveVotedForTheOption && + this.maxVoteAllowedCount > 0 && + this.ownVoteCount >= this.maxVoteAllowedCount + ) { + this.addNotification( + 'streamChat.You have reached the maximum number of votes allowed' + ); + return; + } + try { + await (haveVotedForTheOption + ? this.poll?.removeVote(this.ownVote!.id, this.messageId) + : this.poll?.castVote(this.option?.id, this.messageId)); + } catch (error) { + this.notificationService.addTemporaryNotification( + 'streamChat.Failed to cast vote' + ); + throw error; + } + } + + trackByVoteId(_: number, vote: PollVote) { + return vote.id; + } + + protected stateStoreSelector( + poll: Poll, + markForCheck: () => void + ): () => void { + const unsubscribe = poll.state.subscribeWithSelector( + (nextValue) => { + return { + is_closed: nextValue.is_closed, + latest_votes_by_option: nextValue.latest_votes_by_option, + maxVotedOptionIds: nextValue.maxVotedOptionIds, + ownVotesByOptionId: nextValue.ownVotesByOptionId, + vote_counts_by_option: nextValue.vote_counts_by_option, + voting_visibility: nextValue.voting_visibility, + max_votes_allowed: nextValue.max_votes_allowed, + }; + }, + (state) => { + const isClosed = state.is_closed; + const latestVotes = + state.latest_votes_by_option[this.option?.id ?? '']?.filter( + (vote) => !!vote.user && !isVoteAnswer(vote) + ) ?? []; + const isWinner = + state.maxVotedOptionIds.includes(this.option?.id ?? '') && + state.maxVotedOptionIds.length === 1; + const ownVote = state.ownVotesByOptionId[this.option?.id ?? '']; + const voteCount = state.vote_counts_by_option[this.option?.id ?? '']; + const votingVisibility = state.voting_visibility; + const winningOptionCount = + state.vote_counts_by_option[state.maxVotedOptionIds?.[0] ?? '']; + const maxVoteAllowedCount = state.max_votes_allowed; + const ownVoteCount = Object.keys(state.ownVotesByOptionId).length; + + let changed = false; + if (isClosed !== this.isClosed) { + this.isClosed = isClosed ?? false; + changed = true; + } + if (latestVotes !== this.latestVotes) { + this.latestVotes = latestVotes ?? []; + changed = true; + } + if (isWinner !== this.isWinner) { + this.isWinner = isWinner ?? false; + changed = true; + } + if (ownVote !== this.ownVote) { + this.ownVote = ownVote ?? undefined; + changed = true; + } + if (voteCount !== this.voteCount) { + this.voteCount = voteCount ?? 0; + changed = true; + } + if (votingVisibility !== this.votingVisibility) { + this.votingVisibility = votingVisibility ?? undefined; + changed = true; + } + if (winningOptionCount !== this.winningOptionCount) { + this.winningOptionCount = winningOptionCount ?? 0; + changed = true; + } + if (maxVoteAllowedCount !== this.maxVoteAllowedCount) { + this.maxVoteAllowedCount = maxVoteAllowedCount ?? 0; + changed = true; + } + if (ownVoteCount !== this.ownVoteCount) { + this.ownVoteCount = ownVoteCount ?? 0; + changed = true; + } + + if ( + this.dismissNotificationFn && + this.maxVoteAllowedCount > 0 && + this.ownVoteCount <= this.maxVoteAllowedCount + ) { + this.dismissNotificationFn(); + changed = true; + } + + if (changed) { + markForCheck(); + } + } + ); + + return unsubscribe; + } +} diff --git a/projects/stream-chat-angular/src/lib/polls/poll-options-list/poll-options-list.component.html b/projects/stream-chat-angular/src/lib/polls/poll-options-list/poll-options-list.component.html new file mode 100644 index 00000000..aa5786af --- /dev/null +++ b/projects/stream-chat-angular/src/lib/polls/poll-options-list/poll-options-list.component.html @@ -0,0 +1,19 @@ +
+ + + +
diff --git a/projects/stream-chat-angular/src/lib/polls/poll-options-list/poll-options-list.component.ts b/projects/stream-chat-angular/src/lib/polls/poll-options-list/poll-options-list.component.ts new file mode 100644 index 00000000..055b3f5e --- /dev/null +++ b/projects/stream-chat-angular/src/lib/polls/poll-options-list/poll-options-list.component.ts @@ -0,0 +1,41 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; +import { BasePollComponent } from '../base-poll.component'; +import { Poll, PollOption } from 'stream-chat'; + +/** + * + */ +@Component({ + selector: 'stream-poll-options-list', + templateUrl: './poll-options-list.component.html', + styles: [], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class PollOptionsListComponent extends BasePollComponent { + /** + * How many options should be displayed. If there are more options than this number, use the poll actions to display all options + */ + @Input() maxOptionsDisplayed: number | undefined = 10; + options: PollOption[] = []; + + protected stateStoreSelector( + poll: Poll, + markForCheck: () => void + ): () => void { + const unsubscribe = poll.state.subscribeWithSelector( + (state) => ({ + options: state.options, + }), + (state) => { + this.options = state.options; + markForCheck(); + } + ); + + return unsubscribe; + } + + trackByOptionId(_: number, option: PollOption) { + return option.id; + } +} diff --git a/projects/stream-chat-angular/src/lib/polls/poll-preview/poll-preview.component.html b/projects/stream-chat-angular/src/lib/polls/poll-preview/poll-preview.component.html new file mode 100644 index 00000000..1e0b6a82 --- /dev/null +++ b/projects/stream-chat-angular/src/lib/polls/poll-preview/poll-preview.component.html @@ -0,0 +1,7 @@ +
+
📊
+
{{ name }}
+
diff --git a/projects/stream-chat-angular/src/lib/polls/poll-preview/poll-preview.component.ts b/projects/stream-chat-angular/src/lib/polls/poll-preview/poll-preview.component.ts new file mode 100644 index 00000000..f080eec2 --- /dev/null +++ b/projects/stream-chat-angular/src/lib/polls/poll-preview/poll-preview.component.ts @@ -0,0 +1,36 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; +import { BasePollComponent } from '../base-poll.component'; +import { Poll } from 'stream-chat'; + +/** + * + */ +@Component({ + selector: 'stream-poll-preview', + templateUrl: './poll-preview.component.html', + styles: [], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class PollPreviewComponent extends BasePollComponent { + name = ''; + isClosed = false; + + protected stateStoreSelector( + poll: Poll, + markForCheck: () => void + ): () => void { + const unsubscribe = poll.state.subscribeWithSelector( + (state) => ({ + name: state.name, + is_closed: state.is_closed, + }), + (state) => { + this.name = state.name; + this.isClosed = state.is_closed ?? false; + markForCheck(); + } + ); + + return unsubscribe; + } +} diff --git a/projects/stream-chat-angular/src/lib/polls/poll/poll.component.html b/projects/stream-chat-angular/src/lib/polls/poll/poll.component.html new file mode 100644 index 00000000..23137ce2 --- /dev/null +++ b/projects/stream-chat-angular/src/lib/polls/poll/poll.component.html @@ -0,0 +1,17 @@ +
+
+ + + + +
+ + + + +
+ + + + +
diff --git a/projects/stream-chat-angular/src/lib/polls/poll/poll.component.ts b/projects/stream-chat-angular/src/lib/polls/poll/poll.component.ts new file mode 100644 index 00000000..71b5cf56 --- /dev/null +++ b/projects/stream-chat-angular/src/lib/polls/poll/poll.component.ts @@ -0,0 +1,35 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; +import { BasePollComponent } from '../base-poll.component'; +import { Poll } from 'stream-chat'; + +/** + * + */ +@Component({ + selector: 'stream-poll', + templateUrl: './poll.component.html', + styles: [], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class PollComponent extends BasePollComponent { + isClosed = false; + + protected stateStoreSelector( + poll: Poll, + markForCheck: () => void + ): () => void { + const unsubscribe = poll.state.subscribeWithSelector( + (state) => { + return { + is_closed: state.is_closed, + }; + }, + (state) => { + this.isClosed = state.is_closed ?? false; + markForCheck(); + } + ); + + return unsubscribe; + } +} diff --git a/projects/stream-chat-angular/src/lib/polls/stream-polls.module.ts b/projects/stream-chat-angular/src/lib/polls/stream-polls.module.ts new file mode 100644 index 00000000..9c627169 --- /dev/null +++ b/projects/stream-chat-angular/src/lib/polls/stream-polls.module.ts @@ -0,0 +1,64 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { PollComposerComponent } from './poll-composer/poll-composer.component'; +import { PollComponent } from './poll/poll.component'; +import { PollHeaderComponent } from './poll-header/poll-header.component'; +import { TranslateModule } from '@ngx-translate/core'; +import { PollOptionsListComponent } from './poll-options-list/poll-options-list.component'; +import { PollOptionSelectorComponent } from './poll-option-selector/poll-option-selector.component'; +import { StreamAvatarModule } from '../stream-avatar.module'; +import { PollActionsComponent } from './poll-actions/poll-actions.component'; +import { StreamModalModule } from '../modal/stream-modal.module'; +import { StreamNotificationModule } from '../notification-list/stream-notification.module'; +import { StreamPaginatedListModule } from '../paginated-list/stream-paginated-list.module'; +import { PollVoteComponent } from './poll-actions/poll-results/poll-vote/poll-vote.component'; +import { PollAnswersListComponent } from './poll-actions/poll-answers-list/poll-answers-list.component'; +import { PollVoteResultsListComponent } from './poll-actions/poll-results/poll-vote-results-list/poll-vote-results-list.component'; +import { PollResultsListComponent } from './poll-actions/poll-results/poll-results-list/poll-results-list.component'; +import { UpsertAnswerComponent } from './poll-actions/upsert-answer/upsert-answer.component'; +import { AddOptionComponent } from './poll-actions/add-option/add-option.component'; +import { ReactiveFormsModule } from '@angular/forms'; +import { PollPreviewComponent } from './poll-preview/poll-preview.component'; + +@NgModule({ + declarations: [ + PollComposerComponent, + PollComponent, + PollHeaderComponent, + PollOptionsListComponent, + PollOptionSelectorComponent, + PollActionsComponent, + PollResultsListComponent, + PollVoteResultsListComponent, + PollVoteComponent, + PollAnswersListComponent, + UpsertAnswerComponent, + AddOptionComponent, + PollPreviewComponent, + ], + imports: [ + CommonModule, + TranslateModule, + StreamAvatarModule, + StreamModalModule, + StreamNotificationModule, + StreamPaginatedListModule, + ReactiveFormsModule, + ], + exports: [ + PollComposerComponent, + PollComponent, + PollHeaderComponent, + PollOptionsListComponent, + PollOptionSelectorComponent, + PollActionsComponent, + PollResultsListComponent, + PollVoteResultsListComponent, + PollVoteComponent, + PollAnswersListComponent, + UpsertAnswerComponent, + AddOptionComponent, + PollPreviewComponent, + ], +}) +export class StreamPollsModule {} diff --git a/projects/stream-chat-angular/src/lib/polls/unique.validator.ts b/projects/stream-chat-angular/src/lib/polls/unique.validator.ts new file mode 100644 index 00000000..735eb984 --- /dev/null +++ b/projects/stream-chat-angular/src/lib/polls/unique.validator.ts @@ -0,0 +1,19 @@ +import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms'; + +export function createUniqueValidator( + isUnique: (v: string) => boolean +): ValidatorFn { + return (control: AbstractControl): ValidationErrors | null => { + const value = control.value; + + if (!value) { + return null; + } + + if (!isUnique(value)) { + return { duplicate: true }; + } + + return null; + }; +} diff --git a/projects/stream-chat-angular/src/lib/stream-chat.module.ts b/projects/stream-chat-angular/src/lib/stream-chat.module.ts index 79baa6bb..305612ae 100644 --- a/projects/stream-chat-angular/src/lib/stream-chat.module.ts +++ b/projects/stream-chat-angular/src/lib/stream-chat.module.ts @@ -13,7 +13,6 @@ import { MessageReactionsComponent } from './message-reactions/message-reactions import { NotificationComponent } from './notification/notification.component'; import { NotificationListComponent } from './notification-list/notification-list.component'; import { AttachmentPreviewListComponent } from './attachment-preview-list/attachment-preview-list.component'; -import { ModalComponent } from './modal/modal.component'; import { TextareaDirective } from './message-input/textarea.directive'; import { StreamAvatarModule } from './stream-avatar.module'; import { ThreadComponent } from './thread/thread.component'; @@ -21,13 +20,15 @@ import { MessageBouncePromptComponent } from './message-bounce-prompt/message-bo import { NgxFloatUiModule } from 'ngx-float-ui'; import { TranslateModule } from '@ngx-translate/core'; import { MessageReactionsSelectorComponent } from './message-reactions-selector/message-reactions-selector.component'; -import { PaginatedListComponent } from './paginated-list/paginated-list.component'; import { UserListComponent } from './user-list/user-list.component'; import { VoiceRecordingModule } from './voice-recording/voice-recording.module'; import { IconModule } from './icon/icon.module'; import { VoiceRecorderService } from './message-input/voice-recorder.service'; import { MessageTextComponent } from './message-text/message-text.component'; import { MessageBlockedComponent } from './message-blocked/message-blocked.component'; +import { StreamModalModule } from './modal/stream-modal.module'; +import { StreamNotificationModule } from './notification-list/stream-notification.module'; +import { StreamPaginatedListModule } from './paginated-list/stream-paginated-list.module'; @NgModule({ declarations: [ @@ -41,16 +42,12 @@ import { MessageBlockedComponent } from './message-blocked/message-blocked.compo MessageActionsBoxComponent, AttachmentListComponent, MessageReactionsComponent, - NotificationComponent, - NotificationListComponent, AttachmentPreviewListComponent, - ModalComponent, TextareaDirective, ThreadComponent, MessageBouncePromptComponent, MessageReactionsSelectorComponent, UserListComponent, - PaginatedListComponent, MessageTextComponent, MessageBlockedComponent, ], @@ -61,6 +58,9 @@ import { MessageBlockedComponent } from './message-blocked/message-blocked.compo TranslateModule, VoiceRecordingModule, IconModule, + StreamModalModule, + StreamNotificationModule, + StreamPaginatedListModule, ], exports: [ ChannelComponent, @@ -76,17 +76,18 @@ import { MessageBlockedComponent } from './message-blocked/message-blocked.compo NotificationComponent, NotificationListComponent, AttachmentPreviewListComponent, - ModalComponent, + StreamModalModule, StreamAvatarModule, ThreadComponent, MessageBouncePromptComponent, VoiceRecordingModule, MessageReactionsSelectorComponent, UserListComponent, - PaginatedListComponent, + StreamPaginatedListModule, IconModule, MessageTextComponent, MessageBlockedComponent, + StreamNotificationModule, ], providers: [VoiceRecorderService], }) diff --git a/projects/stream-chat-angular/src/lib/types.ts b/projects/stream-chat-angular/src/lib/types.ts index a5f49810..f7d8e94d 100644 --- a/projects/stream-chat-angular/src/lib/types.ts +++ b/projects/stream-chat-angular/src/lib/types.ts @@ -152,6 +152,7 @@ export type AvatarLocation = | 'quoted-message-sender' | 'autocomplete-item' | 'typing-indicator' + | 'poll-voter' /** * @deprecated this will be renamed to user-list in the next major release */ @@ -353,6 +354,7 @@ export type MessageInput = { parentId: string | undefined; quotedMessageId: string | undefined; customData: undefined | CustomMessageData; + pollId: string | undefined; }; export type OffsetNextPageConfiguration = { diff --git a/projects/stream-chat-angular/src/public-api.ts b/projects/stream-chat-angular/src/public-api.ts index 120b5ed1..8aaa1f7c 100644 --- a/projects/stream-chat-angular/src/public-api.ts +++ b/projects/stream-chat-angular/src/public-api.ts @@ -84,3 +84,20 @@ export * from './lib/format-duration'; export * from './lib/message-input/voice-recorder.service'; export * from './lib/voice-recorder/mp3-transcoder'; export * from './lib/message-text/message-text.component'; +export * from './lib/polls/stream-polls.module'; +export * from './lib/polls/poll-composer/poll-composer.component'; +export * from './lib/polls/poll/poll.component'; +export * from './lib/polls/poll-header/poll-header.component'; +export * from './lib/polls/poll-options-list/poll-options-list.component'; +export * from './lib/polls/poll-option-selector/poll-option-selector.component'; +export * from './lib/polls/poll-actions/poll-actions.component'; +export * from './lib/modal/stream-modal.module'; +export * from './lib/notification-list/stream-notification.module'; +export * from './lib/polls/poll-actions/poll-results/poll-results-list/poll-results-list.component'; +export * from './lib/polls/poll-actions/poll-results/poll-vote-results-list/poll-vote-results-list.component'; +export * from './lib/paginated-list/stream-paginated-list.module'; +export * from './lib/polls/poll-actions/poll-results/poll-vote/poll-vote.component'; +export * from './lib/polls/poll-actions/poll-answers-list/poll-answers-list.component'; +export * from './lib/polls/poll-actions/upsert-answer/upsert-answer.component'; +export * from './lib/polls/poll-actions/add-option/add-option.component'; +export * from './lib/polls/poll-preview/poll-preview.component';