From 5ab6b93fa3bf257fd176f9edf99a00763d087707 Mon Sep 17 00:00:00 2001 From: developomp Date: Sun, 18 Jun 2023 11:58:13 +0900 Subject: [PATCH] refactor(blog): move content gen code to its own package --- apps/blog/generate/clean.ts | 35 -- apps/blog/package.json | 28 +- apps/blog/src/components/Badge.tsx | 14 +- apps/blog/src/components/PostCard.tsx | 2 +- apps/blog/src/contentMap.ts | 6 + apps/blog/src/pages/Home/Home.tsx | 15 +- apps/blog/src/pages/Page/Meta.tsx | 2 +- apps/blog/src/pages/Page/Page.tsx | 8 +- apps/blog/src/pages/Page/helper.ts | 32 +- apps/blog/src/pages/Portfolio/Portfolio.tsx | 4 +- apps/blog/src/pages/Portfolio/ProjectCard.tsx | 2 +- apps/blog/src/pages/Search/Search.tsx | 11 +- apps/blog/src/pages/Search/TagSelect.tsx | 8 +- apps/blog/tsconfig.json | 2 +- .../markdown/portfolio/developomp-site.md | 0 .../markdown/portfolio/exyleio.md | 0 .../markdown/portfolio/linux setup script.md | 0 .../markdown/portfolio/llama bot.md | 0 .../markdown/portfolio/mocha downloader.md | 0 .../blog-content}/markdown/portfolio/pomky.md | 0 .../blog-content}/markdown/portfolio/wbm.md | 0 .../markdown/portfolio/wbtimeline.md | 0 .../posts/finding the ultimate browser.md | 0 .../blog-content}/markdown/posts/test post.md | 0 .../markdown/series/my quotes/0.md | 0 .../markdown/series/my quotes/10_10.md | 0 .../markdown/series/my quotes/1_1.md | 0 .../markdown/series/my quotes/2_2.md | 0 .../markdown/series/my quotes/3_3.md | 0 .../markdown/series/my quotes/4_4.md | 0 .../markdown/series/my quotes/5_5.md | 0 .../markdown/series/my quotes/6_6.md | 0 .../markdown/series/my quotes/7_7.md | 0 .../markdown/series/my quotes/8_8.md | 0 .../markdown/series/my quotes/9_9.md | 0 .../markdown/unsearchable/about.md | 0 .../markdown/unsearchable/goals.md | 0 .../markdown/unsearchable/resume.md | 0 packages/blog-content/package.json | 42 ++ .../blog-content/src}/config.ts | 2 +- .../blog-content/src}/index.ts | 13 +- .../blog-content/src}/parseMarkdown.ts | 2 +- .../blog-content/src}/portfolio/badge.ejs | 0 .../blog-content/src}/portfolio/badges.ejs | 0 .../blog-content/src}/portfolio/skills.ejs | 0 .../blog-content/src}/portfolio/skills.json | 0 .../blog-content/src}/portfolio/style.css | 0 .../blog-content/src}/postProcess.ts | 30 +- .../blog-content/src}/recursiveParse/index.ts | 3 +- .../src}/recursiveParse/parsePortfolio.ts | 0 .../src}/recursiveParse/parsePost.ts | 19 +- .../src}/recursiveParse/parseSeries.ts | 23 +- .../src}/recursiveParse/parseUnsearchable.ts | 4 +- .../blog-content/src}/searchIndex.ts | 0 .../src}/types/markdown-it-footnote.d.ts | 0 .../types/markdown-it-highlight-lines.d.ts | 0 .../src}/types/markdown-it-mark.d.ts | 0 .../src}/types/markdown-it-sub.d.ts | 0 .../src}/types/markdown-it-sup.d.ts | 0 .../src}/types/markdown-it-task-checkbox.d.ts | 0 .../src}/types/markdown-it-texmath.d.ts | 0 .../blog-content/src}/types/markdown-toc.d.ts | 0 .../blog-content/src}/types/types.ts | 9 +- .../blog-content/src}/util.ts | 0 packages/blog-content/tsconfig.json | 8 + pnpm-lock.yaml | 516 ++++++++++-------- 66 files changed, 460 insertions(+), 380 deletions(-) delete mode 100644 apps/blog/generate/clean.ts create mode 100644 apps/blog/src/contentMap.ts rename {apps/blog => packages/blog-content}/markdown/portfolio/developomp-site.md (100%) rename {apps/blog => packages/blog-content}/markdown/portfolio/exyleio.md (100%) rename {apps/blog => packages/blog-content}/markdown/portfolio/linux setup script.md (100%) rename {apps/blog => packages/blog-content}/markdown/portfolio/llama bot.md (100%) rename {apps/blog => packages/blog-content}/markdown/portfolio/mocha downloader.md (100%) rename {apps/blog => packages/blog-content}/markdown/portfolio/pomky.md (100%) rename {apps/blog => packages/blog-content}/markdown/portfolio/wbm.md (100%) rename {apps/blog => packages/blog-content}/markdown/portfolio/wbtimeline.md (100%) rename {apps/blog => packages/blog-content}/markdown/posts/finding the ultimate browser.md (100%) rename {apps/blog => packages/blog-content}/markdown/posts/test post.md (100%) rename {apps/blog => packages/blog-content}/markdown/series/my quotes/0.md (100%) rename {apps/blog => packages/blog-content}/markdown/series/my quotes/10_10.md (100%) rename {apps/blog => packages/blog-content}/markdown/series/my quotes/1_1.md (100%) rename {apps/blog => packages/blog-content}/markdown/series/my quotes/2_2.md (100%) rename {apps/blog => packages/blog-content}/markdown/series/my quotes/3_3.md (100%) rename {apps/blog => packages/blog-content}/markdown/series/my quotes/4_4.md (100%) rename {apps/blog => packages/blog-content}/markdown/series/my quotes/5_5.md (100%) rename {apps/blog => packages/blog-content}/markdown/series/my quotes/6_6.md (100%) rename {apps/blog => packages/blog-content}/markdown/series/my quotes/7_7.md (100%) rename {apps/blog => packages/blog-content}/markdown/series/my quotes/8_8.md (100%) rename {apps/blog => packages/blog-content}/markdown/series/my quotes/9_9.md (100%) rename {apps/blog => packages/blog-content}/markdown/unsearchable/about.md (100%) rename {apps/blog => packages/blog-content}/markdown/unsearchable/goals.md (100%) rename {apps/blog => packages/blog-content}/markdown/unsearchable/resume.md (100%) create mode 100644 packages/blog-content/package.json rename {apps/blog/generate => packages/blog-content/src}/config.ts (84%) rename {apps/blog/generate => packages/blog-content/src}/index.ts (86%) rename {apps/blog/generate => packages/blog-content/src}/parseMarkdown.ts (98%) rename {apps/blog/generate => packages/blog-content/src}/portfolio/badge.ejs (100%) rename {apps/blog/generate => packages/blog-content/src}/portfolio/badges.ejs (100%) rename {apps/blog/generate => packages/blog-content/src}/portfolio/skills.ejs (100%) rename {apps/blog/generate => packages/blog-content/src}/portfolio/skills.json (100%) rename {apps/blog/generate => packages/blog-content/src}/portfolio/style.css (100%) rename {apps/blog/generate => packages/blog-content/src}/postProcess.ts (80%) rename {apps/blog/generate => packages/blog-content/src}/recursiveParse/index.ts (98%) rename {apps/blog/generate => packages/blog-content/src}/recursiveParse/parsePortfolio.ts (100%) rename {apps/blog/generate => packages/blog-content/src}/recursiveParse/parsePost.ts (77%) rename {apps/blog/generate => packages/blog-content/src}/recursiveParse/parseSeries.ts (86%) rename {apps/blog/generate => packages/blog-content/src}/recursiveParse/parseUnsearchable.ts (91%) rename {apps/blog/generate => packages/blog-content/src}/searchIndex.ts (100%) rename {apps/blog => packages/blog-content/src}/types/markdown-it-footnote.d.ts (100%) rename {apps/blog => packages/blog-content/src}/types/markdown-it-highlight-lines.d.ts (100%) rename {apps/blog => packages/blog-content/src}/types/markdown-it-mark.d.ts (100%) rename {apps/blog => packages/blog-content/src}/types/markdown-it-sub.d.ts (100%) rename {apps/blog => packages/blog-content/src}/types/markdown-it-sup.d.ts (100%) rename {apps/blog => packages/blog-content/src}/types/markdown-it-task-checkbox.d.ts (100%) rename {apps/blog => packages/blog-content/src}/types/markdown-it-texmath.d.ts (100%) rename {apps/blog => packages/blog-content/src}/types/markdown-toc.d.ts (100%) rename {apps/blog => packages/blog-content/src}/types/types.ts (94%) rename {apps/blog/generate => packages/blog-content/src}/util.ts (100%) create mode 100644 packages/blog-content/tsconfig.json diff --git a/apps/blog/generate/clean.ts b/apps/blog/generate/clean.ts deleted file mode 100644 index ee6b494..0000000 --- a/apps/blog/generate/clean.ts +++ /dev/null @@ -1,35 +0,0 @@ -import fs from "fs" - -import { - contentDirectoryPath, - iconsDirectoryPath, - mapFilePath, - portfolioFilePath, - searchIndexFilePath, -} from "./config" - -export default function clean() { - deleteDirectory(contentDirectoryPath) - deleteDirectory(iconsDirectoryPath) - - deleteFile(mapFilePath) - deleteFile(portfolioFilePath) - deleteFile(searchIndexFilePath) - - deleteFile("./public/img/skills.svg") - deleteFile("./public/img/projects.svg") -} - -function deleteDirectory(path: string) { - try { - fs.rmSync(path, { recursive: true }) - // eslint-disable-next-line no-empty - } catch (err) {} -} - -function deleteFile(path: string) { - try { - fs.unlinkSync(path) - // eslint-disable-next-line no-empty - } catch (err) {} -} diff --git a/apps/blog/package.json b/apps/blog/package.json index 77facb9..581d481 100644 --- a/apps/blog/package.json +++ b/apps/blog/package.json @@ -3,12 +3,13 @@ "version": "0.0.0", "private": true, "scripts": { - "generate": "ts-node -O '{\"module\":\"commonjs\"}' --files ./generate", - "dev": "pnpm run generate && react-scripts start", - "build": "pnpm run generate && react-scripts build", + "cp": "cp -a ../../packages/blog-content/dist/public/. ./public", + "dev": "pnpm cp && react-scripts start", + "build": "pnpm cp && react-scripts build", "clean": "rm -rf .turbo && rm -rf node_modules && rm -rf build" }, "dependencies": { + "@developomp-site/blog-content": "workspace:*", "@developomp-site/theme": "workspace:*", "@fortawesome/fontawesome-svg-core": "^6.2.1", "@fortawesome/free-brands-svg-icons": "^6.2.1", @@ -37,12 +38,10 @@ "@developomp-site/eslint-config": "workspace:*", "@developomp-site/tsconfig": "workspace:*", "@styled/typescript-styled-plugin": "^1.0.0", - "@types/ejs": "^3.1.1", "@types/elasticlunr": "^0.9.5", "@types/highlight.js": "^10.1.0", "@types/jsdom": "^20.0.1", "@types/katex": "^0.14.0", - "@types/markdown-it": "^12.2.3", "@types/node": "^18.11.11", "@types/react": "^18.0.26", "@types/react-collapse": "^5.0.1", @@ -50,29 +49,10 @@ "@types/react-dom": "^18.0.9", "@types/react-select": "^5.0.1", "@types/styled-components": "^5.1.26", - "@types/svgo": "^3.0.0", - "@types/tinycolor2": "^1.4.3", - "ejs": "^3.1.8", - "gray-matter": "^4.0.3", "jsdom": "^20.0.3", "jspdf": "^2.5.1", - "markdown-it": "^13.0.1", - "markdown-it-anchor": "^8.6.5", - "markdown-it-attrs": "^4.1.4", - "markdown-it-footnote": "^3.0.3", - "markdown-it-highlight-lines": "^1.0.2", - "markdown-it-mark": "^3.0.1", - "markdown-it-sub": "^1.0.0", - "markdown-it-sup": "^1.0.0", - "markdown-it-task-checkbox": "^1.0.6", - "markdown-it-texmath": "^1.0.0", - "markdown-toc": "^1.2.0", "prettier": "^2.8.1", - "read-time-estimate": "^0.0.3", "simple-icons": "^7.21.0", - "svgo": "^3.0.2", - "tinycolor2": "^1.4.2", - "ts-node": "^10.9.1", "tslint-config-prettier": "^1.18.0", "typescript": "^4.9.4" }, diff --git a/apps/blog/src/components/Badge.tsx b/apps/blog/src/components/Badge.tsx index 750b476..226bb4c 100644 --- a/apps/blog/src/components/Badge.tsx +++ b/apps/blog/src/components/Badge.tsx @@ -1,6 +1,7 @@ import dark from "@developomp-site/theme/dist/dark.json" import light from "@developomp-site/theme/dist/light.json" +import { Badge } from "@developomp-site/blog-content/src/types/types" import { useEffect, useState } from "react" import styled from "styled-components" @@ -34,23 +35,16 @@ const StyledSVG = styled.div<{ isDark: boolean }>` } ` -export interface Badge { - svg: string - hex: string - isDark: boolean - title: string -} - interface BadgeProps { slug: string } -const Badge = (props: BadgeProps) => { +export default (props: BadgeProps) => { const [badgeData, setBadgeData] = useState(undefined) const { slug } = props const getBadgeData = async () => { - return await require(`../data/icons/${slug}.json`) + return await require(`@developomp-site/blog-content/dist/icons/${slug}.json`) } useEffect(() => { @@ -71,5 +65,3 @@ const Badge = (props: BadgeProps) => { ) } - -export default Badge diff --git a/apps/blog/src/components/PostCard.tsx b/apps/blog/src/components/PostCard.tsx index ac30bff..e5fdd86 100644 --- a/apps/blog/src/components/PostCard.tsx +++ b/apps/blog/src/components/PostCard.tsx @@ -1,7 +1,7 @@ import styled from "styled-components" import { Link } from "react-router-dom" -import { PostData } from "../../types/types" +import { PostData } from "@developomp-site/blog-content/src/types/types" import { FontAwesomeIcon } from "@fortawesome/react-fontawesome" import { diff --git a/apps/blog/src/contentMap.ts b/apps/blog/src/contentMap.ts new file mode 100644 index 0000000..c24813d --- /dev/null +++ b/apps/blog/src/contentMap.ts @@ -0,0 +1,6 @@ +import contentMapJson from "@developomp-site/blog-content/dist/map.json" +import { ContentMap } from "@developomp-site/blog-content/src/types/types" + +const contentMap: ContentMap = contentMapJson + +export default contentMap diff --git a/apps/blog/src/pages/Home/Home.tsx b/apps/blog/src/pages/Home/Home.tsx index ce19a18..bf02733 100644 --- a/apps/blog/src/pages/Home/Home.tsx +++ b/apps/blog/src/pages/Home/Home.tsx @@ -2,7 +2,6 @@ * PostList.tsx * show posts in recent order */ -import type { Map } from "../../../types/types" import { useCallback, useEffect, useState } from "react" import { Helmet } from "react-helmet-async" @@ -11,9 +10,7 @@ import styled from "styled-components" import PostCard from "../../components/PostCard" import ShowMoreButton from "./ShowMoreButton" -import _map from "../../data/map.json" - -const map: Map = _map +import contentMap from "../../contentMap" const PostList = styled.div` flex-direction: column; @@ -32,23 +29,23 @@ export default () => { let postCount = 0 const postCards = [] as JSX.Element[] - for (const date of Object.keys(map.date).reverse()) { + for (const date of Object.keys(contentMap.date).reverse()) { if (postCount >= howMany) break - const length = map.date[date].length + const length = contentMap.date[date].length for (let i = 0; i < length; i++) { if (postCount >= howMany) break postCount++ - const content_id = map.date[date][length - i - 1] + const content_id = contentMap.date[date][length - i - 1] postCards.push( ) @@ -60,7 +57,7 @@ export default () => { useEffect(() => { loadPostCards() - setPostsLength(Object.keys(map.posts).length) + setPostsLength(Object.keys(contentMap.posts).length) }, [howMany]) return ( diff --git a/apps/blog/src/pages/Page/Meta.tsx b/apps/blog/src/pages/Page/Meta.tsx index f7761ed..aaa0892 100644 --- a/apps/blog/src/pages/Page/Meta.tsx +++ b/apps/blog/src/pages/Page/Meta.tsx @@ -7,7 +7,7 @@ import { faHourglass, } from "@fortawesome/free-solid-svg-icons" -import { PageData } from "../../../types/types" +import { PageData } from "@developomp-site/blog-content/src/types/types" const StyledMetaContainer = styled.div` color: ${({ theme }) => theme.theme.color.text.gray}; diff --git a/apps/blog/src/pages/Page/Page.tsx b/apps/blog/src/pages/Page/Page.tsx index 80cb4c9..656e721 100644 --- a/apps/blog/src/pages/Page/Page.tsx +++ b/apps/blog/src/pages/Page/Page.tsx @@ -22,11 +22,9 @@ import { import Meta from "./Meta" import Toc from "./Toc" -import type { PageData, Map } from "../../../types/types" +import type { PageData } from "@developomp-site/blog-content/src/types/types" -import _map from "../../data/map.json" - -const map: Map = _map +import contentMap from "../../contentMap" const StyledTitle = styled.h1<{ pageType: PageType }>` margin-bottom: 1rem; @@ -159,7 +157,7 @@ export default function Page() { key={post} postData={{ content_id: post, - ...map.posts[post], + ...contentMap.posts[post], }} /> ) diff --git a/apps/blog/src/pages/Page/helper.ts b/apps/blog/src/pages/Page/helper.ts index b3b9f56..0e5755c 100644 --- a/apps/blog/src/pages/Page/helper.ts +++ b/apps/blog/src/pages/Page/helper.ts @@ -1,9 +1,8 @@ -import portfolio from "../../data/portfolio.json" -import _map from "../../data/map.json" +import portfolio from "@developomp-site/blog-content/dist/portfolio.json" -import type { Map, PageData } from "../../../types/types" +import type { PageData } from "@developomp-site/blog-content/src/types/types" -const map: Map = _map +import contentMap from "../../contentMap" export enum PageType { POST, @@ -16,9 +15,13 @@ export enum PageType { export async function fetchContent(pageType: PageType, url: string) { try { if (pageType == PageType.UNSEARCHABLE) { - return await import(`../../data/content/unsearchable${url}.json`) + return await import( + `@developomp-site/blog-content/dist/content/unsearchable${url}.json` + ) } else { - return await import(`../../data/content${url}.json`) + return await import( + `@developomp-site/blog-content/dist/content${url}.json` + ) } } catch (err) { return @@ -78,7 +81,7 @@ export function parsePageData( // load and parse content differently depending on the content type switch (pageType) { case PageType.POST: { - const post = map.posts[content_id] + const post = contentMap.posts[content_id] pageData.content = fetched_content.content pageData.toc = fetched_content.toc @@ -95,11 +98,11 @@ export function parsePageData( case PageType.SERIES: { const seriesURL = content_id.slice(0, content_id.lastIndexOf("/")) - const curr = map.series[seriesURL].order.indexOf(content_id) + const curr = contentMap.series[seriesURL].order.indexOf(content_id) const prev = curr - 1 const next = curr + 1 - const post = map.posts[content_id] + const post = contentMap.posts[content_id] pageData.content = fetched_content.content pageData.toc = fetched_content.toc @@ -111,17 +114,18 @@ export function parsePageData( pageData.tags = post.tags || [] pageData.seriesHome = seriesURL - pageData.prev = prev >= 0 ? map.series[seriesURL].order[prev] : undefined + pageData.prev = + prev >= 0 ? contentMap.series[seriesURL].order[prev] : undefined pageData.next = - next < map.series[seriesURL].order.length - ? map.series[seriesURL].order[next] + next < contentMap.series[seriesURL].order.length + ? contentMap.series[seriesURL].order[next] : undefined break } case PageType.SERIES_HOME: { - const seriesData = map.series[content_id] + const seriesData = contentMap.series[content_id] pageData.title = seriesData.title pageData.content = fetched_content.content @@ -152,7 +156,7 @@ export function parsePageData( } case PageType.UNSEARCHABLE: { - pageData.title = map.unsearchable[content_id].title + pageData.title = contentMap.unsearchable[content_id].title pageData.content = fetched_content.content break diff --git a/apps/blog/src/pages/Portfolio/Portfolio.tsx b/apps/blog/src/pages/Portfolio/Portfolio.tsx index 7324f42..3e6af30 100644 --- a/apps/blog/src/pages/Portfolio/Portfolio.tsx +++ b/apps/blog/src/pages/Portfolio/Portfolio.tsx @@ -5,9 +5,9 @@ import MainContent from "../../components/MainContent" import Badge from "../../components/Badge" import ProjectCard from "./ProjectCard" -import portfolio from "../../data/portfolio.json" +import portfolio from "@developomp-site/blog-content/dist/portfolio.json" -import type { PortfolioProject } from "../../../types/types" +import type { PortfolioProject } from "@developomp-site/blog-content/src/types/types" const Portfolio = () => { const [projects, setProjects] = useState([]) diff --git a/apps/blog/src/pages/Portfolio/ProjectCard.tsx b/apps/blog/src/pages/Portfolio/ProjectCard.tsx index 25f970c..499652f 100644 --- a/apps/blog/src/pages/Portfolio/ProjectCard.tsx +++ b/apps/blog/src/pages/Portfolio/ProjectCard.tsx @@ -5,7 +5,7 @@ import { Link } from "react-router-dom" import Badge from "../../components/Badge" import { cardCSS } from "../../components/Card" -import { PortfolioProject } from "../../../types/types" +import { PortfolioProject } from "@developomp-site/blog-content/src/types/types" const StyledProjectCard = styled.div` ${cardCSS} diff --git a/apps/blog/src/pages/Search/Search.tsx b/apps/blog/src/pages/Search/Search.tsx index b8c670f..2b10085 100644 --- a/apps/blog/src/pages/Search/Search.tsx +++ b/apps/blog/src/pages/Search/Search.tsx @@ -6,8 +6,7 @@ import { Range } from "react-date-range" import elasticlunr from "elasticlunr" // search engine -import _map from "../../data/map.json" -import searchData from "../../data/search.json" +import searchData from "@developomp-site/blog-content/dist/search.json" import Loading from "../../components/Loading" import PostCard from "../../components/PostCard" @@ -17,13 +16,11 @@ import SearchBar from "./SearchBar" import TagSelect, { TagsData } from "./TagSelect" import { ClearDateButton, DateRangeControl, StyledDateRange } from "./DateRange" +import contentMap from "../../contentMap" + import "react-date-range/dist/styles.css" import "react-date-range/dist/theme/default.css" -import type { Map } from "../../../types/types" - -const map: Map = _map - const searchIndex = elasticlunr.Index.load(searchData as never) export interface SearchParams { @@ -112,7 +109,7 @@ const Search = () => { try { const _postCards: JSX.Element[] = [] for (const res of searchIndex.search(searchInput)) { - const postData = map.posts[res.ref] + const postData = contentMap.posts[res.ref] if ( postData && // if post data exists diff --git a/apps/blog/src/pages/Search/TagSelect.tsx b/apps/blog/src/pages/Search/TagSelect.tsx index 4f91da7..cda42f0 100644 --- a/apps/blog/src/pages/Search/TagSelect.tsx +++ b/apps/blog/src/pages/Search/TagSelect.tsx @@ -2,13 +2,9 @@ import { useContext } from "react" import styled from "styled-components" import Select from "react-select" -import _map from "../../data/map.json" +import contentMap from "../../contentMap" import { globalContext } from "../../globalContext" -import type { Map } from "../../../types/types" - -const map: Map = _map - const StyledReactTagsContainer = styled.div` width: 100%; margin-top: 1.5rem; @@ -19,7 +15,7 @@ export interface TagsData { label: string } -const options: TagsData[] = map.meta.tags.map((elem) => ({ +const options: TagsData[] = contentMap.meta.tags.map((elem) => ({ value: elem, label: elem, })) diff --git a/apps/blog/tsconfig.json b/apps/blog/tsconfig.json index 4c3f759..a4beccc 100644 --- a/apps/blog/tsconfig.json +++ b/apps/blog/tsconfig.json @@ -24,5 +24,5 @@ "noEmit": true, "jsx": "react-jsx" }, - "include": ["src/**/*", "types/**/*", "generate/**/*"] + "include": ["src/**/*", "types/**/*"] } diff --git a/apps/blog/markdown/portfolio/developomp-site.md b/packages/blog-content/markdown/portfolio/developomp-site.md similarity index 100% rename from apps/blog/markdown/portfolio/developomp-site.md rename to packages/blog-content/markdown/portfolio/developomp-site.md diff --git a/apps/blog/markdown/portfolio/exyleio.md b/packages/blog-content/markdown/portfolio/exyleio.md similarity index 100% rename from apps/blog/markdown/portfolio/exyleio.md rename to packages/blog-content/markdown/portfolio/exyleio.md diff --git a/apps/blog/markdown/portfolio/linux setup script.md b/packages/blog-content/markdown/portfolio/linux setup script.md similarity index 100% rename from apps/blog/markdown/portfolio/linux setup script.md rename to packages/blog-content/markdown/portfolio/linux setup script.md diff --git a/apps/blog/markdown/portfolio/llama bot.md b/packages/blog-content/markdown/portfolio/llama bot.md similarity index 100% rename from apps/blog/markdown/portfolio/llama bot.md rename to packages/blog-content/markdown/portfolio/llama bot.md diff --git a/apps/blog/markdown/portfolio/mocha downloader.md b/packages/blog-content/markdown/portfolio/mocha downloader.md similarity index 100% rename from apps/blog/markdown/portfolio/mocha downloader.md rename to packages/blog-content/markdown/portfolio/mocha downloader.md diff --git a/apps/blog/markdown/portfolio/pomky.md b/packages/blog-content/markdown/portfolio/pomky.md similarity index 100% rename from apps/blog/markdown/portfolio/pomky.md rename to packages/blog-content/markdown/portfolio/pomky.md diff --git a/apps/blog/markdown/portfolio/wbm.md b/packages/blog-content/markdown/portfolio/wbm.md similarity index 100% rename from apps/blog/markdown/portfolio/wbm.md rename to packages/blog-content/markdown/portfolio/wbm.md diff --git a/apps/blog/markdown/portfolio/wbtimeline.md b/packages/blog-content/markdown/portfolio/wbtimeline.md similarity index 100% rename from apps/blog/markdown/portfolio/wbtimeline.md rename to packages/blog-content/markdown/portfolio/wbtimeline.md diff --git a/apps/blog/markdown/posts/finding the ultimate browser.md b/packages/blog-content/markdown/posts/finding the ultimate browser.md similarity index 100% rename from apps/blog/markdown/posts/finding the ultimate browser.md rename to packages/blog-content/markdown/posts/finding the ultimate browser.md diff --git a/apps/blog/markdown/posts/test post.md b/packages/blog-content/markdown/posts/test post.md similarity index 100% rename from apps/blog/markdown/posts/test post.md rename to packages/blog-content/markdown/posts/test post.md diff --git a/apps/blog/markdown/series/my quotes/0.md b/packages/blog-content/markdown/series/my quotes/0.md similarity index 100% rename from apps/blog/markdown/series/my quotes/0.md rename to packages/blog-content/markdown/series/my quotes/0.md diff --git a/apps/blog/markdown/series/my quotes/10_10.md b/packages/blog-content/markdown/series/my quotes/10_10.md similarity index 100% rename from apps/blog/markdown/series/my quotes/10_10.md rename to packages/blog-content/markdown/series/my quotes/10_10.md diff --git a/apps/blog/markdown/series/my quotes/1_1.md b/packages/blog-content/markdown/series/my quotes/1_1.md similarity index 100% rename from apps/blog/markdown/series/my quotes/1_1.md rename to packages/blog-content/markdown/series/my quotes/1_1.md diff --git a/apps/blog/markdown/series/my quotes/2_2.md b/packages/blog-content/markdown/series/my quotes/2_2.md similarity index 100% rename from apps/blog/markdown/series/my quotes/2_2.md rename to packages/blog-content/markdown/series/my quotes/2_2.md diff --git a/apps/blog/markdown/series/my quotes/3_3.md b/packages/blog-content/markdown/series/my quotes/3_3.md similarity index 100% rename from apps/blog/markdown/series/my quotes/3_3.md rename to packages/blog-content/markdown/series/my quotes/3_3.md diff --git a/apps/blog/markdown/series/my quotes/4_4.md b/packages/blog-content/markdown/series/my quotes/4_4.md similarity index 100% rename from apps/blog/markdown/series/my quotes/4_4.md rename to packages/blog-content/markdown/series/my quotes/4_4.md diff --git a/apps/blog/markdown/series/my quotes/5_5.md b/packages/blog-content/markdown/series/my quotes/5_5.md similarity index 100% rename from apps/blog/markdown/series/my quotes/5_5.md rename to packages/blog-content/markdown/series/my quotes/5_5.md diff --git a/apps/blog/markdown/series/my quotes/6_6.md b/packages/blog-content/markdown/series/my quotes/6_6.md similarity index 100% rename from apps/blog/markdown/series/my quotes/6_6.md rename to packages/blog-content/markdown/series/my quotes/6_6.md diff --git a/apps/blog/markdown/series/my quotes/7_7.md b/packages/blog-content/markdown/series/my quotes/7_7.md similarity index 100% rename from apps/blog/markdown/series/my quotes/7_7.md rename to packages/blog-content/markdown/series/my quotes/7_7.md diff --git a/apps/blog/markdown/series/my quotes/8_8.md b/packages/blog-content/markdown/series/my quotes/8_8.md similarity index 100% rename from apps/blog/markdown/series/my quotes/8_8.md rename to packages/blog-content/markdown/series/my quotes/8_8.md diff --git a/apps/blog/markdown/series/my quotes/9_9.md b/packages/blog-content/markdown/series/my quotes/9_9.md similarity index 100% rename from apps/blog/markdown/series/my quotes/9_9.md rename to packages/blog-content/markdown/series/my quotes/9_9.md diff --git a/apps/blog/markdown/unsearchable/about.md b/packages/blog-content/markdown/unsearchable/about.md similarity index 100% rename from apps/blog/markdown/unsearchable/about.md rename to packages/blog-content/markdown/unsearchable/about.md diff --git a/apps/blog/markdown/unsearchable/goals.md b/packages/blog-content/markdown/unsearchable/goals.md similarity index 100% rename from apps/blog/markdown/unsearchable/goals.md rename to packages/blog-content/markdown/unsearchable/goals.md diff --git a/apps/blog/markdown/unsearchable/resume.md b/packages/blog-content/markdown/unsearchable/resume.md similarity index 100% rename from apps/blog/markdown/unsearchable/resume.md rename to packages/blog-content/markdown/unsearchable/resume.md diff --git a/packages/blog-content/package.json b/packages/blog-content/package.json new file mode 100644 index 0000000..80f0658 --- /dev/null +++ b/packages/blog-content/package.json @@ -0,0 +1,42 @@ +{ + "name": "@developomp-site/blog-content", + "version": "0.0.0", + "license": "MIT", + "files": [ + "dist/**" + ], + "scripts": { + "build": "ts-node -O '{\"module\":\"commonjs\"}' --files ./src", + "clean": "rm -rf .turbo && rm -rf node_modules && rm -rf dist" + }, + "dependencies": { + "@developomp-site/tsconfig": "workspace:*", + "@types/ejs": "^3.1.1", + "@types/katex": "^0.14.0", + "@types/markdown-it": "^12.2.3", + "@types/svgo": "^3.0.0", + "@types/tinycolor2": "^1.4.3", + "canvas": "^2.11.2", + "ejs": "^3.1.8", + "gray-matter": "^4.0.3", + "markdown-it": "^13.0.1", + "markdown-it-anchor": "^8.6.5", + "markdown-it-attrs": "^4.1.4", + "markdown-it-footnote": "^3.0.3", + "markdown-it-highlight-lines": "^1.0.2", + "markdown-it-mark": "^3.0.1", + "markdown-it-sub": "^1.0.0", + "markdown-it-sup": "^1.0.0", + "markdown-it-task-checkbox": "^1.0.6", + "markdown-it-texmath": "^1.0.0", + "markdown-toc": "^1.2.0", + "read-time-estimate": "^0.0.3", + "simple-icons": "^7.21.0", + "svgo": "^3.0.2", + "tinycolor2": "^1.4.2", + "typescript": "^4.9.4" + }, + "devDependencies": { + "@types/read-time-estimate": "^0.0.0" + } +} diff --git a/apps/blog/generate/config.ts b/packages/blog-content/src/config.ts similarity index 84% rename from apps/blog/generate/config.ts rename to packages/blog-content/src/config.ts index 3202d50..8c0e666 100644 --- a/apps/blog/generate/config.ts +++ b/packages/blog-content/src/config.ts @@ -1,5 +1,5 @@ export const markdownPath = "./markdown" // where it will look for markdown documents -export const outPath = "./src/data" // path to the json database +export const outPath = "./dist" // path to the json database export const contentDirectoryPath = `${outPath}/content` export const iconsDirectoryPath = `${outPath}/icons` diff --git a/apps/blog/generate/index.ts b/packages/blog-content/src/index.ts similarity index 86% rename from apps/blog/generate/index.ts rename to packages/blog-content/src/index.ts index cec006a..3d12c6a 100644 --- a/apps/blog/generate/index.ts +++ b/packages/blog-content/src/index.ts @@ -12,11 +12,10 @@ import { mapFilePath, markdownPath, portfolioFilePath } from "./config" import { recursiveParse } from "./recursiveParse" import { saveIndex } from "./searchIndex" import postProcess from "./postProcess" -import clean from "./clean" -import { Map, ParseMode, SeriesMap, PortfolioData } from "../types/types" +import { ContentMap, ParseMode, PortfolioData, SeriesMap } from "./types/types" -export const map: Map = { +export const contentMap: ContentMap = { date: {}, tags: {}, meta: { @@ -36,7 +35,10 @@ export const portfolioData: PortfolioData = { * Delete previously generated files */ -clean() +try { + fs.rmSync("dist", { recursive: true }) + // eslint-disable-next-line no-empty +} catch (err) {} /** * Checking @@ -73,7 +75,7 @@ postProcess() * Save results */ -fs.writeFileSync(mapFilePath, JSON.stringify(map)) +fs.writeFileSync(mapFilePath, JSON.stringify(contentMap)) fs.writeFileSync( portfolioFilePath, JSON.stringify({ @@ -81,4 +83,5 @@ fs.writeFileSync( skills: Array.from(portfolioData.skills), }) ) + saveIndex() diff --git a/apps/blog/generate/parseMarkdown.ts b/packages/blog-content/src/parseMarkdown.ts similarity index 98% rename from apps/blog/generate/parseMarkdown.ts rename to packages/blog-content/src/parseMarkdown.ts index 85f2f52..9f15c53 100644 --- a/apps/blog/generate/parseMarkdown.ts +++ b/packages/blog-content/src/parseMarkdown.ts @@ -18,7 +18,7 @@ import "katex/contrib/mhchem" // chemical formula import { JSDOM } from "jsdom" // HTML DOM parsing import { nthIndex } from "./util" -import { MarkdownData, ParseMode } from "../types/types" +import { MarkdownData, ParseMode } from "./types/types" const md = markdownIt({ // https://github.com/highlightjs/highlight.js/blob/main/SUPPORTED_LANGUAGES.md diff --git a/apps/blog/generate/portfolio/badge.ejs b/packages/blog-content/src/portfolio/badge.ejs similarity index 100% rename from apps/blog/generate/portfolio/badge.ejs rename to packages/blog-content/src/portfolio/badge.ejs diff --git a/apps/blog/generate/portfolio/badges.ejs b/packages/blog-content/src/portfolio/badges.ejs similarity index 100% rename from apps/blog/generate/portfolio/badges.ejs rename to packages/blog-content/src/portfolio/badges.ejs diff --git a/apps/blog/generate/portfolio/skills.ejs b/packages/blog-content/src/portfolio/skills.ejs similarity index 100% rename from apps/blog/generate/portfolio/skills.ejs rename to packages/blog-content/src/portfolio/skills.ejs diff --git a/apps/blog/generate/portfolio/skills.json b/packages/blog-content/src/portfolio/skills.json similarity index 100% rename from apps/blog/generate/portfolio/skills.json rename to packages/blog-content/src/portfolio/skills.json diff --git a/apps/blog/generate/portfolio/style.css b/packages/blog-content/src/portfolio/style.css similarity index 100% rename from apps/blog/generate/portfolio/style.css rename to packages/blog-content/src/portfolio/style.css diff --git a/apps/blog/generate/postProcess.ts b/packages/blog-content/src/postProcess.ts similarity index 80% rename from apps/blog/generate/postProcess.ts rename to packages/blog-content/src/postProcess.ts index 7eb5a1c..c3dd826 100644 --- a/apps/blog/generate/postProcess.ts +++ b/packages/blog-content/src/postProcess.ts @@ -4,10 +4,12 @@ import { readFileSync, writeFileSync } from "fs" import icons from "simple-icons/icons" import tinycolor from "tinycolor2" -import { map, seriesMap } from "." -import { Badge } from "../src/components/Badge" +import { contentMap, seriesMap } from "." + +import { Badge } from "./types/types" import skills from "./portfolio/skills.json" +import { writeToFile } from "./util" export default function postProcess() { sortDates() @@ -17,17 +19,17 @@ export default function postProcess() { } function sortDates() { - const TmpDate = map.date - map.date = {} + const TmpDate = contentMap.date + contentMap.date = {} Object.keys(TmpDate) .sort() .forEach((sortedDateKey) => { - map.date[sortedDateKey] = TmpDate[sortedDateKey] + contentMap.date[sortedDateKey] = TmpDate[sortedDateKey] }) } function fillTags() { - map.meta.tags = Object.keys(map.tags) + contentMap.meta.tags = Object.keys(contentMap.tags) } function parseSeries() { @@ -43,8 +45,10 @@ function parseSeries() { // series length and order for (const seriesURL in seriesMap) { - map.series[seriesURL].length = seriesMap[seriesURL].length - map.series[seriesURL].order = seriesMap[seriesURL].map((item) => item.url) + contentMap.series[seriesURL].length = seriesMap[seriesURL].length + contentMap.series[seriesURL].order = seriesMap[seriesURL].map( + (item) => item.url + ) } } @@ -55,7 +59,7 @@ function generatePortfolioSVGs() { // todo: wait add ejs once it's available - const style = readFileSync("./generate/portfolio/style.css", "utf-8") + const style = readFileSync("./src/portfolio/style.css", "utf-8") const data: { [key: string]: Badge[] | { [key: string]: Badge[] } @@ -104,13 +108,13 @@ function generatePortfolioSVGs() { } const renderedSVG = ejs.render( - readFileSync("./generate/portfolio/skills.ejs", "utf-8"), + readFileSync("./src/portfolio/skills.ejs", "utf-8"), { style, data }, - { views: ["./generate/portfolio"] } + { views: ["./src/portfolio"] } ) - writeFileSync( - "./public/img/skills.svg", + writeToFile( + "./dist/public/img/skills.svg", optimize(renderedSVG, { multipass: true }).data ) } diff --git a/apps/blog/generate/recursiveParse/index.ts b/packages/blog-content/src/recursiveParse/index.ts similarity index 98% rename from apps/blog/generate/recursiveParse/index.ts rename to packages/blog-content/src/recursiveParse/index.ts index 14d303f..40b8d68 100644 --- a/apps/blog/generate/recursiveParse/index.ts +++ b/packages/blog-content/src/recursiveParse/index.ts @@ -4,12 +4,13 @@ import readTimeEstimate from "read-time-estimate" // post read time estimation import { path2FileOrFolderName, path2URL } from "../util" import parseMarkdown from "../parseMarkdown" -import { ParseMode } from "../../types/types" import parsePost from "./parsePost" import parseSeries from "./parseSeries" import parseUnsearchable from "./parseUnsearchable" import parsePortfolio from "./parsePortfolio" +import { ParseMode } from "../types/types" + /** * Data that's passed from {@link parseFile} to other function */ diff --git a/apps/blog/generate/recursiveParse/parsePortfolio.ts b/packages/blog-content/src/recursiveParse/parsePortfolio.ts similarity index 100% rename from apps/blog/generate/recursiveParse/parsePortfolio.ts rename to packages/blog-content/src/recursiveParse/parsePortfolio.ts diff --git a/apps/blog/generate/recursiveParse/parsePost.ts b/packages/blog-content/src/recursiveParse/parsePost.ts similarity index 77% rename from apps/blog/generate/recursiveParse/parsePost.ts rename to packages/blog-content/src/recursiveParse/parsePost.ts index 0455164..5cd9640 100644 --- a/apps/blog/generate/recursiveParse/parsePost.ts +++ b/packages/blog-content/src/recursiveParse/parsePost.ts @@ -1,11 +1,12 @@ import { contentDirectoryPath } from "../config" import { generateToc } from "../parseMarkdown" -import { PostData } from "../../types/types" import { addDocument } from "../searchIndex" import { writeToFile } from "../util" -import { map } from ".." +import { contentMap } from ".." import { DataToPass } from "." +import { PostData } from "../types/types" + export default function parsePost(data: DataToPass): void { const { urlPath, markdownRaw, markdownData, humanizedDuration, totalWords } = data @@ -30,10 +31,10 @@ export default function parsePost(data: DataToPass): void { }) const YYYY_MM_DD = postDate.toISOString().split("T")[0] - if (map.date[YYYY_MM_DD]) { - map.date[YYYY_MM_DD].push(urlPath) + if (contentMap.date[YYYY_MM_DD]) { + contentMap.date[YYYY_MM_DD].push(urlPath) } else { - map.date[YYYY_MM_DD] = [urlPath] + contentMap.date[YYYY_MM_DD] = [urlPath] } /** @@ -43,10 +44,10 @@ export default function parsePost(data: DataToPass): void { postData.tags = markdownData.tags as string[] if (postData.tags) { postData.tags.forEach((tag) => { - if (map.tags[tag]) { - map.tags[tag].push(urlPath) + if (contentMap.tags[tag]) { + contentMap.tags[tag].push(urlPath) } else { - map.tags[tag] = [urlPath] + contentMap.tags[tag] = [urlPath] } }) } @@ -55,7 +56,7 @@ export default function parsePost(data: DataToPass): void { * */ - map.posts[urlPath] = postData + contentMap.posts[urlPath] = postData addDocument({ title: markdownData.title, body: markdownData.content, diff --git a/apps/blog/generate/recursiveParse/parseSeries.ts b/packages/blog-content/src/recursiveParse/parseSeries.ts similarity index 86% rename from apps/blog/generate/recursiveParse/parseSeries.ts rename to packages/blog-content/src/recursiveParse/parseSeries.ts index fcc2f5b..6ca8dc7 100644 --- a/apps/blog/generate/recursiveParse/parseSeries.ts +++ b/packages/blog-content/src/recursiveParse/parseSeries.ts @@ -1,10 +1,11 @@ import { contentDirectoryPath } from "../config" import { generateToc } from "../parseMarkdown" -import { PostData } from "../../types/types" import { addDocument } from "../searchIndex" import { writeToFile } from "../util" -import { map, seriesMap } from ".." +import { contentMap, seriesMap } from ".." + import { DataToPass } from "." +import { PostData } from "../types/types" export default function parseSeries(data: DataToPass): void { const { @@ -63,10 +64,10 @@ export default function parseSeries(data: DataToPass): void { }) const YYYY_MM_DD = postDate.toISOString().split("T")[0] - if (map.date[YYYY_MM_DD]) { - map.date[YYYY_MM_DD].push(urlPath) + if (contentMap.date[YYYY_MM_DD]) { + contentMap.date[YYYY_MM_DD].push(urlPath) } else { - map.date[YYYY_MM_DD] = [urlPath] + contentMap.date[YYYY_MM_DD] = [urlPath] } /** @@ -76,10 +77,10 @@ export default function parseSeries(data: DataToPass): void { postData.tags = markdownData.tags as string[] if (postData.tags) { postData.tags.forEach((tag) => { - if (map.tags[tag]) { - map.tags[tag].push(urlPath) + if (contentMap.tags[tag]) { + contentMap.tags[tag].push(urlPath) } else { - map.tags[tag] = [urlPath] + contentMap.tags[tag] = [urlPath] } }) } @@ -94,18 +95,18 @@ export default function parseSeries(data: DataToPass): void { url: urlPath, }) - map.posts[urlPath] = postData + contentMap.posts[urlPath] = postData // series markdown starting with 0 is a series descriptor if (isFileDescriptor) { - map.series[urlPath] = { + contentMap.series[urlPath] = { ...postData, order: [], length: 0, } } else { // put series post in appropriate series - for (const key of Object.keys(map.series)) { + for (const key of Object.keys(contentMap.series)) { if (urlPath.includes(key)) { const index = parseInt( _urlPath.slice( diff --git a/apps/blog/generate/recursiveParse/parseUnsearchable.ts b/packages/blog-content/src/recursiveParse/parseUnsearchable.ts similarity index 91% rename from apps/blog/generate/recursiveParse/parseUnsearchable.ts rename to packages/blog-content/src/recursiveParse/parseUnsearchable.ts index fdbf57a..067334f 100644 --- a/apps/blog/generate/recursiveParse/parseUnsearchable.ts +++ b/packages/blog-content/src/recursiveParse/parseUnsearchable.ts @@ -1,7 +1,7 @@ import { contentDirectoryPath } from "../config" import { addDocument } from "../searchIndex" import { writeToFile } from "../util" -import { map } from ".." +import { contentMap } from ".." import { DataToPass } from "." export default function parseUnsearchable(data: DataToPass): void { @@ -17,7 +17,7 @@ export default function parseUnsearchable(data: DataToPass): void { }) // Parse data that will be written to map.js - map.unsearchable[urlPath] = { + contentMap.unsearchable[urlPath] = { title: markdownData.title as string, } diff --git a/apps/blog/generate/searchIndex.ts b/packages/blog-content/src/searchIndex.ts similarity index 100% rename from apps/blog/generate/searchIndex.ts rename to packages/blog-content/src/searchIndex.ts diff --git a/apps/blog/types/markdown-it-footnote.d.ts b/packages/blog-content/src/types/markdown-it-footnote.d.ts similarity index 100% rename from apps/blog/types/markdown-it-footnote.d.ts rename to packages/blog-content/src/types/markdown-it-footnote.d.ts diff --git a/apps/blog/types/markdown-it-highlight-lines.d.ts b/packages/blog-content/src/types/markdown-it-highlight-lines.d.ts similarity index 100% rename from apps/blog/types/markdown-it-highlight-lines.d.ts rename to packages/blog-content/src/types/markdown-it-highlight-lines.d.ts diff --git a/apps/blog/types/markdown-it-mark.d.ts b/packages/blog-content/src/types/markdown-it-mark.d.ts similarity index 100% rename from apps/blog/types/markdown-it-mark.d.ts rename to packages/blog-content/src/types/markdown-it-mark.d.ts diff --git a/apps/blog/types/markdown-it-sub.d.ts b/packages/blog-content/src/types/markdown-it-sub.d.ts similarity index 100% rename from apps/blog/types/markdown-it-sub.d.ts rename to packages/blog-content/src/types/markdown-it-sub.d.ts diff --git a/apps/blog/types/markdown-it-sup.d.ts b/packages/blog-content/src/types/markdown-it-sup.d.ts similarity index 100% rename from apps/blog/types/markdown-it-sup.d.ts rename to packages/blog-content/src/types/markdown-it-sup.d.ts diff --git a/apps/blog/types/markdown-it-task-checkbox.d.ts b/packages/blog-content/src/types/markdown-it-task-checkbox.d.ts similarity index 100% rename from apps/blog/types/markdown-it-task-checkbox.d.ts rename to packages/blog-content/src/types/markdown-it-task-checkbox.d.ts diff --git a/apps/blog/types/markdown-it-texmath.d.ts b/packages/blog-content/src/types/markdown-it-texmath.d.ts similarity index 100% rename from apps/blog/types/markdown-it-texmath.d.ts rename to packages/blog-content/src/types/markdown-it-texmath.d.ts diff --git a/apps/blog/types/markdown-toc.d.ts b/packages/blog-content/src/types/markdown-toc.d.ts similarity index 100% rename from apps/blog/types/markdown-toc.d.ts rename to packages/blog-content/src/types/markdown-toc.d.ts diff --git a/apps/blog/types/types.ts b/packages/blog-content/src/types/types.ts similarity index 94% rename from apps/blog/types/types.ts rename to packages/blog-content/src/types/types.ts index 0cea409..6376df9 100644 --- a/apps/blog/types/types.ts +++ b/packages/blog-content/src/types/types.ts @@ -1,4 +1,4 @@ -export interface Map { +export interface ContentMap { // key: YYYY-MM-DD // value: url date: { [key: string]: string[] } @@ -81,6 +81,13 @@ export interface PageData { repo: string } +export interface Badge { + svg: string + hex: string + isDark: boolean + title: string +} + /** * Series */ diff --git a/apps/blog/generate/util.ts b/packages/blog-content/src/util.ts similarity index 100% rename from apps/blog/generate/util.ts rename to packages/blog-content/src/util.ts diff --git a/packages/blog-content/tsconfig.json b/packages/blog-content/tsconfig.json new file mode 100644 index 0000000..83ad461 --- /dev/null +++ b/packages/blog-content/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "@developomp-site/tsconfig/node16.json", + "include": ["src"], + "compilerOptions": { + "resolveJsonModule": true + }, + "exclude": ["dist", "node_modules"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e8af30b..631ea54 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -26,6 +26,9 @@ importers: apps/blog: dependencies: + '@developomp-site/blog-content': + specifier: workspace:* + version: link:../../packages/blog-content '@developomp-site/theme': specifier: workspace:* version: link:../../packages/theme @@ -85,7 +88,7 @@ importers: version: 6.4.5(react-dom@18.2.0)(react@18.2.0) react-scripts: specifier: ^5.0.1 - version: 5.0.1(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.5)(eslint@8.43.0)(react@18.2.0)(ts-node@10.9.1)(typescript@4.9.4) + version: 5.0.1(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.5)(eslint@8.43.0)(react@18.2.0)(typescript@4.9.4) react-select: specifier: ^5.7.0 version: 5.7.0(@babel/core@7.22.5)(@types/react@18.0.26)(react-dom@18.2.0)(react@18.2.0) @@ -105,9 +108,6 @@ importers: '@styled/typescript-styled-plugin': specifier: ^1.0.0 version: 1.0.0 - '@types/ejs': - specifier: ^3.1.1 - version: 3.1.1 '@types/elasticlunr': specifier: ^0.9.5 version: 0.9.5 @@ -120,9 +120,6 @@ importers: '@types/katex': specifier: ^0.14.0 version: 0.14.0 - '@types/markdown-it': - specifier: ^12.2.3 - version: 12.2.3 '@types/node': specifier: ^18.11.11 version: 18.11.11 @@ -144,75 +141,18 @@ importers: '@types/styled-components': specifier: ^5.1.26 version: 5.1.26 - '@types/svgo': - specifier: ^3.0.0 - version: 3.0.0 - '@types/tinycolor2': - specifier: ^1.4.3 - version: 1.4.3 - ejs: - specifier: ^3.1.8 - version: 3.1.8 - gray-matter: - specifier: ^4.0.3 - version: 4.0.3 jsdom: specifier: ^20.0.3 version: 20.0.3 jspdf: specifier: ^2.5.1 version: 2.5.1 - markdown-it: - specifier: ^13.0.1 - version: 13.0.1 - markdown-it-anchor: - specifier: ^8.6.5 - version: 8.6.5(@types/markdown-it@12.2.3)(markdown-it@13.0.1) - markdown-it-attrs: - specifier: ^4.1.4 - version: 4.1.4(markdown-it@13.0.1) - markdown-it-footnote: - specifier: ^3.0.3 - version: 3.0.3 - markdown-it-highlight-lines: - specifier: ^1.0.2 - version: 1.0.2 - markdown-it-mark: - specifier: ^3.0.1 - version: 3.0.1 - markdown-it-sub: - specifier: ^1.0.0 - version: 1.0.0 - markdown-it-sup: - specifier: ^1.0.0 - version: 1.0.0 - markdown-it-task-checkbox: - specifier: ^1.0.6 - version: 1.0.6 - markdown-it-texmath: - specifier: ^1.0.0 - version: 1.0.0 - markdown-toc: - specifier: ^1.2.0 - version: 1.2.0 prettier: specifier: ^2.8.1 version: 2.8.1 - read-time-estimate: - specifier: ^0.0.3 - version: 0.0.3 simple-icons: specifier: ^7.21.0 version: 7.21.0 - svgo: - specifier: ^3.0.2 - version: 3.0.2 - tinycolor2: - specifier: ^1.4.2 - version: 1.4.2 - ts-node: - specifier: ^10.9.1 - version: 10.9.1(@types/node@18.11.11)(typescript@4.9.4) tslint-config-prettier: specifier: ^1.18.0 version: 1.18.0 @@ -258,7 +198,7 @@ importers: version: 6.5.14(react-dom@18.2.0)(react@18.2.0) '@storybook/builder-vite': specifier: ^0.1.41 - version: 0.1.41(@babel/core@7.22.5)(@storybook/core-common@7.0.21)(@storybook/node-logger@7.0.21)(@storybook/source-loader@7.0.21)(react@18.2.0)(typescript@4.9.4)(vite@2.9.15) + version: 0.1.41(@babel/core@7.22.5)(@storybook/core-common@7.0.22)(@storybook/node-logger@7.0.22)(@storybook/source-loader@7.0.22)(react@18.2.0)(typescript@4.9.4)(vite@2.9.15) '@storybook/react': specifier: ^6.5.14 version: 6.5.14(@babel/core@7.22.5)(esbuild@0.17.19)(eslint@8.4.1)(react-dom@18.2.0)(react@18.2.0)(require-from-string@2.0.2)(typescript@4.9.4) @@ -275,6 +215,88 @@ importers: specifier: ^2.9.15 version: 2.9.15 + packages/blog-content: + dependencies: + '@developomp-site/tsconfig': + specifier: workspace:* + version: link:../tsconfig + '@types/ejs': + specifier: ^3.1.1 + version: 3.1.1 + '@types/katex': + specifier: ^0.14.0 + version: 0.14.0 + '@types/markdown-it': + specifier: ^12.2.3 + version: 12.2.3 + '@types/svgo': + specifier: ^3.0.0 + version: 3.0.0 + '@types/tinycolor2': + specifier: ^1.4.3 + version: 1.4.3 + canvas: + specifier: ^2.11.2 + version: 2.11.2 + ejs: + specifier: ^3.1.8 + version: 3.1.8 + gray-matter: + specifier: ^4.0.3 + version: 4.0.3 + markdown-it: + specifier: ^13.0.1 + version: 13.0.1 + markdown-it-anchor: + specifier: ^8.6.5 + version: 8.6.5(@types/markdown-it@12.2.3)(markdown-it@13.0.1) + markdown-it-attrs: + specifier: ^4.1.4 + version: 4.1.4(markdown-it@13.0.1) + markdown-it-footnote: + specifier: ^3.0.3 + version: 3.0.3 + markdown-it-highlight-lines: + specifier: ^1.0.2 + version: 1.0.2 + markdown-it-mark: + specifier: ^3.0.1 + version: 3.0.1 + markdown-it-sub: + specifier: ^1.0.0 + version: 1.0.0 + markdown-it-sup: + specifier: ^1.0.0 + version: 1.0.0 + markdown-it-task-checkbox: + specifier: ^1.0.6 + version: 1.0.6 + markdown-it-texmath: + specifier: ^1.0.0 + version: 1.0.0 + markdown-toc: + specifier: ^1.2.0 + version: 1.2.0 + read-time-estimate: + specifier: ^0.0.3 + version: 0.0.3 + simple-icons: + specifier: ^7.21.0 + version: 7.21.0 + svgo: + specifier: ^3.0.2 + version: 3.0.2 + tinycolor2: + specifier: ^1.4.2 + version: 1.4.2 + typescript: + specifier: ^4.9.4 + version: 4.9.4 + devDependencies: + '@types/read-time-estimate': + specifier: ^0.0.0 + version: 0.0.0 + packages/components-react: devDependencies: '@developomp-site/eslint-config': @@ -3046,6 +3068,7 @@ packages: engines: {node: '>=12'} dependencies: '@jridgewell/trace-mapping': 0.3.9 + dev: true /@csstools/normalize.css@12.0.0: resolution: {integrity: sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg==} @@ -3722,7 +3745,7 @@ packages: slash: 3.0.0 dev: false - /@jest/core@27.5.1(ts-node@10.9.1): + /@jest/core@27.5.1: resolution: {integrity: sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} peerDependencies: @@ -3743,7 +3766,7 @@ packages: exit: 0.1.2 graceful-fs: 4.2.10 jest-changed-files: 27.5.1 - jest-config: 27.5.1(ts-node@10.9.1) + jest-config: 27.5.1 jest-haste-map: 27.5.1 jest-message-util: 27.5.1 jest-regex-util: 27.5.1 @@ -4025,6 +4048,7 @@ packages: dependencies: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 + dev: false /@jridgewell/trace-mapping@0.3.18: resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} @@ -4036,12 +4060,31 @@ packages: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: '@jridgewell/resolve-uri': 3.1.0 - '@jridgewell/sourcemap-codec': 1.4.14 + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true /@leichtgewicht/ip-codec@2.0.4: resolution: {integrity: sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==} dev: false + /@mapbox/node-pre-gyp@1.0.10: + resolution: {integrity: sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA==} + hasBin: true + dependencies: + detect-libc: 2.0.1 + https-proxy-agent: 5.0.1 + make-dir: 3.1.0 + node-fetch: 2.6.11 + nopt: 5.0.0 + npmlog: 5.0.1 + rimraf: 3.0.2 + semver: 7.3.8 + tar: 6.1.13 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + /@mdx-js/mdx@1.6.22: resolution: {integrity: sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==} dependencies: @@ -4724,7 +4767,7 @@ packages: util-deprecate: 1.0.2 dev: true - /@storybook/builder-vite@0.1.41(@babel/core@7.22.5)(@storybook/core-common@7.0.21)(@storybook/node-logger@7.0.21)(@storybook/source-loader@7.0.21)(react@18.2.0)(typescript@4.9.4)(vite@2.9.15): + /@storybook/builder-vite@0.1.41(@babel/core@7.22.5)(@storybook/core-common@7.0.22)(@storybook/node-logger@7.0.22)(@storybook/source-loader@7.0.22)(react@18.2.0)(typescript@4.9.4)(vite@2.9.15): resolution: {integrity: sha512-h/7AgEUfSuVexTD6LuJ6BCNu+FSo/+IKYBQ1O3TyF2BEgcob5/BGrx9QcwM0LJCF44L1zNKaxkKpCZs9p+LRRA==} peerDependencies: '@storybook/core-common': '>=6.4.3 || >=6.5.0-alpha.0' @@ -4737,10 +4780,10 @@ packages: optional: true dependencies: '@joshwooding/vite-plugin-react-docgen-typescript': 0.0.4(typescript@4.9.4)(vite@2.9.15) - '@storybook/core-common': 7.0.21 + '@storybook/core-common': 7.0.22 '@storybook/mdx1-csf': 0.0.4(@babel/core@7.22.5)(react@18.2.0) - '@storybook/node-logger': 7.0.21 - '@storybook/source-loader': 7.0.21(react-dom@18.2.0)(react@18.2.0) + '@storybook/node-logger': 7.0.22 + '@storybook/source-loader': 7.0.22(react-dom@18.2.0)(react@18.2.0) '@vitejs/plugin-react': 1.3.2 ast-types: 0.14.2 es-module-lexer: 0.9.3 @@ -4857,8 +4900,8 @@ packages: util-deprecate: 1.0.2 dev: true - /@storybook/channels@7.0.21: - resolution: {integrity: sha512-8h4lvGQsdWrn/eLW9D9ZGB8FGTzRuC1almykVThb9SkATKZjUyUvtRT+BklsDIinptham83+0QiSdTrv52kAfA==} + /@storybook/channels@7.0.22: + resolution: {integrity: sha512-8mR30xBotnhc24GQpBp14bflvagkOnBXUhCTyiljULvkyo/bK0NE8IeSSto1FAIzPl6+s5/A0sePvLNRuj3gqw==} dev: true /@storybook/client-api@6.5.14(react-dom@18.2.0)(react@18.2.0): @@ -5061,12 +5104,13 @@ packages: - webpack-command dev: true - /@storybook/core-common@7.0.21: - resolution: {integrity: sha512-hxQXufZxbrDqASTfrJ/C4PlIvRwwmdElOrnzeWA4e4pRGK2YUInAsKxN7WKRDL42fBLfrHo3XmdshkvPej4M4A==} + /@storybook/core-common@7.0.22: + resolution: {integrity: sha512-Dq1Uv0erIt87GcJZR67ugvbpVHIarcfkcyWYJe6zjNqzCdmg9zPA80ZDZqLHveB7WGXlJuOItZcthxJq08xt9Q==} dependencies: - '@storybook/node-logger': 7.0.21 - '@storybook/types': 7.0.21 + '@storybook/node-logger': 7.0.22 + '@storybook/types': 7.0.22 '@types/node': 16.18.36 + '@types/node-fetch': 2.6.4 '@types/pretty-hrtime': 1.0.1 chalk: 4.1.2 esbuild: 0.17.19 @@ -5078,12 +5122,14 @@ packages: glob-promise: 6.0.3(glob@8.1.0) handlebars: 4.7.7 lazy-universal-dotenv: 4.0.0 + node-fetch: 2.6.11 picomatch: 2.3.1 pkg-dir: 5.0.0 pretty-hrtime: 1.0.3 resolve-from: 5.0.0 ts-dedent: 2.2.0 transitivePeerDependencies: + - encoding - supports-color dev: true @@ -5140,7 +5186,7 @@ packages: globby: 11.1.0 ip: 2.0.0 lodash: 4.17.21 - node-fetch: 2.6.7 + node-fetch: 2.6.11 open: 8.4.0 pretty-hrtime: 1.0.3 prompts: 2.4.2 @@ -5291,7 +5337,7 @@ packages: find-up: 5.0.0 fs-extra: 9.1.0 html-webpack-plugin: 4.5.2(webpack@4.46.0) - node-fetch: 2.6.7 + node-fetch: 2.6.11 pnp-webpack-plugin: 1.6.4(typescript@4.9.4) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -5387,8 +5433,8 @@ packages: pretty-hrtime: 1.0.3 dev: true - /@storybook/node-logger@7.0.21: - resolution: {integrity: sha512-km7MfQ7Hk04UsH/ZgwW5iqSxlGi/Z/lw8Mb0Zdv7ms+FllPBPf5BhgjuC7LA6y+3WUghl6ESpDoig2771TNy4w==} + /@storybook/node-logger@7.0.22: + resolution: {integrity: sha512-k+RtRhxGxssIByTQ8maiXPc8WaXQcq1zAoSskNOIfi2f47JsZ7v81HJw8JaQ+cxNmafGBcKYW3Lla49wz1t8JQ==} dependencies: '@types/npmlog': 4.1.4 chalk: 4.1.2 @@ -5581,14 +5627,14 @@ packages: regenerator-runtime: 0.13.11 dev: true - /@storybook/source-loader@7.0.21(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-QYr0aUoXANJHZHPbE5I6bup5bRauPWFsUI6sjtsBncjIsW3/KoByH9RSgKqKg/LQ1COc8pwLGPZt9VGkMah0xg==} + /@storybook/source-loader@7.0.22(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-BIA0QWRJnLTfnbsfimJE+Yash8WpvthG1D03WsVm3koIsjQ3HnDlYMdR5rpbPR9ddcLrOpWdskK1iMfrxSt89g==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: '@storybook/csf': 0.1.1 - '@storybook/types': 7.0.21 + '@storybook/types': 7.0.22 estraverse: 5.3.0 lodash: 4.17.21 prettier: 2.8.8 @@ -5662,10 +5708,10 @@ packages: regenerator-runtime: 0.13.11 dev: true - /@storybook/types@7.0.21: - resolution: {integrity: sha512-gZ8XEsg0upyiisbe2Qv+G+XN2+nZCxj6vJKvgWxuBPCjqN3Uw34cgDrIJuSa8YjE/yl/nsaV5s0xYdFXAl7JVQ==} + /@storybook/types@7.0.22: + resolution: {integrity: sha512-fzYD3fcgpQw3p0DLMQqlEvTw47qNwrPX8Wdv8pkS12RrM5ycmy6d6fVFVJOB9uWNXD1l34vWclEo6pbtEaBM9A==} dependencies: - '@storybook/channels': 7.0.21 + '@storybook/channels': 7.0.22 '@types/babel__core': 7.20.1 '@types/express': 4.17.17 file-system-cache: 2.3.0 @@ -5836,18 +5882,23 @@ packages: /@trysound/sax@0.2.0: resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} engines: {node: '>=10.13.0'} + dev: false /@tsconfig/node10@1.0.9: resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} + dev: true /@tsconfig/node12@1.0.11: resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + dev: true /@tsconfig/node14@1.0.3: resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + dev: true /@tsconfig/node16@1.0.3: resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} + dev: true /@types/babel__core@7.1.20: resolution: {integrity: sha512-PVb6Bg2QuscZ30FvOU7z4guG6c926D9YRvOxEaelzndpMsvP+YM74Q/dAFASpg2l6+XLalxSGxcq/lrgYWZtyQ==} @@ -5918,7 +5969,7 @@ packages: /@types/ejs@3.1.1: resolution: {integrity: sha512-RQul5wEfY7BjWm0sYY86cmUN/pcXWGyVxWX93DFFJvcrxax5zKlieLwA3T77xJGwNcZW0YW6CYG70p1m8xPFmA==} - dev: true + dev: false /@types/elasticlunr@0.9.5: resolution: {integrity: sha512-gzY3gZLI6HczDO3vXM+u3P0dClEQ68k2d0UsZY1lyOaOZiGiamu7Ha/YBoc8CgAu5/3R+/u0HguDgD+xakmSEA==} @@ -6078,11 +6129,10 @@ packages: /@types/katex@0.14.0: resolution: {integrity: sha512-+2FW2CcT0K3P+JMR8YG846bmDwplKUTsWgT2ENwdQ1UdVfRk3GQrh6Mi4sTopy30gI8Uau5CEqHTDZ6YvWIUPA==} - dev: true /@types/linkify-it@3.0.2: resolution: {integrity: sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==} - dev: true + dev: false /@types/lodash@4.14.191: resolution: {integrity: sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==} @@ -6093,7 +6143,7 @@ packages: dependencies: '@types/linkify-it': 3.0.2 '@types/mdurl': 1.0.2 - dev: true + dev: false /@types/mdast@3.0.10: resolution: {integrity: sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==} @@ -6103,7 +6153,7 @@ packages: /@types/mdurl@1.0.2: resolution: {integrity: sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==} - dev: true + dev: false /@types/merge-deep@3.0.0: resolution: {integrity: sha512-t5B5UfacpaP8opUvFGUwT0uQetFrD+qm1/I2ksxokJFLT0Tb4B2NI2G2LYz3ugMDKOE7adkNBZ6coK7RW6MAqA==} @@ -6127,6 +6177,13 @@ packages: form-data: 3.0.1 dev: true + /@types/node-fetch@2.6.4: + resolution: {integrity: sha512-1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg==} + dependencies: + '@types/node': 18.11.11 + form-data: 3.0.1 + dev: true + /@types/node@16.18.36: resolution: {integrity: sha512-8egDX8dE50XyXWH6C6PRCNkTP106DuUrvdrednFouDSmCi7IOvrqr0frznfZaHifHH/3aq/7a7v9N4wdXMqhBQ==} dev: true @@ -6229,6 +6286,10 @@ packages: '@types/scheduler': 0.16.2 csstype: 3.1.1 + /@types/read-time-estimate@0.0.0: + resolution: {integrity: sha512-lmVkVzFLBrnXuLBIio2cgDQBRvDL0/QAKWFtnzRk0URD+0/wUHgzIh2U61dksOj/mW3Z+DkijIfNHgmUiYP7dQ==} + dev: true + /@types/resolve@1.17.1: resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} dependencies: @@ -6299,7 +6360,7 @@ packages: deprecated: This is a stub types definition. svgo provides its own type definitions, so you do not need this installed. dependencies: svgo: 3.0.2 - dev: true + dev: false /@types/tapable@1.0.8: resolution: {integrity: sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==} @@ -6307,7 +6368,7 @@ packages: /@types/tinycolor2@1.4.3: resolution: {integrity: sha512-Kf1w9NE5HEgGxCRyIcRXR/ZYtDv0V8FVPtYHwLxl0O+maGX0erE77pQlD0gpP+/KByMZ87mOA79SjifhSB3PjQ==} - dev: true + dev: false /@types/tough-cookie@4.0.2: resolution: {integrity: sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==} @@ -6880,7 +6941,6 @@ packages: /abbrev@1.1.1: resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} - dev: true /accepts@1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} @@ -6956,6 +7016,7 @@ packages: /acorn-walk@8.2.0: resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} engines: {node: '>=0.4.0'} + dev: true /acorn@6.4.2: resolution: {integrity: sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==} @@ -6972,6 +7033,7 @@ packages: resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==} engines: {node: '>=0.4.0'} hasBin: true + dev: true /acorn@8.9.0: resolution: {integrity: sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==} @@ -7113,7 +7175,7 @@ packages: engines: {node: '>=0.10.0'} dependencies: ansi-wrap: 0.1.0 - dev: true + dev: false /ansi-regex@2.1.1: resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} @@ -7157,7 +7219,7 @@ packages: /ansi-wrap@0.1.0: resolution: {integrity: sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw==} engines: {node: '>=0.10.0'} - dev: true + dev: false /any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} @@ -7188,7 +7250,6 @@ packages: /aproba@2.0.0: resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} - dev: true /arch@2.2.0: resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} @@ -7200,7 +7261,6 @@ packages: dependencies: delegates: 1.0.0 readable-stream: 3.6.0 - dev: true /arg@2.0.0: resolution: {integrity: sha512-XxNTUzKnz1ctK3ZIcI2XUPlD96wbHP2nGqkPKpvk/HNRlPveYrXIVSTk9m3LcqOgDPg3B1nMvdV/K8wZd7PG4w==} @@ -7208,6 +7268,7 @@ packages: /arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + dev: true /arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} @@ -7381,6 +7442,7 @@ packages: /async@3.2.4: resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} + dev: false /asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} @@ -7399,7 +7461,7 @@ packages: resolution: {integrity: sha512-zQAFO1Dlsn69eXaO6+7YZc+v84aquQKbwpzCE3L0stj56ERn9hutFxPopViLjo9G+rWwjozRhgS5KJ25Xy19cQ==} dependencies: gulp-header: 1.8.12 - dev: true + dev: false /autoprefixer@10.4.13(postcss@8.4.19): resolution: {integrity: sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==} @@ -8189,6 +8251,19 @@ packages: /caniuse-lite@1.0.30001503: resolution: {integrity: sha512-Sf9NiF+wZxPfzv8Z3iS0rXM1Do+iOy2Lxvib38glFX+08TCYYYGR5fRJXk4d77C4AYwhUjgYgMsMudbh2TqCKw==} + /canvas@2.11.2: + resolution: {integrity: sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==} + engines: {node: '>=6'} + requiresBuild: true + dependencies: + '@mapbox/node-pre-gyp': 1.0.10 + nan: 2.17.0 + simple-get: 3.1.1 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + /canvg@3.0.10: resolution: {integrity: sha512-qwR2FRNO9NlzTeKIPIKpnTY6fqwuYSequ8Ru8c0YkYU7U0oW+hLUvWadLvAu1Rl72OMNiFhoLu4f8eUjQ7l/+Q==} engines: {node: '>=10.0.0'} @@ -8313,7 +8388,6 @@ packages: /chownr@2.0.0: resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} engines: {node: '>=10'} - dev: true /chrome-trace-event@1.0.3: resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} @@ -8450,7 +8524,7 @@ packages: engines: {node: '>=0.8.0'} deprecated: CoffeeScript on NPM has moved to "coffeescript" (no hyphen) hasBin: true - dev: true + dev: false /collapse-white-space@1.0.6: resolution: {integrity: sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==} @@ -8488,7 +8562,6 @@ packages: /color-support@1.1.3: resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} hasBin: true - dev: true /colord@2.9.3: resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} @@ -8523,6 +8596,7 @@ packages: /commander@7.2.0: resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} engines: {node: '>= 10'} + dev: false /commander@8.3.0: resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} @@ -8590,13 +8664,12 @@ packages: inherits: 2.0.4 readable-stream: 2.3.7 typedarray: 0.0.6 - dev: true /concat-with-sourcemaps@1.1.0: resolution: {integrity: sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==} dependencies: source-map: 0.6.1 - dev: true + dev: false /concurrently@7.6.0: resolution: {integrity: sha512-BKtRgvcJGeZ4XttiDiNcFiRlxoAeZOseqUvyYRUp/Vtd+9p1ULmeoSqGsDA+2ivdeDFpqrJvGvmI+StKfKl5hw==} @@ -8629,7 +8702,6 @@ packages: /console-control-strings@1.1.0: resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} - dev: true /constants-browserify@1.0.0: resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==} @@ -8780,6 +8852,7 @@ packages: /create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + dev: true /cross-spawn@6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} @@ -8971,7 +9044,7 @@ packages: domhandler: 5.0.3 domutils: 3.0.1 nth-check: 2.1.1 - dev: true + dev: false /css-to-react-native@3.0.0: resolution: {integrity: sha512-Ro1yETZA813eoyUp2GDBhG2j+YggidUmzO1/v9eYBKR2EHVEniE2MI/NqpTQ954BMpTPZFsGNPm46qFB9dpaPQ==} @@ -9003,7 +9076,7 @@ packages: dependencies: mdn-data: 2.0.28 source-map-js: 1.0.2 - dev: true + dev: false /css-tree@2.3.0: resolution: {integrity: sha512-1rg0LiK2MFi4R3/lVvnRokEWTZb30ljSAe5x+0HHkZ+OqZaAeiP8g8Eh91VmkyCtQn9vMgQRiaTDYgLBt+2Qyw==} @@ -9011,7 +9084,7 @@ packages: dependencies: mdn-data: 2.0.30 source-map-js: 1.0.2 - dev: true + dev: false /css-what@3.4.2: resolution: {integrity: sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==} @@ -9102,7 +9175,7 @@ packages: engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} dependencies: css-tree: 2.2.1 - dev: true + dev: false /cssom@0.3.8: resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} @@ -9216,6 +9289,13 @@ packages: engines: {node: '>=0.10'} dev: true + /decompress-response@4.2.1: + resolution: {integrity: sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==} + engines: {node: '>=8'} + dependencies: + mimic-response: 2.1.0 + dev: false + /dedent@0.7.0: resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} @@ -9293,7 +9373,6 @@ packages: /delegates@1.0.0: resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} - dev: true /depd@1.1.2: resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} @@ -9321,6 +9400,11 @@ packages: repeat-string: 1.6.1 dev: true + /detect-libc@2.0.1: + resolution: {integrity: sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==} + engines: {node: '>=8'} + dev: false + /detect-newline@3.1.0: resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} engines: {node: '>=8'} @@ -9371,7 +9455,7 @@ packages: /diacritics-map@0.1.0: resolution: {integrity: sha512-3omnDTYrGigU0i4cJjvaKwD52B8aoqyX/NEIkukFFkogBemsIbhSa1O414fpTp5nuszJG6lvQ5vBvDVNCbSsaQ==} engines: {node: '>=0.8.0'} - dev: true + dev: false /didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} @@ -9384,6 +9468,7 @@ packages: /diff@4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} + dev: true /diffie-hellman@5.0.3: resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} @@ -9471,7 +9556,7 @@ packages: domelementtype: 2.3.0 domhandler: 5.0.3 entities: 4.4.0 - dev: true + dev: false /dom-walk@0.1.2: resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==} @@ -9521,7 +9606,7 @@ packages: engines: {node: '>= 4'} dependencies: domelementtype: 2.3.0 - dev: true + dev: false /dompurify@2.4.5: resolution: {integrity: sha512-jggCCd+8Iqp4Tsz0nIvpcb22InKEBrGz5dw3EQJMs8HPJDsKbFIO3STYtAvCfDx26Muevn1MHVI0XxjgFfmiSA==} @@ -9549,7 +9634,7 @@ packages: dom-serializer: 2.0.0 domelementtype: 2.3.0 domhandler: 5.0.3 - dev: true + dev: false /dot-case@3.0.4: resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} @@ -9570,8 +9655,8 @@ packages: engines: {node: '>=10'} dev: false - /dotenv@16.3.0: - resolution: {integrity: sha512-tHB+hmf8MRCkT3VVivGiG8kq9HiGTmQ3FzOKgztfpJQH1IWuZTOvKSJmHNnQPowecAmkCJhLrxdPhOr06LLqIQ==} + /dotenv@16.3.1: + resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} engines: {node: '>=12'} dev: true @@ -9602,6 +9687,7 @@ packages: hasBin: true dependencies: jake: 10.8.5 + dev: false /elasticlunr@0.9.5: resolution: {integrity: sha512-5YM9LFQgVYfuLNEoqMqVWIBuF2UNCA+xu/jz1TyryLN/wmBcQSb+GNAwvLKvEpGESwgGN8XA1nbLAt6rKlyHYQ==} @@ -9683,7 +9769,7 @@ packages: resolution: {integrity: sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==} engines: {node: '>=10.13.0'} dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 tapable: 2.2.1 /enhanced-resolve@5.15.0: @@ -9707,12 +9793,11 @@ packages: /entities@3.0.1: resolution: {integrity: sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==} engines: {node: '>=0.12'} - dev: true + dev: false /entities@4.4.0: resolution: {integrity: sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==} engines: {node: '>=0.12'} - dev: true /errno@0.1.8: resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} @@ -10281,7 +10366,7 @@ packages: '@typescript-eslint/eslint-plugin': 5.46.0(@typescript-eslint/parser@5.46.0)(eslint@8.43.0)(typescript@4.9.4) '@typescript-eslint/experimental-utils': 5.46.0(eslint@8.43.0)(typescript@4.9.4) eslint: 8.43.0 - jest: 27.5.1(ts-node@10.9.1) + jest: 27.5.1 transitivePeerDependencies: - supports-color - typescript @@ -10754,7 +10839,7 @@ packages: engines: {node: '>=0.10.0'} dependencies: fill-range: 2.2.4 - dev: true + dev: false /expect@27.5.1: resolution: {integrity: sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==} @@ -10809,7 +10894,6 @@ packages: engines: {node: '>=0.10.0'} dependencies: is-extendable: 0.1.1 - dev: true /extend-shallow@3.0.2: resolution: {integrity: sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==} @@ -10963,6 +11047,7 @@ packages: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: minimatch: 5.1.6 + dev: false /filesize@8.0.7: resolution: {integrity: sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==} @@ -10978,7 +11063,7 @@ packages: randomatic: 3.1.1 repeat-element: 1.1.4 repeat-string: 1.6.1 - dev: true + dev: false /fill-range@4.0.0: resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==} @@ -11094,7 +11179,6 @@ packages: /for-in@1.0.2: resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==} engines: {node: '>=0.10.0'} - dev: true /for-own@0.1.5: resolution: {integrity: sha512-SKmowqGTJoPzLO1T0BBJpkfp3EMacCMOuH40hOUbrbzElVktk4DioXVM99QkLCyKoiuOmyjgcWMpVz2xjE7LZw==} @@ -11277,7 +11361,6 @@ packages: engines: {node: '>= 8'} dependencies: minipass: 3.3.6 - dev: true /fs-monkey@1.0.3: resolution: {integrity: sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==} @@ -11345,7 +11428,6 @@ packages: string-width: 4.2.3 strip-ansi: 6.0.1 wide-align: 1.1.5 - dev: true /gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} @@ -11602,7 +11684,7 @@ packages: extend-shallow: 2.0.1 js-yaml: 3.14.1 toml: 2.3.6 - dev: true + dev: false /gray-matter@4.0.3: resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} @@ -11612,7 +11694,7 @@ packages: kind-of: 6.0.3 section-matter: 1.0.0 strip-bom-string: 1.0.0 - dev: true + dev: false /gulp-header@1.8.12: resolution: {integrity: sha512-lh9HLdb53sC7XIZOYzTXM4lFuXElv3EVkSDhsd7DoJBj7hm+Ni7D3qYbb+Rr8DuM8nRanBvkVO9d7askreXGnQ==} @@ -11621,7 +11703,7 @@ packages: concat-with-sourcemaps: 1.1.0 lodash.template: 4.5.0 through2: 2.0.5 - dev: true + dev: false /gzip-size@6.0.0: resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} @@ -11686,7 +11768,6 @@ packages: /has-unicode@2.0.1: resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} - dev: true /has-value@0.3.1: resolution: {integrity: sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==} @@ -12285,7 +12366,6 @@ packages: /is-buffer@1.1.6: resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} - dev: true /is-buffer@2.0.5: resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} @@ -12365,14 +12445,12 @@ packages: /is-extendable@0.1.1: resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} engines: {node: '>=0.10.0'} - dev: true /is-extendable@1.0.1: resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==} engines: {node: '>=0.10.0'} dependencies: is-plain-object: 2.0.4 - dev: true /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} @@ -12437,7 +12515,7 @@ packages: engines: {node: '>=0.10.0'} dependencies: kind-of: 3.2.2 - dev: true + dev: false /is-number@3.0.0: resolution: {integrity: sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==} @@ -12449,7 +12527,7 @@ packages: /is-number@4.0.0: resolution: {integrity: sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==} engines: {node: '>=0.10.0'} - dev: true + dev: false /is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} @@ -12483,7 +12561,6 @@ packages: engines: {node: '>=0.10.0'} dependencies: isobject: 3.0.1 - dev: true /is-plain-object@5.0.0: resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} @@ -12596,12 +12673,10 @@ packages: engines: {node: '>=0.10.0'} dependencies: isarray: 1.0.0 - dev: true /isobject@3.0.1: resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} engines: {node: '>=0.10.0'} - dev: true /isobject@4.0.0: resolution: {integrity: sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==} @@ -12611,7 +12686,7 @@ packages: /isomorphic-unfetch@3.1.0: resolution: {integrity: sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==} dependencies: - node-fetch: 2.6.7 + node-fetch: 2.6.11 unfetch: 4.2.0 transitivePeerDependencies: - encoding @@ -12679,6 +12754,7 @@ packages: chalk: 4.1.2 filelist: 1.0.4 minimatch: 3.1.2 + dev: false /jest-changed-files@27.5.1: resolution: {integrity: sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==} @@ -12716,7 +12792,7 @@ packages: - supports-color dev: false - /jest-cli@27.5.1(ts-node@10.9.1): + /jest-cli@27.5.1: resolution: {integrity: sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} hasBin: true @@ -12726,14 +12802,14 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 27.5.1(ts-node@10.9.1) + '@jest/core': 27.5.1 '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.10 import-local: 3.1.0 - jest-config: 27.5.1(ts-node@10.9.1) + jest-config: 27.5.1 jest-util: 27.5.1 jest-validate: 27.5.1 prompts: 2.4.2 @@ -12746,7 +12822,7 @@ packages: - utf-8-validate dev: false - /jest-config@27.5.1(ts-node@10.9.1): + /jest-config@27.5.1: resolution: {integrity: sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} peerDependencies: @@ -12779,7 +12855,6 @@ packages: pretty-format: 27.5.1 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.1(@types/node@18.11.11)(typescript@4.9.4) transitivePeerDependencies: - bufferutil - canvas @@ -13192,7 +13267,7 @@ packages: dependencies: ansi-escapes: 4.3.2 chalk: 4.1.2 - jest: 27.5.1(ts-node@10.9.1) + jest: 27.5.1 jest-regex-util: 28.0.2 jest-watcher: 28.1.3 slash: 4.0.0 @@ -13252,7 +13327,7 @@ packages: supports-color: 8.1.1 dev: false - /jest@27.5.1(ts-node@10.9.1): + /jest@27.5.1: resolution: {integrity: sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} hasBin: true @@ -13262,9 +13337,9 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 27.5.1(ts-node@10.9.1) + '@jest/core': 27.5.1 import-local: 3.1.0 - jest-cli: 27.5.1(ts-node@10.9.1) + jest-cli: 27.5.1 transitivePeerDependencies: - bufferutil - canvas @@ -13502,7 +13577,6 @@ packages: engines: {node: '>=0.10.0'} dependencies: is-buffer: 1.1.6 - dev: true /kind-of@4.0.0: resolution: {integrity: sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==} @@ -13551,7 +13625,7 @@ packages: engines: {node: '>=0.10.0'} dependencies: set-getter: 0.1.1 - dev: true + dev: false /lazy-universal-dotenv@3.0.1: resolution: {integrity: sha512-prXSYk799h3GY3iOWnC6ZigYzMPjxN2svgjJ9shk7oMadSNX3wXy0B6F32PMJv7qtMnrIbUxoEHzbutvxR2LBQ==} @@ -13569,7 +13643,7 @@ packages: engines: {node: '>=14.0.0'} dependencies: app-root-dir: 1.0.2 - dotenv: 16.3.0 + dotenv: 16.3.1 dotenv-expand: 10.0.0 dev: true @@ -13608,7 +13682,7 @@ packages: resolution: {integrity: sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==} dependencies: uc.micro: 1.0.6 - dev: true + dev: false /list-item@1.1.1: resolution: {integrity: sha512-S3D0WZ4J6hyM8o5SNKWaMYB1ALSacPZ2nHGEuCjmHZ+dc03gFeNZoNDcqfcnO4vDhTZmNrqrpYZCdXsRh22bzw==} @@ -13618,7 +13692,7 @@ packages: extend-shallow: 2.0.1 is-number: 2.1.0 repeat-string: 1.6.1 - dev: true + dev: false /load-json-file@1.1.0: resolution: {integrity: sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==} @@ -13695,7 +13769,7 @@ packages: /lodash._reinterpolate@3.0.0: resolution: {integrity: sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==} - dev: true + dev: false /lodash.debounce@4.0.8: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} @@ -13715,13 +13789,13 @@ packages: dependencies: lodash._reinterpolate: 3.0.0 lodash.templatesettings: 4.2.0 - dev: true + dev: false /lodash.templatesettings@4.2.0: resolution: {integrity: sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==} dependencies: lodash._reinterpolate: 3.0.0 - dev: true + dev: false /lodash.uniq@4.5.0: resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} @@ -13789,6 +13863,7 @@ packages: /make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + dev: true /makeerror@1.0.12: resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} @@ -13829,7 +13904,7 @@ packages: dependencies: '@types/markdown-it': 12.2.3 markdown-it: 13.0.1 - dev: true + dev: false /markdown-it-attrs@4.1.4(markdown-it@13.0.1): resolution: {integrity: sha512-53Zfv8PTb6rlVFDlD106xcZHKBSsRZKJ2IW/rTxEJBEVbVaoxaNsmRkG0HXfbHl2SK8kaxZ2QKqdthWy/QBwmA==} @@ -13838,35 +13913,35 @@ packages: markdown-it: '>= 9.0.0' dependencies: markdown-it: 13.0.1 - dev: true + dev: false /markdown-it-footnote@3.0.3: resolution: {integrity: sha512-YZMSuCGVZAjzKMn+xqIco9d1cLGxbELHZ9do/TSYVzraooV8ypsppKNmUJ0fVH5ljkCInQAtFpm8Rb3eXSrt5w==} - dev: true + dev: false /markdown-it-highlight-lines@1.0.2: resolution: {integrity: sha512-9Pyt/B+Ca3QBSXDS/znmojy/k6HDe8FJlJwIj/BKgvxE3MQWK9GHQCJJT5Lb1er23svZT99kJ/YRhLpDK+5GUQ==} - dev: true + dev: false /markdown-it-mark@3.0.1: resolution: {integrity: sha512-HyxjAu6BRsdt6Xcv6TKVQnkz/E70TdGXEFHRYBGLncRE9lBFwDNLVtFojKxjJWgJ+5XxUwLaHXy+2sGBbDn+4A==} - dev: true + dev: false /markdown-it-sub@1.0.0: resolution: {integrity: sha512-z2Rm/LzEE1wzwTSDrI+FlPEveAAbgdAdPhdWarq/ZGJrGW/uCQbKAnhoCsE4hAbc3SEym26+W2z/VQB0cQiA9Q==} - dev: true + dev: false /markdown-it-sup@1.0.0: resolution: {integrity: sha512-E32m0nV9iyhRR7CrhnzL5msqic7rL1juWre6TQNxsnApg7Uf+F97JOKxUijg5YwXz86lZ0mqfOnutoryyNdntQ==} - dev: true + dev: false /markdown-it-task-checkbox@1.0.6: resolution: {integrity: sha512-7pxkHuvqTOu3iwVGmDPeYjQg+AIS9VQxzyLP9JCg9lBjgPAJXGEkChK6A2iFuj3tS0GV3HG2u5AMNhcQqwxpJw==} - dev: true + dev: false /markdown-it-texmath@1.0.0: resolution: {integrity: sha512-4hhkiX8/gus+6e53PLCUmUrsa6ZWGgJW2XCW6O0ASvZUiezIK900ZicinTDtG3kAO2kon7oUA/ReWmpW2FByxg==} - dev: true + dev: false /markdown-it@13.0.1: resolution: {integrity: sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q==} @@ -13877,12 +13952,12 @@ packages: linkify-it: 4.0.1 mdurl: 1.0.1 uc.micro: 1.0.6 - dev: true + dev: false /markdown-link@0.1.1: resolution: {integrity: sha512-TurLymbyLyo+kAUUAV9ggR9EPcDjP/ctlv9QAFiqUH7c+t6FlsbivPo9OKTU8xdOx9oNd2drW/Fi5RRElQbUqA==} engines: {node: '>=0.10.0'} - dev: true + dev: false /markdown-toc@1.2.0: resolution: {integrity: sha512-eOsq7EGd3asV0oBfmyqngeEIhrbkc7XVP63OwcJBIhH2EpG2PzFcbZdhy1jutXSlRBBVMNXHvMtSr5LAxSUvUg==} @@ -13901,11 +13976,11 @@ packages: remarkable: 1.7.4 repeat-string: 1.6.1 strip-color: 0.1.0 - dev: true + dev: false /math-random@1.0.4: resolution: {integrity: sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==} - dev: true + dev: false /md5.js@1.3.5: resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} @@ -13950,11 +14025,11 @@ packages: /mdn-data@2.0.28: resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} - dev: true + dev: false /mdn-data@2.0.30: resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} - dev: true + dev: false /mdn-data@2.0.4: resolution: {integrity: sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==} @@ -13962,7 +14037,6 @@ packages: /mdurl@1.0.1: resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==} - dev: true /media-typer@0.3.0: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} @@ -14115,6 +14189,11 @@ packages: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} + /mimic-response@2.1.0: + resolution: {integrity: sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==} + engines: {node: '>=8'} + dev: false + /min-document@2.19.0: resolution: {integrity: sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==} dependencies: @@ -14189,14 +14268,12 @@ packages: engines: {node: '>=8'} dependencies: yallist: 4.0.0 - dev: true /minipass@4.0.0: resolution: {integrity: sha512-g2Uuh2jEKoht+zvO6vJqXmYpflPqzRBT+Th2h01DKh5z7wbY/AZ2gCQ78cP70YoHPyFdY30YBV5WxgLOEwOykw==} engines: {node: '>=8'} dependencies: yallist: 4.0.0 - dev: true /minizlib@2.1.2: resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} @@ -14204,7 +14281,6 @@ packages: dependencies: minipass: 3.3.6 yallist: 4.0.0 - dev: true /mississippi@3.0.0: resolution: {integrity: sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==} @@ -14228,7 +14304,6 @@ packages: dependencies: for-in: 1.0.2 is-extendable: 1.0.1 - dev: true /mixin-object@2.0.1: resolution: {integrity: sha512-ALGF1Jt9ouehcaXaHhn6t1yGWRqGaHkPFndtFVHfZXOvkIZ/yoGaSi0AHVTafb3ZBGg4dr/bDwnaEKqCXzchMA==} @@ -14248,7 +14323,6 @@ packages: resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} engines: {node: '>=10'} hasBin: true - dev: true /move-concurrently@1.0.1: resolution: {integrity: sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==} @@ -14292,8 +14366,6 @@ packages: /nan@2.17.0: resolution: {integrity: sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==} requiresBuild: true - dev: true - optional: true /nanoid@3.3.4: resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} @@ -14358,8 +14430,8 @@ packages: minimatch: 3.1.2 dev: true - /node-fetch@2.6.7: - resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} + /node-fetch@2.6.11: + resolution: {integrity: sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==} engines: {node: 4.x || >=6.0.0} peerDependencies: encoding: ^0.1.0 @@ -14368,7 +14440,6 @@ packages: optional: true dependencies: whatwg-url: 5.0.0 - dev: true /node-forge@1.3.1: resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} @@ -14436,6 +14507,14 @@ packages: abbrev: 1.1.1 dev: true + /nopt@5.0.0: + resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} + engines: {node: '>=6'} + hasBin: true + dependencies: + abbrev: 1.1.1 + dev: false + /normalize-package-data@2.5.0: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} dependencies: @@ -14485,7 +14564,6 @@ packages: console-control-strings: 1.1.0 gauge: 3.0.2 set-blocking: 2.0.0 - dev: true /nth-check@1.0.2: resolution: {integrity: sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==} @@ -14581,7 +14659,6 @@ packages: engines: {node: '>=0.10.0'} dependencies: isobject: 3.0.1 - dev: true /object.values@1.1.6: resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==} @@ -15358,7 +15435,7 @@ packages: yaml: 1.10.2 dev: true - /postcss-load-config@4.0.1(postcss@8.4.24)(ts-node@10.9.1): + /postcss-load-config@4.0.1(postcss@8.4.24): resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} engines: {node: '>= 14'} peerDependencies: @@ -15372,7 +15449,6 @@ packages: dependencies: lilconfig: 2.1.0 postcss: 8.4.24 - ts-node: 10.9.1(@types/node@18.11.11)(typescript@4.9.4) yaml: 2.3.1 dev: false @@ -16171,7 +16247,7 @@ packages: is-number: 4.0.0 kind-of: 6.0.3 math-random: 1.0.4 - dev: true + dev: false /randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} @@ -16495,7 +16571,7 @@ packages: react: 18.2.0 dev: false - /react-scripts@5.0.1(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.5)(eslint@8.43.0)(react@18.2.0)(ts-node@10.9.1)(typescript@4.9.4): + /react-scripts@5.0.1(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.5)(eslint@8.43.0)(react@18.2.0)(typescript@4.9.4): resolution: {integrity: sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==} engines: {node: '>=14.0.0'} hasBin: true @@ -16529,7 +16605,7 @@ packages: fs-extra: 10.1.0 html-webpack-plugin: 5.5.0(webpack@5.75.0) identity-obj-proxy: 3.0.0 - jest: 27.5.1(ts-node@10.9.1) + jest: 27.5.1 jest-resolve: 27.5.1 jest-watch-typeahead: 1.1.0(jest@27.5.1) mini-css-extract-plugin: 2.7.2(webpack@5.75.0) @@ -16549,7 +16625,7 @@ packages: semver: 7.3.8 source-map-loader: 3.0.2(webpack@5.75.0) style-loader: 3.3.1(webpack@5.75.0) - tailwindcss: 3.3.2(ts-node@10.9.1) + tailwindcss: 3.3.2 terser-webpack-plugin: 5.3.6(webpack@5.75.0) typescript: 4.9.4 webpack: 5.75.0 @@ -16690,7 +16766,7 @@ packages: /read-time-estimate@0.0.3: resolution: {integrity: sha512-TF87eHTuEyRtu/mwnQE8FoZYHpsN1Oj+U/oROL5nrsoEWsh/iGhBzkV50N6DdPEqZ9Jh2PSZk1ZA7KMucgb+ng==} - dev: true + dev: false /readable-stream@2.3.7: resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==} @@ -16901,7 +16977,7 @@ packages: dependencies: argparse: 1.0.10 autolinker: 0.28.1 - dev: true + dev: false /remove-trailing-separator@1.1.0: resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} @@ -16930,12 +17006,10 @@ packages: /repeat-element@1.1.4: resolution: {integrity: sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==} engines: {node: '>=0.10.0'} - dev: true /repeat-string@1.6.1: resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} engines: {node: '>=0.10'} - dev: true /repeating@2.0.1: resolution: {integrity: sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==} @@ -17268,7 +17342,7 @@ packages: dependencies: extend-shallow: 2.0.1 kind-of: 6.0.3 - dev: true + dev: false /select-hose@2.0.0: resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} @@ -17413,14 +17487,13 @@ packages: /set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - dev: true /set-getter@0.1.1: resolution: {integrity: sha512-9sVWOy+gthr+0G9DzqqLaYNA7+5OKkSmcqjL9cBpDEaZrr3ShQlyX2cZ/O/ozE41oxn/Tt0LGEM/w4Rub3A3gw==} engines: {node: '>=0.10.0'} dependencies: to-object-path: 0.3.0 - dev: true + dev: false /set-value@2.0.1: resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==} @@ -17511,10 +17584,21 @@ packages: /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + /simple-concat@1.0.1: + resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} + dev: false + + /simple-get@3.1.1: + resolution: {integrity: sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==} + dependencies: + decompress-response: 4.2.1 + once: 1.4.0 + simple-concat: 1.0.1 + dev: false + /simple-icons@7.21.0: resolution: {integrity: sha512-Omy/5NjPJrwNl1Q0KzMOVuARfKP4Y+DET2gJ9VyJtWyw75HLWviYszbSZsw1x3BOwBUroRwWkCGi81HPu1M29g==} engines: {node: '>=0.12.18'} - dev: true /simple-update-notifier@1.1.0: resolution: {integrity: sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==} @@ -17909,7 +17993,7 @@ packages: /strip-bom-string@1.0.0: resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==} engines: {node: '>=0.10.0'} - dev: true + dev: false /strip-bom@2.0.0: resolution: {integrity: sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==} @@ -17931,7 +18015,7 @@ packages: /strip-color@0.1.0: resolution: {integrity: sha512-p9LsUieSjWNNAxVCXLeilaDlmuUOrDS5/dF9znM1nZc7EGX5+zEFC0bEevsNIaldjlks+2jns5Siz6F9iK6jwA==} engines: {node: '>=0.10.0'} - dev: true + dev: false /strip-comments@2.0.1: resolution: {integrity: sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==} @@ -18146,7 +18230,7 @@ packages: css-tree: 2.3.0 csso: 5.0.5 picocolors: 1.0.0 - dev: true + dev: false /symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} @@ -18199,7 +18283,7 @@ packages: - ts-node dev: true - /tailwindcss@3.3.2(ts-node@10.9.1): + /tailwindcss@3.3.2: resolution: {integrity: sha512-9jPkMiIBXvPc2KywkraqsUfbfj+dHDb+JPWtSJa9MLFdrPyazI7q6WX2sUrm7R9eVR7qqv3Pas7EvQFzxKnI6w==} engines: {node: '>=14.0.0'} hasBin: true @@ -18221,7 +18305,7 @@ packages: postcss: 8.4.24 postcss-import: 15.1.0(postcss@8.4.24) postcss-js: 4.0.1(postcss@8.4.24) - postcss-load-config: 4.0.1(postcss@8.4.24)(ts-node@10.9.1) + postcss-load-config: 4.0.1(postcss@8.4.24) postcss-nested: 6.0.1(postcss@8.4.24) postcss-selector-parser: 6.0.11 postcss-value-parser: 4.2.0 @@ -18249,7 +18333,6 @@ packages: minizlib: 2.1.2 mkdirp: 1.0.4 yallist: 4.0.0 - dev: true /telejson@6.0.8: resolution: {integrity: sha512-nerNXi+j8NK1QEfBHtZUN/aLdDcyupA//9kAboYLrtzZlPLpUfqbVGWb9zz91f/mIjRbAYhbgtnJHY8I1b5MBg==} @@ -18341,7 +18424,7 @@ packages: uglify-js: optional: true dependencies: - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/trace-mapping': 0.3.18 esbuild: 0.17.19 jest-worker: 27.5.1 schema-utils: 3.1.1 @@ -18469,7 +18552,6 @@ packages: dependencies: readable-stream: 2.3.7 xtend: 4.0.2 - dev: true /thunky@1.1.0: resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} @@ -18484,7 +18566,7 @@ packages: /tinycolor2@1.4.2: resolution: {integrity: sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==} - dev: true + dev: false /tmpl@1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} @@ -18502,7 +18584,6 @@ packages: engines: {node: '>=0.10.0'} dependencies: kind-of: 3.2.2 - dev: true /to-regex-range@2.1.1: resolution: {integrity: sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==} @@ -18534,7 +18615,7 @@ packages: /toml@2.3.6: resolution: {integrity: sha512-gVweAectJU3ebq//Ferr2JUY4WKSDe5N+z0FvjDncLGyHmIDoxgY/2Ie4qfEIDm4IS7OA6Rmdm7pdEEdMcV/xQ==} - dev: true + dev: false /touch@3.1.0: resolution: {integrity: sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==} @@ -18554,7 +18635,6 @@ packages: /tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - dev: true /tr46@1.0.1: resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} @@ -18639,6 +18719,7 @@ packages: typescript: 4.9.4 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 + dev: true /ts-pnp@1.2.0(typescript@4.9.4): resolution: {integrity: sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==} @@ -18842,7 +18923,6 @@ packages: /typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} - dev: true /typescript-template-language-service-decorator@2.3.2: resolution: {integrity: sha512-hN0zNkr5luPCeXTlXKxsfBPlkAzx86ZRM1vPdL7DbEqqWoeXSxplACy98NpKpLmXsdq7iePUzAXloCAoPKBV6A==} @@ -18859,7 +18939,7 @@ packages: /uc.micro@1.0.6: resolution: {integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==} - dev: true + dev: false /uglify-js@3.17.4: resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} @@ -19193,6 +19273,7 @@ packages: /v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + dev: true /v8-compile-cache@2.3.0: resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==} @@ -19379,7 +19460,7 @@ packages: engines: {node: '>=10.13.0'} dependencies: glob-to-regexp: 0.4.1 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 /wbuf@1.7.3: resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==} @@ -19393,7 +19474,6 @@ packages: /webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - dev: true /webidl-conversions@4.0.2: resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} @@ -19764,7 +19844,6 @@ packages: dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 - dev: true /whatwg-url@7.1.0: resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} @@ -19808,7 +19887,6 @@ packages: resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} dependencies: string-width: 4.2.3 - dev: true /widest-line@3.1.0: resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} @@ -20066,7 +20144,6 @@ packages: /xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} - dev: true /y18n@4.0.3: resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} @@ -20128,6 +20205,7 @@ packages: /yn@3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} engines: {node: '>=6'} + dev: true /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}