diff --git a/package.json b/package.json
index c228ef7..1859f48 100644
--- a/package.json
+++ b/package.json
@@ -30,6 +30,9 @@
"file-saver": "^2.0.5",
"formik": "^2.2.6",
"javascript-stringify": "^2.1.0",
+ "js-base64": "^3.7.5",
+ "json-url": "^3.1.0",
+ "jsoncrush": "1.1.6",
"ka-table": "^7.1.3",
"litepicker": "^2.0.11",
"lodash.get": "^4.4.2",
diff --git a/src/components/VirtuosoDataGrid/DataGridToolbar.jsx b/src/components/VirtuosoDataGrid/DataGridToolbar.jsx
index a04cf15..5f58ca6 100644
--- a/src/components/VirtuosoDataGrid/DataGridToolbar.jsx
+++ b/src/components/VirtuosoDataGrid/DataGridToolbar.jsx
@@ -151,21 +151,15 @@ const DataGridToolbar = ({
const [dataGridState, dataGridDispatch] = useContext(DataGridContext);
- const [filterValues, setFilterValues] = useUrlState({ queryKey: `${gridId}-filters`, disable: !useUrlAsState });
const [filterDisplay, setFilterDisplay] = useState({});
-
- const [searchField, setSearchField] = useState("");
-
- useEffect(() => {
- setSearchField(filterValues?.search);
- }, [filterValues?.search]);
-
+
+
+ const [filterValues, setFilterValues] = useUrlState({ queryKey: `${gridId}-filters`, disable: !useUrlAsState });
const changeFilter = useCallback(
debounce((filterKey, filterValue) => {
const filterV = { ...filterValues, [filterKey]: filterValue }
setFilterValues(filterV);
- // setSearchField(filterV?.search ?? "")
onFilterChange(filterV)
}, 500),
[filterValues],
diff --git a/src/components/hooks/useUrlState.js b/src/components/hooks/useUrlState.js
index 7a51c82..3faa43e 100644
--- a/src/components/hooks/useUrlState.js
+++ b/src/components/hooks/useUrlState.js
@@ -1,10 +1,22 @@
-import React, { useCallback, useMemo, useRef, useState } from "react";
-
+import React, { useCallback, useEffect, useMemo, useRef, useState } from "react";
+import _JSONUrl from "json-url";
+import JSONCrush from "jsoncrush";
import moment from "moment";
+import { base64ArrayBuffer } from "../DocumentGallery/b64util";
+import { Base64 } from "js-base64";
+import isEmpty from "lodash.isempty";
-export function useUrlState({ queryKey, defaultValue, disable = false }) {
+const ENCODE_TYPES = {
+ crush: 'crush',
+ b64: 'b64',
+ lzma: 'lzma',
+}
+export function useUrlState({ queryKey, defaultValue, disable = false, encode = ENCODE_TYPES.crush }) {
+ const JSONUrl = _JSONUrl('lzma');
const [state, setState] = useState(defaultValue);
const ref = useRef(state);
+ const [url, setUrl] = useState('');
+ const [qsValue, setQsValue] = useState();
const setQueryString = useCallback((qsValue) => {
const newurl =
@@ -18,46 +30,131 @@ export function useUrlState({ queryKey, defaultValue, disable = false }) {
}
}, [disable]);
- const getQueryStringValue = useMemo(() => {
- const qs = new URLSearchParams(window.location.search);
- const pValue = qs.get(queryKey) || state || null
- let convertedValue = pValue;
- if (pValue) {
- try {
- convertedValue = JSON.parse(pValue);
- const calltype = Object.prototype.toString.call(convertedValue)
- if (calltype === '[object String]') {
+ const getQueryStringValue = useCallback(
+ async () => {
+ const qs = new URLSearchParams(window?.location?.search);
+ const pValue = qs.get(queryKey) || state || null
+ // const uncrush = JSONCrush.uncrush(decodeURIComponent(window?.location?.search))?.substring(1);
+
+ let convertedValue = '';
+ let getParam = ''
+ let uncrush = '';
+ if (pValue) {
+ try {
+ switch (encode) {
+ case ENCODE_TYPES.crush:
+ uncrush = JSONCrush.uncrush(decodeURIComponent(pValue))
+ break;
+ case ENCODE_TYPES.b64:
+ uncrush = Base64.decode(pValue)
+ break;
+ case ENCODE_TYPES.lzma:
+ uncrush = await JSONUrl.decompress(pValue)
+ break;
+ default:
+ break;
+ }
+ try {
+ getParam = uncrush ? JSON.parse(uncrush) : {};
+ } catch (error) {
+ convertedValue = uncrush;
+
+ try {
+ const isDate = moment(new Date(convertedValue)).isValid();
+ convertedValue = isDate ? moment(convertedValue).toDate() : convertedValue;
+ } catch (dateparseError) {
+ }
+
+ ref.current = convertedValue;
+ setQsValue(convertedValue);
+ return
+ }
+
try {
- const isDate = moment(new Date(convertedValue)).isValid();
- convertedValue = isDate ? moment(convertedValue).toDate() : convertedValue;
- } catch (dateparseError) {
+ convertedValue = JSON.parse(getParam);
+ } catch (error) {
+ convertedValue = getParam;
+ try {
+ const isDate = moment(new Date(convertedValue)).isValid();
+ convertedValue = isDate ? moment(convertedValue).toDate() : convertedValue;
+ } catch (dateparseError) {
+ }
+ ref.current = convertedValue
+ setQsValue(convertedValue);
+ return
}
+
+ } catch (error) {
+ convertedValue = getParam;
}
- } catch (error) {
- convertedValue = pValue;
+ ref.current = convertedValue;
}
- ref.current = convertedValue;
- }
- return ref.current;
- }, [queryKey, state]);
+ setQsValue(convertedValue);
+ }, [JSONUrl, encode, queryKey, state]);
+
+ useEffect(
+ () => {
+ getQueryStringValue()
+ }, [window?.location?.search]
+ );
const dispatchFromUrl = useCallback(
- function (val) {
+ async function (val) {
+ const JSONUrl = _JSONUrl('lzma');
const returnValue = typeof val === "function" ? val(ref.current) : val;
const parsedValue = typeof returnValue === "object" ? JSON.stringify(returnValue) : returnValue;
+ let crushValue = '';
+ switch (encode) {
+ case ENCODE_TYPES.crush:
+ crushValue = JSONCrush.crush(parsedValue)
+ break;
+ case ENCODE_TYPES.b64:
+ crushValue = Base64.encode(JSON.stringify(parsedValue))
+ break;
+ case ENCODE_TYPES.lzma:
+ crushValue = await JSONUrl.compress(JSON.stringify(parsedValue))
+ break;
+ default:
+ break;
+ }
- const qs = new URLSearchParams(window.location.search);
+ setUrl({
+ LZMA_compression: {
+ raw: await JSONUrl.compress(JSON.stringify(parsedValue)),
+ urlencoded: new URLSearchParams(await JSONUrl.compress(JSON.stringify(parsedValue)))?.toString(),
+ },
+ JS_Crush: {
+ raw: JSONCrush.crush(JSON.stringify(parsedValue)),
+ urlencoded: new URLSearchParams(JSONCrush.crush(JSON.stringify(parsedValue)))?.toString(),
+ },
+ B64: {
+ raw: Base64.encode(JSON.stringify(parsedValue)),
+ urlencoded: new URLSearchParams(Base64.encode(JSON.stringify(parsedValue)))?.toString(),
+ },
+ })
+ const qs = new URLSearchParams(window?.location?.search);
let values = {};
for (var value of qs.keys()) {
+ if (value === queryKey) continue; // skip the queryKey parameter
values[value] = qs.get(value);
}
const mergedValues = {
...values,
- [queryKey]: parsedValue
+ [queryKey]: crushValue
+ }
+
+ let qsString = ''
+ if (isEmpty(values)) {
+ qsString = `?${queryKey}=${crushValue}`
+ } else {
+ const preQs = new URLSearchParams(values);
+ const preQsValue = preQs.toString()
+ qsString = `?${preQsValue}&${queryKey}=${crushValue}`
}
- const newQs = new URLSearchParams(mergedValues);
- const newQsValue = newQs.toString()
- setQueryString(`?${newQsValue}`);
+
+ // const newQs = new URLSearchParams(mergedValues);
+ // const newQsValue = newQs.toString()
+ setQueryString(qsString)
setState(returnValue);
},
[queryKey, setQueryString]
@@ -72,6 +169,6 @@ export function useUrlState({ queryKey, defaultValue, disable = false }) {
if (disable) {
return [state, dispatch, ref]
} else {
- return [getQueryStringValue, dispatchFromUrl, ref];
+ return [qsValue, dispatchFromUrl, ref, url];
}
}
diff --git a/src/components/hooks/useUrlState.stories.js b/src/components/hooks/useUrlState.stories.js
index fc272ed..0e29dfb 100644
--- a/src/components/hooks/useUrlState.stories.js
+++ b/src/components/hooks/useUrlState.stories.js
@@ -13,7 +13,7 @@ const useURLStateStory = {
export default useURLStateStory;
export const Default = ({ ...args }) => {
- const [queryTerm, setQueryTerm, queryTermRef] = useUrlState({queryKey:'queryTerm'});
+ const [queryTerm, setQueryTerm, queryTermRef, url] = useUrlState({queryKey:'queryTerm'});
return (
{
};
export const Disable = ({ ...args }) => {
- const [queryTerm, setQueryTerm, queryTermRef] = useUrlState({queryKey:'queryTerm', disable: true});
+ const [queryTerm, setQueryTerm, queryTermRef, url] = useUrlState({queryKey:'queryTerm', disable: true});
return (
{
};
export const Multiple = ({ ...args }) => {
- const [queryTerm, setQueryTerm, queryTermRef] = useUrlState({queryKey:'queryTerm'});
- const [queryTerm2, setQueryTerm2, queryTerm2Ref] = useUrlState({queryKey:'queryTerm2'});
+ const [queryTerm, setQueryTerm, queryTermRef, url] = useUrlState({queryKey:'queryTerm'});
+ const [queryTerm2, setQueryTerm2, queryTerm2Ref, url2] = useUrlState({queryKey:'queryTerm2'});
useEffect(() => {
console.log('should only be called once per load', queryTerm, queryTerm2)
}, [queryTerm, queryTerm2]);
@@ -58,13 +58,13 @@ export const Multiple = ({ ...args }) => {
label="Query Term 2"
value={queryTerm2}
onChange={(e) => setQueryTerm2(e.target.value)} />
-
+
);
};
export const JSON = ({ ...args }) => {
- const [queryTerm, setQueryTerm, queryTermRef] = useUrlState({queryKey:'jsonTerm'});
+ const [queryTerm, setQueryTerm, queryTermRef, url] = useUrlState({queryKey:'jsonTerm'});
return (
{
label="Query Term"
value={queryTerm?.wrap?.value}
onChange={(e) => setQueryTerm({ wrap: { value: e.target.value } })} />
-
+
);
}
export const DateRange = ({ ...args }) => {
- const [queryTerm, setQueryTerm, queryTermRef] = useUrlState({queryKey:'dateRangeTerm'});
+ const [queryTerm, setQueryTerm, queryTermRef, url] = useUrlState({queryKey:'dateRangeTerm'});
return (
setQueryTerm(v)} />
-
+
)
}
export const Date = ({ ...args }) => {
- const [queryTerm, setQueryTerm, queryTermRef] = useUrlState({queryKey:'dateTerm'});
+ const [queryTerm, setQueryTerm, queryTermRef, url] = useUrlState({queryKey:'dateTerm'});
return (
{
setQueryTerm(v.target.value)
}} />
-
+
)
+}
+
+export const MedicalGridFilterExample = ({...args}) => {
+ const [queryTerm, setQueryTerm, queryTermRef, url] = useUrlState({queryKey:'medicalGridFilter'});
+ useEffect(
+ () => {
+ setQueryTerm({
+ laboratory: [
+ 9,
+ 1,
+ ],
+ startDate: "2023-08-01T08:51:52.000Z",
+ endDate: "2023-09-30T08:51:52.000Z",
+ })
+ }, []
+ );
+ return (
+
+
+
+
+ );
}
\ No newline at end of file
diff --git a/yarn.lock b/yarn.lock
index b83d7dd..d5f2d9a 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1093,6 +1093,14 @@
resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310"
integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==
+"@babel/runtime-corejs2@^7.0.0":
+ version "7.23.1"
+ resolved "https://registry.yarnpkg.com/@babel/runtime-corejs2/-/runtime-corejs2-7.23.1.tgz#f3a25c24d455be4e0309a56e56f0d2ef1a91c567"
+ integrity sha512-eY39r8IIgbcDfILJqsflwMImjccvK3QdgBRKo5v6lDPd5SiAsyfl3SJuAYWJ5hgbz7kfQmZ9ueirnhq0e9176Q==
+ dependencies:
+ core-js "^2.6.12"
+ regenerator-runtime "^0.14.0"
+
"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.1", "@babel/runtime@^7.11.1", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.8", "@babel/runtime@^7.16.3", "@babel/runtime@^7.17.8", "@babel/runtime@^7.18.3", "@babel/runtime@^7.18.6", "@babel/runtime@^7.18.9", "@babel/runtime@^7.20.13", "@babel/runtime@^7.20.7", "@babel/runtime@^7.21.0", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2":
version "7.21.5"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.21.5.tgz#8492dddda9644ae3bda3b45eabe87382caee7200"
@@ -6304,6 +6312,14 @@ binjumper@^0.1.4:
resolved "https://registry.yarnpkg.com/binjumper/-/binjumper-0.1.4.tgz#4acc0566832714bd6508af6d666bd9e5e21fc7f8"
integrity sha512-Gdxhj+U295tIM6cO4bJO1jsvSjBVHNpj2o/OwW7pqDEtaqF6KdOxjtbo93jMMKAkP7+u09+bV8DhSqjIv4qR3w==
+bl@^2.0.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/bl/-/bl-2.2.1.tgz#8c11a7b730655c5d56898cdc871224f40fd901d5"
+ integrity sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==
+ dependencies:
+ readable-stream "^2.3.5"
+ safe-buffer "^5.1.1"
+
bl@^4.0.3, bl@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a"
@@ -6313,7 +6329,7 @@ bl@^4.0.3, bl@^4.1.0:
inherits "^2.0.4"
readable-stream "^3.4.0"
-bluebird@^3.5.5:
+bluebird@^3.0.6, bluebird@^3.5.5:
version "3.7.2"
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
@@ -7140,7 +7156,7 @@ core-js-pure@^3.23.3:
resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.30.1.tgz#7d93dc89e7d47b8ef05d7e79f507b0e99ea77eec"
integrity sha512-nXBEVpmUnNRhz83cHd9JRQC52cTMcuXAmR56+9dSMpRdpeA4I1PX6yjmhd71Eyc/wXNsdBdUDIj1QTIeZpU5Tg==
-core-js@^2.4.0:
+core-js@^2.4.0, core-js@^2.6.12:
version "2.6.12"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec"
integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==
@@ -11026,6 +11042,11 @@ jiti@^1.18.2:
resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.18.2.tgz#80c3ef3d486ebf2450d9335122b32d121f2a83cd"
integrity sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==
+js-base64@^3.7.5:
+ version "3.7.5"
+ resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-3.7.5.tgz#21e24cf6b886f76d6f5f165bfcd69cc55b9e3fca"
+ integrity sha512-3MEt5DTINKqfScXKfJFrRbxkrnk2AxPWGBL/ycjz4dK8iqiSJ06UxD8jh8xuh6p10TX4t2+7FsBYVxxQbMg+qA==
+
js-beautify@^1.8.9:
version "1.14.7"
resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.14.7.tgz#9206296de33f86dc106d3e50a35b7cf8729703b2"
@@ -11180,6 +11201,19 @@ json-stable-stringify-without-jsonify@^1.0.1:
resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==
+json-url@^3.1.:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/json-url/-/json-url-3.1.0.tgz#dcd70a19eb098d88bd00917b3253e414f434f0dc"
+ integrity sha512-fhmtxBOQYJCshMV/omtzjBLv0ruLBz4dt+28y2+959fM45Oc8s+uL1jdLu/4yGeKATylgV022gAPfxCwQ5KgFA==
+ dependencies:
+ "@babel/runtime-corejs2" "^7.0.0"
+ bluebird "^3.0.6"
+ lz-string "^1.4.4"
+ lzma "^2.3.2"
+ msgpack5 "^4.2.1"
+ node-lzw "^0.3.1"
+ urlsafe-base64 "^1.0.0"
+
json5@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593"
@@ -11192,6 +11226,11 @@ json5@^2.1.2, json5@^2.2.0, json5@^2.2.2:
resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
+jsoncrush@1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/jsoncrush/-/jsoncrush-1.1.6.tgz#37efda77124746fd6e1e0a0e8692dbd0b79272a6"
+ integrity sha512-oLNi8zgT872yK7BBNM9r2Q3BAUf8Uuq+fbP0KZU5GISA87thlzHRqWkk3FcetUmMeW7MrPNLPtpZ0h/AZFFrNw==
+
jsonfile@^6.0.1:
version "6.1.0"
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
@@ -11666,6 +11705,11 @@ lz-string@^1.4.4:
resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941"
integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==
+lzma@^2.3.2:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/lzma/-/lzma-2.3.2.tgz#3783b24858b9c0e747a0df3cbf1fb5fcaa92c441"
+ integrity sha512-DcfiawQ1avYbW+hsILhF38IKAlnguc/fjHrychs9hdxe4qLykvhT5VTGNs5YRWgaNePh7NTxGD4uv4gKsRomCQ==
+
magic-string@^0.25.0, magic-string@^0.25.7:
version "0.25.9"
resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c"
@@ -12391,6 +12435,16 @@ ms@2.1.3, ms@^2.1.1:
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
+msgpack5@^4.2.1:
+ version "4.5.1"
+ resolved "https://registry.yarnpkg.com/msgpack5/-/msgpack5-4.5.1.tgz#2da4dba4ea20c09fd4309c9c04f046e38cb4975e"
+ integrity sha512-zC1vkcliryc4JGlL6OfpHumSYUHWFGimSI+OgfRCjTFLmKA2/foR9rMTOhWiqfOrfxJOctrpWPvrppf8XynJxw==
+ dependencies:
+ bl "^2.0.1"
+ inherits "^2.0.3"
+ readable-stream "^2.3.6"
+ safe-buffer "^5.1.2"
+
multicast-dns@^7.2.5:
version "7.2.5"
resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.5.tgz#77eb46057f4d7adbd16d9290fa7299f6fa64cced"
@@ -12511,6 +12565,11 @@ node-int64@^0.4.0:
resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==
+node-lzw@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/node-lzw/-/node-lzw-0.3.1.tgz#f50e37968976aca83320028b91f101df4a436b2d"
+ integrity sha512-BGjQRR92HJsEsm1Ebp3Qvn2Jq+tlXEGY8zorNdal+FxOWpLMyyZBHoQWeyOc/TxsCzCvGbcCG4mU0u/RBSWxjQ==
+
node-polyfill-webpack-plugin@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/node-polyfill-webpack-plugin/-/node-polyfill-webpack-plugin-2.0.1.tgz#141d86f177103a8517c71d99b7c6a46edbb1bb58"
@@ -14613,7 +14672,7 @@ read-pkg@^5.2.0:
parse-json "^5.0.0"
type-fest "^0.6.0"
-readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.2.2, readable-stream@^2.3.5, readable-stream@~2.3.6:
+readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.2.2, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6:
version "2.3.8"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b"
integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==
@@ -14733,6 +14792,11 @@ regenerator-runtime@^0.13.11, regenerator-runtime@^0.13.7, regenerator-runtime@^
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9"
integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==
+regenerator-runtime@^0.14.0:
+ version "0.14.0"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45"
+ integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==
+
regenerator-transform@^0.15.1:
version "0.15.1"
resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.1.tgz#f6c4e99fc1b4591f780db2586328e4d9a9d8dc56"
@@ -16571,6 +16635,11 @@ url@^0.11.0:
punycode "1.3.2"
querystring "0.2.0"
+urlsafe-base64@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/urlsafe-base64/-/urlsafe-base64-1.0.0.tgz#23f89069a6c62f46cf3a1d3b00169cefb90be0c6"
+ integrity sha512-RtuPeMy7c1UrHwproMZN9gN6kiZ0SvJwRaEzwZY0j9MypEkFqyBaKv176jvlPtg58Zh36bOkS0NFABXMHvvGCA==
+
use-composed-ref@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/use-composed-ref/-/use-composed-ref-1.3.0.tgz#3d8104db34b7b264030a9d916c5e94fbe280dbda"