From 9305778cb3f11e272c50ef7d7b3c543ba9a5cd00 Mon Sep 17 00:00:00 2001 From: beahackman Date: Thu, 20 Jul 2023 11:39:43 -0700 Subject: [PATCH 01/26] initial commit --- .../components/core/Identifier/Identifier.js | 50 ++++- aries-site/package.json | 5 +- .../src/components/cards/ContentCard.js | 25 +++ aries-site/src/components/seo/Meta.js | 2 +- aries-site/src/layouts/content/ChangeLog.js | 27 +++ .../content/ContributerCommitMessages.js | 93 ++++++++++ aries-site/src/layouts/content/UpdateTag.js | 17 ++ aries-site/src/layouts/main/Layout.js | 16 ++ aries-site/src/utils/pageVisitTracker.js | 34 ++++ yarn.lock | 175 ++++++++++-------- 10 files changed, 363 insertions(+), 81 deletions(-) create mode 100644 aries-site/src/layouts/content/ChangeLog.js create mode 100644 aries-site/src/layouts/content/ContributerCommitMessages.js create mode 100644 aries-site/src/layouts/content/UpdateTag.js create mode 100644 aries-site/src/utils/pageVisitTracker.js diff --git a/aries-core/src/js/components/core/Identifier/Identifier.js b/aries-core/src/js/components/core/Identifier/Identifier.js index a8df49980..71eeb530f 100644 --- a/aries-core/src/js/components/core/Identifier/Identifier.js +++ b/aries-core/src/js/components/core/Identifier/Identifier.js @@ -1,19 +1,59 @@ import React from 'react'; import PropTypes from 'prop-types'; +import { Tag } from 'grommet'; import { Box, Heading, Text } from 'grommet'; +import { useDarkMode } from '../../../../../../aries-site/src/utils'; + export const Identifier = ({ children, level, title, subTitle, size, + updates, ...rest -}) => ( +}) => { + const darkMode = useDarkMode(); + + //possible new spot to explore -> how to read if the entire component is new? AKA how to solve for that "new" variable on line 38 + return( - {children} - + + {children} + {updates && + + } + {/* {new && + + } */} + + {level ? ( {title} @@ -26,7 +66,9 @@ export const Identifier = ({ {subTitle} -); + ); + }; + Identifier.propTypes = { children: PropTypes.node, diff --git a/aries-site/package.json b/aries-site/package.json index aa7eca978..db35f7821 100644 --- a/aries-site/package.json +++ b/aries-site/package.json @@ -6,14 +6,15 @@ "main": "src/pages/index.js", "private": true, "dependencies": { - "aries-core": "*", "@mdx-js/loader": "^2.3.0", "@mdx-js/react": "^2.3.0", "@next/mdx": "^13.4.4", + "aries-core": "*", "next": "13.4.4", "react-ga": "^2.7.0", "react-syntax-highlighter": "^15.4.4", - "remark-gfm": "^3.0.1" + "remark-gfm": "^3.0.1", + "universal-cookie": "^4.0.4" }, "scripts": { "build": "yarn build-search && next build", diff --git a/aries-site/src/components/cards/ContentCard.js b/aries-site/src/components/cards/ContentCard.js index 3777c0dc9..9ec07e9a0 100644 --- a/aries-site/src/components/cards/ContentCard.js +++ b/aries-site/src/components/cards/ContentCard.js @@ -5,11 +5,35 @@ import { Identifier } from 'aries-core'; import { PreviewImageCard } from './PreviewCard'; import { LinkCard } from './LinkCard'; import { useDarkMode } from '../../utils'; +import contributorCommitMessages from '../../layouts/content/ContributerCommitMessages'; export const ContentCard = forwardRef( ({ level, topic, minimal, ...rest }, ref) => { const { description, name, parent, preview, render } = topic; const darkMode = useDarkMode(); + const currentFileName = name?.toLowerCase().replace(/\s+/g, '').trim() + ".mdx"; + //console.log("content card calling: "); + //console.log(topic.parent.name.toLowerCase()); + + //I recall the fetch so that all the components/templates/foundations and their commits are currently available as they load up + let cardUpdateLog = contributorCommitMessages(topic.parent.name.toLowerCase(), currentFileName); + const aYearAgo = new Date(new Date().setFullYear(new Date().getFullYear() - 1)).getTime(); + let newUpdate; + + //I'm at a point where the localStorage logic isn't implemented yet + //so this is temporarily checking if it has been a year since the commit + //if it has happened within a year, then it will show the "updated" tag on the page + //once pageVisitTracker.js is embedded the function will be solved here to find "newUpdates" + //let newUpdates = pageVisitTracker(name?, currentFileName, topic.parent.name.toLowerCase()); + //I would then be able to delete lines 19 & 20 + if(cardUpdateLog[0]){ + if(aYearAgo < new Date(cardUpdateLog[0].date).getTime()){ + newUpdate = true; + }else{ + newUpdate = false; + } + } + return ( @@ -49,6 +73,7 @@ export const ContentCard = forwardRef( align="start" gap="xsmall" level={level} + updates={newUpdate} > {parent && parent.icon && !minimal && ( diff --git a/aries-site/src/components/seo/Meta.js b/aries-site/src/components/seo/Meta.js index ee02962c9..609a76f6e 100644 --- a/aries-site/src/components/seo/Meta.js +++ b/aries-site/src/components/seo/Meta.js @@ -19,7 +19,7 @@ export const Meta = ({ const pageContent = 'products'; const csp = `default-src 'self' 'unsafe-eval'; style-src 'self' *.hpe.com/hfws-static/5/css/ 'unsafe-inline'; - connect-src 'self' *.githubusercontent.com/grommet/hpe-design-system/ https://www.google-analytics.com https://www.github.com/grommet/ https://eyes.applitools.com *.hpe.com/hpe/api/ https://ca1.qualtrics.com/API/v3/surveys/ https://api.spacexdata.com/; + connect-src 'self' *.githubusercontent.com/grommet/hpe-design-system/ https://api.github.com/repos/grommet/hpe-design-system/commits https://api.github.com/repos/grommet/hpe-design-system/commits/ https://www.google-analytics.com https://www.github.com/grommet/ https://eyes.applitools.com *.hpe.com/hpe/api/ https://ca1.qualtrics.com/API/v3/surveys/ https://api.spacexdata.com/; media-src 'self' https://d3hq6blov2iije.cloudfront.net/media/; img-src 'self' data: https://www.google-analytics.com https://images.unsplash.com/ http://s.gravatar.com/avatar/ *.hpe.com/hfws-static/5/ https://d3hq6blov2iije.cloudfront.net/images/textures/ https://d3hq6blov2iije.cloudfront.net/images/gradients/ https://d3hq6blov2iije.cloudfront.net/images/hpe-greenlake/; script-src 'self' *.hpe.com https://www.google-analytics.com/analytics.js https://netlify-cdp-loader.netlify.app/netlify.js ${ diff --git a/aries-site/src/layouts/content/ChangeLog.js b/aries-site/src/layouts/content/ChangeLog.js new file mode 100644 index 000000000..53a573f1c --- /dev/null +++ b/aries-site/src/layouts/content/ChangeLog.js @@ -0,0 +1,27 @@ +import { + Box, + DataTable, + Subheading, + Text +} from 'grommet'; + + +//I set up if we wanted to go ahead with it in the future! +export const ChangeLog = ({ currentFileName, topic } ) => { + const updateLog = contributorCommitMessages(topic, currentFileName); + //console.log(updateLog); + return( + + {(updateLog.length > 0) && + + Change Log + + } + Date, primary: true, size: 'medium'}, {property: 'string', header: 'Change'}]} + data={updateLog.updateLog} + border={{color: "light-4", side: "bottom", size: 'xsmall'}} + /> + + ) +}; diff --git a/aries-site/src/layouts/content/ContributerCommitMessages.js b/aries-site/src/layouts/content/ContributerCommitMessages.js new file mode 100644 index 000000000..46712e3f0 --- /dev/null +++ b/aries-site/src/layouts/content/ContributerCommitMessages.js @@ -0,0 +1,93 @@ +import { useEffect, useState } from "react"; + +//GENERAL NOTE: The useEffect to async-function-fetch thing is where there is likely a memory leak +//I saw online that a few people were having problems fetching inside the useEffect +//so there is another way I'm going to try out after I send you this branch + +let contributorCommitMessages = function(topic, currentFileName){ + console.log( topic + ": " + currentFileName ); + const [contrMsgs, setContributorMessages] = useState([]); + const [error, setError] = useState(null); + + useEffect(() => { + //this fetchData is grabbing the list of commits that have affected the file in total, this has the author/date/message informaiton we need + //this also has a url in the object, which will fetch more info about the commit in general, that is the fetchFile() thing I did below + async function fetchData(){ + try{ + //console.log('1') + const response = await fetch(`https://api.github.com/repos/grommet/hpe-design-system/commits?path=aries-site/src/pages/${topic}/${currentFileName}`); + if (!response.ok) { + throw new Error(`Failed to fetch data: ${response.status} ${response.statusText}`); + } + const data = await response.json(); + if (!Array.isArray(data)) { + throw new Error(`Invalid data format: expected an array, got ${typeof data}`); + } + setContributorMessages(data); + //console.log('A', data); + }catch (error) { + setError("here" + error.message); + } + } + + + //this fetch file part is going to grab more of the relevant information if we wanted to evolve it into showing which sections the changes are in + //i call it iteratively through the commits that affected the current file in fetchData() + //if we dont end up doing the part where we point out the sections there had been changes, i could remove this entirely + //^^that would also lessen the total fetches by like 60% so we defintely wouldn't have those API rate issues, because with this currently, I'm still not even running into the limiter + async function fetchFile(i){ + try{ + //console.log('2') + const newRes = await fetch(`${contrMsgs[i].url}`); + if(!newRes.ok){ + throw new Error(`Failed to fetch new data: ${newRes.status} ${newRes.statusText}`); + } + const fileData = await newRes.json(); + + //i made a temporary array of objects, this one mimics the commit list i got from fetchData + // but directly adds the string with the line-by-line changes in it, so I dont have to go through all the calls again to grab the string + let temp = contrMsgs; + fileData.files.forEach(element => { + if(element.filename.slice(-currentFileName.length) === currentFileName){ + temp[i].change = element.patch; + } + }); + //console.log('HI', temp); + setContributorMessages(temp); + }catch(error){ + setError("over here" + error.message); + } + } + + fetchData(); + + for(let i=0; i { + //i dont push the line-by-line into these objects when we decided not to do the sections, but if we were to add that I would add it here + //because it is already in contrMsgs at this point + let oneYearAgo = new Date(new Date().setFullYear(new Date().getFullYear() - 1)).getTime(); + let commitDate = new Date(element.commit.author.date).getTime() + if(commitDate > oneYearAgo){ + let temp = {date: new Date(element.commit.author.date).toDateString(), string: element.commit.message}; + changeLogArray.push(temp); + j++; + } + }); + + console.log(changeLogArray); + return changeLogArray; +} + +export default contributorCommitMessages; \ No newline at end of file diff --git a/aries-site/src/layouts/content/UpdateTag.js b/aries-site/src/layouts/content/UpdateTag.js new file mode 100644 index 000000000..f0116f9a9 --- /dev/null +++ b/aries-site/src/layouts/content/UpdateTag.js @@ -0,0 +1,17 @@ +import { Anchor, Notification } from "grommet"; +import contributorCommitMessages from "./ContributerCommitMessages"; +import { CircleInformation } from "grommet-icons"; + +export let UpdateTag = ({ topic, currentFileName }) => { + //I had to re-run the fetch in this file because the API wasn't being called when I refreshed/changed guidances it in the parent Layout page + //It only seems to work when it is being re-ran here per page change? Hopefully I dont jinx it? + //Right now, I just grab the most recent commit, and send it out in the Notification component + const updateLog = contributorCommitMessages(topic, currentFileName); + if(updateLog.length > 0){ + const newDate = new Date(updateLog[0].date).toDateString(); + const description = updateLog[0].string; + return( + }/> + ) + } +} diff --git a/aries-site/src/layouts/main/Layout.js b/aries-site/src/layouts/main/Layout.js index 7b35ab976..b7ddd9d74 100644 --- a/aries-site/src/layouts/main/Layout.js +++ b/aries-site/src/layouts/main/Layout.js @@ -1,3 +1,4 @@ +import contributorCommitMessages from '../content/ContributerCommitMessages'; import React, { Fragment, useEffect, @@ -34,10 +35,12 @@ import { FeedbackButton, Feedback, Question, + components, } from '../../components'; import { Config } from '../../../config'; import { getRelatedContent, getPageDetails } from '../../utils'; import { siteContents } from '../../data/search/contentForSearch'; +import { UpdateTag } from '../content/UpdateTag'; export const Layout = ({ backgroundImage, @@ -65,6 +68,13 @@ export const Layout = ({ } = getPageDetails(titleProp); const layout = isLanding ? 'plain' : pageLayout; + let currentFileName = title?.toLowerCase().replace(/\s+/g, '').trim() + ".mdx"; + let newUpdate = true; + //^^ currently keeping this as true for running purposes + //the actual logic to solve this is stored in pageVisitTracker.js but it hasn't been connected yet + //let newUpdate = pageVisitTracker(title, currentFileName, topic); + //^^it will be this instead + const MainContentWrapper = isLanding ? Fragment : PageContent; const breakpoint = useContext(ResponsiveContext); const [open, setOpen] = useState(false); @@ -182,8 +192,14 @@ export const Layout = ({ topic={topic} render={render} /> + {newUpdate && + //newUpdate solved in above logic, determines if updateTag should be shown + + // + } {children} + {/* */} {relatedContent.length > 0 && ( new Date(now.getTime() - 5*1000)){ //if the most recent token is older than 5 seconds ago then set it, otherwise dont. this covers cases of the page refreshing a few times + window.localStorage.setItem(tokenName, dateTime); + } + }else{ //in the case that they do not have the token + if(new Date(updateLog[0].date).getTime() > new Date(new Date().setDate(dateTime.getDate() - 30))){ //if it is been less than 30 days since the commit + newUpdate = true; + }else{ //if the most recent commit isn't new anymore + newUpdate = false; + } + window.localStorage.setItem(tokenName, dateTime);//set token + } + return newUpdate; +} + +export default pageVisitTracker; \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index b19235d17..f0b6910d1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,11 @@ # yarn lockfile v1 +"@aashutoshrathi/word-wrap@^1.2.3": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" + integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== + "@ampproject/remapping@^2.2.0": version "2.2.1" resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" @@ -300,7 +305,7 @@ "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" -"@babel/helper-annotate-as-pure@^7.15.4", "@babel/helper-annotate-as-pure@^7.18.6", "@babel/helper-annotate-as-pure@^7.22.5": +"@babel/helper-annotate-as-pure@^7.15.4", "@babel/helper-annotate-as-pure@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== @@ -388,7 +393,7 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.15.4", "@babel/helper-module-imports@^7.21.4", "@babel/helper-module-imports@^7.22.5": +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.15.4", "@babel/helper-module-imports@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz#1a8f4c9f4027d23f520bd76b364d44434a72660c" integrity sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg== @@ -1793,9 +1798,9 @@ integrity sha512-q/y7VZj/9YpgzDe64Zi6rY1xPizx80JjlU2BTevlajtaE3w1LqweH1gGgxou2N7hdFosXHjGrI4OUvtFXXhGLg== "@next/mdx@^13.4.4": - version "13.4.6" - resolved "https://registry.yarnpkg.com/@next/mdx/-/mdx-13.4.6.tgz#beb1257357373b8652bedebea218cd38f762f3e7" - integrity sha512-t00S06jW17dWROGsy4Y/6u+1npaTO5LBjP1a+Fag6uQnpoicG1BmZLv7FtmM9KHGW3GF1gWPpaj4GiaOYzHrYQ== + version "13.4.7" + resolved "https://registry.yarnpkg.com/@next/mdx/-/mdx-13.4.7.tgz#d139b43deb4361be890ee631d7d6bd6cd11d95a1" + integrity sha512-btb4ym4Gz72ACQjSlK+AsJRx5IYcS9O0FgUWK4/+9AJxLQtr5XNOAfpy1ioLqXG7REVvwWAea4z6Hp0agwc+Vg== dependencies: source-map "^0.7.0" @@ -2021,6 +2026,11 @@ dependencies: "@types/node" "*" +"@types/cookie@^0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.3.3.tgz#85bc74ba782fb7aa3a514d11767832b0e3bc6803" + integrity sha512-LKVP3cgXBT9RYj+t+9FDKwS5tdI+rPBXaNSkma7hvqy35lc7mAokC2zsqWJH0LaqIt3B962nuYI77hsJoT1gow== + "@types/debug@^4.0.0": version "4.1.8" resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.8.tgz#cef723a5d0a90990313faec2d1e22aee5eecb317" @@ -2103,6 +2113,11 @@ dependencies: "@types/unist" "*" +"@types/http-errors@*": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.1.tgz#20172f9578b225f6c7da63446f56d4ce108d5a65" + integrity sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ== + "@types/http-proxy@^1.17.8": version "1.17.11" resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.11.tgz#0ca21949a5588d55ac2b659b69035c84bd5da293" @@ -2177,9 +2192,9 @@ integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA== "@types/node@*": - version "20.3.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.3.1.tgz#e8a83f1aa8b649377bb1fb5d7bac5cb90e784dfe" - integrity sha512-EhcH/wvidPy1WeML3TtYFGR83UzjxeWRen9V402T8aUGYsCHOmfoisV3ZSg03gAFIbLq8TnWOJ0f4cALtnSEUg== + version "20.3.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.3.2.tgz#fa6a90f2600e052a03c18b8cb3fd83dd4e599898" + integrity sha512-vOBLVQeCQfIcF/2Y7eKFTqrMnizK5lRNQ7ykML/5RuwVXVWxYkgwS7xbt4B6fKCUPgbSL5FSsjHQpaGQP/dQmw== "@types/node@^12.20.10": version "12.20.55" @@ -2207,9 +2222,9 @@ integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== "@types/react@>=16": - version "18.2.13" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.13.tgz#a98c09bde8b18f80021935b11d2d29ef5f4dcb2f" - integrity sha512-vJ+zElvi/Zn9cVXB5slX2xL8PZodPCwPRDpittQdw43JR2AJ5k3vKdgJJyneV/cYgIbLQUwXa9JVDvUZXGba+Q== + version "18.2.14" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.14.tgz#fa7a6fecf1ce35ca94e74874f70c56ce88f7a127" + integrity sha512-A0zjq+QN/O0Kpe30hA1GidzyFjatVvrpIvWLxD+xv67Vt91TWWgco9IvrJBkeyHm1trGaFS/FSGqPlhyeZRm0g== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" @@ -2241,10 +2256,11 @@ "@types/express" "*" "@types/serve-static@*", "@types/serve-static@^1.13.10": - version "1.15.1" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.1.tgz#86b1753f0be4f9a1bee68d459fcda5be4ea52b5d" - integrity sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ== + version "1.15.2" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.2.tgz#3e5419ecd1e40e7405d34093f10befb43f63381a" + integrity sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw== dependencies: + "@types/http-errors" "*" "@types/mime" "*" "@types/node" "*" @@ -2632,9 +2648,9 @@ aria-query@5.1.3: deep-equal "^2.0.5" aria-query@^5.1.3: - version "5.2.1" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.2.1.tgz#bc285d9d654d1df121bcd0c134880d415ca67c15" - integrity sha512-7uFg4b+lETFgdaJyETnILsXgnnzVnkHcgRbwbPwevm5x/LmUlt3MjczMRe1zg824iBgXZNRPTBftNYyRSKLp2g== + version "5.3.0" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" + integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== dependencies: dequal "^2.0.3" @@ -2661,7 +2677,7 @@ array-flatten@^2.1.2: resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== -array-includes@^3.1.5, array-includes@^3.1.6: +array-includes@^3.1.6: version "3.1.6" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== @@ -2898,13 +2914,13 @@ babel-plugin-polyfill-regenerator@^0.5.0: "@babel/helper-define-polyfill-provider" "^0.4.0" "babel-plugin-styled-components@>= 1.12.0": - version "2.1.3" - resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-2.1.3.tgz#f5616bee99efca6685e500fe45db87f26cb42ba7" - integrity sha512-jBioLwBVHpOMU4NsueH/ADcHrjS0Y/WTpt2eGVmmuSFNEv2DF3XhcMncuZlbbjxQ4vzxg+yEr6E6TNjrIQbsJQ== + version "2.1.4" + resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-2.1.4.tgz#9a1f37c7f32ef927b4b008b529feb4a2c82b1092" + integrity sha512-Xgp9g+A/cG47sUyRwwYxGM4bR/jDRg5N6it/8+HxCnbT5XNKSKDT9xm4oag/osgqjC2It/vH0yXsomOG6k558g== dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-module-imports" "^7.21.4" - babel-plugin-syntax-jsx "^6.18.0" + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-module-imports" "^7.22.5" + "@babel/plugin-syntax-jsx" "^7.22.5" lodash "^4.17.21" picomatch "^2.3.1" @@ -3135,9 +3151,9 @@ camelize@^1.0.0: integrity sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ== caniuse-lite@^1.0.30001406, caniuse-lite@^1.0.30001503: - version "1.0.30001506" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001506.tgz#35bd814b310a487970c585430e9e80ee23faf14b" - integrity sha512-6XNEcpygZMCKaufIcgpQNZNf00GEqc7VQON+9Rd0K1bMYo8xhMZRAo5zpbnbMNizi4YNgIDAFrdykWsvY3H4Hw== + version "1.0.30001509" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001509.tgz#2b7ad5265392d6d2de25cd8776d1ab3899570d14" + integrity sha512-2uDDk+TRiTX5hMcUYT/7CSyzMZxjfGu0vAUjS2g0LSD8UoXOv0LtpH4LxGMemsiPq6LCVIUjNwVM0erkOkGCDA== ccount@^2.0.0: version "2.0.1" @@ -3465,6 +3481,11 @@ cookie@0.5.0: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== +cookie@^0.4.0: + version "0.4.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" + integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== + core-js-compat@^3.30.1, core-js-compat@^3.30.2: version "3.31.0" resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.31.0.tgz#4030847c0766cc0e803dcdfb30055d7ef2064bf1" @@ -3885,9 +3906,9 @@ ee-first@1.1.1: integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== electron-to-chromium@^1.4.431: - version "1.4.435" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.435.tgz#761c34300603b9f1234f0b6155870d3002435db6" - integrity sha512-B0CBWVFhvoQCW/XtjRzgrmqcgVWg6RXOEM/dK59+wFV93BFGR6AeNKc4OyhM+T3IhJaOOG8o/V+33Y2mwJWtzw== + version "1.4.442" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.442.tgz#455f4c5bd6ae73afb634dcffee6f356c26c8e294" + integrity sha512-RkrZF//Ya+0aJq2NM3OdisNh5ZodZq1rdXOS96G8DdDgpDKqKE81yTbbQ3F/4CKm1JBPsGu1Lp/akkna2xO06Q== elegant-spinner@^1.0.1: version "1.0.1" @@ -3953,9 +3974,9 @@ enhanced-resolve@^5.10.0, enhanced-resolve@^5.15.0: tapable "^2.2.0" envinfo@^7.7.3: - version "7.9.0" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.9.0.tgz#47594a13081be0d9be6e513534e8c58dbb26c7a1" - integrity sha512-RODB4txU+xImYDemN5DqaKC0CHk05XSVkOX4pq0hK26Qx+1LChkuOyUDlGEjYb3ACr0n9qBhFjg37hQuJvpkRQ== + version "7.10.0" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.10.0.tgz#55146e3909cc5fe63c22da63fb15b05aeac35b13" + integrity sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw== error-ex@^1.3.1: version "1.3.2" @@ -5042,12 +5063,7 @@ graphlib@^2.1.5: dependencies: lodash "^4.17.15" -grommet-icons@^4.10.0: - version "4.11.0" - resolved "https://registry.yarnpkg.com/grommet-icons/-/grommet-icons-4.11.0.tgz#8cb97d24e84a02c1fb23f84c776ffc46b61ae29d" - integrity sha512-ArXf2XyXmpk5JsQ8NudzNz3mbWv+TeZkPiyog2s9yoNAWTlIr3vzNjr97uon/Xm4Uiq2kiHkvO4i2fG1u6EaDg== - -"grommet-icons@https://github.com/grommet/grommet-icons/tarball/stable": +grommet-icons@^4.10.0, "grommet-icons@https://github.com/grommet/grommet-icons/tarball/stable": version "4.11.0" resolved "https://github.com/grommet/grommet-icons/tarball/stable#d51ac6b26861c6bf58ba13d20e8e29afc7a93e5f" @@ -5210,9 +5226,9 @@ html-encoding-sniffer@^3.0.0: whatwg-encoding "^2.0.0" html-entities@^2.3.2: - version "2.3.6" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.6.tgz#966391d58e5737c77bca4025e31721b496ab7454" - integrity sha512-9o0+dcpIw2/HxkNuYKxSJUF/MMRZQECK4GnF+oQOmJ83yCVHTWgCH5aOXxK5bozNRmM8wtgryjHD3uloPBDEGw== + version "2.4.0" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.4.0.tgz#edd0cee70402584c8c76cc2c0556db09d1f45061" + integrity sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ== html-escaper@^2.0.0: version "2.0.2" @@ -6433,12 +6449,14 @@ jsonfile@^6.0.1: graceful-fs "^4.1.6" "jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz#76b3e6e6cece5c69d49a5792c3d01bd1a0cdc7ea" - integrity sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw== + version "3.3.4" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.4.tgz#b896535fed5b867650acce5a9bd4135ffc7b3bf9" + integrity sha512-fX2TVdCViod6HwKEtSWGHs57oFhVfCMwieb9PuRDgjDPh5XeqJiHFFFJCHxU5cnTc3Bu/GRL+kPiFmw8XWOfKw== dependencies: - array-includes "^3.1.5" - object.assign "^4.1.3" + array-includes "^3.1.6" + array.prototype.flat "^1.3.1" + object.assign "^4.1.4" + object.values "^1.1.6" kind-of@^6.0.2: version "6.0.3" @@ -6872,9 +6890,9 @@ media-typer@0.3.0: integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== memfs@^3.4.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.5.3.tgz#d9b40fe4f8d5788c5f895bda804cd0d9eeee9f3b" - integrity sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw== + version "3.6.0" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.6.0.tgz#d7a2110f86f79dd950a8b6df6d57bc984aa185f6" + integrity sha512-EGowvkkgbMcIChjMTMkESFDbZeSh8xZ7kNSF0hAiAN4Jh6jgHCRS0Ga/+C8y6Au+oqpezRHCfPsmJ2+DwAgiwQ== dependencies: fs-monkey "^1.0.4" @@ -7518,7 +7536,7 @@ object-keys@^1.1.1: resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object.assign@^4.1.2, object.assign@^4.1.3, object.assign@^4.1.4: +object.assign@^4.1.2, object.assign@^4.1.4: version "4.1.4" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== @@ -7634,16 +7652,16 @@ optionator@^0.8.1: word-wrap "~1.2.3" optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + version "0.9.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" + integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== dependencies: + "@aashutoshrathi/word-wrap" "^1.2.3" deep-is "^0.1.3" fast-levenshtein "^2.0.6" levn "^0.4.1" prelude-ls "^1.2.1" type-check "^0.4.0" - word-wrap "^1.2.3" os-family@^1.0.0, os-family@^1.1.0: version "1.1.0" @@ -8624,9 +8642,9 @@ semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== semver@^7.3.2: - version "7.5.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.2.tgz#5b851e66d1be07c1cdaf37dfc856f543325a2beb" - integrity sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ== + version "7.5.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.3.tgz#161ce8c2c6b4b3bdca6caadc9fa3317a4c4fe88e" + integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ== dependencies: lru-cache "^6.0.0" @@ -8738,9 +8756,9 @@ signal-exit@^3.0.2, signal-exit@^3.0.3: integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== simple-git@^3.15.1: - version "3.19.0" - resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-3.19.0.tgz#fe8d0cd86a0e68372b75c0c44a0cb887201c3f7d" - integrity sha512-hyH2p9Ptxjf/xPuL7HfXbpYt9gKhC1yWDh3KYIAYJJePAKV7AEjLN4xhp7lozOdNiaJ9jlVvAbBymVlcS2jRiA== + version "3.19.1" + resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-3.19.1.tgz#ff9c021961a3d876a1b115b1893bed9a28855d30" + integrity sha512-Ck+rcjVaE1HotraRAS8u/+xgTvToTuoMkT9/l9lvuP5jftwnYUp6DwuJzsKErHgfyRk8IB8pqGHWEbM3tLgV1w== dependencies: "@kwsites/file-exists" "^1.1.1" "@kwsites/promise-deferred" "^1.1.1" @@ -9161,9 +9179,9 @@ terser-webpack-plugin@^5.3.7: terser "^5.16.8" terser@^5.16.8: - version "5.18.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.18.1.tgz#6d8642508ae9fb7b48768e48f16d675c89a78460" - integrity sha512-j1n0Ao919h/Ai5r43VAnfV/7azUYW43GPxK7qSATzrsERfW7+y2QW9Cp9ufnRF5CQUWbnLSo7UJokSWCqg4tsQ== + version "5.18.2" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.18.2.tgz#ff3072a0faf21ffd38f99acc9a0ddf7b5f07b948" + integrity sha512-Ah19JS86ypbJzTzvUCX7KOsEIhDaRONungA4aYBjEP3JZRf4ocuDzTg4QWZnPn9DEMiMYGJPiSOy7aykoCc70w== dependencies: "@jridgewell/source-map" "^0.3.3" acorn "^8.8.2" @@ -9233,9 +9251,9 @@ testcafe-hammerhead@31.4.3: tunnel-agent "0.6.0" testcafe-hammerhead@>=19.4.0: - version "31.4.5" - resolved "https://registry.yarnpkg.com/testcafe-hammerhead/-/testcafe-hammerhead-31.4.5.tgz#672ae1ee426f42fcedb8f15c3e8350f198af2670" - integrity sha512-L6flQbgQ4IoCqtjjOVPoJsaq6++9/mYKVCDxUjn5FhMyP/P3pfLcpW0h1wV8UiNkcf6WoYVYhwxN/15g5YMgIQ== + version "31.4.6" + resolved "https://registry.yarnpkg.com/testcafe-hammerhead/-/testcafe-hammerhead-31.4.6.tgz#ca3aa0d48a768bd3f893738efdfca13ed21f7dd8" + integrity sha512-rooVb0bmKu94R9WrjY2E0iF+YFNrr7Jfz9F0a665xpZyfCresIl9pVaeMduEhbnw1grRfQJgT1PC+2LRQRWDRA== dependencies: "@electron/asar" "^3.2.3" acorn-hammerhead "0.6.2" @@ -9261,6 +9279,7 @@ testcafe-hammerhead@>=19.4.0: semver "5.5.0" tough-cookie "4.0.0" tunnel-agent "0.6.0" + ws "^7.4.6" testcafe-legacy-api@5.1.6: version "5.1.6" @@ -9555,9 +9574,9 @@ tsconfig-paths@^3.14.1: strip-bom "^3.0.0" tslib@^2.0.1, tslib@^2.1.0, tslib@^2.4.0: - version "2.5.3" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.3.tgz#24944ba2d990940e6e982c4bea147aba80209913" - integrity sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w== + version "2.6.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.0.tgz#b295854684dbda164e181d259a22cd779dcd7bc3" + integrity sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA== tunnel-agent@0.6.0: version "0.6.0" @@ -9738,6 +9757,14 @@ unist-util-visit@^4.0.0: unist-util-is "^5.0.0" unist-util-visit-parents "^5.1.1" +universal-cookie@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/universal-cookie/-/universal-cookie-4.0.4.tgz#06e8b3625bf9af049569ef97109b4bb226ad798d" + integrity sha512-lbRVHoOMtItjWbM7TwDLdl8wug7izB0tq3/YVKhT/ahB4VDvWMyvnADfnJI8y6fSvsjh51Ix7lTGC6Tn4rMPhw== + dependencies: + "@types/cookie" "^0.3.3" + cookie "^0.4.0" + universalify@^0.1.0, universalify@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" @@ -10027,9 +10054,9 @@ webpack-sources@^3.2.3: integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== webpack@^5.75.0: - version "5.87.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.87.0.tgz#df8a9c094c6037f45e0d77598f9e59d33ca3a98c" - integrity sha512-GOu1tNbQ7p1bDEoFRs2YPcfyGs8xq52yyPBZ3m2VGnXGtV9MxjrkABHm4V9Ia280OefsSLzvbVoXcfLxjKY/Iw== + version "5.88.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.88.0.tgz#a07aa2f8e7a64a8f1cec0c6c2e180e3cb34440c8" + integrity sha512-O3jDhG5e44qIBSi/P6KpcCcH7HD+nYIHVBhdWFxcLOcIGN8zGo5nqF3BjyNCxIh4p1vFdNnreZv2h2KkoAw3lw== dependencies: "@types/eslint-scope" "^3.7.3" "@types/estree" "^1.0.0" @@ -10200,7 +10227,7 @@ windows-release@^5.0.1: dependencies: execa "^5.1.1" -word-wrap@^1.2.3, word-wrap@~1.2.3: +word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== From 1ee06cb6c4d59d3ca91f926ba229ed2f467d34da Mon Sep 17 00:00:00 2001 From: beahackman Date: Thu, 20 Jul 2023 11:40:45 -0700 Subject: [PATCH 02/26] inital commit 2 --- .../src/components/cards/ContentCard.js | 22 +++---- aries-site/src/layouts/content/ChangeLog.js | 14 ++--- .../content/ContributerCommitMessages.js | 62 +++++++++---------- aries-site/src/layouts/content/UpdateTag.js | 20 +++--- aries-site/src/layouts/main/Layout.js | 18 +++--- aries-site/src/utils/pageVisitTracker.js | 34 +++++----- 6 files changed, 85 insertions(+), 85 deletions(-) diff --git a/aries-site/src/components/cards/ContentCard.js b/aries-site/src/components/cards/ContentCard.js index 9ec07e9a0..1d9272979 100644 --- a/aries-site/src/components/cards/ContentCard.js +++ b/aries-site/src/components/cards/ContentCard.js @@ -11,21 +11,21 @@ export const ContentCard = forwardRef( ({ level, topic, minimal, ...rest }, ref) => { const { description, name, parent, preview, render } = topic; const darkMode = useDarkMode(); - const currentFileName = name?.toLowerCase().replace(/\s+/g, '').trim() + ".mdx"; - //console.log("content card calling: "); - //console.log(topic.parent.name.toLowerCase()); + const currentFileName = `${name?.toLowerCase().replace(/\s+/g, '').trim() }.mdx`; + // console.log("content card calling: "); + // console.log(topic.parent.name.toLowerCase()); - //I recall the fetch so that all the components/templates/foundations and their commits are currently available as they load up - let cardUpdateLog = contributorCommitMessages(topic.parent.name.toLowerCase(), currentFileName); + // I recall the fetch so that all the components/templates/foundations and their commits are currently available as they load up + const cardUpdateLog = contributorCommitMessages(topic.parent.name.toLowerCase(), currentFileName); const aYearAgo = new Date(new Date().setFullYear(new Date().getFullYear() - 1)).getTime(); let newUpdate; - //I'm at a point where the localStorage logic isn't implemented yet - //so this is temporarily checking if it has been a year since the commit - //if it has happened within a year, then it will show the "updated" tag on the page - //once pageVisitTracker.js is embedded the function will be solved here to find "newUpdates" - //let newUpdates = pageVisitTracker(name?, currentFileName, topic.parent.name.toLowerCase()); - //I would then be able to delete lines 19 & 20 + // I'm at a point where the localStorage logic isn't implemented yet + // so this is temporarily checking if it has been a year since the commit + // if it has happened within a year, then it will show the "updated" tag on the page + // once pageVisitTracker.js is embedded the function will be solved here to find "newUpdates" + // let newUpdates = pageVisitTracker(name?, currentFileName, topic.parent.name.toLowerCase()); + // I would then be able to delete lines 19 & 20 if(cardUpdateLog[0]){ if(aYearAgo < new Date(cardUpdateLog[0].date).getTime()){ newUpdate = true; diff --git a/aries-site/src/layouts/content/ChangeLog.js b/aries-site/src/layouts/content/ChangeLog.js index 53a573f1c..b2b000479 100644 --- a/aries-site/src/layouts/content/ChangeLog.js +++ b/aries-site/src/layouts/content/ChangeLog.js @@ -2,26 +2,26 @@ import { Box, DataTable, Subheading, - Text + Text, } from 'grommet'; -//I set up if we wanted to go ahead with it in the future! +// I set up if we wanted to go ahead with it in the future! export const ChangeLog = ({ currentFileName, topic } ) => { const updateLog = contributorCommitMessages(topic, currentFileName); - //console.log(updateLog); + // console.log(updateLog); return( {(updateLog.length > 0) && - + Change Log } Date, primary: true, size: 'medium'}, {property: 'string', header: 'Change'}]} + columns={[{ property: 'date', header: Date, primary: true, size: 'medium' }, { property: 'string', header: 'Change' }]} data={updateLog.updateLog} - border={{color: "light-4", side: "bottom", size: 'xsmall'}} + border={{ color: 'light-4', side: 'bottom', size: 'xsmall' }} /> - ) + ); }; diff --git a/aries-site/src/layouts/content/ContributerCommitMessages.js b/aries-site/src/layouts/content/ContributerCommitMessages.js index 46712e3f0..dcd404b07 100644 --- a/aries-site/src/layouts/content/ContributerCommitMessages.js +++ b/aries-site/src/layouts/content/ContributerCommitMessages.js @@ -1,20 +1,20 @@ -import { useEffect, useState } from "react"; +import { useEffect, useState } from 'react'; -//GENERAL NOTE: The useEffect to async-function-fetch thing is where there is likely a memory leak -//I saw online that a few people were having problems fetching inside the useEffect -//so there is another way I'm going to try out after I send you this branch +// GENERAL NOTE: The useEffect to async-function-fetch thing is where there is likely a memory leak +// I saw online that a few people were having problems fetching inside the useEffect +// so there is another way I'm going to try out after I send you this branch -let contributorCommitMessages = function(topic, currentFileName){ - console.log( topic + ": " + currentFileName ); +const contributorCommitMessages = function(topic, currentFileName){ + console.log( `${topic }: ${ currentFileName}` ); const [contrMsgs, setContributorMessages] = useState([]); const [error, setError] = useState(null); useEffect(() => { - //this fetchData is grabbing the list of commits that have affected the file in total, this has the author/date/message informaiton we need - //this also has a url in the object, which will fetch more info about the commit in general, that is the fetchFile() thing I did below + // this fetchData is grabbing the list of commits that have affected the file in total, this has the author/date/message informaiton we need + // this also has a url in the object, which will fetch more info about the commit in general, that is the fetchFile() thing I did below async function fetchData(){ try{ - //console.log('1') + // console.log('1') const response = await fetch(`https://api.github.com/repos/grommet/hpe-design-system/commits?path=aries-site/src/pages/${topic}/${currentFileName}`); if (!response.ok) { throw new Error(`Failed to fetch data: ${response.status} ${response.statusText}`); @@ -24,38 +24,38 @@ let contributorCommitMessages = function(topic, currentFileName){ throw new Error(`Invalid data format: expected an array, got ${typeof data}`); } setContributorMessages(data); - //console.log('A', data); + // console.log('A', data); }catch (error) { - setError("here" + error.message); + setError(`here${ error.message}`); } } - //this fetch file part is going to grab more of the relevant information if we wanted to evolve it into showing which sections the changes are in - //i call it iteratively through the commits that affected the current file in fetchData() - //if we dont end up doing the part where we point out the sections there had been changes, i could remove this entirely - //^^that would also lessen the total fetches by like 60% so we defintely wouldn't have those API rate issues, because with this currently, I'm still not even running into the limiter + // this fetch file part is going to grab more of the relevant information if we wanted to evolve it into showing which sections the changes are in + // i call it iteratively through the commits that affected the current file in fetchData() + // if we dont end up doing the part where we point out the sections there had been changes, i could remove this entirely + // ^^that would also lessen the total fetches by like 60% so we defintely wouldn't have those API rate issues, because with this currently, I'm still not even running into the limiter async function fetchFile(i){ try{ - //console.log('2') + // console.log('2') const newRes = await fetch(`${contrMsgs[i].url}`); if(!newRes.ok){ throw new Error(`Failed to fetch new data: ${newRes.status} ${newRes.statusText}`); } const fileData = await newRes.json(); - //i made a temporary array of objects, this one mimics the commit list i got from fetchData + // i made a temporary array of objects, this one mimics the commit list i got from fetchData // but directly adds the string with the line-by-line changes in it, so I dont have to go through all the calls again to grab the string - let temp = contrMsgs; + const temp = contrMsgs; fileData.files.forEach(element => { if(element.filename.slice(-currentFileName.length) === currentFileName){ temp[i].change = element.patch; } }); - //console.log('HI', temp); + // console.log('HI', temp); setContributorMessages(temp); }catch(error){ - setError("over here" + error.message); + setError(`over here${ error.message}`); } } @@ -65,22 +65,22 @@ let contributorCommitMessages = function(topic, currentFileName){ fetchFile(i); } - console.log("the error: " + error); + console.log(`the error: ${ error}`); }, []); - //I make one more array but it only reflects the commits that have happened within the current past year this is the one I return - //Limiting it to a year is so that it can quickly be added to a Change Log if we decide to implement it - //In summary it holds an array of objects: each object with the commit time, author, message, and (possibly) a string of changes - let changeLogArray = []; + // I make one more array but it only reflects the commits that have happened within the current past year this is the one I return + // Limiting it to a year is so that it can quickly be added to a Change Log if we decide to implement it + // In summary it holds an array of objects: each object with the commit time, author, message, and (possibly) a string of changes + const changeLogArray = []; let j = 0; contrMsgs.forEach(element => { - //i dont push the line-by-line into these objects when we decided not to do the sections, but if we were to add that I would add it here - //because it is already in contrMsgs at this point - let oneYearAgo = new Date(new Date().setFullYear(new Date().getFullYear() - 1)).getTime(); - let commitDate = new Date(element.commit.author.date).getTime() + // i dont push the line-by-line into these objects when we decided not to do the sections, but if we were to add that I would add it here + // because it is already in contrMsgs at this point + const oneYearAgo = new Date(new Date().setFullYear(new Date().getFullYear() - 1)).getTime(); + const commitDate = new Date(element.commit.author.date).getTime(); if(commitDate > oneYearAgo){ - let temp = {date: new Date(element.commit.author.date).toDateString(), string: element.commit.message}; + const temp = { date: new Date(element.commit.author.date).toDateString(), string: element.commit.message }; changeLogArray.push(temp); j++; } @@ -88,6 +88,6 @@ let contributorCommitMessages = function(topic, currentFileName){ console.log(changeLogArray); return changeLogArray; -} +}; export default contributorCommitMessages; \ No newline at end of file diff --git a/aries-site/src/layouts/content/UpdateTag.js b/aries-site/src/layouts/content/UpdateTag.js index f0116f9a9..5101bee0a 100644 --- a/aries-site/src/layouts/content/UpdateTag.js +++ b/aries-site/src/layouts/content/UpdateTag.js @@ -1,17 +1,17 @@ -import { Anchor, Notification } from "grommet"; -import contributorCommitMessages from "./ContributerCommitMessages"; -import { CircleInformation } from "grommet-icons"; +import { Anchor, Notification } from 'grommet'; +import { CircleInformation } from 'grommet-icons'; +import contributorCommitMessages from './ContributerCommitMessages'; -export let UpdateTag = ({ topic, currentFileName }) => { - //I had to re-run the fetch in this file because the API wasn't being called when I refreshed/changed guidances it in the parent Layout page - //It only seems to work when it is being re-ran here per page change? Hopefully I dont jinx it? - //Right now, I just grab the most recent commit, and send it out in the Notification component +export const UpdateTag = ({ topic, currentFileName }) => { + // I had to re-run the fetch in this file because the API wasn't being called when I refreshed/changed guidances it in the parent Layout page + // It only seems to work when it is being re-ran here per page change? Hopefully I dont jinx it? + // Right now, I just grab the most recent commit, and send it out in the Notification component const updateLog = contributorCommitMessages(topic, currentFileName); if(updateLog.length > 0){ const newDate = new Date(updateLog[0].date).toDateString(); const description = updateLog[0].string; return( - }/> - ) + }/> + ); } -} +}; diff --git a/aries-site/src/layouts/main/Layout.js b/aries-site/src/layouts/main/Layout.js index b7ddd9d74..980f75ab1 100644 --- a/aries-site/src/layouts/main/Layout.js +++ b/aries-site/src/layouts/main/Layout.js @@ -1,4 +1,3 @@ -import contributorCommitMessages from '../content/ContributerCommitMessages'; import React, { Fragment, useEffect, @@ -20,6 +19,7 @@ import { SkipLinks, Stack, } from 'grommet'; +import contributorCommitMessages from '../content/ContributerCommitMessages'; import { ContentSection, DocsPageHeader, @@ -68,12 +68,12 @@ export const Layout = ({ } = getPageDetails(titleProp); const layout = isLanding ? 'plain' : pageLayout; - let currentFileName = title?.toLowerCase().replace(/\s+/g, '').trim() + ".mdx"; - let newUpdate = true; - //^^ currently keeping this as true for running purposes - //the actual logic to solve this is stored in pageVisitTracker.js but it hasn't been connected yet - //let newUpdate = pageVisitTracker(title, currentFileName, topic); - //^^it will be this instead + const currentFileName = `${title?.toLowerCase().replace(/\s+/g, '').trim() }.mdx`; + const newUpdate = true; + // ^^ currently keeping this as true for running purposes + // the actual logic to solve this is stored in pageVisitTracker.js but it hasn't been connected yet + // let newUpdate = pageVisitTracker(title, currentFileName, topic); + // ^^it will be this instead const MainContentWrapper = isLanding ? Fragment : PageContent; const breakpoint = useContext(ResponsiveContext); @@ -193,9 +193,9 @@ export const Layout = ({ render={render} /> {newUpdate && - //newUpdate solved in above logic, determines if updateTag should be shown + // newUpdate solved in above logic, determines if updateTag should be shown - // + // } {children} diff --git a/aries-site/src/utils/pageVisitTracker.js b/aries-site/src/utils/pageVisitTracker.js index 68c338f38..a987a98fb 100644 --- a/aries-site/src/utils/pageVisitTracker.js +++ b/aries-site/src/utils/pageVisitTracker.js @@ -1,34 +1,34 @@ -import contributorCommitMessages from "../layouts/content/ContributerCommitMessages"; +import contributorCommitMessages from '../layouts/content/ContributerCommitMessages'; -//I haven't connected it just yet, but I would implement this in the ContentCard.js and Layout.js for the updateTag -let pageVisitTracker = function(title, currentFileName, topic){ - var dateTime = new Date().getTime(); - const tokenName = title?.toLowerCase().replace(/\s+/g,'-') + "-last-visited"; //the name associated with the values in localStorage +// I haven't connected it just yet, but I would implement this in the ContentCard.js and Layout.js for the updateTag +const pageVisitTracker = function(title, currentFileName, topic){ + const dateTime = new Date().getTime(); + const tokenName = `${title?.toLowerCase().replace(/\s+/g,'-') }-last-visited`; // the name associated with the values in localStorage let newUpdate; - let updateLog = contributorCommitMessages(currentFileName, topic); + const updateLog = contributorCommitMessages(currentFileName, topic); console.log(updateLog); - //add edge cases for the main catalog pages - //if the info already exists and it's not a main page we are on, then go ahead and check the next + // add edge cases for the main catalog pages + // if the info already exists and it's not a main page we are on, then go ahead and check the next if(window.localStorage.getItem(tokenName)){ - //if the time they last visited the page (minus 5 seconds to cover that weird refresh) is older than the most recent commit + // if the time they last visited the page (minus 5 seconds to cover that weird refresh) is older than the most recent commit if((window.localStorage.getItem(tokenName)) < new Date(updateLog[0].date).getTime()){ - newUpdate = true; //then show the update - }else{ //in the case where they have the token, but they have already seen the update + newUpdate = true; // then show the update + }else{ // in the case where they have the token, but they have already seen the update newUpdate = false; } - if(window.localStorage.getItem(tokenName) > new Date(now.getTime() - 5*1000)){ //if the most recent token is older than 5 seconds ago then set it, otherwise dont. this covers cases of the page refreshing a few times + if(window.localStorage.getItem(tokenName) > new Date(now.getTime() - 5*1000)){ // if the most recent token is older than 5 seconds ago then set it, otherwise dont. this covers cases of the page refreshing a few times window.localStorage.setItem(tokenName, dateTime); } - }else{ //in the case that they do not have the token - if(new Date(updateLog[0].date).getTime() > new Date(new Date().setDate(dateTime.getDate() - 30))){ //if it is been less than 30 days since the commit + }else{ // in the case that they do not have the token + if(new Date(updateLog[0].date).getTime() > new Date(new Date().setDate(dateTime.getDate() - 30))){ // if it is been less than 30 days since the commit newUpdate = true; - }else{ //if the most recent commit isn't new anymore + }else{ // if the most recent commit isn't new anymore newUpdate = false; } - window.localStorage.setItem(tokenName, dateTime);//set token + window.localStorage.setItem(tokenName, dateTime);// set token } return newUpdate; -} +}; export default pageVisitTracker; \ No newline at end of file From 024957285455f2647bee55d0946edabca677e199 Mon Sep 17 00:00:00 2001 From: beahackman Date: Mon, 24 Jul 2023 12:09:26 -0700 Subject: [PATCH 03/26] switching to PR method --- .../components/core/Identifier/Identifier.js | 11 +- .../src/components/cards/ContentCard.js | 30 +- aries-site/src/components/seo/Meta.js | 2 +- aries-site/src/layouts/content/ChangeLog.js | 3 +- .../content/ContributerCommitMessages.js | 269 ++++++++++++------ aries-site/src/layouts/content/UpdateTag.js | 46 ++- aries-site/src/layouts/content/fetchData.js | 48 ++++ aries-site/src/layouts/main/Layout.js | 16 +- aries-site/src/utils/pageVisitTracker.js | 8 +- 9 files changed, 290 insertions(+), 143 deletions(-) create mode 100644 aries-site/src/layouts/content/fetchData.js diff --git a/aries-core/src/js/components/core/Identifier/Identifier.js b/aries-core/src/js/components/core/Identifier/Identifier.js index 71eeb530f..4d002aedb 100644 --- a/aries-core/src/js/components/core/Identifier/Identifier.js +++ b/aries-core/src/js/components/core/Identifier/Identifier.js @@ -13,16 +13,15 @@ export const Identifier = ({ subTitle, size, updates, + type, ...rest }) => { const darkMode = useDarkMode(); - - //possible new spot to explore -> how to read if the entire component is new? AKA how to solve for that "new" variable on line 38 return( {children} - {updates && + {updates && (type === "Update") && } - {/* {new && + {updates && (type === "New") && - } */} + } { const { description, name, parent, preview, render } = topic; const darkMode = useDarkMode(); - const currentFileName = `${name?.toLowerCase().replace(/\s+/g, '').trim() }.mdx`; - // console.log("content card calling: "); - // console.log(topic.parent.name.toLowerCase()); - - // I recall the fetch so that all the components/templates/foundations and their commits are currently available as they load up - const cardUpdateLog = contributorCommitMessages(topic.parent.name.toLowerCase(), currentFileName); - const aYearAgo = new Date(new Date().setFullYear(new Date().getFullYear() - 1)).getTime(); - let newUpdate; - - // I'm at a point where the localStorage logic isn't implemented yet - // so this is temporarily checking if it has been a year since the commit - // if it has happened within a year, then it will show the "updated" tag on the page - // once pageVisitTracker.js is embedded the function will be solved here to find "newUpdates" - // let newUpdates = pageVisitTracker(name?, currentFileName, topic.parent.name.toLowerCase()); - // I would then be able to delete lines 19 & 20 - if(cardUpdateLog[0]){ - if(aYearAgo < new Date(cardUpdateLog[0].date).getTime()){ - newUpdate = true; - }else{ - newUpdate = false; - } + const history = JSON.parse(window.localStorage.getItem("update-history")); + let newUpdate, type; + if(name in history){ + newUpdate = history[name].update; + type = history[name].type; + }else{ + newUpdate = false; } return ( @@ -74,6 +59,7 @@ export const ContentCard = forwardRef( gap="xsmall" level={level} updates={newUpdate} + type={type} > {parent && parent.icon && !minimal && ( diff --git a/aries-site/src/components/seo/Meta.js b/aries-site/src/components/seo/Meta.js index 609a76f6e..885b9f514 100644 --- a/aries-site/src/components/seo/Meta.js +++ b/aries-site/src/components/seo/Meta.js @@ -19,7 +19,7 @@ export const Meta = ({ const pageContent = 'products'; const csp = `default-src 'self' 'unsafe-eval'; style-src 'self' *.hpe.com/hfws-static/5/css/ 'unsafe-inline'; - connect-src 'self' *.githubusercontent.com/grommet/hpe-design-system/ https://api.github.com/repos/grommet/hpe-design-system/commits https://api.github.com/repos/grommet/hpe-design-system/commits/ https://www.google-analytics.com https://www.github.com/grommet/ https://eyes.applitools.com *.hpe.com/hpe/api/ https://ca1.qualtrics.com/API/v3/surveys/ https://api.spacexdata.com/; + connect-src 'self' *.githubusercontent.com/grommet/hpe-design-system/ https://api.github.com/repos/grommet/hpe-design-system/pulls?state=closed https://api.github.com/repos/grommet/hpe-design-system/commits https://api.github.com/repos/grommet/hpe-design-system/commits/ https://www.google-analytics.com https://www.github.com/grommet/ https://eyes.applitools.com *.hpe.com/hpe/api/ https://ca1.qualtrics.com/API/v3/surveys/ https://api.spacexdata.com/; media-src 'self' https://d3hq6blov2iije.cloudfront.net/media/; img-src 'self' data: https://www.google-analytics.com https://images.unsplash.com/ http://s.gravatar.com/avatar/ *.hpe.com/hfws-static/5/ https://d3hq6blov2iije.cloudfront.net/images/textures/ https://d3hq6blov2iije.cloudfront.net/images/gradients/ https://d3hq6blov2iije.cloudfront.net/images/hpe-greenlake/; script-src 'self' *.hpe.com https://www.google-analytics.com/analytics.js https://netlify-cdp-loader.netlify.app/netlify.js ${ diff --git a/aries-site/src/layouts/content/ChangeLog.js b/aries-site/src/layouts/content/ChangeLog.js index b2b000479..1ea3bcbf1 100644 --- a/aries-site/src/layouts/content/ChangeLog.js +++ b/aries-site/src/layouts/content/ChangeLog.js @@ -5,8 +5,7 @@ import { Text, } from 'grommet'; - -// I set up if we wanted to go ahead with it in the future! +//NEED TO FIX ACCORDING TO NEW PR METHOD export const ChangeLog = ({ currentFileName, topic } ) => { const updateLog = contributorCommitMessages(topic, currentFileName); // console.log(updateLog); diff --git a/aries-site/src/layouts/content/ContributerCommitMessages.js b/aries-site/src/layouts/content/ContributerCommitMessages.js index dcd404b07..8688ea458 100644 --- a/aries-site/src/layouts/content/ContributerCommitMessages.js +++ b/aries-site/src/layouts/content/ContributerCommitMessages.js @@ -4,90 +4,191 @@ import { useEffect, useState } from 'react'; // I saw online that a few people were having problems fetching inside the useEffect // so there is another way I'm going to try out after I send you this branch -const contributorCommitMessages = function(topic, currentFileName){ - console.log( `${topic }: ${ currentFileName}` ); - const [contrMsgs, setContributorMessages] = useState([]); - const [error, setError] = useState(null); - - useEffect(() => { - // this fetchData is grabbing the list of commits that have affected the file in total, this has the author/date/message informaiton we need - // this also has a url in the object, which will fetch more info about the commit in general, that is the fetchFile() thing I did below - async function fetchData(){ - try{ - // console.log('1') - const response = await fetch(`https://api.github.com/repos/grommet/hpe-design-system/commits?path=aries-site/src/pages/${topic}/${currentFileName}`); - if (!response.ok) { - throw new Error(`Failed to fetch data: ${response.status} ${response.statusText}`); - } - const data = await response.json(); - if (!Array.isArray(data)) { - throw new Error(`Invalid data format: expected an array, got ${typeof data}`); - } - setContributorMessages(data); - // console.log('A', data); - }catch (error) { - setError(`here${ error.message}`); - } - } - - - // this fetch file part is going to grab more of the relevant information if we wanted to evolve it into showing which sections the changes are in - // i call it iteratively through the commits that affected the current file in fetchData() - // if we dont end up doing the part where we point out the sections there had been changes, i could remove this entirely - // ^^that would also lessen the total fetches by like 60% so we defintely wouldn't have those API rate issues, because with this currently, I'm still not even running into the limiter - async function fetchFile(i){ - try{ - // console.log('2') - const newRes = await fetch(`${contrMsgs[i].url}`); - if(!newRes.ok){ - throw new Error(`Failed to fetch new data: ${newRes.status} ${newRes.statusText}`); - } - const fileData = await newRes.json(); - - // i made a temporary array of objects, this one mimics the commit list i got from fetchData - // but directly adds the string with the line-by-line changes in it, so I dont have to go through all the calls again to grab the string - const temp = contrMsgs; - fileData.files.forEach(element => { - if(element.filename.slice(-currentFileName.length) === currentFileName){ - temp[i].change = element.patch; - } - }); - // console.log('HI', temp); - setContributorMessages(temp); - }catch(error){ - setError(`over here${ error.message}`); - } - } - - fetchData(); + +//*****TRY/CATCH ATTEMPT FOR COMMITS AND PATCHES***** +// const contributorCommitMessages = function(topic, currentFileName){ +// console.log( `${topic }: ${ currentFileName}` ); +// const [contrMsgs, setContributorMessages] = useState([]); +// const [error, setError] = useState(null); + +// useEffect(() => { +// // this fetchData is grabbing the list of commits that have affected the file in total, this has the author/date/message informaiton we need +// // this also has a url in the object, which will fetch more info about the commit in general, that is the fetchFile() thing I did below +// async function fetchData(){ +// try{ +// // console.log('1') +// const response = await fetch(`https://api.github.com/repos/grommet/hpe-design-system/commits?path=aries-site/src/pages/${topic}/${currentFileName}`); +// if (!response.ok) { +// throw new Error(`Failed to fetch data: ${response.status} ${response.statusText}`); +// } +// const data = await response.json(); +// if (!Array.isArray(data)) { +// throw new Error(`Invalid data format: expected an array, got ${typeof data}`); +// } +// setContributorMessages(data); +// // console.log('A', data); +// }catch (error) { +// setError(`here${ error.message}`); +// } +// } + + +// // this fetch file part is going to grab more of the relevant information if we wanted to evolve it into showing which sections the changes are in +// // i call it iteratively through the commits that affected the current file in fetchData() +// // if we dont end up doing the part where we point out the sections there had been changes, i could remove this entirely +// // ^^that would also lessen the total fetches by like 60% so we defintely wouldn't have those API rate issues, because with this currently, I'm still not even running into the limiter +// // async function fetchFile(i){ +// // try{ +// // // console.log('2') +// // const newRes = await fetch(`${contrMsgs[i].url}`); +// // if(!newRes.ok){ +// // throw new Error(`Failed to fetch new data: ${newRes.status} ${newRes.statusText}`); +// // } +// // const fileData = await newRes.json(); + +// // // i made a temporary array of objects, this one mimics the commit list i got from fetchData +// // // but directly adds the string with the line-by-line changes in it, so I dont have to go through all the calls again to grab the string +// // const temp = contrMsgs; +// // fileData.files.forEach(element => { +// // if(element.filename.slice(-currentFileName.length) === currentFileName){ +// // temp[i].change = element.patch; +// // } +// // }); +// // // console.log('HI', temp); +// // setContributorMessages(temp); +// // }catch(error){ +// // setError(`over here${ error.message}`); +// // } +// // } + +// fetchData(); - for(let i=0; i { - // i dont push the line-by-line into these objects when we decided not to do the sections, but if we were to add that I would add it here - // because it is already in contrMsgs at this point - const oneYearAgo = new Date(new Date().setFullYear(new Date().getFullYear() - 1)).getTime(); - const commitDate = new Date(element.commit.author.date).getTime(); - if(commitDate > oneYearAgo){ - const temp = { date: new Date(element.commit.author.date).toDateString(), string: element.commit.message }; - changeLogArray.push(temp); - j++; - } - }); - - console.log(changeLogArray); - return changeLogArray; -}; - -export default contributorCommitMessages; \ No newline at end of file +// }, []); + +// // I make one more array but it only reflects the commits that have happened within the current past year this is the one I return +// // Limiting it to a year is so that it can quickly be added to a Change Log if we decide to implement it +// // In summary it holds an array of objects: each object with the commit time, author, message, and (possibly) a string of changes +// const changeLogArray = []; +// let j = 0; +// contrMsgs.forEach(element => { +// // i dont push the line-by-line into these objects when we decided not to do the sections, but if we were to add that I would add it here +// // because it is already in contrMsgs at this point +// const oneYearAgo = new Date(new Date().setFullYear(new Date().getFullYear() - 1)).getTime(); +// const commitDate = new Date(element.commit.author.date).getTime(); +// if(commitDate > oneYearAgo){ +// const temp = { date: new Date(element.commit.author.date).toDateString(), string: element.commit.message }; +// changeLogArray.push(temp); +// j++; +// } +// }); + +// console.log(changeLogArray); +// return changeLogArray; +// }; + + +//*****STANDARD FUNCTION ATTEMPT FOR COMMITS***** +// const contributorCommitMessages = function(topic, currentFileName){ +// console.log( `${topic}: ${currentFileName}` ); +// const [contrMsgs, setContributorMessages] = useState([]); +// const [error, setError] = useState(null); + +// useEffect(() => { +// const fetchData = async () => { +// const response = await fetch(`https://api.github.com/repos/grommet/hpe-design-system/commits?path=aries-site/src/pages/${topic}/${currentFileName}`); +// if (!response.ok) { +// throw new Error(`Failed to fetch data: ${response.status} ${response.statusText}`); +// } +// const data = await response.json(); +// if (!Array.isArray(data)) { +// throw new Error(`Invalid data format: expected an array, got ${typeof data}`); +// } +// setContributorMessages(data); +// } +// fetchData().catch(console.error); +// }, []); + + +// const changeLogArray = []; +// let j = 0; +// contrMsgs.forEach(element => { +// const oneYearAgo = new Date(new Date().setFullYear(new Date().getFullYear() - 1)).getTime(); +// const commitDate = new Date(element.commit.author.date).getTime(); +// if(commitDate > oneYearAgo){ +// const temp = { date: new Date(element.commit.author.date).toDateString(), string: element.commit.message }; +// changeLogArray.push(temp); +// j++; +// } +// }); + +// console.log(changeLogArray); +// return changeLogArray; +// }; + + +//*****THEN AND CATCH ATTEMPT FOR COMMITS***** +// const contributorCommitMessages = function(topic, currentFileName){ +// const [contrMsgs, setContributorMessages] = useState([]); +// useEffect(() => { +// fetch(`https://api.github.com/repos/grommet/hpe-design-system/commits?path=aries-site/src/pages/${topic}/${currentFileName}`, +// { headers: { +// 'Accept' : 'application/vnd.github.v3+json' +// }}) +// .then(response => response.json()) +// .then(data => { +// setContributorMessages(data); +// const changeLogArray = []; +// let j = 0; +// contrMsgs.forEach(element => { +// const oneYearAgo = new Date(new Date().setFullYear(new Date().getFullYear() - 1)).getTime(); +// const commitDate = new Date(element.commit.author.date).getTime(); +// if(commitDate > oneYearAgo){ +// const temp = { date: new Date(element.commit.author.date).toDateString(), string: element.commit.message }; +// changeLogArray.push(temp); +// j++; +// } +// }); +// console.log(changeLogArray); +// return changeLogArray; +// }) +// .catch(error => console.error(error)); +// }) +// } + + +//*****OCTOKIT ATTEMPT FOR PR'S***** +// import { Octokit } from "@octokit/rest"; + +// const octokit = new Octokit({ +// auth: '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', +// }); + +// const owner = 'grommet'; +// const repo = 'hpe-design-system'; +// const url = '/repos/{owner}/{repo}/{path}'; +// const ref = 'heads/master'; + +// const getContents = async () => { +// const { data } = await octokit.request('GET /repos/{owner}/{repo}/pulls', { +// owner: 'grommet', +// repo: 'hpe-design-system', +// headers: { +// 'X-GitHub-Api-Version': '2022-11-28' +// }, +// state: 'closed', +// }); +// console.log(data); +// } + +// getContents(); + + + + +//export default contributorCommitMessages; \ No newline at end of file diff --git a/aries-site/src/layouts/content/UpdateTag.js b/aries-site/src/layouts/content/UpdateTag.js index 5101bee0a..2cc533a1c 100644 --- a/aries-site/src/layouts/content/UpdateTag.js +++ b/aries-site/src/layouts/content/UpdateTag.js @@ -1,17 +1,37 @@ -import { Anchor, Notification } from 'grommet'; +import { Anchor, Text, Notification } from 'grommet'; import { CircleInformation } from 'grommet-icons'; -import contributorCommitMessages from './ContributerCommitMessages'; -export const UpdateTag = ({ topic, currentFileName }) => { - // I had to re-run the fetch in this file because the API wasn't being called when I refreshed/changed guidances it in the parent Layout page - // It only seems to work when it is being re-ran here per page change? Hopefully I dont jinx it? - // Right now, I just grab the most recent commit, and send it out in the Notification component - const updateLog = contributorCommitMessages(topic, currentFileName); - if(updateLog.length > 0){ - const newDate = new Date(updateLog[0].date).toDateString(); - const description = updateLog[0].string; - return( - }/> - ); +export const UpdateTag = ({name}) => { + const history = JSON.parse(window.localStorage.getItem("update-history")); + let newUpdate; + if(name in history){ + newUpdate = history[name].update; + }else{ + newUpdate = false; } + let link = history[name].action; + return( + <> + {newUpdate && + + {history[name].description} + {history[name].action && + + //WARNING!! depending on what the devs tell us, this is assuming they give us a link to the section + //this will re-route them to the actual HPE site and not the local host so it's a little funky right now on a localHost + //another way we could do an action button: they give us the name of the section changed, and i write a little function + //to turn it into proper href formatting and I can take them there from that + //however, this would rely on the devs perfect spelling/spacing of the title for it to work properly + //and i think accuracy is more achievable from a link + } + + } + margin={{ bottom: 'medium' }} icon={} + /> + } + + ); }; diff --git a/aries-site/src/layouts/content/fetchData.js b/aries-site/src/layouts/content/fetchData.js new file mode 100644 index 000000000..cc0bda9de --- /dev/null +++ b/aries-site/src/layouts/content/fetchData.js @@ -0,0 +1,48 @@ +const fetchData = function(){ + let thirtyDaysAgo = new Date().getTime() - (30 * 24 * 60 * 60 * 1000); + fetch(`https://api.github.com/repos/grommet/hpe-design-system/pulls?state=closed`) + .then(response => response.json()) + .then(data => { + //console.log(data); + let tempHistory = {}; + for(let i=0; i console.error(error)); +} + +export default fetchData; \ No newline at end of file diff --git a/aries-site/src/layouts/main/Layout.js b/aries-site/src/layouts/main/Layout.js index 980f75ab1..0befecd98 100644 --- a/aries-site/src/layouts/main/Layout.js +++ b/aries-site/src/layouts/main/Layout.js @@ -19,7 +19,6 @@ import { SkipLinks, Stack, } from 'grommet'; -import contributorCommitMessages from '../content/ContributerCommitMessages'; import { ContentSection, DocsPageHeader, @@ -41,6 +40,7 @@ import { Config } from '../../../config'; import { getRelatedContent, getPageDetails } from '../../utils'; import { siteContents } from '../../data/search/contentForSearch'; import { UpdateTag } from '../content/UpdateTag'; +import fetchData from '../content/fetchData'; export const Layout = ({ backgroundImage, @@ -68,13 +68,6 @@ export const Layout = ({ } = getPageDetails(titleProp); const layout = isLanding ? 'plain' : pageLayout; - const currentFileName = `${title?.toLowerCase().replace(/\s+/g, '').trim() }.mdx`; - const newUpdate = true; - // ^^ currently keeping this as true for running purposes - // the actual logic to solve this is stored in pageVisitTracker.js but it hasn't been connected yet - // let newUpdate = pageVisitTracker(title, currentFileName, topic); - // ^^it will be this instead - const MainContentWrapper = isLanding ? Fragment : PageContent; const breakpoint = useContext(ResponsiveContext); const [open, setOpen] = useState(false); @@ -137,6 +130,7 @@ export const Layout = ({ { id: 'main', label: 'Main Content' }, ].filter(link => link !== undefined); + fetchData(); return ( <> {/* When a backgroundImage is present, the main page content becomes @@ -192,11 +186,7 @@ export const Layout = ({ topic={topic} render={render} /> - {newUpdate && - // newUpdate solved in above logic, determines if updateTag should be shown - - // - } + {children} {/* */} diff --git a/aries-site/src/utils/pageVisitTracker.js b/aries-site/src/utils/pageVisitTracker.js index a987a98fb..b51b5e5fb 100644 --- a/aries-site/src/utils/pageVisitTracker.js +++ b/aries-site/src/utils/pageVisitTracker.js @@ -1,5 +1,5 @@ import contributorCommitMessages from '../layouts/content/ContributerCommitMessages'; - +//NOT FUNCTIONAL WITH THE PR METHOD YET, THIS IS WHAT I'M WORKING ON NOW // I haven't connected it just yet, but I would implement this in the ContentCard.js and Layout.js for the updateTag const pageVisitTracker = function(title, currentFileName, topic){ const dateTime = new Date().getTime(); @@ -20,7 +20,11 @@ const pageVisitTracker = function(title, currentFileName, topic){ if(window.localStorage.getItem(tokenName) > new Date(now.getTime() - 5*1000)){ // if the most recent token is older than 5 seconds ago then set it, otherwise dont. this covers cases of the page refreshing a few times window.localStorage.setItem(tokenName, dateTime); } - }else{ // in the case that they do not have the token + }else if(updateLog.length === 0){ + console.log("here!"); + newUpdate=false; + } + else{ // in the case that they do not have the token if(new Date(updateLog[0].date).getTime() > new Date(new Date().setDate(dateTime.getDate() - 30))){ // if it is been less than 30 days since the commit newUpdate = true; }else{ // if the most recent commit isn't new anymore From b4446b872cd17735d2d94d06ce793cbe0c4141b8 Mon Sep 17 00:00:00 2001 From: beahackman Date: Thu, 27 Jul 2023 15:26:50 -0700 Subject: [PATCH 04/26] added visitation tracking, search tags, and nav tags --- aries-site/next.config.mjs | 2 +- aries-site/package.json | 2 + .../src/components/cards/ContentCard.js | 13 ++-- aries-site/src/components/seo/Meta.js | 2 +- .../src/layouts/content/InPageNavigation.js | 27 ++++++- aries-site/src/layouts/content/UpdateTag.js | 75 ++++++++++++++----- aries-site/src/layouts/content/fetchData.js | 32 +++++--- aries-site/src/layouts/main/Layout.js | 20 ++++- .../src/layouts/navigation/SearchResult.js | 52 ++++++++++++- aries-site/src/pages/_app.js | 17 ++++- aries-site/src/utils/pageVisitTracker.js | 48 +++++------- yarn.lock | 34 +++++++++ 12 files changed, 253 insertions(+), 71 deletions(-) diff --git a/aries-site/next.config.mjs b/aries-site/next.config.mjs index ef44a4800..d4c574101 100644 --- a/aries-site/next.config.mjs +++ b/aries-site/next.config.mjs @@ -18,7 +18,7 @@ const nextConfig = { // Configure pageExtensions to include md and mdx pageExtensions: ['js', 'jsx', 'md', 'mdx'], // Any other Next.js config options - reactStrictMode: true, + reactStrictMode: false, compiler: { styledComponents: true, }, diff --git a/aries-site/package.json b/aries-site/package.json index db35f7821..956fbeb2c 100644 --- a/aries-site/package.json +++ b/aries-site/package.json @@ -10,8 +10,10 @@ "@mdx-js/react": "^2.3.0", "@next/mdx": "^13.4.4", "aries-core": "*", + "history": "^5.3.0", "next": "13.4.4", "react-ga": "^2.7.0", + "react-router-dom": "^6.14.2", "react-syntax-highlighter": "^15.4.4", "remark-gfm": "^3.0.1", "universal-cookie": "^4.0.4" diff --git a/aries-site/src/components/cards/ContentCard.js b/aries-site/src/components/cards/ContentCard.js index c4b3e3008..5d40dccdc 100644 --- a/aries-site/src/components/cards/ContentCard.js +++ b/aries-site/src/components/cards/ContentCard.js @@ -5,6 +5,7 @@ import { Identifier } from 'aries-core'; import { PreviewImageCard } from './PreviewCard'; import { LinkCard } from './LinkCard'; import { useDarkMode } from '../../utils'; +import pageVisitTracker from '../../utils/pageVisitTracker'; export const ContentCard = forwardRef( ({ level, topic, minimal, ...rest }, ref) => { @@ -12,11 +13,13 @@ export const ContentCard = forwardRef( const darkMode = useDarkMode(); const history = JSON.parse(window.localStorage.getItem("update-history")); let newUpdate, type; - if(name in history){ - newUpdate = history[name].update; - type = history[name].type; - }else{ - newUpdate = false; + if(history){ + if(name in history){ + newUpdate = pageVisitTracker(name); + type = history[name].type; + }else{ + newUpdate = false; + } } return ( diff --git a/aries-site/src/components/seo/Meta.js b/aries-site/src/components/seo/Meta.js index 885b9f514..58231bded 100644 --- a/aries-site/src/components/seo/Meta.js +++ b/aries-site/src/components/seo/Meta.js @@ -19,7 +19,7 @@ export const Meta = ({ const pageContent = 'products'; const csp = `default-src 'self' 'unsafe-eval'; style-src 'self' *.hpe.com/hfws-static/5/css/ 'unsafe-inline'; - connect-src 'self' *.githubusercontent.com/grommet/hpe-design-system/ https://api.github.com/repos/grommet/hpe-design-system/pulls?state=closed https://api.github.com/repos/grommet/hpe-design-system/commits https://api.github.com/repos/grommet/hpe-design-system/commits/ https://www.google-analytics.com https://www.github.com/grommet/ https://eyes.applitools.com *.hpe.com/hpe/api/ https://ca1.qualtrics.com/API/v3/surveys/ https://api.spacexdata.com/; + connect-src 'self' *.githubusercontent.com/grommet/hpe-design-system/ https://api.github.com/repos/grommet/hpe-design-system/pulls https://api.github.com/repos/grommet/hpe-design-system/commits https://www.google-analytics.com https://www.github.com/grommet/ https://eyes.applitools.com *.hpe.com/hpe/api/ https://ca1.qualtrics.com/API/v3/surveys/ https://api.spacexdata.com/; media-src 'self' https://d3hq6blov2iije.cloudfront.net/media/; img-src 'self' data: https://www.google-analytics.com https://images.unsplash.com/ http://s.gravatar.com/avatar/ *.hpe.com/hfws-static/5/ https://d3hq6blov2iije.cloudfront.net/images/textures/ https://d3hq6blov2iije.cloudfront.net/images/gradients/ https://d3hq6blov2iije.cloudfront.net/images/hpe-greenlake/; script-src 'self' *.hpe.com https://www.google-analytics.com/analytics.js https://netlify-cdp-loader.netlify.app/netlify.js ${ diff --git a/aries-site/src/layouts/content/InPageNavigation.js b/aries-site/src/layouts/content/InPageNavigation.js index e5d94221e..d08c014c6 100644 --- a/aries-site/src/layouts/content/InPageNavigation.js +++ b/aries-site/src/layouts/content/InPageNavigation.js @@ -4,6 +4,7 @@ import PropTypes from 'prop-types'; import { Box, Button, Nav, Text } from 'grommet'; import styled, { ThemeContext } from 'styled-components'; import { nameToSlug } from '../../utils'; +import { Upgrade } from 'grommet-icons'; const SectionButton = styled(Button)` border-radius: 0 ${props => props.theme.global.edgeSize.xsmall} @@ -44,7 +45,7 @@ const useActiveHeadingId = (headings, options) => { return activeHeadingId; }; -export const InPageNavigation = ({ headings }) => { +export const InPageNavigation = ({ headings, title }) => { const theme = useContext(ThemeContext); let { large, medium } = theme.global.edgeSize; @@ -61,6 +62,8 @@ export const InPageNavigation = ({ headings }) => { // align "Jump to section" with page title at start const marginTop = `${large + medium}px`; + const history = JSON.parse(window.localStorage.getItem("update-history")); + return ( { if (level.length > 3) subsectionPad = 'large'; else if (level.length === 3) subsectionPad = 'medium'; + //LOGIC FOR UPDATED SECTION TAGS + let sectionList; + let newUpdate = false; + + if(history){ + if(title in history){ + if(history[title].update && (history[title].sections[0].length > 0)){ + //to see if the update should be shown and if there are sections reported + sectionList = history[title].sections; + Object.values(sectionList).forEach(val => { + if(val === headingTitle){ //since we are already mapping through the section titles, for each title, check if there is one with a reported update in the history + newUpdate = true; + } + }); + } + } + } + //console.log("here"); return ( @@ -123,10 +144,14 @@ export const InPageNavigation = ({ headings }) => { ? undefined : { left: theme.global.borderSize.small } } + direction='row' + align='center' + gap='small' > {headingTitle} + {newUpdate && } diff --git a/aries-site/src/layouts/content/UpdateTag.js b/aries-site/src/layouts/content/UpdateTag.js index 2cc533a1c..7b2cffb4d 100644 --- a/aries-site/src/layouts/content/UpdateTag.js +++ b/aries-site/src/layouts/content/UpdateTag.js @@ -1,32 +1,71 @@ import { Anchor, Text, Notification } from 'grommet'; import { CircleInformation } from 'grommet-icons'; +import pageVisitTracker from '../../utils/pageVisitTracker'; +import { createBrowserHistory } from 'history'; export const UpdateTag = ({name}) => { - const history = JSON.parse(window.localStorage.getItem("update-history")); - let newUpdate; - if(name in history){ - newUpdate = history[name].update; - }else{ - newUpdate = false; + const viewHistory = JSON.parse(window.localStorage.getItem("update-history")); + const tokenName = `${name?.toLowerCase().replace(/\s+/g,'-') }-last-visited`; + const dateTime = new Date().getTime(); + let newUpdate, actionLink; + + //In general, I decided to keep the logic for tracking visitation in the updateTag + //I did this because I ran into a lot of bugs with having it in Layout.js (trying to track data for parent pages and needing to communicate with content card) + //so narrowing it down to this component (that will always be shown when there's an update) worked the best in this case + if(viewHistory){ + if(name in viewHistory){ + let history = createBrowserHistory(); + + if(history.location.hash.length === 0 && history.location.search.length === 0){ + //if we are on a guidance w/ no hash or query in the URL + //this is the case when people enter the page for the first time that session (assuming they don't refresh the page) + newUpdate = pageVisitTracker(name); //check if they've seen it before + actionLink = viewHistory[name].action; //grab the section link + + //since it is their first time in this session viewing the page (assuming they don't refresh the page), now store the information + window.localStorage.setItem(tokenName, dateTime); //holds the most recent viewing time + viewHistory[name].update = newUpdate; //sets the "update state" for the component in overarching update-history + window.localStorage.setItem("update-history", JSON.stringify(viewHistory)); + //^^this allows for easy access across other components that need to access it in strange cases (like the refresh in the internal navigation) + }else{ + //the case where they have come to the page, but it refreshes it with a hash added to the link via the sideNav bar + //it keeps the pre-established update state in the general "update-history" from when they first came on the page + //this is the part that keeps the inline notif and sidebar navigation as they internally navigate the page + newUpdate = viewHistory[name].update; + //^^grab it from the previously stated update state + //^^trying to use the pageVisitTracker function in this case would grab the most recent visit, say it's been seen, and report that the update shouldnt be shown (and it should be shown) + actionLink = viewHistory[name].action; + } + }else{ + newUpdate = false; + } } - let link = history[name].action; + return( <> - {newUpdate && + {newUpdate && (viewHistory[name].type === "Update") && - {history[name].description} - {history[name].action && - - //WARNING!! depending on what the devs tell us, this is assuming they give us a link to the section - //this will re-route them to the actual HPE site and not the local host so it's a little funky right now on a localHost - //another way we could do an action button: they give us the name of the section changed, and i write a little function - //to turn it into proper href formatting and I can take them there from that - //however, this would rely on the devs perfect spelling/spacing of the title for it to work properly - //and i think accuracy is more achievable from a link + {viewHistory[name].description + " "} + {viewHistory[name].action.length > 1 && + } + + + } + margin={{ bottom: 'medium' }} icon={} + /> + } + {newUpdate && (viewHistory[name].type === "New") && + + + This item is new. Let the Design Systems team know if you have any feedback. + } margin={{ bottom: 'medium' }} icon={} diff --git a/aries-site/src/layouts/content/fetchData.js b/aries-site/src/layouts/content/fetchData.js index cc0bda9de..e69f778f4 100644 --- a/aries-site/src/layouts/content/fetchData.js +++ b/aries-site/src/layouts/content/fetchData.js @@ -3,7 +3,7 @@ const fetchData = function(){ fetch(`https://api.github.com/repos/grommet/hpe-design-system/pulls?state=closed`) .then(response => response.json()) .then(data => { - //console.log(data); + console.log("FETCHINGG"); let tempHistory = {}; for(let i=0; i console.error(error)); } diff --git a/aries-site/src/layouts/main/Layout.js b/aries-site/src/layouts/main/Layout.js index 0befecd98..765a73e5e 100644 --- a/aries-site/src/layouts/main/Layout.js +++ b/aries-site/src/layouts/main/Layout.js @@ -40,7 +40,8 @@ import { Config } from '../../../config'; import { getRelatedContent, getPageDetails } from '../../utils'; import { siteContents } from '../../data/search/contentForSearch'; import { UpdateTag } from '../content/UpdateTag'; -import fetchData from '../content/fetchData'; +import pageVisitTracker from '../../utils/pageVisitTracker'; +import { createMemoryHistory } from "history"; export const Layout = ({ backgroundImage, @@ -49,6 +50,16 @@ export const Layout = ({ topic, isLanding, }) => { + + // let history = createMemoryHistory(); + // console.log(history.location); + // history.listen(({ action, location }) => { + // console.log( + // `The current URL is ${location.pathname}${location.search}${location.hash}` + // ); + // console.log(`The last navigation action was ${action}`); + // }); + useEffect(() => { if (Config.gaId) { initialize(Config.gaId); @@ -130,7 +141,10 @@ export const Layout = ({ { id: 'main', label: 'Main Content' }, ].filter(link => link !== undefined); - fetchData(); + if(window.localStorage.getItem("update-history")){ + pageVisitTracker(title); + } + //console.log(title + " " + window.localStorage.getItem(`${title?.toLowerCase().replace(/\s+/g,'-')}-last-visited`)) return ( <> {/* When a backgroundImage is present, the main page content becomes @@ -168,7 +182,7 @@ export const Layout = ({ {showInPageNav ? ( - + ) : undefined} { const hub = result.url && result.url.split('/')[1]; const parent = getPageDetails(hub); + const history = JSON.parse(window.localStorage.getItem("update-history")); + let newUpdate, type; + if(result.title in history){ + newUpdate = pageVisitTracker(result.title); + type = history[result.title].type; + }else{ + newUpdate = false; + } + return ( <> @@ -20,11 +32,49 @@ export const SearchResult = ({ query, result }) => { )} {result.title && ( + {result.title} + {newUpdate && (type === 'New') && + + } + {newUpdate && (type === 'Update') && + + } + )} {result.matches?.length > 0 ? ( diff --git a/aries-site/src/pages/_app.js b/aries-site/src/pages/_app.js index 7d609ee52..7eace1388 100644 --- a/aries-site/src/pages/_app.js +++ b/aries-site/src/pages/_app.js @@ -3,6 +3,8 @@ import PropTypes from 'prop-types'; import React, { useEffect } from 'react'; import { Layout, ThemeMode } from '../layouts'; import { components } from '../components'; +import fetchData from '../layouts/content/fetchData'; +import { createMemoryHistory } from 'history'; const slugToText = str => str.split('-').join(' '); @@ -53,6 +55,7 @@ const backgroundImages = { }, }; + /* _app.js allows for customizing Next.js's default component * Details: https://nextjs.org/docs/advanced-features/custom-app * @@ -62,6 +65,19 @@ const backgroundImages = { function App({ Component, pageProps, router }) { const route = router.route.split('/'); + useEffect(() => { + fetchData(); + }, []) + + // let history = createMemoryHistory(); + // console.log(history.location); + // history.listen(({ action, location }) => { + // console.log( + // `The current URL is ${location.pathname}${location.search}${location.hash}` + // ); + // console.log(`The last navigation action was ${action}`); + // }); + // necessary to ensure SkipLinks can receive first tab focus // after a route change useEffect(() => { @@ -88,7 +104,6 @@ function App({ Component, pageProps, router }) { route[route.length - 2] && route[route.length - 2].length && slugToText(route[route.length - 2]); - return ( new Date(now.getTime() - 5*1000)){ // if the most recent token is older than 5 seconds ago then set it, otherwise dont. this covers cases of the page refreshing a few times - window.localStorage.setItem(tokenName, dateTime); - } - }else if(updateLog.length === 0){ - console.log("here!"); - newUpdate=false; - } - else{ // in the case that they do not have the token - if(new Date(updateLog[0].date).getTime() > new Date(new Date().setDate(dateTime.getDate() - 30))){ // if it is been less than 30 days since the commit + let history = JSON.parse(window.localStorage.getItem("update-history")); + if(title in history){ //there has been a reported update within the last 30 days + if(window.localStorage.getItem(tokenName)){ //there has been a guaranteed update and we've seen this page before + if(window.localStorage.getItem(tokenName) > new Date(history[title].date).getTime()){ //when we've seen this page, has it been after the update? + //console.log("A"); + newUpdate = false; //this means that the page has a reported update within 30 days, it has been seen before, but they have already seen this update + }else{ + //console.log("B"); + newUpdate = true; //this means that the page has a reported update within 30 days, it has been seen before, and when it has been seen, it was before the update + } + }else{ //it's within 30 days but we have never seen the page before + //console.log("C"); newUpdate = true; - }else{ // if the most recent commit isn't new anymore - newUpdate = false; } - window.localStorage.setItem(tokenName, dateTime);// set token + }else{ + //console.log("D"); + newUpdate = false; //definitely no update, nothing reported in the PRs } - return newUpdate; + return newUpdate; }; export default pageVisitTracker; \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index f0b6910d1..44622a546 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1350,6 +1350,13 @@ dependencies: regenerator-runtime "^0.13.11" +"@babel/runtime@^7.7.6": + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.6.tgz#57d64b9ae3cff1d67eb067ae117dac087f5bd438" + integrity sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ== + dependencies: + regenerator-runtime "^0.13.11" + "@babel/template@^7.22.5", "@babel/template@^7.3.3": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.5.tgz#0c8c4d944509875849bd0344ff0050756eefc6ec" @@ -1882,6 +1889,11 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@remix-run/router@1.7.2": + version "1.7.2" + resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.7.2.tgz#cba1cf0a04bc04cb66027c51fa600e9cbc388bc8" + integrity sha512-7Lcn7IqGMV+vizMPoEl5F0XDshcdDYtMI6uJLQdQz5CfZAwy3vvGKYSUk789qndt5dEC4HfSjviSYlSoHGL2+A== + "@sideway/address@^4.1.3": version "4.1.4" resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.4.tgz#03dccebc6ea47fdc226f7d3d1ad512955d4783f0" @@ -5187,6 +5199,13 @@ highlight.js@^10.4.1, highlight.js@~10.7.0: resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531" integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A== +history@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/history/-/history-5.3.0.tgz#1548abaa245ba47992f063a0783db91ef201c73b" + integrity sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ== + dependencies: + "@babel/runtime" "^7.7.6" + hoist-non-react-statics@^3.0.0, hoist-non-react-statics@^3.2.0: version "3.3.2" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" @@ -8223,6 +8242,21 @@ react-is@^17.0.1: resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== +react-router-dom@^6.14.2: + version "6.14.2" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.14.2.tgz#88f520118b91aa60233bd08dbd3fdcaea3a68488" + integrity sha512-5pWX0jdKR48XFZBuJqHosX3AAHjRAzygouMTyimnBPOLdY3WjzUSKhus2FVMihUFWzeLebDgr4r8UeQFAct7Bg== + dependencies: + "@remix-run/router" "1.7.2" + react-router "6.14.2" + +react-router@6.14.2: + version "6.14.2" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.14.2.tgz#1f60994d8c369de7b8ba7a78d8f7ec23df76b300" + integrity sha512-09Zss2dE2z+T1D03IheqAFtK4UzQyX8nFPWx6jkwdYzGLXd5ie06A6ezS2fO6zJfEb/SpG6UocN2O1hfD+2urQ== + dependencies: + "@remix-run/router" "1.7.2" + react-syntax-highlighter@^15.4.4: version "15.5.0" resolved "https://registry.yarnpkg.com/react-syntax-highlighter/-/react-syntax-highlighter-15.5.0.tgz#4b3eccc2325fa2ec8eff1e2d6c18fa4a9e07ab20" From e484cb13371b0bdad788db6bfd821552a53b9c50 Mon Sep 17 00:00:00 2001 From: beahackman Date: Fri, 4 Aug 2023 14:15:51 -0700 Subject: [PATCH 05/26] fixed visitation tracking and revised sidebar nav --- aries-site/next.config.mjs | 2 +- .../content/ContributerCommitMessages.js | 194 ------------------ .../src/layouts/content/InPageNavigation.js | 26 ++- aries-site/src/layouts/content/UpdateTag.js | 100 +++------ aries-site/src/layouts/content/fetchData.js | 60 ------ aries-site/src/layouts/main/Layout.js | 30 ++- aries-site/src/pages/_app.js | 163 ++++++++++++--- aries-site/src/utils/pageVisitTracker.js | 4 - 8 files changed, 198 insertions(+), 381 deletions(-) delete mode 100644 aries-site/src/layouts/content/ContributerCommitMessages.js delete mode 100644 aries-site/src/layouts/content/fetchData.js diff --git a/aries-site/next.config.mjs b/aries-site/next.config.mjs index d4c574101..ef44a4800 100644 --- a/aries-site/next.config.mjs +++ b/aries-site/next.config.mjs @@ -18,7 +18,7 @@ const nextConfig = { // Configure pageExtensions to include md and mdx pageExtensions: ['js', 'jsx', 'md', 'mdx'], // Any other Next.js config options - reactStrictMode: false, + reactStrictMode: true, compiler: { styledComponents: true, }, diff --git a/aries-site/src/layouts/content/ContributerCommitMessages.js b/aries-site/src/layouts/content/ContributerCommitMessages.js deleted file mode 100644 index 8688ea458..000000000 --- a/aries-site/src/layouts/content/ContributerCommitMessages.js +++ /dev/null @@ -1,194 +0,0 @@ -import { useEffect, useState } from 'react'; - -// GENERAL NOTE: The useEffect to async-function-fetch thing is where there is likely a memory leak -// I saw online that a few people were having problems fetching inside the useEffect -// so there is another way I'm going to try out after I send you this branch - - -//*****TRY/CATCH ATTEMPT FOR COMMITS AND PATCHES***** -// const contributorCommitMessages = function(topic, currentFileName){ -// console.log( `${topic }: ${ currentFileName}` ); -// const [contrMsgs, setContributorMessages] = useState([]); -// const [error, setError] = useState(null); - -// useEffect(() => { -// // this fetchData is grabbing the list of commits that have affected the file in total, this has the author/date/message informaiton we need -// // this also has a url in the object, which will fetch more info about the commit in general, that is the fetchFile() thing I did below -// async function fetchData(){ -// try{ -// // console.log('1') -// const response = await fetch(`https://api.github.com/repos/grommet/hpe-design-system/commits?path=aries-site/src/pages/${topic}/${currentFileName}`); -// if (!response.ok) { -// throw new Error(`Failed to fetch data: ${response.status} ${response.statusText}`); -// } -// const data = await response.json(); -// if (!Array.isArray(data)) { -// throw new Error(`Invalid data format: expected an array, got ${typeof data}`); -// } -// setContributorMessages(data); -// // console.log('A', data); -// }catch (error) { -// setError(`here${ error.message}`); -// } -// } - - -// // this fetch file part is going to grab more of the relevant information if we wanted to evolve it into showing which sections the changes are in -// // i call it iteratively through the commits that affected the current file in fetchData() -// // if we dont end up doing the part where we point out the sections there had been changes, i could remove this entirely -// // ^^that would also lessen the total fetches by like 60% so we defintely wouldn't have those API rate issues, because with this currently, I'm still not even running into the limiter -// // async function fetchFile(i){ -// // try{ -// // // console.log('2') -// // const newRes = await fetch(`${contrMsgs[i].url}`); -// // if(!newRes.ok){ -// // throw new Error(`Failed to fetch new data: ${newRes.status} ${newRes.statusText}`); -// // } -// // const fileData = await newRes.json(); - -// // // i made a temporary array of objects, this one mimics the commit list i got from fetchData -// // // but directly adds the string with the line-by-line changes in it, so I dont have to go through all the calls again to grab the string -// // const temp = contrMsgs; -// // fileData.files.forEach(element => { -// // if(element.filename.slice(-currentFileName.length) === currentFileName){ -// // temp[i].change = element.patch; -// // } -// // }); -// // // console.log('HI', temp); -// // setContributorMessages(temp); -// // }catch(error){ -// // setError(`over here${ error.message}`); -// // } -// // } - -// fetchData(); - -// // for(let i=0; i { -// // i dont push the line-by-line into these objects when we decided not to do the sections, but if we were to add that I would add it here -// // because it is already in contrMsgs at this point -// const oneYearAgo = new Date(new Date().setFullYear(new Date().getFullYear() - 1)).getTime(); -// const commitDate = new Date(element.commit.author.date).getTime(); -// if(commitDate > oneYearAgo){ -// const temp = { date: new Date(element.commit.author.date).toDateString(), string: element.commit.message }; -// changeLogArray.push(temp); -// j++; -// } -// }); - -// console.log(changeLogArray); -// return changeLogArray; -// }; - - -//*****STANDARD FUNCTION ATTEMPT FOR COMMITS***** -// const contributorCommitMessages = function(topic, currentFileName){ -// console.log( `${topic}: ${currentFileName}` ); -// const [contrMsgs, setContributorMessages] = useState([]); -// const [error, setError] = useState(null); - -// useEffect(() => { -// const fetchData = async () => { -// const response = await fetch(`https://api.github.com/repos/grommet/hpe-design-system/commits?path=aries-site/src/pages/${topic}/${currentFileName}`); -// if (!response.ok) { -// throw new Error(`Failed to fetch data: ${response.status} ${response.statusText}`); -// } -// const data = await response.json(); -// if (!Array.isArray(data)) { -// throw new Error(`Invalid data format: expected an array, got ${typeof data}`); -// } -// setContributorMessages(data); -// } -// fetchData().catch(console.error); -// }, []); - - -// const changeLogArray = []; -// let j = 0; -// contrMsgs.forEach(element => { -// const oneYearAgo = new Date(new Date().setFullYear(new Date().getFullYear() - 1)).getTime(); -// const commitDate = new Date(element.commit.author.date).getTime(); -// if(commitDate > oneYearAgo){ -// const temp = { date: new Date(element.commit.author.date).toDateString(), string: element.commit.message }; -// changeLogArray.push(temp); -// j++; -// } -// }); - -// console.log(changeLogArray); -// return changeLogArray; -// }; - - -//*****THEN AND CATCH ATTEMPT FOR COMMITS***** -// const contributorCommitMessages = function(topic, currentFileName){ -// const [contrMsgs, setContributorMessages] = useState([]); -// useEffect(() => { -// fetch(`https://api.github.com/repos/grommet/hpe-design-system/commits?path=aries-site/src/pages/${topic}/${currentFileName}`, -// { headers: { -// 'Accept' : 'application/vnd.github.v3+json' -// }}) -// .then(response => response.json()) -// .then(data => { -// setContributorMessages(data); -// const changeLogArray = []; -// let j = 0; -// contrMsgs.forEach(element => { -// const oneYearAgo = new Date(new Date().setFullYear(new Date().getFullYear() - 1)).getTime(); -// const commitDate = new Date(element.commit.author.date).getTime(); -// if(commitDate > oneYearAgo){ -// const temp = { date: new Date(element.commit.author.date).toDateString(), string: element.commit.message }; -// changeLogArray.push(temp); -// j++; -// } -// }); -// console.log(changeLogArray); -// return changeLogArray; -// }) -// .catch(error => console.error(error)); -// }) -// } - - -//*****OCTOKIT ATTEMPT FOR PR'S***** -// import { Octokit } from "@octokit/rest"; - -// const octokit = new Octokit({ -// auth: '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', -// }); - -// const owner = 'grommet'; -// const repo = 'hpe-design-system'; -// const url = '/repos/{owner}/{repo}/{path}'; -// const ref = 'heads/master'; - -// const getContents = async () => { -// const { data } = await octokit.request('GET /repos/{owner}/{repo}/pulls', { -// owner: 'grommet', -// repo: 'hpe-design-system', -// headers: { -// 'X-GitHub-Api-Version': '2022-11-28' -// }, -// state: 'closed', -// }); -// console.log(data); -// } - -// getContents(); - - - - -//export default contributorCommitMessages; \ No newline at end of file diff --git a/aries-site/src/layouts/content/InPageNavigation.js b/aries-site/src/layouts/content/InPageNavigation.js index d08c014c6..c480f0952 100644 --- a/aries-site/src/layouts/content/InPageNavigation.js +++ b/aries-site/src/layouts/content/InPageNavigation.js @@ -4,7 +4,8 @@ import PropTypes from 'prop-types'; import { Box, Button, Nav, Text } from 'grommet'; import styled, { ThemeContext } from 'styled-components'; import { nameToSlug } from '../../utils'; -import { Upgrade } from 'grommet-icons'; +import { StatusGoodSmall } from 'grommet-icons'; +import { ViewContext } from '../../pages/_app'; const SectionButton = styled(Button)` border-radius: 0 ${props => props.theme.global.edgeSize.xsmall} @@ -62,7 +63,8 @@ export const InPageNavigation = ({ headings, title }) => { // align "Jump to section" with page title at start const marginTop = `${large + medium}px`; - const history = JSON.parse(window.localStorage.getItem("update-history")); + const {wholeViewHistory, status, setStatus} = useContext(ViewContext) || undefined; + return ( { if (level.length > 3) subsectionPad = 'large'; else if (level.length === 3) subsectionPad = 'medium'; - //LOGIC FOR UPDATED SECTION TAGS let sectionList; let newUpdate = false; - if(history){ - if(title in history){ - if(history[title].update && (history[title].sections[0].length > 0)){ + if(wholeViewHistory){ + if(title in wholeViewHistory){ + if(wholeViewHistory[title].update && (wholeViewHistory[title].sections[0].length > 0)){ //to see if the update should be shown and if there are sections reported - sectionList = history[title].sections; + sectionList = wholeViewHistory[title].sections; Object.values(sectionList).forEach(val => { - if(val === headingTitle){ //since we are already mapping through the section titles, for each title, check if there is one with a reported update in the history + if(val === headingTitle){ newUpdate = true; } }); } } } - //console.log("here"); return ( @@ -145,13 +145,17 @@ export const InPageNavigation = ({ headings, title }) => { : { left: theme.global.borderSize.small } } direction='row' - align='center' + align='top' gap='small' > {headingTitle} - {newUpdate && } + {newUpdate && + + + + } diff --git a/aries-site/src/layouts/content/UpdateTag.js b/aries-site/src/layouts/content/UpdateTag.js index 7b2cffb4d..036912a70 100644 --- a/aries-site/src/layouts/content/UpdateTag.js +++ b/aries-site/src/layouts/content/UpdateTag.js @@ -1,76 +1,42 @@ import { Anchor, Text, Notification } from 'grommet'; import { CircleInformation } from 'grommet-icons'; -import pageVisitTracker from '../../utils/pageVisitTracker'; -import { createBrowserHistory } from 'history'; +import { ViewContext } from '../../pages/_app'; +import { useContext } from 'react'; export const UpdateTag = ({name}) => { - const viewHistory = JSON.parse(window.localStorage.getItem("update-history")); - const tokenName = `${name?.toLowerCase().replace(/\s+/g,'-') }-last-visited`; - const dateTime = new Date().getTime(); - let newUpdate, actionLink; - - //In general, I decided to keep the logic for tracking visitation in the updateTag - //I did this because I ran into a lot of bugs with having it in Layout.js (trying to track data for parent pages and needing to communicate with content card) - //so narrowing it down to this component (that will always be shown when there's an update) worked the best in this case - if(viewHistory){ - if(name in viewHistory){ - let history = createBrowserHistory(); - - if(history.location.hash.length === 0 && history.location.search.length === 0){ - //if we are on a guidance w/ no hash or query in the URL - //this is the case when people enter the page for the first time that session (assuming they don't refresh the page) - newUpdate = pageVisitTracker(name); //check if they've seen it before - actionLink = viewHistory[name].action; //grab the section link - - //since it is their first time in this session viewing the page (assuming they don't refresh the page), now store the information - window.localStorage.setItem(tokenName, dateTime); //holds the most recent viewing time - viewHistory[name].update = newUpdate; //sets the "update state" for the component in overarching update-history - window.localStorage.setItem("update-history", JSON.stringify(viewHistory)); - //^^this allows for easy access across other components that need to access it in strange cases (like the refresh in the internal navigation) - }else{ - //the case where they have come to the page, but it refreshes it with a hash added to the link via the sideNav bar - //it keeps the pre-established update state in the general "update-history" from when they first came on the page - //this is the part that keeps the inline notif and sidebar navigation as they internally navigate the page - newUpdate = viewHistory[name].update; - //^^grab it from the previously stated update state - //^^trying to use the pageVisitTracker function in this case would grab the most recent visit, say it's been seen, and report that the update shouldnt be shown (and it should be shown) - actionLink = viewHistory[name].action; - } - }else{ - newUpdate = false; - } - } - - return( - <> - {newUpdate && (viewHistory[name].type === "Update") && - - {viewHistory[name].description + " "} - {viewHistory[name].action.length > 1 && - + {(wholeViewHistory[name].type === "Update") && + + {wholeViewHistory[name].description + " "} + {wholeViewHistory[name].action.length > 1 && + + } + + + } + margin={{ bottom: 'medium' }} icon={} + /> + } + {(wholeViewHistory[name].type === "New") && + + + This item is new. Let the Design Systems team know if you have any feedback. + + + } + margin={{ bottom: 'medium' }} icon={} + /> } - - - } - margin={{ bottom: 'medium' }} icon={} - /> - } - {newUpdate && (viewHistory[name].type === "New") && - - - This item is new. Let the Design Systems team know if you have any feedback. - - } - margin={{ bottom: 'medium' }} icon={} - /> + ); } - - ); }; diff --git a/aries-site/src/layouts/content/fetchData.js b/aries-site/src/layouts/content/fetchData.js deleted file mode 100644 index e69f778f4..000000000 --- a/aries-site/src/layouts/content/fetchData.js +++ /dev/null @@ -1,60 +0,0 @@ -const fetchData = function(){ - let thirtyDaysAgo = new Date().getTime() - (30 * 24 * 60 * 60 * 1000); - fetch(`https://api.github.com/repos/grommet/hpe-design-system/pulls?state=closed`) - .then(response => response.json()) - .then(data => { - console.log("FETCHINGG"); - let tempHistory = {}; - for(let i=0; i console.error(error)); -} - -export default fetchData; \ No newline at end of file diff --git a/aries-site/src/layouts/main/Layout.js b/aries-site/src/layouts/main/Layout.js index 765a73e5e..b4ea61b97 100644 --- a/aries-site/src/layouts/main/Layout.js +++ b/aries-site/src/layouts/main/Layout.js @@ -4,6 +4,7 @@ import React, { useContext, useCallback, useState, + useLayoutEffect, } from 'react'; import { useRouter } from 'next/router'; import PropTypes from 'prop-types'; @@ -40,8 +41,7 @@ import { Config } from '../../../config'; import { getRelatedContent, getPageDetails } from '../../utils'; import { siteContents } from '../../data/search/contentForSearch'; import { UpdateTag } from '../content/UpdateTag'; -import pageVisitTracker from '../../utils/pageVisitTracker'; -import { createMemoryHistory } from "history"; +import { ViewContext } from '../../pages/_app'; export const Layout = ({ backgroundImage, @@ -51,16 +51,8 @@ export const Layout = ({ isLanding, }) => { - // let history = createMemoryHistory(); - // console.log(history.location); - // history.listen(({ action, location }) => { - // console.log( - // `The current URL is ${location.pathname}${location.search}${location.hash}` - // ); - // console.log(`The last navigation action was ${action}`); - // }); - useEffect(() => { + //console.log("useEffect in the layout") if (Config.gaId) { initialize(Config.gaId); pageview(document.location.pathname); @@ -141,10 +133,13 @@ export const Layout = ({ { id: 'main', label: 'Main Content' }, ].filter(link => link !== undefined); - if(window.localStorage.getItem("update-history")){ - pageVisitTracker(title); - } - //console.log(title + " " + window.localStorage.getItem(`${title?.toLowerCase().replace(/\s+/g,'-')}-last-visited`)) + const {wholeViewHistory, status, setStatus} = useContext(ViewContext) || undefined; + + //every time a new page loads, initalize ready state to false, until app.js declares otherwise + useEffect(() => { + setStatus(false); + }, [title]); + return ( <> {/* When a backgroundImage is present, the main page content becomes @@ -200,10 +195,11 @@ export const Layout = ({ topic={topic} render={render} /> - + {status && wholeViewHistory[title].update && + + } {children} - {/* */} {relatedContent.length > 0 && ( str.split('-').join(' '); @@ -62,29 +63,131 @@ const backgroundImages = { * The `Component` prop is the active `page`, so whenever you * navigate between routes, `Component` will change to the new `page`. */ + + +export const ViewContext = createContext(undefined); + + function App({ Component, pageProps, router }) { const route = router.route.split('/'); + + //state that holds the update information within the last 30 days + const [wholeViewHistory, setWholeViewHistory] = useState({}); + //state that holds boolean for whether or not update info is ready to be rendered + const [status, setStatus] = useState(false); + //this effect is only for the first time a page loads useEffect(() => { - fetchData(); + let name = router.asPath; + let nameArray = name.split("/"); + name = nameArray[Object.keys(nameArray).length - 1]; + name = name.charAt(0).toUpperCase() + name.slice(1); + name = name.split("#")[0]; + + //imported and put fetchData in here so that it can access the setWholeViewHistory function + let thirtyDaysAgo = new Date().getTime() - (30 * 24 * 60 * 60 * 1000); + fetch(`https://api.github.com/repos/grommet/hpe-design-system/pulls?state=closed`) + .then(response => response.json()) + .then(data => { + let tempHistory = {}; + let tokenName; + for(let i=0; i new Date(data[i].merged_at).getTime()){ + //history of them visiting the page before, and that visit was after the newest update was sent + newUpdate = false; + }else{ + //history of them visiting the page before, but that visit was before the newest update was sent + newUpdate = true; + } + }else{ + //have never seen the page before + newUpdate = true; + } + tempHistory[justName] = + {"type": typeChange, + "description": notifList[j+2].slice(1, -1), + "date": data[i].merged_at, + "sections": sectionArray, + "action": action, + "update": newUpdate, + }; + } + } + } + } + window.localStorage.setItem("update-history",JSON.stringify(tempHistory)); + setWholeViewHistory(tempHistory); + }).then(() => { + if(name){ + let tokenName = `${name?.toLowerCase().replace(/\s+/g,'-')}-last-visited`; + let dateNow = new Date().getTime(); + window.localStorage.setItem(tokenName, dateNow); + } + }) + .catch(error => console.error(error)); }, []) - // let history = createMemoryHistory(); - // console.log(history.location); - // history.listen(({ action, location }) => { - // console.log( - // `The current URL is ${location.pathname}${location.search}${location.hash}` - // ); - // console.log(`The last navigation action was ${action}`); - // }); - - // necessary to ensure SkipLinks can receive first tab focus - // after a route change useEffect(() => { const handleRouteChange = () => { const skipLinks = document.querySelector('#skip-links'); skipLinks.focus(); - }; + console.log("routing"); + + if(typeof(window) !== "undefined"){ + let viewHistory = JSON.parse(window.localStorage.getItem("update-history")); + let name = router.asPath; + let nameArray = name.split("/"); + name = nameArray[Object.keys(nameArray).length - 1]; + name = name.charAt(0).toUpperCase() + name.slice(1); + let tokenName = `${name?.toLowerCase().replace(/\s+/g,'-') }-last-visited`; + let dateTime = new Date().getTime(); + + //every time it re-routes, see if the given page has a reported update in the last 30 days (what's reported in viewHistory) + //then check if it should be shown (T/F), and set that in local storage and the state variable + if(name in viewHistory){ + viewHistory[name].update = pageVisitTracker(name); + + window.localStorage.setItem("update-history", JSON.stringify(viewHistory)); + window.localStorage.setItem(tokenName, dateTime); + + setWholeViewHistory(viewHistory); + setStatus(true); + } + }; + } router.events.on('routeChangeComplete', handleRouteChange); @@ -95,6 +198,8 @@ function App({ Component, pageProps, router }) { }; }, [router.events]); + useEffect(() => {console.log(status)}, [status]); + // final array item from the route is the title of page we are on const title = route[route.length - 1].length && slugToText(route[route.length - 1]); @@ -104,20 +209,24 @@ function App({ Component, pageProps, router }) { route[route.length - 2] && route[route.length - 2].length && slugToText(route[route.length - 2]); + + return ( - - - - - + + + + + + + ); } diff --git a/aries-site/src/utils/pageVisitTracker.js b/aries-site/src/utils/pageVisitTracker.js index aa4001d8b..772840f15 100644 --- a/aries-site/src/utils/pageVisitTracker.js +++ b/aries-site/src/utils/pageVisitTracker.js @@ -6,18 +6,14 @@ const pageVisitTracker = function(title){ if(title in history){ //there has been a reported update within the last 30 days if(window.localStorage.getItem(tokenName)){ //there has been a guaranteed update and we've seen this page before if(window.localStorage.getItem(tokenName) > new Date(history[title].date).getTime()){ //when we've seen this page, has it been after the update? - //console.log("A"); newUpdate = false; //this means that the page has a reported update within 30 days, it has been seen before, but they have already seen this update }else{ - //console.log("B"); newUpdate = true; //this means that the page has a reported update within 30 days, it has been seen before, and when it has been seen, it was before the update } }else{ //it's within 30 days but we have never seen the page before - //console.log("C"); newUpdate = true; } }else{ - //console.log("D"); newUpdate = false; //definitely no update, nothing reported in the PRs } return newUpdate; From 477915cc6a5e7c6dfd5f68361f6c9c1844a3c66b Mon Sep 17 00:00:00 2001 From: beahackman Date: Wed, 9 Aug 2023 08:04:18 -0700 Subject: [PATCH 06/26] fixed page load bug and other small changes --- .../components/core/Identifier/Identifier.js | 5 ++-- aries-site/package.json | 5 +--- aries-site/src/layouts/content/ChangeLog.js | 26 ------------------- aries-site/src/layouts/main/Layout.js | 3 +-- aries-site/src/pages/_app.js | 5 +--- 5 files changed, 5 insertions(+), 39 deletions(-) delete mode 100644 aries-site/src/layouts/content/ChangeLog.js diff --git a/aries-core/src/js/components/core/Identifier/Identifier.js b/aries-core/src/js/components/core/Identifier/Identifier.js index 4d002aedb..7e26bba4b 100644 --- a/aries-core/src/js/components/core/Identifier/Identifier.js +++ b/aries-core/src/js/components/core/Identifier/Identifier.js @@ -16,7 +16,6 @@ export const Identifier = ({ type, ...rest }) => { - const darkMode = useDarkMode(); return( @@ -30,7 +29,7 @@ export const Identifier = ({ style: "solid", side: "all" }} - background='#117B82' + background={{ dark: true, color: "teal" }} value="Updated" a11yTitle={`There's been updates for ${title}`}/> } @@ -43,7 +42,7 @@ export const Identifier = ({ style: "solid", side: "all" }} - background='#6633BC' + background={{ dark: true, color: "purple" }} value="New!" a11yTitle={`There's a new item called ${title}`}/> } diff --git a/aries-site/package.json b/aries-site/package.json index 956fbeb2c..8f116d028 100644 --- a/aries-site/package.json +++ b/aries-site/package.json @@ -10,13 +10,10 @@ "@mdx-js/react": "^2.3.0", "@next/mdx": "^13.4.4", "aries-core": "*", - "history": "^5.3.0", "next": "13.4.4", "react-ga": "^2.7.0", - "react-router-dom": "^6.14.2", "react-syntax-highlighter": "^15.4.4", - "remark-gfm": "^3.0.1", - "universal-cookie": "^4.0.4" + "remark-gfm": "^3.0.1" }, "scripts": { "build": "yarn build-search && next build", diff --git a/aries-site/src/layouts/content/ChangeLog.js b/aries-site/src/layouts/content/ChangeLog.js deleted file mode 100644 index 1ea3bcbf1..000000000 --- a/aries-site/src/layouts/content/ChangeLog.js +++ /dev/null @@ -1,26 +0,0 @@ -import { - Box, - DataTable, - Subheading, - Text, -} from 'grommet'; - -//NEED TO FIX ACCORDING TO NEW PR METHOD -export const ChangeLog = ({ currentFileName, topic } ) => { - const updateLog = contributorCommitMessages(topic, currentFileName); - // console.log(updateLog); - return( - - {(updateLog.length > 0) && - - Change Log - - } - Date, primary: true, size: 'medium' }, { property: 'string', header: 'Change' }]} - data={updateLog.updateLog} - border={{ color: 'light-4', side: 'bottom', size: 'xsmall' }} - /> - - ); -}; diff --git a/aries-site/src/layouts/main/Layout.js b/aries-site/src/layouts/main/Layout.js index b4ea61b97..39c38b520 100644 --- a/aries-site/src/layouts/main/Layout.js +++ b/aries-site/src/layouts/main/Layout.js @@ -52,7 +52,6 @@ export const Layout = ({ }) => { useEffect(() => { - //console.log("useEffect in the layout") if (Config.gaId) { initialize(Config.gaId); pageview(document.location.pathname); @@ -195,7 +194,7 @@ export const Layout = ({ topic={topic} render={render} /> - {status && wholeViewHistory[title].update && + {status && wholeViewHistory[title]?.update && } {children} diff --git a/aries-site/src/pages/_app.js b/aries-site/src/pages/_app.js index 0234b4c8c..ce8f6501d 100644 --- a/aries-site/src/pages/_app.js +++ b/aries-site/src/pages/_app.js @@ -97,7 +97,6 @@ function App({ Component, pageProps, router }) { } let tempString = data[i].body; if(tempString.includes("#### Notifications")){ - console.log(data[i].number); const indexOfFirstComponent = tempString.search("#### Notifications") + 22; const notifSection = tempString.slice(indexOfFirstComponent); const notifList = notifSection.split("\r\n\r\n"); //splits them into an array jumping b/w name, sections, and description @@ -150,6 +149,7 @@ function App({ Component, pageProps, router }) { } window.localStorage.setItem("update-history",JSON.stringify(tempHistory)); setWholeViewHistory(tempHistory); + setStatus(true); }).then(() => { if(name){ let tokenName = `${name?.toLowerCase().replace(/\s+/g,'-')}-last-visited`; @@ -164,7 +164,6 @@ function App({ Component, pageProps, router }) { const handleRouteChange = () => { const skipLinks = document.querySelector('#skip-links'); skipLinks.focus(); - console.log("routing"); if(typeof(window) !== "undefined"){ let viewHistory = JSON.parse(window.localStorage.getItem("update-history")); @@ -198,8 +197,6 @@ function App({ Component, pageProps, router }) { }; }, [router.events]); - useEffect(() => {console.log(status)}, [status]); - // final array item from the route is the title of page we are on const title = route[route.length - 1].length && slugToText(route[route.length - 1]); From 1f0ff3d87ac47c8b3d4ee7ec2415747ca4e2a144 Mon Sep 17 00:00:00 2001 From: beahackman Date: Wed, 9 Aug 2023 15:23:19 -0700 Subject: [PATCH 07/26] revising update features --- .../components/core/Identifier/Identifier.js | 79 ++++++------------- .../src/components/cards/ContentCard.js | 13 ++- aries-site/src/layouts/content/NotifTag.js | 18 +++++ .../src/layouts/content/UpdateNotification.js | 49 ++++++++++++ aries-site/src/layouts/content/UpdateTag.js | 42 ---------- aries-site/src/layouts/main/Layout.js | 5 +- .../src/layouts/navigation/SearchResult.js | 74 +++++++---------- 7 files changed, 127 insertions(+), 153 deletions(-) create mode 100644 aries-site/src/layouts/content/NotifTag.js create mode 100644 aries-site/src/layouts/content/UpdateNotification.js delete mode 100644 aries-site/src/layouts/content/UpdateTag.js diff --git a/aries-core/src/js/components/core/Identifier/Identifier.js b/aries-core/src/js/components/core/Identifier/Identifier.js index 7e26bba4b..2830e9980 100644 --- a/aries-core/src/js/components/core/Identifier/Identifier.js +++ b/aries-core/src/js/components/core/Identifier/Identifier.js @@ -1,11 +1,9 @@ import React from 'react'; import PropTypes from 'prop-types'; -import { Tag } from 'grommet'; +import { NotifTag } from '../../../../../../aries-site/src/layouts/content/NotifTag'; import { Box, Heading, Text } from 'grommet'; -import { useDarkMode } from '../../../../../../aries-site/src/utils'; - export const Identifier = ({ children, level, @@ -15,58 +13,33 @@ export const Identifier = ({ updates, type, ...rest -}) => { - return( - - - {children} - {updates && (type === "Update") && - - } - {updates && (type === "New") && - - } - - - {level ? ( - - {title} - - ) : ( - - {title} - - )} - {subTitle} +}) => { + return ( + + + {children} + {updates && type === 'Update' && ( + + )} + {updates && type === 'New' && ( + + )} + + + {level ? ( + + {title} + + ) : ( + + {title} + + )} + {subTitle} + - ); - }; - +}; Identifier.propTypes = { children: PropTypes.node, diff --git a/aries-site/src/components/cards/ContentCard.js b/aries-site/src/components/cards/ContentCard.js index 5d40dccdc..d4f9f5fd8 100644 --- a/aries-site/src/components/cards/ContentCard.js +++ b/aries-site/src/components/cards/ContentCard.js @@ -12,14 +12,11 @@ export const ContentCard = forwardRef( const { description, name, parent, preview, render } = topic; const darkMode = useDarkMode(); const history = JSON.parse(window.localStorage.getItem("update-history")); - let newUpdate, type; - if(history){ - if(name in history){ - newUpdate = pageVisitTracker(name); - type = history[name].type; - }else{ - newUpdate = false; - } + let newUpdate = false; + let type; + if(history && name in history){ + newUpdate = pageVisitTracker(name); + type = history[name].type; } return ( diff --git a/aries-site/src/layouts/content/NotifTag.js b/aries-site/src/layouts/content/NotifTag.js new file mode 100644 index 000000000..aeafc3510 --- /dev/null +++ b/aries-site/src/layouts/content/NotifTag.js @@ -0,0 +1,18 @@ +import { Tag } from "grommet"; + +export const NotifTag = ({ size, color, allyDes, textVal }) => { + return( + + ) +} \ No newline at end of file diff --git a/aries-site/src/layouts/content/UpdateNotification.js b/aries-site/src/layouts/content/UpdateNotification.js new file mode 100644 index 000000000..0d35709fb --- /dev/null +++ b/aries-site/src/layouts/content/UpdateNotification.js @@ -0,0 +1,49 @@ +import { Anchor, Text, Notification } from 'grommet'; +import { CircleInformation } from 'grommet-icons'; +import { ViewContext } from '../../pages/_app'; +import { useContext } from 'react'; + + +export const UpdateNotification = ({ name }) => { + const { wholeViewHistory } = useContext(ViewContext) || undefined; + + function InlineNotif({dateText, message}) { + return ( + } + /> + ); + } + + if (wholeViewHistory && name in wholeViewHistory) { + return ( + <> + {wholeViewHistory[name]?.type === 'Update' && ( + + {wholeViewHistory[name]?.description + ' '} + {wholeViewHistory[name]?.action?.length > 1 && ( + + )} + } + /> + )} + {wholeViewHistory[name]?.type === 'New' && ( + + This item is new. Let the Design System team know if you have any feedback. + } + /> + )} + + ); + } +}; diff --git a/aries-site/src/layouts/content/UpdateTag.js b/aries-site/src/layouts/content/UpdateTag.js deleted file mode 100644 index 036912a70..000000000 --- a/aries-site/src/layouts/content/UpdateTag.js +++ /dev/null @@ -1,42 +0,0 @@ -import { Anchor, Text, Notification } from 'grommet'; -import { CircleInformation } from 'grommet-icons'; -import { ViewContext } from '../../pages/_app'; -import { useContext } from 'react'; - -export const UpdateTag = ({name}) => { - const {wholeViewHistory} = useContext(ViewContext) || undefined; - if(wholeViewHistory && name in wholeViewHistory){ - return ( - <> - {(wholeViewHistory[name].type === "Update") && - - {wholeViewHistory[name].description + " "} - {wholeViewHistory[name].action.length > 1 && - - } - - - } - margin={{ bottom: 'medium' }} icon={} - /> - } - {(wholeViewHistory[name].type === "New") && - - - This item is new. Let the Design Systems team know if you have any feedback. - - - } - margin={{ bottom: 'medium' }} icon={} - /> - } - - ); - } -}; diff --git a/aries-site/src/layouts/main/Layout.js b/aries-site/src/layouts/main/Layout.js index 39c38b520..f88c8baad 100644 --- a/aries-site/src/layouts/main/Layout.js +++ b/aries-site/src/layouts/main/Layout.js @@ -4,7 +4,6 @@ import React, { useContext, useCallback, useState, - useLayoutEffect, } from 'react'; import { useRouter } from 'next/router'; import PropTypes from 'prop-types'; @@ -40,7 +39,7 @@ import { import { Config } from '../../../config'; import { getRelatedContent, getPageDetails } from '../../utils'; import { siteContents } from '../../data/search/contentForSearch'; -import { UpdateTag } from '../content/UpdateTag'; +import { UpdateNotification } from '../content/UpdateNotification'; import { ViewContext } from '../../pages/_app'; export const Layout = ({ @@ -195,7 +194,7 @@ export const Layout = ({ render={render} /> {status && wholeViewHistory[title]?.update && - + } {children} diff --git a/aries-site/src/layouts/navigation/SearchResult.js b/aries-site/src/layouts/navigation/SearchResult.js index 43f02664e..a9eb0ca1e 100644 --- a/aries-site/src/layouts/navigation/SearchResult.js +++ b/aries-site/src/layouts/navigation/SearchResult.js @@ -5,18 +5,18 @@ import { getPageDetails } from '../../utils'; import { HighlightPhrase } from '../../components'; import pageVisitTracker from '../../utils/pageVisitTracker'; -import { ThemeContext } from 'styled-components'; +import { NotifTag } from '../content/NotifTag'; export const SearchResult = ({ query, result }) => { const hub = result.url && result.url.split('/')[1]; const parent = getPageDetails(hub); - const history = JSON.parse(window.localStorage.getItem("update-history")); + const history = JSON.parse(window.localStorage.getItem('update-history')); let newUpdate, type; - if(result.title in history){ + if (result.title in history) { newUpdate = pageVisitTracker(result.title); type = history[result.title].type; - }else{ + } else { newUpdate = false; } @@ -32,49 +32,29 @@ export const SearchResult = ({ query, result }) => { )} {result.title && ( - - - - {result.title} - - - {newUpdate && (type === 'New') && - - } - {newUpdate && (type === 'Update') && - - } - + + + + {result.title} + + + {newUpdate && type === 'New' && ( + + )} + {newUpdate && type === 'Update' && ( + + )} + )} {result.matches?.length > 0 ? ( From 762d52b1226488389b1a471a5be00812bef6cc77 Mon Sep 17 00:00:00 2001 From: beahackman Date: Tue, 15 Aug 2023 09:20:08 -0700 Subject: [PATCH 08/26] editing and revising update feature --- .../src/layouts/content/InPageNavigation.js | 44 ++++++++++--------- aries-site/src/layouts/main/Layout.js | 6 +-- .../src/layouts/navigation/SearchResult.js | 2 +- aries-site/src/pages/_app.js | 15 +++---- 4 files changed, 33 insertions(+), 34 deletions(-) diff --git a/aries-site/src/layouts/content/InPageNavigation.js b/aries-site/src/layouts/content/InPageNavigation.js index c480f0952..d684d58bb 100644 --- a/aries-site/src/layouts/content/InPageNavigation.js +++ b/aries-site/src/layouts/content/InPageNavigation.js @@ -63,8 +63,7 @@ export const InPageNavigation = ({ headings, title }) => { // align "Jump to section" with page title at start const marginTop = `${large + medium}px`; - const {wholeViewHistory, status, setStatus} = useContext(ViewContext) || undefined; - + const { wholeViewHistory } = useContext(ViewContext) || undefined; return ( { let sectionList; let newUpdate = false; - if(wholeViewHistory){ - if(title in wholeViewHistory){ - if(wholeViewHistory[title].update && (wholeViewHistory[title].sections[0].length > 0)){ - //to see if the update should be shown and if there are sections reported - sectionList = wholeViewHistory[title].sections; - Object.values(sectionList).forEach(val => { - if(val === headingTitle){ - newUpdate = true; - } - }); - } - } + if ( + wholeViewHistory && + title in wholeViewHistory && + wholeViewHistory[title].update && + wholeViewHistory[title].sections[0].length > 0 + ) { + sectionList = wholeViewHistory[title].sections; + Object.values(sectionList).forEach(val => { + if (val === headingTitle) { + newUpdate = true; + } + }); } + return ( @@ -144,18 +144,20 @@ export const InPageNavigation = ({ headings, title }) => { ? undefined : { left: theme.global.borderSize.small } } - direction='row' - align='top' - gap='small' + direction="row" + align="top" + gap="small" > {headingTitle} - {newUpdate && - - + {newUpdate && ( + + + + - } + )} diff --git a/aries-site/src/layouts/main/Layout.js b/aries-site/src/layouts/main/Layout.js index f88c8baad..a11c6721b 100644 --- a/aries-site/src/layouts/main/Layout.js +++ b/aries-site/src/layouts/main/Layout.js @@ -131,11 +131,11 @@ export const Layout = ({ { id: 'main', label: 'Main Content' }, ].filter(link => link !== undefined); - const {wholeViewHistory, status, setStatus} = useContext(ViewContext) || undefined; + const {wholeViewHistory, pageUpdateReady, setPageUpdateReady} = useContext(ViewContext) || undefined; //every time a new page loads, initalize ready state to false, until app.js declares otherwise useEffect(() => { - setStatus(false); + setPageUpdateReady(false); }, [title]); return ( @@ -193,7 +193,7 @@ export const Layout = ({ topic={topic} render={render} /> - {status && wholeViewHistory[title]?.update && + {pageUpdateReady && wholeViewHistory[title]?.update && } {children} diff --git a/aries-site/src/layouts/navigation/SearchResult.js b/aries-site/src/layouts/navigation/SearchResult.js index a9eb0ca1e..730467947 100644 --- a/aries-site/src/layouts/navigation/SearchResult.js +++ b/aries-site/src/layouts/navigation/SearchResult.js @@ -32,7 +32,7 @@ export const SearchResult = ({ query, result }) => { )} {result.title && ( - + {result.title} diff --git a/aries-site/src/pages/_app.js b/aries-site/src/pages/_app.js index ce8f6501d..47610a7b1 100644 --- a/aries-site/src/pages/_app.js +++ b/aries-site/src/pages/_app.js @@ -1,11 +1,10 @@ import { MDXProvider } from '@mdx-js/react'; import PropTypes from 'prop-types'; -import React, { useEffect } from 'react'; +import React, { useEffect, createContext, useState } from 'react'; import { Layout, ThemeMode } from '../layouts'; import { components } from '../components'; import pageVisitTracker from '../utils/pageVisitTracker'; -import { createContext } from 'react'; -import { useState } from 'react'; + const slugToText = str => str.split('-').join(' '); @@ -64,17 +63,15 @@ const backgroundImages = { * navigate between routes, `Component` will change to the new `page`. */ - export const ViewContext = createContext(undefined); - function App({ Component, pageProps, router }) { const route = router.route.split('/'); //state that holds the update information within the last 30 days const [wholeViewHistory, setWholeViewHistory] = useState({}); //state that holds boolean for whether or not update info is ready to be rendered - const [status, setStatus] = useState(false); + const [pageUpdateReady, setPageUpdateReady] = useState(false); //this effect is only for the first time a page loads useEffect(() => { @@ -149,7 +146,7 @@ function App({ Component, pageProps, router }) { } window.localStorage.setItem("update-history",JSON.stringify(tempHistory)); setWholeViewHistory(tempHistory); - setStatus(true); + setPageUpdateReady(true); }).then(() => { if(name){ let tokenName = `${name?.toLowerCase().replace(/\s+/g,'-')}-last-visited`; @@ -183,7 +180,7 @@ function App({ Component, pageProps, router }) { window.localStorage.setItem(tokenName, dateTime); setWholeViewHistory(viewHistory); - setStatus(true); + setPageUpdateReady(true); } }; } @@ -210,7 +207,7 @@ function App({ Component, pageProps, router }) { return ( - + Date: Fri, 18 Aug 2023 08:16:44 -0700 Subject: [PATCH 09/26] ran prettier and small changes --- .../components/core/Identifier/Identifier.js | 14 +- .../src/components/cards/ContentCard.js | 4 +- aries-site/src/layouts/content/NotifTag.js | 10 +- .../src/layouts/content/UpdateNotification.js | 43 ++-- aries-site/src/layouts/main/Layout.js | 11 +- aries-site/src/pages/_app.js | 210 ++++++++++-------- aries-site/src/utils/pageVisitTracker.js | 27 ++- 7 files changed, 186 insertions(+), 133 deletions(-) diff --git a/aries-core/src/js/components/core/Identifier/Identifier.js b/aries-core/src/js/components/core/Identifier/Identifier.js index 2830e9980..eb8aa094c 100644 --- a/aries-core/src/js/components/core/Identifier/Identifier.js +++ b/aries-core/src/js/components/core/Identifier/Identifier.js @@ -19,10 +19,20 @@ export const Identifier = ({ {children} {updates && type === 'Update' && ( - + )} {updates && type === 'New' && ( - + )} diff --git a/aries-site/src/components/cards/ContentCard.js b/aries-site/src/components/cards/ContentCard.js index d4f9f5fd8..1a4ae0aaf 100644 --- a/aries-site/src/components/cards/ContentCard.js +++ b/aries-site/src/components/cards/ContentCard.js @@ -11,10 +11,10 @@ export const ContentCard = forwardRef( ({ level, topic, minimal, ...rest }, ref) => { const { description, name, parent, preview, render } = topic; const darkMode = useDarkMode(); - const history = JSON.parse(window.localStorage.getItem("update-history")); + const history = JSON.parse(window.localStorage.getItem('update-history')); let newUpdate = false; let type; - if(history && name in history){ + if (history && name in history) { newUpdate = pageVisitTracker(name); type = history[name].type; } diff --git a/aries-site/src/layouts/content/NotifTag.js b/aries-site/src/layouts/content/NotifTag.js index aeafc3510..e4c48dca3 100644 --- a/aries-site/src/layouts/content/NotifTag.js +++ b/aries-site/src/layouts/content/NotifTag.js @@ -1,8 +1,8 @@ -import { Tag } from "grommet"; +import { Tag } from 'grommet'; export const NotifTag = ({ size, color, allyDes, textVal }) => { - return( - { value={textVal} a11yTitle={allyDes} /> - ) -} \ No newline at end of file + ); +}; diff --git a/aries-site/src/layouts/content/UpdateNotification.js b/aries-site/src/layouts/content/UpdateNotification.js index 0d35709fb..b70b0d1bc 100644 --- a/aries-site/src/layouts/content/UpdateNotification.js +++ b/aries-site/src/layouts/content/UpdateNotification.js @@ -3,15 +3,21 @@ import { CircleInformation } from 'grommet-icons'; import { ViewContext } from '../../pages/_app'; import { useContext } from 'react'; - export const UpdateNotification = ({ name }) => { const { wholeViewHistory } = useContext(ViewContext) || undefined; - function InlineNotif({dateText, message}) { + function InlineNotif({ dateText, message }) { return ( } @@ -23,25 +29,28 @@ export const UpdateNotification = ({ name }) => { return ( <> {wholeViewHistory[name]?.type === 'Update' && ( - + {wholeViewHistory[name]?.description + ' '} {wholeViewHistory[name]?.action?.length > 1 && ( - + )} - } - /> + + } + /> )} {wholeViewHistory[name]?.type === 'New' && ( - - This item is new. Let the Design System team know if you have any feedback. - } - /> + + This item is new. Let the Design System team know if you have + any feedback. + + } + /> )} ); diff --git a/aries-site/src/layouts/main/Layout.js b/aries-site/src/layouts/main/Layout.js index a11c6721b..c4c56668a 100644 --- a/aries-site/src/layouts/main/Layout.js +++ b/aries-site/src/layouts/main/Layout.js @@ -49,7 +49,6 @@ export const Layout = ({ topic, isLanding, }) => { - useEffect(() => { if (Config.gaId) { initialize(Config.gaId); @@ -131,7 +130,8 @@ export const Layout = ({ { id: 'main', label: 'Main Content' }, ].filter(link => link !== undefined); - const {wholeViewHistory, pageUpdateReady, setPageUpdateReady} = useContext(ViewContext) || undefined; + const { wholeViewHistory, pageUpdateReady, setPageUpdateReady } = + useContext(ViewContext) || undefined; //every time a new page loads, initalize ready state to false, until app.js declares otherwise useEffect(() => { @@ -193,9 +193,10 @@ export const Layout = ({ topic={topic} render={render} /> - {pageUpdateReady && wholeViewHistory[title]?.update && - - } + {pageUpdateReady && + wholeViewHistory[title]?.update && ( + + )} {children} {relatedContent.length > 0 && ( diff --git a/aries-site/src/pages/_app.js b/aries-site/src/pages/_app.js index 47610a7b1..b8a43b63d 100644 --- a/aries-site/src/pages/_app.js +++ b/aries-site/src/pages/_app.js @@ -5,7 +5,6 @@ import { Layout, ThemeMode } from '../layouts'; import { components } from '../components'; import pageVisitTracker from '../utils/pageVisitTracker'; - const slugToText = str => str.split('-').join(' '); const backgroundImages = { @@ -55,7 +54,6 @@ const backgroundImages = { }, }; - /* _app.js allows for customizing Next.js's default component * Details: https://nextjs.org/docs/advanced-features/custom-app * @@ -67,7 +65,7 @@ export const ViewContext = createContext(undefined); function App({ Component, pageProps, router }) { const route = router.route.split('/'); - + //state that holds the update information within the last 30 days const [wholeViewHistory, setWholeViewHistory] = useState({}); //state that holds boolean for whether or not update info is ready to be rendered @@ -75,115 +73,142 @@ function App({ Component, pageProps, router }) { //this effect is only for the first time a page loads useEffect(() => { - let name = router.asPath; - let nameArray = name.split("/"); - name = nameArray[Object.keys(nameArray).length - 1]; - name = name.charAt(0).toUpperCase() + name.slice(1); - name = name.split("#")[0]; - - //imported and put fetchData in here so that it can access the setWholeViewHistory function - let thirtyDaysAgo = new Date().getTime() - (30 * 24 * 60 * 60 * 1000); - fetch(`https://api.github.com/repos/grommet/hpe-design-system/pulls?state=closed`) + let name = router.asPath; + let nameArray = name.split('/'); + name = nameArray[Object.keys(nameArray).length - 1]; + name = name.charAt(0).toUpperCase() + name.slice(1); + name = name.split('#')[0]; + + //imported and put fetchData in here so that it can access the setWholeViewHistory function + let thirtyDaysAgo = new Date().getTime() - 30 * 24 * 60 * 60 * 1000; + fetch( + `https://api.github.com/repos/grommet/hpe-design-system/pulls?state=closed`, + ) .then(response => response.json()) .then(data => { - let tempHistory = {}; - let tokenName; - for(let i=0; i new Date(data[i].merged_at).getTime()){ - //history of them visiting the page before, and that visit was after the newest update was sent - newUpdate = false; - }else{ - //history of them visiting the page before, but that visit was before the newest update was sent - newUpdate = true; - } - }else{ - //have never seen the page before - newUpdate = true; - } - tempHistory[justName] = - {"type": typeChange, - "description": notifList[j+2].slice(1, -1), - "date": data[i].merged_at, - "sections": sectionArray, - "action": action, - "update": newUpdate, - }; - } + if (justName && !(justName in tempHistory)) { + let sectionArray = notifList[j + 1].slice(1, -1).split(']['); + let finalSectionlist = []; + let action = ''; + if (Object.keys(sectionArray).length === 1) { + //add an active link if only one section has been updated + action = + '#' + + sectionArray[0].trim().replace(/\s+/g, '-').toLowerCase(); + } + for (let i = 0; i < Object.keys(sectionArray).length; i++) { + finalSectionlist[i] = + sectionArray[i].charAt(0).toUpperCase() + + sectionArray[i].slice(1).toLowerCase(); + } + let newUpdate; + tokenName = `${justName + ?.toLowerCase() + .replace(/\s+/g, '-')}-last-visited`; + if (window.localStorage.getItem(tokenName)) { + if ( + window.localStorage.getItem(tokenName) > + new Date(data[i].merged_at).getTime() + ) { + //history of them visiting the page before, and that visit was after the newest update was sent + newUpdate = false; + } else { + //history of them visiting the page before, but that visit was before the newest update was sent + newUpdate = true; } + } else { + //have never seen the page before + newUpdate = true; + } + tempHistory[justName] = { + type: typeChange, + description: notifList[j + 2].slice(1, -1), + date: data[i].merged_at, + sections: sectionArray, + action: action, + update: newUpdate, + }; } + } } - window.localStorage.setItem("update-history",JSON.stringify(tempHistory)); - setWholeViewHistory(tempHistory); - setPageUpdateReady(true); - }).then(() => { - if(name){ - let tokenName = `${name?.toLowerCase().replace(/\s+/g,'-')}-last-visited`; - let dateNow = new Date().getTime(); - window.localStorage.setItem(tokenName, dateNow); - } + } + window.localStorage.setItem( + 'update-history', + JSON.stringify(tempHistory), + ); + setWholeViewHistory(tempHistory); + setPageUpdateReady(true); + }) + .then(() => { + if (name) { + let tokenName = `${name + ?.toLowerCase() + .replace(/\s+/g, '-')}-last-visited`; + let dateNow = new Date().getTime(); + window.localStorage.setItem(tokenName, dateNow); + } }) .catch(error => console.error(error)); - }, []) + }, []); useEffect(() => { const handleRouteChange = () => { const skipLinks = document.querySelector('#skip-links'); skipLinks.focus(); - - if(typeof(window) !== "undefined"){ - let viewHistory = JSON.parse(window.localStorage.getItem("update-history")); + + if (typeof window !== 'undefined') { + let viewHistory = JSON.parse( + window.localStorage.getItem('update-history'), + ); let name = router.asPath; - let nameArray = name.split("/"); - name = nameArray[Object.keys(nameArray).length - 1]; - name = name.charAt(0).toUpperCase() + name.slice(1); - let tokenName = `${name?.toLowerCase().replace(/\s+/g,'-') }-last-visited`; + let nameArray = name.split('/'); + name = nameArray[Object.keys(nameArray).length - 1]; + name = name.charAt(0).toUpperCase() + name.slice(1); + let tokenName = `${name + ?.toLowerCase() + .replace(/\s+/g, '-')}-last-visited`; let dateTime = new Date().getTime(); - + //every time it re-routes, see if the given page has a reported update in the last 30 days (what's reported in viewHistory) //then check if it should be shown (T/F), and set that in local storage and the state variable - if(name in viewHistory){ + if (viewHistory && name in viewHistory) { viewHistory[name].update = pageVisitTracker(name); - - window.localStorage.setItem("update-history", JSON.stringify(viewHistory)); + + window.localStorage.setItem( + 'update-history', + JSON.stringify(viewHistory), + ); window.localStorage.setItem(tokenName, dateTime); - + setWholeViewHistory(viewHistory); setPageUpdateReady(true); } - }; - } + } + }; router.events.on('routeChangeComplete', handleRouteChange); @@ -204,10 +229,11 @@ function App({ Component, pageProps, router }) { route[route.length - 2].length && slugToText(route[route.length - 2]); - return ( - + new Date(history[title].date).getTime()){ //when we've seen this page, has it been after the update? + let history = JSON.parse(window.localStorage.getItem('update-history')); + if (title in history) { + //there has been a reported update within the last 30 days + if (window.localStorage.getItem(tokenName)) { + //there has been a guaranteed update and we've seen this page before + if ( + window.localStorage.getItem(tokenName) > + new Date(history[title].date).getTime() + ) { + //when we've seen this page, has it been after the update? newUpdate = false; //this means that the page has a reported update within 30 days, it has been seen before, but they have already seen this update - }else{ + } else { newUpdate = true; //this means that the page has a reported update within 30 days, it has been seen before, and when it has been seen, it was before the update } - }else{ //it's within 30 days but we have never seen the page before + } else { + //it's within 30 days but we have never seen the page before newUpdate = true; } - }else{ + } else { newUpdate = false; //definitely no update, nothing reported in the PRs } return newUpdate; }; -export default pageVisitTracker; \ No newline at end of file +export default pageVisitTracker; From 7cbc5554e49b4b8147b0bbda21f81a816402f307 Mon Sep 17 00:00:00 2001 From: beahackman Date: Mon, 21 Aug 2023 08:12:39 -0700 Subject: [PATCH 10/26] fixed yarn lock conflict --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index b30b55a43..901ea248b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8,9 +8,9 @@ integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== "@adobe/css-tools@^4.3.0-rc.1": - version "4.3.0" - resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.3.0.tgz#1991d273fb29edbd2f63060f5bdaf0af26aa64e3" - integrity sha512-+RNNcQvw2V1bmnBTPAtOLfW/9mhH2vC67+rUSi5T8EtEWt6lEnGNY2GuhZ1/YwbgikT1TkhvidCDmN5Q5YCo/w== + version "4.3.1" + resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.3.1.tgz#abfccb8ca78075a2b6187345c26243c1a0842f28" + integrity sha512-/62yikz7NLScCGAAST5SHdnjaDJQBDq0M2muyRTpf2VQhw6StBg2ALiu73zSJQ4fMVLA+0uBhBHAle7Wg+2kSg== "@ampproject/remapping@^2.2.0": version "2.2.1" From bf53395d212700c4a2e29d74b3102edbb3e254b7 Mon Sep 17 00:00:00 2001 From: beahackman Date: Mon, 21 Aug 2023 08:23:14 -0700 Subject: [PATCH 11/26] fixed the rest of the yarn lock conflicts --- yarn.lock | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/yarn.lock b/yarn.lock index 901ea248b..916a0f4ac 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1780,9 +1780,9 @@ integrity sha512-q/y7VZj/9YpgzDe64Zi6rY1xPizx80JjlU2BTevlajtaE3w1LqweH1gGgxou2N7hdFosXHjGrI4OUvtFXXhGLg== "@next/mdx@^13.4.4": - version "13.4.13" - resolved "https://registry.yarnpkg.com/@next/mdx/-/mdx-13.4.13.tgz#e2e4d73c4d00cd9ced8f4c47805d8a3784e36c18" - integrity sha512-rQHfeyPO6WC+mEqFCNibV8CWXBJ95uRfPv05Xb8ZMUr284grCIAaSfSRDDrwcoknizyfREDp33oV/isIujS4pA== + version "13.4.16" + resolved "https://registry.yarnpkg.com/@next/mdx/-/mdx-13.4.16.tgz#e435c7bce8d6d47d648b970fa13ef47dc83d978e" + integrity sha512-4Yas2f0DFSi1BbtCAaMiv/EdGrBfflMEGBQf/QVAnVISihp/HwXiNhVN7wAt29vN9Mo/J4PtCKt8HQTYD7jbiA== dependencies: source-map "^0.7.0" @@ -2169,9 +2169,9 @@ integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA== "@types/node@*": - version "20.4.9" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.4.9.tgz#c7164e0f8d3f12dfae336af0b1f7fdec8c6b204f" - integrity sha512-8e2HYcg7ohnTUbHk8focoklEQYvemQmu9M/f43DZVx43kHn0tE3BY/6gSDxS7k0SprtS0NHvj+L80cGLnoOUcQ== + version "20.5.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.5.0.tgz#7fc8636d5f1aaa3b21e6245e97d56b7f56702313" + integrity sha512-Mgq7eCtoTjT89FqNoTzzXg2XvCi5VMhRV6+I2aYanc6kQCBImeNaAYRs/DyoVqk1YEUJK5gN9VO7HRIdz4Wo3Q== "@types/node@^12.20.10": version "12.20.55" @@ -3149,9 +3149,9 @@ camelize@^1.0.0: integrity sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ== caniuse-lite@^1.0.30001406, caniuse-lite@^1.0.30001517: - version "1.0.30001519" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001519.tgz#3e7b8b8a7077e78b0eb054d69e6edf5c7df35601" - integrity sha512-0QHgqR+Jv4bxHMp8kZ1Kn8CH55OikjKJ6JmKkZYP1F3D7w+lnFXF70nG5eNfsZS89jadi5Ywy5UCSKLAglIRkg== + version "1.0.30001520" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001520.tgz#62e2b7a1c7b35269594cf296a80bdf8cb9565006" + integrity sha512-tahF5O9EiiTzwTUqAeFjIZbn4Dnqxzz7ktrgGlMYNLH43Ul26IgTMH/zvL3DG0lZxBYnlT04axvInszUsZULdA== ccount@^2.0.0: version "2.0.1" @@ -3899,9 +3899,9 @@ ee-first@1.1.1: integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== electron-to-chromium@^1.4.477: - version "1.4.488" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.488.tgz#442b1855f8c84fb1ed79f518985c65db94f64cc9" - integrity sha512-Dv4sTjiW7t/UWGL+H8ZkgIjtUAVZDgb/PwGWvMsCT7jipzUV/u5skbLXPFKb6iV0tiddVi/bcS2/kUrczeWgIQ== + version "1.4.492" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.492.tgz#83fed8beb64ec60578069e15dddd17b13a77ca56" + integrity sha512-36K9b/6skMVwAIEsC7GiQ8I8N3soCALVSHqWHzNDtGemAcI9Xu8hP02cywWM0A794rTHm0b0zHPeLJHtgFVamQ== elegant-spinner@^1.0.1: version "1.0.1" @@ -9286,9 +9286,9 @@ testcafe-hammerhead@31.4.3: tunnel-agent "0.6.0" testcafe-hammerhead@>=19.4.0: - version "31.4.12" - resolved "https://registry.yarnpkg.com/testcafe-hammerhead/-/testcafe-hammerhead-31.4.12.tgz#96cc08ccec35114f3bd12f56d67229b9e50eb48b" - integrity sha512-6TNgr8Gk/8/DhZwHuBHxBOGawGD/X7gVSVw2GeflZhX6ASUFIkp2gixJ7jOj4C+aRGE8NQ4sTTeeQyFUOiQnEw== + version "31.5.0" + resolved "https://registry.yarnpkg.com/testcafe-hammerhead/-/testcafe-hammerhead-31.5.0.tgz#5d60abc578359f46c16e77397c34fe684332c802" + integrity sha512-q4zT2rGOdkIkY+jyLUoAxHbY7gpm8IFGmbsq75Aez0n+LT1wpkY8g2u8iIUmWwBPy3Z/P8c/OPLl/p7AssaO5A== dependencies: "@adobe/css-tools" "^4.3.0-rc.1" "@electron/asar" "^3.2.3" From 9e32e495e81d618bc0768d858bd58c898d4a7aea Mon Sep 17 00:00:00 2001 From: beahackman Date: Mon, 21 Aug 2023 14:58:37 -0700 Subject: [PATCH 12/26] fixed query name problem and abbreviated titles --- .../components/core/Identifier/Identifier.js | 23 +-------- .../src/components/cards/ContentCard.js | 31 +++++++++-- .../{NotifTag.js => NotificationTag.js} | 6 +-- .../src/layouts/content/UpdateNotification.js | 6 +-- .../src/layouts/navigation/SearchResult.js | 14 ++--- aries-site/src/pages/_app.js | 51 ++++++++++--------- 6 files changed, 69 insertions(+), 62 deletions(-) rename aries-site/src/layouts/content/{NotifTag.js => NotificationTag.js} (66%) diff --git a/aries-core/src/js/components/core/Identifier/Identifier.js b/aries-core/src/js/components/core/Identifier/Identifier.js index eb8aa094c..491e5df6c 100644 --- a/aries-core/src/js/components/core/Identifier/Identifier.js +++ b/aries-core/src/js/components/core/Identifier/Identifier.js @@ -1,7 +1,5 @@ import React from 'react'; import PropTypes from 'prop-types'; -import { NotifTag } from '../../../../../../aries-site/src/layouts/content/NotifTag'; - import { Box, Heading, Text } from 'grommet'; export const Identifier = ({ @@ -10,31 +8,12 @@ export const Identifier = ({ title, subTitle, size, - updates, type, ...rest }) => { return ( - - {children} - {updates && type === 'Update' && ( - - )} - {updates && type === 'New' && ( - - )} - + {children} {level ? ( diff --git a/aries-site/src/components/cards/ContentCard.js b/aries-site/src/components/cards/ContentCard.js index 1a4ae0aaf..b1429299a 100644 --- a/aries-site/src/components/cards/ContentCard.js +++ b/aries-site/src/components/cards/ContentCard.js @@ -6,6 +6,7 @@ import { PreviewImageCard } from './PreviewCard'; import { LinkCard } from './LinkCard'; import { useDarkMode } from '../../utils'; import pageVisitTracker from '../../utils/pageVisitTracker'; +import { NotificationTag } from '../../layouts/content/NotificationTag'; export const ContentCard = forwardRef( ({ level, topic, minimal, ...rest }, ref) => { @@ -58,13 +59,35 @@ export const ContentCard = forwardRef( align="start" gap="xsmall" level={level} - updates={newUpdate} type={type} > {parent && parent.icon && !minimal && ( - - {parent.icon('small', parent.color)} - {parent.name} + + + {parent.icon('small', parent.color)} + {parent.name} + + {newUpdate && type === 'Update' && ( + + )} + {newUpdate && type === 'New' && ( + + )} )} diff --git a/aries-site/src/layouts/content/NotifTag.js b/aries-site/src/layouts/content/NotificationTag.js similarity index 66% rename from aries-site/src/layouts/content/NotifTag.js rename to aries-site/src/layouts/content/NotificationTag.js index e4c48dca3..03f57a022 100644 --- a/aries-site/src/layouts/content/NotifTag.js +++ b/aries-site/src/layouts/content/NotificationTag.js @@ -1,6 +1,6 @@ import { Tag } from 'grommet'; -export const NotifTag = ({ size, color, allyDes, textVal }) => { +export const NotificationTag = ({ size, color, allyTitle, textValue }) => { return ( { side: 'all', }} background={{ dark: true, color: color }} - value={textVal} - a11yTitle={allyDes} + value={textValue} + a11yTitle={allyTitle} /> ); }; diff --git a/aries-site/src/layouts/content/UpdateNotification.js b/aries-site/src/layouts/content/UpdateNotification.js index b70b0d1bc..9b2258d5c 100644 --- a/aries-site/src/layouts/content/UpdateNotification.js +++ b/aries-site/src/layouts/content/UpdateNotification.js @@ -6,7 +6,7 @@ import { useContext } from 'react'; export const UpdateNotification = ({ name }) => { const { wholeViewHistory } = useContext(ViewContext) || undefined; - function InlineNotif({ dateText, message }) { + function InlineNotification({ dateText, message }) { return ( { return ( <> {wholeViewHistory[name]?.type === 'Update' && ( - @@ -42,7 +42,7 @@ export const UpdateNotification = ({ name }) => { /> )} {wholeViewHistory[name]?.type === 'New' && ( - diff --git a/aries-site/src/layouts/navigation/SearchResult.js b/aries-site/src/layouts/navigation/SearchResult.js index 730467947..a8e96a3c7 100644 --- a/aries-site/src/layouts/navigation/SearchResult.js +++ b/aries-site/src/layouts/navigation/SearchResult.js @@ -5,7 +5,7 @@ import { getPageDetails } from '../../utils'; import { HighlightPhrase } from '../../components'; import pageVisitTracker from '../../utils/pageVisitTracker'; -import { NotifTag } from '../content/NotifTag'; +import { NotificationTag } from '../content/NotificationTag'; export const SearchResult = ({ query, result }) => { const hub = result.url && result.url.split('/')[1]; @@ -39,19 +39,19 @@ export const SearchResult = ({ query, result }) => { {newUpdate && type === 'New' && ( - )} {newUpdate && type === 'Update' && ( - )} diff --git a/aries-site/src/pages/_app.js b/aries-site/src/pages/_app.js index b8a43b63d..1b3a96667 100644 --- a/aries-site/src/pages/_app.js +++ b/aries-site/src/pages/_app.js @@ -78,6 +78,7 @@ function App({ Component, pageProps, router }) { name = nameArray[Object.keys(nameArray).length - 1]; name = name.charAt(0).toUpperCase() + name.slice(1); name = name.split('#')[0]; + name = name.split('?')[0]; //imported and put fetchData in here so that it can access the setWholeViewHistory function let thirtyDaysAgo = new Date().getTime() - 30 * 24 * 60 * 60 * 1000; @@ -86,32 +87,36 @@ function App({ Component, pageProps, router }) { ) .then(response => response.json()) .then(data => { - let tempHistory = {}; + let temporaryHistory = {}; let tokenName; for (let i = 0; i < Object.keys(data).length; i++) { if (new Date(data[i].merged_at).getTime() < thirtyDaysAgo) { //if it is older than thirty days ago break; } - let tempString = data[i].body; - if (tempString.includes('#### Notifications')) { + let temporaryString = data[i].body; + if (temporaryString.includes('#### Notifications')) { const indexOfFirstComponent = - tempString.search('#### Notifications') + 22; - const notifSection = tempString.slice(indexOfFirstComponent); - const notifList = notifSection.split('\r\n\r\n'); //splits them into an array jumping b/w name, sections, and description + temporaryString.search('#### Notifications') + 22; + const notificationSection = temporaryString.slice( + indexOfFirstComponent, + ); + const notificationList = notificationSection.split('\r\n\r\n'); //splits them into an array jumping b/w name, sections, and description const regExp = /\[([^)]+)\]/; - for (let j = 0; j < Object.keys(notifList).length; j += 3) { - let tempName = notifList[j].trim(); - let temp = regExp.exec(tempName); - let typeChange = temp[1].trim(); + for (let j = 0; j < Object.keys(notificationList).length; j += 3) { + let temporaryName = notificationList[j].trim(); + let temporary = regExp.exec(temporaryName); + let typeChange = temporary[1].trim(); let justName; if (typeChange === 'Update') { - justName = tempName.slice('8').trim(); + justName = temporaryName.slice('8').trim(); } else if (typeChange === 'New') { - justName = tempName.slice('5').trim(); + justName = temporaryName.slice('5').trim(); } - if (justName && !(justName in tempHistory)) { - let sectionArray = notifList[j + 1].slice(1, -1).split(']['); + if (justName && !(justName in temporaryHistory)) { + let sectionArray = notificationList[j + 1] + .slice(1, -1) + .split(']['); let finalSectionlist = []; let action = ''; if (Object.keys(sectionArray).length === 1) { @@ -144,9 +149,9 @@ function App({ Component, pageProps, router }) { //have never seen the page before newUpdate = true; } - tempHistory[justName] = { + temporaryHistory[justName] = { type: typeChange, - description: notifList[j + 2].slice(1, -1), + description: notificationList[j + 2].slice(1, -1), date: data[i].merged_at, sections: sectionArray, action: action, @@ -158,9 +163,9 @@ function App({ Component, pageProps, router }) { } window.localStorage.setItem( 'update-history', - JSON.stringify(tempHistory), + JSON.stringify(temporaryHistory), ); - setWholeViewHistory(tempHistory); + setWholeViewHistory(temporaryHistory); setPageUpdateReady(true); }) .then(() => { @@ -188,22 +193,22 @@ function App({ Component, pageProps, router }) { let nameArray = name.split('/'); name = nameArray[Object.keys(nameArray).length - 1]; name = name.charAt(0).toUpperCase() + name.slice(1); - let tokenName = `${name + + let noQueryName = name.split('?')[0]; + let tokenName = `${noQueryName ?.toLowerCase() .replace(/\s+/g, '-')}-last-visited`; let dateTime = new Date().getTime(); //every time it re-routes, see if the given page has a reported update in the last 30 days (what's reported in viewHistory) //then check if it should be shown (T/F), and set that in local storage and the state variable - if (viewHistory && name in viewHistory) { - viewHistory[name].update = pageVisitTracker(name); - + if (viewHistory && noQueryName in viewHistory) { + viewHistory[noQueryName].update = pageVisitTracker(name); window.localStorage.setItem( 'update-history', JSON.stringify(viewHistory), ); window.localStorage.setItem(tokenName, dateTime); - setWholeViewHistory(viewHistory); setPageUpdateReady(true); } From 6c3b176097f308d214cc223ca8cb7d4e050e3792 Mon Sep 17 00:00:00 2001 From: beahackman Date: Tue, 22 Aug 2023 16:20:59 -0700 Subject: [PATCH 13/26] next round of reviews and fixed search function to guidance bug --- .../components/core/Identifier/Identifier.js | 1 - .../src/components/cards/ContentCard.js | 23 ++-- .../src/layouts/content/InPageNavigation.js | 12 +- .../src/layouts/content/NotificationTag.js | 5 +- .../src/layouts/content/UpdateNotification.js | 84 +++++++------ aries-site/src/layouts/main/Layout.js | 9 +- .../src/layouts/navigation/SearchResult.js | 16 +-- aries-site/src/pages/_app.js | 110 +++++++++--------- aries-site/src/utils/pageVisitTracker.js | 21 ++-- 9 files changed, 138 insertions(+), 143 deletions(-) diff --git a/aries-core/src/js/components/core/Identifier/Identifier.js b/aries-core/src/js/components/core/Identifier/Identifier.js index 491e5df6c..6d000f9e0 100644 --- a/aries-core/src/js/components/core/Identifier/Identifier.js +++ b/aries-core/src/js/components/core/Identifier/Identifier.js @@ -8,7 +8,6 @@ export const Identifier = ({ title, subTitle, size, - type, ...rest }) => { return ( diff --git a/aries-site/src/components/cards/ContentCard.js b/aries-site/src/components/cards/ContentCard.js index b1429299a..4bec1cdda 100644 --- a/aries-site/src/components/cards/ContentCard.js +++ b/aries-site/src/components/cards/ContentCard.js @@ -12,12 +12,14 @@ export const ContentCard = forwardRef( ({ level, topic, minimal, ...rest }, ref) => { const { description, name, parent, preview, render } = topic; const darkMode = useDarkMode(); - const history = JSON.parse(window.localStorage.getItem('update-history')); + const updateHistory = JSON.parse( + window.localStorage.getItem('update-history'), + ); let newUpdate = false; - let type; - if (history && name in history) { + let changeKind; + if (updateHistory && name in updateHistory) { newUpdate = pageVisitTracker(name); - type = history[name].type; + changeKind = updateHistory[name].changeKind; } return ( @@ -59,7 +61,6 @@ export const ContentCard = forwardRef( align="start" gap="xsmall" level={level} - type={type} > {parent && parent.icon && !minimal && ( {parent.name} - {newUpdate && type === 'Update' && ( + {newUpdate && changeKind === 'Update' && ( )} - {newUpdate && type === 'New' && ( + {newUpdate && changeKind === 'New' && ( )} diff --git a/aries-site/src/layouts/content/InPageNavigation.js b/aries-site/src/layouts/content/InPageNavigation.js index d684d58bb..807c14c52 100644 --- a/aries-site/src/layouts/content/InPageNavigation.js +++ b/aries-site/src/layouts/content/InPageNavigation.js @@ -63,7 +63,7 @@ export const InPageNavigation = ({ headings, title }) => { // align "Jump to section" with page title at start const marginTop = `${large + medium}px`; - const { wholeViewHistory } = useContext(ViewContext) || undefined; + const { contentHistory } = useContext(ViewContext) || undefined; return ( { let newUpdate = false; if ( - wholeViewHistory && - title in wholeViewHistory && - wholeViewHistory[title].update && - wholeViewHistory[title].sections[0].length > 0 + contentHistory && + title in contentHistory && + contentHistory[title].update && + contentHistory[title].sections[0].length > 0 ) { - sectionList = wholeViewHistory[title].sections; + sectionList = contentHistory[title].sections; Object.values(sectionList).forEach(val => { if (val === headingTitle) { newUpdate = true; diff --git a/aries-site/src/layouts/content/NotificationTag.js b/aries-site/src/layouts/content/NotificationTag.js index 03f57a022..c5b61a56c 100644 --- a/aries-site/src/layouts/content/NotificationTag.js +++ b/aries-site/src/layouts/content/NotificationTag.js @@ -1,6 +1,6 @@ import { Tag } from 'grommet'; -export const NotificationTag = ({ size, color, allyTitle, textValue }) => { +export const NotificationTag = ({ size, color, ...rest }) => { return ( { side: 'all', }} background={{ dark: true, color: color }} - value={textValue} - a11yTitle={allyTitle} + {...rest} /> ); }; diff --git a/aries-site/src/layouts/content/UpdateNotification.js b/aries-site/src/layouts/content/UpdateNotification.js index 9b2258d5c..c8fab101c 100644 --- a/aries-site/src/layouts/content/UpdateNotification.js +++ b/aries-site/src/layouts/content/UpdateNotification.js @@ -3,56 +3,50 @@ import { CircleInformation } from 'grommet-icons'; import { ViewContext } from '../../pages/_app'; import { useContext } from 'react'; +function InlineNotification({ dateText, message, updateDate }) { + return ( + } + /> + ); +} + export const UpdateNotification = ({ name }) => { - const { wholeViewHistory } = useContext(ViewContext) || undefined; + const { contentHistory } = useContext(ViewContext) || undefined; + const updateDate = contentHistory[name]?.date; - function InlineNotification({ dateText, message }) { + if (contentHistory && name in contentHistory) { return ( - + {contentHistory[name]?.description + ' '} + {contentHistory[name]?.action?.length > 1 && ( + + )} + + ) : ( + + This item is new. Let the Design System team know if you have any + feedback. + + ) } - message={message} - margin={{ bottom: 'medium' }} - icon={} + updateDate={updateDate} /> ); } - - if (wholeViewHistory && name in wholeViewHistory) { - return ( - <> - {wholeViewHistory[name]?.type === 'Update' && ( - - {wholeViewHistory[name]?.description + ' '} - {wholeViewHistory[name]?.action?.length > 1 && ( - - )} - - } - /> - )} - {wholeViewHistory[name]?.type === 'New' && ( - - This item is new. Let the Design System team know if you have - any feedback. - - } - /> - )} - - ); - } }; diff --git a/aries-site/src/layouts/main/Layout.js b/aries-site/src/layouts/main/Layout.js index c4c56668a..1c8356950 100644 --- a/aries-site/src/layouts/main/Layout.js +++ b/aries-site/src/layouts/main/Layout.js @@ -130,7 +130,7 @@ export const Layout = ({ { id: 'main', label: 'Main Content' }, ].filter(link => link !== undefined); - const { wholeViewHistory, pageUpdateReady, setPageUpdateReady } = + const { contentHistory, pageUpdateReady, setPageUpdateReady } = useContext(ViewContext) || undefined; //every time a new page loads, initalize ready state to false, until app.js declares otherwise @@ -193,10 +193,9 @@ export const Layout = ({ topic={topic} render={render} /> - {pageUpdateReady && - wholeViewHistory[title]?.update && ( - - )} + {pageUpdateReady && contentHistory[title]?.update && ( + + )} {children} {relatedContent.length > 0 && ( diff --git a/aries-site/src/layouts/navigation/SearchResult.js b/aries-site/src/layouts/navigation/SearchResult.js index a8e96a3c7..4283e266c 100644 --- a/aries-site/src/layouts/navigation/SearchResult.js +++ b/aries-site/src/layouts/navigation/SearchResult.js @@ -12,10 +12,10 @@ export const SearchResult = ({ query, result }) => { const parent = getPageDetails(hub); const history = JSON.parse(window.localStorage.getItem('update-history')); - let newUpdate, type; + let newUpdate, changeKind; if (result.title in history) { newUpdate = pageVisitTracker(result.title); - type = history[result.title].type; + changeKind = history[result.title].changeKind; } else { newUpdate = false; } @@ -38,20 +38,20 @@ export const SearchResult = ({ query, result }) => { {result.title} - {newUpdate && type === 'New' && ( + {newUpdate && changeKind === 'New' && ( )} - {newUpdate && type === 'Update' && ( + {newUpdate && changeKind === 'Update' && ( )} diff --git a/aries-site/src/pages/_app.js b/aries-site/src/pages/_app.js index 1b3a96667..014ff55e1 100644 --- a/aries-site/src/pages/_app.js +++ b/aries-site/src/pages/_app.js @@ -67,7 +67,7 @@ function App({ Component, pageProps, router }) { const route = router.route.split('/'); //state that holds the update information within the last 30 days - const [wholeViewHistory, setWholeViewHistory] = useState({}); + const [contentHistory, setContentHistory] = useState({}); //state that holds boolean for whether or not update info is ready to be rendered const [pageUpdateReady, setPageUpdateReady] = useState(false); @@ -80,81 +80,82 @@ function App({ Component, pageProps, router }) { name = name.split('#')[0]; name = name.split('?')[0]; - //imported and put fetchData in here so that it can access the setWholeViewHistory function + //imported and put fetchData in here so that it can access the contentHistory function + //thirtyDaysAgo calculated in milliseconds let thirtyDaysAgo = new Date().getTime() - 30 * 24 * 60 * 60 * 1000; fetch( `https://api.github.com/repos/grommet/hpe-design-system/pulls?state=closed`, ) .then(response => response.json()) .then(data => { - let temporaryHistory = {}; - let tokenName; + let nextHistory = {}; + let localStorageKey; for (let i = 0; i < Object.keys(data).length; i++) { if (new Date(data[i].merged_at).getTime() < thirtyDaysAgo) { //if it is older than thirty days ago break; } - let temporaryString = data[i].body; - if (temporaryString.includes('#### Notifications')) { + let prDescription = data[i].body; + if (prDescription.includes('#### Notifications')) { const indexOfFirstComponent = - temporaryString.search('#### Notifications') + 22; - const notificationSection = temporaryString.slice( - indexOfFirstComponent, - ); - const notificationList = notificationSection.split('\r\n\r\n'); //splits them into an array jumping b/w name, sections, and description + prDescription.search('#### Notifications') + 22; + //the position of the first bracket containing either new/updates is 22 characters away + //this includes the notification header and the \r\n\r\n that follow + const notificationList = prDescription + .slice(indexOfFirstComponent) + .split('\r\n\r\n'); + //splits them into an array jumping between name, sections, and description + //like: ['[New]Header', ['Usage', 'Some Section'], '[The description for header]', '[Update]Button', ['Dos and Donts'], '[Description for button]'] const regExp = /\[([^)]+)\]/; for (let j = 0; j < Object.keys(notificationList).length; j += 3) { - let temporaryName = notificationList[j].trim(); - let temporary = regExp.exec(temporaryName); - let typeChange = temporary[1].trim(); - let justName; + //+= 3 so it can jump between component descriptions + let typeChangeAndName = notificationList[j].trim(); + let typeChange = regExp.exec(typeChangeAndName)[1].trim(); + let pageName; if (typeChange === 'Update') { - justName = temporaryName.slice('8').trim(); + pageName = typeChangeAndName.slice('8').trim(); } else if (typeChange === 'New') { - justName = temporaryName.slice('5').trim(); + pageName = typeChangeAndName.slice('5').trim(); } - if (justName && !(justName in temporaryHistory)) { + if (pageName && !(pageName in nextHistory)) { let sectionArray = notificationList[j + 1] .slice(1, -1) .split(']['); - let finalSectionlist = []; - let action = ''; + //to ensure there is proper capitlization for the section headers + for (let i = 0; i < Object.keys(sectionArray).length; i++) { + sectionArray[i] = + sectionArray[i].charAt(0).toUpperCase() + + sectionArray[i].slice(1).toLowerCase(); + } + + let anchorLink = ''; if (Object.keys(sectionArray).length === 1) { //add an active link if only one section has been updated - action = + anchorLink = '#' + sectionArray[0].trim().replace(/\s+/g, '-').toLowerCase(); } - for (let i = 0; i < Object.keys(sectionArray).length; i++) { - finalSectionlist[i] = - sectionArray[i].charAt(0).toUpperCase() + - sectionArray[i].slice(1).toLowerCase(); - } + let newUpdate; - tokenName = `${justName + localStorageKey = `${pageName ?.toLowerCase() .replace(/\s+/g, '-')}-last-visited`; - if (window.localStorage.getItem(tokenName)) { - if ( - window.localStorage.getItem(tokenName) > + if (window.localStorage.getItem(localStorageKey)) { + newUpdate = + window.localStorage.getItem(localStorageKey) > new Date(data[i].merged_at).getTime() - ) { - //history of them visiting the page before, and that visit was after the newest update was sent - newUpdate = false; - } else { - //history of them visiting the page before, but that visit was before the newest update was sent - newUpdate = true; - } + ? false //if the last visit is more recent than the reported update, dont show it + : true; } else { - //have never seen the page before + //have never visited the page before newUpdate = true; } - temporaryHistory[justName] = { - type: typeChange, + nextHistory[pageName] = { + changeKind: typeChange, description: notificationList[j + 2].slice(1, -1), date: data[i].merged_at, sections: sectionArray, - action: action, + action: anchorLink, update: newUpdate, }; } @@ -163,18 +164,16 @@ function App({ Component, pageProps, router }) { } window.localStorage.setItem( 'update-history', - JSON.stringify(temporaryHistory), + JSON.stringify(nextHistory), ); - setWholeViewHistory(temporaryHistory); + setContentHistory(nextHistory); setPageUpdateReady(true); - }) - .then(() => { if (name) { - let tokenName = `${name + let localStorageKey = `${name ?.toLowerCase() .replace(/\s+/g, '-')}-last-visited`; let dateNow = new Date().getTime(); - window.localStorage.setItem(tokenName, dateNow); + window.localStorage.setItem(localStorageKey, dateNow); } }) .catch(error => console.error(error)); @@ -194,22 +193,23 @@ function App({ Component, pageProps, router }) { name = nameArray[Object.keys(nameArray).length - 1]; name = name.charAt(0).toUpperCase() + name.slice(1); - let noQueryName = name.split('?')[0]; - let tokenName = `${noQueryName + //to cover cases where they navigate via the search function + let pageName = name.split('?')[0]; + let localStorageKey = `${pageName ?.toLowerCase() .replace(/\s+/g, '-')}-last-visited`; - let dateTime = new Date().getTime(); + const dateTime = new Date().getTime(); //every time it re-routes, see if the given page has a reported update in the last 30 days (what's reported in viewHistory) //then check if it should be shown (T/F), and set that in local storage and the state variable - if (viewHistory && noQueryName in viewHistory) { - viewHistory[noQueryName].update = pageVisitTracker(name); + if (viewHistory && pageName in viewHistory) { + viewHistory[pageName].update = pageVisitTracker(pageName); window.localStorage.setItem( 'update-history', JSON.stringify(viewHistory), ); - window.localStorage.setItem(tokenName, dateTime); - setWholeViewHistory(viewHistory); + window.localStorage.setItem(localStorageKey, dateTime); + setContentHistory(viewHistory); setPageUpdateReady(true); } } @@ -237,7 +237,7 @@ function App({ Component, pageProps, router }) { return ( + window.localStorage.getItem(localStorageKey) > new Date(history[title].date).getTime() ) { - //when we've seen this page, has it been after the update? - newUpdate = false; //this means that the page has a reported update within 30 days, it has been seen before, but they have already seen this update + //if when they saw the page is after the update, dont show it + newUpdate = false; } else { - newUpdate = true; //this means that the page has a reported update within 30 days, it has been seen before, and when it has been seen, it was before the update + //page has reported an update within 30 days, it has been seen before, but it was before the update was released + newUpdate = true; } } else { - //it's within 30 days but we have never seen the page before + //it's within 30 days but it has never seen the page before newUpdate = true; } } else { - newUpdate = false; //definitely no update, nothing reported in the PRs + newUpdate = false; // no update, nothing reported in the PRs } return newUpdate; }; From aaee83cccc567bdd63b8974086374b474d6a6b8b Mon Sep 17 00:00:00 2001 From: beahackman Date: Wed, 23 Aug 2023 11:09:57 -0700 Subject: [PATCH 14/26] changed notification header variable in app.js --- aries-site/src/pages/_app.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/aries-site/src/pages/_app.js b/aries-site/src/pages/_app.js index 014ff55e1..9f4dc0ab8 100644 --- a/aries-site/src/pages/_app.js +++ b/aries-site/src/pages/_app.js @@ -96,9 +96,11 @@ function App({ Component, pageProps, router }) { break; } let prDescription = data[i].body; - if (prDescription.includes('#### Notifications')) { + const notificationHeader = '#### Notifications\r\n'; + if (prDescription.includes(notificationHeader)) { const indexOfFirstComponent = - prDescription.search('#### Notifications') + 22; + prDescription.search(notificationHeader) + + notificationHeader.length; //the position of the first bracket containing either new/updates is 22 characters away //this includes the notification header and the \r\n\r\n that follow const notificationList = prDescription From 2585d084b37b04b17338d3e13e98a4724e0fe48f Mon Sep 17 00:00:00 2001 From: beahackman Date: Wed, 23 Aug 2023 14:47:57 -0700 Subject: [PATCH 15/26] cleaning up code readability --- .../src/components/cards/ContentCard.js | 4 +-- .../src/layouts/content/InPageNavigation.js | 2 +- .../src/layouts/content/NotificationTag.js | 5 ++- .../src/layouts/content/UpdateNotification.js | 34 ++++++------------- aries-site/src/layouts/main/Layout.js | 2 +- .../src/layouts/navigation/SearchResult.js | 4 +-- 6 files changed, 18 insertions(+), 33 deletions(-) diff --git a/aries-site/src/components/cards/ContentCard.js b/aries-site/src/components/cards/ContentCard.js index 4bec1cdda..9ccb837d7 100644 --- a/aries-site/src/components/cards/ContentCard.js +++ b/aries-site/src/components/cards/ContentCard.js @@ -75,7 +75,7 @@ export const ContentCard = forwardRef( {newUpdate && changeKind === 'Update' && ( { // align "Jump to section" with page title at start const marginTop = `${large + medium}px`; - const { contentHistory } = useContext(ViewContext) || undefined; + const { contentHistory } = useContext(ViewContext); return ( { +export const NotificationTag = ({ backgroundColor, ...rest }) => { return ( ); diff --git a/aries-site/src/layouts/content/UpdateNotification.js b/aries-site/src/layouts/content/UpdateNotification.js index c8fab101c..7c646f69b 100644 --- a/aries-site/src/layouts/content/UpdateNotification.js +++ b/aries-site/src/layouts/content/UpdateNotification.js @@ -1,35 +1,17 @@ import { Anchor, Text, Notification } from 'grommet'; -import { CircleInformation } from 'grommet-icons'; import { ViewContext } from '../../pages/_app'; import { useContext } from 'react'; -function InlineNotification({ dateText, message, updateDate }) { - return ( - } - /> - ); -} - export const UpdateNotification = ({ name }) => { - const { contentHistory } = useContext(ViewContext) || undefined; + const { contentHistory } = useContext(ViewContext); const updateDate = contentHistory[name]?.date; if (contentHistory && name in contentHistory) { return ( - @@ -45,7 +27,11 @@ export const UpdateNotification = ({ name }) => { ) } - updateDate={updateDate} + title={`${ + contentHistory[name]?.changeKind === 'Update' + ? 'Updated ' + : 'Added on ' + } ${new Date(updateDate).toDateString().split(' ').slice(1).join(' ')}`} /> ); } diff --git a/aries-site/src/layouts/main/Layout.js b/aries-site/src/layouts/main/Layout.js index 1c8356950..7d3824b79 100644 --- a/aries-site/src/layouts/main/Layout.js +++ b/aries-site/src/layouts/main/Layout.js @@ -131,7 +131,7 @@ export const Layout = ({ ].filter(link => link !== undefined); const { contentHistory, pageUpdateReady, setPageUpdateReady } = - useContext(ViewContext) || undefined; + useContext(ViewContext); //every time a new page loads, initalize ready state to false, until app.js declares otherwise useEffect(() => { diff --git a/aries-site/src/layouts/navigation/SearchResult.js b/aries-site/src/layouts/navigation/SearchResult.js index 4283e266c..16579cd25 100644 --- a/aries-site/src/layouts/navigation/SearchResult.js +++ b/aries-site/src/layouts/navigation/SearchResult.js @@ -41,7 +41,7 @@ export const SearchResult = ({ query, result }) => { {newUpdate && changeKind === 'New' && ( @@ -49,7 +49,7 @@ export const SearchResult = ({ query, result }) => { {newUpdate && changeKind === 'Update' && ( From 7573baf04da6fe556eac1f364bfebc2f7225aec2 Mon Sep 17 00:00:00 2001 From: beahackman Date: Thu, 24 Aug 2023 10:56:51 -0700 Subject: [PATCH 16/26] cleaned up Identifier formatting --- .../components/core/Identifier/Identifier.js | 34 +++++++++---------- 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/aries-core/src/js/components/core/Identifier/Identifier.js b/aries-core/src/js/components/core/Identifier/Identifier.js index 6d000f9e0..b27eaa7ec 100644 --- a/aries-core/src/js/components/core/Identifier/Identifier.js +++ b/aries-core/src/js/components/core/Identifier/Identifier.js @@ -9,25 +9,23 @@ export const Identifier = ({ subTitle, size, ...rest -}) => { - return ( - - {children} - - {level ? ( - - {title} - - ) : ( - - {title} - - )} - {subTitle} - +}) => ( + + {children} + + {level ? ( + + {title} + + ) : ( + + {title} + + )} + {subTitle} - ); -}; + +); Identifier.propTypes = { children: PropTypes.node, From 673dc02f49cd65580613bacc5ddc5a055a626f6d Mon Sep 17 00:00:00 2001 From: beahackman Date: Tue, 29 Aug 2023 09:44:56 -0700 Subject: [PATCH 17/26] revised variable names --- aries-site/src/pages/_app.js | 35 ++++++++++++++++------------------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/aries-site/src/pages/_app.js b/aries-site/src/pages/_app.js index 9f4dc0ab8..54cff4b2d 100644 --- a/aries-site/src/pages/_app.js +++ b/aries-site/src/pages/_app.js @@ -82,7 +82,7 @@ function App({ Component, pageProps, router }) { //imported and put fetchData in here so that it can access the contentHistory function //thirtyDaysAgo calculated in milliseconds - let thirtyDaysAgo = new Date().getTime() - 30 * 24 * 60 * 60 * 1000; + const thirtyDaysAgo = new Date().getTime() - 30 * 24 * 60 * 60 * 1000; fetch( `https://api.github.com/repos/grommet/hpe-design-system/pulls?state=closed`, ) @@ -111,31 +111,28 @@ function App({ Component, pageProps, router }) { const regExp = /\[([^)]+)\]/; for (let j = 0; j < Object.keys(notificationList).length; j += 3) { //+= 3 so it can jump between component descriptions - let typeChangeAndName = notificationList[j].trim(); - let typeChange = regExp.exec(typeChangeAndName)[1].trim(); + const changeKindAndName = notificationList[j].trim(); + const changeKind = regExp.exec(changeKindAndName)[1].trim(); let pageName; - if (typeChange === 'Update') { - pageName = typeChangeAndName.slice('8').trim(); - } else if (typeChange === 'New') { - pageName = typeChangeAndName.slice('5').trim(); + if (changeKind === 'Update') { + pageName = changeKindAndName.slice('8').trim(); + } else if (changeKind === 'New') { + pageName = changeKindAndName.slice('5').trim(); } if (pageName && !(pageName in nextHistory)) { - let sectionArray = notificationList[j + 1] - .slice(1, -1) - .split(']['); + let sections = notificationList[j + 1].slice(1, -1).split(']['); //to ensure there is proper capitlization for the section headers - for (let i = 0; i < Object.keys(sectionArray).length; i++) { - sectionArray[i] = - sectionArray[i].charAt(0).toUpperCase() + - sectionArray[i].slice(1).toLowerCase(); + for (let i = 0; i < Object.keys(sections).length; i++) { + sections[i] = + sections[i].charAt(0).toUpperCase() + + sections[i].slice(1).toLowerCase(); } let anchorLink = ''; - if (Object.keys(sectionArray).length === 1) { + if (Object.keys(sections).length === 1) { //add an active link if only one section has been updated anchorLink = - '#' + - sectionArray[0].trim().replace(/\s+/g, '-').toLowerCase(); + '#' + sections[0].trim().replace(/\s+/g, '-').toLowerCase(); } let newUpdate; @@ -153,10 +150,10 @@ function App({ Component, pageProps, router }) { newUpdate = true; } nextHistory[pageName] = { - changeKind: typeChange, + changeKind: changeKind, description: notificationList[j + 2].slice(1, -1), date: data[i].merged_at, - sections: sectionArray, + sections: sections, action: anchorLink, update: newUpdate, }; From 62303355781fee74b94baa19a39c0f91d3e8af3a Mon Sep 17 00:00:00 2001 From: beahackman Date: Wed, 30 Aug 2023 11:46:56 -0700 Subject: [PATCH 18/26] updating yarn.lock --- yarn.lock | 668 +++++++++++++++++++++++++++++++----------------------- 1 file changed, 385 insertions(+), 283 deletions(-) diff --git a/yarn.lock b/yarn.lock index 916a0f4ac..061aab28d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -259,43 +259,43 @@ chokidar "^3.4.0" "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.10", "@babel/code-frame@^7.22.5": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.10.tgz#1c20e612b768fefa75f6e90d6ecb86329247f0a3" - integrity sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA== + version "7.22.13" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" + integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== dependencies: - "@babel/highlight" "^7.22.10" + "@babel/highlight" "^7.22.13" chalk "^2.4.2" -"@babel/compat-data@^7.20.5", "@babel/compat-data@^7.22.5", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9": +"@babel/compat-data@^7.20.5", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9": version "7.22.9" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.9.tgz#71cdb00a1ce3a329ce4cbec3a44f9fef35669730" integrity sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ== "@babel/core@^7.1.0", "@babel/core@^7.12.1", "@babel/core@^7.12.3", "@babel/core@^7.20.5", "@babel/core@^7.7.2", "@babel/core@^7.8.0": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.10.tgz#aad442c7bcd1582252cb4576747ace35bc122f35" - integrity sha512-fTmqbbUBAwCcre6zPzNngvsI0aNrPZe77AeqvDxWM9Nm+04RrJ3CAmGHA9f7lJQY6ZMhRztNemy4uslDxTX4Qw== + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.11.tgz#8033acaa2aa24c3f814edaaa057f3ce0ba559c24" + integrity sha512-lh7RJrtPdhibbxndr6/xx0w8+CVlY5FJZiaSz908Fpy+G0xkBFTvwLcKJFF4PJxVfGhVWNebikpWGnOoC71juQ== dependencies: "@ampproject/remapping" "^2.2.0" "@babel/code-frame" "^7.22.10" "@babel/generator" "^7.22.10" "@babel/helper-compilation-targets" "^7.22.10" "@babel/helper-module-transforms" "^7.22.9" - "@babel/helpers" "^7.22.10" - "@babel/parser" "^7.22.10" + "@babel/helpers" "^7.22.11" + "@babel/parser" "^7.22.11" "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.10" - "@babel/types" "^7.22.10" + "@babel/traverse" "^7.22.11" + "@babel/types" "^7.22.11" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" - json5 "^2.2.2" + json5 "^2.2.3" semver "^6.3.1" "@babel/eslint-parser@^7.19.1": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.22.10.tgz#bfdf3d1b32ad573fe7c1c3447e0b485e3a41fd09" - integrity sha512-0J8DNPRXQRLeR9rPaUMM3fA+RbixjnVLe/MRMYCkp3hzgsSuxCHQ8NN8xQG1wIHKJ4a1DTROTvFJdW+B5/eOsg== + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.22.11.tgz#cceb8c7989c241a16dd14e12a6cd725618f3f58b" + integrity sha512-YjOYZ3j7TjV8OhLW6NCtyg8G04uStATEUe5eiLuCZaXz2VSDQ3dsAtm2D+TuQyAqNMUK2WacGo0/uma9Pein1w== dependencies: "@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1" eslint-visitor-keys "^2.1.0" @@ -336,10 +336,10 @@ lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.22.10", "@babel/helper-create-class-features-plugin@^7.22.5": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.10.tgz#dd2612d59eac45588021ac3d6fa976d08f4e95a3" - integrity sha512-5IBb77txKYQPpOEdUdIhBx8VrZyDCQ+H82H0+5dX1TmuscP5vJKEE3cKurjtIw/vFwzbVH48VweE78kVDBrqjA== +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.22.10", "@babel/helper-create-class-features-plugin@^7.22.11", "@babel/helper-create-class-features-plugin@^7.22.5": + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.11.tgz#4078686740459eeb4af3494a273ac09148dfb213" + integrity sha512-y1grdYL4WzmUDBRGK0pDbIoFd7UZKoDurDzWEoNMYoj1EL+foGRQNyPWDcC+YyegN5y1DUsFFmzjGijB3nSVAQ== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" "@babel/helper-environment-visitor" "^7.22.5" @@ -491,19 +491,19 @@ "@babel/template" "^7.22.5" "@babel/types" "^7.22.10" -"@babel/helpers@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.10.tgz#ae6005c539dfbcb5cd71fb51bfc8a52ba63bc37a" - integrity sha512-a41J4NW8HyZa1I1vAndrraTlPZ/eZoga2ZgS7fEr0tZJGVU4xqdE80CEm0CcNjha5EZ8fTBYLKHF0kqDUuAwQw== +"@babel/helpers@^7.22.11": + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.11.tgz#b02f5d5f2d7abc21ab59eeed80de410ba70b056a" + integrity sha512-vyOXC8PBWaGc5h7GMsNx68OH33cypkEDJCHvYVVgVbbxJDROYVtexSk0gK5iCF1xNjRIN2s8ai7hwkWDq5szWg== dependencies: "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.10" - "@babel/types" "^7.22.10" + "@babel/traverse" "^7.22.11" + "@babel/types" "^7.22.11" -"@babel/highlight@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.10.tgz#02a3f6d8c1cb4521b2fd0ab0da8f4739936137d7" - integrity sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ== +"@babel/highlight@^7.22.13": + version "7.22.13" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.13.tgz#9cda839e5d3be9ca9e8c26b6dd69e7548f0cbf16" + integrity sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ== dependencies: "@babel/helper-validator-identifier" "^7.22.5" chalk "^2.4.2" @@ -521,10 +521,10 @@ regenerator-runtime "^0.14.0" v8flags "^3.1.1" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.10", "@babel/parser@^7.22.5": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.10.tgz#e37634f9a12a1716136c44624ef54283cabd3f55" - integrity sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.11", "@babel/parser@^7.22.5": + version "7.22.14" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.14.tgz#c7de58e8de106e88efca42ce17f0033209dfd245" + integrity sha512-1KucTHgOvaw/LzCVrEOAyXkr9rQlp0A1HiHRYnSUE9dmb8PvPW7o5sscg+5169r54n3vGlbx6GevTE/Iw/P3AQ== "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.5": version "7.22.5" @@ -764,10 +764,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-async-generator-functions@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.10.tgz#45946cd17f915b10e65c29b8ed18a0a50fc648c8" - integrity sha512-eueE8lvKVzq5wIObKK/7dvoeKJ+xc6TvRn6aysIjS6pSCeLy7S/eVi7pEQknZqyqvzaNKdDtem8nUNTBgDVR2g== +"@babel/plugin-transform-async-generator-functions@^7.22.11": + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.11.tgz#dbe3b1ff5a52e2e5edc4b19a60d325a675ed2649" + integrity sha512-0pAlmeRJn6wU84zzZsEOx1JV1Jf8fqO9ok7wofIJwUnplYo247dcd24P+cMJht7ts9xkzdtB0EPHmOb7F+KzXw== dependencies: "@babel/helper-environment-visitor" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" @@ -805,12 +805,12 @@ "@babel/helper-create-class-features-plugin" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-class-static-block@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz#3e40c46f048403472d6f4183116d5e46b1bff5ba" - integrity sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA== +"@babel/plugin-transform-class-static-block@^7.22.11": + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz#dc8cc6e498f55692ac6b4b89e56d87cec766c974" + integrity sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.11" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-class-static-block" "^7.14.5" @@ -859,10 +859,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-dynamic-import@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz#d6908a8916a810468c4edff73b5b75bda6ad393e" - integrity sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ== +"@babel/plugin-transform-dynamic-import@^7.22.11": + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz#2c7722d2a5c01839eaf31518c6ff96d408e447aa" + integrity sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" @@ -875,10 +875,10 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-export-namespace-from@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz#57c41cb1d0613d22f548fddd8b288eedb9973a5b" - integrity sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg== +"@babel/plugin-transform-export-namespace-from@^7.22.11": + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz#b3c84c8f19880b6c7440108f8929caf6056db26c" + integrity sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" @@ -907,10 +907,10 @@ "@babel/helper-function-name" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-json-strings@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz#14b64352fdf7e1f737eed68de1a1468bd2a77ec0" - integrity sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A== +"@babel/plugin-transform-json-strings@^7.22.11": + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz#689a34e1eed1928a40954e37f74509f48af67835" + integrity sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-json-strings" "^7.8.3" @@ -922,10 +922,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-logical-assignment-operators@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz#66ae5f068fd5a9a5dc570df16f56c2a8462a9d6c" - integrity sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA== +"@babel/plugin-transform-logical-assignment-operators@^7.22.11": + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz#24c522a61688bde045b7d9bc3c2597a4d948fc9c" + integrity sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" @@ -945,22 +945,22 @@ "@babel/helper-module-transforms" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-modules-commonjs@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz#7d9875908d19b8c0536085af7b053fd5bd651bfa" - integrity sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA== +"@babel/plugin-transform-modules-commonjs@^7.22.11": + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.11.tgz#d7991d3abad199c03b68ee66a64f216c47ffdfae" + integrity sha512-o2+bg7GDS60cJMgz9jWqRUsWkMzLCxp+jFDeDUT5sjRlAxcJWZ2ylNdI7QQ2+CH5hWu7OnN+Cv3htt7AkSf96g== dependencies: - "@babel/helper-module-transforms" "^7.22.5" + "@babel/helper-module-transforms" "^7.22.9" "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-simple-access" "^7.22.5" -"@babel/plugin-transform-modules-systemjs@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz#18c31410b5e579a0092638f95c896c2a98a5d496" - integrity sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ== +"@babel/plugin-transform-modules-systemjs@^7.22.11": + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.11.tgz#3386be5875d316493b517207e8f1931d93154bb1" + integrity sha512-rIqHmHoMEOhI3VkVf5jQ15l539KrwhzqcBO6wdCNWPWc/JWt9ILNYNUssbRpeq0qWns8svuw8LnMNCvWBIJ8wA== dependencies: "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-module-transforms" "^7.22.5" + "@babel/helper-module-transforms" "^7.22.9" "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-validator-identifier" "^7.22.5" @@ -987,29 +987,29 @@ dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-nullish-coalescing-operator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz#f8872c65776e0b552e0849d7596cddd416c3e381" - integrity sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA== +"@babel/plugin-transform-nullish-coalescing-operator@^7.22.11": + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz#debef6c8ba795f5ac67cd861a81b744c5d38d9fc" + integrity sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-transform-numeric-separator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz#57226a2ed9e512b9b446517ab6fa2d17abb83f58" - integrity sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g== +"@babel/plugin-transform-numeric-separator@^7.22.11": + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz#498d77dc45a6c6db74bb829c02a01c1d719cbfbd" + integrity sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-transform-object-rest-spread@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz#9686dc3447df4753b0b2a2fae7e8bc33cdc1f2e1" - integrity sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ== +"@babel/plugin-transform-object-rest-spread@^7.22.11": + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.11.tgz#dbbb06ce783cd994a8f430d8cefa553e9b42ca62" + integrity sha512-nX8cPFa6+UmbepISvlf5jhQyaC7ASs/7UxHmMkuJ/k5xSHvDPPaibMo+v3TXwU/Pjqhep/nFNpd3zn4YR59pnw== dependencies: - "@babel/compat-data" "^7.22.5" - "@babel/helper-compilation-targets" "^7.22.5" + "@babel/compat-data" "^7.22.9" + "@babel/helper-compilation-targets" "^7.22.10" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" "@babel/plugin-transform-parameters" "^7.22.5" @@ -1022,18 +1022,18 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-replace-supers" "^7.22.5" -"@babel/plugin-transform-optional-catch-binding@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz#842080be3076703be0eaf32ead6ac8174edee333" - integrity sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg== +"@babel/plugin-transform-optional-catch-binding@^7.22.11": + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz#461cc4f578a127bb055527b3e77404cad38c08e0" + integrity sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-transform-optional-chaining@^7.22.10", "@babel/plugin-transform-optional-chaining@^7.22.5": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.10.tgz#076d28a7e074392e840d4ae587d83445bac0372a" - integrity sha512-MMkQqZAZ+MGj+jGTG3OTuhKeBpNcO+0oCEbrGNEaOmiEn+1MzRyQlYsruGiU8RTK3zV6XwrVJTmwiDOyYK6J9g== +"@babel/plugin-transform-optional-chaining@^7.22.12", "@babel/plugin-transform-optional-chaining@^7.22.5": + version "7.22.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.12.tgz#d7ebf6a88cd2f4d307b0e000ab630acd8124b333" + integrity sha512-7XXCVqZtyFWqjDsYDY4T45w4mlx1rf7aOgkc/Ww76xkgBiOlmjPkx36PBLHa1k1rwWvVgYMPsbuVnIamx2ZQJw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" @@ -1054,13 +1054,13 @@ "@babel/helper-create-class-features-plugin" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-private-property-in-object@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz#07a77f28cbb251546a43d175a1dda4cf3ef83e32" - integrity sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ== +"@babel/plugin-transform-private-property-in-object@^7.22.11": + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz#ad45c4fc440e9cb84c718ed0906d96cf40f9a4e1" + integrity sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.11" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" @@ -1199,9 +1199,9 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/preset-env@^7.12.1", "@babel/preset-env@^7.20.2": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.22.10.tgz#3263b9fe2c8823d191d28e61eac60a79f9ce8a0f" - integrity sha512-riHpLb1drNkpLlocmSyEg4oYJIQFeXAK/d7rI6mbD0XsvoTOOweXDmQPG/ErxsEhWk3rl3Q/3F6RFQlVFS8m0A== + version "7.22.14" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.22.14.tgz#1cbb468d899f64fa71c53446f13b7ff8c0005cc1" + integrity sha512-daodMIoVo+ol/g+//c/AH+szBkFj4STQUikvBijRGL72Ph+w+AMTSh55DUETe8KJlPlDT1k/mp7NBfOuiWmoig== dependencies: "@babel/compat-data" "^7.22.9" "@babel/helper-compilation-targets" "^7.22.10" @@ -1229,41 +1229,41 @@ "@babel/plugin-syntax-top-level-await" "^7.14.5" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" "@babel/plugin-transform-arrow-functions" "^7.22.5" - "@babel/plugin-transform-async-generator-functions" "^7.22.10" + "@babel/plugin-transform-async-generator-functions" "^7.22.11" "@babel/plugin-transform-async-to-generator" "^7.22.5" "@babel/plugin-transform-block-scoped-functions" "^7.22.5" "@babel/plugin-transform-block-scoping" "^7.22.10" "@babel/plugin-transform-class-properties" "^7.22.5" - "@babel/plugin-transform-class-static-block" "^7.22.5" + "@babel/plugin-transform-class-static-block" "^7.22.11" "@babel/plugin-transform-classes" "^7.22.6" "@babel/plugin-transform-computed-properties" "^7.22.5" "@babel/plugin-transform-destructuring" "^7.22.10" "@babel/plugin-transform-dotall-regex" "^7.22.5" "@babel/plugin-transform-duplicate-keys" "^7.22.5" - "@babel/plugin-transform-dynamic-import" "^7.22.5" + "@babel/plugin-transform-dynamic-import" "^7.22.11" "@babel/plugin-transform-exponentiation-operator" "^7.22.5" - "@babel/plugin-transform-export-namespace-from" "^7.22.5" + "@babel/plugin-transform-export-namespace-from" "^7.22.11" "@babel/plugin-transform-for-of" "^7.22.5" "@babel/plugin-transform-function-name" "^7.22.5" - "@babel/plugin-transform-json-strings" "^7.22.5" + "@babel/plugin-transform-json-strings" "^7.22.11" "@babel/plugin-transform-literals" "^7.22.5" - "@babel/plugin-transform-logical-assignment-operators" "^7.22.5" + "@babel/plugin-transform-logical-assignment-operators" "^7.22.11" "@babel/plugin-transform-member-expression-literals" "^7.22.5" "@babel/plugin-transform-modules-amd" "^7.22.5" - "@babel/plugin-transform-modules-commonjs" "^7.22.5" - "@babel/plugin-transform-modules-systemjs" "^7.22.5" + "@babel/plugin-transform-modules-commonjs" "^7.22.11" + "@babel/plugin-transform-modules-systemjs" "^7.22.11" "@babel/plugin-transform-modules-umd" "^7.22.5" "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" "@babel/plugin-transform-new-target" "^7.22.5" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.22.5" - "@babel/plugin-transform-numeric-separator" "^7.22.5" - "@babel/plugin-transform-object-rest-spread" "^7.22.5" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.22.11" + "@babel/plugin-transform-numeric-separator" "^7.22.11" + "@babel/plugin-transform-object-rest-spread" "^7.22.11" "@babel/plugin-transform-object-super" "^7.22.5" - "@babel/plugin-transform-optional-catch-binding" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.22.10" + "@babel/plugin-transform-optional-catch-binding" "^7.22.11" + "@babel/plugin-transform-optional-chaining" "^7.22.12" "@babel/plugin-transform-parameters" "^7.22.5" "@babel/plugin-transform-private-methods" "^7.22.5" - "@babel/plugin-transform-private-property-in-object" "^7.22.5" + "@babel/plugin-transform-private-property-in-object" "^7.22.11" "@babel/plugin-transform-property-literals" "^7.22.5" "@babel/plugin-transform-regenerator" "^7.22.10" "@babel/plugin-transform-reserved-words" "^7.22.5" @@ -1277,7 +1277,7 @@ "@babel/plugin-transform-unicode-regex" "^7.22.5" "@babel/plugin-transform-unicode-sets-regex" "^7.22.5" "@babel/preset-modules" "0.1.6-no-external-plugins" - "@babel/types" "^7.22.10" + "@babel/types" "^7.22.11" babel-plugin-polyfill-corejs2 "^0.4.5" babel-plugin-polyfill-corejs3 "^0.8.3" babel-plugin-polyfill-regenerator "^0.5.2" @@ -1331,9 +1331,9 @@ integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== "@babel/runtime@^7.12.5", "@babel/runtime@^7.20.7", "@babel/runtime@^7.3.1", "@babel/runtime@^7.8.4": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.10.tgz#ae3e9631fd947cb7e3610d3e9d8fef5f76696682" - integrity sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ== + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.11.tgz#7a9ba3bbe406ad6f9e8dd4da2ece453eb23a77a4" + integrity sha512-ee7jVNlWN09+KftVOu9n7S8gQzD/Z6hN/I8VBRXW4P1+Xe7kJGXMwu8vds4aGIMHZnNbdpSWCfZZtinytpcAvA== dependencies: regenerator-runtime "^0.14.0" @@ -1346,10 +1346,10 @@ "@babel/parser" "^7.22.5" "@babel/types" "^7.22.5" -"@babel/traverse@^7.22.10", "@babel/traverse@^7.4.5", "@babel/traverse@^7.7.2": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.10.tgz#20252acb240e746d27c2e82b4484f199cf8141aa" - integrity sha512-Q/urqV4pRByiNNpb/f5OSv28ZlGJiFiiTh+GAHktbIrkPhPbl90+uW6SmpoLyZqutrg9AEaEf3Q/ZBRHBXgxig== +"@babel/traverse@^7.22.11", "@babel/traverse@^7.4.5", "@babel/traverse@^7.7.2": + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.11.tgz#71ebb3af7a05ff97280b83f05f8865ac94b2027c" + integrity sha512-mzAenteTfomcB7mfPtyi+4oe5BZ6MXxWcn4CX+h4IRJ+OOGXBrWU6jDQavkQI9Vuc5P+donFabBfFCcmWka9lQ== dependencies: "@babel/code-frame" "^7.22.10" "@babel/generator" "^7.22.10" @@ -1357,15 +1357,15 @@ "@babel/helper-function-name" "^7.22.5" "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.22.10" - "@babel/types" "^7.22.10" + "@babel/parser" "^7.22.11" + "@babel/types" "^7.22.11" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.10", "@babel/types@^7.22.5", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.10.tgz#4a9e76446048f2c66982d1a989dd12b8a2d2dc03" - integrity sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg== +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.10", "@babel/types@^7.22.11", "@babel/types@^7.22.5", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.11.tgz#0e65a6a1d4d9cbaa892b2213f6159485fe632ea2" + integrity sha512-siazHiGuZRz9aB9NpHy9GOs9xiQPKnMzgdr493iI1M67vRXpnEq8ZOOKzezC5q7zwuQ6sDhdSp4SD9ixKSqKZg== dependencies: "@babel/helper-string-parser" "^7.22.5" "@babel/helper-validator-identifier" "^7.22.5" @@ -1433,14 +1433,14 @@ eslint-visitor-keys "^3.3.0" "@eslint-community/regexpp@^4.6.1": - version "4.6.2" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.6.2.tgz#1816b5f6948029c5eaacb0703b850ee0cb37d8f8" - integrity sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw== + version "4.8.0" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.8.0.tgz#11195513186f68d42fbf449f9a7136b2c0c92005" + integrity sha512-JylOEEzDiOryeUnFbQz+oViCXS0KsvR1mvHkoMiu5+UiBvy+RYX7tzlIIIEstF/gVa2tj9AQXk3dgnxv6KxhFg== -"@eslint/eslintrc@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.1.tgz#18d635e24ad35f7276e8a49d135c7d3ca6a46f93" - integrity sha512-9t7ZA7NGGK8ckelF0PQCfcxIUzs1Md5rrO6U/c+FIQNanea5UZC0wqKXH4vHBccmu4ZJgZ2idtPeW7+Q2npOEA== +"@eslint/eslintrc@^2.1.2": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.2.tgz#c6936b4b328c64496692f76944e755738be62396" + integrity sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g== dependencies: ajv "^6.12.4" debug "^4.3.2" @@ -1452,10 +1452,10 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@^8.46.0": - version "8.46.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.46.0.tgz#3f7802972e8b6fe3f88ed1aabc74ec596c456db6" - integrity sha512-a8TLtmPi8xzPkCbp/OGFUo5yhRkHM2Ko9kOWP4znJr0WAhWyThaw3PnwX4vOTWOAMsV2uRt32PPDcEz63esSaA== +"@eslint/js@8.48.0": + version "8.48.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.48.0.tgz#642633964e217905436033a2bd08bf322849b7fb" + integrity sha512-ZSjtmelB7IJfWD2Fvb7+Z+ChTIKWq6kjda95fLcQKNS5aheVHn4IkfgRQE3sIIzTcSLwLcLZUD9UBt+V7+h+Pw== "@hapi/hoek@^9.0.0": version "9.3.0" @@ -1470,9 +1470,9 @@ "@hapi/hoek" "^9.0.0" "@humanwhocodes/config-array@^0.11.10": - version "0.11.10" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.10.tgz#5a3ffe32cc9306365fb3fd572596cd602d5e12d2" - integrity sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ== + version "0.11.11" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.11.tgz#88a04c570dbbc7dd943e4712429c3df09bc32844" + integrity sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA== dependencies: "@humanwhocodes/object-schema" "^1.2.1" debug "^4.1.1" @@ -1780,9 +1780,9 @@ integrity sha512-q/y7VZj/9YpgzDe64Zi6rY1xPizx80JjlU2BTevlajtaE3w1LqweH1gGgxou2N7hdFosXHjGrI4OUvtFXXhGLg== "@next/mdx@^13.4.4": - version "13.4.16" - resolved "https://registry.yarnpkg.com/@next/mdx/-/mdx-13.4.16.tgz#e435c7bce8d6d47d648b970fa13ef47dc83d978e" - integrity sha512-4Yas2f0DFSi1BbtCAaMiv/EdGrBfflMEGBQf/QVAnVISihp/HwXiNhVN7wAt29vN9Mo/J4PtCKt8HQTYD7jbiA== + version "13.4.19" + resolved "https://registry.yarnpkg.com/@next/mdx/-/mdx-13.4.19.tgz#6c7c0c2cdd14fc728afa3336805bc8c8428d2b31" + integrity sha512-EaWA30YxAqFcyQYNxCoL9/TCcZP1Nk6pvW0vf1M54qDAkAGiloWQqyttVKVbRz+qOYk92he6mBB4ej/7pmEinQ== dependencies: source-map "^0.7.0" @@ -2049,9 +2049,9 @@ integrity sha512-laIjwTQaD+5DukBZaygQ79K1Z0jb1bPEMRrkXSLjtCcZm+abyp5YbrqpSLzD42FwWW6gK/aS4NYpJ804nG2brg== "@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.33": - version "4.17.35" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz#c95dd4424f0d32e525d23812aa8ab8e4d3906c4f" - integrity sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg== + version "4.17.36" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.36.tgz#baa9022119bdc05a4adfe740ffc97b5f9360e545" + integrity sha512-zbivROJ0ZqLAtMzgzIUC4oNqDG9iF0lSsAqpOD9kbs5xcIM3dTiyuHvBc7R8MtWBp3AAWGaovJa+wzWPjLYW7Q== dependencies: "@types/node" "*" "@types/qs" "*" @@ -2132,9 +2132,9 @@ integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== "@types/lodash@^4.14.72": - version "4.14.196" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.196.tgz#a7c3d6fc52d8d71328b764e28e080b4169ec7a95" - integrity sha512-22y3o88f4a94mKljsZcanlNWPzO0uBsBdzLAngf2tp533LzZcQzb6+eZPJ+vCTt+bqF2XnvT9gejTLsAcJAJyQ== + version "4.14.197" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.197.tgz#e95c5ddcc814ec3e84c891910a01e0c8a378c54b" + integrity sha512-BMVOiWs0uNxHVlHBgzTIqJYmj+PgCo4euloGF+5m4okL3rEYzM2EEv78mw8zWSMM57dM7kVIgJ2QDvwHSoCI5g== "@types/mdast@^3.0.0": version "3.0.12" @@ -2144,9 +2144,9 @@ "@types/unist" "^2" "@types/mdx@^2.0.0": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@types/mdx/-/mdx-2.0.6.tgz#d03e0cc6f7e6627b296f4ef49049678316e8ee23" - integrity sha512-sVcwEG10aFU2KcM7cIA0M410UPv/DesOPyG8zMVk0QUDexHA3lYmGucpEpZ2dtWWhi2ip3CG+5g/iH0PwoW4Fw== + version "2.0.7" + resolved "https://registry.yarnpkg.com/@types/mdx/-/mdx-2.0.7.tgz#c7482e995673e01b83f8e96df83b3843ea76401f" + integrity sha512-BG4tyr+4amr3WsSEmHn/fXPqaCba/AYZ7dsaQTiavihQunHSIxk+uAtqsjvicNpyHN6cm+B9RVrUOtW9VzIKHw== "@types/mime@*": version "3.0.1" @@ -2169,9 +2169,9 @@ integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA== "@types/node@*": - version "20.5.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.5.0.tgz#7fc8636d5f1aaa3b21e6245e97d56b7f56702313" - integrity sha512-Mgq7eCtoTjT89FqNoTzzXg2XvCi5VMhRV6+I2aYanc6kQCBImeNaAYRs/DyoVqk1YEUJK5gN9VO7HRIdz4Wo3Q== + version "20.5.7" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.5.7.tgz#4b8ecac87fbefbc92f431d09c30e176fc0a7c377" + integrity sha512-dP7f3LdZIysZnmvP3ANJYTSwg+wLLl8p7RqniVlV7j+oXSXAbt9h0WIBFmJy5inWZoX9wZN6eXx+YXd9Rh3RBA== "@types/node@^12.20.10": version "12.20.55" @@ -2199,9 +2199,9 @@ integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== "@types/react@>=16": - version "18.2.20" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.20.tgz#1605557a83df5c8a2cc4eeb743b3dfc0eb6aaeb2" - integrity sha512-WKNtmsLWJM/3D5mG4U84cysVY31ivmyw85dE84fOCk5Hx78wezB/XEjVPWl2JTZ5FkEeaTJf+VgUAUn3PE7Isw== + version "18.2.21" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.21.tgz#774c37fd01b522d0b91aed04811b58e4e0514ed9" + integrity sha512-neFKG/sBAwGxHgXiIxnbm3/AAVQ/cMRS93hvBpg8xYRbeQSPVABp9U2bRnPf0iI4+Ucdv3plSxKK+3CW2ENJxA== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" @@ -2681,15 +2681,15 @@ array-uniq@^1.0.1: integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== array.prototype.findlastindex@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.2.tgz#bc229aef98f6bd0533a2bc61ff95209875526c9b" - integrity sha512-tb5thFFlUcp7NdNF6/MpDk/1r/4awWG1FIz3YqDf+/zJSTezBb+/5WViH41obXULHVpDzoiCLpJ/ZO9YbJMsdw== + version "1.2.3" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz#b37598438f97b579166940814e2c0493a4f50207" + integrity sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" - get-intrinsic "^1.1.3" + get-intrinsic "^1.2.1" array.prototype.flat@^1.3.1: version "1.3.1" @@ -2712,13 +2712,13 @@ array.prototype.flatmap@^1.3.1: es-shim-unscopables "^1.0.0" array.prototype.reduce@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz#6b20b0daa9d9734dd6bc7ea66b5bbce395471eac" - integrity sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q== + version "1.0.6" + resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.6.tgz#63149931808c5fc1e1354814923d92d45f7d96d5" + integrity sha512-UW+Mz8LG/sPSU8jRDCjVr6J/ZKAGpHfwrZ6kWTG5qCxIEiXdVshqGnu5vEZA8S1y6X4aCSbQZ0/EEsfvEvBiSg== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" es-array-method-boxes-properly "^1.0.0" is-string "^1.0.7" @@ -2782,6 +2782,13 @@ async@^3.2.0: resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== +asynciterator.prototype@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz#8c5df0514936cdd133604dfcc9d3fb93f09b2b62" + integrity sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg== + dependencies: + has-symbols "^1.0.3" + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -3063,7 +3070,7 @@ browser-process-hrtime@^1.0.0: resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== -browserslist@^4.14.5, browserslist@^4.21.9: +browserslist@^4.14.5, browserslist@^4.21.10, browserslist@^4.21.9: version "4.21.10" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.10.tgz#dbbac576628c13d3b2231332cb2ec5a46e015bb0" integrity sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ== @@ -3149,9 +3156,9 @@ camelize@^1.0.0: integrity sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ== caniuse-lite@^1.0.30001406, caniuse-lite@^1.0.30001517: - version "1.0.30001520" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001520.tgz#62e2b7a1c7b35269594cf296a80bdf8cb9565006" - integrity sha512-tahF5O9EiiTzwTUqAeFjIZbn4Dnqxzz7ktrgGlMYNLH43Ul26IgTMH/zvL3DG0lZxBYnlT04axvInszUsZULdA== + version "1.0.30001524" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001524.tgz#1e14bce4f43c41a7deaeb5ebfe86664fe8dadb80" + integrity sha512-Jj917pJtYg9HSJBF95HVX3Cdr89JUyLT4IZ8SvM5aDRni95swKgYi3TgYLH5hnGfPE/U1dg6IfZ50UsIlLkwSA== ccount@^2.0.0: version "2.0.1" @@ -3480,16 +3487,16 @@ cookie@0.5.0: integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== core-js-compat@^3.31.0: - version "3.32.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.32.0.tgz#f41574b6893ab15ddb0ac1693681bd56c8550a90" - integrity sha512-7a9a3D1k4UCVKnLhrgALyFcP7YCsLOQIxPd0dKjf/6GuPcgyiGP70ewWdCGrSK7evyhymi0qO4EqCmSJofDeYw== + version "3.32.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.32.1.tgz#55f9a7d297c0761a8eb1d31b593e0f5b6ffae964" + integrity sha512-GSvKDv4wE0bPnQtjklV101juQ85g6H3rm5PDP20mqlS5j0kXF3pP97YvAu5hl+uFHqMictp3b2VxOHljWMAtuA== dependencies: - browserslist "^4.21.9" + browserslist "^4.21.10" core-js@^3.30.2: - version "3.32.0" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.32.0.tgz#7643d353d899747ab1f8b03d2803b0312a0fb3b6" - integrity sha512-rd4rYZNlF3WuoYuRIDEmbR/ga9CeuWX9U05umAvgrrZoHY4Z++cp/xwPQMvUpBB4Ag6J8KfD80G0zwCyaSxDww== + version "3.32.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.32.1.tgz#a7d8736a3ed9dd05940c3c4ff32c591bb735be77" + integrity sha512-lqufgNn9NLnESg5mQeYsxQP5w7wrViSj0jr/kv6ECQiByzQkrn1MKvV0L3acttpDqfQrHLwr2KCMgX5b8X+lyQ== core-util-is@~1.0.0: version "1.0.3" @@ -3844,9 +3851,9 @@ dns-equal@^1.0.0: integrity sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg== dns-packet@^5.2.2: - version "5.6.0" - resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.6.0.tgz#2202c947845c7a63c23ece58f2f70ff6ab4c2f7d" - integrity sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ== + version "5.6.1" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.6.1.tgz#ae888ad425a9d1478a0674256ab866de1012cf2f" + integrity sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw== dependencies: "@leichtgewicht/ip-codec" "^2.0.1" @@ -3899,9 +3906,9 @@ ee-first@1.1.1: integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== electron-to-chromium@^1.4.477: - version "1.4.492" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.492.tgz#83fed8beb64ec60578069e15dddd17b13a77ca56" - integrity sha512-36K9b/6skMVwAIEsC7GiQ8I8N3soCALVSHqWHzNDtGemAcI9Xu8hP02cywWM0A794rTHm0b0zHPeLJHtgFVamQ== + version "1.4.505" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.505.tgz#00571ade5975b58413f0f56a665b065bfc29cdfc" + integrity sha512-0A50eL5BCCKdxig2SsCXhpuztnB9PfUgRMojj5tMvt8O54lbwz3t6wNgnpiTRosw5QjlJB7ixhVyeg8daLQwSQ== elegant-spinner@^1.0.1: version "1.0.1" @@ -3990,7 +3997,7 @@ error-stack-parser@^1.3.6: dependencies: stackframe "^0.3.1" -es-abstract@^1.19.0, es-abstract@^1.20.4, es-abstract@^1.21.2: +es-abstract@^1.20.4, es-abstract@^1.21.2, es-abstract@^1.22.1: version "1.22.1" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.1.tgz#8b4e5fc5cefd7f1660f0f8e1a52900dfbc9d9ccc" integrity sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw== @@ -4055,6 +4062,26 @@ es-get-iterator@^1.1.3: isarray "^2.0.5" stop-iteration-iterator "^1.0.0" +es-iterator-helpers@^1.0.12: + version "1.0.14" + resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.14.tgz#19cd7903697d97e21198f3293b55e8985791c365" + integrity sha512-JgtVnwiuoRuzLvqelrvN3Xu7H9bu2ap/kQ2CrM62iidP8SKuD99rWU3CJy++s7IVL2qb/AjXPGR/E7i9ngd/Cw== + dependencies: + asynciterator.prototype "^1.0.0" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-set-tostringtag "^2.0.1" + function-bind "^1.1.1" + get-intrinsic "^1.2.1" + globalthis "^1.0.3" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" + has-symbols "^1.0.3" + internal-slot "^1.0.5" + iterator.prototype "^1.1.0" + safe-array-concat "^1.0.0" + es-module-lexer@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.3.0.tgz#6be9c9e0b4543a60cd166ff6f8b4e9dae0b0c16f" @@ -4185,9 +4212,9 @@ eslint-module-utils@^2.8.0: requireindex "~1.1.0" eslint-plugin-import@^2.26.0: - version "2.28.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.28.0.tgz#8d66d6925117b06c4018d491ae84469eb3cb1005" - integrity sha512-B8s/n+ZluN7sxj9eUf7/pRFERX0r5bnFA2dCaLHy2ZeaQEAz0k+ZZkFWRFHJAqxfxQDx6KLv9LeIki7cFdwW+Q== + version "2.28.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz#63b8b5b3c409bfc75ebaf8fb206b07ab435482c4" + integrity sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A== dependencies: array-includes "^3.1.6" array.prototype.findlastindex "^1.2.2" @@ -4198,13 +4225,12 @@ eslint-plugin-import@^2.26.0: eslint-import-resolver-node "^0.3.7" eslint-module-utils "^2.8.0" has "^1.0.3" - is-core-module "^2.12.1" + is-core-module "^2.13.0" is-glob "^4.0.3" minimatch "^3.1.2" object.fromentries "^2.0.6" object.groupby "^1.0.0" object.values "^1.1.6" - resolve "^1.22.3" semver "^6.3.1" tsconfig-paths "^3.14.2" @@ -4257,14 +4283,15 @@ eslint-plugin-react@3.4.2: integrity sha512-rIhweRuQMLxNOOHHl9pEkQR+6QiKt9wUHpBvjSefSzUg5qdhC08jc2rxsSm1TAXii9rxabhzK5MUu+YBJxn6sA== eslint-plugin-react@^7.31.11: - version "7.33.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.33.1.tgz#bc27cccf860ae45413a4a4150bf0977345c1ceab" - integrity sha512-L093k0WAMvr6VhNwReB8VgOq5s2LesZmrpPdKz/kZElQDzqS7G7+DnKoqT+w4JwuiGeAhAvHO0fvy0Eyk4ejDA== + version "7.33.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz#69ee09443ffc583927eafe86ffebb470ee737608" + integrity sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw== dependencies: array-includes "^3.1.6" array.prototype.flatmap "^1.3.1" array.prototype.tosorted "^1.1.1" doctrine "^2.1.0" + es-iterator-helpers "^1.0.12" estraverse "^5.3.0" jsx-ast-utils "^2.4.1 || ^3.0.0" minimatch "^3.1.2" @@ -4298,20 +4325,20 @@ eslint-visitor-keys@^2.1.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.2: - version "3.4.2" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.2.tgz#8c2095440eca8c933bedcadf16fefa44dbe9ba5f" - integrity sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw== +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== eslint@^8.30.0: - version "8.46.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.46.0.tgz#a06a0ff6974e53e643acc42d1dcf2e7f797b3552" - integrity sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg== + version "8.48.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.48.0.tgz#bf9998ba520063907ba7bfe4c480dc8be03c2155" + integrity sha512-sb6DLeIuRXxeM1YljSe1KEx9/YYeZFQWcV8Rq9HfigmdDEugjLEVEa1ozDjL6YDjBpQHPJxJzze+alxi4T3OLg== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^2.1.1" - "@eslint/js" "^8.46.0" + "@eslint/eslintrc" "^2.1.2" + "@eslint/js" "8.48.0" "@humanwhocodes/config-array" "^0.11.10" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" @@ -4322,7 +4349,7 @@ eslint@^8.30.0: doctrine "^3.0.0" escape-string-regexp "^4.0.0" eslint-scope "^7.2.2" - eslint-visitor-keys "^3.4.2" + eslint-visitor-keys "^3.4.3" espree "^9.6.1" esquery "^1.4.2" esutils "^2.0.2" @@ -4723,14 +4750,15 @@ find-up@^5.0.0: path-exists "^4.0.0" flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + version "3.1.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.1.0.tgz#0e54ab4a1a60fe87e2946b6b00657f1c99e1af3f" + integrity sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew== dependencies: - flatted "^3.1.0" + flatted "^3.2.7" + keyv "^4.5.3" rimraf "^3.0.2" -flatted@^3.1.0: +flatted@^3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== @@ -4828,9 +4856,9 @@ fs.realpath@^1.0.0: integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fsevents@^2.3.2, fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== ftp@^0.3.10: version "0.3.10" @@ -4846,16 +4874,16 @@ function-bind@^1.1.1: integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== function.prototype.name@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" - integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== + version "1.1.6" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" + integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.0" - functions-have-names "^1.2.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + functions-have-names "^1.2.3" -functions-have-names@^1.2.2, functions-have-names@^1.2.3: +functions-have-names@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== @@ -4992,9 +5020,9 @@ globals@^11.1.0: integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globals@^13.19.0: - version "13.20.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" - integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== + version "13.21.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.21.0.tgz#163aae12f34ef502f5153cfbdd3600f36c63c571" + integrity sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg== dependencies: type-fest "^0.20.2" @@ -5081,7 +5109,7 @@ grommet-icons@^4.10.0: "grommet@https://github.com/grommet/grommet/tarball/stable": version "2.33.1" - resolved "https://github.com/grommet/grommet/tarball/stable#06844fd745a8fe8c1fe771a63f67896cc3b65cf2" + resolved "https://github.com/grommet/grommet/tarball/stable#93a6ef1b81ff0a74f8ea609a6a2365a1ecd4eed5" dependencies: grommet-icons "^4.10.0" hoist-non-react-statics "^3.2.0" @@ -5338,9 +5366,9 @@ httpntlm@^1.8.10: underscore "~1.12.1" httpreq@>=0.4.22: - version "0.5.2" - resolved "https://registry.yarnpkg.com/httpreq/-/httpreq-0.5.2.tgz#be6777292fa1038d7771d7c01d9a5e1219de951c" - integrity sha512-2Jm+x9WkExDOeFRrdBCBSpLPT5SokTcRHkunV3pjKmX/cx6av8zQ0WtHUMDrYb6O4hBFzNU6sxJEypvRUVYKnw== + version "1.1.0" + resolved "https://registry.yarnpkg.com/httpreq/-/httpreq-1.1.0.tgz#ea53ef7a5de82b806cf44fbade99e092e7c4f7d4" + integrity sha512-P2ROAc2JG4Y1+EL8vRusYb3p6BK5WRZLVj8WLrvtQJL9qQgocqieU9+0cWWwrL2FroUjXGtUDo4lOKXoq+Et+g== https-proxy-agent@5, https-proxy-agent@^5.0.0: version "5.0.1" @@ -5466,7 +5494,7 @@ inline-style-parser@0.1.1: resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1" integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q== -internal-slot@^1.0.3, internal-slot@^1.0.4, internal-slot@^1.0.5: +internal-slot@^1.0.4, internal-slot@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== @@ -5548,6 +5576,13 @@ is-arrayish@^0.2.1: resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== +is-async-function@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.0.0.tgz#8e4418efd3e5d3a6ebb0164c05ef5afb69aa9646" + integrity sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA== + dependencies: + has-tostringtag "^1.0.0" + is-bigint@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" @@ -5587,7 +5622,7 @@ is-ci@^1.0.10: dependencies: ci-info "^1.5.0" -is-core-module@^2.12.1, is-core-module@^2.13.0, is-core-module@^2.9.0: +is-core-module@^2.13.0, is-core-module@^2.9.0: version "2.13.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== @@ -5631,6 +5666,13 @@ is-extglob@^2.1.1: resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== +is-finalizationregistry@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz#c8749b65f17c133313e661b1289b95ad3dbd62e6" + integrity sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw== + dependencies: + call-bind "^1.0.2" + is-finite@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" @@ -5646,6 +5688,13 @@ is-generator-fn@^2.0.0: resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== +is-generator-function@^1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" + integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== + dependencies: + has-tostringtag "^1.0.0" + is-glob@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" @@ -5910,6 +5959,17 @@ istanbul-reports@^3.1.3: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" +iterator.prototype@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.0.tgz#690c88b043d821f783843aaf725d7ac3b62e3b46" + integrity sha512-rjuhAk1AJ1fssphHD0IFV6TWL40CwRZ53FrztKx43yk2v6rguBYsY4Bj1VU4HmoMmKwZUlx7mfnhDf9cOp4YTw== + dependencies: + define-properties "^1.1.4" + get-intrinsic "^1.1.3" + has-symbols "^1.0.3" + has-tostringtag "^1.0.0" + reflect.getprototypeof "^1.0.3" + jest-changed-files@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.5.1.tgz#a348aed00ec9bf671cc58a66fcbe7c3dfd6a68f5" @@ -6316,9 +6376,9 @@ jest@^27.5.1: jest-cli "^27.5.1" joi@^17.7.0: - version "17.9.2" - resolved "https://registry.yarnpkg.com/joi/-/joi-17.9.2.tgz#8b2e4724188369f55451aebd1d0b1d9482470690" - integrity sha512-Itk/r+V4Dx0V3c7RLFdRh12IOjySm2/WGPMubBT92cQvRfYZhPM2W0hZlctjj72iES8jsRCwp7S/cRmWBnJ4nw== + version "17.10.0" + resolved "https://registry.yarnpkg.com/joi/-/joi-17.10.0.tgz#04e249daa24d48fada2d34046a8262e474b1326f" + integrity sha512-hrazgRSlhzacZ69LdcKfhi3Vu13z2yFfoAzmEov3yFIJlatTdVGUW6vle1zjH8qkzdCn/qGw8rapjqsObbYXAg== dependencies: "@hapi/hoek" "^9.0.0" "@hapi/topo" "^5.0.0" @@ -6404,6 +6464,11 @@ jsesc@~0.5.0: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" @@ -6431,7 +6496,7 @@ json5@^1.0.2: dependencies: minimist "^1.2.0" -json5@^2.1.1, json5@^2.1.2, json5@^2.2.2: +json5@^2.1.1, json5@^2.1.2, json5@^2.2.2, json5@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== @@ -6462,6 +6527,13 @@ jsonfile@^6.0.1: object.assign "^4.1.4" object.values "^1.1.6" +keyv@^4.5.3: + version "4.5.3" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.3.tgz#00873d2b046df737963157bd04f294ca818c9c25" + integrity sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug== + dependencies: + json-buffer "3.0.1" + kind-of@^6.0.2: version "6.0.3" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" @@ -7486,9 +7558,9 @@ node-fetch@2.6.7: whatwg-url "^5.0.0" node-fetch@^2.3.0, node-fetch@^2.6.0: - version "2.6.12" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.12.tgz#02eb8e22074018e3d5a83016649d04df0e348fba" - integrity sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g== + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== dependencies: whatwg-url "^5.0.0" @@ -7558,22 +7630,22 @@ object.assign@^4.1.2, object.assign@^4.1.4: object-keys "^1.1.1" object.entries@^1.1.5, object.entries@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.6.tgz#9737d0e5b8291edd340a3e3264bb8a3b00d5fa23" - integrity sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w== + version "1.1.7" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.7.tgz#2b47760e2a2e3a752f39dd874655c61a7f03c131" + integrity sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" object.fromentries@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.6.tgz#cdb04da08c539cffa912dcd368b886e0904bfa73" - integrity sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg== + version "2.0.7" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616" + integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" object.getownpropertydescriptors@^2.0.3: version "2.1.6" @@ -7587,31 +7659,31 @@ object.getownpropertydescriptors@^2.0.3: safe-array-concat "^1.0.0" object.groupby@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.0.tgz#cb29259cf90f37e7bac6437686c1ea8c916d12a9" - integrity sha512-70MWG6NfRH9GnbZOikuhPPYzpUpof9iW2J9E4dW7FXTqPNb6rllE6u39SKwwiNh8lCwX3DDb5OgcKGiEBrTTyw== + version "1.0.1" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.1.tgz#d41d9f3c8d6c778d9cbac86b4ee9f5af103152ee" + integrity sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ== dependencies: call-bind "^1.0.2" define-properties "^1.2.0" - es-abstract "^1.21.2" + es-abstract "^1.22.1" get-intrinsic "^1.2.1" object.hasown@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.2.tgz#f919e21fad4eb38a57bc6345b3afd496515c3f92" - integrity sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw== + version "1.1.3" + resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.3.tgz#6a5f2897bb4d3668b8e79364f98ccf971bda55ae" + integrity sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA== dependencies: - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" object.values@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" - integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== + version "1.1.7" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.7.tgz#617ed13272e7e1071b43973aa1655d9291b8442a" + integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" obuf@^1.0.0, obuf@^1.1.2: version "1.1.2" @@ -8322,6 +8394,18 @@ rechoir@^0.8.0: dependencies: resolve "^1.20.0" +reflect.getprototypeof@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.3.tgz#2738fd896fcc3477ffbd4190b40c2458026b6928" + integrity sha512-TTAOZpkJ2YLxl7mVHWrNo3iDMEkYlva/kgFcXndqMgbo/AZUmmavEkdXV+hXtE4P8xdyEKRzalaFqZVuwIk/Nw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + get-intrinsic "^1.1.1" + globalthis "^1.0.3" + which-builtin-type "^1.1.3" + refractor@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/refractor/-/refractor-3.6.0.tgz#ac318f5a0715ead790fcfb0c71f4dd83d977935a" @@ -8355,7 +8439,7 @@ regenerator-transform@^0.15.2: dependencies: "@babel/runtime" "^7.8.4" -regexp.prototype.flags@^1.4.3, regexp.prototype.flags@^1.5.0: +regexp.prototype.flags@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb" integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA== @@ -8496,7 +8580,7 @@ resolve.exports@^1.1.0: resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.1.tgz#05cfd5b3edf641571fd46fa608b610dda9ead999" integrity sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ== -resolve@^1.14.2, resolve@^1.20.0, resolve@^1.22.1, resolve@^1.22.3, resolve@^1.22.4: +resolve@^1.14.2, resolve@^1.20.0, resolve@^1.22.1, resolve@^1.22.4: version "1.22.4" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.4.tgz#1dc40df46554cdaf8948a486a10f6ba1e2026c34" integrity sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg== @@ -9014,17 +9098,17 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: strip-ansi "^6.0.1" string.prototype.matchall@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3" - integrity sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg== + version "4.0.9" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.9.tgz#148779de0f75d36b13b15885fec5cadde994520d" + integrity sha512-6i5hL3MqG/K2G43mWXWgP+qizFW/QH/7kCNN13JrJS5q48FN5IKksLDscexKP3dnmB6cdm9jlNgAsWNLpSykmA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - get-intrinsic "^1.1.3" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" has-symbols "^1.0.3" - internal-slot "^1.0.3" - regexp.prototype.flags "^1.4.3" + internal-slot "^1.0.5" + regexp.prototype.flags "^1.5.0" side-channel "^1.0.4" string.prototype.trim@^1.2.7: @@ -9214,9 +9298,9 @@ terser-webpack-plugin@^5.3.7: terser "^5.16.8" terser@^5.16.8: - version "5.19.2" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.19.2.tgz#bdb8017a9a4a8de4663a7983f45c506534f9234e" - integrity sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA== + version "5.19.3" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.19.3.tgz#359baeba615aef13db4b8c4d77a2aa0d8814aa9e" + integrity sha512-pQzJ9UJzM0IgmT4FAtYI6+VqFf0lj/to58AV0Xfgg0Up37RyPG7Al+1cepC6/BVuAxR9oNb41/DL4DEoHJvTdg== dependencies: "@jridgewell/source-map" "^0.3.3" acorn "^8.8.2" @@ -9286,9 +9370,9 @@ testcafe-hammerhead@31.4.3: tunnel-agent "0.6.0" testcafe-hammerhead@>=19.4.0: - version "31.5.0" - resolved "https://registry.yarnpkg.com/testcafe-hammerhead/-/testcafe-hammerhead-31.5.0.tgz#5d60abc578359f46c16e77397c34fe684332c802" - integrity sha512-q4zT2rGOdkIkY+jyLUoAxHbY7gpm8IFGmbsq75Aez0n+LT1wpkY8g2u8iIUmWwBPy3Z/P8c/OPLl/p7AssaO5A== + version "31.6.1" + resolved "https://registry.yarnpkg.com/testcafe-hammerhead/-/testcafe-hammerhead-31.6.1.tgz#181fe81cf10bd43115087d004dc6c2cad0d02f35" + integrity sha512-tMdF183bTL+hMNzIdUUNpg32T2hlwaI9CEXxOJpgg6VnzCpy1RDV5+wcIJB1ywhs6cdd5ltQZuaHrm1tWbyR1A== dependencies: "@adobe/css-tools" "^4.3.0-rc.1" "@electron/asar" "^3.2.3" @@ -9609,9 +9693,9 @@ tsconfig-paths@^3.14.2: strip-bom "^3.0.0" tslib@^2.0.1, tslib@^2.1.0, tslib@^2.4.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.1.tgz#fd8c9a0ff42590b25703c0acb3de3d3f4ede0410" - integrity sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig== + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== tunnel-agent@0.6.0: version "0.6.0" @@ -10169,9 +10253,9 @@ whatwg-encoding@^2.0.0: iconv-lite "0.6.3" whatwg-fetch@>=0.10.0: - version "3.6.17" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.17.tgz#009bbbfc122b227b74ba1ff31536b3a1a0e0e212" - integrity sha512-c4ghIvG6th0eudYwKZY5keb81wtFz9/WeAHAoy8+r18kcWlitUIrmGFQ2rWEl4UCKUilD3zCLHOIPheHx5ypRQ== + version "3.6.18" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.18.tgz#2f640cdee315abced7daeaed2309abd1e44e62d4" + integrity sha512-ltN7j66EneWn5TFDO4L9inYC1D+Czsxlrw2SalgjMmEMkLfA5SIZxEFdE6QtHFiiM6Q7WL32c7AkI3w6yxM84Q== whatwg-mimetype@^2.3.0: version "2.3.0" @@ -10227,6 +10311,24 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" +which-builtin-type@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.1.3.tgz#b1b8443707cc58b6e9bf98d32110ff0c2cbd029b" + integrity sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw== + dependencies: + function.prototype.name "^1.1.5" + has-tostringtag "^1.0.0" + is-async-function "^2.0.0" + is-date-object "^1.0.5" + is-finalizationregistry "^1.0.2" + is-generator-function "^1.0.10" + is-regex "^1.1.4" + is-weakref "^1.0.2" + isarray "^2.0.5" + which-boxed-primitive "^1.0.2" + which-collection "^1.0.1" + which-typed-array "^1.1.9" + which-collection@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" From 23a6599963be022270c3ea28bb474937267ce6d1 Mon Sep 17 00:00:00 2001 From: beahackman Date: Thu, 31 Aug 2023 08:54:01 -0700 Subject: [PATCH 19/26] revised for code readability --- .../src/components/cards/ContentCard.js | 10 +- .../src/layouts/content/InPageNavigation.js | 14 +- .../src/layouts/navigation/SearchResult.js | 18 +- aries-site/src/pages/_app.js | 162 +++++++++--------- aries-site/src/utils/pageVisitTracker.js | 29 ++-- 5 files changed, 117 insertions(+), 116 deletions(-) diff --git a/aries-site/src/components/cards/ContentCard.js b/aries-site/src/components/cards/ContentCard.js index 9ccb837d7..2885147b5 100644 --- a/aries-site/src/components/cards/ContentCard.js +++ b/aries-site/src/components/cards/ContentCard.js @@ -5,7 +5,7 @@ import { Identifier } from 'aries-core'; import { PreviewImageCard } from './PreviewCard'; import { LinkCard } from './LinkCard'; import { useDarkMode } from '../../utils'; -import pageVisitTracker from '../../utils/pageVisitTracker'; +import { pageVisitTracker } from '../../utils/pageVisitTracker'; import { NotificationTag } from '../../layouts/content/NotificationTag'; export const ContentCard = forwardRef( @@ -15,10 +15,10 @@ export const ContentCard = forwardRef( const updateHistory = JSON.parse( window.localStorage.getItem('update-history'), ); - let newUpdate = false; + let showUpdate = false; let changeKind; if (updateHistory && name in updateHistory) { - newUpdate = pageVisitTracker(name); + showUpdate = pageVisitTracker(name); changeKind = updateHistory[name].changeKind; } @@ -73,7 +73,7 @@ export const ContentCard = forwardRef( {parent.icon('small', parent.color)} {parent.name} - {newUpdate && changeKind === 'Update' && ( + {showUpdate && changeKind === 'Update' && ( )} - {newUpdate && changeKind === 'New' && ( + {showUpdate && changeKind === 'New' && ( { else if (level.length === 3) subsectionPad = 'medium'; let sectionList; - let newUpdate = false; + let showUpdate = false; if ( contentHistory && @@ -123,8 +123,8 @@ export const InPageNavigation = ({ headings, title }) => { ) { sectionList = contentHistory[title].sections; Object.values(sectionList).forEach(val => { - if (val === headingTitle) { - newUpdate = true; + if (val.toLowerCase() === headingTitle.toLowerCase()) { + showUpdate = true; } }); } @@ -151,10 +151,14 @@ export const InPageNavigation = ({ headings, title }) => { {headingTitle} - {newUpdate && ( + {showUpdate && ( - + )} diff --git a/aries-site/src/layouts/navigation/SearchResult.js b/aries-site/src/layouts/navigation/SearchResult.js index 16579cd25..8e09c06ba 100644 --- a/aries-site/src/layouts/navigation/SearchResult.js +++ b/aries-site/src/layouts/navigation/SearchResult.js @@ -4,20 +4,20 @@ import { Box, Paragraph, Text, Tag } from 'grommet'; import { getPageDetails } from '../../utils'; import { HighlightPhrase } from '../../components'; -import pageVisitTracker from '../../utils/pageVisitTracker'; +import { pageVisitTracker } from '../../utils/pageVisitTracker'; import { NotificationTag } from '../content/NotificationTag'; export const SearchResult = ({ query, result }) => { const hub = result.url && result.url.split('/')[1]; const parent = getPageDetails(hub); - const history = JSON.parse(window.localStorage.getItem('update-history')); - let newUpdate, changeKind; - if (result.title in history) { - newUpdate = pageVisitTracker(result.title); - changeKind = history[result.title].changeKind; + const updateHistory = JSON.parse(window.localStorage.getItem('update-history')); + let showUpdate, changeKind; + if (result.title in updateHistory) { + showUpdate = pageVisitTracker(result.title); + changeKind = updateHistory[result.title].changeKind; } else { - newUpdate = false; + showUpdate = false; } return ( @@ -38,7 +38,7 @@ export const SearchResult = ({ query, result }) => { {result.title} - {newUpdate && changeKind === 'New' && ( + {showUpdate && changeKind === 'New' && ( { a11yTitle={`There's a new item called ${result.title}`} /> )} - {newUpdate && changeKind === 'Update' && ( + {showUpdate && changeKind === 'Update' && ( str.split('-').join(' '); @@ -63,6 +67,10 @@ const backgroundImages = { export const ViewContext = createContext(undefined); +//thirtyDaysAgo calculated in milliseconds +const thirtyDaysAgo = new Date().getTime() - 30 * 24 * 60 * 60 * 1000; +const notificationHeading = '#### Notifications\r\n'; + function App({ Component, pageProps, router }) { const route = router.route.split('/'); @@ -71,18 +79,13 @@ function App({ Component, pageProps, router }) { //state that holds boolean for whether or not update info is ready to be rendered const [pageUpdateReady, setPageUpdateReady] = useState(false); - //this effect is only for the first time a page loads + // this effect is only for the first time _app mounts useEffect(() => { - let name = router.asPath; - let nameArray = name.split('/'); - name = nameArray[Object.keys(nameArray).length - 1]; + const route = router.route; + const nameArray = route.split('/'); + let name = nameArray[nameArray.length - 1].split('#')[0]; name = name.charAt(0).toUpperCase() + name.slice(1); - name = name.split('#')[0]; - name = name.split('?')[0]; - //imported and put fetchData in here so that it can access the contentHistory function - //thirtyDaysAgo calculated in milliseconds - const thirtyDaysAgo = new Date().getTime() - 30 * 24 * 60 * 60 * 1000; fetch( `https://api.github.com/repos/grommet/hpe-design-system/pulls?state=closed`, ) @@ -90,72 +93,75 @@ function App({ Component, pageProps, router }) { .then(data => { let nextHistory = {}; let localStorageKey; - for (let i = 0; i < Object.keys(data).length; i++) { - if (new Date(data[i].merged_at).getTime() < thirtyDaysAgo) { - //if it is older than thirty days ago - break; - } - let prDescription = data[i].body; - const notificationHeader = '#### Notifications\r\n'; - if (prDescription.includes(notificationHeader)) { + + for (let i = 0; i < data.length; i++) { + const prDescription = data[i].body; + const mergedAt = data[i].merged_at; + // PR was merged within the last 30 days and a notification + // is flagged in the PR descrription + if ( + new Date(mergedAt).getTime() > thirtyDaysAgo && + prDescription && + prDescription.includes(notificationHeading) + ) { const indexOfFirstComponent = - prDescription.search(notificationHeader) + - notificationHeader.length; + prDescription.search(notificationHeading) + + notificationHeading.length; //the position of the first bracket containing either new/updates is 22 characters away //this includes the notification header and the \r\n\r\n that follow - const notificationList = prDescription + const notificationsParts = prDescription .slice(indexOfFirstComponent) + //splits them into an array jumping between name, sections, and description + //like: ['[New]Header', ['Usage', 'Some Section'], '[The description for header]', '[Update]Button', ['Dos and Donts'], '[Description for button]'] .split('\r\n\r\n'); - //splits them into an array jumping between name, sections, and description - //like: ['[New]Header', ['Usage', 'Some Section'], '[The description for header]', '[Update]Button', ['Dos and Donts'], '[Description for button]'] + const regExp = /\[([^)]+)\]/; - for (let j = 0; j < Object.keys(notificationList).length; j += 3) { - //+= 3 so it can jump between component descriptions - const changeKindAndName = notificationList[j].trim(); - const changeKind = regExp.exec(changeKindAndName)[1].trim(); - let pageName; - if (changeKind === 'Update') { - pageName = changeKindAndName.slice('8').trim(); - } else if (changeKind === 'New') { - pageName = changeKindAndName.slice('5').trim(); - } + //+= 3 so it can jump between component descriptions + for ( + let j = 0; + j < Object.keys(notificationsParts).length; + j += 3 + ) { + // changeKindAndName is in format: [Update]Button or [New]Button + // where Button is the page name + const changeKindAndName = notificationsParts[j].trim(); + const changeKind = regExp.exec(changeKindAndName)[0]; + + // removes the [Update] or [New] + const pageName = + changeKindAndName && + // [Update] + changeKind && + changeKindAndName.slice(changeKind.length).trim(); + if (pageName && !(pageName in nextHistory)) { - let sections = notificationList[j + 1].slice(1, -1).split(']['); - //to ensure there is proper capitlization for the section headers - for (let i = 0; i < Object.keys(sections).length; i++) { - sections[i] = - sections[i].charAt(0).toUpperCase() + - sections[i].slice(1).toLowerCase(); - } + let sections = notificationsParts[j + 1] + .slice(1, -1) + .split(']['); - let anchorLink = ''; - if (Object.keys(sections).length === 1) { - //add an active link if only one section has been updated - anchorLink = - '#' + sections[0].trim().replace(/\s+/g, '-').toLowerCase(); + let href; + if (sections.length === 1) { + // add an active link if only one section has been updated + href = '#' + nameToSlug(sections[0].trim()); } - let newUpdate; - localStorageKey = `${pageName - ?.toLowerCase() - .replace(/\s+/g, '-')}-last-visited`; + let showUpdate; + localStorageKey = getLocalStorageKey(pageName); if (window.localStorage.getItem(localStorageKey)) { - newUpdate = - window.localStorage.getItem(localStorageKey) > - new Date(data[i].merged_at).getTime() - ? false //if the last visit is more recent than the reported update, dont show it - : true; + showUpdate = + window.localStorage.getItem(localStorageKey) < + new Date(mergedAt).getTime(); } else { - //have never visited the page before - newUpdate = true; + // user has never visited the page before + showUpdate = true; } nextHistory[pageName] = { - changeKind: changeKind, - description: notificationList[j + 2].slice(1, -1), - date: data[i].merged_at, + changeKind: regExp.exec(changeKindAndName)[1].trim(), + description: notificationsParts[j + 2].slice(1, -1), + date: mergedAt, sections: sections, - action: anchorLink, - update: newUpdate, + action: href, + update: showUpdate, }; } } @@ -168,10 +174,8 @@ function App({ Component, pageProps, router }) { setContentHistory(nextHistory); setPageUpdateReady(true); if (name) { - let localStorageKey = `${name - ?.toLowerCase() - .replace(/\s+/g, '-')}-last-visited`; - let dateNow = new Date().getTime(); + const localStorageKey = getLocalStorageKey(name); + const dateNow = new Date().getTime(); window.localStorage.setItem(localStorageKey, dateNow); } }) @@ -184,31 +188,25 @@ function App({ Component, pageProps, router }) { skipLinks.focus(); if (typeof window !== 'undefined') { - let viewHistory = JSON.parse( + const updateHistory = JSON.parse( window.localStorage.getItem('update-history'), ); - let name = router.asPath; - let nameArray = name.split('/'); - name = nameArray[Object.keys(nameArray).length - 1]; + const routeParts = router.route.split('/'); + let name = routeParts[routeParts.length - 1]; name = name.charAt(0).toUpperCase() + name.slice(1); + let localStorageKey = getLocalStorageKey(name); + const now = new Date().getTime(); - //to cover cases where they navigate via the search function - let pageName = name.split('?')[0]; - let localStorageKey = `${pageName - ?.toLowerCase() - .replace(/\s+/g, '-')}-last-visited`; - const dateTime = new Date().getTime(); - - //every time it re-routes, see if the given page has a reported update in the last 30 days (what's reported in viewHistory) + //every time it re-routes, see if the given page has a reported update in the last 30 days (what's reported in updateHistory) //then check if it should be shown (T/F), and set that in local storage and the state variable - if (viewHistory && pageName in viewHistory) { - viewHistory[pageName].update = pageVisitTracker(pageName); + if (updateHistory && name in updateHistory) { + updateHistory[name].update = pageVisitTracker(name); window.localStorage.setItem( 'update-history', - JSON.stringify(viewHistory), + JSON.stringify(updateHistory), ); - window.localStorage.setItem(localStorageKey, dateTime); - setContentHistory(viewHistory); + window.localStorage.setItem(localStorageKey, now); + setContentHistory(updateHistory); setPageUpdateReady(true); } } diff --git a/aries-site/src/utils/pageVisitTracker.js b/aries-site/src/utils/pageVisitTracker.js index d83539e9a..a056ef2c5 100644 --- a/aries-site/src/utils/pageVisitTracker.js +++ b/aries-site/src/utils/pageVisitTracker.js @@ -1,32 +1,31 @@ +export const getLocalStorageKey = title => + `${title?.toLowerCase().replace(/\s+/g, '-')}-last-visited`; + // determines whether or not the update should be shown given the most recent commit and last-visit records -const pageVisitTracker = function (title) { - const localStorageKey = `${title - ?.toLowerCase() - .replace(/\s+/g, '-')}-last-visited`; // the name associated with the values in localStorage - let newUpdate; - let history = JSON.parse(window.localStorage.getItem('update-history')); - if (title in history) { +export const pageVisitTracker = function (title) { + const localStorageKey = getLocalStorageKey(title); // the name associated with the values in localStorage + let showUpdate; + let updateHistory = JSON.parse(window.localStorage.getItem('update-history')); + if (title in updateHistory) { //there has been a reported update within the last 30 days if (window.localStorage.getItem(localStorageKey)) { //there has been a guaranteed update and we've seen this page before if ( window.localStorage.getItem(localStorageKey) > - new Date(history[title].date).getTime() + new Date(updateHistory[title].date).getTime() ) { //if when they saw the page is after the update, dont show it - newUpdate = false; + showUpdate = false; } else { //page has reported an update within 30 days, it has been seen before, but it was before the update was released - newUpdate = true; + showUpdate = true; } } else { //it's within 30 days but it has never seen the page before - newUpdate = true; + showUpdate = true; } } else { - newUpdate = false; // no update, nothing reported in the PRs + showUpdate = false; // no update, nothing reported in the PRs } - return newUpdate; + return showUpdate; }; - -export default pageVisitTracker; From 0170ac63d12406572bc91744a8e0b8fddc9c8f9a Mon Sep 17 00:00:00 2001 From: beahackman Date: Fri, 1 Sep 2023 15:23:24 -0700 Subject: [PATCH 20/26] fixed conflict and code readability revisions --- aries-site/src/components/cards/ContentCard.js | 4 +++- aries-site/src/layouts/content/InPageNavigation.js | 9 ++++----- aries-site/src/layouts/navigation/SearchResult.js | 7 +++++-- aries-site/src/pages/_app.js | 1 - 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/aries-site/src/components/cards/ContentCard.js b/aries-site/src/components/cards/ContentCard.js index 2885147b5..91bae2e67 100644 --- a/aries-site/src/components/cards/ContentCard.js +++ b/aries-site/src/components/cards/ContentCard.js @@ -76,7 +76,9 @@ export const ContentCard = forwardRef( {showUpdate && changeKind === 'Update' && ( diff --git a/aries-site/src/layouts/content/InPageNavigation.js b/aries-site/src/layouts/content/InPageNavigation.js index ad8455e38..9a0793e75 100644 --- a/aries-site/src/layouts/content/InPageNavigation.js +++ b/aries-site/src/layouts/content/InPageNavigation.js @@ -152,14 +152,13 @@ export const InPageNavigation = ({ headings, title }) => { {headingTitle} {showUpdate && ( - - + - )} diff --git a/aries-site/src/layouts/navigation/SearchResult.js b/aries-site/src/layouts/navigation/SearchResult.js index 8e09c06ba..0e6017dc5 100644 --- a/aries-site/src/layouts/navigation/SearchResult.js +++ b/aries-site/src/layouts/navigation/SearchResult.js @@ -11,8 +11,11 @@ export const SearchResult = ({ query, result }) => { const hub = result.url && result.url.split('/')[1]; const parent = getPageDetails(hub); - const updateHistory = JSON.parse(window.localStorage.getItem('update-history')); - let showUpdate, changeKind; + const updateHistory = JSON.parse( + window.localStorage.getItem('update-history'), + ); + let showUpdate; + let changeKind; if (result.title in updateHistory) { showUpdate = pageVisitTracker(result.title); changeKind = updateHistory[result.title].changeKind; diff --git a/aries-site/src/pages/_app.js b/aries-site/src/pages/_app.js index e8a43d985..405bad85d 100644 --- a/aries-site/src/pages/_app.js +++ b/aries-site/src/pages/_app.js @@ -196,7 +196,6 @@ function App({ Component, pageProps, router }) { name = name.charAt(0).toUpperCase() + name.slice(1); let localStorageKey = getLocalStorageKey(name); const now = new Date().getTime(); - //every time it re-routes, see if the given page has a reported update in the last 30 days (what's reported in updateHistory) //then check if it should be shown (T/F), and set that in local storage and the state variable if (updateHistory && name in updateHistory) { From 9e36f5b1511244fd0aef15120ddd46e275e9c90a Mon Sep 17 00:00:00 2001 From: beahackman Date: Tue, 5 Sep 2023 11:09:17 -0700 Subject: [PATCH 21/26] removing update-history in local storage --- aries-site/src/components/cards/ContentCard.js | 14 +++++++------- .../src/layouts/content/InPageNavigation.js | 18 +++++++++--------- .../src/layouts/navigation/SearchResult.js | 12 ++++++------ aries-site/src/pages/_app.js | 18 ++++++------------ aries-site/src/utils/pageVisitTracker.js | 7 +++---- 5 files changed, 31 insertions(+), 38 deletions(-) diff --git a/aries-site/src/components/cards/ContentCard.js b/aries-site/src/components/cards/ContentCard.js index 91bae2e67..ecd63c5a5 100644 --- a/aries-site/src/components/cards/ContentCard.js +++ b/aries-site/src/components/cards/ContentCard.js @@ -1,4 +1,4 @@ -import React, { forwardRef } from 'react'; +import React, { forwardRef, useContext } from 'react'; import PropTypes from 'prop-types'; import { Box, CardBody, Image, Text } from 'grommet'; import { Identifier } from 'aries-core'; @@ -7,19 +7,19 @@ import { LinkCard } from './LinkCard'; import { useDarkMode } from '../../utils'; import { pageVisitTracker } from '../../utils/pageVisitTracker'; import { NotificationTag } from '../../layouts/content/NotificationTag'; +import { ViewContext } from '../../pages/_app'; export const ContentCard = forwardRef( ({ level, topic, minimal, ...rest }, ref) => { const { description, name, parent, preview, render } = topic; const darkMode = useDarkMode(); - const updateHistory = JSON.parse( - window.localStorage.getItem('update-history'), - ); + + const { contentHistory } = useContext(ViewContext); let showUpdate = false; let changeKind; - if (updateHistory && name in updateHistory) { - showUpdate = pageVisitTracker(name); - changeKind = updateHistory[name].changeKind; + if (contentHistory && name in contentHistory) { + showUpdate = pageVisitTracker(name, contentHistory); //still run pageVisitTracker on it + changeKind = contentHistory[name].changeKind; } return ( diff --git a/aries-site/src/layouts/content/InPageNavigation.js b/aries-site/src/layouts/content/InPageNavigation.js index 9a0793e75..f28a916ac 100644 --- a/aries-site/src/layouts/content/InPageNavigation.js +++ b/aries-site/src/layouts/content/InPageNavigation.js @@ -63,7 +63,7 @@ export const InPageNavigation = ({ headings, title }) => { // align "Jump to section" with page title at start const marginTop = `${large + medium}px`; - const { contentHistory } = useContext(ViewContext); + const { pageUpdateReady, contentHistory } = useContext(ViewContext); return ( { {headingTitle} - {showUpdate && ( - - + {showUpdate && pageUpdateReady && ( + + )} diff --git a/aries-site/src/layouts/navigation/SearchResult.js b/aries-site/src/layouts/navigation/SearchResult.js index 0e6017dc5..de34b0cab 100644 --- a/aries-site/src/layouts/navigation/SearchResult.js +++ b/aries-site/src/layouts/navigation/SearchResult.js @@ -6,19 +6,19 @@ import { HighlightPhrase } from '../../components'; import { pageVisitTracker } from '../../utils/pageVisitTracker'; import { NotificationTag } from '../content/NotificationTag'; +import { useContext } from 'react'; +import { ViewContext } from '../../pages/_app'; export const SearchResult = ({ query, result }) => { const hub = result.url && result.url.split('/')[1]; const parent = getPageDetails(hub); - const updateHistory = JSON.parse( - window.localStorage.getItem('update-history'), - ); + const { contentHistory } = useContext(ViewContext); let showUpdate; let changeKind; - if (result.title in updateHistory) { - showUpdate = pageVisitTracker(result.title); - changeKind = updateHistory[result.title].changeKind; + if (result.title in contentHistory) { + showUpdate = pageVisitTracker(result.title, contentHistory); + changeKind = contentHistory[result.title].changeKind; } else { showUpdate = false; } diff --git a/aries-site/src/pages/_app.js b/aries-site/src/pages/_app.js index 405bad85d..e491347fe 100644 --- a/aries-site/src/pages/_app.js +++ b/aries-site/src/pages/_app.js @@ -172,6 +172,7 @@ function App({ Component, pageProps, router }) { JSON.stringify(nextHistory), ); setContentHistory(nextHistory); + // set page status as ready since all calculations are complete now setPageUpdateReady(true); if (name) { const localStorageKey = getLocalStorageKey(name); @@ -188,24 +189,17 @@ function App({ Component, pageProps, router }) { skipLinks.focus(); if (typeof window !== 'undefined') { - const updateHistory = JSON.parse( - window.localStorage.getItem('update-history'), - ); const routeParts = router.route.split('/'); let name = routeParts[routeParts.length - 1]; name = name.charAt(0).toUpperCase() + name.slice(1); let localStorageKey = getLocalStorageKey(name); const now = new Date().getTime(); //every time it re-routes, see if the given page has a reported update in the last 30 days (what's reported in updateHistory) - //then check if it should be shown (T/F), and set that in local storage and the state variable - if (updateHistory && name in updateHistory) { - updateHistory[name].update = pageVisitTracker(name); - window.localStorage.setItem( - 'update-history', - JSON.stringify(updateHistory), - ); + //then check if it should be shown (T/F), and set that in the state variable + if (contentHistory && name in contentHistory) { + contentHistory[name].update = pageVisitTracker(name, contentHistory); window.localStorage.setItem(localStorageKey, now); - setContentHistory(updateHistory); + setContentHistory(contentHistory); setPageUpdateReady(true); } } @@ -218,7 +212,7 @@ function App({ Component, pageProps, router }) { return () => { router.events.off('routeChangeComplete', handleRouteChange); }; - }, [router.events]); + }, [router.events, contentHistory]); // final array item from the route is the title of page we are on const title = diff --git a/aries-site/src/utils/pageVisitTracker.js b/aries-site/src/utils/pageVisitTracker.js index a056ef2c5..67e840e69 100644 --- a/aries-site/src/utils/pageVisitTracker.js +++ b/aries-site/src/utils/pageVisitTracker.js @@ -2,17 +2,16 @@ export const getLocalStorageKey = title => `${title?.toLowerCase().replace(/\s+/g, '-')}-last-visited`; // determines whether or not the update should be shown given the most recent commit and last-visit records -export const pageVisitTracker = function (title) { +export const pageVisitTracker = function (title, contentHistory) { const localStorageKey = getLocalStorageKey(title); // the name associated with the values in localStorage let showUpdate; - let updateHistory = JSON.parse(window.localStorage.getItem('update-history')); - if (title in updateHistory) { + if (contentHistory && title in contentHistory) { //there has been a reported update within the last 30 days if (window.localStorage.getItem(localStorageKey)) { //there has been a guaranteed update and we've seen this page before if ( window.localStorage.getItem(localStorageKey) > - new Date(updateHistory[title].date).getTime() + new Date(contentHistory[title].date).getTime() ) { //if when they saw the page is after the update, dont show it showUpdate = false; From 4645d9bc642157394432c19bd5d73b79302e9f41 Mon Sep 17 00:00:00 2001 From: beahackman Date: Thu, 7 Sep 2023 08:23:28 -0700 Subject: [PATCH 22/26] code readability fixes --- aries-site/src/layouts/content/InPageNavigation.js | 2 +- aries-site/src/layouts/content/UpdateNotification.js | 4 +++- aries-site/src/layouts/navigation/SearchResult.js | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/aries-site/src/layouts/content/InPageNavigation.js b/aries-site/src/layouts/content/InPageNavigation.js index f28a916ac..5e5d4ae4a 100644 --- a/aries-site/src/layouts/content/InPageNavigation.js +++ b/aries-site/src/layouts/content/InPageNavigation.js @@ -157,7 +157,7 @@ export const InPageNavigation = ({ headings, title }) => { a11yTitle="Section has been updated" size="10px" color="teal" - height={'small'} + height="small" /> )} diff --git a/aries-site/src/layouts/content/UpdateNotification.js b/aries-site/src/layouts/content/UpdateNotification.js index 7c646f69b..31d0e1628 100644 --- a/aries-site/src/layouts/content/UpdateNotification.js +++ b/aries-site/src/layouts/content/UpdateNotification.js @@ -31,7 +31,9 @@ export const UpdateNotification = ({ name }) => { contentHistory[name]?.changeKind === 'Update' ? 'Updated ' : 'Added on ' - } ${new Date(updateDate).toDateString().split(' ').slice(1).join(' ')}`} + }${Intl.DateTimeFormat(undefined, { dateStyle: 'long' }).format( + new Date(updateDate), + )}`} /> ); } diff --git a/aries-site/src/layouts/navigation/SearchResult.js b/aries-site/src/layouts/navigation/SearchResult.js index de34b0cab..e9f7232f6 100644 --- a/aries-site/src/layouts/navigation/SearchResult.js +++ b/aries-site/src/layouts/navigation/SearchResult.js @@ -54,7 +54,7 @@ export const SearchResult = ({ query, result }) => { size="xsmall" backgroundColor="teal" value="Updated" - a11yTitle={`There's been updates for ${result.title}`} + a11yTitle={`There have been updates for ${result.title}`} /> )} From 4ea50c17804ab20ceb6646767d482cf9fe455355 Mon Sep 17 00:00:00 2001 From: Taylor Seamans Date: Thu, 7 Sep 2023 10:13:22 -0700 Subject: [PATCH 23/26] Update yarn.lock --- yarn.lock | 614 +++++++++++++++++++++++++++--------------------------- 1 file changed, 307 insertions(+), 307 deletions(-) diff --git a/yarn.lock b/yarn.lock index 061aab28d..045ce44eb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -243,9 +243,9 @@ throat "5.0.0" "@babel/cli@^7.19.3": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.22.10.tgz#25e4bbd8d0a0d8b4b389e1b5e2d7a238bd4c1b75" - integrity sha512-rM9ZMmaII630zGvtMtQ3P4GyHs28CHLYE9apLG7L8TgaSqcfoIGrlLSLsh4Q8kDTdZQQEXZm1M0nQtOvU/2heg== + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.22.15.tgz#22ed82d76745a43caa60a89917bedb7c9b5bd145" + integrity sha512-prtg5f6zCERIaECeTZzd2fMtVjlfjhUcO+fBLQ6DXXdq5FljN+excVitJ2nogsusdf31LeqkjAfXZ7Xq+HmN8g== dependencies: "@jridgewell/trace-mapping" "^0.3.17" commander "^4.0.1" @@ -258,7 +258,7 @@ "@nicolo-ribaudo/chokidar-2" "2.1.8-no-fsevents.3" chokidar "^3.4.0" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.10", "@babel/code-frame@^7.22.5": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.13": version "7.22.13" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== @@ -272,20 +272,20 @@ integrity sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ== "@babel/core@^7.1.0", "@babel/core@^7.12.1", "@babel/core@^7.12.3", "@babel/core@^7.20.5", "@babel/core@^7.7.2", "@babel/core@^7.8.0": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.11.tgz#8033acaa2aa24c3f814edaaa057f3ce0ba559c24" - integrity sha512-lh7RJrtPdhibbxndr6/xx0w8+CVlY5FJZiaSz908Fpy+G0xkBFTvwLcKJFF4PJxVfGhVWNebikpWGnOoC71juQ== + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.15.tgz#15d4fd03f478a459015a4b94cfbb3bd42c48d2f4" + integrity sha512-PtZqMmgRrvj8ruoEOIwVA3yoF91O+Hgw9o7DAUTNBA6Mo2jpu31clx9a7Nz/9JznqetTR6zwfC4L3LAjKQXUwA== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.22.10" - "@babel/generator" "^7.22.10" - "@babel/helper-compilation-targets" "^7.22.10" - "@babel/helper-module-transforms" "^7.22.9" - "@babel/helpers" "^7.22.11" - "@babel/parser" "^7.22.11" - "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.11" - "@babel/types" "^7.22.11" + "@babel/code-frame" "^7.22.13" + "@babel/generator" "^7.22.15" + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-module-transforms" "^7.22.15" + "@babel/helpers" "^7.22.15" + "@babel/parser" "^7.22.15" + "@babel/template" "^7.22.15" + "@babel/traverse" "^7.22.15" + "@babel/types" "^7.22.15" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -293,20 +293,20 @@ semver "^6.3.1" "@babel/eslint-parser@^7.19.1": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.22.11.tgz#cceb8c7989c241a16dd14e12a6cd725618f3f58b" - integrity sha512-YjOYZ3j7TjV8OhLW6NCtyg8G04uStATEUe5eiLuCZaXz2VSDQ3dsAtm2D+TuQyAqNMUK2WacGo0/uma9Pein1w== + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.22.15.tgz#263f059c476e29ca4972481a17b8b660cb025a34" + integrity sha512-yc8OOBIQk1EcRrpizuARSQS0TWAcOMpEJ1aafhNznaeYkeL+OhqnDObGFylB8ka8VFF/sZc+S4RzHyO+3LjQxg== dependencies: "@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1" eslint-visitor-keys "^2.1.0" semver "^6.3.1" -"@babel/generator@^7.22.10", "@babel/generator@^7.7.2": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.10.tgz#c92254361f398e160645ac58831069707382b722" - integrity sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A== +"@babel/generator@^7.22.15", "@babel/generator@^7.7.2": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.15.tgz#1564189c7ec94cb8f77b5e8a90c4d200d21b2339" + integrity sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA== dependencies: - "@babel/types" "^7.22.10" + "@babel/types" "^7.22.15" "@jridgewell/gen-mapping" "^0.3.2" "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" @@ -319,32 +319,32 @@ "@babel/types" "^7.22.5" "@babel/helper-builder-binary-assignment-operator-visitor@^7.22.5": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.10.tgz#573e735937e99ea75ea30788b57eb52fab7468c9" - integrity sha512-Av0qubwDQxC56DoUReVDeLfMEjYYSN1nZrTUrWkXd7hpU73ymRANkbuDm3yni9npkn+RXy9nNbEJZEzXr7xrfQ== + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz#5426b109cf3ad47b91120f8328d8ab1be8b0b956" + integrity sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw== dependencies: - "@babel/types" "^7.22.10" + "@babel/types" "^7.22.15" -"@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.22.10", "@babel/helper-compilation-targets@^7.22.5", "@babel/helper-compilation-targets@^7.22.6": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz#01d648bbc25dd88f513d862ee0df27b7d4e67024" - integrity sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q== +"@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.5", "@babel/helper-compilation-targets@^7.22.6": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52" + integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw== dependencies: "@babel/compat-data" "^7.22.9" - "@babel/helper-validator-option" "^7.22.5" + "@babel/helper-validator-option" "^7.22.15" browserslist "^4.21.9" lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.22.10", "@babel/helper-create-class-features-plugin@^7.22.11", "@babel/helper-create-class-features-plugin@^7.22.5": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.11.tgz#4078686740459eeb4af3494a273ac09148dfb213" - integrity sha512-y1grdYL4WzmUDBRGK0pDbIoFd7UZKoDurDzWEoNMYoj1EL+foGRQNyPWDcC+YyegN5y1DUsFFmzjGijB3nSVAQ== +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.22.11", "@babel/helper-create-class-features-plugin@^7.22.15", "@babel/helper-create-class-features-plugin@^7.22.5": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz#97a61b385e57fe458496fad19f8e63b63c867de4" + integrity sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" "@babel/helper-environment-visitor" "^7.22.5" "@babel/helper-function-name" "^7.22.5" - "@babel/helper-member-expression-to-functions" "^7.22.5" + "@babel/helper-member-expression-to-functions" "^7.22.15" "@babel/helper-optimise-call-expression" "^7.22.5" "@babel/helper-replace-supers" "^7.22.9" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" @@ -352,9 +352,9 @@ semver "^6.3.1" "@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.5": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz#9d8e61a8d9366fe66198f57c40565663de0825f6" - integrity sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw== + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1" + integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" regexpu-core "^5.3.1" @@ -391,30 +391,30 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-member-expression-to-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz#0a7c56117cad3372fbf8d2fb4bf8f8d64a1e76b2" - integrity sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ== +"@babel/helper-member-expression-to-functions@^7.22.15", "@babel/helper-member-expression-to-functions@^7.22.5": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.15.tgz#b95a144896f6d491ca7863576f820f3628818621" + integrity sha512-qLNsZbgrNh0fDQBCPocSL8guki1hcPvltGDv/NxvUoABwFq7GkKSu1nRXeJkVZc+wJvne2E0RKQz+2SQrz6eAA== dependencies: - "@babel/types" "^7.22.5" + "@babel/types" "^7.22.15" -"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.15.4", "@babel/helper-module-imports@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz#1a8f4c9f4027d23f520bd76b364d44434a72660c" - integrity sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg== +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.15.4", "@babel/helper-module-imports@^7.22.15", "@babel/helper-module-imports@^7.22.5": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" + integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== dependencies: - "@babel/types" "^7.22.5" + "@babel/types" "^7.22.15" -"@babel/helper-module-transforms@^7.22.5", "@babel/helper-module-transforms@^7.22.9": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz#92dfcb1fbbb2bc62529024f72d942a8c97142129" - integrity sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ== +"@babel/helper-module-transforms@^7.22.15", "@babel/helper-module-transforms@^7.22.5", "@babel/helper-module-transforms@^7.22.9": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.15.tgz#40ad2f6950f143900e9c1c72363c0b431a606082" + integrity sha512-l1UiX4UyHSFsYt17iQ3Se5pQQZZHa22zyIXURmvkmLCD4t/aU+dvNWHatKac/D9Vm9UES7nvIqHs4jZqKviUmQ== dependencies: "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-module-imports" "^7.22.5" + "@babel/helper-module-imports" "^7.22.15" "@babel/helper-simple-access" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/helper-validator-identifier" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.15" "@babel/helper-optimise-call-expression@^7.22.5": version "7.22.5" @@ -472,15 +472,15 @@ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== -"@babel/helper-validator-identifier@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz#9544ef6a33999343c8740fa51350f30eeaaaf193" - integrity sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ== +"@babel/helper-validator-identifier@^7.22.15", "@babel/helper-validator-identifier@^7.22.5": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.15.tgz#601fa28e4cc06786c18912dca138cec73b882044" + integrity sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ== -"@babel/helper-validator-option@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz#de52000a15a177413c8234fa3a8af4ee8102d0ac" - integrity sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw== +"@babel/helper-validator-option@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz#694c30dfa1d09a6534cdfcafbe56789d36aba040" + integrity sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA== "@babel/helper-wrap-function@^7.22.9": version "7.22.10" @@ -491,14 +491,14 @@ "@babel/template" "^7.22.5" "@babel/types" "^7.22.10" -"@babel/helpers@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.11.tgz#b02f5d5f2d7abc21ab59eeed80de410ba70b056a" - integrity sha512-vyOXC8PBWaGc5h7GMsNx68OH33cypkEDJCHvYVVgVbbxJDROYVtexSk0gK5iCF1xNjRIN2s8ai7hwkWDq5szWg== +"@babel/helpers@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.15.tgz#f09c3df31e86e3ea0b7ff7556d85cdebd47ea6f1" + integrity sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw== dependencies: - "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.11" - "@babel/types" "^7.22.11" + "@babel/template" "^7.22.15" + "@babel/traverse" "^7.22.15" + "@babel/types" "^7.22.15" "@babel/highlight@^7.22.13": version "7.22.13" @@ -510,37 +510,37 @@ js-tokens "^4.0.0" "@babel/node@^7.20.5": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/node/-/node-7.22.10.tgz#865ef915633790b1e11c091896bb44ab36cd14b6" - integrity sha512-FpSgdjIPabpEetDxtKYAcXCs0qRh12S2D40rhpRoo0w5h7/7Tu2ZroaX99cbKFNDODiSs484sZ1q0kutJbZ2iQ== + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/node/-/node-7.22.15.tgz#43c2621b726864f7fd049cd73c55baa06bbba8af" + integrity sha512-DCHvKYVAC8w2Tvt2fgyyYteIwAEHejbVlBU1GlcBXFDEcdWqsADnK1tD/vgrCbsk/rt0tkgpWAiYaJAPR7PKfg== dependencies: - "@babel/register" "^7.22.5" + "@babel/register" "^7.22.15" commander "^4.0.1" core-js "^3.30.2" node-environment-flags "^1.0.5" regenerator-runtime "^0.14.0" v8flags "^3.1.1" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.11", "@babel/parser@^7.22.5": - version "7.22.14" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.14.tgz#c7de58e8de106e88efca42ce17f0033209dfd245" - integrity sha512-1KucTHgOvaw/LzCVrEOAyXkr9rQlp0A1HiHRYnSUE9dmb8PvPW7o5sscg+5169r54n3vGlbx6GevTE/Iw/P3AQ== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15": + version "7.22.16" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.16.tgz#180aead7f247305cce6551bea2720934e2fa2c95" + integrity sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA== -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz#87245a21cd69a73b0b81bcda98d443d6df08f05e" - integrity sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz#02dc8a03f613ed5fdc29fb2f728397c78146c962" + integrity sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz#fef09f9499b1f1c930da8a0c419db42167d792ca" - integrity sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz#2aeb91d337d4e1a1e7ce85b76a37f5301781200f" + integrity sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.22.5" + "@babel/plugin-transform-optional-chaining" "^7.22.15" "@babel/plugin-proposal-async-generator-functions@^7.12.1": version "7.20.7" @@ -561,11 +561,11 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-proposal-decorators@^7.12.1": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.22.10.tgz#d6a8c3a9018e1b13e6647f869c5ea56ff2b585d4" - integrity sha512-KxN6TqZzcFi4uD3UifqXElBTBNLAEH1l3vzMQj6JwJZbL2sZlThxSViOKCYY+4Ah4V4JhQ95IVB7s/Y6SJSlMQ== + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.22.15.tgz#dc774eae73ab8c28a644d490b45aa47a85bb0bf5" + integrity sha512-kc0VvbbUyKelvzcKOSyQUSVVXS5pT3UhRB0e3c9An86MvLqs+gx0dN4asllrDluqSa3m9YyooXKGOFVomnyFkg== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.10" + "@babel/helper-create-class-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-replace-supers" "^7.22.9" "@babel/helper-split-export-declaration" "^7.22.6" @@ -764,10 +764,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-async-generator-functions@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.11.tgz#dbe3b1ff5a52e2e5edc4b19a60d325a675ed2649" - integrity sha512-0pAlmeRJn6wU84zzZsEOx1JV1Jf8fqO9ok7wofIJwUnplYo247dcd24P+cMJht7ts9xkzdtB0EPHmOb7F+KzXw== +"@babel/plugin-transform-async-generator-functions@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.15.tgz#3b153af4a6b779f340d5b80d3f634f55820aefa3" + integrity sha512-jBm1Es25Y+tVoTi5rfd5t1KLmL8ogLKpXszboWOTTtGFGz2RKnQe2yn7HbZ+kb/B8N0FVSGQo874NSlOU1T4+w== dependencies: "@babel/helper-environment-visitor" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" @@ -790,10 +790,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-block-scoping@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.10.tgz#88a1dccc3383899eb5e660534a76a22ecee64faa" - integrity sha512-1+kVpGAOOI1Albt6Vse7c8pHzcZQdQKW+wJH+g8mCaszOdDVwRXa/slHPqIw+oJAJANTKDMuM2cBdV0Dg618Vg== +"@babel/plugin-transform-block-scoping@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.15.tgz#494eb82b87b5f8b1d8f6f28ea74078ec0a10a841" + integrity sha512-G1czpdJBZCtngoK1sJgloLiOHUnkb/bLZwqVZD8kXmq0ZnVfTTWUcs9OWtp0mBtYJ+4LQY1fllqBkOIPhXmFmw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -814,18 +814,18 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-transform-classes@^7.22.6": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz#e04d7d804ed5b8501311293d1a0e6d43e94c3363" - integrity sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ== +"@babel/plugin-transform-classes@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz#aaf4753aee262a232bbc95451b4bdf9599c65a0b" + integrity sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-compilation-targets" "^7.22.6" + "@babel/helper-compilation-targets" "^7.22.15" "@babel/helper-environment-visitor" "^7.22.5" "@babel/helper-function-name" "^7.22.5" "@babel/helper-optimise-call-expression" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.9" "@babel/helper-split-export-declaration" "^7.22.6" globals "^11.1.0" @@ -837,10 +837,10 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/template" "^7.22.5" -"@babel/plugin-transform-destructuring@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.10.tgz#38e2273814a58c810b6c34ea293be4973c4eb5e2" - integrity sha512-dPJrL0VOyxqLM9sritNbMSGx/teueHF/htMKrPT7DNxccXxRDPYqlgPFFdr8u+F+qUZOkZoXue/6rL5O5GduEw== +"@babel/plugin-transform-destructuring@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.15.tgz#e7404ea5bb3387073b9754be654eecb578324694" + integrity sha512-HzG8sFl1ZVGTme74Nw+X01XsUTqERVQ6/RLHo3XjGRzm7XD6QTtfS3NJotVgCGy8BzkDqRjRBD8dAyJn5TuvSQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -891,10 +891,10 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-flow" "^7.22.5" -"@babel/plugin-transform-for-of@^7.12.1", "@babel/plugin-transform-for-of@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz#ab1b8a200a8f990137aff9a084f8de4099ab173f" - integrity sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A== +"@babel/plugin-transform-for-of@^7.12.1", "@babel/plugin-transform-for-of@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz#f64b4ccc3a4f131a996388fae7680b472b306b29" + integrity sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -945,12 +945,12 @@ "@babel/helper-module-transforms" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-modules-commonjs@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.11.tgz#d7991d3abad199c03b68ee66a64f216c47ffdfae" - integrity sha512-o2+bg7GDS60cJMgz9jWqRUsWkMzLCxp+jFDeDUT5sjRlAxcJWZ2ylNdI7QQ2+CH5hWu7OnN+Cv3htt7AkSf96g== +"@babel/plugin-transform-modules-commonjs@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.15.tgz#b11810117ed4ee7691b29bd29fd9f3f98276034f" + integrity sha512-jWL4eh90w0HQOTKP2MoXXUpVxilxsB2Vl4ji69rSjS3EcZ/v4sBmn+A3NpepuJzBhOaEBbR7udonlHHn5DWidg== dependencies: - "@babel/helper-module-transforms" "^7.22.9" + "@babel/helper-module-transforms" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-simple-access" "^7.22.5" @@ -1003,16 +1003,16 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-transform-object-rest-spread@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.11.tgz#dbbb06ce783cd994a8f430d8cefa553e9b42ca62" - integrity sha512-nX8cPFa6+UmbepISvlf5jhQyaC7ASs/7UxHmMkuJ/k5xSHvDPPaibMo+v3TXwU/Pjqhep/nFNpd3zn4YR59pnw== +"@babel/plugin-transform-object-rest-spread@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz#21a95db166be59b91cde48775310c0df6e1da56f" + integrity sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q== dependencies: "@babel/compat-data" "^7.22.9" - "@babel/helper-compilation-targets" "^7.22.10" + "@babel/helper-compilation-targets" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.22.5" + "@babel/plugin-transform-parameters" "^7.22.15" "@babel/plugin-transform-object-super@^7.22.5": version "7.22.5" @@ -1030,19 +1030,19 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-transform-optional-chaining@^7.22.12", "@babel/plugin-transform-optional-chaining@^7.22.5": - version "7.22.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.12.tgz#d7ebf6a88cd2f4d307b0e000ab630acd8124b333" - integrity sha512-7XXCVqZtyFWqjDsYDY4T45w4mlx1rf7aOgkc/Ww76xkgBiOlmjPkx36PBLHa1k1rwWvVgYMPsbuVnIamx2ZQJw== +"@babel/plugin-transform-optional-chaining@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.15.tgz#d7a5996c2f7ca4ad2ad16dbb74444e5c4385b1ba" + integrity sha512-ngQ2tBhq5vvSJw2Q2Z9i7ealNkpDMU0rGWnHPKqRZO0tzZ5tlaoz4hDvhXioOoaE0X2vfNss1djwg0DXlfu30A== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-transform-parameters@^7.20.7", "@babel/plugin-transform-parameters@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz#c3542dd3c39b42c8069936e48717a8d179d63a18" - integrity sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg== +"@babel/plugin-transform-parameters@^7.20.7", "@babel/plugin-transform-parameters@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz#719ca82a01d177af358df64a514d64c2e3edb114" + integrity sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -1085,16 +1085,16 @@ dependencies: "@babel/plugin-transform-react-jsx" "^7.22.5" -"@babel/plugin-transform-react-jsx@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.5.tgz#932c291eb6dd1153359e2a90cb5e557dcf068416" - integrity sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA== +"@babel/plugin-transform-react-jsx@^7.22.15", "@babel/plugin-transform-react-jsx@^7.22.5": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.15.tgz#7e6266d88705d7c49f11c98db8b9464531289cd6" + integrity sha512-oKckg2eZFa8771O/5vi7XeTvmM6+O9cxZu+kanTU7tD4sin5nO/G8jGJhq8Hvt2Z0kUoEDRayuZLaUlYl8QuGA== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-module-imports" "^7.22.5" + "@babel/helper-module-imports" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-jsx" "^7.22.5" - "@babel/types" "^7.22.5" + "@babel/types" "^7.22.15" "@babel/plugin-transform-react-pure-annotations@^7.22.5": version "7.22.5" @@ -1120,11 +1120,11 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-runtime@^7.12.1": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.10.tgz#89eda6daf1d3af6f36fb368766553054c8d7cd46" - integrity sha512-RchI7HePu1eu0CYNKHHHQdfenZcM4nz8rew5B1VWqeRKdcwW5aQ5HeG9eTUbWiAS1UrmHVLmoxTWHt3iLD/NhA== + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.15.tgz#3a625c4c05a39e932d7d34f5d4895cdd0172fdc9" + integrity sha512-tEVLhk8NRZSmwQ0DJtxxhTrCht1HVo8VaMzYT4w6lwyKBuHsgoioAUA7/6eT2fRfc5/23fuGdlwIxXhRVgWr4g== dependencies: - "@babel/helper-module-imports" "^7.22.5" + "@babel/helper-module-imports" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" babel-plugin-polyfill-corejs2 "^0.4.5" babel-plugin-polyfill-corejs3 "^0.8.3" @@ -1199,16 +1199,16 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/preset-env@^7.12.1", "@babel/preset-env@^7.20.2": - version "7.22.14" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.22.14.tgz#1cbb468d899f64fa71c53446f13b7ff8c0005cc1" - integrity sha512-daodMIoVo+ol/g+//c/AH+szBkFj4STQUikvBijRGL72Ph+w+AMTSh55DUETe8KJlPlDT1k/mp7NBfOuiWmoig== + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.22.15.tgz#142716f8e00bc030dae5b2ac6a46fbd8b3e18ff8" + integrity sha512-tZFHr54GBkHk6hQuVA8w4Fmq+MSPsfvMG0vPnOYyTnJpyfMqybL8/MbNCPRT9zc2KBO2pe4tq15g6Uno4Jpoag== dependencies: "@babel/compat-data" "^7.22.9" - "@babel/helper-compilation-targets" "^7.22.10" + "@babel/helper-compilation-targets" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.5" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.22.5" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.22.5" + "@babel/helper-validator-option" "^7.22.15" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.22.15" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.22.15" "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" @@ -1229,39 +1229,39 @@ "@babel/plugin-syntax-top-level-await" "^7.14.5" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" "@babel/plugin-transform-arrow-functions" "^7.22.5" - "@babel/plugin-transform-async-generator-functions" "^7.22.11" + "@babel/plugin-transform-async-generator-functions" "^7.22.15" "@babel/plugin-transform-async-to-generator" "^7.22.5" "@babel/plugin-transform-block-scoped-functions" "^7.22.5" - "@babel/plugin-transform-block-scoping" "^7.22.10" + "@babel/plugin-transform-block-scoping" "^7.22.15" "@babel/plugin-transform-class-properties" "^7.22.5" "@babel/plugin-transform-class-static-block" "^7.22.11" - "@babel/plugin-transform-classes" "^7.22.6" + "@babel/plugin-transform-classes" "^7.22.15" "@babel/plugin-transform-computed-properties" "^7.22.5" - "@babel/plugin-transform-destructuring" "^7.22.10" + "@babel/plugin-transform-destructuring" "^7.22.15" "@babel/plugin-transform-dotall-regex" "^7.22.5" "@babel/plugin-transform-duplicate-keys" "^7.22.5" "@babel/plugin-transform-dynamic-import" "^7.22.11" "@babel/plugin-transform-exponentiation-operator" "^7.22.5" "@babel/plugin-transform-export-namespace-from" "^7.22.11" - "@babel/plugin-transform-for-of" "^7.22.5" + "@babel/plugin-transform-for-of" "^7.22.15" "@babel/plugin-transform-function-name" "^7.22.5" "@babel/plugin-transform-json-strings" "^7.22.11" "@babel/plugin-transform-literals" "^7.22.5" "@babel/plugin-transform-logical-assignment-operators" "^7.22.11" "@babel/plugin-transform-member-expression-literals" "^7.22.5" "@babel/plugin-transform-modules-amd" "^7.22.5" - "@babel/plugin-transform-modules-commonjs" "^7.22.11" + "@babel/plugin-transform-modules-commonjs" "^7.22.15" "@babel/plugin-transform-modules-systemjs" "^7.22.11" "@babel/plugin-transform-modules-umd" "^7.22.5" "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" "@babel/plugin-transform-new-target" "^7.22.5" "@babel/plugin-transform-nullish-coalescing-operator" "^7.22.11" "@babel/plugin-transform-numeric-separator" "^7.22.11" - "@babel/plugin-transform-object-rest-spread" "^7.22.11" + "@babel/plugin-transform-object-rest-spread" "^7.22.15" "@babel/plugin-transform-object-super" "^7.22.5" "@babel/plugin-transform-optional-catch-binding" "^7.22.11" - "@babel/plugin-transform-optional-chaining" "^7.22.12" - "@babel/plugin-transform-parameters" "^7.22.5" + "@babel/plugin-transform-optional-chaining" "^7.22.15" + "@babel/plugin-transform-parameters" "^7.22.15" "@babel/plugin-transform-private-methods" "^7.22.5" "@babel/plugin-transform-private-property-in-object" "^7.22.11" "@babel/plugin-transform-property-literals" "^7.22.5" @@ -1277,7 +1277,7 @@ "@babel/plugin-transform-unicode-regex" "^7.22.5" "@babel/plugin-transform-unicode-sets-regex" "^7.22.5" "@babel/preset-modules" "0.1.6-no-external-plugins" - "@babel/types" "^7.22.11" + "@babel/types" "^7.22.15" babel-plugin-polyfill-corejs2 "^0.4.5" babel-plugin-polyfill-corejs3 "^0.8.3" babel-plugin-polyfill-regenerator "^0.5.2" @@ -1285,12 +1285,12 @@ semver "^6.3.1" "@babel/preset-flow@^7.12.1": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.22.5.tgz#876f24ab6b38bd79703a93f32020ca2162312784" - integrity sha512-ta2qZ+LSiGCrP5pgcGt8xMnnkXQrq8Sa4Ulhy06BOlF5QbLw9q5hIx7bn5MrsvyTGAfh6kTOo07Q+Pfld/8Y5Q== + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.22.15.tgz#30318deb9b3ebd9f5738e96da03a531e0cd3165d" + integrity sha512-dB5aIMqpkgbTfN5vDdTRPzjqtWiZcRESNR88QYnoPR+bmdYoluOzMX9tQerTv0XzSgZYctPfO1oc0N5zdog1ew== dependencies: "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.5" + "@babel/helper-validator-option" "^7.22.15" "@babel/plugin-transform-flow-strip-types" "^7.22.5" "@babel/preset-modules@0.1.6-no-external-plugins": @@ -1303,21 +1303,21 @@ esutils "^2.0.2" "@babel/preset-react@^7.12.1", "@babel/preset-react@^7.18.6": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.22.5.tgz#c4d6058fbf80bccad02dd8c313a9aaa67e3c3dd6" - integrity sha512-M+Is3WikOpEJHgR385HbuCITPTaPRaNkibTEa9oiofmJvIsrceb4yp9RL9Kb+TE8LznmeyZqpP+Lopwcx59xPQ== + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.22.15.tgz#9a776892b648e13cc8ca2edf5ed1264eea6b6afc" + integrity sha512-Csy1IJ2uEh/PecCBXXoZGAZBeCATTuePzCSB7dLYWS0vOEj6CNpjxIhW4duWwZodBNueH7QO14WbGn8YyeuN9w== dependencies: "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.5" + "@babel/helper-validator-option" "^7.22.15" "@babel/plugin-transform-react-display-name" "^7.22.5" - "@babel/plugin-transform-react-jsx" "^7.22.5" + "@babel/plugin-transform-react-jsx" "^7.22.15" "@babel/plugin-transform-react-jsx-development" "^7.22.5" "@babel/plugin-transform-react-pure-annotations" "^7.22.5" -"@babel/register@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.22.5.tgz#e4d8d0f615ea3233a27b5c6ada6750ee59559939" - integrity sha512-vV6pm/4CijSQ8Y47RH5SopXzursN35RQINfGJkmOlcpAtGuf94miFvIPhCKGQN7WGIcsgG1BHEX2KVdTYwTwUQ== +"@babel/register@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.22.15.tgz#c2c294a361d59f5fa7bcc8b97ef7319c32ecaec7" + integrity sha512-V3Q3EqoQdn65RCgTLwauZaTfd1ShhwPmbBv+1dkZV/HpCGMKVyn6oFcRlI7RaKqiDQjX2Qd3AuoEguBgdjIKlg== dependencies: clone-deep "^4.0.1" find-cache-dir "^2.0.0" @@ -1331,44 +1331,44 @@ integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== "@babel/runtime@^7.12.5", "@babel/runtime@^7.20.7", "@babel/runtime@^7.3.1", "@babel/runtime@^7.8.4": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.11.tgz#7a9ba3bbe406ad6f9e8dd4da2ece453eb23a77a4" - integrity sha512-ee7jVNlWN09+KftVOu9n7S8gQzD/Z6hN/I8VBRXW4P1+Xe7kJGXMwu8vds4aGIMHZnNbdpSWCfZZtinytpcAvA== + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.15.tgz#38f46494ccf6cf020bd4eed7124b425e83e523b8" + integrity sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA== dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.22.5", "@babel/template@^7.3.3": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.5.tgz#0c8c4d944509875849bd0344ff0050756eefc6ec" - integrity sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw== +"@babel/template@^7.22.15", "@babel/template@^7.22.5", "@babel/template@^7.3.3": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" + integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== dependencies: - "@babel/code-frame" "^7.22.5" - "@babel/parser" "^7.22.5" - "@babel/types" "^7.22.5" + "@babel/code-frame" "^7.22.13" + "@babel/parser" "^7.22.15" + "@babel/types" "^7.22.15" -"@babel/traverse@^7.22.11", "@babel/traverse@^7.4.5", "@babel/traverse@^7.7.2": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.11.tgz#71ebb3af7a05ff97280b83f05f8865ac94b2027c" - integrity sha512-mzAenteTfomcB7mfPtyi+4oe5BZ6MXxWcn4CX+h4IRJ+OOGXBrWU6jDQavkQI9Vuc5P+donFabBfFCcmWka9lQ== +"@babel/traverse@^7.22.15", "@babel/traverse@^7.4.5", "@babel/traverse@^7.7.2": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.15.tgz#75be4d2d6e216e880e93017f4e2389aeb77ef2d9" + integrity sha512-DdHPwvJY0sEeN4xJU5uRLmZjgMMDIvMPniLuYzUVXj/GGzysPl0/fwt44JBkyUIzGJPV8QgHMcQdQ34XFuKTYQ== dependencies: - "@babel/code-frame" "^7.22.10" - "@babel/generator" "^7.22.10" + "@babel/code-frame" "^7.22.13" + "@babel/generator" "^7.22.15" "@babel/helper-environment-visitor" "^7.22.5" "@babel/helper-function-name" "^7.22.5" "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.22.11" - "@babel/types" "^7.22.11" + "@babel/parser" "^7.22.15" + "@babel/types" "^7.22.15" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.10", "@babel/types@^7.22.11", "@babel/types@^7.22.5", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.11.tgz#0e65a6a1d4d9cbaa892b2213f6159485fe632ea2" - integrity sha512-siazHiGuZRz9aB9NpHy9GOs9xiQPKnMzgdr493iI1M67vRXpnEq8ZOOKzezC5q7zwuQ6sDhdSp4SD9ixKSqKZg== +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.10", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.15.tgz#266cb21d2c5fd0b3931e7a91b6dd72d2f617d282" + integrity sha512-X+NLXr0N8XXmN5ZsaQdm9U2SSC3UbIYq/doL++sueHOTisgZHoKaQtZxGuV2cUPQHMfjKEfg/g6oy7Hm6SKFtA== dependencies: "@babel/helper-string-parser" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.15" to-fast-properties "^2.0.0" "@bcoe/v8-coverage@^0.2.3": @@ -1994,17 +1994,17 @@ "@types/node" "*" "@types/connect-history-api-fallback@^1.3.5": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz#9fd20b3974bdc2bcd4ac6567e2e0f6885cb2cf41" - integrity sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig== + version "1.5.1" + resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.1.tgz#6e5e3602d93bda975cebc3449e1a318340af9e20" + integrity sha512-iaQslNbARe8fctL5Lk+DsmgWOM83lM+7FzP0eQUJs1jd3kBE8NWqBTIT2S8SqQOJjxvt2eyIjpOuYeRXq2AdMw== dependencies: "@types/express-serve-static-core" "*" "@types/node" "*" "@types/connect@*": - version "3.4.35" - resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" - integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== + version "3.4.36" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.36.tgz#e511558c15a39cb29bd5357eebb57bd1459cd1ab" + integrity sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w== dependencies: "@types/node" "*" @@ -2132,9 +2132,9 @@ integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== "@types/lodash@^4.14.72": - version "4.14.197" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.197.tgz#e95c5ddcc814ec3e84c891910a01e0c8a378c54b" - integrity sha512-BMVOiWs0uNxHVlHBgzTIqJYmj+PgCo4euloGF+5m4okL3rEYzM2EEv78mw8zWSMM57dM7kVIgJ2QDvwHSoCI5g== + version "4.14.198" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.198.tgz#4d27465257011aedc741a809f1269941fa2c5d4c" + integrity sha512-trNJ/vtMZYMLhfN45uLq4ShQSw0/S7xCTLLVM+WM1rmFpba/VS42jVUgaO3w/NOLiWR/09lnYk0yMaA/atdIsg== "@types/mdast@^3.0.0": version "3.0.12" @@ -2169,9 +2169,9 @@ integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA== "@types/node@*": - version "20.5.7" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.5.7.tgz#4b8ecac87fbefbc92f431d09c30e176fc0a7c377" - integrity sha512-dP7f3LdZIysZnmvP3ANJYTSwg+wLLl8p7RqniVlV7j+oXSXAbt9h0WIBFmJy5inWZoX9wZN6eXx+YXd9Rh3RBA== + version "20.5.9" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.5.9.tgz#a70ec9d8fa0180a314c3ede0e20ea56ff71aed9a" + integrity sha512-PcGNd//40kHAS3sTlzKB9C9XL4K0sTup8nbG5lC14kzEteTNuAFh9u5nA0o5TWnSG2r/JNPRXFVcHJIIeRlmqQ== "@types/node@^12.20.10": version "12.20.55" @@ -2189,9 +2189,9 @@ integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== "@types/qs@*": - version "6.9.7" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" - integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== + version "6.9.8" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.8.tgz#f2a7de3c107b89b441e071d5472e6b726b4adf45" + integrity sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg== "@types/range-parser@*": version "1.2.4" @@ -2254,9 +2254,9 @@ integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== "@types/unist@^2", "@types/unist@^2.0.0": - version "2.0.7" - resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.7.tgz#5b06ad6894b236a1d2bd6b2f07850ca5c59cf4d6" - integrity sha512-cputDpIbFgLUaGQn6Vqg3/YsJwxUwHLO13v3i5ouxT4lat0khip9AEWxtERujXV9wxIB1EyF97BSJFt6vpdI8g== + version "2.0.8" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.8.tgz#bb197b9639aa1a04cf464a617fe800cccd92ad5c" + integrity sha512-d0XxK3YTObnWVp6rZuev3c49+j4Lo8g4L1ZRm9z5L0xpoZycUPshHgczK5gsUMaZOstjVYYi09p5gYvUtfChYw== "@types/ws@^8.5.5": version "8.5.5" @@ -2653,14 +2653,14 @@ array-flatten@^2.1.2: integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== array-includes@^3.1.6: - version "3.1.6" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" - integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== + version "3.1.7" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.7.tgz#8cd2e01b26f7a3086cbc87271593fe921c62abda" + integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - get-intrinsic "^1.1.3" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" is-string "^1.0.7" array-union@^1.0.1: @@ -2692,26 +2692,26 @@ array.prototype.findlastindex@^1.2.2: get-intrinsic "^1.2.1" array.prototype.flat@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" - integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" + integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" array.prototype.flatmap@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" - integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" + integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" -array.prototype.reduce@^1.0.5: +array.prototype.reduce@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.6.tgz#63149931808c5fc1e1354814923d92d45f7d96d5" integrity sha512-UW+Mz8LG/sPSU8jRDCjVr6J/ZKAGpHfwrZ6kWTG5qCxIEiXdVshqGnu5vEZA8S1y6X4aCSbQZ0/EEsfvEvBiSg== @@ -2723,24 +2723,25 @@ array.prototype.reduce@^1.0.5: is-string "^1.0.7" array.prototype.tosorted@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz#ccf44738aa2b5ac56578ffda97c03fd3e23dd532" - integrity sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ== + version "1.1.2" + resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.2.tgz#620eff7442503d66c799d95503f82b475745cefd" + integrity sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" - get-intrinsic "^1.1.3" + get-intrinsic "^1.2.1" arraybuffer.prototype.slice@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz#9b5ea3868a6eebc30273da577eb888381c0044bb" - integrity sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw== + version "1.0.2" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz#98bd561953e3e74bb34938e77647179dfe6e9f12" + integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw== dependencies: array-buffer-byte-length "^1.0.0" call-bind "^1.0.2" define-properties "^1.2.0" + es-abstract "^1.22.1" get-intrinsic "^1.2.1" is-array-buffer "^3.0.2" is-shared-array-buffer "^1.0.2" @@ -2805,9 +2806,9 @@ available-typed-arrays@^1.0.5: integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== axe-core@^4.6.1, axe-core@^4.6.2: - version "4.7.2" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.7.2.tgz#040a7342b20765cb18bb50b628394c21bccc17a0" - integrity sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g== + version "4.8.0" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.8.0.tgz#038c9e586732c791c0d9cecf7ed6434c4e8d497b" + integrity sha512-ZtlVZobOeDQhb/y2lMK6mznDw7TJHDNcKx5/bbBkFvArIQ5CVFhSI6hWWQnMx9I8cNmNmZ30wpDyOC2E2nvgbQ== axe-testcafe@^3.0.0: version "3.0.0" @@ -3156,9 +3157,9 @@ camelize@^1.0.0: integrity sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ== caniuse-lite@^1.0.30001406, caniuse-lite@^1.0.30001517: - version "1.0.30001524" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001524.tgz#1e14bce4f43c41a7deaeb5ebfe86664fe8dadb80" - integrity sha512-Jj917pJtYg9HSJBF95HVX3Cdr89JUyLT4IZ8SvM5aDRni95swKgYi3TgYLH5hnGfPE/U1dg6IfZ50UsIlLkwSA== + version "1.0.30001528" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001528.tgz#479972fc705b996f1114336c0032418a215fd0aa" + integrity sha512-0Db4yyjR9QMNlsxh+kKWzQtkyflkG/snYheSzkjmvdEtEXB1+jt7A2HmSEiO6XIJPIbo92lHNGNySvE5pZcs5Q== ccount@^2.0.0: version "2.0.1" @@ -3487,16 +3488,16 @@ cookie@0.5.0: integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== core-js-compat@^3.31.0: - version "3.32.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.32.1.tgz#55f9a7d297c0761a8eb1d31b593e0f5b6ffae964" - integrity sha512-GSvKDv4wE0bPnQtjklV101juQ85g6H3rm5PDP20mqlS5j0kXF3pP97YvAu5hl+uFHqMictp3b2VxOHljWMAtuA== + version "3.32.2" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.32.2.tgz#8047d1a8b3ac4e639f0d4f66d4431aa3b16e004c" + integrity sha512-+GjlguTDINOijtVRUxrQOv3kfu9rl+qPNdX2LTbJ/ZyVTuxK+ksVSAGX1nHstu4hrv1En/uPTtWgq2gI5wt4AQ== dependencies: browserslist "^4.21.10" core-js@^3.30.2: - version "3.32.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.32.1.tgz#a7d8736a3ed9dd05940c3c4ff32c591bb735be77" - integrity sha512-lqufgNn9NLnESg5mQeYsxQP5w7wrViSj0jr/kv6ECQiByzQkrn1MKvV0L3acttpDqfQrHLwr2KCMgX5b8X+lyQ== + version "3.32.2" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.32.2.tgz#172fb5949ef468f93b4be7841af6ab1f21992db7" + integrity sha512-pxXSw1mYZPDGvTQqEc5vgIb83jGQKFGYWY76z4a7weZXUolw3G+OvpZqSRcfYOoOVUQJYEPsWeQK8pKEnUtWxQ== core-util-is@~1.0.0: version "1.0.3" @@ -3906,9 +3907,9 @@ ee-first@1.1.1: integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== electron-to-chromium@^1.4.477: - version "1.4.505" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.505.tgz#00571ade5975b58413f0f56a665b065bfc29cdfc" - integrity sha512-0A50eL5BCCKdxig2SsCXhpuztnB9PfUgRMojj5tMvt8O54lbwz3t6wNgnpiTRosw5QjlJB7ixhVyeg8daLQwSQ== + version "1.4.510" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.510.tgz#446c50d7533c1e71a84b00a3b37ab06dd601d890" + integrity sha512-xPfLIPFcN/WLXBpQ/K4UgE98oUBO5Tia6BD4rkSR0wE7ep/PwBVlgvPJQrIBpmJGVAmUzwPKuDbVt9XV6+uC2g== elegant-spinner@^1.0.1: version "1.0.1" @@ -3997,7 +3998,7 @@ error-stack-parser@^1.3.6: dependencies: stackframe "^0.3.1" -es-abstract@^1.20.4, es-abstract@^1.21.2, es-abstract@^1.22.1: +es-abstract@^1.22.1: version "1.22.1" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.1.tgz#8b4e5fc5cefd7f1660f0f8e1a52900dfbc9d9ccc" integrity sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw== @@ -5108,8 +5109,8 @@ grommet-icons@^4.10.0: resolved "https://github.com/grommet/grommet-theme-hpe/tarball/stable#e2a3e8a8fef610e36fb9afa0a78091745a60b5f5" "grommet@https://github.com/grommet/grommet/tarball/stable": - version "2.33.1" - resolved "https://github.com/grommet/grommet/tarball/stable#93a6ef1b81ff0a74f8ea609a6a2365a1ecd4eed5" + version "2.33.2" + resolved "https://github.com/grommet/grommet/tarball/stable#5c16c74fa5e41bb8c36bc99adecb0c0a98494b09" dependencies: grommet-icons "^4.10.0" hoist-non-react-statics "^3.2.0" @@ -5960,14 +5961,13 @@ istanbul-reports@^3.1.3: istanbul-lib-report "^3.0.0" iterator.prototype@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.0.tgz#690c88b043d821f783843aaf725d7ac3b62e3b46" - integrity sha512-rjuhAk1AJ1fssphHD0IFV6TWL40CwRZ53FrztKx43yk2v6rguBYsY4Bj1VU4HmoMmKwZUlx7mfnhDf9cOp4YTw== + version "1.1.1" + resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.1.tgz#ab5b790e23ec00658f5974e032a2b05188bd3a5c" + integrity sha512-9E+nePc8C9cnQldmNl6bgpTY6zI4OPRZd97fhJ/iVZ1GifIUDVV5F6x1nEDqpe8KaMEZGT4xgrwKQDxXnjOIZQ== dependencies: - define-properties "^1.1.4" - get-intrinsic "^1.1.3" + define-properties "^1.2.0" + get-intrinsic "^1.2.1" has-symbols "^1.0.3" - has-tostringtag "^1.0.0" reflect.getprototypeof "^1.0.3" jest-changed-files@^27.5.1: @@ -6376,9 +6376,9 @@ jest@^27.5.1: jest-cli "^27.5.1" joi@^17.7.0: - version "17.10.0" - resolved "https://registry.yarnpkg.com/joi/-/joi-17.10.0.tgz#04e249daa24d48fada2d34046a8262e474b1326f" - integrity sha512-hrazgRSlhzacZ69LdcKfhi3Vu13z2yFfoAzmEov3yFIJlatTdVGUW6vle1zjH8qkzdCn/qGw8rapjqsObbYXAg== + version "17.10.1" + resolved "https://registry.yarnpkg.com/joi/-/joi-17.10.1.tgz#f908ee1617137cca5d83b91587cde80e472b5753" + integrity sha512-vIiDxQKmRidUVp8KngT8MZSOcmRVm2zV7jbMjNYWuHcJWI0bUck3nRTGQjhpPlQenIQIBC5Vp9AhcnHbWQqafw== dependencies: "@hapi/hoek" "^9.0.0" "@hapi/topo" "^5.0.0" @@ -7648,14 +7648,14 @@ object.fromentries@^2.0.6: es-abstract "^1.22.1" object.getownpropertydescriptors@^2.0.3: - version "2.1.6" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.6.tgz#5e5c384dd209fa4efffead39e3a0512770ccc312" - integrity sha512-lq+61g26E/BgHv0ZTFgRvi7NMEPuAxLkFU7rukXjc/AlwH4Am5xXVnIXy3un1bg/JPbXHrixRkK1itUzzPiIjQ== + version "2.1.7" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.7.tgz#7a466a356cd7da4ba8b9e94ff6d35c3eeab5d56a" + integrity sha512-PrJz0C2xJ58FNn11XV2lr4Jt5Gzl94qpy9Lu0JlfEj14z88sqbSBJCBEzdlNUCzY2gburhbrwOZ5BHCmuNUy0g== dependencies: - array.prototype.reduce "^1.0.5" + array.prototype.reduce "^1.0.6" call-bind "^1.0.2" define-properties "^1.2.0" - es-abstract "^1.21.2" + es-abstract "^1.22.1" safe-array-concat "^1.0.0" object.groupby@^1.0.0: @@ -8190,9 +8190,9 @@ property-information@^5.0.0: xtend "^4.0.0" property-information@^6.0.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/property-information/-/property-information-6.2.0.tgz#b74f522c31c097b5149e3c3cb8d7f3defd986a1d" - integrity sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg== + version "6.3.0" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-6.3.0.tgz#ba4a06ec6b4e1e90577df9931286953cdf4282c3" + integrity sha512-gVNZ74nqhRMiIUYWGQdosYetaKc83x8oT41a0LlV3AAFCAZwCpg4vmGkq8t34+cUhp3cnM4XDiU/7xlgK7HGrg== proxy-addr@~2.0.7: version "2.0.7" @@ -8395,14 +8395,14 @@ rechoir@^0.8.0: resolve "^1.20.0" reflect.getprototypeof@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.3.tgz#2738fd896fcc3477ffbd4190b40c2458026b6928" - integrity sha512-TTAOZpkJ2YLxl7mVHWrNo3iDMEkYlva/kgFcXndqMgbo/AZUmmavEkdXV+hXtE4P8xdyEKRzalaFqZVuwIk/Nw== + version "1.0.4" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz#aaccbf41aca3821b87bb71d9dcbc7ad0ba50a3f3" + integrity sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - get-intrinsic "^1.1.1" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" globalthis "^1.0.3" which-builtin-type "^1.1.3" @@ -8644,12 +8644,12 @@ sade@^1.7.3: mri "^1.1.0" safe-array-concat@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.0.tgz#2064223cba3c08d2ee05148eedbc563cd6d84060" - integrity sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ== + version "1.0.1" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c" + integrity sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q== dependencies: call-bind "^1.0.2" - get-intrinsic "^1.2.0" + get-intrinsic "^1.2.1" has-symbols "^1.0.3" isarray "^2.0.5" @@ -9112,31 +9112,31 @@ string.prototype.matchall@^4.0.8: side-channel "^1.0.4" string.prototype.trim@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533" - integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg== + version "1.2.8" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" + integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" string.prototype.trimend@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" - integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" + integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" string.prototype.trimstart@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" - integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" + integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" string_decoder@^1.1.1: version "1.3.0" @@ -9298,9 +9298,9 @@ terser-webpack-plugin@^5.3.7: terser "^5.16.8" terser@^5.16.8: - version "5.19.3" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.19.3.tgz#359baeba615aef13db4b8c4d77a2aa0d8814aa9e" - integrity sha512-pQzJ9UJzM0IgmT4FAtYI6+VqFf0lj/to58AV0Xfgg0Up37RyPG7Al+1cepC6/BVuAxR9oNb41/DL4DEoHJvTdg== + version "5.19.4" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.19.4.tgz#941426fa482bf9b40a0308ab2b3cd0cf7c775ebd" + integrity sha512-6p1DjHeuluwxDXcuT9VR8p64klWJKo1ILiy19s6C9+0Bh2+NWTX6nD9EPppiER4ICkHDVB1RkVpin/YW2nQn/g== dependencies: "@jridgewell/source-map" "^0.3.3" acorn "^8.8.2" @@ -10420,9 +10420,9 @@ ws@^7.2.0, ws@^7.4.6: integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== ws@^8.13.0, ws@^8.2.3: - version "8.13.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" - integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== + version "8.14.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.14.0.tgz#6c5792c5316dc9266ba8e780433fc45e6680aecd" + integrity sha512-WR0RJE9Ehsio6U4TuM+LmunEsjQ5ncHlw4sn9ihD6RoJKZrVyH9FWV3dmnwu8B2aNib1OvG2X6adUCyFpQyWcg== xml-name-validator@^3.0.0: version "3.0.0" From 1e281b3aa8665b847f3d3e085c46a065b3f47f54 Mon Sep 17 00:00:00 2001 From: beahackman Date: Thu, 7 Sep 2023 11:11:44 -0700 Subject: [PATCH 24/26] forgot to delete old local storage set --- aries-site/src/pages/_app.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/aries-site/src/pages/_app.js b/aries-site/src/pages/_app.js index e491347fe..5aa2088e1 100644 --- a/aries-site/src/pages/_app.js +++ b/aries-site/src/pages/_app.js @@ -167,10 +167,6 @@ function App({ Component, pageProps, router }) { } } } - window.localStorage.setItem( - 'update-history', - JSON.stringify(nextHistory), - ); setContentHistory(nextHistory); // set page status as ready since all calculations are complete now setPageUpdateReady(true); From 3265bafd525d01aad586cb6b90b24ac2043da993 Mon Sep 17 00:00:00 2001 From: Taylor Seamans Date: Thu, 7 Sep 2023 16:16:03 -0700 Subject: [PATCH 25/26] Update aries-site/src/layouts/content/UpdateNotification.js --- aries-site/src/layouts/content/UpdateNotification.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aries-site/src/layouts/content/UpdateNotification.js b/aries-site/src/layouts/content/UpdateNotification.js index 31d0e1628..199e48833 100644 --- a/aries-site/src/layouts/content/UpdateNotification.js +++ b/aries-site/src/layouts/content/UpdateNotification.js @@ -17,7 +17,7 @@ export const UpdateNotification = ({ name }) => { {contentHistory[name]?.description + ' '} {contentHistory[name]?.action?.length > 1 && ( - + )} ) : ( From 09361b865aaf755743d93bb0b85e2c4aba32d328 Mon Sep 17 00:00:00 2001 From: Taylor Seamans Date: Fri, 8 Sep 2023 09:31:41 -0700 Subject: [PATCH 26/26] Fix linting errors --- .../src/components/cards/ContentCard.js | 3 +- .../src/layouts/content/InPageNavigation.js | 3 +- .../src/layouts/content/NotificationTag.js | 5 ++ .../src/layouts/content/UpdateNotification.js | 15 +++- aries-site/src/layouts/main/Layout.js | 6 +- .../src/layouts/navigation/SearchResult.js | 4 +- aries-site/src/pages/_app.js | 64 ++++++++------ aries-site/src/utils/pageVisitTracker.js | 19 ++-- yarn.lock | 86 +++++++++---------- 9 files changed, 117 insertions(+), 88 deletions(-) diff --git a/aries-site/src/components/cards/ContentCard.js b/aries-site/src/components/cards/ContentCard.js index ecd63c5a5..fce169b16 100644 --- a/aries-site/src/components/cards/ContentCard.js +++ b/aries-site/src/components/cards/ContentCard.js @@ -18,7 +18,8 @@ export const ContentCard = forwardRef( let showUpdate = false; let changeKind; if (contentHistory && name in contentHistory) { - showUpdate = pageVisitTracker(name, contentHistory); //still run pageVisitTracker on it + // still run pageVisitTracker on it + showUpdate = pageVisitTracker(name, contentHistory); changeKind = contentHistory[name].changeKind; } diff --git a/aries-site/src/layouts/content/InPageNavigation.js b/aries-site/src/layouts/content/InPageNavigation.js index 5e5d4ae4a..e40cdfb5a 100644 --- a/aries-site/src/layouts/content/InPageNavigation.js +++ b/aries-site/src/layouts/content/InPageNavigation.js @@ -3,8 +3,8 @@ import Link from 'next/link'; import PropTypes from 'prop-types'; import { Box, Button, Nav, Text } from 'grommet'; import styled, { ThemeContext } from 'styled-components'; -import { nameToSlug } from '../../utils'; import { StatusGoodSmall } from 'grommet-icons'; +import { nameToSlug } from '../../utils'; import { ViewContext } from '../../pages/_app'; const SectionButton = styled(Button)` @@ -174,4 +174,5 @@ export const InPageNavigation = ({ headings, title }) => { InPageNavigation.propTypes = { headings: PropTypes.arrayOf(PropTypes.array), + title: PropTypes.string, }; diff --git a/aries-site/src/layouts/content/NotificationTag.js b/aries-site/src/layouts/content/NotificationTag.js index 1b96f4cbe..e26db03f3 100644 --- a/aries-site/src/layouts/content/NotificationTag.js +++ b/aries-site/src/layouts/content/NotificationTag.js @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types'; import { Tag } from 'grommet'; export const NotificationTag = ({ backgroundColor, ...rest }) => { @@ -14,3 +15,7 @@ export const NotificationTag = ({ backgroundColor, ...rest }) => { /> ); }; + +NotificationTag.propTypes = { + backgroundColor: PropTypes.string, +}; diff --git a/aries-site/src/layouts/content/UpdateNotification.js b/aries-site/src/layouts/content/UpdateNotification.js index 199e48833..639264d0a 100644 --- a/aries-site/src/layouts/content/UpdateNotification.js +++ b/aries-site/src/layouts/content/UpdateNotification.js @@ -1,6 +1,7 @@ +import PropTypes from 'prop-types'; import { Anchor, Text, Notification } from 'grommet'; -import { ViewContext } from '../../pages/_app'; import { useContext } from 'react'; +import { ViewContext } from '../../pages/_app'; export const UpdateNotification = ({ name }) => { const { contentHistory } = useContext(ViewContext); @@ -15,9 +16,12 @@ export const UpdateNotification = ({ name }) => { message={ contentHistory[name]?.changeKind === 'Update' ? ( - {contentHistory[name]?.description + ' '} + {`${contentHistory[name]?.description} `} {contentHistory[name]?.action?.length > 1 && ( - + )} ) : ( @@ -37,4 +41,9 @@ export const UpdateNotification = ({ name }) => { /> ); } + return null; +}; + +UpdateNotification.propTypes = { + name: PropTypes.string, }; diff --git a/aries-site/src/layouts/main/Layout.js b/aries-site/src/layouts/main/Layout.js index 7d3824b79..6db144dd0 100644 --- a/aries-site/src/layouts/main/Layout.js +++ b/aries-site/src/layouts/main/Layout.js @@ -34,7 +34,6 @@ import { FeedbackButton, Feedback, Question, - components, } from '../../components'; import { Config } from '../../../config'; import { getRelatedContent, getPageDetails } from '../../utils'; @@ -133,10 +132,11 @@ export const Layout = ({ const { contentHistory, pageUpdateReady, setPageUpdateReady } = useContext(ViewContext); - //every time a new page loads, initalize ready state to false, until app.js declares otherwise + // every time a new page loads, initalize ready + // state to false, until app.js declares otherwise useEffect(() => { setPageUpdateReady(false); - }, [title]); + }, [setPageUpdateReady, title]); return ( <> diff --git a/aries-site/src/layouts/navigation/SearchResult.js b/aries-site/src/layouts/navigation/SearchResult.js index e9f7232f6..7d6e7e167 100644 --- a/aries-site/src/layouts/navigation/SearchResult.js +++ b/aries-site/src/layouts/navigation/SearchResult.js @@ -1,12 +1,12 @@ import PropTypes from 'prop-types'; -import { Box, Paragraph, Text, Tag } from 'grommet'; +import { Box, Paragraph, Text } from 'grommet'; +import { useContext } from 'react'; import { getPageDetails } from '../../utils'; import { HighlightPhrase } from '../../components'; import { pageVisitTracker } from '../../utils/pageVisitTracker'; import { NotificationTag } from '../content/NotificationTag'; -import { useContext } from 'react'; import { ViewContext } from '../../pages/_app'; export const SearchResult = ({ query, result }) => { diff --git a/aries-site/src/pages/_app.js b/aries-site/src/pages/_app.js index 5aa2088e1..683f46b33 100644 --- a/aries-site/src/pages/_app.js +++ b/aries-site/src/pages/_app.js @@ -1,6 +1,6 @@ import { MDXProvider } from '@mdx-js/react'; import PropTypes from 'prop-types'; -import React, { useEffect, createContext, useState } from 'react'; +import React, { useEffect, createContext, useState, useMemo } from 'react'; import { Layout, ThemeMode } from '../layouts'; import { components } from '../components'; import { @@ -67,34 +67,34 @@ const backgroundImages = { export const ViewContext = createContext(undefined); -//thirtyDaysAgo calculated in milliseconds +// thirtyDaysAgo calculated in milliseconds const thirtyDaysAgo = new Date().getTime() - 30 * 24 * 60 * 60 * 1000; const notificationHeading = '#### Notifications\r\n'; function App({ Component, pageProps, router }) { const route = router.route.split('/'); - //state that holds the update information within the last 30 days + // state that holds the update information within the last 30 days const [contentHistory, setContentHistory] = useState({}); - //state that holds boolean for whether or not update info is ready to be rendered + // state that holds boolean for whether or not + // update info is ready to be rendered const [pageUpdateReady, setPageUpdateReady] = useState(false); // this effect is only for the first time _app mounts useEffect(() => { - const route = router.route; - const nameArray = route.split('/'); - let name = nameArray[nameArray.length - 1].split('#')[0]; + const routeParts = router.route.split('/'); + let name = routeParts[routeParts.length - 1].split('#')[0]; name = name.charAt(0).toUpperCase() + name.slice(1); fetch( - `https://api.github.com/repos/grommet/hpe-design-system/pulls?state=closed`, + 'https://api.github.com/repos/grommet/hpe-design-system/pulls?state=closed', ) .then(response => response.json()) .then(data => { - let nextHistory = {}; + const nextHistory = {}; let localStorageKey; - for (let i = 0; i < data.length; i++) { + for (let i = 0; i < data.length; i += 1) { const prDescription = data[i].body; const mergedAt = data[i].merged_at; // PR was merged within the last 30 days and a notification @@ -107,16 +107,21 @@ function App({ Component, pageProps, router }) { const indexOfFirstComponent = prDescription.search(notificationHeading) + notificationHeading.length; - //the position of the first bracket containing either new/updates is 22 characters away - //this includes the notification header and the \r\n\r\n that follow + // the position of the first bracket containing + // either new/updates is 22 characters away + // this includes the notification header + // and the \r\n\r\n that follow const notificationsParts = prDescription .slice(indexOfFirstComponent) - //splits them into an array jumping between name, sections, and description - //like: ['[New]Header', ['Usage', 'Some Section'], '[The description for header]', '[Update]Button', ['Dos and Donts'], '[Description for button]'] + // splits them into an array jumping between name, + // sections, and description like: ['[New]Header', ['Usage', + // 'Some Section'], '[The description for header]', + // '[Update]Button', ['Dos and Donts'], '[Description + // for button]'] .split('\r\n\r\n'); const regExp = /\[([^)]+)\]/; - //+= 3 so it can jump between component descriptions + // += 3 so it can jump between component descriptions for ( let j = 0; j < Object.keys(notificationsParts).length; @@ -135,14 +140,14 @@ function App({ Component, pageProps, router }) { changeKindAndName.slice(changeKind.length).trim(); if (pageName && !(pageName in nextHistory)) { - let sections = notificationsParts[j + 1] + const sections = notificationsParts[j + 1] .slice(1, -1) .split(']['); let href; if (sections.length === 1) { // add an active link if only one section has been updated - href = '#' + nameToSlug(sections[0].trim()); + href = `#${nameToSlug(sections[0].trim())}`; } let showUpdate; @@ -159,7 +164,7 @@ function App({ Component, pageProps, router }) { changeKind: regExp.exec(changeKindAndName)[1].trim(), description: notificationsParts[j + 2].slice(1, -1), date: mergedAt, - sections: sections, + sections, action: href, update: showUpdate, }; @@ -171,13 +176,13 @@ function App({ Component, pageProps, router }) { // set page status as ready since all calculations are complete now setPageUpdateReady(true); if (name) { - const localStorageKey = getLocalStorageKey(name); + localStorageKey = getLocalStorageKey(name); const dateNow = new Date().getTime(); window.localStorage.setItem(localStorageKey, dateNow); } }) .catch(error => console.error(error)); - }, []); + }, [router]); useEffect(() => { const handleRouteChange = () => { @@ -188,11 +193,14 @@ function App({ Component, pageProps, router }) { const routeParts = router.route.split('/'); let name = routeParts[routeParts.length - 1]; name = name.charAt(0).toUpperCase() + name.slice(1); - let localStorageKey = getLocalStorageKey(name); + const localStorageKey = getLocalStorageKey(name); const now = new Date().getTime(); - //every time it re-routes, see if the given page has a reported update in the last 30 days (what's reported in updateHistory) - //then check if it should be shown (T/F), and set that in the state variable + // every time it re-routes, see if the given page has a + // reported update in the last 30 days (what's reported in + // updateHistory) then check if it should be shown (T/F), and + // set that in the state variable if (contentHistory && name in contentHistory) { + console.log('hello'); contentHistory[name].update = pageVisitTracker(name, contentHistory); window.localStorage.setItem(localStorageKey, now); setContentHistory(contentHistory); @@ -208,7 +216,7 @@ function App({ Component, pageProps, router }) { return () => { router.events.off('routeChangeComplete', handleRouteChange); }; - }, [router.events, contentHistory]); + }, [router.events, contentHistory, router.route]); // final array item from the route is the title of page we are on const title = @@ -220,11 +228,13 @@ function App({ Component, pageProps, router }) { route[route.length - 2].length && slugToText(route[route.length - 2]); + const viewContextValue = useMemo(() => { + return { contentHistory, pageUpdateReady, setPageUpdateReady }; + }, [contentHistory, pageUpdateReady]); + return ( - + `${title?.toLowerCase().replace(/\s+/g, '-')}-last-visited`; -// determines whether or not the update should be shown given the most recent commit and last-visit records -export const pageVisitTracker = function (title, contentHistory) { - const localStorageKey = getLocalStorageKey(title); // the name associated with the values in localStorage +// determines whether or not the update should be shown given +// the most recent commit and last-visit records +export const pageVisitTracker = (title, contentHistory) => { + // the name associated with the values in localStorage + const localStorageKey = getLocalStorageKey(title); let showUpdate; if (contentHistory && title in contentHistory) { - //there has been a reported update within the last 30 days + // there has been a reported update within the last 30 days if (window.localStorage.getItem(localStorageKey)) { - //there has been a guaranteed update and we've seen this page before + // there has been a guaranteed update and we've seen this page before if ( window.localStorage.getItem(localStorageKey) > new Date(contentHistory[title].date).getTime() ) { - //if when they saw the page is after the update, dont show it + // if when they saw the page is after the update, dont show it showUpdate = false; } else { - //page has reported an update within 30 days, it has been seen before, but it was before the update was released + // page has reported an update within 30 days, it has + // been seen before, but it was before the update was released showUpdate = true; } } else { - //it's within 30 days but it has never seen the page before + // it's within 30 days but it has never seen the page before showUpdate = true; } } else { diff --git a/yarn.lock b/yarn.lock index 045ce44eb..964e9e7a7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -272,20 +272,20 @@ integrity sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ== "@babel/core@^7.1.0", "@babel/core@^7.12.1", "@babel/core@^7.12.3", "@babel/core@^7.20.5", "@babel/core@^7.7.2", "@babel/core@^7.8.0": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.15.tgz#15d4fd03f478a459015a4b94cfbb3bd42c48d2f4" - integrity sha512-PtZqMmgRrvj8ruoEOIwVA3yoF91O+Hgw9o7DAUTNBA6Mo2jpu31clx9a7Nz/9JznqetTR6zwfC4L3LAjKQXUwA== + version "7.22.17" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.17.tgz#2f9b0b395985967203514b24ee50f9fd0639c866" + integrity sha512-2EENLmhpwplDux5PSsZnSbnSkB3tZ6QTksgO25xwEL7pIDcNOMhF5v/s6RzwjMZzZzw9Ofc30gHv5ChCC8pifQ== dependencies: "@ampproject/remapping" "^2.2.0" "@babel/code-frame" "^7.22.13" "@babel/generator" "^7.22.15" "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-module-transforms" "^7.22.15" + "@babel/helper-module-transforms" "^7.22.17" "@babel/helpers" "^7.22.15" - "@babel/parser" "^7.22.15" + "@babel/parser" "^7.22.16" "@babel/template" "^7.22.15" - "@babel/traverse" "^7.22.15" - "@babel/types" "^7.22.15" + "@babel/traverse" "^7.22.17" + "@babel/types" "^7.22.17" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -405,10 +405,10 @@ dependencies: "@babel/types" "^7.22.15" -"@babel/helper-module-transforms@^7.22.15", "@babel/helper-module-transforms@^7.22.5", "@babel/helper-module-transforms@^7.22.9": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.15.tgz#40ad2f6950f143900e9c1c72363c0b431a606082" - integrity sha512-l1UiX4UyHSFsYt17iQ3Se5pQQZZHa22zyIXURmvkmLCD4t/aU+dvNWHatKac/D9Vm9UES7nvIqHs4jZqKviUmQ== +"@babel/helper-module-transforms@^7.22.15", "@babel/helper-module-transforms@^7.22.17", "@babel/helper-module-transforms@^7.22.5", "@babel/helper-module-transforms@^7.22.9": + version "7.22.17" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.17.tgz#7edf129097a51ccc12443adbc6320e90eab76693" + integrity sha512-XouDDhQESrLHTpnBtCKExJdyY4gJCdrvH2Pyv8r8kovX2U8G0dRUOT45T9XlbLtuu9CLXP15eusnkprhoPV5iQ== dependencies: "@babel/helper-environment-visitor" "^7.22.5" "@babel/helper-module-imports" "^7.22.15" @@ -429,13 +429,13 @@ integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== "@babel/helper-remap-async-to-generator@^7.18.9", "@babel/helper-remap-async-to-generator@^7.22.5", "@babel/helper-remap-async-to-generator@^7.22.9": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz#53a25b7484e722d7efb9c350c75c032d4628de82" - integrity sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ== + version "7.22.17" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.17.tgz#dabaa50622b3b4670bd6546fc8db23eb12d89da0" + integrity sha512-bxH77R5gjH3Nkde6/LuncQoLaP16THYPscurp1S8z7S9ZgezCyV3G8Hc+TZiCmY8pz4fp8CvKSgtJMW0FkLAxA== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-wrap-function" "^7.22.9" + "@babel/helper-wrap-function" "^7.22.17" "@babel/helper-replace-supers@^7.22.5", "@babel/helper-replace-supers@^7.22.9": version "7.22.9" @@ -482,14 +482,14 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz#694c30dfa1d09a6534cdfcafbe56789d36aba040" integrity sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA== -"@babel/helper-wrap-function@^7.22.9": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.10.tgz#d845e043880ed0b8c18bd194a12005cb16d2f614" - integrity sha512-OnMhjWjuGYtdoO3FmsEFWvBStBAe2QOgwOLsLNDjN+aaiMD8InJk1/O3HSD8lkqTjCgg5YI34Tz15KNNA3p+nQ== +"@babel/helper-wrap-function@^7.22.17": + version "7.22.17" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.17.tgz#222ac3ff9cc8f9b617cc1e5db75c0b538e722801" + integrity sha512-nAhoheCMlrqU41tAojw9GpVEKDlTS8r3lzFmF0lP52LwblCPbuFSO7nGIZoIcoU5NIm1ABrna0cJExE4Ay6l2Q== dependencies: "@babel/helper-function-name" "^7.22.5" - "@babel/template" "^7.22.5" - "@babel/types" "^7.22.10" + "@babel/template" "^7.22.15" + "@babel/types" "^7.22.17" "@babel/helpers@^7.22.15": version "7.22.15" @@ -521,7 +521,7 @@ regenerator-runtime "^0.14.0" v8flags "^3.1.1" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15": +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.22.16": version "7.22.16" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.16.tgz#180aead7f247305cce6551bea2720934e2fa2c95" integrity sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA== @@ -1346,10 +1346,10 @@ "@babel/parser" "^7.22.15" "@babel/types" "^7.22.15" -"@babel/traverse@^7.22.15", "@babel/traverse@^7.4.5", "@babel/traverse@^7.7.2": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.15.tgz#75be4d2d6e216e880e93017f4e2389aeb77ef2d9" - integrity sha512-DdHPwvJY0sEeN4xJU5uRLmZjgMMDIvMPniLuYzUVXj/GGzysPl0/fwt44JBkyUIzGJPV8QgHMcQdQ34XFuKTYQ== +"@babel/traverse@^7.22.15", "@babel/traverse@^7.22.17", "@babel/traverse@^7.4.5", "@babel/traverse@^7.7.2": + version "7.22.17" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.17.tgz#b23c203ab3707e3be816043081b4a994fcacec44" + integrity sha512-xK4Uwm0JnAMvxYZxOVecss85WxTEIbTa7bnGyf/+EgCL5Zt3U7htUpEOWv9detPlamGKuRzCqw74xVglDWpPdg== dependencies: "@babel/code-frame" "^7.22.13" "@babel/generator" "^7.22.15" @@ -1357,15 +1357,15 @@ "@babel/helper-function-name" "^7.22.5" "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.22.15" - "@babel/types" "^7.22.15" + "@babel/parser" "^7.22.16" + "@babel/types" "^7.22.17" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.10", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.15.tgz#266cb21d2c5fd0b3931e7a91b6dd72d2f617d282" - integrity sha512-X+NLXr0N8XXmN5ZsaQdm9U2SSC3UbIYq/doL++sueHOTisgZHoKaQtZxGuV2cUPQHMfjKEfg/g6oy7Hm6SKFtA== +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.17", "@babel/types@^7.22.5", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.22.17" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.17.tgz#f753352c4610ffddf9c8bc6823f9ff03e2303eee" + integrity sha512-YSQPHLFtQNE5xN9tHuZnzu8vPr61wVTBZdfv1meex1NBosa4iT05k/Jw06ddJugi4bk7The/oSwQGFcksmEJQg== dependencies: "@babel/helper-string-parser" "^7.22.5" "@babel/helper-validator-identifier" "^7.22.15" @@ -3157,9 +3157,9 @@ camelize@^1.0.0: integrity sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ== caniuse-lite@^1.0.30001406, caniuse-lite@^1.0.30001517: - version "1.0.30001528" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001528.tgz#479972fc705b996f1114336c0032418a215fd0aa" - integrity sha512-0Db4yyjR9QMNlsxh+kKWzQtkyflkG/snYheSzkjmvdEtEXB1+jt7A2HmSEiO6XIJPIbo92lHNGNySvE5pZcs5Q== + version "1.0.30001529" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001529.tgz#c1f2a411e85fdaace4b1560e1bad078b00ac3181" + integrity sha512-n2pUQYGAkrLG4QYj2desAh+NqsJpHbNmVZz87imptDdxLAtjxary7Df/psdfyDGmskJK/9Dt9cPnx5RZ3CU4Og== ccount@^2.0.0: version "2.0.1" @@ -3907,9 +3907,9 @@ ee-first@1.1.1: integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== electron-to-chromium@^1.4.477: - version "1.4.510" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.510.tgz#446c50d7533c1e71a84b00a3b37ab06dd601d890" - integrity sha512-xPfLIPFcN/WLXBpQ/K4UgE98oUBO5Tia6BD4rkSR0wE7ep/PwBVlgvPJQrIBpmJGVAmUzwPKuDbVt9XV6+uC2g== + version "1.4.512" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.512.tgz#f6c14d4d2ddacf064f1de36dbd3f6a469821a7ee" + integrity sha512-1W8wRbYlQE4ph7eoj3TJ+uqwO6+xvAE/L+KGU7WTQQvX3tnSIGZAb90MTsMoJqzntamiwJhBAj4WZmygXhsOUg== elegant-spinner@^1.0.1: version "1.0.1" @@ -4208,7 +4208,7 @@ eslint-module-utils@^2.8.0: "eslint-plugin-grommet@https://github.com/grommet/eslint-plugin-grommet/tarball/stable": version "0.2.0" - resolved "https://github.com/grommet/eslint-plugin-grommet/tarball/stable#ea8eec237488ea8ad62e08255a3a2b898633383b" + resolved "https://github.com/grommet/eslint-plugin-grommet/tarball/stable#5942fd8733cd74b83720bb8353a0013da00bf4d7" dependencies: requireindex "~1.1.0" @@ -5110,7 +5110,7 @@ grommet-icons@^4.10.0: "grommet@https://github.com/grommet/grommet/tarball/stable": version "2.33.2" - resolved "https://github.com/grommet/grommet/tarball/stable#5c16c74fa5e41bb8c36bc99adecb0c0a98494b09" + resolved "https://github.com/grommet/grommet/tarball/stable#95da7935d0abb1048dedf59c751e41ed8325c702" dependencies: grommet-icons "^4.10.0" hoist-non-react-statics "^3.2.0" @@ -10420,9 +10420,9 @@ ws@^7.2.0, ws@^7.4.6: integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== ws@^8.13.0, ws@^8.2.3: - version "8.14.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.14.0.tgz#6c5792c5316dc9266ba8e780433fc45e6680aecd" - integrity sha512-WR0RJE9Ehsio6U4TuM+LmunEsjQ5ncHlw4sn9ihD6RoJKZrVyH9FWV3dmnwu8B2aNib1OvG2X6adUCyFpQyWcg== + version "8.14.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.14.1.tgz#4b9586b4f70f9e6534c7bb1d3dc0baa8b8cf01e0" + integrity sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A== xml-name-validator@^3.0.0: version "3.0.0"