From 24fd71e3ef3d15250fe971721b2addcb2c887914 Mon Sep 17 00:00:00 2001 From: Kipruto <43873157+kelvinkipruto@users.noreply.github.com> Date: Mon, 2 Sep 2024 12:07:25 +0300 Subject: [PATCH 01/20] Render blog Signed-off-by: Kipruto <43873157+kelvinkipruto@users.noreply.github.com> --- apps/engineeringblog/app/page.tsx | 37 +++++++++++- apps/engineeringblog/content/post-01.mdx | 11 ++++ apps/engineeringblog/content/post-02.mdx | 11 ++++ apps/engineeringblog/content/post-03.mdx | 11 ++++ apps/engineeringblog/package.json | 1 + pnpm-lock.yaml | 76 +++++++----------------- 6 files changed, 91 insertions(+), 56 deletions(-) create mode 100644 apps/engineeringblog/content/post-01.mdx create mode 100644 apps/engineeringblog/content/post-02.mdx create mode 100644 apps/engineeringblog/content/post-03.mdx diff --git a/apps/engineeringblog/app/page.tsx b/apps/engineeringblog/app/page.tsx index 424794867..69529c34a 100644 --- a/apps/engineeringblog/app/page.tsx +++ b/apps/engineeringblog/app/page.tsx @@ -1,9 +1,42 @@ import { Box, Container } from "@mui/material"; +import fs from "fs"; +import path from "path"; +import matter from "gray-matter"; -export default function index() { +export function getAllPosts() { + const postsDirectory = path.join(process.cwd(), "content"); + const fileNames = fs + .readdirSync(postsDirectory) + .filter((fileName) => fileName.endsWith(".mdx")); + + return fileNames.map((fileName) => { + const filePath = path.join(postsDirectory, fileName); + const fileContents = fs.readFileSync(filePath, "utf8"); + const { data } = matter(fileContents); + + return { + slug: fileName.replace(/\.mdx$/, ""), + title: data.title, + description: data.description, + date: data.date, + featuredImage: data?.featuredImage, + }; + }); +} + +export default async function index() { + const posts = await getAllPosts(); return ( - Homepage + + {posts.map((post) => ( + +

{post.title}

+

{post.description}

+

{post.date}

+
+ ))} +
); } diff --git a/apps/engineeringblog/content/post-01.mdx b/apps/engineeringblog/content/post-01.mdx new file mode 100644 index 000000000..821390f04 --- /dev/null +++ b/apps/engineeringblog/content/post-01.mdx @@ -0,0 +1,11 @@ +--- +title: "Post 01" +date: "2020-01-01" +description: "This is the first post" +--- + +Enim non qui velit nulla elit irure minim incididunt tempor. Lorem eu incididunt fugiat cupidatat aute. Veniam esse laboris irure nostrud. Proident et mollit ea ex. Elit commodo veniam irure laboris dolore cupidatat deserunt esse esse reprehenderit ipsum magna. + +## Section 1 + +Veniam ea tempor mollit officia magna deserunt nulla fugiat. In ipsum non magna officia deserunt do nulla irure dolor labore culpa voluptate ipsum officia. Ut nulla nisi ullamco ipsum laboris. Eiusmod occaecat ipsum ullamco voluptate dolor qui non nostrud voluptate aliquip eu. diff --git a/apps/engineeringblog/content/post-02.mdx b/apps/engineeringblog/content/post-02.mdx new file mode 100644 index 000000000..b45f29f9a --- /dev/null +++ b/apps/engineeringblog/content/post-02.mdx @@ -0,0 +1,11 @@ +--- +title: "Post 02" +date: "2020-02-02" +description: "This is the second post" +--- + +Enim non qui velit nulla elit irure minim incididunt tempor. Lorem eu incididunt fugiat cupidatat aute. Veniam esse laboris irure nostrud. Proident et mollit ea ex. Elit commodo veniam irure laboris dolore cupidatat deserunt esse esse reprehenderit ipsum magna. + +## Section 1 + +Veniam ea tempor mollit officia magna deserunt nulla fugiat. In ipsum non magna officia deserunt do nulla irure dolor labore culpa voluptate ipsum officia. Ut nulla nisi ullamco ipsum laboris. Eiusmod occaecat ipsum ullamco voluptate dolor qui non nostrud voluptate aliquip eu. diff --git a/apps/engineeringblog/content/post-03.mdx b/apps/engineeringblog/content/post-03.mdx new file mode 100644 index 000000000..68d4128a6 --- /dev/null +++ b/apps/engineeringblog/content/post-03.mdx @@ -0,0 +1,11 @@ +--- +title: "Post 03" +date: "2020-03-03" +description: "This is the third post" +--- + +Enim non qui velit nulla elit irure minim incididunt tempor. Lorem eu incididunt fugiat cupidatat aute. Veniam esse laboris irure nostrud. Proident et mollit ea ex. Elit commodo veniam irure laboris dolore cupidatat deserunt esse esse reprehenderit ipsum magna. + +## Section 1 + +Veniam ea tempor mollit officia magna deserunt nulla fugiat. In ipsum non magna officia deserunt do nulla irure dolor labore culpa voluptate ipsum officia. Ut nulla nisi ullamco ipsum laboris. Eiusmod occaecat ipsum ullamco voluptate dolor qui non nostrud voluptate aliquip eu. diff --git a/apps/engineeringblog/package.json b/apps/engineeringblog/package.json index 00218ad5a..8e51ee164 100644 --- a/apps/engineeringblog/package.json +++ b/apps/engineeringblog/package.json @@ -22,6 +22,7 @@ "@mui/material-nextjs": "^5.16.1", "@mui/utils": "^5.16.6", "@next/mdx": "^14.2.5", + "gray-matter": "^4.0.3", "next": "^14.2.5", "react": "^18", "react-dom": "^18" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9303013f3..9b677e157 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -97,7 +97,7 @@ importers: version: 1.0.7(@swc/core@1.7.6(@swc/helpers@0.5.5))(ajv@8.17.1)(payload@2.25.0(@swc/helpers@0.5.5)(@types/react@18.3.3)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))(webpack-cli@4.10.0)))(sass@1.69.4) '@payloadcms/db-mongodb': specifier: ^1.7.1 - version: 1.7.1(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))(payload@2.25.0(@swc/helpers@0.5.5)(@types/react@18.3.3)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))(webpack-cli@4.10.0))) + version: 1.7.1(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0))(payload@2.25.0(@swc/helpers@0.5.5)(@types/react@18.3.3)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))(webpack-cli@4.10.0))) '@payloadcms/plugin-cloud-storage': specifier: ^1.1.3 version: 1.1.3(@aws-sdk/client-s3@3.623.0)(@aws-sdk/lib-storage@3.623.0(@aws-sdk/client-s3@3.623.0))(payload@2.25.0(@swc/helpers@0.5.5)(@types/react@18.3.3)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))(webpack-cli@4.10.0))) @@ -133,7 +133,7 @@ importers: version: 1.9.4 migrate-mongo: specifier: ^11.0.0 - version: 11.0.0(mongodb@4.17.1(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))) + version: 11.0.0(mongodb@4.17.1(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0))) monaco-editor: specifier: ^0.50.0 version: 0.50.0 @@ -236,7 +236,7 @@ importers: version: 0.13.8(eslint-plugin-import@2.29.1)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))(webpack-cli@4.10.0)) eslint-plugin-import: specifier: ^2.29.1 - version: 2.29.1(eslint-import-resolver-webpack@0.13.8)(eslint@8.57.0) + version: 2.29.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.93.0))(eslint@8.57.0) identity-obj-proxy: specifier: ^3.0.0 version: 3.0.0 @@ -435,7 +435,7 @@ importers: version: 0.13.8(eslint-plugin-import@2.29.1)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))) eslint-plugin-import: specifier: ^2.29.1 - version: 2.29.1(eslint-import-resolver-webpack@0.13.8)(eslint@8.57.0) + version: 2.29.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.93.0))(eslint@8.57.0) identity-obj-proxy: specifier: ^3.0.0 version: 3.0.0 @@ -872,7 +872,7 @@ importers: version: 0.13.8(eslint-plugin-import@2.29.1)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))) eslint-plugin-import: specifier: ^2.29.1 - version: 2.29.1(eslint-import-resolver-webpack@0.13.8)(eslint@8.57.0) + version: 2.29.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.93.0))(eslint@8.57.0) identity-obj-proxy: specifier: ^3.0.0 version: 3.0.0 @@ -936,6 +936,9 @@ importers: '@next/mdx': specifier: ^14.2.5 version: 14.2.6(@mdx-js/loader@3.0.1(webpack@5.93.0))(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1)) + gray-matter: + specifier: ^4.0.3 + version: 4.0.3 next: specifier: ^14.2.5 version: 14.2.5(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.45.3)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.69.4) @@ -975,7 +978,7 @@ importers: version: 0.13.8(eslint-plugin-import@2.29.1)(webpack@5.93.0) eslint-plugin-import: specifier: ^2.29.1 - version: 2.29.1(eslint-import-resolver-webpack@0.13.8)(eslint@8.57.0) + version: 2.29.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.93.0))(eslint@8.57.0) prettier: specifier: ^3.3.3 version: 3.3.3 @@ -1192,7 +1195,7 @@ importers: version: 0.13.8(eslint-plugin-import@2.29.1)(webpack@5.93.0(esbuild@0.21.5)) eslint-plugin-import: specifier: ^2.29.1 - version: 2.29.1(eslint-import-resolver-webpack@0.13.8)(eslint@8.57.0) + version: 2.29.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.93.0))(eslint@8.57.0) eslint-plugin-module-resolver: specifier: ^1.5.0 version: 1.5.0 @@ -1291,7 +1294,7 @@ importers: version: 5.0.0-alpha.0(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(@mui/material@5.16.6(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(formik@2.4.6(react@18.3.1))(react@18.3.1)(tiny-warning@1.0.3) formik-mui-lab: specifier: ^1.0.0 - version: 1.0.0(zaghcs6biehwgpwawq74yfrfry) + version: 1.0.0(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(@mui/lab@5.0.0-alpha.155(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(@mui/material@5.16.6(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mui/material@5.16.6(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(formik@2.4.6(react@18.3.1))(react@18.3.1)(tiny-warning@1.0.3) jwt-decode: specifier: ^4.0.0 version: 4.0.0 @@ -1376,7 +1379,7 @@ importers: version: 0.13.8(eslint-plugin-import@2.29.1)(webpack@5.93.0) eslint-plugin-import: specifier: ^2.29.1 - version: 2.29.1(eslint-import-resolver-webpack@0.13.8)(eslint@8.57.0) + version: 2.29.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.93.0))(eslint@8.57.0) identity-obj-proxy: specifier: ^3.0.0 version: 3.0.0 @@ -1566,7 +1569,7 @@ importers: version: 0.13.8(eslint-plugin-import@2.29.1)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))) eslint-plugin-import: specifier: ^2.29.1 - version: 2.29.1(eslint-import-resolver-webpack@0.13.8)(eslint@8.57.0) + version: 2.29.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.93.0))(eslint@8.57.0) jest: specifier: ^29.7.0 version: 29.7.0(@types/node@20.14.14)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.6(@swc/helpers@0.5.5))(@types/node@20.14.14)(typescript@5.5.4)) @@ -1690,7 +1693,7 @@ importers: version: 0.13.8(eslint-plugin-import@2.29.1)(webpack@5.93.0) eslint-plugin-import: specifier: ^2.29.1 - version: 2.29.1(eslint-import-resolver-webpack@0.13.8)(eslint@8.57.0) + version: 2.29.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.93.0))(eslint@8.57.0) prettier: specifier: ^3.3.3 version: 3.3.3 @@ -18221,7 +18224,7 @@ snapshots: - utf-8-validate - webpack-dev-server - '@payloadcms/db-mongodb@1.7.1(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))(payload@2.25.0(@swc/helpers@0.5.5)(@types/react@18.3.3)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))(webpack-cli@4.10.0)))': + '@payloadcms/db-mongodb@1.7.1(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0))(payload@2.25.0(@swc/helpers@0.5.5)(@types/react@18.3.3)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))(webpack-cli@4.10.0)))': dependencies: bson-objectid: 2.0.4 deepmerge: 4.3.1 @@ -23701,7 +23704,7 @@ snapshots: array.prototype.find: 2.2.3 debug: 3.2.7 enhanced-resolve: 0.9.1 - eslint-plugin-import: 2.29.1(eslint-import-resolver-webpack@0.13.8)(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.93.0))(eslint@8.57.0) find-root: 1.1.0 hasown: 2.0.2 interpret: 1.4.0 @@ -23719,7 +23722,7 @@ snapshots: array.prototype.find: 2.2.3 debug: 3.2.7 enhanced-resolve: 0.9.1 - eslint-plugin-import: 2.29.1(eslint-import-resolver-webpack@0.13.8)(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.93.0))(eslint@8.57.0) find-root: 1.1.0 hasown: 2.0.2 interpret: 1.4.0 @@ -23737,7 +23740,7 @@ snapshots: array.prototype.find: 2.2.3 debug: 3.2.7 enhanced-resolve: 0.9.1 - eslint-plugin-import: 2.29.1(eslint-import-resolver-webpack@0.13.8)(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.93.0))(eslint@8.57.0) find-root: 1.1.0 hasown: 2.0.2 interpret: 1.4.0 @@ -23755,7 +23758,7 @@ snapshots: array.prototype.find: 2.2.3 debug: 3.2.7 enhanced-resolve: 0.9.1 - eslint-plugin-import: 2.29.1(eslint-import-resolver-webpack@0.13.8)(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.93.0))(eslint@8.57.0) find-root: 1.1.0 hasown: 2.0.2 interpret: 1.4.0 @@ -23803,16 +23806,6 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.8.1(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))(webpack-cli@4.10.0)))(eslint@8.57.0): - dependencies: - debug: 3.2.7 - optionalDependencies: - eslint: 8.57.0 - eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-webpack: 0.13.8(eslint-plugin-import@2.29.1)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))(webpack-cli@4.10.0)) - transitivePeerDependencies: - - supports-color - eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))))(eslint@8.57.0): dependencies: array-includes: 3.1.8 @@ -23894,31 +23887,6 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-plugin-import@2.29.1(eslint-import-resolver-webpack@0.13.8)(eslint@8.57.0): - dependencies: - array-includes: 3.1.8 - array.prototype.findlastindex: 1.2.5 - array.prototype.flat: 1.3.2 - array.prototype.flatmap: 1.3.2 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 8.57.0 - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))(webpack-cli@4.10.0)))(eslint@8.57.0) - hasown: 2.0.2 - is-core-module: 2.15.0 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.fromentries: 2.0.8 - object.groupby: 1.0.3 - object.values: 1.2.0 - semver: 6.3.1 - tsconfig-paths: 3.15.0 - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - eslint-plugin-jest-dom@5.4.0(@testing-library/dom@10.1.0)(eslint@8.57.0): dependencies: '@babel/runtime': 7.25.0 @@ -24545,8 +24513,8 @@ snapshots: combined-stream: 1.0.8 mime-types: 2.1.35 - formik-mui-lab@1.0.0(zaghcs6biehwgpwawq74yfrfry): - dependencies: + ? formik-mui-lab@1.0.0(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(@mui/lab@5.0.0-alpha.155(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(@mui/material@5.16.6(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mui/material@5.16.6(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(formik@2.4.6(react@18.3.1))(react@18.3.1)(tiny-warning@1.0.3) + : dependencies: '@emotion/react': 11.13.0(@types/react@18.3.3)(react@18.3.1) '@emotion/styled': 11.13.0(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1) '@mui/lab': 5.0.0-alpha.155(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(@mui/material@5.16.6(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -26991,7 +26959,7 @@ snapshots: braces: 3.0.3 picomatch: 2.3.1 - migrate-mongo@11.0.0(mongodb@4.17.1(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))): + migrate-mongo@11.0.0(mongodb@4.17.1(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0))): dependencies: cli-table3: 0.6.5 commander: 9.5.0 From 4d31d0ae533f288873434d55ceeab11e8269687b Mon Sep 17 00:00:00 2001 From: Kipruto <43873157+kelvinkipruto@users.noreply.github.com> Date: Mon, 2 Sep 2024 12:57:07 +0300 Subject: [PATCH 02/20] Working blog page --- apps/engineeringblog/app/page.tsx | 29 ++++--- .../components/Article/ArticleCard.tsx | 71 ++++++++++++++++++ .../components/Article/index.ts | 3 + apps/engineeringblog/content/post-01.mdx | 1 + apps/engineeringblog/content/post-02.mdx | 1 + apps/engineeringblog/package.json | 1 + .../public/images/logo-dark.png | Bin 0 -> 982 bytes .../public/images/logo-light.png | Bin 0 -> 982 bytes pnpm-lock.yaml | 3 + 9 files changed, 99 insertions(+), 10 deletions(-) create mode 100644 apps/engineeringblog/components/Article/ArticleCard.tsx create mode 100644 apps/engineeringblog/components/Article/index.ts create mode 100644 apps/engineeringblog/public/images/logo-dark.png create mode 100644 apps/engineeringblog/public/images/logo-light.png diff --git a/apps/engineeringblog/app/page.tsx b/apps/engineeringblog/app/page.tsx index 69529c34a..6654e50da 100644 --- a/apps/engineeringblog/app/page.tsx +++ b/apps/engineeringblog/app/page.tsx @@ -1,7 +1,9 @@ -import { Box, Container } from "@mui/material"; +import { Container, Grid } from "@mui/material"; import fs from "fs"; import path from "path"; import matter from "gray-matter"; +import ArticleCard from "@/engineeringblog/components/Article"; +import { format } from "date-fns"; export function getAllPosts() { const postsDirectory = path.join(process.cwd(), "content"); @@ -18,7 +20,7 @@ export function getAllPosts() { slug: fileName.replace(/\.mdx$/, ""), title: data.title, description: data.description, - date: data.date, + date: format(new Date(data.date), "MMM dd, yyyy"), featuredImage: data?.featuredImage, }; }); @@ -26,17 +28,24 @@ export function getAllPosts() { export default async function index() { const posts = await getAllPosts(); + + if (!posts) { + return
No posts!
; + } + return ( - - {posts.map((post) => ( - -

{post.title}

-

{post.description}

-

{post.date}

-
+ + {posts?.map((article) => ( + + + ))} -
+
); } diff --git a/apps/engineeringblog/components/Article/ArticleCard.tsx b/apps/engineeringblog/components/Article/ArticleCard.tsx new file mode 100644 index 000000000..b39785700 --- /dev/null +++ b/apps/engineeringblog/components/Article/ArticleCard.tsx @@ -0,0 +1,71 @@ +import { + Card, + CardActionArea, + CardContent, + CardMedia, + Typography, +} from "@mui/material"; +import React from "react"; + +type Article = { + slug: string; + title: string; + description: string; + date: string; + featuredImage: string; +}; + +export type ArticleCardProps = { + article: Article; +}; + +const ArticleCard = React.forwardRef(function ArticleCard( + props: ArticleCardProps, + ref: React.Ref, +) { + const { article } = props; + + return ( + + + + + {article.title} + + {article.date} + + + + + ); +}); + +export default ArticleCard; diff --git a/apps/engineeringblog/components/Article/index.ts b/apps/engineeringblog/components/Article/index.ts new file mode 100644 index 000000000..e93a343b5 --- /dev/null +++ b/apps/engineeringblog/components/Article/index.ts @@ -0,0 +1,3 @@ +import ArticleCard from "./ArticleCard"; + +export default ArticleCard; diff --git a/apps/engineeringblog/content/post-01.mdx b/apps/engineeringblog/content/post-01.mdx index 821390f04..dc897d5d2 100644 --- a/apps/engineeringblog/content/post-01.mdx +++ b/apps/engineeringblog/content/post-01.mdx @@ -2,6 +2,7 @@ title: "Post 01" date: "2020-01-01" description: "This is the first post" +featuredImage: "/images/logo-dark.png" --- Enim non qui velit nulla elit irure minim incididunt tempor. Lorem eu incididunt fugiat cupidatat aute. Veniam esse laboris irure nostrud. Proident et mollit ea ex. Elit commodo veniam irure laboris dolore cupidatat deserunt esse esse reprehenderit ipsum magna. diff --git a/apps/engineeringblog/content/post-02.mdx b/apps/engineeringblog/content/post-02.mdx index b45f29f9a..9d80ee3bb 100644 --- a/apps/engineeringblog/content/post-02.mdx +++ b/apps/engineeringblog/content/post-02.mdx @@ -2,6 +2,7 @@ title: "Post 02" date: "2020-02-02" description: "This is the second post" +featuredImage: "/images/logo-light.png" --- Enim non qui velit nulla elit irure minim incididunt tempor. Lorem eu incididunt fugiat cupidatat aute. Veniam esse laboris irure nostrud. Proident et mollit ea ex. Elit commodo veniam irure laboris dolore cupidatat deserunt esse esse reprehenderit ipsum magna. diff --git a/apps/engineeringblog/package.json b/apps/engineeringblog/package.json index 8e51ee164..19c5d695a 100644 --- a/apps/engineeringblog/package.json +++ b/apps/engineeringblog/package.json @@ -22,6 +22,7 @@ "@mui/material-nextjs": "^5.16.1", "@mui/utils": "^5.16.6", "@next/mdx": "^14.2.5", + "date-fns": "^3.6.0", "gray-matter": "^4.0.3", "next": "^14.2.5", "react": "^18", diff --git a/apps/engineeringblog/public/images/logo-dark.png b/apps/engineeringblog/public/images/logo-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..570eda132a4b73a148e92233369f6d0e34a3d84d GIT binary patch literal 982 zcmeAS@N?(olHy`uVBq!ia0y~yV7v{)|5=!UB5yOZ)PadlKZr2TTH%qPP}Kyw6n3e{fpyH2@&lhY-R%K$L7h_@8|BZ^Zlxyb|~SpTB!QM zKLv$o!2PgoZv2Ji7YoxDenXMmy?6J2J)>go?51uA__BS|IPQFN$vpkIREh zgaTub!N2c!uq)`Hg1i;BF>r9_V8QK_xyyfR{<~`0sb6am6J_-l2T;;-(%L5I}ozu}&?tW1^d&_LQ z?cbK|*zuSj7O3A7C$75fnD_TEL}0tiyU^b&Hhb-4UcUD@#86wFcgI~<+4VP8i+zHJ z-t2{zdU>}B_8*(yy6*Ij((kFo)vfD7Hy_Ny zdOkA}=(J*}s=F=SztcWuZ@#s2H^ZZCmQiA-b2qhj&(?=Z`~JDOt153jC(!fn;t%y& z?$VzoZG;pjze_#_zGm7Hdi}B9yql%}R%?~r^GA)M!ta+Ksp|f|b1NDtj^$XsKinX8 zam%W`i0B2gs&D-Z7N1&xnrz#F$>Dxf_!-^oQ)p53=uzD9<dlKZr2TTH%qPP}Kyw6n3e{fpyH2@&lhY-R%K$L7h_@8|BZ^Zlxyb|~SpTB!QM zKLv$o!2PgoZv2Ji7YoxDenXMmy?6J2J)>go?51uA__BS|IPQFN$vpkIREh zgaTub!N2c!uq)`Hg1i;BF>r9_V8QK_xyyfR{<~`0sb6am6J_-l2T;;-(%L5I}ozu}&?tW1^d&_LQ z?cbK|*zuSj7O3A7C$75fnD_TEL}0tiyU^b&Hhb-4UcUD@#86wFcgI~<+4VP8i+zHJ z-t2{zdU>}B_8*(yy6*Ij((kFo)vfD7Hy_Ny zdOkA}=(J*}s=F=SztcWuZ@#s2H^ZZCmQiA-b2qhj&(?=Z`~JDOt153jC(!fn;t%y& z?$VzoZG;pjze_#_zGm7Hdi}B9yql%}R%?~r^GA)M!ta+Ksp|f|b1NDtj^$XsKinX8 zam%W`i0B2gs&D-Z7N1&xnrz#F$>Dxf_!-^oQ)p53=uzD9< Date: Mon, 2 Sep 2024 13:28:02 +0300 Subject: [PATCH 03/20] Render single blog Signed-off-by: Kipruto <43873157+kelvinkipruto@users.noreply.github.com> --- apps/engineeringblog/app/[slug]/page.tsx | 30 +++++++++++++++++++ apps/engineeringblog/app/articles/page.tsx | 3 -- .../app/articles/sample-1/demo-1.tsx | 17 ----------- .../app/articles/sample-1/page.mdx | 14 --------- apps/engineeringblog/app/page.tsx | 7 ++++- 5 files changed, 36 insertions(+), 35 deletions(-) create mode 100644 apps/engineeringblog/app/[slug]/page.tsx delete mode 100644 apps/engineeringblog/app/articles/page.tsx delete mode 100644 apps/engineeringblog/app/articles/sample-1/demo-1.tsx delete mode 100644 apps/engineeringblog/app/articles/sample-1/page.mdx diff --git a/apps/engineeringblog/app/[slug]/page.tsx b/apps/engineeringblog/app/[slug]/page.tsx new file mode 100644 index 000000000..b7499b8a3 --- /dev/null +++ b/apps/engineeringblog/app/[slug]/page.tsx @@ -0,0 +1,30 @@ +import fs from "fs"; +import matter from "gray-matter"; +import path from "path"; +import { format } from "date-fns"; + +async function getBlogPost(slug: string) { + const postsDirectory = path.join(process.cwd(), "content"); + const filePath = path.join(postsDirectory, `${slug}.mdx`); + const fileContents = fs.readFileSync(filePath, "utf8"); + const { data, content } = matter(fileContents); + + return { + slug, + title: data.title, + description: data.description, + date: format(new Date(data.date), "MMM dd, yyyy"), + content, + }; +} + +export default async function Page({ params }: { params: { slug: string } }) { + const post = await getBlogPost(params.slug); + return ( +
+

{post.title}

+

{post.date}

+
+
+ ); +} diff --git a/apps/engineeringblog/app/articles/page.tsx b/apps/engineeringblog/app/articles/page.tsx deleted file mode 100644 index 34de2708e..000000000 --- a/apps/engineeringblog/app/articles/page.tsx +++ /dev/null @@ -1,3 +0,0 @@ -export default function ArticlesHome() { - return
List of Articles
; -} diff --git a/apps/engineeringblog/app/articles/sample-1/demo-1.tsx b/apps/engineeringblog/app/articles/sample-1/demo-1.tsx deleted file mode 100644 index ffa3c9cb3..000000000 --- a/apps/engineeringblog/app/articles/sample-1/demo-1.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import Stack from "@mui/material/Stack"; -import Button from "@mui/material/Button"; - -export function Demo1() { - return ( -
-

Demo 1

-

This is a demo component with MUI components belows.

- - - - - - -
- ); -} diff --git a/apps/engineeringblog/app/articles/sample-1/page.mdx b/apps/engineeringblog/app/articles/sample-1/page.mdx deleted file mode 100644 index 6e6943c42..000000000 --- a/apps/engineeringblog/app/articles/sample-1/page.mdx +++ /dev/null @@ -1,14 +0,0 @@ -import { Demo1 } from "./demo-1"; - -# Sample article 1 - -This is a sample article 1. - - - -Sample React component above imported by the following code: - -````tsx - -```tsx -```` diff --git a/apps/engineeringblog/app/page.tsx b/apps/engineeringblog/app/page.tsx index 6654e50da..2c0e1d0d5 100644 --- a/apps/engineeringblog/app/page.tsx +++ b/apps/engineeringblog/app/page.tsx @@ -34,7 +34,12 @@ export default async function index() { } return ( - + Date: Tue, 3 Sep 2024 10:46:20 +0300 Subject: [PATCH 04/20] Update blog content --- apps/engineeringblog/app/page.tsx | 8 +- .../content/exploring-next-js.mdx | 42 ++++++ .../content/javascript-generators.mdx | 140 ++++++++++++++++++ .../content/mastering-docker.mdx | 96 ++++++++++++ apps/engineeringblog/content/post-01.mdx | 12 -- apps/engineeringblog/content/post-02.mdx | 12 -- apps/engineeringblog/content/post-03.mdx | 11 -- .../public/blog/exploring-next-js.png | Bin 0 -> 14264 bytes .../public/blog/javascript-generators.jpeg | Bin 0 -> 14104 bytes .../public/blog/mastering-docker.png | Bin 0 -> 20924 bytes .../public/images/logo-dark.png | Bin 982 -> 0 bytes .../public/images/logo-light.png | Bin 982 -> 0 bytes 12 files changed, 280 insertions(+), 41 deletions(-) create mode 100644 apps/engineeringblog/content/exploring-next-js.mdx create mode 100644 apps/engineeringblog/content/javascript-generators.mdx create mode 100644 apps/engineeringblog/content/mastering-docker.mdx delete mode 100644 apps/engineeringblog/content/post-01.mdx delete mode 100644 apps/engineeringblog/content/post-02.mdx delete mode 100644 apps/engineeringblog/content/post-03.mdx create mode 100644 apps/engineeringblog/public/blog/exploring-next-js.png create mode 100644 apps/engineeringblog/public/blog/javascript-generators.jpeg create mode 100644 apps/engineeringblog/public/blog/mastering-docker.png delete mode 100644 apps/engineeringblog/public/images/logo-dark.png delete mode 100644 apps/engineeringblog/public/images/logo-light.png diff --git a/apps/engineeringblog/app/page.tsx b/apps/engineeringblog/app/page.tsx index 2c0e1d0d5..c984784d1 100644 --- a/apps/engineeringblog/app/page.tsx +++ b/apps/engineeringblog/app/page.tsx @@ -1,4 +1,5 @@ import { Container, Grid } from "@mui/material"; +import { Section } from "@commons-ui/core"; import fs from "fs"; import path from "path"; import matter from "gray-matter"; @@ -34,12 +35,7 @@ export default async function index() { } return ( - + response.json()).then((data) => gen.next(data)); +``` + +2. **Infinite Sequences** + Generators are perfect for creating infinite sequences because they yield values one at a time and only compute the next value when requested. + +```javascript +function* idGenerator() { + let id = 1; + while (true) { + yield id++; + } +} + +const gen = idGenerator(); +console.log(gen.next().value); // 1 +console.log(gen.next().value); // 2 +console.log(gen.next().value); // 3 +``` + +3. **Controlling Iterations** + Generators provide precise control over how a loop iterates, which is useful in scenarios like lazy evaluation, where you want to compute values only when needed. + +```javascript +function* fibonacci() { + let [a, b] = [0, 1]; + while (true) { + yield a; + [a, b] = [b, a + b]; + } +} + +const fib = fibonacci(); +console.log(fib.next().value); // 0 +console.log(fib.next().value); // 1 +console.log(fib.next().value); // 1 +console.log(fib.next().value); // 2 +``` + +4. **Middleware in Redux-Saga** + In the Redux ecosystem, generators are a core feature of Redux-Saga, a middleware library for handling side effects. Sagas, which are written as generator functions, manage asynchronous operations in a clean and readable way, making the flow of data easier to understand. + +```javascript +function* fetchUserData() { + try { + const user = yield call(Api.fetchUser, action.payload.userId); + yield put({ type: "USER_FETCH_SUCCEEDED", user }); + } catch (e) { + yield put({ type: "USER_FETCH_FAILED", message: e.message }); + } +} +``` + +### Conclusion + +JavaScript Generators are a versatile and powerful feature that can simplify complex tasks by providing more control over function execution. They offer a way to manage asynchronous operations, handle large data streams, and build complex algorithms in a more readable and maintainable manner. While async/await has become the standard for handling asynchronous code, generators still hold their place in scenarios that require custom iteration logic or when working with libraries like Redux-Saga. diff --git a/apps/engineeringblog/content/mastering-docker.mdx b/apps/engineeringblog/content/mastering-docker.mdx new file mode 100644 index 000000000..5ac48cd62 --- /dev/null +++ b/apps/engineeringblog/content/mastering-docker.mdx @@ -0,0 +1,96 @@ +--- +title: "Mastering Docker: A Comprehensive Guide for Developers" +date: "2020-03-03" +description: "Docker has revolutionized the way we build, ship, and run applications. It simplifies software development by creating isolated environments, known as containers, that bundle an application and its dependencies together. This ensures consistency across multiple environments and reduces the 'it works on my machine' problem. In this article, we'll dive deep into Docker, exploring its architecture, benefits, common use cases, and best practices." +featuredImage: "/blog/mastering-docker.png" +--- + +### What is Docker? + +Docker is an open-source platform that enables developers to automate the deployment of applications inside lightweight, portable containers. Containers are a form of virtualization, but unlike traditional virtual machines (VMs), they share the host system's kernel, making them more efficient in terms of resources and startup time. + +Docker provides a standardized unit of software, called a container, that packages code and all its dependencies so the application runs reliably on different computing environments. + +### Docker Components + +1. **Docker Engine**: The core component that runs on the host OS, Docker Engine is responsible for creating and managing containers. It includes: + + - **Docker Daemon** : The background service running on the host that manages Docker containers. + - **Docker CLI**: A command-line interface for interacting with Docker Daemon, enabling users to build, run, and manage containers. + - **Docker API**: An interface that allows Docker to be controlled programmatically. + +2. **Docker Images**: These are read-only templates used to create containers. An image is built from a series of layers, each representing a different set of filesystem changes, including application code, libraries, and configurations. + +3. **Docker Containers**: A running instance of a Docker image, containers are isolated environments that run applications. Each container operates independently, with its own filesystem, networking, and process space. + +4. **Docker Hub**: A cloud-based repository where Docker users can store and share container images. Docker Hub contains official images, which are curated by Docker, and community images, which are created by developers around the world. + +5. **Docker Compose**: A tool that allows users to define and run multi-container Docker applications. With Docker Compose, you can define a multi-container environment in a single docker-compose.yml file, specifying services, networks, and volumes. + +6. **Docker Swarm**: A native clustering and orchestration tool for Docker. It turns a pool of Docker hosts into a single, virtual Docker host, allowing you to scale and manage containers across multiple servers. + +### How Docker Works + +Docker utilizes a client-server architecture. The Docker client talks to the Docker daemon, which does the heavy lifting of building, running, and managing Docker containers. + +1. **Building Docker Images**: Developers start by creating a `Dockerfile`, a text file containing a list of instructions on how to build an image. The `Dockerfile` specifies the base image, application code, dependencies, and any other configurations. When the docker build command is run, Docker reads the `Dockerfile` and creates an image based on those instructions. + +2. **Running Docker Containers**: Once the image is built, it can be instantiated as a container using the docker run command. The container runs in an isolated environment, ensuring that the application behaves the same regardless of where it is deployed. + +3. **Container Lifecycle**: Docker containers can be started, stopped, and restarted. They can be ephemeral, meaning they run, perform their task, and then terminate, or they can be long-running, staying active as services. + +4. **Networking and Volumes**: Docker containers can communicate with each other and the outside world through networks. Volumes are used for persistent storage, allowing data to be stored and shared across containers, even after they stop running. + +### Benefits of Using Docker + +1. **Consistency Across Environments**: Docker ensures that applications run consistently across different environments, eliminating discrepancies between development, testing, and production environments. + +2. **Resource Efficiency**: Containers are lightweight and share the host OS's kernel, making them faster to start and requiring fewer resources compared to VMs. + +3. **Simplified Dependency Management**: Docker images contain everything an application needs to run, including libraries and dependencies. This simplifies deployment and reduces the risk of version conflicts. + +4. **Scalability**: Docker containers can be easily scaled across multiple machines, enabling horizontal scaling. Tools like Docker Swarm and Kubernetes provide powerful orchestration capabilities for managing large-scale containerized applications. + +5. **Isolation**: Containers run in isolated environments, reducing the risk of conflicts between applications running on the same host. This isolation also enhances security by limiting the impact of vulnerabilities. + +6. **Portability**: Docker containers can run on any machine with Docker installed, whether it's a developer's laptop, a test server, or a production environment in the cloud. + +### Common Use Cases for Docker + +1. **Microservices Architecture**: Docker is a natural fit for microservices, where each service is developed, deployed, and scaled independently. Containers allow microservices to run in isolated environments, making it easier to manage dependencies and reduce conflicts. + +2. **Continuous Integration/Continuous Deployment (CI/CD)**: Docker streamlines the CI/CD pipeline by providing consistent environments for testing and deployment. This reduces the chances of bugs slipping into production and speeds up the development process. + +3. **Dev/Test Environments**: Developers can use Docker to create reproducible development and testing environments. This ensures that all team members are working with the same setup, reducing "it works on my machine" issues. + +4. **Legacy Application Modernization**: Docker can be used to containerize legacy applications, allowing them to run on modern infrastructure without requiring significant changes to the codebase. + +5. **Data Science and Machine Learning**: Docker provides a consistent environment for data scientists to run their code, ensuring that experiments and models can be reproduced easily. This is particularly useful when sharing work with others or deploying models to production. + +### Docker Best Practices + +1. **Keep Images Small**: Minimize the size of Docker images by using slim base images and cleaning up unnecessary files during the build process. Smaller images are faster to build, pull, and deploy. + +2. **Use Multi-Stage Builds**: Multi-stage builds allow you to use multiple FROM statements in a Dockerfile, enabling you to separate the build environment from the runtime environment. This reduces the final image size by only including what is necessary for running the application. + +3. **Leverage Caching**: Docker caches each layer of the image during the build process. Structure your Dockerfile so that the most frequently changed instructions appear later in the file, allowing Docker to reuse cached layers and speed up subsequent builds. + +4. **Tag Images Meaningfully**: Use meaningful tags for your Docker images, such as v1.0.0 or latest. This helps in tracking and managing different versions of your images. + +5. **Use Volumes for Persistent Data**: Store persistent data in Docker volumes rather than inside containers. This ensures that data is not lost when a container is removed or replaced. + +6. **Limit Container Privileges**: Run containers with the least privileges necessary. Avoid running containers as the root user unless absolutely necessary, as this can pose security risks. + +7. **Monitor and Log Containers**: Use monitoring and logging tools to keep an eye on your containers' performance and health. Tools like Prometheus, Grafana, and ELK stack can help you track metrics and diagnose issues. + +8. **Automate with Docker Compose**: For multi-container applications, use Docker Compose to define and manage services in a docker-compose.yml file. This simplifies the process of starting and stopping multiple containers. + +9. **Use Docker Swarm or Kubernetes for Orchestration**: For larger deployments, use Docker Swarm or Kubernetes to manage and scale your containerized applications. These tools provide features like load balancing, service discovery, and automated failover. + +10. **Regularly Update and Patch Images**: Keep your Docker images up to date with the latest security patches. Use automated tools like Docker Bench for Security to scan your Docker environment for vulnerabilities. + +### Conclusion + +Docker has transformed the way we develop, deploy, and manage applications, making it an essential tool for modern software development. By containerizing applications, Docker ensures consistency, efficiency, and scalability across different environments, from development to production. + +Whether you're building microservices, streamlining your CI/CD pipeline, or modernizing legacy applications, Docker provides the tools and flexibility needed to succeed. By following best practices and leveraging Docker's powerful features, you can create robust, secure, and maintainable applications that stand the test of time. diff --git a/apps/engineeringblog/content/post-01.mdx b/apps/engineeringblog/content/post-01.mdx deleted file mode 100644 index dc897d5d2..000000000 --- a/apps/engineeringblog/content/post-01.mdx +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: "Post 01" -date: "2020-01-01" -description: "This is the first post" -featuredImage: "/images/logo-dark.png" ---- - -Enim non qui velit nulla elit irure minim incididunt tempor. Lorem eu incididunt fugiat cupidatat aute. Veniam esse laboris irure nostrud. Proident et mollit ea ex. Elit commodo veniam irure laboris dolore cupidatat deserunt esse esse reprehenderit ipsum magna. - -## Section 1 - -Veniam ea tempor mollit officia magna deserunt nulla fugiat. In ipsum non magna officia deserunt do nulla irure dolor labore culpa voluptate ipsum officia. Ut nulla nisi ullamco ipsum laboris. Eiusmod occaecat ipsum ullamco voluptate dolor qui non nostrud voluptate aliquip eu. diff --git a/apps/engineeringblog/content/post-02.mdx b/apps/engineeringblog/content/post-02.mdx deleted file mode 100644 index 9d80ee3bb..000000000 --- a/apps/engineeringblog/content/post-02.mdx +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: "Post 02" -date: "2020-02-02" -description: "This is the second post" -featuredImage: "/images/logo-light.png" ---- - -Enim non qui velit nulla elit irure minim incididunt tempor. Lorem eu incididunt fugiat cupidatat aute. Veniam esse laboris irure nostrud. Proident et mollit ea ex. Elit commodo veniam irure laboris dolore cupidatat deserunt esse esse reprehenderit ipsum magna. - -## Section 1 - -Veniam ea tempor mollit officia magna deserunt nulla fugiat. In ipsum non magna officia deserunt do nulla irure dolor labore culpa voluptate ipsum officia. Ut nulla nisi ullamco ipsum laboris. Eiusmod occaecat ipsum ullamco voluptate dolor qui non nostrud voluptate aliquip eu. diff --git a/apps/engineeringblog/content/post-03.mdx b/apps/engineeringblog/content/post-03.mdx deleted file mode 100644 index 68d4128a6..000000000 --- a/apps/engineeringblog/content/post-03.mdx +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: "Post 03" -date: "2020-03-03" -description: "This is the third post" ---- - -Enim non qui velit nulla elit irure minim incididunt tempor. Lorem eu incididunt fugiat cupidatat aute. Veniam esse laboris irure nostrud. Proident et mollit ea ex. Elit commodo veniam irure laboris dolore cupidatat deserunt esse esse reprehenderit ipsum magna. - -## Section 1 - -Veniam ea tempor mollit officia magna deserunt nulla fugiat. In ipsum non magna officia deserunt do nulla irure dolor labore culpa voluptate ipsum officia. Ut nulla nisi ullamco ipsum laboris. Eiusmod occaecat ipsum ullamco voluptate dolor qui non nostrud voluptate aliquip eu. diff --git a/apps/engineeringblog/public/blog/exploring-next-js.png b/apps/engineeringblog/public/blog/exploring-next-js.png new file mode 100644 index 0000000000000000000000000000000000000000..647317c19b355770a0835b1bae7401d75a80293a GIT binary patch literal 14264 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 E1M?v7kpKVy literal 0 HcmV?d00001 diff --git a/apps/engineeringblog/public/blog/javascript-generators.jpeg b/apps/engineeringblog/public/blog/javascript-generators.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..149873d68964faa783c093dabc411691003a8e0b GIT binary patch literal 14104 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 literal 0 HcmV?d00001 diff --git a/apps/engineeringblog/public/blog/mastering-docker.png b/apps/engineeringblog/public/blog/mastering-docker.png new file mode 100644 index 0000000000000000000000000000000000000000..a45dad0b4a379e34576e50523c41ea6d9e80e844 GIT binary patch literal 20924 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 Date: Tue, 3 Sep 2024 11:06:40 +0300 Subject: [PATCH 05/20] Fix mobile rendering --- apps/engineeringblog/app/page.tsx | 24 ++++------- .../components/Article/ArtilceList.tsx | 42 +++++++++++++++++++ .../components/Article/index.ts | 4 +- 3 files changed, 53 insertions(+), 17 deletions(-) create mode 100644 apps/engineeringblog/components/Article/ArtilceList.tsx diff --git a/apps/engineeringblog/app/page.tsx b/apps/engineeringblog/app/page.tsx index c984784d1..783a48e5f 100644 --- a/apps/engineeringblog/app/page.tsx +++ b/apps/engineeringblog/app/page.tsx @@ -1,10 +1,9 @@ -import { Container, Grid } from "@mui/material"; -import { Section } from "@commons-ui/core"; +import { Container } from "@mui/material"; import fs from "fs"; import path from "path"; import matter from "gray-matter"; -import ArticleCard from "@/engineeringblog/components/Article"; import { format } from "date-fns"; +import ArtilceList from "@/engineeringblog/components/Article/ArtilceList"; export function getAllPosts() { const postsDirectory = path.join(process.cwd(), "content"); @@ -35,18 +34,13 @@ export default async function index() { } return ( - - - {posts?.map((article) => ( - - - - ))} - + + ); } diff --git a/apps/engineeringblog/components/Article/ArtilceList.tsx b/apps/engineeringblog/components/Article/ArtilceList.tsx new file mode 100644 index 000000000..7d5a10f24 --- /dev/null +++ b/apps/engineeringblog/components/Article/ArtilceList.tsx @@ -0,0 +1,42 @@ +"use client"; + +import { Section } from "@commons-ui/core"; +import { Grid } from "@mui/material"; +import React from "react"; +import ArticleCard from "./ArticleCard"; + +type Article = { + slug: string; + title: string; + description: string; + date: string; + featuredImage: string; +}; + +export type ArticleCardProps = { + articles: Article[]; +}; + +const ArtilceList = React.forwardRef(function ArtilceList( + props: ArticleCardProps, + ref: React.Ref, +) { + const { articles } = props; + return ( +
+ + {articles?.map((article) => ( + + + + ))} + +
+ ); +}); + +export default ArtilceList; diff --git a/apps/engineeringblog/components/Article/index.ts b/apps/engineeringblog/components/Article/index.ts index e93a343b5..483ab01bc 100644 --- a/apps/engineeringblog/components/Article/index.ts +++ b/apps/engineeringblog/components/Article/index.ts @@ -1,3 +1,3 @@ -import ArticleCard from "./ArticleCard"; +import ArtilceList from "./ArtilceList"; -export default ArticleCard; +export default ArtilceList; From 4671a4112c4ce3c76dba7471b72d27fba69c7352 Mon Sep 17 00:00:00 2001 From: Kipruto <43873157+kelvinkipruto@users.noreply.github.com> Date: Tue, 3 Sep 2024 12:10:56 +0300 Subject: [PATCH 06/20] Improve rendering of single blog --- apps/engineeringblog/app/[slug]/page.tsx | 21 +- apps/engineeringblog/app/page.tsx | 5 +- .../components/Article/ArticleCard.tsx | 1 + .../components/Article/ArticleContent.tsx | 64 +++++ .../components/Article/ArticleHeader.tsx | 54 ++++ .../components/Article/ArtilceList.tsx | 1 + .../components/Article/index.ts | 4 +- apps/engineeringblog/package.json | 6 +- pnpm-lock.yaml | 244 +++++++++++++++++- 9 files changed, 380 insertions(+), 20 deletions(-) create mode 100644 apps/engineeringblog/components/Article/ArticleContent.tsx create mode 100644 apps/engineeringblog/components/Article/ArticleHeader.tsx diff --git a/apps/engineeringblog/app/[slug]/page.tsx b/apps/engineeringblog/app/[slug]/page.tsx index b7499b8a3..7919d7ab3 100644 --- a/apps/engineeringblog/app/[slug]/page.tsx +++ b/apps/engineeringblog/app/[slug]/page.tsx @@ -2,6 +2,11 @@ import fs from "fs"; import matter from "gray-matter"; import path from "path"; import { format } from "date-fns"; +import { ArticleContent } from "@/engineeringblog/components/Article"; +import { Box } from "@mui/material"; +import { remark } from "remark"; +import html from "remark-html"; +import remarkMdx from "remark-mdx"; async function getBlogPost(slug: string) { const postsDirectory = path.join(process.cwd(), "content"); @@ -9,22 +14,26 @@ async function getBlogPost(slug: string) { const fileContents = fs.readFileSync(filePath, "utf8"); const { data, content } = matter(fileContents); + const processedContent = await remark() + .use(remarkMdx) + .use(html) + .process(content); + return { slug, title: data.title, description: data.description, date: format(new Date(data.date), "MMM dd, yyyy"), - content, + featuredImage: data.featuredImage, + content: processedContent.toString(), }; } export default async function Page({ params }: { params: { slug: string } }) { const post = await getBlogPost(params.slug); return ( -
-

{post.title}

-

{post.date}

-
-
+ + + ); } diff --git a/apps/engineeringblog/app/page.tsx b/apps/engineeringblog/app/page.tsx index 783a48e5f..3d3ad5f64 100644 --- a/apps/engineeringblog/app/page.tsx +++ b/apps/engineeringblog/app/page.tsx @@ -3,7 +3,7 @@ import fs from "fs"; import path from "path"; import matter from "gray-matter"; import { format } from "date-fns"; -import ArtilceList from "@/engineeringblog/components/Article/ArtilceList"; +import { ArtilceList } from "@/engineeringblog/components/Article"; export function getAllPosts() { const postsDirectory = path.join(process.cwd(), "content"); @@ -14,7 +14,7 @@ export function getAllPosts() { return fileNames.map((fileName) => { const filePath = path.join(postsDirectory, fileName); const fileContents = fs.readFileSync(filePath, "utf8"); - const { data } = matter(fileContents); + const { data, content } = matter(fileContents); return { slug: fileName.replace(/\.mdx$/, ""), @@ -22,6 +22,7 @@ export function getAllPosts() { description: data.description, date: format(new Date(data.date), "MMM dd, yyyy"), featuredImage: data?.featuredImage, + content, }; }); } diff --git a/apps/engineeringblog/components/Article/ArticleCard.tsx b/apps/engineeringblog/components/Article/ArticleCard.tsx index b39785700..1d1ec2c0c 100644 --- a/apps/engineeringblog/components/Article/ArticleCard.tsx +++ b/apps/engineeringblog/components/Article/ArticleCard.tsx @@ -13,6 +13,7 @@ type Article = { description: string; date: string; featuredImage: string; + content: string; }; export type ArticleCardProps = { diff --git a/apps/engineeringblog/components/Article/ArticleContent.tsx b/apps/engineeringblog/components/Article/ArticleContent.tsx new file mode 100644 index 000000000..1c61758b4 --- /dev/null +++ b/apps/engineeringblog/components/Article/ArticleContent.tsx @@ -0,0 +1,64 @@ +"use client"; +import { Section } from "@commons-ui/core"; +import React from "react"; +import { Figure } from "@commons-ui/next"; +import { Box } from "@mui/material"; +import ArticleHeader from "./ArticleHeader"; + +type Article = { + slug: string; + title: string; + description: string; + date: string; + featuredImage: string; + content: string; +}; + +export type ArticleCardProps = { + article: Article; +}; + +const ArticleContent = React.forwardRef(function ArticleContent( + props: ArticleCardProps, + ref: React.Ref, +) { + const { + article: { title, description, featuredImage, date, content }, + } = props; + + return ( + +
+ +
+ +
+ + ); +}); + +export default ArticleContent; diff --git a/apps/engineeringblog/components/Article/ArticleHeader.tsx b/apps/engineeringblog/components/Article/ArticleHeader.tsx new file mode 100644 index 000000000..2ac65c42a --- /dev/null +++ b/apps/engineeringblog/components/Article/ArticleHeader.tsx @@ -0,0 +1,54 @@ +"use client"; + +import { Section } from "@commons-ui/core"; +import { Typography } from "@mui/material"; +import React from "react"; + +const ArticleHeader = React.forwardRef(function ArticleHeader( + { + date, + excerpt, + sx, + title, + }: { date: string; excerpt: string; sx: any; title: string }, + ref, +) { + return ( +
+ + {date} + + + {title} + + + {excerpt} + +
+ ); +}); + +export default ArticleHeader; diff --git a/apps/engineeringblog/components/Article/ArtilceList.tsx b/apps/engineeringblog/components/Article/ArtilceList.tsx index 7d5a10f24..4903730bd 100644 --- a/apps/engineeringblog/components/Article/ArtilceList.tsx +++ b/apps/engineeringblog/components/Article/ArtilceList.tsx @@ -11,6 +11,7 @@ type Article = { description: string; date: string; featuredImage: string; + content: string; }; export type ArticleCardProps = { diff --git a/apps/engineeringblog/components/Article/index.ts b/apps/engineeringblog/components/Article/index.ts index 483ab01bc..bb0598758 100644 --- a/apps/engineeringblog/components/Article/index.ts +++ b/apps/engineeringblog/components/Article/index.ts @@ -1,3 +1,5 @@ import ArtilceList from "./ArtilceList"; +import ArticleCard from "./ArticleCard"; +import ArticleContent from "./ArticleContent"; -export default ArtilceList; +export { ArtilceList, ArticleCard, ArticleContent }; diff --git a/apps/engineeringblog/package.json b/apps/engineeringblog/package.json index 19c5d695a..a1cd19d09 100644 --- a/apps/engineeringblog/package.json +++ b/apps/engineeringblog/package.json @@ -17,7 +17,6 @@ "@emotion/react": "^11.11.4", "@emotion/styled": "^11.11.5", "@mdx-js/loader": "^3.0.1", - "@mdx-js/react": "^3.0.1", "@mui/material": "^5.16.1", "@mui/material-nextjs": "^5.16.1", "@mui/utils": "^5.16.6", @@ -26,7 +25,10 @@ "gray-matter": "^4.0.3", "next": "^14.2.5", "react": "^18", - "react-dom": "^18" + "react-dom": "^18", + "remark": "^15.0.1", + "remark-html": "^16.0.1", + "remark-mdx": "^3.0.1" }, "devDependencies": { "@svgr/webpack": "^8.1.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a07accb2a..17043ad1d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -921,9 +921,6 @@ importers: '@mdx-js/loader': specifier: ^3.0.1 version: 3.0.1(webpack@5.93.0) - '@mdx-js/react': - specifier: ^3.0.1 - version: 3.0.1(@types/react@18.3.3)(react@18.3.1) '@mui/material': specifier: ^5.16.1 version: 5.16.6(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -951,6 +948,15 @@ importers: react-dom: specifier: ^18 version: 18.3.1(react@18.3.1) + remark: + specifier: ^15.0.1 + version: 15.0.1 + remark-html: + specifier: ^16.0.1 + version: 16.0.1 + remark-mdx: + specifier: ^3.0.1 + version: 3.0.1 devDependencies: '@svgr/webpack': specifier: ^8.1.0 @@ -9531,9 +9537,15 @@ packages: hast-util-is-element@3.0.0: resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} + hast-util-sanitize@5.0.1: + resolution: {integrity: sha512-IGrgWLuip4O2nq5CugXy4GI2V8kx4sFVy5Hd4vF7AR2gxS0N9s7nEAVUyeMtZKZvzrxVsHt73XdTsno1tClIkQ==} + hast-util-to-estree@3.1.0: resolution: {integrity: sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw==} + hast-util-to-html@9.0.2: + resolution: {integrity: sha512-RP5wNpj5nm1Z8cloDv4Sl4RS8jH5HYa0v93YB6Wb4poEzgMo/dAAL0KcT4974dCjcNG5pkLqTImeFHHCwwfY3g==} + hast-util-to-jsx-runtime@2.3.0: resolution: {integrity: sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==} @@ -9593,6 +9605,9 @@ packages: resolution: {integrity: sha512-QY6S+hZ0f5m1WT8WffYN+Hg+xm/w5I8XeUcAq/ZYP5wVC8xbKi4Whhru3FtrAebD5EhBW8rmFzkDI6eCAuFe2w==} hasBin: true + html-void-elements@3.0.0: + resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + html-webpack-plugin@5.5.3: resolution: {integrity: sha512-6YrDKTuqaP/TquFH7h4srYWsZx+x6k6+FbsTm0ziCwGHDP78Unr1r9F/H4+sGmMbX08GQcJ+K64x55b+7VM/jg==} engines: {node: '>=10.13.0'} @@ -12468,6 +12483,9 @@ packages: remark-external-links@8.0.0: resolution: {integrity: sha512-5vPSX0kHoSsqtdftSHhIYofVINC8qmp0nctkeU9YoJwV3YfiBRiI6cbFRJ0oI/1F9xS+bopXG0m2KS8VFscuKA==} + remark-html@16.0.1: + resolution: {integrity: sha512-B9JqA5i0qZe0Nsf49q3OXyGvyXuZFDzAP2iOFLEumymuYJITVpiH1IgsTEwTpdptDmZlMDMWeDmSawdaJIGCXQ==} + remark-mdx@3.0.1: resolution: {integrity: sha512-3Pz3yPQ5Rht2pM5R+0J2MrGoBSrzf+tJG94N+t/ilfdh8YLyyKYtidAYwTveB20BoHAcwIopOUqhcmh2F7hGYA==} @@ -12480,6 +12498,12 @@ packages: remark-slug@6.1.0: resolution: {integrity: sha512-oGCxDF9deA8phWvxFuyr3oSJsdyUAxMFbA0mZ7Y1Sas+emILtO+e5WutF9564gDsEN4IXaQXm5pFo6MLH+YmwQ==} + remark-stringify@11.0.0: + resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} + + remark@15.0.1: + resolution: {integrity: sha512-Eht5w30ruCXgFmxVUSlNWQ9iiimq07URKeFS3hNc8cUWy1llX4KDWfyEDZRycMc+znsN9Ux5/tJ/BFdgdOwA3A==} + renderkid@3.0.0: resolution: {integrity: sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==} @@ -14584,7 +14608,7 @@ snapshots: '@aws-sdk/client-sso-oidc': 3.623.0(@aws-sdk/client-sts@3.621.0) '@aws-sdk/client-sts': 3.623.0 '@aws-sdk/core': 3.623.0 - '@aws-sdk/credential-provider-node': 3.623.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))(@aws-sdk/client-sts@3.621.0) + '@aws-sdk/credential-provider-node': 3.623.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))(@aws-sdk/client-sts@3.623.0) '@aws-sdk/middleware-bucket-endpoint': 3.620.0 '@aws-sdk/middleware-expect-continue': 3.620.0 '@aws-sdk/middleware-flexible-checksums': 3.620.0 @@ -14735,7 +14759,7 @@ snapshots: '@aws-crypto/sha256-js': 5.2.0 '@aws-sdk/client-sts': 3.623.0 '@aws-sdk/core': 3.623.0 - '@aws-sdk/credential-provider-node': 3.623.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))(@aws-sdk/client-sts@3.621.0) + '@aws-sdk/credential-provider-node': 3.623.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))(@aws-sdk/client-sts@3.623.0) '@aws-sdk/middleware-host-header': 3.620.0 '@aws-sdk/middleware-logger': 3.609.0 '@aws-sdk/middleware-recursion-detection': 3.620.0 @@ -14911,7 +14935,7 @@ snapshots: '@aws-crypto/sha256-js': 5.2.0 '@aws-sdk/client-sso-oidc': 3.623.0(@aws-sdk/client-sts@3.623.0) '@aws-sdk/core': 3.623.0 - '@aws-sdk/credential-provider-node': 3.623.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))(@aws-sdk/client-sts@3.621.0) + '@aws-sdk/credential-provider-node': 3.623.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))(@aws-sdk/client-sts@3.623.0) '@aws-sdk/middleware-host-header': 3.620.0 '@aws-sdk/middleware-logger': 3.609.0 '@aws-sdk/middleware-recursion-detection': 3.620.0 @@ -15034,6 +15058,25 @@ snapshots: - '@aws-sdk/client-sso-oidc' - aws-crt + '@aws-sdk/credential-provider-ini@3.621.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0))(@aws-sdk/client-sts@3.621.0)': + dependencies: + '@aws-sdk/client-sts': 3.621.0 + '@aws-sdk/credential-provider-env': 3.620.1 + '@aws-sdk/credential-provider-http': 3.621.0 + '@aws-sdk/credential-provider-process': 3.620.1 + '@aws-sdk/credential-provider-sso': 3.621.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0)) + '@aws-sdk/credential-provider-web-identity': 3.621.0(@aws-sdk/client-sts@3.621.0) + '@aws-sdk/types': 3.609.0 + '@smithy/credential-provider-imds': 3.2.0 + '@smithy/property-provider': 3.1.3 + '@smithy/shared-ini-file-loader': 3.1.4 + '@smithy/types': 3.3.0 + tslib: 2.6.3 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt + optional: true + '@aws-sdk/credential-provider-ini@3.621.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))(@aws-sdk/client-sts@3.621.0)': dependencies: '@aws-sdk/client-sts': 3.621.0 @@ -15071,6 +15114,24 @@ snapshots: - '@aws-sdk/client-sso-oidc' - aws-crt + '@aws-sdk/credential-provider-ini@3.623.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))(@aws-sdk/client-sts@3.623.0)': + dependencies: + '@aws-sdk/client-sts': 3.623.0 + '@aws-sdk/credential-provider-env': 3.620.1 + '@aws-sdk/credential-provider-http': 3.622.0 + '@aws-sdk/credential-provider-process': 3.620.1 + '@aws-sdk/credential-provider-sso': 3.623.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0)) + '@aws-sdk/credential-provider-web-identity': 3.621.0(@aws-sdk/client-sts@3.623.0) + '@aws-sdk/types': 3.609.0 + '@smithy/credential-provider-imds': 3.2.0 + '@smithy/property-provider': 3.1.3 + '@smithy/shared-ini-file-loader': 3.1.4 + '@smithy/types': 3.3.0 + tslib: 2.6.3 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt + '@aws-sdk/credential-provider-node@3.621.0(@aws-sdk/client-sso-oidc@3.621.0(@aws-sdk/client-sts@3.621.0))(@aws-sdk/client-sts@3.621.0)': dependencies: '@aws-sdk/credential-provider-env': 3.620.1 @@ -15090,6 +15151,26 @@ snapshots: - '@aws-sdk/client-sts' - aws-crt + '@aws-sdk/credential-provider-node@3.621.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0))(@aws-sdk/client-sts@3.621.0)': + dependencies: + '@aws-sdk/credential-provider-env': 3.620.1 + '@aws-sdk/credential-provider-http': 3.621.0 + '@aws-sdk/credential-provider-ini': 3.621.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0))(@aws-sdk/client-sts@3.621.0) + '@aws-sdk/credential-provider-process': 3.620.1 + '@aws-sdk/credential-provider-sso': 3.621.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0)) + '@aws-sdk/credential-provider-web-identity': 3.621.0(@aws-sdk/client-sts@3.621.0) + '@aws-sdk/types': 3.609.0 + '@smithy/credential-provider-imds': 3.2.0 + '@smithy/property-provider': 3.1.3 + '@smithy/shared-ini-file-loader': 3.1.4 + '@smithy/types': 3.3.0 + tslib: 2.6.3 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - '@aws-sdk/client-sts' + - aws-crt + optional: true + '@aws-sdk/credential-provider-node@3.621.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))(@aws-sdk/client-sts@3.621.0)': dependencies: '@aws-sdk/credential-provider-env': 3.620.1 @@ -15129,6 +15210,25 @@ snapshots: - '@aws-sdk/client-sts' - aws-crt + '@aws-sdk/credential-provider-node@3.623.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))(@aws-sdk/client-sts@3.623.0)': + dependencies: + '@aws-sdk/credential-provider-env': 3.620.1 + '@aws-sdk/credential-provider-http': 3.622.0 + '@aws-sdk/credential-provider-ini': 3.623.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))(@aws-sdk/client-sts@3.623.0) + '@aws-sdk/credential-provider-process': 3.620.1 + '@aws-sdk/credential-provider-sso': 3.623.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0)) + '@aws-sdk/credential-provider-web-identity': 3.621.0(@aws-sdk/client-sts@3.623.0) + '@aws-sdk/types': 3.609.0 + '@smithy/credential-provider-imds': 3.2.0 + '@smithy/property-provider': 3.1.3 + '@smithy/shared-ini-file-loader': 3.1.4 + '@smithy/types': 3.3.0 + tslib: 2.6.3 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - '@aws-sdk/client-sts' + - aws-crt + '@aws-sdk/credential-provider-process@3.620.1': dependencies: '@aws-sdk/types': 3.609.0 @@ -15150,6 +15250,20 @@ snapshots: - '@aws-sdk/client-sso-oidc' - aws-crt + '@aws-sdk/credential-provider-sso@3.621.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0))': + dependencies: + '@aws-sdk/client-sso': 3.621.0 + '@aws-sdk/token-providers': 3.614.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0)) + '@aws-sdk/types': 3.609.0 + '@smithy/property-provider': 3.1.3 + '@smithy/shared-ini-file-loader': 3.1.4 + '@smithy/types': 3.3.0 + tslib: 2.6.3 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt + optional: true + '@aws-sdk/credential-provider-sso@3.621.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))': dependencies: '@aws-sdk/client-sso': 3.621.0 @@ -15185,6 +15299,37 @@ snapshots: '@smithy/types': 3.3.0 tslib: 2.6.3 + '@aws-sdk/credential-provider-web-identity@3.621.0(@aws-sdk/client-sts@3.623.0)': + dependencies: + '@aws-sdk/client-sts': 3.623.0 + '@aws-sdk/types': 3.609.0 + '@smithy/property-provider': 3.1.3 + '@smithy/types': 3.3.0 + tslib: 2.6.3 + + '@aws-sdk/credential-providers@3.621.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0))': + dependencies: + '@aws-sdk/client-cognito-identity': 3.621.0 + '@aws-sdk/client-sso': 3.621.0 + '@aws-sdk/client-sts': 3.621.0 + '@aws-sdk/credential-provider-cognito-identity': 3.621.0 + '@aws-sdk/credential-provider-env': 3.620.1 + '@aws-sdk/credential-provider-http': 3.621.0 + '@aws-sdk/credential-provider-ini': 3.621.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0))(@aws-sdk/client-sts@3.621.0) + '@aws-sdk/credential-provider-node': 3.621.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0))(@aws-sdk/client-sts@3.621.0) + '@aws-sdk/credential-provider-process': 3.620.1 + '@aws-sdk/credential-provider-sso': 3.621.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0)) + '@aws-sdk/credential-provider-web-identity': 3.621.0(@aws-sdk/client-sts@3.621.0) + '@aws-sdk/types': 3.609.0 + '@smithy/credential-provider-imds': 3.2.0 + '@smithy/property-provider': 3.1.3 + '@smithy/types': 3.3.0 + tslib: 2.6.3 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt + optional: true + '@aws-sdk/credential-providers@3.621.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))': dependencies: '@aws-sdk/client-cognito-identity': 3.621.0 @@ -15338,7 +15483,7 @@ snapshots: '@smithy/types': 3.3.0 tslib: 2.6.3 - '@aws-sdk/token-providers@3.614.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))': + '@aws-sdk/token-providers@3.614.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0))': dependencies: '@aws-sdk/client-sso-oidc': 3.623.0(@aws-sdk/client-sts@3.621.0) '@aws-sdk/types': 3.609.0 @@ -15346,6 +15491,16 @@ snapshots: '@smithy/shared-ini-file-loader': 3.1.4 '@smithy/types': 3.3.0 tslib: 2.6.3 + optional: true + + '@aws-sdk/token-providers@3.614.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))': + dependencies: + '@aws-sdk/client-sso-oidc': 3.623.0(@aws-sdk/client-sts@3.623.0) + '@aws-sdk/types': 3.609.0 + '@smithy/property-provider': 3.1.3 + '@smithy/shared-ini-file-loader': 3.1.4 + '@smithy/types': 3.3.0 + tslib: 2.6.3 '@aws-sdk/types@3.609.0': dependencies: @@ -18233,7 +18388,7 @@ snapshots: deepmerge: 4.3.1 get-port: 5.1.1 http-status: 1.6.2 - mongoose: 6.12.3(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0)) + mongoose: 6.12.3(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0)) mongoose-aggregate-paginate-v2: 1.0.6 mongoose-paginate-v2: 1.7.22 payload: 2.25.0(@swc/helpers@0.5.5)(@types/react@18.3.3)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))(webpack-cli@4.10.0)) @@ -24979,6 +25134,12 @@ snapshots: dependencies: '@types/hast': 3.0.4 + hast-util-sanitize@5.0.1: + dependencies: + '@types/hast': 3.0.4 + '@ungap/structured-clone': 1.2.0 + unist-util-position: 5.0.0 + hast-util-to-estree@3.1.0: dependencies: '@types/estree': 1.0.5 @@ -25000,6 +25161,20 @@ snapshots: transitivePeerDependencies: - supports-color + hast-util-to-html@9.0.2: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.2 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-whitespace: 3.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.0 + property-information: 6.5.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.4 + zwitch: 2.0.4 + hast-util-to-jsx-runtime@2.3.0: dependencies: '@types/estree': 1.0.5 @@ -25094,6 +25269,8 @@ snapshots: readable-stream: 1.0.34 through2: 0.4.2 + html-void-elements@3.0.0: {} + html-webpack-plugin@5.5.3(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))(webpack-cli@4.10.0)): dependencies: '@types/html-minifier-terser': 6.1.0 @@ -26970,7 +27147,7 @@ snapshots: fn-args: 5.0.0 fs-extra: 10.1.0 lodash: 4.17.21 - mongodb: 4.17.1(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0)) + mongodb: 4.17.1(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0)) p-each-series: 2.2.0 miller-rabin@4.0.1: @@ -27103,6 +27280,18 @@ snapshots: '@types/whatwg-url': 8.2.2 whatwg-url: 11.0.0 + mongodb@4.17.1(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0)): + dependencies: + bson: 4.7.2 + mongodb-connection-string-url: 2.6.0 + socks: 2.8.3 + optionalDependencies: + '@aws-sdk/credential-providers': 3.621.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0)) + '@mongodb-js/saslprep': 1.1.8 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt + mongodb@4.17.1(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0)): dependencies: bson: 4.7.2 @@ -27119,6 +27308,20 @@ snapshots: mongoose-paginate-v2@1.7.22: {} + mongoose@6.12.3(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0)): + dependencies: + bson: 4.7.2 + kareem: 2.5.1 + mongodb: 4.17.1(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0)) + mpath: 0.9.0 + mquery: 4.0.3 + ms: 2.1.3 + sift: 16.0.1 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt + - supports-color + mongoose@6.12.3(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0)): dependencies: bson: 4.7.2 @@ -29049,6 +29252,14 @@ snapshots: space-separated-tokens: 1.1.5 unist-util-visit: 2.0.3 + remark-html@16.0.1: + dependencies: + '@types/mdast': 4.0.4 + hast-util-sanitize: 5.0.1 + hast-util-to-html: 9.0.2 + mdast-util-to-hast: 13.2.0 + unified: 11.0.5 + remark-mdx@3.0.1: dependencies: mdast-util-mdx: 3.0.0 @@ -29079,6 +29290,21 @@ snapshots: mdast-util-to-string: 1.1.0 unist-util-visit: 2.0.3 + remark-stringify@11.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-to-markdown: 2.1.0 + unified: 11.0.5 + + remark@15.0.1: + dependencies: + '@types/mdast': 4.0.4 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + renderkid@3.0.0: dependencies: css-select: 4.3.0 From 8558abdf0f799cec1917bab40972db1f2327c4a0 Mon Sep 17 00:00:00 2001 From: Kipruto <43873157+kelvinkipruto@users.noreply.github.com> Date: Tue, 3 Sep 2024 12:31:03 +0300 Subject: [PATCH 07/20] Improve fetching blog function --- apps/engineeringblog/app/[slug]/page.tsx | 29 +-------- apps/engineeringblog/app/page.tsx | 31 +-------- .../components/Article/ArticleCard.tsx | 22 ++----- .../components/Article/ArticleContent.tsx | 24 ++----- .../{ArtilceList.tsx => ArticleList.tsx} | 25 +++---- .../components/Article/index.ts | 4 +- apps/engineeringblog/utils/index.ts | 65 +++++++++++++++++++ 7 files changed, 92 insertions(+), 108 deletions(-) rename apps/engineeringblog/components/Article/{ArtilceList.tsx => ArticleList.tsx} (63%) create mode 100644 apps/engineeringblog/utils/index.ts diff --git a/apps/engineeringblog/app/[slug]/page.tsx b/apps/engineeringblog/app/[slug]/page.tsx index 7919d7ab3..d4a8f3f8f 100644 --- a/apps/engineeringblog/app/[slug]/page.tsx +++ b/apps/engineeringblog/app/[slug]/page.tsx @@ -1,33 +1,6 @@ -import fs from "fs"; -import matter from "gray-matter"; -import path from "path"; -import { format } from "date-fns"; import { ArticleContent } from "@/engineeringblog/components/Article"; import { Box } from "@mui/material"; -import { remark } from "remark"; -import html from "remark-html"; -import remarkMdx from "remark-mdx"; - -async function getBlogPost(slug: string) { - const postsDirectory = path.join(process.cwd(), "content"); - const filePath = path.join(postsDirectory, `${slug}.mdx`); - const fileContents = fs.readFileSync(filePath, "utf8"); - const { data, content } = matter(fileContents); - - const processedContent = await remark() - .use(remarkMdx) - .use(html) - .process(content); - - return { - slug, - title: data.title, - description: data.description, - date: format(new Date(data.date), "MMM dd, yyyy"), - featuredImage: data.featuredImage, - content: processedContent.toString(), - }; -} +import { getBlogPost } from "@/engineeringblog/utils"; export default async function Page({ params }: { params: { slug: string } }) { const post = await getBlogPost(params.slug); diff --git a/apps/engineeringblog/app/page.tsx b/apps/engineeringblog/app/page.tsx index 3d3ad5f64..e0bdfa222 100644 --- a/apps/engineeringblog/app/page.tsx +++ b/apps/engineeringblog/app/page.tsx @@ -1,31 +1,6 @@ import { Container } from "@mui/material"; -import fs from "fs"; -import path from "path"; -import matter from "gray-matter"; -import { format } from "date-fns"; -import { ArtilceList } from "@/engineeringblog/components/Article"; - -export function getAllPosts() { - const postsDirectory = path.join(process.cwd(), "content"); - const fileNames = fs - .readdirSync(postsDirectory) - .filter((fileName) => fileName.endsWith(".mdx")); - - return fileNames.map((fileName) => { - const filePath = path.join(postsDirectory, fileName); - const fileContents = fs.readFileSync(filePath, "utf8"); - const { data, content } = matter(fileContents); - - return { - slug: fileName.replace(/\.mdx$/, ""), - title: data.title, - description: data.description, - date: format(new Date(data.date), "MMM dd, yyyy"), - featuredImage: data?.featuredImage, - content, - }; - }); -} +import { ArticleList } from "@/engineeringblog/components/Article"; +import { getAllPosts } from "@/engineeringblog/utils"; export default async function index() { const posts = await getAllPosts(); @@ -41,7 +16,7 @@ export default async function index() { py: { xs: 2.5, sm: 5 }, }} > - + ); } diff --git a/apps/engineeringblog/components/Article/ArticleCard.tsx b/apps/engineeringblog/components/Article/ArticleCard.tsx index 1d1ec2c0c..f4ff5f66e 100644 --- a/apps/engineeringblog/components/Article/ArticleCard.tsx +++ b/apps/engineeringblog/components/Article/ArticleCard.tsx @@ -1,3 +1,4 @@ +import { ArticleWithoutContent } from "@/engineeringblog/utils"; import { Card, CardActionArea, @@ -7,25 +8,14 @@ import { } from "@mui/material"; import React from "react"; -type Article = { - slug: string; - title: string; - description: string; - date: string; - featuredImage: string; - content: string; -}; - -export type ArticleCardProps = { - article: Article; -}; - const ArticleCard = React.forwardRef(function ArticleCard( - props: ArticleCardProps, + { + article, + }: { + article: ArticleWithoutContent; + }, ref: React.Ref, ) { - const { article } = props; - return ( , ) { - const { - article: { title, description, featuredImage, date, content }, - } = props; + const { title, description, featuredImage, date, content } = article; return ( diff --git a/apps/engineeringblog/components/Article/ArtilceList.tsx b/apps/engineeringblog/components/Article/ArticleList.tsx similarity index 63% rename from apps/engineeringblog/components/Article/ArtilceList.tsx rename to apps/engineeringblog/components/Article/ArticleList.tsx index 4903730bd..252967b7d 100644 --- a/apps/engineeringblog/components/Article/ArtilceList.tsx +++ b/apps/engineeringblog/components/Article/ArticleList.tsx @@ -4,25 +4,16 @@ import { Section } from "@commons-ui/core"; import { Grid } from "@mui/material"; import React from "react"; import ArticleCard from "./ArticleCard"; +import { ArticleWithoutContent } from "@/engineeringblog/utils"; -type Article = { - slug: string; - title: string; - description: string; - date: string; - featuredImage: string; - content: string; -}; - -export type ArticleCardProps = { - articles: Article[]; -}; - -const ArtilceList = React.forwardRef(function ArtilceList( - props: ArticleCardProps, +const ArticleList = React.forwardRef(function ArtilceList( + { + articles, + }: { + articles: ArticleWithoutContent[]; + }, ref: React.Ref, ) { - const { articles } = props; return (
; + +export function getAllPosts(): ArticleWithoutContent[] { + const postsDirectory = path.join(process.cwd(), "content"); + const fileNames = fs + .readdirSync(postsDirectory) + .filter((fileName) => fileName.endsWith(".mdx")); + + const posts = fileNames.map((fileName) => { + const filePath = path.join(postsDirectory, fileName); + const fileContents = fs.readFileSync(filePath, "utf8"); + const { data } = matter(fileContents); + + return { + slug: fileName.replace(/\.mdx$/, ""), + title: data.title, + description: data.description, + date: data.date, + formattedDate: format(new Date(data.date), "MMM dd, yyyy"), + featuredImage: data?.featuredImage, + }; + }); + + posts.sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime()); + + return posts; +} + +export async function getBlogPost(slug: string): Promise
{ + const postsDirectory = path.join(process.cwd(), "content"); + const filePath = path.join(postsDirectory, `${slug}.mdx`); + const fileContents = fs.readFileSync(filePath, "utf8"); + const { data, content } = matter(fileContents); + + const processedContent = await remark() + .use(remarkMdx) + .use(html) + .process(content); + + return { + slug, + title: data.title, + description: data.description, + date: format(new Date(data.date), "MMM dd, yyyy"), + featuredImage: data.featuredImage, + content: processedContent.toString(), + }; +} From ae2108a23b4a876b68821369ddcbfb314c6f93fb Mon Sep 17 00:00:00 2001 From: Kipruto <43873157+kelvinkipruto@users.noreply.github.com> Date: Tue, 3 Sep 2024 12:55:29 +0300 Subject: [PATCH 08/20] Empty component Signed-off-by: Kipruto <43873157+kelvinkipruto@users.noreply.github.com> --- apps/engineeringblog/app/page.tsx | 5 +- .../assets/images/1920x668px bg - 2 2.png | Bin 0 -> 15008 bytes .../components/Empty/Empty.tsx | 73 ++++++++++++++++++ .../engineeringblog/components/Empty/index.ts | 3 + 4 files changed, 79 insertions(+), 2 deletions(-) create mode 100644 apps/engineeringblog/assets/images/1920x668px bg - 2 2.png create mode 100644 apps/engineeringblog/components/Empty/Empty.tsx create mode 100644 apps/engineeringblog/components/Empty/index.ts diff --git a/apps/engineeringblog/app/page.tsx b/apps/engineeringblog/app/page.tsx index e0bdfa222..67de2f9bb 100644 --- a/apps/engineeringblog/app/page.tsx +++ b/apps/engineeringblog/app/page.tsx @@ -1,12 +1,13 @@ import { Container } from "@mui/material"; import { ArticleList } from "@/engineeringblog/components/Article"; import { getAllPosts } from "@/engineeringblog/utils"; +import Empty from "@/engineeringblog/components/Empty"; export default async function index() { const posts = await getAllPosts(); - if (!posts) { - return
No posts!
; + if (!posts.length) { + return ; } return ( diff --git a/apps/engineeringblog/assets/images/1920x668px bg - 2 2.png b/apps/engineeringblog/assets/images/1920x668px bg - 2 2.png new file mode 100644 index 0000000000000000000000000000000000000000..39c60da93f54a4afae25df35ad88a7b17f539551 GIT binary patch literal 15008 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 D2T+A< literal 0 HcmV?d00001 diff --git a/apps/engineeringblog/components/Empty/Empty.tsx b/apps/engineeringblog/components/Empty/Empty.tsx new file mode 100644 index 000000000..c8ec29107 --- /dev/null +++ b/apps/engineeringblog/components/Empty/Empty.tsx @@ -0,0 +1,73 @@ +"use client"; +import { Section } from "@commons-ui/core"; +import React from "react"; +import bg from "@/engineeringblog/assets/images/1920x668px bg - 2 2.png"; +import { alpha, Box, Typography } from "@mui/material"; + +const Empty = React.forwardRef(function Empty() { + return ( + ({ + py: { xs: 7.5, md: 10, lg: 12.5 }, + display: "flex", + justifyContent: "center", + width: "100%", + position: "relative", + backgroundColor: "palette.background.main", + backgroundImage: `url('${bg.src}')`, + backgroundPosition: "top left", + "&:before": { + content: '""', + top: 0, + left: 0, + position: "absolute", + height: "100%", + width: "100%", + background: `linear-gradient(to right, 'palette.background.main', transparent 30%)`, + [theme.breakpoints.up("sm")]: { + background: `linear-gradient(to right, 'palette.background.main' 20%, transparent 30%)`, + }, + [theme.breakpoints.up("md")]: { + background: `linear-gradient(to right, ${ + theme.palette.background.default + } 30%, transparent 40%, transparent 95%, ${alpha( + theme.palette.background.default, + 0.7, + )} 98%)`, + }, + [theme.breakpoints.up("lg")]: { + background: `linear-gradient(to right, ${theme.palette.background.default} 30%, transparent 40%, transparent 95%, ${theme.palette.background.default} 99%)`, + }, + [theme.breakpoints.up("xl")]: { + background: `linear-gradient(to right, ${theme.palette.background.default} 35%, transparent 45%, transparent 80%, ${theme.palette.background.default} 90%)`, + }, + }, + })} + > +
+ + Whoops! No articles found. + + + We are working on creating more content for you. Stay tuned! + +
+
+ ); +}); + +export default Empty; diff --git a/apps/engineeringblog/components/Empty/index.ts b/apps/engineeringblog/components/Empty/index.ts new file mode 100644 index 000000000..4e548c9c3 --- /dev/null +++ b/apps/engineeringblog/components/Empty/index.ts @@ -0,0 +1,3 @@ +import Empty from "./Empty"; + +export default Empty; From 9f7532352fab659e6998115fa30f443096a709ed Mon Sep 17 00:00:00 2001 From: Kipruto <43873157+kelvinkipruto@users.noreply.github.com> Date: Tue, 3 Sep 2024 14:29:18 +0300 Subject: [PATCH 09/20] Working syntax highlighting Signed-off-by: Kipruto <43873157+kelvinkipruto@users.noreply.github.com> --- .../components/Article/ArticleContent.tsx | 7 +- .../components/Markdown/Markdown.tsx | 82 ++ .../components/Markdown/index.ts | 3 + apps/engineeringblog/utils/index.ts | 18 +- pnpm-lock.yaml | 1229 ++++++++++++++--- 5 files changed, 1162 insertions(+), 177 deletions(-) create mode 100644 apps/engineeringblog/components/Markdown/Markdown.tsx create mode 100644 apps/engineeringblog/components/Markdown/index.ts diff --git a/apps/engineeringblog/components/Article/ArticleContent.tsx b/apps/engineeringblog/components/Article/ArticleContent.tsx index 63005596b..3b3202652 100644 --- a/apps/engineeringblog/components/Article/ArticleContent.tsx +++ b/apps/engineeringblog/components/Article/ArticleContent.tsx @@ -5,7 +5,7 @@ import { Figure } from "@commons-ui/next"; import { Box } from "@mui/material"; import ArticleHeader from "./ArticleHeader"; import { Article } from "@/engineeringblog/utils"; - +import Markdown from "@/engineeringblog/components/Markdown"; const ArticleContent = React.forwardRef(function ArticleContent( { article, @@ -42,10 +42,7 @@ const ArticleContent = React.forwardRef(function ArticleContent( }} ref={ref} > - +
); diff --git a/apps/engineeringblog/components/Markdown/Markdown.tsx b/apps/engineeringblog/components/Markdown/Markdown.tsx new file mode 100644 index 000000000..5a9e6ad10 --- /dev/null +++ b/apps/engineeringblog/components/Markdown/Markdown.tsx @@ -0,0 +1,82 @@ +import { FC } from "react"; +import ReactMarkdown from "react-markdown"; +import { PrismLight as SyntaxHighlighter } from "react-syntax-highlighter"; +import tsx from "react-syntax-highlighter/dist/cjs/languages/prism/tsx"; +import typescript from "react-syntax-highlighter/dist/cjs/languages/prism/typescript"; +import javascript from "react-syntax-highlighter/dist/cjs/languages/prism/javascript"; +import scss from "react-syntax-highlighter/dist/cjs/languages/prism/scss"; +import bash from "react-syntax-highlighter/dist/cjs/languages/prism/bash"; +import markdown from "react-syntax-highlighter/dist/cjs/languages/prism/markdown"; +import json from "react-syntax-highlighter/dist/cjs/languages/prism/json"; + +import rangeParser from "parse-numeric-range"; +import { oneDark } from "react-syntax-highlighter/dist/cjs/styles/prism"; + +SyntaxHighlighter.registerLanguage("tsx", tsx); +SyntaxHighlighter.registerLanguage("typescript", typescript); +SyntaxHighlighter.registerLanguage("scss", scss); +SyntaxHighlighter.registerLanguage("bash", bash); +SyntaxHighlighter.registerLanguage("markdown", markdown); +SyntaxHighlighter.registerLanguage("json", json); +SyntaxHighlighter.registerLanguage("js", javascript); + +type MarkdownProps = { + markdown: string; +}; + +const Markdown: FC = ({ markdown }) => { + const syntaxTheme = oneDark; + + const MarkdownComponents: { + code: FC<{ + node: any; + inline: boolean; + className: string; + [key: string]: any; + }>; + } = { + code({ node, inline, className, ...props }) { + const hasLang = /language-(\w+)/.exec(className || ""); + const hasMeta = node?.data?.meta; + + const applyHighlights = (lineNumber: number): { data?: string } => { + if (hasMeta) { + const RE = /{([\d,-]+)}/; + const metadata = node.data.meta?.replace(/\s/g, ""); + const strlineNumbers = RE?.test(metadata) + ? RE?.exec(metadata)![1] + : "0"; + const highlightLines = rangeParser(strlineNumbers); + return highlightLines.includes(lineNumber) + ? { data: "highlight" } + : {}; + } else { + return {}; + } + }; + + return hasLang ? ( + + {props.children} + + ) : ( + + ); + }, + }; + + return ( + {markdown} + ); +}; + +export default Markdown; diff --git a/apps/engineeringblog/components/Markdown/index.ts b/apps/engineeringblog/components/Markdown/index.ts new file mode 100644 index 000000000..fa8d4ff12 --- /dev/null +++ b/apps/engineeringblog/components/Markdown/index.ts @@ -0,0 +1,3 @@ +import Markdown from "./Markdown"; + +export default Markdown; diff --git a/apps/engineeringblog/utils/index.ts b/apps/engineeringblog/utils/index.ts index 2abe730b2..ec3d62c32 100644 --- a/apps/engineeringblog/utils/index.ts +++ b/apps/engineeringblog/utils/index.ts @@ -5,6 +5,16 @@ import { format } from "date-fns"; import { remark } from "remark"; import html from "remark-html"; import remarkMdx from "remark-mdx"; +import remarkParse from "remark-parse"; +import remarkRehype from "remark-rehype"; +import rehypeFormat from "rehype-format"; +import remarkFrontmatter from "remark-frontmatter"; +import remarkParseFrontmatter from "remark-parse-frontmatter"; +import rehypeStringify from "rehype-stringify"; +import prism from "remark-prism"; +import rehypeRaw from "rehype-raw"; +import { unified } from "unified"; +import rehypeHighlight from "rehype-highlight"; export type Article = { slug: string; @@ -49,10 +59,7 @@ export async function getBlogPost(slug: string): Promise
{ const fileContents = fs.readFileSync(filePath, "utf8"); const { data, content } = matter(fileContents); - const processedContent = await remark() - .use(remarkMdx) - .use(html) - .process(content); + // const processedContent = await unified().processSync(content); return { slug, @@ -60,6 +67,7 @@ export async function getBlogPost(slug: string): Promise
{ description: data.description, date: format(new Date(data.date), "MMM dd, yyyy"), featuredImage: data.featuredImage, - content: processedContent.toString(), + // processedContent: processedContent.toString(), + content, }; } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 17043ad1d..e863bbac0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -942,21 +942,60 @@ importers: next: specifier: ^14.2.5 version: 14.2.5(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.45.3)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.69.4) + parse-numeric-range: + specifier: ^1.3.0 + version: 1.3.0 react: specifier: ^18 version: 18.3.1 react-dom: specifier: ^18 version: 18.3.1(react@18.3.1) + react-markdown: + specifier: ^9.0.1 + version: 9.0.1(@types/react@18.3.3)(react@18.3.1) + react-syntax-highlighter: + specifier: ^15.5.0 + version: 15.5.0(react@18.3.1) + rehype-format: + specifier: ^5.0.0 + version: 5.0.0 + rehype-highlight: + specifier: ^7.0.0 + version: 7.0.0 + rehype-raw: + specifier: ^7.0.0 + version: 7.0.0 + rehype-stringify: + specifier: ^10.0.0 + version: 10.0.0 remark: specifier: ^15.0.1 version: 15.0.1 + remark-frontmatter: + specifier: ^5.0.0 + version: 5.0.0 remark-html: specifier: ^16.0.1 version: 16.0.1 remark-mdx: specifier: ^3.0.1 version: 3.0.1 + remark-parse: + specifier: ^11.0.0 + version: 11.0.0 + remark-parse-frontmatter: + specifier: ^1.0.3 + version: 1.0.3 + remark-prism: + specifier: ^1.3.6 + version: 1.3.6 + remark-rehype: + specifier: ^11.1.0 + version: 11.1.0 + unified: + specifier: ^11.0.5 + version: 11.0.5 devDependencies: '@svgr/webpack': specifier: ^8.1.0 @@ -973,6 +1012,12 @@ importers: '@types/react-dom': specifier: ^18 version: 18.3.0 + '@types/react-syntax-highlighter': + specifier: ^15.5.13 + version: 15.5.13 + '@types/remark-prism': + specifier: ^1.3.7 + version: 1.3.7 eslint: specifier: ^8 version: 8.57.0 @@ -991,6 +1036,9 @@ importers: prettier: specifier: ^3.3.3 version: 3.3.3 + prismjs: + specifier: ^1.29.0 + version: 1.29.0 typescript: specifier: ^5 version: 5.5.4 @@ -6584,6 +6632,9 @@ packages: '@types/graceful-fs@4.1.9': resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} + '@types/hast@2.3.10': + resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==} + '@types/hast@3.0.4': resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} @@ -6698,12 +6749,18 @@ packages: '@types/react-lifecycles-compat@3.0.4': resolution: {integrity: sha512-1CM48Y9ztL5S4wjt7DK2izrkgPp/Ql0zCJu/vHzhgl7J+BD4UbSGjHN1M2TlePms472JvOazUtAO1/G3oFZqIQ==} + '@types/react-syntax-highlighter@15.5.13': + resolution: {integrity: sha512-uLGJ87j6Sz8UaBAooU0T6lWJ0dBmjZgN1PZTrj05TNql2/XpC6+4HhMT5syIdFUUt+FASfCeLLv4kBygNU+8qA==} + '@types/react-transition-group@4.4.10': resolution: {integrity: sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q==} '@types/react@18.3.3': resolution: {integrity: sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==} + '@types/remark-prism@1.3.7': + resolution: {integrity: sha512-cPdp6UXuMi8ikq6RtMuVoZIYn7Kxi6+ToiJ4YuT0f8Ha6DP/cxne+MS3W2ddlQrBb7GZDIu4YGD2geeTIU9Jmg==} + '@types/request@2.48.12': resolution: {integrity: sha512-G3sY+NpsA9jnwm0ixhAFQSJ3Q9JkpLZpJbI3GMv0mIAT0y3mRabYeINzal5WOChIiaTEGQYlHOKgkaM9EisWHw==} @@ -6963,6 +7020,9 @@ packages: ace-builds@1.35.4: resolution: {integrity: sha512-r0KQclhZ/uk5a4zOqRYQkJuQuu4vFMiA6VTj54Tk4nI1TUR3iEMMppZkWbNoWEgWwv4ciDloObb9Rf4V55Qgjw==} + acorn-globals@6.0.0: + resolution: {integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==} + acorn-globals@7.0.1: resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} @@ -7404,6 +7464,9 @@ packages: browser-assert@1.2.1: resolution: {integrity: sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==} + browser-process-hrtime@1.0.0: + resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==} + browserify-aes@1.2.0: resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} @@ -7717,6 +7780,9 @@ packages: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} + comma-separated-tokens@1.0.8: + resolution: {integrity: sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==} + comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} @@ -7951,6 +8017,9 @@ packages: css-select@5.1.0: resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + css-selector-parser@1.4.1: + resolution: {integrity: sha512-HYPSb7y/Z7BNDCOrakL4raGO2zltZkbeXyAd6Tg9obzix6QhzxCotdBl6VT0Dv4vZfJGVz3WL/xaEI9Ly3ul0g==} + css-tree@2.2.1: resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} @@ -7987,6 +8056,9 @@ packages: cssom@0.3.8: resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} + cssom@0.4.4: + resolution: {integrity: sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==} + cssom@0.5.0: resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==} @@ -8127,6 +8199,10 @@ packages: resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==} engines: {node: '>=0.10'} + data-urls@2.0.0: + resolution: {integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==} + engines: {node: '>=10'} + data-urls@3.0.2: resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} engines: {node: '>=12'} @@ -8379,6 +8455,11 @@ packages: domelementtype@2.3.0: resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + domexception@2.0.1: + resolution: {integrity: sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==} + engines: {node: '>=8'} + deprecated: Use your platform's native DOMException instead + domexception@4.0.0: resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==} engines: {node: '>=12'} @@ -8601,6 +8682,10 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + escodegen@2.1.0: resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} engines: {node: '>=6.0'} @@ -8999,6 +9084,12 @@ packages: fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + fault@1.0.4: + resolution: {integrity: sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==} + + fault@2.0.1: + resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==} + fb-watchman@2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} @@ -9138,10 +9229,18 @@ packages: resolution: {integrity: sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==} engines: {node: '>= 0.12'} + form-data@3.0.1: + resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==} + engines: {node: '>= 6'} + form-data@4.0.0: resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} engines: {node: '>= 6'} + format@0.2.2: + resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} + engines: {node: '>=0.4.x'} + formik-mui-lab@1.0.0: resolution: {integrity: sha512-4YSpaFXJ4fJ+er2Eu/XNcKyrrcUEWQiwxWjnSbki9bxRjjSDiKWCrRlDgM+vdl/HEiO+XrwrxA5I9M+xU4r1tg==} peerDependencies: @@ -9531,12 +9630,36 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} + hast-util-embedded@3.0.0: + resolution: {integrity: sha512-naH8sld4Pe2ep03qqULEtvYr7EjrLK2QHY8KJR6RJkTUjPGObe1vnx585uzem2hGra+s1q08DZZpfgDVYRbaXA==} + + hast-util-from-parse5@8.0.1: + resolution: {integrity: sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==} + + hast-util-has-property@3.0.0: + resolution: {integrity: sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA==} + hast-util-heading-rank@3.0.0: resolution: {integrity: sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA==} + hast-util-is-body-ok-link@3.0.0: + resolution: {integrity: sha512-VFHY5bo2nY8HiV6nir2ynmEB1XkxzuUffhEGeVx7orbu/B1KaGyeGgMZldvMVx5xWrDlLLG/kQ6YkJAMkBEx0w==} + hast-util-is-element@3.0.0: resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} + hast-util-parse-selector@2.2.5: + resolution: {integrity: sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==} + + hast-util-parse-selector@4.0.0: + resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} + + hast-util-phrasing@3.0.1: + resolution: {integrity: sha512-6h60VfI3uBQUxHqTyMymMZnEbNl1XmEGtOxxKYL7stY2o601COo62AWAYBQR9lZbYXYSBoxag8UpPRXK+9fqSQ==} + + hast-util-raw@9.0.4: + resolution: {integrity: sha512-LHE65TD2YiNsHD3YuXcKPHXPLuYh/gjp12mOfU8jxSrm1f/yJpsb0F/KKljS6U9LJoP0Ux+tCe8iJ2AsPzTdgA==} + hast-util-sanitize@5.0.1: resolution: {integrity: sha512-IGrgWLuip4O2nq5CugXy4GI2V8kx4sFVy5Hd4vF7AR2gxS0N9s7nEAVUyeMtZKZvzrxVsHt73XdTsno1tClIkQ==} @@ -9549,12 +9672,24 @@ packages: hast-util-to-jsx-runtime@2.3.0: resolution: {integrity: sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==} + hast-util-to-parse5@8.0.0: + resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==} + hast-util-to-string@3.0.0: resolution: {integrity: sha512-OGkAxX1Ua3cbcW6EJ5pT/tslVb90uViVkcJ4ZZIMW/R33DX/AkcJcRrPebPwJkHYwlDHXz4aIwvAAaAdtrACFA==} + hast-util-to-text@4.0.2: + resolution: {integrity: sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==} + hast-util-whitespace@3.0.0: resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + hastscript@6.0.0: + resolution: {integrity: sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==} + + hastscript@8.0.0: + resolution: {integrity: sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==} + he@1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true @@ -9562,6 +9697,13 @@ packages: help-me@4.2.0: resolution: {integrity: sha512-TAOnTB8Tz5Dw8penUuzHVrKNKlCIbwwbHnXraNJxPwf8LRtE2HlM84RYuezMFcwOJmoYOCWVDyJ8TQGxn9PgxA==} + highlight.js@10.7.3: + resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} + + highlight.js@11.9.0: + resolution: {integrity: sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw==} + engines: {node: '>=12.0.0'} + history@4.10.1: resolution: {integrity: sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==} @@ -9575,6 +9717,10 @@ packages: resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} engines: {node: '>=0.10.0'} + html-encoding-sniffer@2.0.1: + resolution: {integrity: sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==} + engines: {node: '>=10'} + html-encoding-sniffer@3.0.0: resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} engines: {node: '>=12'} @@ -9605,6 +9751,9 @@ packages: resolution: {integrity: sha512-QY6S+hZ0f5m1WT8WffYN+Hg+xm/w5I8XeUcAq/ZYP5wVC8xbKi4Whhru3FtrAebD5EhBW8rmFzkDI6eCAuFe2w==} hasBin: true + html-url-attributes@3.0.0: + resolution: {integrity: sha512-/sXbVCWayk6GDVg3ctOX6nxaVj7So40FcFAnWlWGNAB1LpYKcV5Cd10APjPjW80O7zYW2MsjBV4zZ7IZO5fVow==} + html-void-elements@3.0.0: resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} @@ -9626,6 +9775,9 @@ packages: webpack: optional: true + html-whitespace-sensitive-tag-names@3.0.0: + resolution: {integrity: sha512-KlClZ3/Qy5UgvpvVvDomGhnQhNWH5INE8GwvSIQ9CWt1K0zbbXrl7eN5bWaafOZgtmO3jMPwUqmrmEwinhPq1w==} + htmlparser2@6.1.0: resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} @@ -10339,6 +10491,15 @@ packages: '@babel/preset-env': optional: true + jsdom@16.7.0: + resolution: {integrity: sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==} + engines: {node: '>=10'} + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + jsdom@20.0.3: resolution: {integrity: sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==} engines: {node: '>=14'} @@ -10495,6 +10656,10 @@ packages: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} + kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + klona@2.0.6: resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} engines: {node: '>= 8'} @@ -10590,6 +10755,9 @@ packages: lodash.isequal@4.5.0: resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + lodash.iteratee@4.7.0: + resolution: {integrity: sha512-yv3cSQZmfpbIKo4Yo45B1taEvxjNvcpF1CEOc0Y6dEyvhPIfEJE3twDwPgWTPQubcSgXyBwBKG6wpQvWMDOf6Q==} + lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} @@ -10623,6 +10791,12 @@ packages: lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + lowlight@1.20.0: + resolution: {integrity: sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==} + + lowlight@3.1.0: + resolution: {integrity: sha512-CEbNVoSikAxwDMDPjXlqlFYiZLkDJHwyGu/MfOsJnF3d7f3tds5J3z8s/l9TMXhzfsJCCJEAsD78842mwmg0PQ==} + lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} @@ -10704,9 +10878,15 @@ packages: mdast-util-from-markdown@0.8.5: resolution: {integrity: sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==} + mdast-util-from-markdown@1.3.1: + resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==} + mdast-util-from-markdown@2.0.1: resolution: {integrity: sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==} + mdast-util-frontmatter@2.0.1: + resolution: {integrity: sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==} + mdast-util-mdx-expression@2.0.0: resolution: {integrity: sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw==} @@ -10719,12 +10899,18 @@ packages: mdast-util-mdxjs-esm@2.0.1: resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==} + mdast-util-phrasing@3.0.1: + resolution: {integrity: sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==} + mdast-util-phrasing@4.1.0: resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} mdast-util-to-hast@13.2.0: resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} + mdast-util-to-markdown@1.5.0: + resolution: {integrity: sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==} + mdast-util-to-markdown@2.1.0: resolution: {integrity: sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==} @@ -10734,6 +10920,9 @@ packages: mdast-util-to-string@2.0.0: resolution: {integrity: sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==} + mdast-util-to-string@3.2.0: + resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==} + mdast-util-to-string@4.0.0: resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} @@ -10788,9 +10977,15 @@ packages: resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} engines: {node: '>= 0.6'} + micromark-core-commonmark@1.1.0: + resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==} + micromark-core-commonmark@2.0.1: resolution: {integrity: sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==} + micromark-extension-frontmatter@2.0.0: + resolution: {integrity: sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==} + micromark-extension-mdx-expression@3.0.0: resolution: {integrity: sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ==} @@ -10806,72 +11001,132 @@ packages: micromark-extension-mdxjs@3.0.0: resolution: {integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==} + micromark-factory-destination@1.1.0: + resolution: {integrity: sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==} + micromark-factory-destination@2.0.0: resolution: {integrity: sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==} + micromark-factory-label@1.1.0: + resolution: {integrity: sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==} + micromark-factory-label@2.0.0: resolution: {integrity: sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==} micromark-factory-mdx-expression@2.0.1: resolution: {integrity: sha512-F0ccWIUHRLRrYp5TC9ZYXmZo+p2AM13ggbsW4T0b5CRKP8KHVRB8t4pwtBgTxtjRmwrK0Irwm7vs2JOZabHZfg==} + micromark-factory-space@1.1.0: + resolution: {integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==} + micromark-factory-space@2.0.0: resolution: {integrity: sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==} + micromark-factory-title@1.1.0: + resolution: {integrity: sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==} + micromark-factory-title@2.0.0: resolution: {integrity: sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==} + micromark-factory-whitespace@1.1.0: + resolution: {integrity: sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==} + micromark-factory-whitespace@2.0.0: resolution: {integrity: sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==} + micromark-util-character@1.2.0: + resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==} + micromark-util-character@2.1.0: resolution: {integrity: sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==} + micromark-util-chunked@1.1.0: + resolution: {integrity: sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==} + micromark-util-chunked@2.0.0: resolution: {integrity: sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==} + micromark-util-classify-character@1.1.0: + resolution: {integrity: sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==} + micromark-util-classify-character@2.0.0: resolution: {integrity: sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==} + micromark-util-combine-extensions@1.1.0: + resolution: {integrity: sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==} + micromark-util-combine-extensions@2.0.0: resolution: {integrity: sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==} + micromark-util-decode-numeric-character-reference@1.1.0: + resolution: {integrity: sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==} + micromark-util-decode-numeric-character-reference@2.0.1: resolution: {integrity: sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==} + micromark-util-decode-string@1.1.0: + resolution: {integrity: sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==} + micromark-util-decode-string@2.0.0: resolution: {integrity: sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==} + micromark-util-encode@1.1.0: + resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==} + micromark-util-encode@2.0.0: resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==} micromark-util-events-to-acorn@2.0.2: resolution: {integrity: sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA==} + micromark-util-html-tag-name@1.2.0: + resolution: {integrity: sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==} + micromark-util-html-tag-name@2.0.0: resolution: {integrity: sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==} + micromark-util-normalize-identifier@1.1.0: + resolution: {integrity: sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==} + micromark-util-normalize-identifier@2.0.0: resolution: {integrity: sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==} + micromark-util-resolve-all@1.1.0: + resolution: {integrity: sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==} + micromark-util-resolve-all@2.0.0: resolution: {integrity: sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==} + micromark-util-sanitize-uri@1.2.0: + resolution: {integrity: sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==} + micromark-util-sanitize-uri@2.0.0: resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==} + micromark-util-subtokenize@1.1.0: + resolution: {integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==} + micromark-util-subtokenize@2.0.1: resolution: {integrity: sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==} + micromark-util-symbol@1.1.0: + resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==} + micromark-util-symbol@2.0.0: resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==} + micromark-util-types@1.1.0: + resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==} + micromark-util-types@2.0.0: resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==} micromark@2.11.4: resolution: {integrity: sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==} + micromark@3.2.0: + resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==} + micromark@4.0.0: resolution: {integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==} @@ -11469,10 +11724,19 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} + parse-numeric-range@1.3.0: + resolution: {integrity: sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==} + parse-passwd@1.0.0: resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} engines: {node: '>=0.10.0'} + parse5-htmlparser2-tree-adapter@6.0.1: + resolution: {integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==} + + parse5@6.0.1: + resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} + parse5@7.1.2: resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} @@ -11977,6 +12241,14 @@ packages: resolution: {integrity: sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==} engines: {node: '>= 0.8'} + prismjs@1.27.0: + resolution: {integrity: sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==} + engines: {node: '>=6'} + + prismjs@1.29.0: + resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==} + engines: {node: '>=6'} + probe-image-size@6.0.0: resolution: {integrity: sha512-99PZ5+RU4gqiTfK5ZDMDkZtn6eL4WlKfFyVJV7lFQvH3iGmQ85DqMTOdxorERO26LHkevR2qsxnHp0x/2UDJPA==} @@ -12013,6 +12285,9 @@ packages: prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + property-information@5.6.0: + resolution: {integrity: sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==} + property-information@6.5.0: resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} @@ -12239,6 +12514,12 @@ packages: react-lifecycles-compat@3.0.4: resolution: {integrity: sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==} + react-markdown@9.0.1: + resolution: {integrity: sha512-186Gw/vF1uRkydbsOIkcGXw7aHq0sZOCRFFjGrr7b9+nVZg4UfA4enXCaxm4fUzecU38sWfrNDitGhshuU7rdg==} + peerDependencies: + '@types/react': '>=18' + react: '>=18' + react-multi-carousel@2.8.5: resolution: {integrity: sha512-C5DAvJkfzR2JK9YixZ3oyF9x6R4LW6nzTpIXrl9Oujxi4uqP9SzVVCjl+JLM3tSdqdjAx/oWZK3dTVBSR73Q+w==} engines: {node: '>=8'} @@ -12351,6 +12632,11 @@ packages: peerDependencies: react: ^15.3.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 + react-syntax-highlighter@15.5.0: + resolution: {integrity: sha512-+zq2myprEnQmH5yw6Gqc8lD55QHnpKaU8TOcFeC/Lg/MQSs8UknEA0JC4nTZGFAXC2J2Hyj/ijJ7NlabyPi2gg==} + peerDependencies: + react: '>= 0.14.0' + react-test-renderer@18.3.1: resolution: {integrity: sha512-KkAgygexHUkQqtvvx/otwxtuFu5cVjfzTCtjXLH9boS19/Nbtg84zS7wIQn39G8IlrhThBpQsMKkq5ZHZIYFXA==} peerDependencies: @@ -12428,6 +12714,9 @@ packages: resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==} engines: {node: '>= 0.4'} + refractor@3.6.0: + resolution: {integrity: sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==} + regenerate-unicode-properties@10.1.1: resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==} engines: {node: '>=4'} @@ -12473,9 +12762,24 @@ packages: rehype-external-links@3.0.0: resolution: {integrity: sha512-yp+e5N9V3C6bwBeAC4n796kc86M4gJCdlVhiMTxIrJG5UHDMh+PJANf9heqORJbt1nrCbDwIlAZKjANIaVBbvw==} + rehype-format@5.0.0: + resolution: {integrity: sha512-kM4II8krCHmUhxrlvzFSptvaWh280Fr7UGNJU5DCMuvmAwGCNmGfi9CvFAQK6JDjsNoRMWQStglK3zKJH685Wg==} + + rehype-highlight@7.0.0: + resolution: {integrity: sha512-QtobgRgYoQaK6p1eSr2SD1i61f7bjF2kZHAQHxeCHAuJf7ZUDMvQ7owDq9YTkmar5m5TSUol+2D3bp3KfJf/oA==} + + rehype-minify-whitespace@6.0.0: + resolution: {integrity: sha512-i9It4YHR0Sf3GsnlR5jFUKXRr9oayvEk9GKQUkwZv6hs70OH9q3OCZrq9PpLvIGKt3W+JxBOxCidNVpH/6rWdA==} + + rehype-raw@7.0.0: + resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} + rehype-slug@6.0.0: resolution: {integrity: sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A==} + rehype-stringify@10.0.0: + resolution: {integrity: sha512-1TX1i048LooI9QoecrXy7nGFFbFSufxVRAfc6Y9YMRAi56l+oB0zP51mLSV312uRuvVLPV1opSlJmslozR1XHQ==} + relateurl@0.2.7: resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==} engines: {node: '>= 0.10'} @@ -12483,24 +12787,43 @@ packages: remark-external-links@8.0.0: resolution: {integrity: sha512-5vPSX0kHoSsqtdftSHhIYofVINC8qmp0nctkeU9YoJwV3YfiBRiI6cbFRJ0oI/1F9xS+bopXG0m2KS8VFscuKA==} + remark-frontmatter@5.0.0: + resolution: {integrity: sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==} + remark-html@16.0.1: resolution: {integrity: sha512-B9JqA5i0qZe0Nsf49q3OXyGvyXuZFDzAP2iOFLEumymuYJITVpiH1IgsTEwTpdptDmZlMDMWeDmSawdaJIGCXQ==} remark-mdx@3.0.1: resolution: {integrity: sha512-3Pz3yPQ5Rht2pM5R+0J2MrGoBSrzf+tJG94N+t/ilfdh8YLyyKYtidAYwTveB20BoHAcwIopOUqhcmh2F7hGYA==} + remark-parse-frontmatter@1.0.3: + resolution: {integrity: sha512-2hqW4Nod8pEkP4kdui7jOvCwcTfYBfgAb3XJhYYTZGrTMBcxFzQ7h7ay6OwmpJME5BOhORpZ7eY5+K4OHHIh4Q==} + engines: {node: '>=12'} + + remark-parse@10.0.2: + resolution: {integrity: sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==} + remark-parse@11.0.0: resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} + remark-prism@1.3.6: + resolution: {integrity: sha512-yYSXJ2MEK2DeD9UKDKFkQPcVqRx6aX2FYD1kE27ScogpZ/BBO8MoOO6gf/AKqfXvKGnP51wqvDEBmPseypgaug==} + remark-rehype@11.1.0: resolution: {integrity: sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==} remark-slug@6.1.0: resolution: {integrity: sha512-oGCxDF9deA8phWvxFuyr3oSJsdyUAxMFbA0mZ7Y1Sas+emILtO+e5WutF9564gDsEN4IXaQXm5pFo6MLH+YmwQ==} + remark-stringify@10.0.3: + resolution: {integrity: sha512-koyOzCMYoUHudypbj4XpnAKFbkddRMYZHwghnxd7ue5210WzGw6kOBwauJTRUMq16jsovXx8dYNvSSWP89kZ3A==} + remark-stringify@11.0.0: resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} + remark@14.0.3: + resolution: {integrity: sha512-bfmJW1dmR2LvaMJuAnE88pZP9DktIFYXazkTfOIKZzi3Knk9lT0roItIA24ydOucI3bV/g/tXBA6hzqq3FV9Ew==} + remark@15.0.1: resolution: {integrity: sha512-Eht5w30ruCXgFmxVUSlNWQ9iiimq07URKeFS3hNc8cUWy1llX4KDWfyEDZRycMc+znsN9Ux5/tJ/BFdgdOwA3A==} @@ -12595,6 +12918,10 @@ packages: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + revalidator@0.3.1: + resolution: {integrity: sha512-orq+Nw+V5pDpQwGEuN2n1AgJ+0A8WqhFHKt5KgkxfAowUKgO1CWV32IR3TNB4g9/FX3gJt9qBJO8DYlwonnB0Q==} + engines: {node: '>= 0.8.0'} + rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} @@ -12634,6 +12961,10 @@ packages: rw@1.3.3: resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} + sade@1.8.1: + resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} + engines: {node: '>=6'} + safe-array-concat@1.1.2: resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} engines: {node: '>=0.4'} @@ -12691,6 +13022,10 @@ packages: sax@1.4.1: resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} + saxes@5.0.1: + resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==} + engines: {node: '>=10'} + saxes@6.0.0: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} @@ -13384,6 +13719,10 @@ packages: tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + tr46@2.1.0: + resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==} + engines: {node: '>=8'} + tr46@3.0.0: resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} engines: {node: '>=12'} @@ -13617,6 +13956,9 @@ packages: resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} engines: {node: '>=18'} + unified@10.1.2: + resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} + unified@11.0.5: resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} @@ -13630,12 +13972,24 @@ packages: resolution: {integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==} engines: {node: '>=12'} + unist-util-find-after@5.0.0: + resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==} + + unist-util-find@1.0.4: + resolution: {integrity: sha512-T5vI7IkhroDj7KxAIy057VbIeGnCXfso4d4GoUsjbAmDLQUkzAeszlBtzx1+KHgdsYYBygaqUBvrbYCfePedZw==} + unist-util-is@4.1.0: resolution: {integrity: sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==} + unist-util-is@5.2.1: + resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==} + unist-util-is@6.0.0: resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} + unist-util-map@2.0.1: + resolution: {integrity: sha512-VdNvk4BQUUU9Rgr8iUOvclHa/iN9O+6Dt66FKij8l9OVezGG37gGWCPU5KSax1R2degqXFvl3kWTkvzL79e9tQ==} + unist-util-position-from-estree@2.0.0: resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==} @@ -13648,18 +14002,27 @@ packages: unist-util-stringify-position@2.0.3: resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==} + unist-util-stringify-position@3.0.3: + resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==} + unist-util-stringify-position@4.0.0: resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} unist-util-visit-parents@3.1.1: resolution: {integrity: sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==} + unist-util-visit-parents@5.1.3: + resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==} + unist-util-visit-parents@6.0.1: resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} unist-util-visit@2.0.3: resolution: {integrity: sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==} + unist-util-visit@4.1.2: + resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==} + unist-util-visit@5.0.0: resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} @@ -13815,6 +14178,11 @@ packages: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} hasBin: true + uvu@0.5.6: + resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} + engines: {node: '>=8'} + hasBin: true + v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} @@ -13954,9 +14322,18 @@ packages: resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} engines: {'0': node >=0.6.0} + vfile-location@5.0.3: + resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} + + vfile-message@3.1.4: + resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==} + vfile-message@4.0.2: resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} + vfile@5.3.7: + resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==} + vfile@6.0.2: resolution: {integrity: sha512-zND7NlS8rJYb/sPqkb13ZvbbUoExdbi4w3SfRrMq6R3FvnLQmmfpajJNITuuYm6AZ5uao9vy4BAos3EXBPf2rg==} @@ -14145,6 +14522,14 @@ packages: vscode-uri@3.0.8: resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==} + w3c-hr-time@1.0.2: + resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} + deprecated: Use your platform's native performance.now() and performance.timeOrigin. + + w3c-xmlserializer@2.0.0: + resolution: {integrity: sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==} + engines: {node: '>=10'} + w3c-xmlserializer@4.0.0: resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==} engines: {node: '>=14'} @@ -14169,9 +14554,20 @@ packages: wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + web-namespaces@2.0.1: + resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} + webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + webidl-conversions@5.0.0: + resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==} + engines: {node: '>=8'} + + webidl-conversions@6.1.0: + resolution: {integrity: sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==} + engines: {node: '>=10.4'} + webidl-conversions@7.0.0: resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} engines: {node: '>=12'} @@ -14249,6 +14645,9 @@ packages: webpack-cli: optional: true + whatwg-encoding@1.0.5: + resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==} + whatwg-encoding@2.0.0: resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} engines: {node: '>=12'} @@ -14260,6 +14659,9 @@ packages: whatwg-fetch@3.6.20: resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==} + whatwg-mimetype@2.3.0: + resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==} + whatwg-mimetype@3.0.0: resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} engines: {node: '>=12'} @@ -14279,6 +14681,10 @@ packages: whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + whatwg-url@8.7.0: + resolution: {integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==} + engines: {node: '>=10'} + which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} @@ -14379,6 +14785,9 @@ packages: engines: {node: '>=0.8'} hasBin: true + xml-name-validator@3.0.0: + resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==} + xml-name-validator@4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -14608,7 +15017,7 @@ snapshots: '@aws-sdk/client-sso-oidc': 3.623.0(@aws-sdk/client-sts@3.621.0) '@aws-sdk/client-sts': 3.623.0 '@aws-sdk/core': 3.623.0 - '@aws-sdk/credential-provider-node': 3.623.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))(@aws-sdk/client-sts@3.623.0) + '@aws-sdk/credential-provider-node': 3.623.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))(@aws-sdk/client-sts@3.621.0) '@aws-sdk/middleware-bucket-endpoint': 3.620.0 '@aws-sdk/middleware-expect-continue': 3.620.0 '@aws-sdk/middleware-flexible-checksums': 3.620.0 @@ -14759,7 +15168,7 @@ snapshots: '@aws-crypto/sha256-js': 5.2.0 '@aws-sdk/client-sts': 3.623.0 '@aws-sdk/core': 3.623.0 - '@aws-sdk/credential-provider-node': 3.623.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))(@aws-sdk/client-sts@3.623.0) + '@aws-sdk/credential-provider-node': 3.623.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))(@aws-sdk/client-sts@3.621.0) '@aws-sdk/middleware-host-header': 3.620.0 '@aws-sdk/middleware-logger': 3.609.0 '@aws-sdk/middleware-recursion-detection': 3.620.0 @@ -14935,7 +15344,7 @@ snapshots: '@aws-crypto/sha256-js': 5.2.0 '@aws-sdk/client-sso-oidc': 3.623.0(@aws-sdk/client-sts@3.623.0) '@aws-sdk/core': 3.623.0 - '@aws-sdk/credential-provider-node': 3.623.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))(@aws-sdk/client-sts@3.623.0) + '@aws-sdk/credential-provider-node': 3.623.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))(@aws-sdk/client-sts@3.621.0) '@aws-sdk/middleware-host-header': 3.620.0 '@aws-sdk/middleware-logger': 3.609.0 '@aws-sdk/middleware-recursion-detection': 3.620.0 @@ -15058,25 +15467,6 @@ snapshots: - '@aws-sdk/client-sso-oidc' - aws-crt - '@aws-sdk/credential-provider-ini@3.621.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0))(@aws-sdk/client-sts@3.621.0)': - dependencies: - '@aws-sdk/client-sts': 3.621.0 - '@aws-sdk/credential-provider-env': 3.620.1 - '@aws-sdk/credential-provider-http': 3.621.0 - '@aws-sdk/credential-provider-process': 3.620.1 - '@aws-sdk/credential-provider-sso': 3.621.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0)) - '@aws-sdk/credential-provider-web-identity': 3.621.0(@aws-sdk/client-sts@3.621.0) - '@aws-sdk/types': 3.609.0 - '@smithy/credential-provider-imds': 3.2.0 - '@smithy/property-provider': 3.1.3 - '@smithy/shared-ini-file-loader': 3.1.4 - '@smithy/types': 3.3.0 - tslib: 2.6.3 - transitivePeerDependencies: - - '@aws-sdk/client-sso-oidc' - - aws-crt - optional: true - '@aws-sdk/credential-provider-ini@3.621.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))(@aws-sdk/client-sts@3.621.0)': dependencies: '@aws-sdk/client-sts': 3.621.0 @@ -15114,24 +15504,6 @@ snapshots: - '@aws-sdk/client-sso-oidc' - aws-crt - '@aws-sdk/credential-provider-ini@3.623.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))(@aws-sdk/client-sts@3.623.0)': - dependencies: - '@aws-sdk/client-sts': 3.623.0 - '@aws-sdk/credential-provider-env': 3.620.1 - '@aws-sdk/credential-provider-http': 3.622.0 - '@aws-sdk/credential-provider-process': 3.620.1 - '@aws-sdk/credential-provider-sso': 3.623.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0)) - '@aws-sdk/credential-provider-web-identity': 3.621.0(@aws-sdk/client-sts@3.623.0) - '@aws-sdk/types': 3.609.0 - '@smithy/credential-provider-imds': 3.2.0 - '@smithy/property-provider': 3.1.3 - '@smithy/shared-ini-file-loader': 3.1.4 - '@smithy/types': 3.3.0 - tslib: 2.6.3 - transitivePeerDependencies: - - '@aws-sdk/client-sso-oidc' - - aws-crt - '@aws-sdk/credential-provider-node@3.621.0(@aws-sdk/client-sso-oidc@3.621.0(@aws-sdk/client-sts@3.621.0))(@aws-sdk/client-sts@3.621.0)': dependencies: '@aws-sdk/credential-provider-env': 3.620.1 @@ -15151,26 +15523,6 @@ snapshots: - '@aws-sdk/client-sts' - aws-crt - '@aws-sdk/credential-provider-node@3.621.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0))(@aws-sdk/client-sts@3.621.0)': - dependencies: - '@aws-sdk/credential-provider-env': 3.620.1 - '@aws-sdk/credential-provider-http': 3.621.0 - '@aws-sdk/credential-provider-ini': 3.621.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0))(@aws-sdk/client-sts@3.621.0) - '@aws-sdk/credential-provider-process': 3.620.1 - '@aws-sdk/credential-provider-sso': 3.621.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0)) - '@aws-sdk/credential-provider-web-identity': 3.621.0(@aws-sdk/client-sts@3.621.0) - '@aws-sdk/types': 3.609.0 - '@smithy/credential-provider-imds': 3.2.0 - '@smithy/property-provider': 3.1.3 - '@smithy/shared-ini-file-loader': 3.1.4 - '@smithy/types': 3.3.0 - tslib: 2.6.3 - transitivePeerDependencies: - - '@aws-sdk/client-sso-oidc' - - '@aws-sdk/client-sts' - - aws-crt - optional: true - '@aws-sdk/credential-provider-node@3.621.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))(@aws-sdk/client-sts@3.621.0)': dependencies: '@aws-sdk/credential-provider-env': 3.620.1 @@ -15210,25 +15562,6 @@ snapshots: - '@aws-sdk/client-sts' - aws-crt - '@aws-sdk/credential-provider-node@3.623.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))(@aws-sdk/client-sts@3.623.0)': - dependencies: - '@aws-sdk/credential-provider-env': 3.620.1 - '@aws-sdk/credential-provider-http': 3.622.0 - '@aws-sdk/credential-provider-ini': 3.623.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))(@aws-sdk/client-sts@3.623.0) - '@aws-sdk/credential-provider-process': 3.620.1 - '@aws-sdk/credential-provider-sso': 3.623.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0)) - '@aws-sdk/credential-provider-web-identity': 3.621.0(@aws-sdk/client-sts@3.623.0) - '@aws-sdk/types': 3.609.0 - '@smithy/credential-provider-imds': 3.2.0 - '@smithy/property-provider': 3.1.3 - '@smithy/shared-ini-file-loader': 3.1.4 - '@smithy/types': 3.3.0 - tslib: 2.6.3 - transitivePeerDependencies: - - '@aws-sdk/client-sso-oidc' - - '@aws-sdk/client-sts' - - aws-crt - '@aws-sdk/credential-provider-process@3.620.1': dependencies: '@aws-sdk/types': 3.609.0 @@ -15250,20 +15583,6 @@ snapshots: - '@aws-sdk/client-sso-oidc' - aws-crt - '@aws-sdk/credential-provider-sso@3.621.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0))': - dependencies: - '@aws-sdk/client-sso': 3.621.0 - '@aws-sdk/token-providers': 3.614.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0)) - '@aws-sdk/types': 3.609.0 - '@smithy/property-provider': 3.1.3 - '@smithy/shared-ini-file-loader': 3.1.4 - '@smithy/types': 3.3.0 - tslib: 2.6.3 - transitivePeerDependencies: - - '@aws-sdk/client-sso-oidc' - - aws-crt - optional: true - '@aws-sdk/credential-provider-sso@3.621.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))': dependencies: '@aws-sdk/client-sso': 3.621.0 @@ -15299,37 +15618,6 @@ snapshots: '@smithy/types': 3.3.0 tslib: 2.6.3 - '@aws-sdk/credential-provider-web-identity@3.621.0(@aws-sdk/client-sts@3.623.0)': - dependencies: - '@aws-sdk/client-sts': 3.623.0 - '@aws-sdk/types': 3.609.0 - '@smithy/property-provider': 3.1.3 - '@smithy/types': 3.3.0 - tslib: 2.6.3 - - '@aws-sdk/credential-providers@3.621.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0))': - dependencies: - '@aws-sdk/client-cognito-identity': 3.621.0 - '@aws-sdk/client-sso': 3.621.0 - '@aws-sdk/client-sts': 3.621.0 - '@aws-sdk/credential-provider-cognito-identity': 3.621.0 - '@aws-sdk/credential-provider-env': 3.620.1 - '@aws-sdk/credential-provider-http': 3.621.0 - '@aws-sdk/credential-provider-ini': 3.621.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0))(@aws-sdk/client-sts@3.621.0) - '@aws-sdk/credential-provider-node': 3.621.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0))(@aws-sdk/client-sts@3.621.0) - '@aws-sdk/credential-provider-process': 3.620.1 - '@aws-sdk/credential-provider-sso': 3.621.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0)) - '@aws-sdk/credential-provider-web-identity': 3.621.0(@aws-sdk/client-sts@3.621.0) - '@aws-sdk/types': 3.609.0 - '@smithy/credential-provider-imds': 3.2.0 - '@smithy/property-provider': 3.1.3 - '@smithy/types': 3.3.0 - tslib: 2.6.3 - transitivePeerDependencies: - - '@aws-sdk/client-sso-oidc' - - aws-crt - optional: true - '@aws-sdk/credential-providers@3.621.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))': dependencies: '@aws-sdk/client-cognito-identity': 3.621.0 @@ -15483,7 +15771,7 @@ snapshots: '@smithy/types': 3.3.0 tslib: 2.6.3 - '@aws-sdk/token-providers@3.614.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0))': + '@aws-sdk/token-providers@3.614.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))': dependencies: '@aws-sdk/client-sso-oidc': 3.623.0(@aws-sdk/client-sts@3.621.0) '@aws-sdk/types': 3.609.0 @@ -15491,18 +15779,8 @@ snapshots: '@smithy/shared-ini-file-loader': 3.1.4 '@smithy/types': 3.3.0 tslib: 2.6.3 - optional: true - '@aws-sdk/token-providers@3.614.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))': - dependencies: - '@aws-sdk/client-sso-oidc': 3.623.0(@aws-sdk/client-sts@3.623.0) - '@aws-sdk/types': 3.609.0 - '@smithy/property-provider': 3.1.3 - '@smithy/shared-ini-file-loader': 3.1.4 - '@smithy/types': 3.3.0 - tslib: 2.6.3 - - '@aws-sdk/types@3.609.0': + '@aws-sdk/types@3.609.0': dependencies: '@smithy/types': 3.3.0 tslib: 2.6.3 @@ -18388,7 +18666,7 @@ snapshots: deepmerge: 4.3.1 get-port: 5.1.1 http-status: 1.6.2 - mongoose: 6.12.3(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0)) + mongoose: 6.12.3(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0)) mongoose-aggregate-paginate-v2: 1.0.6 mongoose-paginate-v2: 1.7.22 payload: 2.25.0(@swc/helpers@0.5.5)(@types/react@18.3.3)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))(webpack-cli@4.10.0)) @@ -21105,8 +21383,7 @@ snapshots: '@tokenizer/token@0.3.0': {} - '@tootallnate/once@1.1.2': - optional: true + '@tootallnate/once@1.1.2': {} '@tootallnate/once@2.0.0': {} @@ -21263,6 +21540,10 @@ snapshots: dependencies: '@types/node': 20.14.14 + '@types/hast@2.3.10': + dependencies: + '@types/unist': 2.0.10 + '@types/hast@3.0.4': dependencies: '@types/unist': 3.0.2 @@ -21384,6 +21665,10 @@ snapshots: dependencies: '@types/react': 18.3.3 + '@types/react-syntax-highlighter@15.5.13': + dependencies: + '@types/react': 18.3.3 + '@types/react-transition-group@4.4.10': dependencies: '@types/react': 18.3.3 @@ -21393,6 +21678,14 @@ snapshots: '@types/prop-types': 15.7.12 csstype: 3.1.3 + '@types/remark-prism@1.3.7': + dependencies: + '@types/mdast': 4.0.4 + remark: 14.0.3 + unified: 10.1.2 + transitivePeerDependencies: + - supports-color + '@types/request@2.48.12': dependencies: '@types/caseless': 0.12.5 @@ -21717,6 +22010,11 @@ snapshots: ace-builds@1.35.4: {} + acorn-globals@6.0.0: + dependencies: + acorn: 7.4.1 + acorn-walk: 7.2.0 + acorn-globals@7.0.1: dependencies: acorn: 8.12.1 @@ -22282,6 +22580,8 @@ snapshots: browser-assert@1.2.1: {} + browser-process-hrtime@1.0.0: {} + browserify-aes@1.2.0: dependencies: buffer-xor: 1.0.3 @@ -22631,6 +22931,8 @@ snapshots: dependencies: delayed-stream: 1.0.0 + comma-separated-tokens@1.0.8: {} + comma-separated-tokens@2.0.3: {} commander@12.1.0: {} @@ -22933,6 +23235,8 @@ snapshots: domutils: 3.1.0 nth-check: 2.1.1 + css-selector-parser@1.4.1: {} + css-tree@2.2.1: dependencies: mdn-data: 2.0.28 @@ -22964,6 +23268,8 @@ snapshots: cssom@0.3.8: {} + cssom@0.4.4: {} + cssom@0.5.0: {} cssstyle@2.3.0: @@ -23103,6 +23409,12 @@ snapshots: dependencies: assert-plus: 1.0.0 + data-urls@2.0.0: + dependencies: + abab: 2.0.6 + whatwg-mimetype: 2.3.0 + whatwg-url: 8.7.0 + data-urls@3.0.2: dependencies: abab: 2.0.6 @@ -23353,6 +23665,10 @@ snapshots: domelementtype@2.3.0: {} + domexception@2.0.1: + dependencies: + webidl-conversions: 5.0.0 + domexception@4.0.0: dependencies: webidl-conversions: 7.0.0 @@ -23694,6 +24010,8 @@ snapshots: escape-string-regexp@4.0.0: {} + escape-string-regexp@5.0.0: {} + escodegen@2.1.0: dependencies: esprima: 4.0.1 @@ -24467,6 +24785,14 @@ snapshots: dependencies: reusify: 1.0.4 + fault@1.0.4: + dependencies: + format: 0.2.2 + + fault@2.0.1: + dependencies: + format: 0.2.2 + fb-watchman@2.0.2: dependencies: bser: 2.1.1 @@ -24665,12 +24991,20 @@ snapshots: combined-stream: 1.0.8 mime-types: 2.1.35 + form-data@3.0.1: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + form-data@4.0.0: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 mime-types: 2.1.35 + format@0.2.2: {} + ? formik-mui-lab@1.0.0(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(@mui/lab@5.0.0-alpha.155(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(@mui/material@5.16.6(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mui/material@5.16.6(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(formik@2.4.6(react@18.3.1))(react@18.3.1)(tiny-warning@1.0.3) : dependencies: '@emotion/react': 11.13.0(@types/react@18.3.3)(react@18.3.1) @@ -25126,14 +25460,68 @@ snapshots: dependencies: function-bind: 1.1.2 + hast-util-embedded@3.0.0: + dependencies: + '@types/hast': 3.0.4 + hast-util-is-element: 3.0.0 + + hast-util-from-parse5@8.0.1: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.2 + devlop: 1.1.0 + hastscript: 8.0.0 + property-information: 6.5.0 + vfile: 6.0.2 + vfile-location: 5.0.3 + web-namespaces: 2.0.1 + + hast-util-has-property@3.0.0: + dependencies: + '@types/hast': 3.0.4 + hast-util-heading-rank@3.0.0: dependencies: '@types/hast': 3.0.4 + hast-util-is-body-ok-link@3.0.0: + dependencies: + '@types/hast': 3.0.4 + hast-util-is-element@3.0.0: dependencies: '@types/hast': 3.0.4 + hast-util-parse-selector@2.2.5: {} + + hast-util-parse-selector@4.0.0: + dependencies: + '@types/hast': 3.0.4 + + hast-util-phrasing@3.0.1: + dependencies: + '@types/hast': 3.0.4 + hast-util-embedded: 3.0.0 + hast-util-has-property: 3.0.0 + hast-util-is-body-ok-link: 3.0.0 + hast-util-is-element: 3.0.0 + + hast-util-raw@9.0.4: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.2 + '@ungap/structured-clone': 1.2.0 + hast-util-from-parse5: 8.0.1 + hast-util-to-parse5: 8.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.0 + parse5: 7.1.2 + unist-util-position: 5.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.2 + web-namespaces: 2.0.1 + zwitch: 2.0.4 + hast-util-sanitize@5.0.1: dependencies: '@types/hast': 3.0.4 @@ -25195,14 +25583,47 @@ snapshots: transitivePeerDependencies: - supports-color + hast-util-to-parse5@8.0.0: + dependencies: + '@types/hast': 3.0.4 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + property-information: 6.5.0 + space-separated-tokens: 2.0.2 + web-namespaces: 2.0.1 + zwitch: 2.0.4 + hast-util-to-string@3.0.0: dependencies: '@types/hast': 3.0.4 + hast-util-to-text@4.0.2: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.2 + hast-util-is-element: 3.0.0 + unist-util-find-after: 5.0.0 + hast-util-whitespace@3.0.0: dependencies: '@types/hast': 3.0.4 + hastscript@6.0.0: + dependencies: + '@types/hast': 2.3.10 + comma-separated-tokens: 1.0.8 + hast-util-parse-selector: 2.2.5 + property-information: 5.6.0 + space-separated-tokens: 1.1.5 + + hastscript@8.0.0: + dependencies: + '@types/hast': 3.0.4 + comma-separated-tokens: 2.0.3 + hast-util-parse-selector: 4.0.0 + property-information: 6.5.0 + space-separated-tokens: 2.0.2 + he@1.2.0: {} help-me@4.2.0: @@ -25210,6 +25631,10 @@ snapshots: glob: 8.1.0 readable-stream: 3.6.2 + highlight.js@10.7.3: {} + + highlight.js@11.9.0: {} + history@4.10.1: dependencies: '@babel/runtime': 7.25.0 @@ -25233,6 +25658,10 @@ snapshots: dependencies: parse-passwd: 1.0.0 + html-encoding-sniffer@2.0.1: + dependencies: + whatwg-encoding: 1.0.5 + html-encoding-sniffer@3.0.0: dependencies: whatwg-encoding: 2.0.0 @@ -25269,6 +25698,8 @@ snapshots: readable-stream: 1.0.34 through2: 0.4.2 + html-url-attributes@3.0.0: {} + html-void-elements@3.0.0: {} html-webpack-plugin@5.5.3(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))(webpack-cli@4.10.0)): @@ -25319,6 +25750,8 @@ snapshots: optionalDependencies: webpack: 5.93.0 + html-whitespace-sensitive-tag-names@3.0.0: {} + htmlparser2@6.1.0: dependencies: domelementtype: 2.3.0 @@ -25344,7 +25777,6 @@ snapshots: debug: 4.3.6 transitivePeerDependencies: - supports-color - optional: true http-proxy-agent@5.0.0: dependencies: @@ -26283,6 +26715,40 @@ snapshots: transitivePeerDependencies: - supports-color + jsdom@16.7.0: + dependencies: + abab: 2.0.6 + acorn: 8.12.1 + acorn-globals: 6.0.0 + cssom: 0.4.4 + cssstyle: 2.3.0 + data-urls: 2.0.0 + decimal.js: 10.4.3 + domexception: 2.0.1 + escodegen: 2.1.0 + form-data: 3.0.1 + html-encoding-sniffer: 2.0.1 + http-proxy-agent: 4.0.1 + https-proxy-agent: 5.0.1 + is-potential-custom-element-name: 1.0.1 + nwsapi: 2.2.12 + parse5: 6.0.1 + saxes: 5.0.1 + symbol-tree: 3.2.4 + tough-cookie: 4.1.4 + w3c-hr-time: 1.0.2 + w3c-xmlserializer: 2.0.0 + webidl-conversions: 6.1.0 + whatwg-encoding: 1.0.5 + whatwg-mimetype: 2.3.0 + whatwg-url: 8.7.0 + ws: 7.5.10 + xml-name-validator: 3.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + jsdom@20.0.3: dependencies: abab: 2.0.6 @@ -26516,6 +26982,8 @@ snapshots: kleur@3.0.3: {} + kleur@4.1.5: {} + klona@2.0.6: {} language-subtag-registry@0.3.23: {} @@ -26619,6 +27087,8 @@ snapshots: lodash.isequal@4.5.0: {} + lodash.iteratee@4.7.0: {} + lodash.merge@4.6.2: {} lodash.startcase@4.4.0: {} @@ -26654,6 +27124,17 @@ snapshots: dependencies: tslib: 2.6.3 + lowlight@1.20.0: + dependencies: + fault: 1.0.4 + highlight.js: 10.7.3 + + lowlight@3.1.0: + dependencies: + '@types/hast': 3.0.4 + devlop: 1.1.0 + highlight.js: 11.9.0 + lru-cache@10.4.3: {} lru-cache@4.1.5: @@ -26767,6 +27248,23 @@ snapshots: transitivePeerDependencies: - supports-color + mdast-util-from-markdown@1.3.1: + dependencies: + '@types/mdast': 3.0.15 + '@types/unist': 2.0.10 + decode-named-character-reference: 1.0.2 + mdast-util-to-string: 3.2.0 + micromark: 3.2.0 + micromark-util-decode-numeric-character-reference: 1.1.0 + micromark-util-decode-string: 1.1.0 + micromark-util-normalize-identifier: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + unist-util-stringify-position: 3.0.3 + uvu: 0.5.6 + transitivePeerDependencies: + - supports-color + mdast-util-from-markdown@2.0.1: dependencies: '@types/mdast': 4.0.4 @@ -26784,6 +27282,17 @@ snapshots: transitivePeerDependencies: - supports-color + mdast-util-frontmatter@2.0.1: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + escape-string-regexp: 5.0.0 + mdast-util-from-markdown: 2.0.1 + mdast-util-to-markdown: 2.1.0 + micromark-extension-frontmatter: 2.0.0 + transitivePeerDependencies: + - supports-color + mdast-util-mdx-expression@2.0.0: dependencies: '@types/estree-jsx': 1.0.5 @@ -26834,6 +27343,11 @@ snapshots: transitivePeerDependencies: - supports-color + mdast-util-phrasing@3.0.1: + dependencies: + '@types/mdast': 3.0.15 + unist-util-is: 5.2.1 + mdast-util-phrasing@4.1.0: dependencies: '@types/mdast': 4.0.4 @@ -26851,6 +27365,17 @@ snapshots: unist-util-visit: 5.0.0 vfile: 6.0.2 + mdast-util-to-markdown@1.5.0: + dependencies: + '@types/mdast': 3.0.15 + '@types/unist': 2.0.10 + longest-streak: 3.1.0 + mdast-util-phrasing: 3.0.1 + mdast-util-to-string: 3.2.0 + micromark-util-decode-string: 1.1.0 + unist-util-visit: 4.1.2 + zwitch: 2.0.4 + mdast-util-to-markdown@2.1.0: dependencies: '@types/mdast': 4.0.4 @@ -26866,6 +27391,10 @@ snapshots: mdast-util-to-string@2.0.0: {} + mdast-util-to-string@3.2.0: + dependencies: + '@types/mdast': 3.0.15 + mdast-util-to-string@4.0.0: dependencies: '@types/mdast': 4.0.4 @@ -26921,6 +27450,25 @@ snapshots: methods@1.1.2: {} + micromark-core-commonmark@1.1.0: + dependencies: + decode-named-character-reference: 1.0.2 + micromark-factory-destination: 1.1.0 + micromark-factory-label: 1.1.0 + micromark-factory-space: 1.1.0 + micromark-factory-title: 1.1.0 + micromark-factory-whitespace: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-chunked: 1.1.0 + micromark-util-classify-character: 1.1.0 + micromark-util-html-tag-name: 1.2.0 + micromark-util-normalize-identifier: 1.1.0 + micromark-util-resolve-all: 1.1.0 + micromark-util-subtokenize: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + micromark-core-commonmark@2.0.1: dependencies: decode-named-character-reference: 1.0.2 @@ -26940,6 +27488,13 @@ snapshots: micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 + micromark-extension-frontmatter@2.0.0: + dependencies: + fault: 2.0.1 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + micromark-extension-mdx-expression@3.0.0: dependencies: '@types/estree': 1.0.5 @@ -26991,12 +27546,25 @@ snapshots: micromark-util-combine-extensions: 2.0.0 micromark-util-types: 2.0.0 + micromark-factory-destination@1.1.0: + dependencies: + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + micromark-factory-destination@2.0.0: dependencies: micromark-util-character: 2.1.0 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 + micromark-factory-label@1.1.0: + dependencies: + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + micromark-factory-label@2.0.0: dependencies: devlop: 1.1.0 @@ -27015,11 +27583,23 @@ snapshots: unist-util-position-from-estree: 2.0.0 vfile-message: 4.0.2 + micromark-factory-space@1.1.0: + dependencies: + micromark-util-character: 1.2.0 + micromark-util-types: 1.1.0 + micromark-factory-space@2.0.0: dependencies: micromark-util-character: 2.1.0 micromark-util-types: 2.0.0 + micromark-factory-title@1.1.0: + dependencies: + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + micromark-factory-title@2.0.0: dependencies: micromark-factory-space: 2.0.0 @@ -27027,6 +27607,13 @@ snapshots: micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 + micromark-factory-whitespace@1.1.0: + dependencies: + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + micromark-factory-whitespace@2.0.0: dependencies: micromark-factory-space: 2.0.0 @@ -27034,30 +27621,61 @@ snapshots: micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 + micromark-util-character@1.2.0: + dependencies: + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + micromark-util-character@2.1.0: dependencies: micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 + micromark-util-chunked@1.1.0: + dependencies: + micromark-util-symbol: 1.1.0 + micromark-util-chunked@2.0.0: dependencies: micromark-util-symbol: 2.0.0 + micromark-util-classify-character@1.1.0: + dependencies: + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + micromark-util-classify-character@2.0.0: dependencies: micromark-util-character: 2.1.0 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 + micromark-util-combine-extensions@1.1.0: + dependencies: + micromark-util-chunked: 1.1.0 + micromark-util-types: 1.1.0 + micromark-util-combine-extensions@2.0.0: dependencies: micromark-util-chunked: 2.0.0 micromark-util-types: 2.0.0 + micromark-util-decode-numeric-character-reference@1.1.0: + dependencies: + micromark-util-symbol: 1.1.0 + micromark-util-decode-numeric-character-reference@2.0.1: dependencies: micromark-util-symbol: 2.0.0 + micromark-util-decode-string@1.1.0: + dependencies: + decode-named-character-reference: 1.0.2 + micromark-util-character: 1.2.0 + micromark-util-decode-numeric-character-reference: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-decode-string@2.0.0: dependencies: decode-named-character-reference: 1.0.2 @@ -27065,6 +27683,8 @@ snapshots: micromark-util-decode-numeric-character-reference: 2.0.1 micromark-util-symbol: 2.0.0 + micromark-util-encode@1.1.0: {} + micromark-util-encode@2.0.0: {} micromark-util-events-to-acorn@2.0.2: @@ -27078,22 +27698,45 @@ snapshots: micromark-util-types: 2.0.0 vfile-message: 4.0.2 + micromark-util-html-tag-name@1.2.0: {} + micromark-util-html-tag-name@2.0.0: {} + micromark-util-normalize-identifier@1.1.0: + dependencies: + micromark-util-symbol: 1.1.0 + micromark-util-normalize-identifier@2.0.0: dependencies: micromark-util-symbol: 2.0.0 + micromark-util-resolve-all@1.1.0: + dependencies: + micromark-util-types: 1.1.0 + micromark-util-resolve-all@2.0.0: dependencies: micromark-util-types: 2.0.0 + micromark-util-sanitize-uri@1.2.0: + dependencies: + micromark-util-character: 1.2.0 + micromark-util-encode: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-sanitize-uri@2.0.0: dependencies: micromark-util-character: 2.1.0 micromark-util-encode: 2.0.0 micromark-util-symbol: 2.0.0 + micromark-util-subtokenize@1.1.0: + dependencies: + micromark-util-chunked: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + micromark-util-subtokenize@2.0.1: dependencies: devlop: 1.1.0 @@ -27101,8 +27744,12 @@ snapshots: micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 + micromark-util-symbol@1.1.0: {} + micromark-util-symbol@2.0.0: {} + micromark-util-types@1.1.0: {} + micromark-util-types@2.0.0: {} micromark@2.11.4: @@ -27112,6 +27759,28 @@ snapshots: transitivePeerDependencies: - supports-color + micromark@3.2.0: + dependencies: + '@types/debug': 4.1.12 + debug: 4.3.6 + decode-named-character-reference: 1.0.2 + micromark-core-commonmark: 1.1.0 + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-chunked: 1.1.0 + micromark-util-combine-extensions: 1.1.0 + micromark-util-decode-numeric-character-reference: 1.1.0 + micromark-util-encode: 1.1.0 + micromark-util-normalize-identifier: 1.1.0 + micromark-util-resolve-all: 1.1.0 + micromark-util-sanitize-uri: 1.2.0 + micromark-util-subtokenize: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + transitivePeerDependencies: + - supports-color + micromark@4.0.0: dependencies: '@types/debug': 4.1.12 @@ -27147,7 +27816,7 @@ snapshots: fn-args: 5.0.0 fs-extra: 10.1.0 lodash: 4.17.21 - mongodb: 4.17.1(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0)) + mongodb: 4.17.1(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0)) p-each-series: 2.2.0 miller-rabin@4.0.1: @@ -27280,18 +27949,6 @@ snapshots: '@types/whatwg-url': 8.2.2 whatwg-url: 11.0.0 - mongodb@4.17.1(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0)): - dependencies: - bson: 4.7.2 - mongodb-connection-string-url: 2.6.0 - socks: 2.8.3 - optionalDependencies: - '@aws-sdk/credential-providers': 3.621.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0)) - '@mongodb-js/saslprep': 1.1.8 - transitivePeerDependencies: - - '@aws-sdk/client-sso-oidc' - - aws-crt - mongodb@4.17.1(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0)): dependencies: bson: 4.7.2 @@ -27308,20 +27965,6 @@ snapshots: mongoose-paginate-v2@1.7.22: {} - mongoose@6.12.3(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0)): - dependencies: - bson: 4.7.2 - kareem: 2.5.1 - mongodb: 4.17.1(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0)) - mpath: 0.9.0 - mquery: 4.0.3 - ms: 2.1.3 - sift: 16.0.1 - transitivePeerDependencies: - - '@aws-sdk/client-sso-oidc' - - aws-crt - - supports-color - mongoose@6.12.3(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0)): dependencies: bson: 4.7.2 @@ -27857,8 +28500,16 @@ snapshots: json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 + parse-numeric-range@1.3.0: {} + parse-passwd@1.0.0: {} + parse5-htmlparser2-tree-adapter@6.0.1: + dependencies: + parse5: 6.0.1 + + parse5@6.0.1: {} + parse5@7.1.2: dependencies: entities: 4.5.0 @@ -28653,6 +29304,10 @@ snapshots: pretty-hrtime@1.0.3: {} + prismjs@1.27.0: {} + + prismjs@1.29.0: {} + probe-image-size@6.0.0: dependencies: deepmerge: 4.3.1 @@ -28689,6 +29344,10 @@ snapshots: object-assign: 4.1.1 react-is: 16.13.1 + property-information@5.6.0: + dependencies: + xtend: 4.0.2 + property-information@6.5.0: {} proxy-addr@2.0.7: @@ -28929,6 +29588,23 @@ snapshots: react-lifecycles-compat@3.0.4: {} + react-markdown@9.0.1(@types/react@18.3.3)(react@18.3.1): + dependencies: + '@types/hast': 3.0.4 + '@types/react': 18.3.3 + devlop: 1.1.0 + hast-util-to-jsx-runtime: 2.3.0 + html-url-attributes: 3.0.0 + mdast-util-to-hast: 13.2.0 + react: 18.3.1 + remark-parse: 11.0.0 + remark-rehype: 11.1.0 + unified: 11.0.5 + unist-util-visit: 5.0.0 + vfile: 6.0.2 + transitivePeerDependencies: + - supports-color + react-multi-carousel@2.8.5: {} react-onclickoutside@6.13.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): @@ -29071,6 +29747,15 @@ snapshots: react-swipeable-views-core-react-18-fix: 0.14.0(react@18.3.1) shallow-equal: 1.2.1 + react-syntax-highlighter@15.5.0(react@18.3.1): + dependencies: + '@babel/runtime': 7.25.0 + highlight.js: 10.7.3 + lowlight: 1.20.0 + prismjs: 1.29.0 + react: 18.3.1 + refractor: 3.6.0 + react-test-renderer@18.3.1(react@18.3.1): dependencies: react: 18.3.1 @@ -29184,6 +29869,12 @@ snapshots: globalthis: 1.0.4 which-builtin-type: 1.1.4 + refractor@3.6.0: + dependencies: + hastscript: 6.0.0 + parse-entities: 2.0.0 + prismjs: 1.27.0 + regenerate-unicode-properties@10.1.1: dependencies: regenerate: 1.4.2 @@ -29234,6 +29925,39 @@ snapshots: space-separated-tokens: 2.0.2 unist-util-visit: 5.0.0 + rehype-format@5.0.0: + dependencies: + '@types/hast': 3.0.4 + hast-util-embedded: 3.0.0 + hast-util-is-element: 3.0.0 + hast-util-phrasing: 3.0.1 + hast-util-whitespace: 3.0.0 + html-whitespace-sensitive-tag-names: 3.0.0 + rehype-minify-whitespace: 6.0.0 + unist-util-visit-parents: 6.0.1 + + rehype-highlight@7.0.0: + dependencies: + '@types/hast': 3.0.4 + hast-util-to-text: 4.0.2 + lowlight: 3.1.0 + unist-util-visit: 5.0.0 + vfile: 6.0.2 + + rehype-minify-whitespace@6.0.0: + dependencies: + '@types/hast': 3.0.4 + hast-util-embedded: 3.0.0 + hast-util-is-element: 3.0.0 + hast-util-whitespace: 3.0.0 + unist-util-is: 6.0.0 + + rehype-raw@7.0.0: + dependencies: + '@types/hast': 3.0.4 + hast-util-raw: 9.0.4 + vfile: 6.0.2 + rehype-slug@6.0.0: dependencies: '@types/hast': 3.0.4 @@ -29242,6 +29966,12 @@ snapshots: hast-util-to-string: 3.0.0 unist-util-visit: 5.0.0 + rehype-stringify@10.0.0: + dependencies: + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.2 + unified: 11.0.5 + relateurl@0.2.7: {} remark-external-links@8.0.0: @@ -29252,6 +29982,15 @@ snapshots: space-separated-tokens: 1.1.5 unist-util-visit: 2.0.3 + remark-frontmatter@5.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-frontmatter: 2.0.1 + micromark-extension-frontmatter: 2.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + remark-html@16.0.1: dependencies: '@types/mdast': 4.0.4 @@ -29267,6 +30006,20 @@ snapshots: transitivePeerDependencies: - supports-color + remark-parse-frontmatter@1.0.3: + dependencies: + revalidator: 0.3.1 + unist-util-find: 1.0.4 + yaml: 1.10.2 + + remark-parse@10.0.2: + dependencies: + '@types/mdast': 3.0.15 + mdast-util-from-markdown: 1.3.1 + unified: 10.1.2 + transitivePeerDependencies: + - supports-color + remark-parse@11.0.0: dependencies: '@types/mdast': 4.0.4 @@ -29276,6 +30029,23 @@ snapshots: transitivePeerDependencies: - supports-color + remark-prism@1.3.6: + dependencies: + classnames: 2.5.1 + css-selector-parser: 1.4.1 + escape-html: 1.0.3 + jsdom: 16.7.0 + parse-numeric-range: 1.3.0 + parse5: 6.0.1 + parse5-htmlparser2-tree-adapter: 6.0.1 + prismjs: 1.29.0 + unist-util-map: 2.0.1 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - utf-8-validate + remark-rehype@11.1.0: dependencies: '@types/hast': 3.0.4 @@ -29290,12 +30060,27 @@ snapshots: mdast-util-to-string: 1.1.0 unist-util-visit: 2.0.3 + remark-stringify@10.0.3: + dependencies: + '@types/mdast': 3.0.15 + mdast-util-to-markdown: 1.5.0 + unified: 10.1.2 + remark-stringify@11.0.0: dependencies: '@types/mdast': 4.0.4 mdast-util-to-markdown: 2.1.0 unified: 11.0.5 + remark@14.0.3: + dependencies: + '@types/mdast': 3.0.15 + remark-parse: 10.0.2 + remark-stringify: 10.0.3 + unified: 10.1.2 + transitivePeerDependencies: + - supports-color + remark@15.0.1: dependencies: '@types/mdast': 4.0.4 @@ -29412,6 +30197,8 @@ snapshots: reusify@1.0.4: {} + revalidator@0.3.1: {} + rfdc@1.4.1: {} rimraf@2.6.3: @@ -29449,6 +30236,10 @@ snapshots: rw@1.3.3: {} + sade@1.8.1: + dependencies: + mri: 1.2.0 + safe-array-concat@1.1.2: dependencies: call-bind: 1.0.7 @@ -29512,6 +30303,10 @@ snapshots: sax@1.4.1: {} + saxes@5.0.1: + dependencies: + xmlchars: 2.2.0 + saxes@6.0.0: dependencies: xmlchars: 2.2.0 @@ -30385,6 +31180,10 @@ snapshots: tr46@0.0.3: {} + tr46@2.1.0: + dependencies: + punycode: 2.3.1 + tr46@3.0.0: dependencies: punycode: 2.3.1 @@ -30607,6 +31406,16 @@ snapshots: unicorn-magic@0.1.0: {} + unified@10.1.2: + dependencies: + '@types/unist': 2.0.10 + bail: 2.0.2 + extend: 3.0.2 + is-buffer: 2.0.5 + is-plain-obj: 4.1.0 + trough: 2.2.0 + vfile: 5.3.7 + unified@11.0.5: dependencies: '@types/unist': 3.0.2 @@ -30631,12 +31440,31 @@ snapshots: dependencies: crypto-random-string: 4.0.0 + unist-util-find-after@5.0.0: + dependencies: + '@types/unist': 3.0.2 + unist-util-is: 6.0.0 + + unist-util-find@1.0.4: + dependencies: + lodash.iteratee: 4.7.0 + unist-util-visit: 2.0.3 + unist-util-is@4.1.0: {} + unist-util-is@5.2.1: + dependencies: + '@types/unist': 2.0.10 + unist-util-is@6.0.0: dependencies: '@types/unist': 3.0.2 + unist-util-map@2.0.1: + dependencies: + '@types/mdast': 3.0.15 + object-assign: 4.1.1 + unist-util-position-from-estree@2.0.0: dependencies: '@types/unist': 3.0.2 @@ -30654,6 +31482,10 @@ snapshots: dependencies: '@types/unist': 2.0.10 + unist-util-stringify-position@3.0.3: + dependencies: + '@types/unist': 2.0.10 + unist-util-stringify-position@4.0.0: dependencies: '@types/unist': 3.0.2 @@ -30663,6 +31495,11 @@ snapshots: '@types/unist': 2.0.10 unist-util-is: 4.1.0 + unist-util-visit-parents@5.1.3: + dependencies: + '@types/unist': 2.0.10 + unist-util-is: 5.2.1 + unist-util-visit-parents@6.0.1: dependencies: '@types/unist': 3.0.2 @@ -30674,6 +31511,12 @@ snapshots: unist-util-is: 4.1.0 unist-util-visit-parents: 3.1.1 + unist-util-visit@4.1.2: + dependencies: + '@types/unist': 2.0.10 + unist-util-is: 5.2.1 + unist-util-visit-parents: 5.1.3 + unist-util-visit@5.0.0: dependencies: '@types/unist': 3.0.2 @@ -30824,6 +31667,13 @@ snapshots: uuid@9.0.1: {} + uvu@0.5.6: + dependencies: + dequal: 2.0.3 + diff: 5.2.0 + kleur: 4.1.5 + sade: 1.8.1 + v8-compile-cache-lib@3.0.1: {} v8-to-istanbul@9.3.0: @@ -31147,11 +31997,28 @@ snapshots: core-util-is: 1.0.2 extsprintf: 1.3.0 + vfile-location@5.0.3: + dependencies: + '@types/unist': 3.0.2 + vfile: 6.0.2 + + vfile-message@3.1.4: + dependencies: + '@types/unist': 2.0.10 + unist-util-stringify-position: 3.0.3 + vfile-message@4.0.2: dependencies: '@types/unist': 3.0.2 unist-util-stringify-position: 4.0.0 + vfile@5.3.7: + dependencies: + '@types/unist': 2.0.10 + is-buffer: 2.0.5 + unist-util-stringify-position: 3.0.3 + vfile-message: 3.1.4 + vfile@6.0.2: dependencies: '@types/unist': 3.0.2 @@ -31450,6 +32317,14 @@ snapshots: vscode-uri@3.0.8: {} + w3c-hr-time@1.0.2: + dependencies: + browser-process-hrtime: 1.0.0 + + w3c-xmlserializer@2.0.0: + dependencies: + xml-name-validator: 3.0.0 + w3c-xmlserializer@4.0.0: dependencies: xml-name-validator: 4.0.0 @@ -31477,8 +32352,14 @@ snapshots: dependencies: defaults: 1.0.4 + web-namespaces@2.0.1: {} + webidl-conversions@3.0.1: {} + webidl-conversions@5.0.0: {} + + webidl-conversions@6.1.0: {} + webidl-conversions@7.0.0: {} webpack-bundle-analyzer@4.10.2: @@ -31727,6 +32608,10 @@ snapshots: - esbuild - uglify-js + whatwg-encoding@1.0.5: + dependencies: + iconv-lite: 0.4.24 + whatwg-encoding@2.0.0: dependencies: iconv-lite: 0.6.3 @@ -31737,6 +32622,8 @@ snapshots: whatwg-fetch@3.6.20: {} + whatwg-mimetype@2.3.0: {} + whatwg-mimetype@3.0.0: {} whatwg-mimetype@4.0.0: {} @@ -31756,6 +32643,12 @@ snapshots: tr46: 0.0.3 webidl-conversions: 3.0.1 + whatwg-url@8.7.0: + dependencies: + lodash: 4.17.21 + tr46: 2.1.0 + webidl-conversions: 6.1.0 + which-boxed-primitive@1.0.2: dependencies: is-bigint: 1.0.4 @@ -31867,6 +32760,8 @@ snapshots: wmf: 1.0.2 word: 0.3.0 + xml-name-validator@3.0.0: {} + xml-name-validator@4.0.0: {} xml-name-validator@5.0.0: {} From b2121ba9de21d4015d81e277ee95a3efbb3051f4 Mon Sep 17 00:00:00 2001 From: Kipruto <43873157+kelvinkipruto@users.noreply.github.com> Date: Tue, 3 Sep 2024 14:56:00 +0300 Subject: [PATCH 10/20] Add syntax highlighting to code --- .../components/Markdown/Markdown.tsx | 24 +- apps/engineeringblog/package.json | 4 + pnpm-lock.yaml | 805 +++++------------- 3 files changed, 250 insertions(+), 583 deletions(-) diff --git a/apps/engineeringblog/components/Markdown/Markdown.tsx b/apps/engineeringblog/components/Markdown/Markdown.tsx index 5a9e6ad10..af95faabc 100644 --- a/apps/engineeringblog/components/Markdown/Markdown.tsx +++ b/apps/engineeringblog/components/Markdown/Markdown.tsx @@ -1,5 +1,6 @@ +// Addapted from https://amirardalan.com/blog/syntax-highlight-code-in-markdown import { FC } from "react"; -import ReactMarkdown from "react-markdown"; +import ReactMarkdown, { Components } from "react-markdown"; import { PrismLight as SyntaxHighlighter } from "react-syntax-highlighter"; import tsx from "react-syntax-highlighter/dist/cjs/languages/prism/tsx"; import typescript from "react-syntax-highlighter/dist/cjs/languages/prism/typescript"; @@ -27,22 +28,15 @@ type MarkdownProps = { const Markdown: FC = ({ markdown }) => { const syntaxTheme = oneDark; - const MarkdownComponents: { - code: FC<{ - node: any; - inline: boolean; - className: string; - [key: string]: any; - }>; - } = { - code({ node, inline, className, ...props }) { + const MarkdownComponents: Components = { + code({ node, className, children, ...props }) { const hasLang = /language-(\w+)/.exec(className || ""); const hasMeta = node?.data?.meta; const applyHighlights = (lineNumber: number): { data?: string } => { if (hasMeta) { const RE = /{([\d,-]+)}/; - const metadata = node.data.meta?.replace(/\s/g, ""); + const metadata = node?.data?.meta?.replace(/\s/g, "") || ""; const strlineNumbers = RE?.test(metadata) ? RE?.exec(metadata)![1] : "0"; @@ -66,13 +60,15 @@ const Markdown: FC = ({ markdown }) => { useInlineStyles={true} lineProps={applyHighlights} > - {props.children} + {String(children).replace(/\n$/, "")} ) : ( - + + {children} + ); }, - }; + } as Components; return ( {markdown} diff --git a/apps/engineeringblog/package.json b/apps/engineeringblog/package.json index a1cd19d09..3e076e901 100644 --- a/apps/engineeringblog/package.json +++ b/apps/engineeringblog/package.json @@ -24,8 +24,11 @@ "date-fns": "^3.6.0", "gray-matter": "^4.0.3", "next": "^14.2.5", + "parse-numeric-range": "^1.3.0", "react": "^18", "react-dom": "^18", + "react-markdown": "^9.0.1", + "react-syntax-highlighter": "^15.5.0", "remark": "^15.0.1", "remark-html": "^16.0.1", "remark-mdx": "^3.0.1" @@ -36,6 +39,7 @@ "@types/node": "^20", "@types/react": "^18", "@types/react-dom": "^18", + "@types/react-syntax-highlighter": "^15.5.13", "eslint": "^8", "eslint-config-next": "14.2.5", "eslint-config-prettier": "^9.1.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e863bbac0..1c5c3e993 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -94,31 +94,31 @@ importers: version: 0.84.0(prop-types@15.8.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@payloadcms/bundler-webpack': specifier: ^1.0.7 - version: 1.0.7(@swc/core@1.7.6(@swc/helpers@0.5.5))(ajv@8.17.1)(payload@2.25.0(@swc/helpers@0.5.5)(@types/react@18.3.3)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))(webpack-cli@4.10.0)))(sass@1.69.4) + version: 1.0.7(@swc/core@1.7.6(@swc/helpers@0.5.5))(ajv@8.17.1)(payload@2.25.0(@swc/helpers@0.5.5)(@types/react@18.3.3)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))))(sass@1.69.4) '@payloadcms/db-mongodb': specifier: ^1.7.1 - version: 1.7.1(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0))(payload@2.25.0(@swc/helpers@0.5.5)(@types/react@18.3.3)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))(webpack-cli@4.10.0))) + version: 1.7.1(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))(payload@2.25.0(@swc/helpers@0.5.5)(@types/react@18.3.3)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5)))) '@payloadcms/plugin-cloud-storage': specifier: ^1.1.3 - version: 1.1.3(@aws-sdk/client-s3@3.623.0)(@aws-sdk/lib-storage@3.623.0(@aws-sdk/client-s3@3.623.0))(payload@2.25.0(@swc/helpers@0.5.5)(@types/react@18.3.3)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))(webpack-cli@4.10.0))) + version: 1.1.3(@aws-sdk/client-s3@3.623.0)(@aws-sdk/lib-storage@3.623.0(@aws-sdk/client-s3@3.623.0))(payload@2.25.0(@swc/helpers@0.5.5)(@types/react@18.3.3)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5)))) '@payloadcms/plugin-nested-docs': specifier: ^1.0.12 - version: 1.0.12(payload@2.25.0(@swc/helpers@0.5.5)(@types/react@18.3.3)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))(webpack-cli@4.10.0))) + version: 1.0.12(payload@2.25.0(@swc/helpers@0.5.5)(@types/react@18.3.3)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5)))) '@payloadcms/plugin-sentry': specifier: ^0.0.6 - version: 0.0.6(payload@2.25.0(@swc/helpers@0.5.5)(@types/react@18.3.3)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))(webpack-cli@4.10.0)))(react@18.3.1) + version: 0.0.6(payload@2.25.0(@swc/helpers@0.5.5)(@types/react@18.3.3)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))))(react@18.3.1) '@payloadcms/plugin-seo': specifier: ^2.3.2 - version: 2.3.2(payload@2.25.0(@swc/helpers@0.5.5)(@types/react@18.3.3)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))(webpack-cli@4.10.0)))(react@18.3.1) + version: 2.3.2(payload@2.25.0(@swc/helpers@0.5.5)(@types/react@18.3.3)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))))(react@18.3.1) '@payloadcms/richtext-slate': specifier: ^1.5.2 - version: 1.5.2(payload@2.25.0(@swc/helpers@0.5.5)(@types/react@18.3.3)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))(webpack-cli@4.10.0)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.5.2(payload@2.25.0(@swc/helpers@0.5.5)(@types/react@18.3.3)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@react-spring/web': specifier: ^9.7.4 version: 9.7.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@sentry/nextjs': specifier: ^8.22.0 - version: 8.22.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.52.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@14.2.5(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.45.3)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.69.4))(react@18.3.1)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))(webpack-cli@4.10.0)) + version: 8.22.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.52.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@14.2.5(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.45.3)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.69.4))(react@18.3.1)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))) airtable: specifier: ^0.12.2 version: 0.12.2(encoding@0.1.13) @@ -133,7 +133,7 @@ importers: version: 1.9.4 migrate-mongo: specifier: ^11.0.0 - version: 11.0.0(mongodb@4.17.1(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0))) + version: 11.0.0(mongodb@4.17.1(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))) monaco-editor: specifier: ^0.50.0 version: 0.50.0 @@ -148,7 +148,7 @@ importers: version: 1.0.3 payload: specifier: ^2.25.0 - version: 2.25.0(@swc/helpers@0.5.5)(@types/react@18.3.3)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))(webpack-cli@4.10.0)) + version: 2.25.0(@swc/helpers@0.5.5)(@types/react@18.3.3)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))) prop-types: specifier: ^15.8.1 version: 15.8.1 @@ -233,10 +233,10 @@ importers: version: link:../../packages/eslint-config-commons-ui eslint-import-resolver-webpack: specifier: ^0.13.8 - version: 0.13.8(eslint-plugin-import@2.29.1)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))(webpack-cli@4.10.0)) + version: 0.13.8(eslint-plugin-import@2.29.1)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))) eslint-plugin-import: specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.93.0))(eslint@8.57.0) + version: 2.29.1(eslint-import-resolver-webpack@0.13.8)(eslint@8.57.0) identity-obj-proxy: specifier: ^3.0.0 version: 3.0.0 @@ -263,7 +263,7 @@ importers: version: 5.5.4 webpack: specifier: ^5.93.0 - version: 5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))(webpack-cli@4.10.0) + version: 5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5)) apps/civicsignalblog: dependencies: @@ -308,10 +308,10 @@ importers: version: 14.2.5(next@14.2.5(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.45.3)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.69.4))(react@18.3.1) '@payloadcms/bundler-webpack': specifier: ^1.0.7 - version: 1.0.7(@swc/core@1.7.6(@swc/helpers@0.5.5))(ajv@8.17.1)(payload@2.25.0(@swc/helpers@0.5.5)(@types/react@18.3.3)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))))(sass@1.69.4) + version: 1.0.7(@swc/core@1.7.6(@swc/helpers@0.5.5))(ajv@8.17.1)(payload@2.25.0(@swc/helpers@0.5.5)(@types/react@18.3.3)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))(webpack-cli@4.10.0)))(sass@1.69.4) '@payloadcms/db-mongodb': specifier: ^1.7.1 - version: 1.7.1(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))(payload@2.25.0(@swc/helpers@0.5.5)(@types/react@18.3.3)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5)))) + version: 1.7.1(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0))(payload@2.25.0(@swc/helpers@0.5.5)(@types/react@18.3.3)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))(webpack-cli@4.10.0))) '@payloadcms/live-preview': specifier: ^0.2.2 version: 0.2.2 @@ -320,22 +320,22 @@ importers: version: 0.2.0(react@18.3.1) '@payloadcms/plugin-cloud-storage': specifier: ^1.1.3 - version: 1.1.3(@aws-sdk/client-s3@3.623.0)(@aws-sdk/lib-storage@3.623.0(@aws-sdk/client-s3@3.623.0))(payload@2.25.0(@swc/helpers@0.5.5)(@types/react@18.3.3)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5)))) + version: 1.1.3(@aws-sdk/client-s3@3.623.0)(@aws-sdk/lib-storage@3.623.0(@aws-sdk/client-s3@3.623.0))(payload@2.25.0(@swc/helpers@0.5.5)(@types/react@18.3.3)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))(webpack-cli@4.10.0))) '@payloadcms/plugin-nested-docs': specifier: ^1.0.12 - version: 1.0.12(payload@2.25.0(@swc/helpers@0.5.5)(@types/react@18.3.3)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5)))) + version: 1.0.12(payload@2.25.0(@swc/helpers@0.5.5)(@types/react@18.3.3)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))(webpack-cli@4.10.0))) '@payloadcms/plugin-sentry': specifier: ^0.0.6 - version: 0.0.6(payload@2.25.0(@swc/helpers@0.5.5)(@types/react@18.3.3)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))))(react@18.3.1) + version: 0.0.6(payload@2.25.0(@swc/helpers@0.5.5)(@types/react@18.3.3)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))(webpack-cli@4.10.0)))(react@18.3.1) '@payloadcms/plugin-seo': specifier: ^2.3.2 - version: 2.3.2(payload@2.25.0(@swc/helpers@0.5.5)(@types/react@18.3.3)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))))(react@18.3.1) + version: 2.3.2(payload@2.25.0(@swc/helpers@0.5.5)(@types/react@18.3.3)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))(webpack-cli@4.10.0)))(react@18.3.1) '@payloadcms/richtext-slate': specifier: ^1.5.2 - version: 1.5.2(payload@2.25.0(@swc/helpers@0.5.5)(@types/react@18.3.3)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.5.2(payload@2.25.0(@swc/helpers@0.5.5)(@types/react@18.3.3)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))(webpack-cli@4.10.0)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@sentry/nextjs': specifier: ^8.22.0 - version: 8.22.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.52.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@14.2.5(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.45.3)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.69.4))(react@18.3.1)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))) + version: 8.22.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.52.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@14.2.5(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.45.3)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.69.4))(react@18.3.1)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))(webpack-cli@4.10.0)) camelcase-keys: specifier: ^9.1.3 version: 9.1.3 @@ -368,7 +368,7 @@ importers: version: 1.0.3 payload: specifier: ^2.25.0 - version: 2.25.0(@swc/helpers@0.5.5)(@types/react@18.3.3)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))) + version: 2.25.0(@swc/helpers@0.5.5)(@types/react@18.3.3)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))(webpack-cli@4.10.0)) prop-types: specifier: ^15.8.1 version: 15.8.1 @@ -432,10 +432,10 @@ importers: version: link:../../packages/eslint-config-commons-ui eslint-import-resolver-webpack: specifier: ^0.13.8 - version: 0.13.8(eslint-plugin-import@2.29.1)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))) + version: 0.13.8(eslint-plugin-import@2.29.1)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))(webpack-cli@4.10.0)) eslint-plugin-import: specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.93.0))(eslint@8.57.0) + version: 2.29.1(eslint-import-resolver-webpack@0.13.8)(eslint@8.57.0) identity-obj-proxy: specifier: ^3.0.0 version: 3.0.0 @@ -462,7 +462,7 @@ importers: version: 5.5.4 webpack: specifier: ^5.93.0 - version: 5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5)) + version: 5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))(webpack-cli@4.10.0) apps/climatemappedafrica: dependencies: @@ -872,7 +872,7 @@ importers: version: 0.13.8(eslint-plugin-import@2.29.1)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))) eslint-plugin-import: specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.93.0))(eslint@8.57.0) + version: 2.29.1(eslint-import-resolver-webpack@0.13.8)(eslint@8.57.0) identity-obj-proxy: specifier: ^3.0.0 version: 3.0.0 @@ -957,45 +957,15 @@ importers: react-syntax-highlighter: specifier: ^15.5.0 version: 15.5.0(react@18.3.1) - rehype-format: - specifier: ^5.0.0 - version: 5.0.0 - rehype-highlight: - specifier: ^7.0.0 - version: 7.0.0 - rehype-raw: - specifier: ^7.0.0 - version: 7.0.0 - rehype-stringify: - specifier: ^10.0.0 - version: 10.0.0 remark: specifier: ^15.0.1 version: 15.0.1 - remark-frontmatter: - specifier: ^5.0.0 - version: 5.0.0 remark-html: specifier: ^16.0.1 version: 16.0.1 remark-mdx: specifier: ^3.0.1 version: 3.0.1 - remark-parse: - specifier: ^11.0.0 - version: 11.0.0 - remark-parse-frontmatter: - specifier: ^1.0.3 - version: 1.0.3 - remark-prism: - specifier: ^1.3.6 - version: 1.3.6 - remark-rehype: - specifier: ^11.1.0 - version: 11.1.0 - unified: - specifier: ^11.0.5 - version: 11.0.5 devDependencies: '@svgr/webpack': specifier: ^8.1.0 @@ -1032,13 +1002,10 @@ importers: version: 0.13.8(eslint-plugin-import@2.29.1)(webpack@5.93.0) eslint-plugin-import: specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.93.0))(eslint@8.57.0) + version: 2.29.1(eslint-import-resolver-webpack@0.13.8)(eslint@8.57.0) prettier: specifier: ^3.3.3 version: 3.3.3 - prismjs: - specifier: ^1.29.0 - version: 1.29.0 typescript: specifier: ^5 version: 5.5.4 @@ -1252,7 +1219,7 @@ importers: version: 0.13.8(eslint-plugin-import@2.29.1)(webpack@5.93.0(esbuild@0.21.5)) eslint-plugin-import: specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.93.0))(eslint@8.57.0) + version: 2.29.1(eslint-import-resolver-webpack@0.13.8)(eslint@8.57.0) eslint-plugin-module-resolver: specifier: ^1.5.0 version: 1.5.0 @@ -1436,7 +1403,7 @@ importers: version: 0.13.8(eslint-plugin-import@2.29.1)(webpack@5.93.0) eslint-plugin-import: specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.93.0))(eslint@8.57.0) + version: 2.29.1(eslint-import-resolver-webpack@0.13.8)(eslint@8.57.0) identity-obj-proxy: specifier: ^3.0.0 version: 3.0.0 @@ -1626,7 +1593,7 @@ importers: version: 0.13.8(eslint-plugin-import@2.29.1)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))) eslint-plugin-import: specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.93.0))(eslint@8.57.0) + version: 2.29.1(eslint-import-resolver-webpack@0.13.8)(eslint@8.57.0) jest: specifier: ^29.7.0 version: 29.7.0(@types/node@20.14.14)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.6(@swc/helpers@0.5.5))(@types/node@20.14.14)(typescript@5.5.4)) @@ -1750,7 +1717,7 @@ importers: version: 0.13.8(eslint-plugin-import@2.29.1)(webpack@5.93.0) eslint-plugin-import: specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.93.0))(eslint@8.57.0) + version: 2.29.1(eslint-import-resolver-webpack@0.13.8)(eslint@8.57.0) prettier: specifier: ^3.3.3 version: 3.3.3 @@ -7020,9 +6987,6 @@ packages: ace-builds@1.35.4: resolution: {integrity: sha512-r0KQclhZ/uk5a4zOqRYQkJuQuu4vFMiA6VTj54Tk4nI1TUR3iEMMppZkWbNoWEgWwv4ciDloObb9Rf4V55Qgjw==} - acorn-globals@6.0.0: - resolution: {integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==} - acorn-globals@7.0.1: resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} @@ -7464,9 +7428,6 @@ packages: browser-assert@1.2.1: resolution: {integrity: sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==} - browser-process-hrtime@1.0.0: - resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==} - browserify-aes@1.2.0: resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} @@ -8017,9 +7978,6 @@ packages: css-select@5.1.0: resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} - css-selector-parser@1.4.1: - resolution: {integrity: sha512-HYPSb7y/Z7BNDCOrakL4raGO2zltZkbeXyAd6Tg9obzix6QhzxCotdBl6VT0Dv4vZfJGVz3WL/xaEI9Ly3ul0g==} - css-tree@2.2.1: resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} @@ -8056,9 +8014,6 @@ packages: cssom@0.3.8: resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} - cssom@0.4.4: - resolution: {integrity: sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==} - cssom@0.5.0: resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==} @@ -8199,10 +8154,6 @@ packages: resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==} engines: {node: '>=0.10'} - data-urls@2.0.0: - resolution: {integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==} - engines: {node: '>=10'} - data-urls@3.0.2: resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} engines: {node: '>=12'} @@ -8455,11 +8406,6 @@ packages: domelementtype@2.3.0: resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} - domexception@2.0.1: - resolution: {integrity: sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==} - engines: {node: '>=8'} - deprecated: Use your platform's native DOMException instead - domexception@4.0.0: resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==} engines: {node: '>=12'} @@ -8682,10 +8628,6 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - escape-string-regexp@5.0.0: - resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} - engines: {node: '>=12'} - escodegen@2.1.0: resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} engines: {node: '>=6.0'} @@ -9087,9 +9029,6 @@ packages: fault@1.0.4: resolution: {integrity: sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==} - fault@2.0.1: - resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==} - fb-watchman@2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} @@ -9229,10 +9168,6 @@ packages: resolution: {integrity: sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==} engines: {node: '>= 0.12'} - form-data@3.0.1: - resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==} - engines: {node: '>= 6'} - form-data@4.0.0: resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} engines: {node: '>= 6'} @@ -9630,36 +9565,15 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} - hast-util-embedded@3.0.0: - resolution: {integrity: sha512-naH8sld4Pe2ep03qqULEtvYr7EjrLK2QHY8KJR6RJkTUjPGObe1vnx585uzem2hGra+s1q08DZZpfgDVYRbaXA==} - - hast-util-from-parse5@8.0.1: - resolution: {integrity: sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==} - - hast-util-has-property@3.0.0: - resolution: {integrity: sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA==} - hast-util-heading-rank@3.0.0: resolution: {integrity: sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA==} - hast-util-is-body-ok-link@3.0.0: - resolution: {integrity: sha512-VFHY5bo2nY8HiV6nir2ynmEB1XkxzuUffhEGeVx7orbu/B1KaGyeGgMZldvMVx5xWrDlLLG/kQ6YkJAMkBEx0w==} - hast-util-is-element@3.0.0: resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} hast-util-parse-selector@2.2.5: resolution: {integrity: sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==} - hast-util-parse-selector@4.0.0: - resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} - - hast-util-phrasing@3.0.1: - resolution: {integrity: sha512-6h60VfI3uBQUxHqTyMymMZnEbNl1XmEGtOxxKYL7stY2o601COo62AWAYBQR9lZbYXYSBoxag8UpPRXK+9fqSQ==} - - hast-util-raw@9.0.4: - resolution: {integrity: sha512-LHE65TD2YiNsHD3YuXcKPHXPLuYh/gjp12mOfU8jxSrm1f/yJpsb0F/KKljS6U9LJoP0Ux+tCe8iJ2AsPzTdgA==} - hast-util-sanitize@5.0.1: resolution: {integrity: sha512-IGrgWLuip4O2nq5CugXy4GI2V8kx4sFVy5Hd4vF7AR2gxS0N9s7nEAVUyeMtZKZvzrxVsHt73XdTsno1tClIkQ==} @@ -9672,24 +9586,15 @@ packages: hast-util-to-jsx-runtime@2.3.0: resolution: {integrity: sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==} - hast-util-to-parse5@8.0.0: - resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==} - hast-util-to-string@3.0.0: resolution: {integrity: sha512-OGkAxX1Ua3cbcW6EJ5pT/tslVb90uViVkcJ4ZZIMW/R33DX/AkcJcRrPebPwJkHYwlDHXz4aIwvAAaAdtrACFA==} - hast-util-to-text@4.0.2: - resolution: {integrity: sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==} - hast-util-whitespace@3.0.0: resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} hastscript@6.0.0: resolution: {integrity: sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==} - hastscript@8.0.0: - resolution: {integrity: sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==} - he@1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true @@ -9700,10 +9605,6 @@ packages: highlight.js@10.7.3: resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} - highlight.js@11.9.0: - resolution: {integrity: sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw==} - engines: {node: '>=12.0.0'} - history@4.10.1: resolution: {integrity: sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==} @@ -9717,10 +9618,6 @@ packages: resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} engines: {node: '>=0.10.0'} - html-encoding-sniffer@2.0.1: - resolution: {integrity: sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==} - engines: {node: '>=10'} - html-encoding-sniffer@3.0.0: resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} engines: {node: '>=12'} @@ -9775,9 +9672,6 @@ packages: webpack: optional: true - html-whitespace-sensitive-tag-names@3.0.0: - resolution: {integrity: sha512-KlClZ3/Qy5UgvpvVvDomGhnQhNWH5INE8GwvSIQ9CWt1K0zbbXrl7eN5bWaafOZgtmO3jMPwUqmrmEwinhPq1w==} - htmlparser2@6.1.0: resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} @@ -10491,15 +10385,6 @@ packages: '@babel/preset-env': optional: true - jsdom@16.7.0: - resolution: {integrity: sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==} - engines: {node: '>=10'} - peerDependencies: - canvas: ^2.5.0 - peerDependenciesMeta: - canvas: - optional: true - jsdom@20.0.3: resolution: {integrity: sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==} engines: {node: '>=14'} @@ -10755,9 +10640,6 @@ packages: lodash.isequal@4.5.0: resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} - lodash.iteratee@4.7.0: - resolution: {integrity: sha512-yv3cSQZmfpbIKo4Yo45B1taEvxjNvcpF1CEOc0Y6dEyvhPIfEJE3twDwPgWTPQubcSgXyBwBKG6wpQvWMDOf6Q==} - lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} @@ -10794,9 +10676,6 @@ packages: lowlight@1.20.0: resolution: {integrity: sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==} - lowlight@3.1.0: - resolution: {integrity: sha512-CEbNVoSikAxwDMDPjXlqlFYiZLkDJHwyGu/MfOsJnF3d7f3tds5J3z8s/l9TMXhzfsJCCJEAsD78842mwmg0PQ==} - lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} @@ -10884,9 +10763,6 @@ packages: mdast-util-from-markdown@2.0.1: resolution: {integrity: sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==} - mdast-util-frontmatter@2.0.1: - resolution: {integrity: sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==} - mdast-util-mdx-expression@2.0.0: resolution: {integrity: sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw==} @@ -10983,9 +10859,6 @@ packages: micromark-core-commonmark@2.0.1: resolution: {integrity: sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==} - micromark-extension-frontmatter@2.0.0: - resolution: {integrity: sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==} - micromark-extension-mdx-expression@3.0.0: resolution: {integrity: sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ==} @@ -11731,12 +11604,6 @@ packages: resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} engines: {node: '>=0.10.0'} - parse5-htmlparser2-tree-adapter@6.0.1: - resolution: {integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==} - - parse5@6.0.1: - resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} - parse5@7.1.2: resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} @@ -12762,24 +12629,9 @@ packages: rehype-external-links@3.0.0: resolution: {integrity: sha512-yp+e5N9V3C6bwBeAC4n796kc86M4gJCdlVhiMTxIrJG5UHDMh+PJANf9heqORJbt1nrCbDwIlAZKjANIaVBbvw==} - rehype-format@5.0.0: - resolution: {integrity: sha512-kM4II8krCHmUhxrlvzFSptvaWh280Fr7UGNJU5DCMuvmAwGCNmGfi9CvFAQK6JDjsNoRMWQStglK3zKJH685Wg==} - - rehype-highlight@7.0.0: - resolution: {integrity: sha512-QtobgRgYoQaK6p1eSr2SD1i61f7bjF2kZHAQHxeCHAuJf7ZUDMvQ7owDq9YTkmar5m5TSUol+2D3bp3KfJf/oA==} - - rehype-minify-whitespace@6.0.0: - resolution: {integrity: sha512-i9It4YHR0Sf3GsnlR5jFUKXRr9oayvEk9GKQUkwZv6hs70OH9q3OCZrq9PpLvIGKt3W+JxBOxCidNVpH/6rWdA==} - - rehype-raw@7.0.0: - resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} - rehype-slug@6.0.0: resolution: {integrity: sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A==} - rehype-stringify@10.0.0: - resolution: {integrity: sha512-1TX1i048LooI9QoecrXy7nGFFbFSufxVRAfc6Y9YMRAi56l+oB0zP51mLSV312uRuvVLPV1opSlJmslozR1XHQ==} - relateurl@0.2.7: resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==} engines: {node: '>= 0.10'} @@ -12787,28 +12639,18 @@ packages: remark-external-links@8.0.0: resolution: {integrity: sha512-5vPSX0kHoSsqtdftSHhIYofVINC8qmp0nctkeU9YoJwV3YfiBRiI6cbFRJ0oI/1F9xS+bopXG0m2KS8VFscuKA==} - remark-frontmatter@5.0.0: - resolution: {integrity: sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==} - remark-html@16.0.1: resolution: {integrity: sha512-B9JqA5i0qZe0Nsf49q3OXyGvyXuZFDzAP2iOFLEumymuYJITVpiH1IgsTEwTpdptDmZlMDMWeDmSawdaJIGCXQ==} remark-mdx@3.0.1: resolution: {integrity: sha512-3Pz3yPQ5Rht2pM5R+0J2MrGoBSrzf+tJG94N+t/ilfdh8YLyyKYtidAYwTveB20BoHAcwIopOUqhcmh2F7hGYA==} - remark-parse-frontmatter@1.0.3: - resolution: {integrity: sha512-2hqW4Nod8pEkP4kdui7jOvCwcTfYBfgAb3XJhYYTZGrTMBcxFzQ7h7ay6OwmpJME5BOhORpZ7eY5+K4OHHIh4Q==} - engines: {node: '>=12'} - remark-parse@10.0.2: resolution: {integrity: sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==} remark-parse@11.0.0: resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} - remark-prism@1.3.6: - resolution: {integrity: sha512-yYSXJ2MEK2DeD9UKDKFkQPcVqRx6aX2FYD1kE27ScogpZ/BBO8MoOO6gf/AKqfXvKGnP51wqvDEBmPseypgaug==} - remark-rehype@11.1.0: resolution: {integrity: sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==} @@ -12918,10 +12760,6 @@ packages: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - revalidator@0.3.1: - resolution: {integrity: sha512-orq+Nw+V5pDpQwGEuN2n1AgJ+0A8WqhFHKt5KgkxfAowUKgO1CWV32IR3TNB4g9/FX3gJt9qBJO8DYlwonnB0Q==} - engines: {node: '>= 0.8.0'} - rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} @@ -13022,10 +12860,6 @@ packages: sax@1.4.1: resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} - saxes@5.0.1: - resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==} - engines: {node: '>=10'} - saxes@6.0.0: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} @@ -13719,10 +13553,6 @@ packages: tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - tr46@2.1.0: - resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==} - engines: {node: '>=8'} - tr46@3.0.0: resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} engines: {node: '>=12'} @@ -13972,12 +13802,6 @@ packages: resolution: {integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==} engines: {node: '>=12'} - unist-util-find-after@5.0.0: - resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==} - - unist-util-find@1.0.4: - resolution: {integrity: sha512-T5vI7IkhroDj7KxAIy057VbIeGnCXfso4d4GoUsjbAmDLQUkzAeszlBtzx1+KHgdsYYBygaqUBvrbYCfePedZw==} - unist-util-is@4.1.0: resolution: {integrity: sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==} @@ -13987,9 +13811,6 @@ packages: unist-util-is@6.0.0: resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} - unist-util-map@2.0.1: - resolution: {integrity: sha512-VdNvk4BQUUU9Rgr8iUOvclHa/iN9O+6Dt66FKij8l9OVezGG37gGWCPU5KSax1R2degqXFvl3kWTkvzL79e9tQ==} - unist-util-position-from-estree@2.0.0: resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==} @@ -14322,9 +14143,6 @@ packages: resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} engines: {'0': node >=0.6.0} - vfile-location@5.0.3: - resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} - vfile-message@3.1.4: resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==} @@ -14522,14 +14340,6 @@ packages: vscode-uri@3.0.8: resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==} - w3c-hr-time@1.0.2: - resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} - deprecated: Use your platform's native performance.now() and performance.timeOrigin. - - w3c-xmlserializer@2.0.0: - resolution: {integrity: sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==} - engines: {node: '>=10'} - w3c-xmlserializer@4.0.0: resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==} engines: {node: '>=14'} @@ -14554,20 +14364,9 @@ packages: wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} - web-namespaces@2.0.1: - resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} - webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - webidl-conversions@5.0.0: - resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==} - engines: {node: '>=8'} - - webidl-conversions@6.1.0: - resolution: {integrity: sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==} - engines: {node: '>=10.4'} - webidl-conversions@7.0.0: resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} engines: {node: '>=12'} @@ -14645,9 +14444,6 @@ packages: webpack-cli: optional: true - whatwg-encoding@1.0.5: - resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==} - whatwg-encoding@2.0.0: resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} engines: {node: '>=12'} @@ -14659,9 +14455,6 @@ packages: whatwg-fetch@3.6.20: resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==} - whatwg-mimetype@2.3.0: - resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==} - whatwg-mimetype@3.0.0: resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} engines: {node: '>=12'} @@ -14681,10 +14474,6 @@ packages: whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - whatwg-url@8.7.0: - resolution: {integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==} - engines: {node: '>=10'} - which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} @@ -14785,9 +14574,6 @@ packages: engines: {node: '>=0.8'} hasBin: true - xml-name-validator@3.0.0: - resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==} - xml-name-validator@4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -15017,7 +14803,7 @@ snapshots: '@aws-sdk/client-sso-oidc': 3.623.0(@aws-sdk/client-sts@3.621.0) '@aws-sdk/client-sts': 3.623.0 '@aws-sdk/core': 3.623.0 - '@aws-sdk/credential-provider-node': 3.623.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))(@aws-sdk/client-sts@3.621.0) + '@aws-sdk/credential-provider-node': 3.623.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))(@aws-sdk/client-sts@3.623.0) '@aws-sdk/middleware-bucket-endpoint': 3.620.0 '@aws-sdk/middleware-expect-continue': 3.620.0 '@aws-sdk/middleware-flexible-checksums': 3.620.0 @@ -15168,7 +14954,7 @@ snapshots: '@aws-crypto/sha256-js': 5.2.0 '@aws-sdk/client-sts': 3.623.0 '@aws-sdk/core': 3.623.0 - '@aws-sdk/credential-provider-node': 3.623.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))(@aws-sdk/client-sts@3.621.0) + '@aws-sdk/credential-provider-node': 3.623.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))(@aws-sdk/client-sts@3.623.0) '@aws-sdk/middleware-host-header': 3.620.0 '@aws-sdk/middleware-logger': 3.609.0 '@aws-sdk/middleware-recursion-detection': 3.620.0 @@ -15344,7 +15130,7 @@ snapshots: '@aws-crypto/sha256-js': 5.2.0 '@aws-sdk/client-sso-oidc': 3.623.0(@aws-sdk/client-sts@3.623.0) '@aws-sdk/core': 3.623.0 - '@aws-sdk/credential-provider-node': 3.623.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))(@aws-sdk/client-sts@3.621.0) + '@aws-sdk/credential-provider-node': 3.623.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))(@aws-sdk/client-sts@3.623.0) '@aws-sdk/middleware-host-header': 3.620.0 '@aws-sdk/middleware-logger': 3.609.0 '@aws-sdk/middleware-recursion-detection': 3.620.0 @@ -15467,6 +15253,25 @@ snapshots: - '@aws-sdk/client-sso-oidc' - aws-crt + '@aws-sdk/credential-provider-ini@3.621.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0))(@aws-sdk/client-sts@3.621.0)': + dependencies: + '@aws-sdk/client-sts': 3.621.0 + '@aws-sdk/credential-provider-env': 3.620.1 + '@aws-sdk/credential-provider-http': 3.621.0 + '@aws-sdk/credential-provider-process': 3.620.1 + '@aws-sdk/credential-provider-sso': 3.621.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0)) + '@aws-sdk/credential-provider-web-identity': 3.621.0(@aws-sdk/client-sts@3.621.0) + '@aws-sdk/types': 3.609.0 + '@smithy/credential-provider-imds': 3.2.0 + '@smithy/property-provider': 3.1.3 + '@smithy/shared-ini-file-loader': 3.1.4 + '@smithy/types': 3.3.0 + tslib: 2.6.3 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt + optional: true + '@aws-sdk/credential-provider-ini@3.621.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))(@aws-sdk/client-sts@3.621.0)': dependencies: '@aws-sdk/client-sts': 3.621.0 @@ -15504,6 +15309,24 @@ snapshots: - '@aws-sdk/client-sso-oidc' - aws-crt + '@aws-sdk/credential-provider-ini@3.623.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))(@aws-sdk/client-sts@3.623.0)': + dependencies: + '@aws-sdk/client-sts': 3.623.0 + '@aws-sdk/credential-provider-env': 3.620.1 + '@aws-sdk/credential-provider-http': 3.622.0 + '@aws-sdk/credential-provider-process': 3.620.1 + '@aws-sdk/credential-provider-sso': 3.623.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0)) + '@aws-sdk/credential-provider-web-identity': 3.621.0(@aws-sdk/client-sts@3.623.0) + '@aws-sdk/types': 3.609.0 + '@smithy/credential-provider-imds': 3.2.0 + '@smithy/property-provider': 3.1.3 + '@smithy/shared-ini-file-loader': 3.1.4 + '@smithy/types': 3.3.0 + tslib: 2.6.3 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt + '@aws-sdk/credential-provider-node@3.621.0(@aws-sdk/client-sso-oidc@3.621.0(@aws-sdk/client-sts@3.621.0))(@aws-sdk/client-sts@3.621.0)': dependencies: '@aws-sdk/credential-provider-env': 3.620.1 @@ -15523,6 +15346,26 @@ snapshots: - '@aws-sdk/client-sts' - aws-crt + '@aws-sdk/credential-provider-node@3.621.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0))(@aws-sdk/client-sts@3.621.0)': + dependencies: + '@aws-sdk/credential-provider-env': 3.620.1 + '@aws-sdk/credential-provider-http': 3.621.0 + '@aws-sdk/credential-provider-ini': 3.621.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0))(@aws-sdk/client-sts@3.621.0) + '@aws-sdk/credential-provider-process': 3.620.1 + '@aws-sdk/credential-provider-sso': 3.621.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0)) + '@aws-sdk/credential-provider-web-identity': 3.621.0(@aws-sdk/client-sts@3.621.0) + '@aws-sdk/types': 3.609.0 + '@smithy/credential-provider-imds': 3.2.0 + '@smithy/property-provider': 3.1.3 + '@smithy/shared-ini-file-loader': 3.1.4 + '@smithy/types': 3.3.0 + tslib: 2.6.3 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - '@aws-sdk/client-sts' + - aws-crt + optional: true + '@aws-sdk/credential-provider-node@3.621.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))(@aws-sdk/client-sts@3.621.0)': dependencies: '@aws-sdk/credential-provider-env': 3.620.1 @@ -15562,6 +15405,25 @@ snapshots: - '@aws-sdk/client-sts' - aws-crt + '@aws-sdk/credential-provider-node@3.623.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))(@aws-sdk/client-sts@3.623.0)': + dependencies: + '@aws-sdk/credential-provider-env': 3.620.1 + '@aws-sdk/credential-provider-http': 3.622.0 + '@aws-sdk/credential-provider-ini': 3.623.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))(@aws-sdk/client-sts@3.623.0) + '@aws-sdk/credential-provider-process': 3.620.1 + '@aws-sdk/credential-provider-sso': 3.623.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0)) + '@aws-sdk/credential-provider-web-identity': 3.621.0(@aws-sdk/client-sts@3.623.0) + '@aws-sdk/types': 3.609.0 + '@smithy/credential-provider-imds': 3.2.0 + '@smithy/property-provider': 3.1.3 + '@smithy/shared-ini-file-loader': 3.1.4 + '@smithy/types': 3.3.0 + tslib: 2.6.3 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - '@aws-sdk/client-sts' + - aws-crt + '@aws-sdk/credential-provider-process@3.620.1': dependencies: '@aws-sdk/types': 3.609.0 @@ -15583,6 +15445,20 @@ snapshots: - '@aws-sdk/client-sso-oidc' - aws-crt + '@aws-sdk/credential-provider-sso@3.621.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0))': + dependencies: + '@aws-sdk/client-sso': 3.621.0 + '@aws-sdk/token-providers': 3.614.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0)) + '@aws-sdk/types': 3.609.0 + '@smithy/property-provider': 3.1.3 + '@smithy/shared-ini-file-loader': 3.1.4 + '@smithy/types': 3.3.0 + tslib: 2.6.3 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt + optional: true + '@aws-sdk/credential-provider-sso@3.621.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))': dependencies: '@aws-sdk/client-sso': 3.621.0 @@ -15618,6 +15494,37 @@ snapshots: '@smithy/types': 3.3.0 tslib: 2.6.3 + '@aws-sdk/credential-provider-web-identity@3.621.0(@aws-sdk/client-sts@3.623.0)': + dependencies: + '@aws-sdk/client-sts': 3.623.0 + '@aws-sdk/types': 3.609.0 + '@smithy/property-provider': 3.1.3 + '@smithy/types': 3.3.0 + tslib: 2.6.3 + + '@aws-sdk/credential-providers@3.621.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0))': + dependencies: + '@aws-sdk/client-cognito-identity': 3.621.0 + '@aws-sdk/client-sso': 3.621.0 + '@aws-sdk/client-sts': 3.621.0 + '@aws-sdk/credential-provider-cognito-identity': 3.621.0 + '@aws-sdk/credential-provider-env': 3.620.1 + '@aws-sdk/credential-provider-http': 3.621.0 + '@aws-sdk/credential-provider-ini': 3.621.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0))(@aws-sdk/client-sts@3.621.0) + '@aws-sdk/credential-provider-node': 3.621.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0))(@aws-sdk/client-sts@3.621.0) + '@aws-sdk/credential-provider-process': 3.620.1 + '@aws-sdk/credential-provider-sso': 3.621.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0)) + '@aws-sdk/credential-provider-web-identity': 3.621.0(@aws-sdk/client-sts@3.621.0) + '@aws-sdk/types': 3.609.0 + '@smithy/credential-provider-imds': 3.2.0 + '@smithy/property-provider': 3.1.3 + '@smithy/types': 3.3.0 + tslib: 2.6.3 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt + optional: true + '@aws-sdk/credential-providers@3.621.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))': dependencies: '@aws-sdk/client-cognito-identity': 3.621.0 @@ -15771,7 +15678,7 @@ snapshots: '@smithy/types': 3.3.0 tslib: 2.6.3 - '@aws-sdk/token-providers@3.614.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))': + '@aws-sdk/token-providers@3.614.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0))': dependencies: '@aws-sdk/client-sso-oidc': 3.623.0(@aws-sdk/client-sts@3.621.0) '@aws-sdk/types': 3.609.0 @@ -15779,6 +15686,16 @@ snapshots: '@smithy/shared-ini-file-loader': 3.1.4 '@smithy/types': 3.3.0 tslib: 2.6.3 + optional: true + + '@aws-sdk/token-providers@3.614.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))': + dependencies: + '@aws-sdk/client-sso-oidc': 3.623.0(@aws-sdk/client-sts@3.623.0) + '@aws-sdk/types': 3.609.0 + '@smithy/property-provider': 3.1.3 + '@smithy/shared-ini-file-loader': 3.1.4 + '@smithy/types': 3.3.0 + tslib: 2.6.3 '@aws-sdk/types@3.609.0': dependencies: @@ -18666,7 +18583,7 @@ snapshots: deepmerge: 4.3.1 get-port: 5.1.1 http-status: 1.6.2 - mongoose: 6.12.3(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0)) + mongoose: 6.12.3(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0)) mongoose-aggregate-paginate-v2: 1.0.6 mongoose-paginate-v2: 1.7.22 payload: 2.25.0(@swc/helpers@0.5.5)(@types/react@18.3.3)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))(webpack-cli@4.10.0)) @@ -21383,7 +21300,8 @@ snapshots: '@tokenizer/token@0.3.0': {} - '@tootallnate/once@1.1.2': {} + '@tootallnate/once@1.1.2': + optional: true '@tootallnate/once@2.0.0': {} @@ -22010,11 +21928,6 @@ snapshots: ace-builds@1.35.4: {} - acorn-globals@6.0.0: - dependencies: - acorn: 7.4.1 - acorn-walk: 7.2.0 - acorn-globals@7.0.1: dependencies: acorn: 8.12.1 @@ -22580,8 +22493,6 @@ snapshots: browser-assert@1.2.1: {} - browser-process-hrtime@1.0.0: {} - browserify-aes@1.2.0: dependencies: buffer-xor: 1.0.3 @@ -23235,8 +23146,6 @@ snapshots: domutils: 3.1.0 nth-check: 2.1.1 - css-selector-parser@1.4.1: {} - css-tree@2.2.1: dependencies: mdn-data: 2.0.28 @@ -23268,8 +23177,6 @@ snapshots: cssom@0.3.8: {} - cssom@0.4.4: {} - cssom@0.5.0: {} cssstyle@2.3.0: @@ -23409,12 +23316,6 @@ snapshots: dependencies: assert-plus: 1.0.0 - data-urls@2.0.0: - dependencies: - abab: 2.0.6 - whatwg-mimetype: 2.3.0 - whatwg-url: 8.7.0 - data-urls@3.0.2: dependencies: abab: 2.0.6 @@ -23665,10 +23566,6 @@ snapshots: domelementtype@2.3.0: {} - domexception@2.0.1: - dependencies: - webidl-conversions: 5.0.0 - domexception@4.0.0: dependencies: webidl-conversions: 7.0.0 @@ -24010,8 +23907,6 @@ snapshots: escape-string-regexp@4.0.0: {} - escape-string-regexp@5.0.0: {} - escodegen@2.1.0: dependencies: esprima: 4.0.1 @@ -24180,7 +24075,7 @@ snapshots: array.prototype.find: 2.2.3 debug: 3.2.7 enhanced-resolve: 0.9.1 - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.93.0))(eslint@8.57.0) + eslint-plugin-import: 2.29.1(eslint-import-resolver-webpack@0.13.8)(eslint@8.57.0) find-root: 1.1.0 hasown: 2.0.2 interpret: 1.4.0 @@ -24198,7 +24093,7 @@ snapshots: array.prototype.find: 2.2.3 debug: 3.2.7 enhanced-resolve: 0.9.1 - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.93.0))(eslint@8.57.0) + eslint-plugin-import: 2.29.1(eslint-import-resolver-webpack@0.13.8)(eslint@8.57.0) find-root: 1.1.0 hasown: 2.0.2 interpret: 1.4.0 @@ -24216,7 +24111,7 @@ snapshots: array.prototype.find: 2.2.3 debug: 3.2.7 enhanced-resolve: 0.9.1 - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.93.0))(eslint@8.57.0) + eslint-plugin-import: 2.29.1(eslint-import-resolver-webpack@0.13.8)(eslint@8.57.0) find-root: 1.1.0 hasown: 2.0.2 interpret: 1.4.0 @@ -24234,7 +24129,7 @@ snapshots: array.prototype.find: 2.2.3 debug: 3.2.7 enhanced-resolve: 0.9.1 - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.93.0))(eslint@8.57.0) + eslint-plugin-import: 2.29.1(eslint-import-resolver-webpack@0.13.8)(eslint@8.57.0) find-root: 1.1.0 hasown: 2.0.2 interpret: 1.4.0 @@ -24282,6 +24177,16 @@ snapshots: transitivePeerDependencies: - supports-color + eslint-module-utils@2.8.1(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))(webpack-cli@4.10.0)))(eslint@8.57.0): + dependencies: + debug: 3.2.7 + optionalDependencies: + eslint: 8.57.0 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-webpack: 0.13.8(eslint-plugin-import@2.29.1)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))(webpack-cli@4.10.0)) + transitivePeerDependencies: + - supports-color + eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))))(eslint@8.57.0): dependencies: array-includes: 3.1.8 @@ -24363,6 +24268,31 @@ snapshots: - eslint-import-resolver-webpack - supports-color + eslint-plugin-import@2.29.1(eslint-import-resolver-webpack@0.13.8)(eslint@8.57.0): + dependencies: + array-includes: 3.1.8 + array.prototype.findlastindex: 1.2.5 + array.prototype.flat: 1.3.2 + array.prototype.flatmap: 1.3.2 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.57.0 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.8.1(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))(webpack-cli@4.10.0)))(eslint@8.57.0) + hasown: 2.0.2 + is-core-module: 2.15.0 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.0 + semver: 6.3.1 + tsconfig-paths: 3.15.0 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + eslint-plugin-jest-dom@5.4.0(@testing-library/dom@10.1.0)(eslint@8.57.0): dependencies: '@babel/runtime': 7.25.0 @@ -24789,10 +24719,6 @@ snapshots: dependencies: format: 0.2.2 - fault@2.0.1: - dependencies: - format: 0.2.2 - fb-watchman@2.0.2: dependencies: bser: 2.1.1 @@ -24991,12 +24917,6 @@ snapshots: combined-stream: 1.0.8 mime-types: 2.1.35 - form-data@3.0.1: - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - mime-types: 2.1.35 - form-data@4.0.0: dependencies: asynckit: 0.4.0 @@ -25460,68 +25380,16 @@ snapshots: dependencies: function-bind: 1.1.2 - hast-util-embedded@3.0.0: - dependencies: - '@types/hast': 3.0.4 - hast-util-is-element: 3.0.0 - - hast-util-from-parse5@8.0.1: - dependencies: - '@types/hast': 3.0.4 - '@types/unist': 3.0.2 - devlop: 1.1.0 - hastscript: 8.0.0 - property-information: 6.5.0 - vfile: 6.0.2 - vfile-location: 5.0.3 - web-namespaces: 2.0.1 - - hast-util-has-property@3.0.0: - dependencies: - '@types/hast': 3.0.4 - hast-util-heading-rank@3.0.0: dependencies: '@types/hast': 3.0.4 - hast-util-is-body-ok-link@3.0.0: - dependencies: - '@types/hast': 3.0.4 - hast-util-is-element@3.0.0: dependencies: '@types/hast': 3.0.4 hast-util-parse-selector@2.2.5: {} - hast-util-parse-selector@4.0.0: - dependencies: - '@types/hast': 3.0.4 - - hast-util-phrasing@3.0.1: - dependencies: - '@types/hast': 3.0.4 - hast-util-embedded: 3.0.0 - hast-util-has-property: 3.0.0 - hast-util-is-body-ok-link: 3.0.0 - hast-util-is-element: 3.0.0 - - hast-util-raw@9.0.4: - dependencies: - '@types/hast': 3.0.4 - '@types/unist': 3.0.2 - '@ungap/structured-clone': 1.2.0 - hast-util-from-parse5: 8.0.1 - hast-util-to-parse5: 8.0.0 - html-void-elements: 3.0.0 - mdast-util-to-hast: 13.2.0 - parse5: 7.1.2 - unist-util-position: 5.0.0 - unist-util-visit: 5.0.0 - vfile: 6.0.2 - web-namespaces: 2.0.1 - zwitch: 2.0.4 - hast-util-sanitize@5.0.1: dependencies: '@types/hast': 3.0.4 @@ -25583,27 +25451,10 @@ snapshots: transitivePeerDependencies: - supports-color - hast-util-to-parse5@8.0.0: - dependencies: - '@types/hast': 3.0.4 - comma-separated-tokens: 2.0.3 - devlop: 1.1.0 - property-information: 6.5.0 - space-separated-tokens: 2.0.2 - web-namespaces: 2.0.1 - zwitch: 2.0.4 - hast-util-to-string@3.0.0: dependencies: '@types/hast': 3.0.4 - hast-util-to-text@4.0.2: - dependencies: - '@types/hast': 3.0.4 - '@types/unist': 3.0.2 - hast-util-is-element: 3.0.0 - unist-util-find-after: 5.0.0 - hast-util-whitespace@3.0.0: dependencies: '@types/hast': 3.0.4 @@ -25616,14 +25467,6 @@ snapshots: property-information: 5.6.0 space-separated-tokens: 1.1.5 - hastscript@8.0.0: - dependencies: - '@types/hast': 3.0.4 - comma-separated-tokens: 2.0.3 - hast-util-parse-selector: 4.0.0 - property-information: 6.5.0 - space-separated-tokens: 2.0.2 - he@1.2.0: {} help-me@4.2.0: @@ -25633,8 +25476,6 @@ snapshots: highlight.js@10.7.3: {} - highlight.js@11.9.0: {} - history@4.10.1: dependencies: '@babel/runtime': 7.25.0 @@ -25658,10 +25499,6 @@ snapshots: dependencies: parse-passwd: 1.0.0 - html-encoding-sniffer@2.0.1: - dependencies: - whatwg-encoding: 1.0.5 - html-encoding-sniffer@3.0.0: dependencies: whatwg-encoding: 2.0.0 @@ -25750,8 +25587,6 @@ snapshots: optionalDependencies: webpack: 5.93.0 - html-whitespace-sensitive-tag-names@3.0.0: {} - htmlparser2@6.1.0: dependencies: domelementtype: 2.3.0 @@ -25777,6 +25612,7 @@ snapshots: debug: 4.3.6 transitivePeerDependencies: - supports-color + optional: true http-proxy-agent@5.0.0: dependencies: @@ -26715,40 +26551,6 @@ snapshots: transitivePeerDependencies: - supports-color - jsdom@16.7.0: - dependencies: - abab: 2.0.6 - acorn: 8.12.1 - acorn-globals: 6.0.0 - cssom: 0.4.4 - cssstyle: 2.3.0 - data-urls: 2.0.0 - decimal.js: 10.4.3 - domexception: 2.0.1 - escodegen: 2.1.0 - form-data: 3.0.1 - html-encoding-sniffer: 2.0.1 - http-proxy-agent: 4.0.1 - https-proxy-agent: 5.0.1 - is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.12 - parse5: 6.0.1 - saxes: 5.0.1 - symbol-tree: 3.2.4 - tough-cookie: 4.1.4 - w3c-hr-time: 1.0.2 - w3c-xmlserializer: 2.0.0 - webidl-conversions: 6.1.0 - whatwg-encoding: 1.0.5 - whatwg-mimetype: 2.3.0 - whatwg-url: 8.7.0 - ws: 7.5.10 - xml-name-validator: 3.0.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - jsdom@20.0.3: dependencies: abab: 2.0.6 @@ -27087,8 +26889,6 @@ snapshots: lodash.isequal@4.5.0: {} - lodash.iteratee@4.7.0: {} - lodash.merge@4.6.2: {} lodash.startcase@4.4.0: {} @@ -27129,12 +26929,6 @@ snapshots: fault: 1.0.4 highlight.js: 10.7.3 - lowlight@3.1.0: - dependencies: - '@types/hast': 3.0.4 - devlop: 1.1.0 - highlight.js: 11.9.0 - lru-cache@10.4.3: {} lru-cache@4.1.5: @@ -27282,17 +27076,6 @@ snapshots: transitivePeerDependencies: - supports-color - mdast-util-frontmatter@2.0.1: - dependencies: - '@types/mdast': 4.0.4 - devlop: 1.1.0 - escape-string-regexp: 5.0.0 - mdast-util-from-markdown: 2.0.1 - mdast-util-to-markdown: 2.1.0 - micromark-extension-frontmatter: 2.0.0 - transitivePeerDependencies: - - supports-color - mdast-util-mdx-expression@2.0.0: dependencies: '@types/estree-jsx': 1.0.5 @@ -27488,13 +27271,6 @@ snapshots: micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 - micromark-extension-frontmatter@2.0.0: - dependencies: - fault: 2.0.1 - micromark-util-character: 2.1.0 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 - micromark-extension-mdx-expression@3.0.0: dependencies: '@types/estree': 1.0.5 @@ -27808,7 +27584,7 @@ snapshots: braces: 3.0.3 picomatch: 2.3.1 - migrate-mongo@11.0.0(mongodb@4.17.1(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0))): + migrate-mongo@11.0.0(mongodb@4.17.1(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))): dependencies: cli-table3: 0.6.5 commander: 9.5.0 @@ -27949,6 +27725,18 @@ snapshots: '@types/whatwg-url': 8.2.2 whatwg-url: 11.0.0 + mongodb@4.17.1(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0)): + dependencies: + bson: 4.7.2 + mongodb-connection-string-url: 2.6.0 + socks: 2.8.3 + optionalDependencies: + '@aws-sdk/credential-providers': 3.621.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0)) + '@mongodb-js/saslprep': 1.1.8 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt + mongodb@4.17.1(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0)): dependencies: bson: 4.7.2 @@ -27965,6 +27753,20 @@ snapshots: mongoose-paginate-v2@1.7.22: {} + mongoose@6.12.3(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0)): + dependencies: + bson: 4.7.2 + kareem: 2.5.1 + mongodb: 4.17.1(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0)) + mpath: 0.9.0 + mquery: 4.0.3 + ms: 2.1.3 + sift: 16.0.1 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt + - supports-color + mongoose@6.12.3(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0)): dependencies: bson: 4.7.2 @@ -28504,12 +28306,6 @@ snapshots: parse-passwd@1.0.0: {} - parse5-htmlparser2-tree-adapter@6.0.1: - dependencies: - parse5: 6.0.1 - - parse5@6.0.1: {} - parse5@7.1.2: dependencies: entities: 4.5.0 @@ -29925,39 +29721,6 @@ snapshots: space-separated-tokens: 2.0.2 unist-util-visit: 5.0.0 - rehype-format@5.0.0: - dependencies: - '@types/hast': 3.0.4 - hast-util-embedded: 3.0.0 - hast-util-is-element: 3.0.0 - hast-util-phrasing: 3.0.1 - hast-util-whitespace: 3.0.0 - html-whitespace-sensitive-tag-names: 3.0.0 - rehype-minify-whitespace: 6.0.0 - unist-util-visit-parents: 6.0.1 - - rehype-highlight@7.0.0: - dependencies: - '@types/hast': 3.0.4 - hast-util-to-text: 4.0.2 - lowlight: 3.1.0 - unist-util-visit: 5.0.0 - vfile: 6.0.2 - - rehype-minify-whitespace@6.0.0: - dependencies: - '@types/hast': 3.0.4 - hast-util-embedded: 3.0.0 - hast-util-is-element: 3.0.0 - hast-util-whitespace: 3.0.0 - unist-util-is: 6.0.0 - - rehype-raw@7.0.0: - dependencies: - '@types/hast': 3.0.4 - hast-util-raw: 9.0.4 - vfile: 6.0.2 - rehype-slug@6.0.0: dependencies: '@types/hast': 3.0.4 @@ -29966,12 +29729,6 @@ snapshots: hast-util-to-string: 3.0.0 unist-util-visit: 5.0.0 - rehype-stringify@10.0.0: - dependencies: - '@types/hast': 3.0.4 - hast-util-to-html: 9.0.2 - unified: 11.0.5 - relateurl@0.2.7: {} remark-external-links@8.0.0: @@ -29982,15 +29739,6 @@ snapshots: space-separated-tokens: 1.1.5 unist-util-visit: 2.0.3 - remark-frontmatter@5.0.0: - dependencies: - '@types/mdast': 4.0.4 - mdast-util-frontmatter: 2.0.1 - micromark-extension-frontmatter: 2.0.0 - unified: 11.0.5 - transitivePeerDependencies: - - supports-color - remark-html@16.0.1: dependencies: '@types/mdast': 4.0.4 @@ -30006,12 +29754,6 @@ snapshots: transitivePeerDependencies: - supports-color - remark-parse-frontmatter@1.0.3: - dependencies: - revalidator: 0.3.1 - unist-util-find: 1.0.4 - yaml: 1.10.2 - remark-parse@10.0.2: dependencies: '@types/mdast': 3.0.15 @@ -30029,23 +29771,6 @@ snapshots: transitivePeerDependencies: - supports-color - remark-prism@1.3.6: - dependencies: - classnames: 2.5.1 - css-selector-parser: 1.4.1 - escape-html: 1.0.3 - jsdom: 16.7.0 - parse-numeric-range: 1.3.0 - parse5: 6.0.1 - parse5-htmlparser2-tree-adapter: 6.0.1 - prismjs: 1.29.0 - unist-util-map: 2.0.1 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - utf-8-validate - remark-rehype@11.1.0: dependencies: '@types/hast': 3.0.4 @@ -30197,8 +29922,6 @@ snapshots: reusify@1.0.4: {} - revalidator@0.3.1: {} - rfdc@1.4.1: {} rimraf@2.6.3: @@ -30303,10 +30026,6 @@ snapshots: sax@1.4.1: {} - saxes@5.0.1: - dependencies: - xmlchars: 2.2.0 - saxes@6.0.0: dependencies: xmlchars: 2.2.0 @@ -31180,10 +30899,6 @@ snapshots: tr46@0.0.3: {} - tr46@2.1.0: - dependencies: - punycode: 2.3.1 - tr46@3.0.0: dependencies: punycode: 2.3.1 @@ -31440,16 +31155,6 @@ snapshots: dependencies: crypto-random-string: 4.0.0 - unist-util-find-after@5.0.0: - dependencies: - '@types/unist': 3.0.2 - unist-util-is: 6.0.0 - - unist-util-find@1.0.4: - dependencies: - lodash.iteratee: 4.7.0 - unist-util-visit: 2.0.3 - unist-util-is@4.1.0: {} unist-util-is@5.2.1: @@ -31460,11 +31165,6 @@ snapshots: dependencies: '@types/unist': 3.0.2 - unist-util-map@2.0.1: - dependencies: - '@types/mdast': 3.0.15 - object-assign: 4.1.1 - unist-util-position-from-estree@2.0.0: dependencies: '@types/unist': 3.0.2 @@ -31997,11 +31697,6 @@ snapshots: core-util-is: 1.0.2 extsprintf: 1.3.0 - vfile-location@5.0.3: - dependencies: - '@types/unist': 3.0.2 - vfile: 6.0.2 - vfile-message@3.1.4: dependencies: '@types/unist': 2.0.10 @@ -32317,14 +32012,6 @@ snapshots: vscode-uri@3.0.8: {} - w3c-hr-time@1.0.2: - dependencies: - browser-process-hrtime: 1.0.0 - - w3c-xmlserializer@2.0.0: - dependencies: - xml-name-validator: 3.0.0 - w3c-xmlserializer@4.0.0: dependencies: xml-name-validator: 4.0.0 @@ -32352,14 +32039,8 @@ snapshots: dependencies: defaults: 1.0.4 - web-namespaces@2.0.1: {} - webidl-conversions@3.0.1: {} - webidl-conversions@5.0.0: {} - - webidl-conversions@6.1.0: {} - webidl-conversions@7.0.0: {} webpack-bundle-analyzer@4.10.2: @@ -32608,10 +32289,6 @@ snapshots: - esbuild - uglify-js - whatwg-encoding@1.0.5: - dependencies: - iconv-lite: 0.4.24 - whatwg-encoding@2.0.0: dependencies: iconv-lite: 0.6.3 @@ -32622,8 +32299,6 @@ snapshots: whatwg-fetch@3.6.20: {} - whatwg-mimetype@2.3.0: {} - whatwg-mimetype@3.0.0: {} whatwg-mimetype@4.0.0: {} @@ -32643,12 +32318,6 @@ snapshots: tr46: 0.0.3 webidl-conversions: 3.0.1 - whatwg-url@8.7.0: - dependencies: - lodash: 4.17.21 - tr46: 2.1.0 - webidl-conversions: 6.1.0 - which-boxed-primitive@1.0.2: dependencies: is-bigint: 1.0.4 @@ -32760,8 +32429,6 @@ snapshots: wmf: 1.0.2 word: 0.3.0 - xml-name-validator@3.0.0: {} - xml-name-validator@4.0.0: {} xml-name-validator@5.0.0: {} From 4a395eea0a503faf00674ef02879dfcd6af1e76f Mon Sep 17 00:00:00 2001 From: Kipruto <43873157+kelvinkipruto@users.noreply.github.com> Date: Tue, 3 Sep 2024 15:09:29 +0300 Subject: [PATCH 11/20] Remove unused packages --- apps/engineeringblog/package.json | 5 +- apps/engineeringblog/utils/index.ts | 17 ------ pnpm-lock.yaml | 82 ++--------------------------- 3 files changed, 6 insertions(+), 98 deletions(-) diff --git a/apps/engineeringblog/package.json b/apps/engineeringblog/package.json index 3e076e901..e43744266 100644 --- a/apps/engineeringblog/package.json +++ b/apps/engineeringblog/package.json @@ -28,10 +28,7 @@ "react": "^18", "react-dom": "^18", "react-markdown": "^9.0.1", - "react-syntax-highlighter": "^15.5.0", - "remark": "^15.0.1", - "remark-html": "^16.0.1", - "remark-mdx": "^3.0.1" + "react-syntax-highlighter": "^15.5.0" }, "devDependencies": { "@svgr/webpack": "^8.1.0", diff --git a/apps/engineeringblog/utils/index.ts b/apps/engineeringblog/utils/index.ts index ec3d62c32..7280a2b43 100644 --- a/apps/engineeringblog/utils/index.ts +++ b/apps/engineeringblog/utils/index.ts @@ -2,20 +2,6 @@ import fs from "fs"; import path from "path"; import matter from "gray-matter"; import { format } from "date-fns"; -import { remark } from "remark"; -import html from "remark-html"; -import remarkMdx from "remark-mdx"; -import remarkParse from "remark-parse"; -import remarkRehype from "remark-rehype"; -import rehypeFormat from "rehype-format"; -import remarkFrontmatter from "remark-frontmatter"; -import remarkParseFrontmatter from "remark-parse-frontmatter"; -import rehypeStringify from "rehype-stringify"; -import prism from "remark-prism"; -import rehypeRaw from "rehype-raw"; -import { unified } from "unified"; -import rehypeHighlight from "rehype-highlight"; - export type Article = { slug: string; title: string; @@ -59,15 +45,12 @@ export async function getBlogPost(slug: string): Promise
{ const fileContents = fs.readFileSync(filePath, "utf8"); const { data, content } = matter(fileContents); - // const processedContent = await unified().processSync(content); - return { slug, title: data.title, description: data.description, date: format(new Date(data.date), "MMM dd, yyyy"), featuredImage: data.featuredImage, - // processedContent: processedContent.toString(), content, }; } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index def792625..8198971c3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -97,7 +97,7 @@ importers: version: 1.0.7(@swc/core@1.7.6(@swc/helpers@0.5.5))(ajv@8.17.1)(payload@2.25.0(@swc/helpers@0.5.5)(@types/react@18.3.3)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))(webpack-cli@4.10.0)))(sass@1.69.4) '@payloadcms/db-mongodb': specifier: ^1.7.1 - version: 1.7.1(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0))(payload@2.25.0(@swc/helpers@0.5.5)(@types/react@18.3.3)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))(webpack-cli@4.10.0))) + version: 1.7.1(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))(payload@2.25.0(@swc/helpers@0.5.5)(@types/react@18.3.3)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))(webpack-cli@4.10.0))) '@payloadcms/plugin-cloud-storage': specifier: ^1.1.3 version: 1.1.3(@aws-sdk/client-s3@3.623.0)(@aws-sdk/lib-storage@3.623.0(@aws-sdk/client-s3@3.623.0))(payload@2.25.0(@swc/helpers@0.5.5)(@types/react@18.3.3)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))(webpack-cli@4.10.0))) @@ -133,7 +133,7 @@ importers: version: 1.9.4 migrate-mongo: specifier: ^11.0.0 - version: 11.0.0(mongodb@4.17.1(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0))) + version: 11.0.0(mongodb@4.17.1(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))) monaco-editor: specifier: ^0.50.0 version: 0.50.0 @@ -957,15 +957,6 @@ importers: react-syntax-highlighter: specifier: ^15.5.0 version: 15.5.0(react@18.3.1) - remark: - specifier: ^15.0.1 - version: 15.0.1 - remark-html: - specifier: ^16.0.1 - version: 16.0.1 - remark-mdx: - specifier: ^3.0.1 - version: 3.0.1 devDependencies: '@svgr/webpack': specifier: ^8.1.0 @@ -9597,15 +9588,9 @@ packages: hast-util-parse-selector@2.2.5: resolution: {integrity: sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==} - hast-util-sanitize@5.0.1: - resolution: {integrity: sha512-IGrgWLuip4O2nq5CugXy4GI2V8kx4sFVy5Hd4vF7AR2gxS0N9s7nEAVUyeMtZKZvzrxVsHt73XdTsno1tClIkQ==} - hast-util-to-estree@3.1.0: resolution: {integrity: sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw==} - hast-util-to-html@9.0.2: - resolution: {integrity: sha512-RP5wNpj5nm1Z8cloDv4Sl4RS8jH5HYa0v93YB6Wb4poEzgMo/dAAL0KcT4974dCjcNG5pkLqTImeFHHCwwfY3g==} - hast-util-to-jsx-runtime@2.3.0: resolution: {integrity: sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==} @@ -9674,9 +9659,6 @@ packages: html-url-attributes@3.0.0: resolution: {integrity: sha512-/sXbVCWayk6GDVg3ctOX6nxaVj7So40FcFAnWlWGNAB1LpYKcV5Cd10APjPjW80O7zYW2MsjBV4zZ7IZO5fVow==} - html-void-elements@3.0.0: - resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} - html-webpack-plugin@5.5.3: resolution: {integrity: sha512-6YrDKTuqaP/TquFH7h4srYWsZx+x6k6+FbsTm0ziCwGHDP78Unr1r9F/H4+sGmMbX08GQcJ+K64x55b+7VM/jg==} engines: {node: '>=10.13.0'} @@ -12583,9 +12565,6 @@ packages: remark-external-links@8.0.0: resolution: {integrity: sha512-5vPSX0kHoSsqtdftSHhIYofVINC8qmp0nctkeU9YoJwV3YfiBRiI6cbFRJ0oI/1F9xS+bopXG0m2KS8VFscuKA==} - remark-html@16.0.1: - resolution: {integrity: sha512-B9JqA5i0qZe0Nsf49q3OXyGvyXuZFDzAP2iOFLEumymuYJITVpiH1IgsTEwTpdptDmZlMDMWeDmSawdaJIGCXQ==} - remark-mdx@3.0.1: resolution: {integrity: sha512-3Pz3yPQ5Rht2pM5R+0J2MrGoBSrzf+tJG94N+t/ilfdh8YLyyKYtidAYwTveB20BoHAcwIopOUqhcmh2F7hGYA==} @@ -12598,12 +12577,6 @@ packages: remark-slug@6.1.0: resolution: {integrity: sha512-oGCxDF9deA8phWvxFuyr3oSJsdyUAxMFbA0mZ7Y1Sas+emILtO+e5WutF9564gDsEN4IXaQXm5pFo6MLH+YmwQ==} - remark-stringify@11.0.0: - resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} - - remark@15.0.1: - resolution: {integrity: sha512-Eht5w30ruCXgFmxVUSlNWQ9iiimq07URKeFS3hNc8cUWy1llX4KDWfyEDZRycMc+znsN9Ux5/tJ/BFdgdOwA3A==} - renderkid@3.0.0: resolution: {integrity: sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==} @@ -15464,7 +15437,7 @@ snapshots: '@aws-sdk/token-providers@3.614.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))': dependencies: - '@aws-sdk/client-sso-oidc': 3.623.0(@aws-sdk/client-sts@3.621.0) + '@aws-sdk/client-sso-oidc': 3.623.0(@aws-sdk/client-sts@3.623.0) '@aws-sdk/types': 3.609.0 '@smithy/property-provider': 3.1.3 '@smithy/shared-ini-file-loader': 3.1.4 @@ -18382,7 +18355,7 @@ snapshots: - utf-8-validate - webpack-dev-server - '@payloadcms/db-mongodb@1.7.1(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0))(payload@2.25.0(@swc/helpers@0.5.5)(@types/react@18.3.3)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))(webpack-cli@4.10.0)))': + '@payloadcms/db-mongodb@1.7.1(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))(payload@2.25.0(@swc/helpers@0.5.5)(@types/react@18.3.3)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))(webpack-cli@4.10.0)))': dependencies: bson-objectid: 2.0.4 deepmerge: 4.3.1 @@ -25191,12 +25164,6 @@ snapshots: hast-util-parse-selector@2.2.5: {} - hast-util-sanitize@5.0.1: - dependencies: - '@types/hast': 3.0.4 - '@ungap/structured-clone': 1.2.0 - unist-util-position: 5.0.0 - hast-util-to-estree@3.1.0: dependencies: '@types/estree': 1.0.5 @@ -25218,20 +25185,6 @@ snapshots: transitivePeerDependencies: - supports-color - hast-util-to-html@9.0.2: - dependencies: - '@types/hast': 3.0.4 - '@types/unist': 3.0.2 - ccount: 2.0.1 - comma-separated-tokens: 2.0.3 - hast-util-whitespace: 3.0.0 - html-void-elements: 3.0.0 - mdast-util-to-hast: 13.2.0 - property-information: 6.5.0 - space-separated-tokens: 2.0.2 - stringify-entities: 4.0.4 - zwitch: 2.0.4 - hast-util-to-jsx-runtime@2.3.0: dependencies: '@types/estree': 1.0.5 @@ -25338,8 +25291,6 @@ snapshots: html-url-attributes@3.0.0: {} - html-void-elements@3.0.0: {} - html-webpack-plugin@5.5.3(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))(webpack-cli@4.10.0)): dependencies: '@types/html-minifier-terser': 6.1.0 @@ -27213,7 +27164,7 @@ snapshots: braces: 3.0.3 picomatch: 2.3.1 - migrate-mongo@11.0.0(mongodb@4.17.1(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0))): + migrate-mongo@11.0.0(mongodb@4.17.1(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))): dependencies: cli-table3: 0.6.5 commander: 9.5.0 @@ -29342,14 +29293,6 @@ snapshots: space-separated-tokens: 1.1.5 unist-util-visit: 2.0.3 - remark-html@16.0.1: - dependencies: - '@types/mdast': 4.0.4 - hast-util-sanitize: 5.0.1 - hast-util-to-html: 9.0.2 - mdast-util-to-hast: 13.2.0 - unified: 11.0.5 - remark-mdx@3.0.1: dependencies: mdast-util-mdx: 3.0.0 @@ -29380,21 +29323,6 @@ snapshots: mdast-util-to-string: 1.1.0 unist-util-visit: 2.0.3 - remark-stringify@11.0.0: - dependencies: - '@types/mdast': 4.0.4 - mdast-util-to-markdown: 2.1.0 - unified: 11.0.5 - - remark@15.0.1: - dependencies: - '@types/mdast': 4.0.4 - remark-parse: 11.0.0 - remark-stringify: 11.0.0 - unified: 11.0.5 - transitivePeerDependencies: - - supports-color - renderkid@3.0.0: dependencies: css-select: 4.3.0 From f4d7c9ed089e3cfd5334c25686438f4b81e1c4f3 Mon Sep 17 00:00:00 2001 From: Kipruto <43873157+kelvinkipruto@users.noreply.github.com> Date: Tue, 3 Sep 2024 16:31:45 +0300 Subject: [PATCH 12/20] Add languages we use Signed-off-by: Kipruto <43873157+kelvinkipruto@users.noreply.github.com> --- .../components/Markdown/Markdown.tsx | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/apps/engineeringblog/components/Markdown/Markdown.tsx b/apps/engineeringblog/components/Markdown/Markdown.tsx index af95faabc..9a8bebe70 100644 --- a/apps/engineeringblog/components/Markdown/Markdown.tsx +++ b/apps/engineeringblog/components/Markdown/Markdown.tsx @@ -2,13 +2,16 @@ import { FC } from "react"; import ReactMarkdown, { Components } from "react-markdown"; import { PrismLight as SyntaxHighlighter } from "react-syntax-highlighter"; -import tsx from "react-syntax-highlighter/dist/cjs/languages/prism/tsx"; -import typescript from "react-syntax-highlighter/dist/cjs/languages/prism/typescript"; -import javascript from "react-syntax-highlighter/dist/cjs/languages/prism/javascript"; -import scss from "react-syntax-highlighter/dist/cjs/languages/prism/scss"; import bash from "react-syntax-highlighter/dist/cjs/languages/prism/bash"; -import markdown from "react-syntax-highlighter/dist/cjs/languages/prism/markdown"; +import java from "react-syntax-highlighter/dist/cjs/languages/prism/java"; +import javascript from "react-syntax-highlighter/dist/cjs/languages/prism/javascript"; import json from "react-syntax-highlighter/dist/cjs/languages/prism/json"; +import jsx from "react-syntax-highlighter/dist/cjs/languages/prism/jsx"; +import markdown from "react-syntax-highlighter/dist/cjs/languages/prism/markdown"; +import python from "react-syntax-highlighter/dist/cjs/languages/prism/python"; +import scss from "react-syntax-highlighter/dist/cjs/languages/prism/scss"; +import tsx from "react-syntax-highlighter/dist/cjs/languages/prism/tsx"; +import typescript from "react-syntax-highlighter/dist/cjs/languages/prism/typescript"; import rangeParser from "parse-numeric-range"; import { oneDark } from "react-syntax-highlighter/dist/cjs/styles/prism"; @@ -20,6 +23,9 @@ SyntaxHighlighter.registerLanguage("bash", bash); SyntaxHighlighter.registerLanguage("markdown", markdown); SyntaxHighlighter.registerLanguage("json", json); SyntaxHighlighter.registerLanguage("js", javascript); +SyntaxHighlighter.registerLanguage("python", python); +SyntaxHighlighter.registerLanguage("jsx", jsx); +SyntaxHighlighter.registerLanguage("java", java); type MarkdownProps = { markdown: string; From 446b0e6b592fa5568ffad1f50c9b0fe03383ca51 Mon Sep 17 00:00:00 2001 From: Kipruto <43873157+kelvinkipruto@users.noreply.github.com> Date: Wed, 4 Sep 2024 18:03:42 +0300 Subject: [PATCH 13/20] Add code copy btn --- .../components/Markdown/CodeCopyBtn.tsx | 51 ++++++ .../components/Markdown/Markdown.tsx | 19 ++ apps/engineeringblog/package.json | 1 + pnpm-lock.yaml | 165 +++++++++--------- 4 files changed, 155 insertions(+), 81 deletions(-) create mode 100644 apps/engineeringblog/components/Markdown/CodeCopyBtn.tsx diff --git a/apps/engineeringblog/components/Markdown/CodeCopyBtn.tsx b/apps/engineeringblog/components/Markdown/CodeCopyBtn.tsx new file mode 100644 index 000000000..944b9cf9c --- /dev/null +++ b/apps/engineeringblog/components/Markdown/CodeCopyBtn.tsx @@ -0,0 +1,51 @@ +import React from "react"; +import { CopyAll } from "@mui/icons-material"; +import DoneIcon from "@mui/icons-material/Done"; +import { Box } from "@mui/material"; + +export default function CodeCopyBtn({ children }: { children: JSX.Element }) { + const [copyOk, setCopyOk] = React.useState(false); + + const iconColor = copyOk ? "#0af20a" : "#ddd"; + + const handleClick = (_e: React.MouseEvent) => { + navigator.clipboard.writeText(children.props.children); + + setCopyOk(true); + setTimeout(() => { + setCopyOk(false); + }, 500); + }; + + return ( + + {copyOk ? ( + + ) : ( + + )} + + ); +} diff --git a/apps/engineeringblog/components/Markdown/Markdown.tsx b/apps/engineeringblog/components/Markdown/Markdown.tsx index 9a8bebe70..2e424c468 100644 --- a/apps/engineeringblog/components/Markdown/Markdown.tsx +++ b/apps/engineeringblog/components/Markdown/Markdown.tsx @@ -12,9 +12,11 @@ import python from "react-syntax-highlighter/dist/cjs/languages/prism/python"; import scss from "react-syntax-highlighter/dist/cjs/languages/prism/scss"; import tsx from "react-syntax-highlighter/dist/cjs/languages/prism/tsx"; import typescript from "react-syntax-highlighter/dist/cjs/languages/prism/typescript"; +import CodeCopyBtn from "./CodeCopyBtn"; import rangeParser from "parse-numeric-range"; import { oneDark } from "react-syntax-highlighter/dist/cjs/styles/prism"; +import { Box } from "@mui/material"; SyntaxHighlighter.registerLanguage("tsx", tsx); SyntaxHighlighter.registerLanguage("typescript", typescript); @@ -31,10 +33,27 @@ type MarkdownProps = { markdown: string; }; +const Pre = ({ children }: { children: JSX.Element }) => ( + + {children} + {children} + +); + const Markdown: FC = ({ markdown }) => { const syntaxTheme = oneDark; const MarkdownComponents: Components = { + pre: Pre, code({ node, className, children, ...props }) { const hasLang = /language-(\w+)/.exec(className || ""); const hasMeta = node?.data?.meta; diff --git a/apps/engineeringblog/package.json b/apps/engineeringblog/package.json index e43744266..674a2475f 100644 --- a/apps/engineeringblog/package.json +++ b/apps/engineeringblog/package.json @@ -17,6 +17,7 @@ "@emotion/react": "^11.11.4", "@emotion/styled": "^11.11.5", "@mdx-js/loader": "^3.0.1", + "@mui/icons-material": "^5.16.1", "@mui/material": "^5.16.1", "@mui/material-nextjs": "^5.16.1", "@mui/utils": "^5.16.6", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8198971c3..619aabf40 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -97,7 +97,7 @@ importers: version: 1.0.7(@swc/core@1.7.6(@swc/helpers@0.5.5))(ajv@8.17.1)(payload@2.25.0(@swc/helpers@0.5.5)(@types/react@18.3.3)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))(webpack-cli@4.10.0)))(sass@1.69.4) '@payloadcms/db-mongodb': specifier: ^1.7.1 - version: 1.7.1(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))(payload@2.25.0(@swc/helpers@0.5.5)(@types/react@18.3.3)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))(webpack-cli@4.10.0))) + version: 1.7.1(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0))(payload@2.25.0(@swc/helpers@0.5.5)(@types/react@18.3.3)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))(webpack-cli@4.10.0))) '@payloadcms/plugin-cloud-storage': specifier: ^1.1.3 version: 1.1.3(@aws-sdk/client-s3@3.623.0)(@aws-sdk/lib-storage@3.623.0(@aws-sdk/client-s3@3.623.0))(payload@2.25.0(@swc/helpers@0.5.5)(@types/react@18.3.3)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))(webpack-cli@4.10.0))) @@ -133,7 +133,7 @@ importers: version: 1.9.4 migrate-mongo: specifier: ^11.0.0 - version: 11.0.0(mongodb@4.17.1(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))) + version: 11.0.0(mongodb@4.17.1(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0))) monaco-editor: specifier: ^0.50.0 version: 0.50.0 @@ -921,6 +921,9 @@ importers: '@mdx-js/loader': specifier: ^3.0.1 version: 3.0.1(webpack@5.93.0) + '@mui/icons-material': + specifier: ^5.16.1 + version: 5.16.6(@mui/material@5.16.6(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.3)(react@18.3.1) '@mui/material': specifier: ^5.16.1 version: 5.16.6(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -15437,7 +15440,7 @@ snapshots: '@aws-sdk/token-providers@3.614.0(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))': dependencies: - '@aws-sdk/client-sso-oidc': 3.623.0(@aws-sdk/client-sts@3.623.0) + '@aws-sdk/client-sso-oidc': 3.623.0(@aws-sdk/client-sts@3.621.0) '@aws-sdk/types': 3.609.0 '@smithy/property-provider': 3.1.3 '@smithy/shared-ini-file-loader': 3.1.4 @@ -16508,7 +16511,7 @@ snapshots: '@changesets/apply-release-plan@7.0.4': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 '@changesets/config': 3.0.2 '@changesets/get-version-range-type': 0.4.0 '@changesets/git': 3.0.0 @@ -16525,7 +16528,7 @@ snapshots: '@changesets/assemble-release-plan@6.0.3': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 '@changesets/errors': 0.2.0 '@changesets/get-dependents-graph': 2.1.1 '@changesets/should-skip-package': 0.1.0 @@ -16611,7 +16614,7 @@ snapshots: '@changesets/get-release-plan@4.0.3': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 '@changesets/assemble-release-plan': 6.0.3 '@changesets/config': 3.0.2 '@changesets/pre': 2.0.0 @@ -16623,7 +16626,7 @@ snapshots: '@changesets/git@3.0.0': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 '@changesets/errors': 0.2.0 '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 @@ -16642,7 +16645,7 @@ snapshots: '@changesets/pre@2.0.0': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 '@changesets/errors': 0.2.0 '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 @@ -16650,7 +16653,7 @@ snapshots: '@changesets/read@0.6.0': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 '@changesets/git': 3.0.0 '@changesets/logger': 0.1.0 '@changesets/parse': 0.4.0 @@ -16661,7 +16664,7 @@ snapshots: '@changesets/should-skip-package@0.1.0': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 @@ -16671,7 +16674,7 @@ snapshots: '@changesets/write@0.3.1': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 '@changesets/types': 6.0.0 fs-extra: 7.0.1 human-id: 1.0.2 @@ -17595,14 +17598,14 @@ snapshots: '@manypkg/find-root@1.1.0': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 '@types/node': 12.20.55 find-up: 4.1.0 fs-extra: 8.1.0 '@manypkg/get-packages@1.1.3': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 '@changesets/types': 4.1.0 '@manypkg/find-root': 1.1.0 fs-extra: 8.1.0 @@ -17685,7 +17688,7 @@ snapshots: '@mui/base@5.0.0-beta.26(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 '@floating-ui/react-dom': 2.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@mui/types': 7.2.15(@types/react@18.3.3) '@mui/utils': 5.16.6(@types/react@18.3.3)(react@18.3.1) @@ -17701,7 +17704,7 @@ snapshots: '@mui/icons-material@5.16.6(@mui/material@5.16.6(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 '@mui/material': 5.16.6(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 optionalDependencies: @@ -17737,13 +17740,13 @@ snapshots: '@mui/material@5.16.6(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 '@mui/core-downloads-tracker': 5.16.6 '@mui/system': 5.16.6(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1) '@mui/types': 7.2.15(@types/react@18.3.3) '@mui/utils': 5.16.6(@types/react@18.3.3)(react@18.3.1) '@popperjs/core': 2.11.8 - '@types/react-transition-group': 4.4.10 + '@types/react-transition-group': 4.4.11 clsx: 2.1.1 csstype: 3.1.3 prop-types: 15.8.1 @@ -17758,7 +17761,7 @@ snapshots: '@mui/private-theming@5.16.6(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 '@mui/utils': 5.16.6(@types/react@18.3.3)(react@18.3.1) prop-types: 15.8.1 react: 18.3.1 @@ -17767,7 +17770,7 @@ snapshots: '@mui/styled-engine@5.16.6(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 '@emotion/cache': 11.13.1 csstype: 3.1.3 prop-types: 15.8.1 @@ -17801,7 +17804,7 @@ snapshots: '@mui/system@5.16.6(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 '@mui/private-theming': 5.16.6(@types/react@18.3.3)(react@18.3.1) '@mui/styled-engine': 5.16.6(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1) '@mui/types': 7.2.15(@types/react@18.3.3) @@ -18355,7 +18358,7 @@ snapshots: - utf-8-validate - webpack-dev-server - '@payloadcms/db-mongodb@1.7.1(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))(payload@2.25.0(@swc/helpers@0.5.5)(@types/react@18.3.3)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))(webpack-cli@4.10.0)))': + '@payloadcms/db-mongodb@1.7.1(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0))(payload@2.25.0(@swc/helpers@0.5.5)(@types/react@18.3.3)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.6(@swc/helpers@0.5.5))(webpack-cli@4.10.0)))': dependencies: bson-objectid: 2.0.4 deepmerge: 4.3.1 @@ -18537,17 +18540,17 @@ snapshots: '@radix-ui/number@1.0.1': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 '@radix-ui/primitive@1.0.1': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 '@radix-ui/primitive@1.1.0': {} '@radix-ui/react-arrow@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -18557,7 +18560,7 @@ snapshots: '@radix-ui/react-collection@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -18582,7 +18585,7 @@ snapshots: '@radix-ui/react-compose-refs@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 react: 18.3.1 optionalDependencies: '@types/react': 18.3.3 @@ -18595,7 +18598,7 @@ snapshots: '@radix-ui/react-context@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 react: 18.3.1 optionalDependencies: '@types/react': 18.3.3 @@ -18608,7 +18611,7 @@ snapshots: '@radix-ui/react-direction@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 react: 18.3.1 optionalDependencies: '@types/react': 18.3.3 @@ -18621,7 +18624,7 @@ snapshots: '@radix-ui/react-dismissable-layer@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -18635,14 +18638,14 @@ snapshots: '@radix-ui/react-focus-guards@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 react: 18.3.1 optionalDependencies: '@types/react': 18.3.3 '@radix-ui/react-focus-scope@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) @@ -18654,7 +18657,7 @@ snapshots: '@radix-ui/react-id@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 optionalDependencies: @@ -18669,7 +18672,7 @@ snapshots: '@radix-ui/react-popper@1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 '@floating-ui/react-dom': 2.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) @@ -18688,7 +18691,7 @@ snapshots: '@radix-ui/react-portal@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -18698,7 +18701,7 @@ snapshots: '@radix-ui/react-primitive@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 '@radix-ui/react-slot': 1.0.2(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -18734,7 +18737,7 @@ snapshots: '@radix-ui/react-select@1.2.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 '@radix-ui/number': 1.0.1 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -18773,7 +18776,7 @@ snapshots: '@radix-ui/react-slot@1.0.2(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 optionalDependencies: @@ -18829,7 +18832,7 @@ snapshots: '@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 react: 18.3.1 optionalDependencies: '@types/react': 18.3.3 @@ -18842,7 +18845,7 @@ snapshots: '@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 optionalDependencies: @@ -18857,7 +18860,7 @@ snapshots: '@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 optionalDependencies: @@ -18865,7 +18868,7 @@ snapshots: '@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 react: 18.3.1 optionalDependencies: '@types/react': 18.3.3 @@ -18878,14 +18881,14 @@ snapshots: '@radix-ui/react-use-previous@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 react: 18.3.1 optionalDependencies: '@types/react': 18.3.3 '@radix-ui/react-use-rect@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 '@radix-ui/rect': 1.0.1 react: 18.3.1 optionalDependencies: @@ -18893,7 +18896,7 @@ snapshots: '@radix-ui/react-use-size@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 optionalDependencies: @@ -18901,7 +18904,7 @@ snapshots: '@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -18911,7 +18914,7 @@ snapshots: '@radix-ui/rect@1.0.1': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 '@react-leaflet/core@2.1.0(leaflet@1.9.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: @@ -21004,7 +21007,7 @@ snapshots: '@testing-library/dom@10.1.0': dependencies: '@babel/code-frame': 7.24.7 - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 '@types/aria-query': 5.0.4 aria-query: 5.3.0 chalk: 4.1.2 @@ -21015,7 +21018,7 @@ snapshots: '@testing-library/dom@9.3.4': dependencies: '@babel/code-frame': 7.24.7 - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 '@types/aria-query': 5.0.4 aria-query: 5.1.3 chalk: 4.1.2 @@ -21026,7 +21029,7 @@ snapshots: '@testing-library/jest-dom@6.4.5(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@20.14.14)(babel-plugin-macros@3.1.0))': dependencies: '@adobe/css-tools': 4.4.0 - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 aria-query: 5.3.0 chalk: 3.0.0 css.escape: 1.5.1 @@ -21041,7 +21044,7 @@ snapshots: '@testing-library/jest-dom@6.4.5(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@20.14.14))': dependencies: '@adobe/css-tools': 4.4.0 - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 aria-query: 5.3.0 chalk: 3.0.0 css.escape: 1.5.1 @@ -21510,7 +21513,7 @@ snapshots: '@videojs/http-streaming@3.13.1(video.js@8.17.1)': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 '@videojs/vhs-utils': 4.0.0 aes-decrypter: 4.0.1 global: 4.4.0 @@ -21521,19 +21524,19 @@ snapshots: '@videojs/vhs-utils@3.0.5': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 global: 4.4.0 url-toolkit: 2.2.5 '@videojs/vhs-utils@4.0.0': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 global: 4.4.0 url-toolkit: 2.2.5 '@videojs/xhr@2.7.0': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 global: 4.4.0 is-function: 1.0.2 @@ -21743,7 +21746,7 @@ snapshots: aes-decrypter@4.0.1: dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 '@videojs/vhs-utils': 3.0.5 global: 4.4.0 pkcs7: 1.0.4 @@ -22105,7 +22108,7 @@ snapshots: babel-plugin-macros@3.1.0: dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 cosmiconfig: 7.1.0 resolve: 1.22.8 @@ -22932,7 +22935,7 @@ snapshots: css-vendor@2.0.8: dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 is-in-browser: 1.1.3 css-what@6.1.0: {} @@ -25232,7 +25235,7 @@ snapshots: history@4.10.1: dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 loose-envify: 1.4.0 resolve-pathname: 3.0.0 tiny-invariant: 1.3.3 @@ -25422,13 +25425,13 @@ snapshots: i18next-browser-languagedetector@6.1.8: dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 i18next-http-middleware@3.3.2: {} i18next@22.5.1: dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 iconv-lite@0.4.24: dependencies: @@ -26447,46 +26450,46 @@ snapshots: jss-plugin-camel-case@10.10.0: dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 hyphenate-style-name: 1.1.0 jss: 10.10.0 jss-plugin-default-unit@10.10.0: dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 jss: 10.10.0 jss-plugin-global@10.10.0: dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 jss: 10.10.0 jss-plugin-nested@10.10.0: dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 jss: 10.10.0 tiny-warning: 1.0.3 jss-plugin-props-sort@10.10.0: dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 jss: 10.10.0 jss-plugin-rule-value-function@10.10.0: dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 jss: 10.10.0 tiny-warning: 1.0.3 jss-plugin-vendor-prefixer@10.10.0: dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 css-vendor: 2.0.8 jss: 10.10.0 jss@10.10.0: dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 csstype: 3.1.3 is-in-browser: 1.1.3 tiny-warning: 1.0.3 @@ -26702,7 +26705,7 @@ snapshots: m3u8-parser@7.1.0: dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 '@videojs/vhs-utils': 3.0.5 global: 4.4.0 @@ -27164,7 +27167,7 @@ snapshots: braces: 3.0.3 picomatch: 2.3.1 - migrate-mongo@11.0.0(mongodb@4.17.1(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.623.0))): + migrate-mongo@11.0.0(mongodb@4.17.1(@aws-sdk/client-sso-oidc@3.623.0(@aws-sdk/client-sts@3.621.0))): dependencies: cli-table3: 0.6.5 commander: 9.5.0 @@ -27339,7 +27342,7 @@ snapshots: mpd-parser@1.3.0: dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 '@videojs/vhs-utils': 4.0.0 '@xmldom/xmldom': 0.8.10 global: 4.4.0 @@ -27367,7 +27370,7 @@ snapshots: mux.js@7.0.3: dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 global: 4.4.0 mylas@2.1.13: {} @@ -28221,7 +28224,7 @@ snapshots: pkcs7@1.0.4: dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 pkg-dir@3.0.0: dependencies: @@ -28280,7 +28283,7 @@ snapshots: polished@4.3.1: dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 possible-typed-array-names@1.0.0: {} @@ -28891,7 +28894,7 @@ snapshots: react-event-listener@0.6.6(react@18.3.1): dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 prop-types: 15.8.1 react: 18.3.1 warning: 4.0.3 @@ -28910,7 +28913,7 @@ snapshots: react-i18next@11.18.6(i18next@22.5.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 html-parse-stringify: 3.0.1 i18next: 22.5.1 react: 18.3.1 @@ -29001,7 +29004,7 @@ snapshots: react-router-dom@5.3.4(react@18.3.1): dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 history: 4.10.1 loose-envify: 1.4.0 prop-types: 15.8.1 @@ -29017,7 +29020,7 @@ snapshots: react-router@5.3.4(react@18.3.1): dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 history: 4.10.1 hoist-non-react-statics: 3.3.2 loose-envify: 1.4.0 @@ -29030,11 +29033,11 @@ snapshots: react-select@5.7.4(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 '@emotion/cache': 11.13.1 '@emotion/react': 11.13.0(@types/react@18.3.3)(react@18.3.1) '@floating-ui/dom': 1.6.8 - '@types/react-transition-group': 4.4.10 + '@types/react-transition-group': 4.4.11 memoize-one: 6.0.0 prop-types: 15.8.1 react: 18.3.1 @@ -29237,7 +29240,7 @@ snapshots: regenerator-transform@0.15.2: dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 regex-parser@2.3.0: {} From 3f3219000bb5a01734e6695295c96290f5fb193c Mon Sep 17 00:00:00 2001 From: Kipruto <43873157+kelvinkipruto@users.noreply.github.com> Date: Wed, 4 Sep 2024 18:07:54 +0300 Subject: [PATCH 14/20] Remove blog header image Signed-off-by: Kipruto <43873157+kelvinkipruto@users.noreply.github.com> --- .../components/Article/ArticleContent.tsx | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/apps/engineeringblog/components/Article/ArticleContent.tsx b/apps/engineeringblog/components/Article/ArticleContent.tsx index 3b3202652..5a8ac1de6 100644 --- a/apps/engineeringblog/components/Article/ArticleContent.tsx +++ b/apps/engineeringblog/components/Article/ArticleContent.tsx @@ -18,17 +18,6 @@ const ArticleContent = React.forwardRef(function ArticleContent( return ( -
Date: Wed, 4 Sep 2024 18:34:22 +0300 Subject: [PATCH 15/20] Use catalog dependencies Signed-off-by: Kipruto <43873157+kelvinkipruto@users.noreply.github.com> --- apps/engineeringblog/package.json | 8 +- pnpm-lock.yaml | 219 ++++++++++++++++++++++++++---- pnpm-workspace.yaml | 4 + 3 files changed, 206 insertions(+), 25 deletions(-) diff --git a/apps/engineeringblog/package.json b/apps/engineeringblog/package.json index efcd70771..07df38c17 100644 --- a/apps/engineeringblog/package.json +++ b/apps/engineeringblog/package.json @@ -23,10 +23,15 @@ "@mui/material-nextjs": "catalog:", "@mui/utils": "catalog:", "@next/mdx": "catalog:", + "date-fns": "catalog:", + "gray-matter": "catalog:", "@types/mdx": "catalog:", "next": "catalog:", + "parse-numeric-range": "catalog:", "react": "catalog:", - "react-dom": "catalog:" + "react-dom": "catalog:", + "react-markdown": "catalog:", + "react-syntax-highlighter": "catalog:" }, "devDependencies": { "@svgr/webpack": "catalog:", @@ -34,6 +39,7 @@ "@types/node": "catalog:", "@types/react": "catalog:", "@types/react-dom": "catalog:", + "@types/react-syntax-highlighter": "catalog:", "eslint": "catalog:", "eslint-config-next": "catalog:", "eslint-config-prettier": "catalog:", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f5e95377a..a32ac1987 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -210,6 +210,9 @@ catalogs: '@types/react-dom': specifier: ^18.3.0 version: 18.3.0 + '@types/react-syntax-highlighter': + specifier: ^15.5.13 + version: 15.5.13 ace-builds: specifier: ^1.36.2 version: 1.36.2 @@ -405,6 +408,9 @@ catalogs: papaparse: specifier: ^5.4.1 version: 5.4.1 + parse-numeric-range: + specifier: ^1.3.0 + version: 1.3.0 payload: specifier: ^2.27.0 version: 2.27.0 @@ -435,6 +441,9 @@ catalogs: react-leaflet: specifier: ^4.2.1 version: 4.2.1 + react-markdown: + specifier: ^9.0.1 + version: 9.0.1 react-multi-carousel: specifier: ^2.8.5 version: 2.8.5 @@ -447,6 +456,9 @@ catalogs: react-swipeable-views-react-18-fix: specifier: ^0.14.1 version: 0.14.1 + react-syntax-highlighter: + specifier: ^15.5.0 + version: 15.5.0 react-test-renderer: specifier: ^18.3.1 version: 18.3.1 @@ -638,31 +650,31 @@ importers: version: 0.84.0(prop-types@15.8.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@payloadcms/bundler-webpack': specifier: 'catalog:' - version: 1.0.7(@swc/core@1.7.23(@swc/helpers@0.5.5))(ajv@8.17.1)(payload@2.27.0(@swc/helpers@0.5.5)(@types/react@18.3.5)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5))(webpack-cli@4.10.0)))(sass@1.69.4) + version: 1.0.7(@swc/core@1.7.23(@swc/helpers@0.5.5))(ajv@8.17.1)(payload@2.27.0(@swc/helpers@0.5.5)(@types/react@18.3.5)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5))))(sass@1.69.4) '@payloadcms/db-mongodb': specifier: 'catalog:' - version: 1.7.2(@aws-sdk/client-sso-oidc@3.637.0(@aws-sdk/client-sts@3.637.0))(payload@2.27.0(@swc/helpers@0.5.5)(@types/react@18.3.5)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5))(webpack-cli@4.10.0))) + version: 1.7.2(@aws-sdk/client-sso-oidc@3.637.0(@aws-sdk/client-sts@3.637.0))(payload@2.27.0(@swc/helpers@0.5.5)(@types/react@18.3.5)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5)))) '@payloadcms/plugin-cloud-storage': specifier: 'catalog:' - version: 1.1.3(@aws-sdk/client-s3@3.637.0)(@aws-sdk/lib-storage@3.637.0(@aws-sdk/client-s3@3.637.0))(payload@2.27.0(@swc/helpers@0.5.5)(@types/react@18.3.5)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5))(webpack-cli@4.10.0))) + version: 1.1.3(@aws-sdk/client-s3@3.637.0)(@aws-sdk/lib-storage@3.637.0(@aws-sdk/client-s3@3.637.0))(payload@2.27.0(@swc/helpers@0.5.5)(@types/react@18.3.5)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5)))) '@payloadcms/plugin-nested-docs': specifier: 'catalog:' - version: 1.0.12(payload@2.27.0(@swc/helpers@0.5.5)(@types/react@18.3.5)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5))(webpack-cli@4.10.0))) + version: 1.0.12(payload@2.27.0(@swc/helpers@0.5.5)(@types/react@18.3.5)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5)))) '@payloadcms/plugin-sentry': specifier: 'catalog:' - version: 0.0.6(payload@2.27.0(@swc/helpers@0.5.5)(@types/react@18.3.5)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5))(webpack-cli@4.10.0)))(react@18.3.1) + version: 0.0.6(payload@2.27.0(@swc/helpers@0.5.5)(@types/react@18.3.5)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5))))(react@18.3.1) '@payloadcms/plugin-seo': specifier: 'catalog:' - version: 2.3.2(payload@2.27.0(@swc/helpers@0.5.5)(@types/react@18.3.5)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5))(webpack-cli@4.10.0)))(react@18.3.1) + version: 2.3.2(payload@2.27.0(@swc/helpers@0.5.5)(@types/react@18.3.5)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5))))(react@18.3.1) '@payloadcms/richtext-slate': specifier: 'catalog:' - version: 1.5.2(payload@2.27.0(@swc/helpers@0.5.5)(@types/react@18.3.5)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5))(webpack-cli@4.10.0)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.5.2(payload@2.27.0(@swc/helpers@0.5.5)(@types/react@18.3.5)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@react-spring/web': specifier: 'catalog:' version: 9.7.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@sentry/nextjs': specifier: 'catalog:' - version: 8.28.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.52.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@14.2.7(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.46.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.69.4))(react@18.3.1)(webpack@5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5))(webpack-cli@4.10.0)) + version: 8.28.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.52.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@14.2.7(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.46.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.69.4))(react@18.3.1)(webpack@5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5))) airtable: specifier: 'catalog:' version: 0.12.2(encoding@0.1.13) @@ -692,7 +704,7 @@ importers: version: 1.0.3 payload: specifier: 'catalog:' - version: 2.27.0(@swc/helpers@0.5.5)(@types/react@18.3.5)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5))(webpack-cli@4.10.0)) + version: 2.27.0(@swc/helpers@0.5.5)(@types/react@18.3.5)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5))) prop-types: specifier: 'catalog:' version: 15.8.1 @@ -777,7 +789,7 @@ importers: version: link:../../packages/eslint-config-commons-ui eslint-import-resolver-webpack: specifier: 'catalog:' - version: 0.13.9(eslint-plugin-import@2.29.1)(webpack@5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5))(webpack-cli@4.10.0)) + version: 0.13.9(eslint-plugin-import@2.29.1)(webpack@5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5))) eslint-plugin-import: specifier: 'catalog:' version: 2.29.1(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.0) @@ -807,7 +819,7 @@ importers: version: 5.5.4 webpack: specifier: 'catalog:' - version: 5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5))(webpack-cli@4.10.0) + version: 5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5))(webpack-cli@4.10.0(webpack-bundle-analyzer@4.10.2)(webpack@5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5)))) apps/civicsignalblog: dependencies: @@ -852,10 +864,10 @@ importers: version: 14.2.7(next@14.2.7(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.46.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.69.4))(react@18.3.1) '@payloadcms/bundler-webpack': specifier: 'catalog:' - version: 1.0.7(@swc/core@1.7.23(@swc/helpers@0.5.5))(ajv@8.17.1)(payload@2.27.0(@swc/helpers@0.5.5)(@types/react@18.3.5)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5))))(sass@1.69.4) + version: 1.0.7(@swc/core@1.7.23(@swc/helpers@0.5.5))(ajv@8.17.1)(payload@2.27.0(@swc/helpers@0.5.5)(@types/react@18.3.5)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5))(webpack-cli@4.10.0)))(sass@1.69.4) '@payloadcms/db-mongodb': specifier: 'catalog:' - version: 1.7.2(@aws-sdk/client-sso-oidc@3.637.0(@aws-sdk/client-sts@3.637.0))(payload@2.27.0(@swc/helpers@0.5.5)(@types/react@18.3.5)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5)))) + version: 1.7.2(@aws-sdk/client-sso-oidc@3.637.0(@aws-sdk/client-sts@3.621.0))(payload@2.27.0(@swc/helpers@0.5.5)(@types/react@18.3.5)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5))(webpack-cli@4.10.0))) '@payloadcms/live-preview': specifier: 'catalog:' version: 0.2.2 @@ -864,22 +876,22 @@ importers: version: 0.2.0(react@18.3.1) '@payloadcms/plugin-cloud-storage': specifier: 'catalog:' - version: 1.1.3(@aws-sdk/client-s3@3.637.0)(@aws-sdk/lib-storage@3.637.0(@aws-sdk/client-s3@3.637.0))(payload@2.27.0(@swc/helpers@0.5.5)(@types/react@18.3.5)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5)))) + version: 1.1.3(@aws-sdk/client-s3@3.637.0)(@aws-sdk/lib-storage@3.637.0(@aws-sdk/client-s3@3.637.0))(payload@2.27.0(@swc/helpers@0.5.5)(@types/react@18.3.5)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5))(webpack-cli@4.10.0))) '@payloadcms/plugin-nested-docs': specifier: 'catalog:' - version: 1.0.12(payload@2.27.0(@swc/helpers@0.5.5)(@types/react@18.3.5)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5)))) + version: 1.0.12(payload@2.27.0(@swc/helpers@0.5.5)(@types/react@18.3.5)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5))(webpack-cli@4.10.0))) '@payloadcms/plugin-sentry': specifier: 'catalog:' - version: 0.0.6(payload@2.27.0(@swc/helpers@0.5.5)(@types/react@18.3.5)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5))))(react@18.3.1) + version: 0.0.6(payload@2.27.0(@swc/helpers@0.5.5)(@types/react@18.3.5)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5))(webpack-cli@4.10.0)))(react@18.3.1) '@payloadcms/plugin-seo': specifier: 'catalog:' - version: 2.3.2(payload@2.27.0(@swc/helpers@0.5.5)(@types/react@18.3.5)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5))))(react@18.3.1) + version: 2.3.2(payload@2.27.0(@swc/helpers@0.5.5)(@types/react@18.3.5)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5))(webpack-cli@4.10.0)))(react@18.3.1) '@payloadcms/richtext-slate': specifier: 'catalog:' - version: 1.5.2(payload@2.27.0(@swc/helpers@0.5.5)(@types/react@18.3.5)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.5.2(payload@2.27.0(@swc/helpers@0.5.5)(@types/react@18.3.5)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5))(webpack-cli@4.10.0)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@sentry/nextjs': specifier: 'catalog:' - version: 8.28.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.52.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@14.2.7(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.46.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.69.4))(react@18.3.1)(webpack@5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5))) + version: 8.28.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.52.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@14.2.7(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.46.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.69.4))(react@18.3.1)(webpack@5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5))(webpack-cli@4.10.0)) camelcase-keys: specifier: 'catalog:' version: 9.1.3 @@ -912,7 +924,7 @@ importers: version: 1.0.3 payload: specifier: 'catalog:' - version: 2.27.0(@swc/helpers@0.5.5)(@types/react@18.3.5)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5))) + version: 2.27.0(@swc/helpers@0.5.5)(@types/react@18.3.5)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5))(webpack-cli@4.10.0)) prop-types: specifier: 'catalog:' version: 15.8.1 @@ -976,7 +988,7 @@ importers: version: link:../../packages/eslint-config-commons-ui eslint-import-resolver-webpack: specifier: 'catalog:' - version: 0.13.9(eslint-plugin-import@2.29.1)(webpack@5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5))) + version: 0.13.9(eslint-plugin-import@2.29.1)(webpack@5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5))(webpack-cli@4.10.0)) eslint-plugin-import: specifier: 'catalog:' version: 2.29.1(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.0) @@ -1006,7 +1018,7 @@ importers: version: 5.5.4 webpack: specifier: 'catalog:' - version: 5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5))(webpack-cli@4.10.0(webpack-bundle-analyzer@4.10.2)(webpack@5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5)))) + version: 5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5))(webpack-cli@4.10.0) apps/climatemappedafrica: dependencies: @@ -1483,15 +1495,30 @@ importers: '@types/mdx': specifier: 'catalog:' version: 2.0.13 + date-fns: + specifier: 'catalog:' + version: 3.6.0 + gray-matter: + specifier: 'catalog:' + version: 4.0.3 next: specifier: 'catalog:' version: 14.2.7(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.46.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.69.4) + parse-numeric-range: + specifier: 'catalog:' + version: 1.3.0 react: specifier: 'catalog:' version: 18.3.1 react-dom: specifier: 'catalog:' version: 18.3.1(react@18.3.1) + react-markdown: + specifier: 'catalog:' + version: 9.0.1(@types/react@18.3.5)(react@18.3.1) + react-syntax-highlighter: + specifier: 'catalog:' + version: 15.5.0(react@18.3.1) devDependencies: '@svgr/webpack': specifier: 'catalog:' @@ -1505,6 +1532,9 @@ importers: '@types/react-dom': specifier: 'catalog:' version: 18.3.0 + '@types/react-syntax-highlighter': + specifier: 'catalog:' + version: 15.5.13 eslint: specifier: 'catalog:' version: 8.57.0 @@ -6476,6 +6506,9 @@ packages: '@types/graceful-fs@4.1.9': resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} + '@types/hast@2.3.10': + resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==} + '@types/hast@3.0.4': resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} @@ -6578,6 +6611,9 @@ packages: '@types/react-lifecycles-compat@3.0.4': resolution: {integrity: sha512-1CM48Y9ztL5S4wjt7DK2izrkgPp/Ql0zCJu/vHzhgl7J+BD4UbSGjHN1M2TlePms472JvOazUtAO1/G3oFZqIQ==} + '@types/react-syntax-highlighter@15.5.13': + resolution: {integrity: sha512-uLGJ87j6Sz8UaBAooU0T6lWJ0dBmjZgN1PZTrj05TNql2/XpC6+4HhMT5syIdFUUt+FASfCeLLv4kBygNU+8qA==} + '@types/react-transition-group@4.4.11': resolution: {integrity: sha512-RM05tAniPZ5DZPzzNFP+DmrcOdD0efDUxMy3145oljWSl3x9ZV5vhme98gTxFrj2lhXvmGNnUiuDyJgY9IKkNA==} @@ -7624,6 +7660,9 @@ packages: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} + comma-separated-tokens@1.0.8: + resolution: {integrity: sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==} + comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} @@ -8914,6 +8953,9 @@ packages: fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + fault@1.0.4: + resolution: {integrity: sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==} + fb-watchman@2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} @@ -9058,6 +9100,10 @@ packages: resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} engines: {node: '>= 6'} + format@0.2.2: + resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} + engines: {node: '>=0.4.x'} + formdata-polyfill@4.0.10: resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} engines: {node: '>=12.20.0'} @@ -9424,6 +9470,9 @@ packages: hast-util-is-element@3.0.0: resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} + hast-util-parse-selector@2.2.5: + resolution: {integrity: sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==} + hast-util-to-estree@3.1.0: resolution: {integrity: sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw==} @@ -9436,6 +9485,9 @@ packages: hast-util-whitespace@3.0.0: resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + hastscript@6.0.0: + resolution: {integrity: sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==} + he@1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true @@ -9443,6 +9495,9 @@ packages: help-me@5.0.0: resolution: {integrity: sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==} + highlight.js@10.7.3: + resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} + history@4.10.1: resolution: {integrity: sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==} @@ -9486,6 +9541,9 @@ packages: resolution: {integrity: sha512-QY6S+hZ0f5m1WT8WffYN+Hg+xm/w5I8XeUcAq/ZYP5wVC8xbKi4Whhru3FtrAebD5EhBW8rmFzkDI6eCAuFe2w==} hasBin: true + html-url-attributes@3.0.0: + resolution: {integrity: sha512-/sXbVCWayk6GDVg3ctOX6nxaVj7So40FcFAnWlWGNAB1LpYKcV5Cd10APjPjW80O7zYW2MsjBV4zZ7IZO5fVow==} + html-webpack-plugin@5.5.3: resolution: {integrity: sha512-6YrDKTuqaP/TquFH7h4srYWsZx+x6k6+FbsTm0ziCwGHDP78Unr1r9F/H4+sGmMbX08GQcJ+K64x55b+7VM/jg==} engines: {node: '>=10.13.0'} @@ -10490,6 +10548,9 @@ packages: lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + lowlight@1.20.0: + resolution: {integrity: sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==} + lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} @@ -11343,6 +11404,9 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} + parse-numeric-range@1.3.0: + resolution: {integrity: sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==} + parse-passwd@1.0.0: resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} engines: {node: '>=0.10.0'} @@ -11843,6 +11907,14 @@ packages: pretty-format@3.8.0: resolution: {integrity: sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==} + prismjs@1.27.0: + resolution: {integrity: sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==} + engines: {node: '>=6'} + + prismjs@1.29.0: + resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==} + engines: {node: '>=6'} + probe-image-size@6.0.0: resolution: {integrity: sha512-99PZ5+RU4gqiTfK5ZDMDkZtn6eL4WlKfFyVJV7lFQvH3iGmQ85DqMTOdxorERO26LHkevR2qsxnHp0x/2UDJPA==} @@ -11879,6 +11951,9 @@ packages: prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + property-information@5.6.0: + resolution: {integrity: sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==} + property-information@6.5.0: resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} @@ -12102,6 +12177,12 @@ packages: react-lifecycles-compat@3.0.4: resolution: {integrity: sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==} + react-markdown@9.0.1: + resolution: {integrity: sha512-186Gw/vF1uRkydbsOIkcGXw7aHq0sZOCRFFjGrr7b9+nVZg4UfA4enXCaxm4fUzecU38sWfrNDitGhshuU7rdg==} + peerDependencies: + '@types/react': '>=18' + react: '>=18' + react-multi-carousel@2.8.5: resolution: {integrity: sha512-C5DAvJkfzR2JK9YixZ3oyF9x6R4LW6nzTpIXrl9Oujxi4uqP9SzVVCjl+JLM3tSdqdjAx/oWZK3dTVBSR73Q+w==} engines: {node: '>=8'} @@ -12184,6 +12265,11 @@ packages: peerDependencies: react: ^15.3.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 + react-syntax-highlighter@15.5.0: + resolution: {integrity: sha512-+zq2myprEnQmH5yw6Gqc8lD55QHnpKaU8TOcFeC/Lg/MQSs8UknEA0JC4nTZGFAXC2J2Hyj/ijJ7NlabyPi2gg==} + peerDependencies: + react: '>= 0.14.0' + react-test-renderer@18.3.1: resolution: {integrity: sha512-KkAgygexHUkQqtvvx/otwxtuFu5cVjfzTCtjXLH9boS19/Nbtg84zS7wIQn39G8IlrhThBpQsMKkq5ZHZIYFXA==} peerDependencies: @@ -12261,6 +12347,9 @@ packages: resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==} engines: {node: '>= 0.4'} + refractor@3.6.0: + resolution: {integrity: sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==} + regenerate-unicode-properties@10.1.1: resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==} engines: {node: '>=4'} @@ -12741,6 +12830,9 @@ packages: resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} engines: {node: '>= 8'} + space-separated-tokens@1.1.5: + resolution: {integrity: sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==} + space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} @@ -15133,7 +15225,7 @@ snapshots: '@aws-sdk/token-providers@3.614.0(@aws-sdk/client-sso-oidc@3.637.0(@aws-sdk/client-sts@3.637.0))': dependencies: - '@aws-sdk/client-sso-oidc': 3.637.0(@aws-sdk/client-sts@3.637.0) + '@aws-sdk/client-sso-oidc': 3.637.0(@aws-sdk/client-sts@3.621.0) '@aws-sdk/types': 3.609.0 '@smithy/property-provider': 3.1.3 '@smithy/shared-ini-file-loader': 3.1.4 @@ -18021,7 +18113,7 @@ snapshots: - utf-8-validate - webpack-dev-server - '@payloadcms/db-mongodb@1.7.2(@aws-sdk/client-sso-oidc@3.637.0(@aws-sdk/client-sts@3.637.0))(payload@2.27.0(@swc/helpers@0.5.5)(@types/react@18.3.5)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5))(webpack-cli@4.10.0)))': + '@payloadcms/db-mongodb@1.7.2(@aws-sdk/client-sso-oidc@3.637.0(@aws-sdk/client-sts@3.621.0))(payload@2.27.0(@swc/helpers@0.5.5)(@types/react@18.3.5)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5))(webpack-cli@4.10.0)))': dependencies: bson-objectid: 2.0.4 deepmerge: 4.3.1 @@ -20024,6 +20116,10 @@ snapshots: dependencies: '@types/node': 20.14.14 + '@types/hast@2.3.10': + dependencies: + '@types/unist': 2.0.10 + '@types/hast@3.0.4': dependencies: '@types/unist': 3.0.2 @@ -20134,6 +20230,10 @@ snapshots: dependencies: '@types/react': 18.3.5 + '@types/react-syntax-highlighter@15.5.13': + dependencies: + '@types/react': 18.3.5 + '@types/react-transition-group@4.4.11': dependencies: '@types/react': 18.3.5 @@ -21425,6 +21525,8 @@ snapshots: dependencies: delayed-stream: 1.0.0 + comma-separated-tokens@1.0.8: {} + comma-separated-tokens@2.0.3: {} commander@12.1.0: {} @@ -23302,6 +23404,10 @@ snapshots: dependencies: reusify: 1.0.4 + fault@1.0.4: + dependencies: + format: 0.2.2 + fb-watchman@2.0.2: dependencies: bser: 2.1.1 @@ -23512,6 +23618,8 @@ snapshots: combined-stream: 1.0.8 mime-types: 2.1.35 + format@0.2.2: {} + formdata-polyfill@4.0.10: dependencies: fetch-blob: 3.2.0 @@ -23943,6 +24051,8 @@ snapshots: dependencies: '@types/hast': 3.0.4 + hast-util-parse-selector@2.2.5: {} + hast-util-to-estree@3.1.0: dependencies: '@types/estree': 1.0.5 @@ -23992,10 +24102,20 @@ snapshots: dependencies: '@types/hast': 3.0.4 + hastscript@6.0.0: + dependencies: + '@types/hast': 2.3.10 + comma-separated-tokens: 1.0.8 + hast-util-parse-selector: 2.2.5 + property-information: 5.6.0 + space-separated-tokens: 1.1.5 + he@1.2.0: {} help-me@5.0.0: {} + highlight.js@10.7.3: {} + history@4.10.1: dependencies: '@babel/runtime': 7.25.6 @@ -24055,6 +24175,8 @@ snapshots: readable-stream: 1.0.34 through2: 0.4.2 + html-url-attributes@3.0.0: {} + html-webpack-plugin@5.5.3(webpack@5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5))(webpack-cli@4.10.0)): dependencies: '@types/html-minifier-terser': 6.1.0 @@ -25367,6 +25489,11 @@ snapshots: dependencies: tslib: 2.6.3 + lowlight@1.20.0: + dependencies: + fault: 1.0.4 + highlight.js: 10.7.3 + lru-cache@10.4.3: {} lru-cache@4.1.5: @@ -26556,6 +26683,8 @@ snapshots: json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 + parse-numeric-range@1.3.0: {} + parse-passwd@1.0.0: {} parse5@7.1.2: @@ -27333,6 +27462,10 @@ snapshots: pretty-format@3.8.0: {} + prismjs@1.27.0: {} + + prismjs@1.29.0: {} + probe-image-size@6.0.0: dependencies: deepmerge: 4.3.1 @@ -27369,6 +27502,10 @@ snapshots: object-assign: 4.1.1 react-is: 16.13.1 + property-information@5.6.0: + dependencies: + xtend: 4.0.2 + property-information@6.5.0: {} proxy-addr@2.0.7: @@ -27607,6 +27744,23 @@ snapshots: react-lifecycles-compat@3.0.4: {} + react-markdown@9.0.1(@types/react@18.3.5)(react@18.3.1): + dependencies: + '@types/hast': 3.0.4 + '@types/react': 18.3.5 + devlop: 1.1.0 + hast-util-to-jsx-runtime: 2.3.0 + html-url-attributes: 3.0.0 + mdast-util-to-hast: 13.2.0 + react: 18.3.1 + remark-parse: 11.0.0 + remark-rehype: 11.1.0 + unified: 11.0.5 + unist-util-visit: 5.0.0 + vfile: 6.0.2 + transitivePeerDependencies: + - supports-color + react-multi-carousel@2.8.5: {} react-onclickoutside@6.13.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): @@ -27721,6 +27875,15 @@ snapshots: react-swipeable-views-core-react-18-fix: 0.14.0(react@18.3.1) shallow-equal: 1.2.1 + react-syntax-highlighter@15.5.0(react@18.3.1): + dependencies: + '@babel/runtime': 7.25.6 + highlight.js: 10.7.3 + lowlight: 1.20.0 + prismjs: 1.29.0 + react: 18.3.1 + refractor: 3.6.0 + react-test-renderer@18.3.1(react@18.3.1): dependencies: react: 18.3.1 @@ -27834,6 +27997,12 @@ snapshots: globalthis: 1.0.4 which-builtin-type: 1.1.4 + refractor@3.6.0: + dependencies: + hastscript: 6.0.0 + parse-entities: 2.0.0 + prismjs: 1.27.0 + regenerate-unicode-properties@10.1.1: dependencies: regenerate: 1.4.2 @@ -28426,6 +28595,8 @@ snapshots: source-map@0.7.4: {} + space-separated-tokens@1.1.5: {} + space-separated-tokens@2.0.2: {} sparse-bitfield@3.0.3: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 48e8ac7bc..e68b9a4de 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -71,6 +71,7 @@ catalog: "@types/nodemailer-sendgrid": ^1.0.3 "@types/react": ^18.3.5 "@types/react-dom": ^18.3.0 + "@types/react-syntax-highlighter": ^15.5.13 ace-builds: ^1.36.2 airtable: ^0.12.2 apollo-link-rest: ^0.9.0 @@ -136,6 +137,7 @@ catalog: next-sitemap: ^1.9.12 nodemailer-sendgrid: ^1.0.3 papaparse: ^5.4.1 + parse-numeric-range: ^1.3.0 payload: ^2.27.0 plaiceholder: ^2.5.0 prettier: ^3.3.3 @@ -146,9 +148,11 @@ catalog: react-dom: ^18.3.1 react-copy-to-clipboard: ^5.1.0 react-leaflet: ^4.2.1 + react-markdown: ^9.0.1 react-multi-carousel: ^2.8.5 react-rotating-text: ^1.4.1 react-share: ^5.1.0 + react-syntax-highlighter: ^15.5.0 react-swipeable-views-react-18-fix: ^0.14.1 react-test-renderer: ^18.3.1 react-vega: ^7.6.0 From a7d8db876276f35c10765577a23008bd8dec03f4 Mon Sep 17 00:00:00 2001 From: Kipruto <43873157+kelvinkipruto@users.noreply.github.com> Date: Thu, 5 Sep 2024 17:33:46 +0300 Subject: [PATCH 16/20] Rename Empty to NoPosts Signed-off-by: Kipruto <43873157+kelvinkipruto@users.noreply.github.com> --- apps/engineeringblog/app/page.tsx | 4 ++-- apps/engineeringblog/components/Empty/index.ts | 3 --- .../components/{Empty/Empty.tsx => NoPosts/NoPosts.tsx} | 4 ++-- apps/engineeringblog/components/NoPosts/index.ts | 3 +++ 4 files changed, 7 insertions(+), 7 deletions(-) delete mode 100644 apps/engineeringblog/components/Empty/index.ts rename apps/engineeringblog/components/{Empty/Empty.tsx => NoPosts/NoPosts.tsx} (96%) create mode 100644 apps/engineeringblog/components/NoPosts/index.ts diff --git a/apps/engineeringblog/app/page.tsx b/apps/engineeringblog/app/page.tsx index 67de2f9bb..5c06bf728 100644 --- a/apps/engineeringblog/app/page.tsx +++ b/apps/engineeringblog/app/page.tsx @@ -1,13 +1,13 @@ import { Container } from "@mui/material"; import { ArticleList } from "@/engineeringblog/components/Article"; import { getAllPosts } from "@/engineeringblog/utils"; -import Empty from "@/engineeringblog/components/Empty"; +import NoPosts from "@/engineeringblog/components/NoPosts"; export default async function index() { const posts = await getAllPosts(); if (!posts.length) { - return ; + return ; } return ( diff --git a/apps/engineeringblog/components/Empty/index.ts b/apps/engineeringblog/components/Empty/index.ts deleted file mode 100644 index 4e548c9c3..000000000 --- a/apps/engineeringblog/components/Empty/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import Empty from "./Empty"; - -export default Empty; diff --git a/apps/engineeringblog/components/Empty/Empty.tsx b/apps/engineeringblog/components/NoPosts/NoPosts.tsx similarity index 96% rename from apps/engineeringblog/components/Empty/Empty.tsx rename to apps/engineeringblog/components/NoPosts/NoPosts.tsx index c8ec29107..f8dead8ea 100644 --- a/apps/engineeringblog/components/Empty/Empty.tsx +++ b/apps/engineeringblog/components/NoPosts/NoPosts.tsx @@ -4,7 +4,7 @@ import React from "react"; import bg from "@/engineeringblog/assets/images/1920x668px bg - 2 2.png"; import { alpha, Box, Typography } from "@mui/material"; -const Empty = React.forwardRef(function Empty() { +const NoPosts = React.forwardRef(function NoPosts() { return ( ({ @@ -70,4 +70,4 @@ const Empty = React.forwardRef(function Empty() { ); }); -export default Empty; +export default NoPosts; diff --git a/apps/engineeringblog/components/NoPosts/index.ts b/apps/engineeringblog/components/NoPosts/index.ts new file mode 100644 index 000000000..55eb77053 --- /dev/null +++ b/apps/engineeringblog/components/NoPosts/index.ts @@ -0,0 +1,3 @@ +import NoPosts from "./NoPosts"; + +export default NoPosts; From fd6df1b623186844998b4ab8e6987b44cfd84501 Mon Sep 17 00:00:00 2001 From: Kipruto <43873157+kelvinkipruto@users.noreply.github.com> Date: Thu, 5 Sep 2024 18:07:01 +0300 Subject: [PATCH 17/20] Review fix --- apps/engineeringblog/app/[slug]/page.tsx | 4 +-- apps/engineeringblog/app/page.tsx | 4 +-- ...ype=check-circle, Size=24, Color=White.svg | 4 +++ .../icons/Type=copy, Size=24, Color=White.svg | 4 +++ .../components/Article/ArticleCard.tsx | 17 ++++-------- .../components/Article/ArticleList.tsx | 2 +- .../{CodeCopyBtn.tsx => CopyCodeButton.tsx} | 27 +++++++++---------- .../components/Markdown/Markdown.tsx | 4 +-- .../content/exploring-next-js.mdx | 2 +- .../content/javascript-generators.mdx | 2 +- .../content/mastering-docker.mdx | 2 +- apps/engineeringblog/package.json | 1 - apps/engineeringblog/utils/index.ts | 17 +++++++----- pnpm-lock.yaml | 13 ++++----- 14 files changed, 50 insertions(+), 53 deletions(-) create mode 100644 apps/engineeringblog/assets/icons/Type=check-circle, Size=24, Color=White.svg create mode 100644 apps/engineeringblog/assets/icons/Type=copy, Size=24, Color=White.svg rename apps/engineeringblog/components/Markdown/{CodeCopyBtn.tsx => CopyCodeButton.tsx} (62%) diff --git a/apps/engineeringblog/app/[slug]/page.tsx b/apps/engineeringblog/app/[slug]/page.tsx index d4a8f3f8f..204421b25 100644 --- a/apps/engineeringblog/app/[slug]/page.tsx +++ b/apps/engineeringblog/app/[slug]/page.tsx @@ -1,9 +1,9 @@ import { ArticleContent } from "@/engineeringblog/components/Article"; import { Box } from "@mui/material"; -import { getBlogPost } from "@/engineeringblog/utils"; +import { getContent } from "@/engineeringblog/utils"; export default async function Page({ params }: { params: { slug: string } }) { - const post = await getBlogPost(params.slug); + const post = await getContent(params.slug); return ( diff --git a/apps/engineeringblog/app/page.tsx b/apps/engineeringblog/app/page.tsx index 5c06bf728..c8c47b1df 100644 --- a/apps/engineeringblog/app/page.tsx +++ b/apps/engineeringblog/app/page.tsx @@ -1,10 +1,10 @@ import { Container } from "@mui/material"; import { ArticleList } from "@/engineeringblog/components/Article"; -import { getAllPosts } from "@/engineeringblog/utils"; +import { getAllContents } from "@/engineeringblog/utils"; import NoPosts from "@/engineeringblog/components/NoPosts"; export default async function index() { - const posts = await getAllPosts(); + const posts = await getAllContents(); if (!posts.length) { return ; diff --git a/apps/engineeringblog/assets/icons/Type=check-circle, Size=24, Color=White.svg b/apps/engineeringblog/assets/icons/Type=check-circle, Size=24, Color=White.svg new file mode 100644 index 000000000..6df8309fe --- /dev/null +++ b/apps/engineeringblog/assets/icons/Type=check-circle, Size=24, Color=White.svg @@ -0,0 +1,4 @@ + + + + diff --git a/apps/engineeringblog/assets/icons/Type=copy, Size=24, Color=White.svg b/apps/engineeringblog/assets/icons/Type=copy, Size=24, Color=White.svg new file mode 100644 index 000000000..319c89143 --- /dev/null +++ b/apps/engineeringblog/assets/icons/Type=copy, Size=24, Color=White.svg @@ -0,0 +1,4 @@ + + + + diff --git a/apps/engineeringblog/components/Article/ArticleCard.tsx b/apps/engineeringblog/components/Article/ArticleCard.tsx index f4ff5f66e..a6f590dab 100644 --- a/apps/engineeringblog/components/Article/ArticleCard.tsx +++ b/apps/engineeringblog/components/Article/ArticleCard.tsx @@ -9,11 +9,7 @@ import { import React from "react"; const ArticleCard = React.forwardRef(function ArticleCard( - { - article, - }: { - article: ArticleWithoutContent; - }, + { title, publishDate, featuredImage, slug }: ArticleWithoutContent, ref: React.Ref, ) { return ( @@ -32,13 +28,10 @@ const ArticleCard = React.forwardRef(function ArticleCard( filter: "drop-shadow(0px 4px 8px rgba(0, 0, 0, 0.1))", }} > - + - {article.title} + {title} - {article.date} + {publishDate} diff --git a/apps/engineeringblog/components/Article/ArticleList.tsx b/apps/engineeringblog/components/Article/ArticleList.tsx index 252967b7d..718257bb7 100644 --- a/apps/engineeringblog/components/Article/ArticleList.tsx +++ b/apps/engineeringblog/components/Article/ArticleList.tsx @@ -23,7 +23,7 @@ const ArticleList = React.forwardRef(function ArtilceList( > {articles?.map((article) => ( - + ))} diff --git a/apps/engineeringblog/components/Markdown/CodeCopyBtn.tsx b/apps/engineeringblog/components/Markdown/CopyCodeButton.tsx similarity index 62% rename from apps/engineeringblog/components/Markdown/CodeCopyBtn.tsx rename to apps/engineeringblog/components/Markdown/CopyCodeButton.tsx index 944b9cf9c..34699fa14 100644 --- a/apps/engineeringblog/components/Markdown/CodeCopyBtn.tsx +++ b/apps/engineeringblog/components/Markdown/CopyCodeButton.tsx @@ -1,13 +1,15 @@ import React from "react"; -import { CopyAll } from "@mui/icons-material"; -import DoneIcon from "@mui/icons-material/Done"; -import { Box } from "@mui/material"; +import { IconButton } from "@mui/material"; +import CopyIcon from "@/engineeringblog/assets/icons/Type=copy, Size=24, Color=White.svg"; +import CheckIcon from "@/engineeringblog/assets/icons/Type=check-circle, Size=24, Color=White.svg"; -export default function CodeCopyBtn({ children }: { children: JSX.Element }) { +export default function CopyCodeButton({ + children, +}: { + children: JSX.Element; +}) { const [copyOk, setCopyOk] = React.useState(false); - const iconColor = copyOk ? "#0af20a" : "#ddd"; - const handleClick = (_e: React.MouseEvent) => { navigator.clipboard.writeText(children.props.children); @@ -18,7 +20,7 @@ export default function CodeCopyBtn({ children }: { children: JSX.Element }) { }; return ( - {copyOk ? ( - + ) : ( - )} - + ); } diff --git a/apps/engineeringblog/components/Markdown/Markdown.tsx b/apps/engineeringblog/components/Markdown/Markdown.tsx index 2e424c468..4906a6586 100644 --- a/apps/engineeringblog/components/Markdown/Markdown.tsx +++ b/apps/engineeringblog/components/Markdown/Markdown.tsx @@ -12,7 +12,7 @@ import python from "react-syntax-highlighter/dist/cjs/languages/prism/python"; import scss from "react-syntax-highlighter/dist/cjs/languages/prism/scss"; import tsx from "react-syntax-highlighter/dist/cjs/languages/prism/tsx"; import typescript from "react-syntax-highlighter/dist/cjs/languages/prism/typescript"; -import CodeCopyBtn from "./CodeCopyBtn"; +import CopyCodeButton from "./CopyCodeButton"; import rangeParser from "parse-numeric-range"; import { oneDark } from "react-syntax-highlighter/dist/cjs/styles/prism"; @@ -44,7 +44,7 @@ const Pre = ({ children }: { children: JSX.Element }) => ( overflow: "auto", }} > - {children} + {children} {children} ); diff --git a/apps/engineeringblog/content/exploring-next-js.mdx b/apps/engineeringblog/content/exploring-next-js.mdx index 28d23badc..558887ea2 100644 --- a/apps/engineeringblog/content/exploring-next-js.mdx +++ b/apps/engineeringblog/content/exploring-next-js.mdx @@ -1,6 +1,6 @@ --- title: "Exploring Next.js: The React Framework for Production" -date: "2020-01-01" +publishDate: "2020-01-01" description: "Next.js has rapidly become one of the most popular frameworks for building modern web applications. Created by Vercel, it extends the capabilities of React, providing developers with a powerful toolkit to build fast, scalable, and SEO-friendly websites with ease." featuredImage: "/blog/exploring-next-js.png" --- diff --git a/apps/engineeringblog/content/javascript-generators.mdx b/apps/engineeringblog/content/javascript-generators.mdx index b4ab83590..8e3cda480 100644 --- a/apps/engineeringblog/content/javascript-generators.mdx +++ b/apps/engineeringblog/content/javascript-generators.mdx @@ -1,6 +1,6 @@ --- title: "Understanding JavaScript Generators: A Deep Dive" -date: "2020-02-02" +publishDate: "2020-02-02" description: "JavaScript is a versatile language, and one of its lesser-known yet powerful features is Generators. Introduced in ECMAScript 6 (ES6), Generators provide a unique way to handle functions, offering more control over the execution flow. In this blog, we'll explore what generators are, how they work, and practical use cases." featuredImage: "/blog/javascript-generators.jpeg" --- diff --git a/apps/engineeringblog/content/mastering-docker.mdx b/apps/engineeringblog/content/mastering-docker.mdx index 5ac48cd62..7cee1f987 100644 --- a/apps/engineeringblog/content/mastering-docker.mdx +++ b/apps/engineeringblog/content/mastering-docker.mdx @@ -1,6 +1,6 @@ --- title: "Mastering Docker: A Comprehensive Guide for Developers" -date: "2020-03-03" +publishDate: "2020-03-03" description: "Docker has revolutionized the way we build, ship, and run applications. It simplifies software development by creating isolated environments, known as containers, that bundle an application and its dependencies together. This ensures consistency across multiple environments and reduces the 'it works on my machine' problem. In this article, we'll dive deep into Docker, exploring its architecture, benefits, common use cases, and best practices." featuredImage: "/blog/mastering-docker.png" --- diff --git a/apps/engineeringblog/package.json b/apps/engineeringblog/package.json index 07df38c17..88717eac4 100644 --- a/apps/engineeringblog/package.json +++ b/apps/engineeringblog/package.json @@ -18,7 +18,6 @@ "@emotion/styled": "catalog:", "@mdx-js/loader": "catalog:", "@mdx-js/react": "catalog:", - "@mui/icons-material": "catalog:", "@mui/material": "catalog:", "@mui/material-nextjs": "catalog:", "@mui/utils": "catalog:", diff --git a/apps/engineeringblog/utils/index.ts b/apps/engineeringblog/utils/index.ts index 7280a2b43..2693105d2 100644 --- a/apps/engineeringblog/utils/index.ts +++ b/apps/engineeringblog/utils/index.ts @@ -6,14 +6,14 @@ export type Article = { slug: string; title: string; description: string; - date: string; + publishDate: string; featuredImage: string; content: string; }; export type ArticleWithoutContent = Omit; -export function getAllPosts(): ArticleWithoutContent[] { +export function getAllContents(): ArticleWithoutContent[] { const postsDirectory = path.join(process.cwd(), "content"); const fileNames = fs .readdirSync(postsDirectory) @@ -28,18 +28,21 @@ export function getAllPosts(): ArticleWithoutContent[] { slug: fileName.replace(/\.mdx$/, ""), title: data.title, description: data.description, - date: data.date, - formattedDate: format(new Date(data.date), "MMM dd, yyyy"), + publishDate: data.publishDate, + formattedDate: format(new Date(data.publishDate), "MMM dd, yyyy"), featuredImage: data?.featuredImage, }; }); - posts.sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime()); + posts.sort( + (a, b) => + new Date(b.publishDate).getTime() - new Date(a.publishDate).getTime(), + ); return posts; } -export async function getBlogPost(slug: string): Promise
{ +export async function getContent(slug: string): Promise
{ const postsDirectory = path.join(process.cwd(), "content"); const filePath = path.join(postsDirectory, `${slug}.mdx`); const fileContents = fs.readFileSync(filePath, "utf8"); @@ -49,7 +52,7 @@ export async function getBlogPost(slug: string): Promise
{ slug, title: data.title, description: data.description, - date: format(new Date(data.date), "MMM dd, yyyy"), + publishDate: format(new Date(data.publishDate), "MMM dd, yyyy"), featuredImage: data.featuredImage, content, }; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c898ee70c..8389ffbac 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -653,7 +653,7 @@ importers: version: 1.0.7(@swc/core@1.7.23(@swc/helpers@0.5.5))(ajv@8.17.1)(payload@2.28.0(@swc/helpers@0.5.5)(@types/react@18.3.5)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5))(webpack-cli@4.10.0)))(sass@1.69.4) '@payloadcms/db-mongodb': specifier: 'catalog:' - version: 1.7.2(@aws-sdk/client-sso-oidc@3.645.0(@aws-sdk/client-sts@3.645.0))(payload@2.28.0(@swc/helpers@0.5.5)(@types/react@18.3.5)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5))(webpack-cli@4.10.0))) + version: 1.7.2(@aws-sdk/client-sso-oidc@3.645.0(@aws-sdk/client-sts@3.621.0))(payload@2.28.0(@swc/helpers@0.5.5)(@types/react@18.3.5)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5))(webpack-cli@4.10.0))) '@payloadcms/plugin-cloud-storage': specifier: 'catalog:' version: 1.1.3(@aws-sdk/client-s3@3.645.0)(@aws-sdk/lib-storage@3.645.0(@aws-sdk/client-s3@3.645.0))(payload@2.28.0(@swc/helpers@0.5.5)(@types/react@18.3.5)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5))(webpack-cli@4.10.0))) @@ -689,7 +689,7 @@ importers: version: 1.9.4 migrate-mongo: specifier: 'catalog:' - version: 11.0.0(mongodb@4.17.1(@aws-sdk/client-sso-oidc@3.645.0(@aws-sdk/client-sts@3.645.0))) + version: 11.0.0(mongodb@4.17.1(@aws-sdk/client-sso-oidc@3.645.0(@aws-sdk/client-sts@3.621.0))) monaco-editor: specifier: 'catalog:' version: 0.51.0 @@ -1477,9 +1477,6 @@ importers: '@mdx-js/react': specifier: 'catalog:' version: 3.0.1(@types/react@18.3.5)(react@18.3.1) - '@mui/icons-material': - specifier: 'catalog:' - version: 5.16.6(@mui/material@5.16.6(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.5)(react@18.3.1) '@mui/material': specifier: 'catalog:' version: 5.16.6(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -15253,7 +15250,7 @@ snapshots: '@aws-sdk/token-providers@3.614.0(@aws-sdk/client-sso-oidc@3.645.0(@aws-sdk/client-sts@3.645.0))': dependencies: - '@aws-sdk/client-sso-oidc': 3.645.0(@aws-sdk/client-sts@3.645.0) + '@aws-sdk/client-sso-oidc': 3.645.0(@aws-sdk/client-sts@3.621.0) '@aws-sdk/types': 3.609.0 '@smithy/property-provider': 3.1.3 '@smithy/shared-ini-file-loader': 3.1.4 @@ -18129,7 +18126,7 @@ snapshots: - utf-8-validate - webpack-dev-server - '@payloadcms/db-mongodb@1.7.2(@aws-sdk/client-sso-oidc@3.645.0(@aws-sdk/client-sts@3.645.0))(payload@2.28.0(@swc/helpers@0.5.5)(@types/react@18.3.5)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5))(webpack-cli@4.10.0)))': + '@payloadcms/db-mongodb@1.7.2(@aws-sdk/client-sso-oidc@3.645.0(@aws-sdk/client-sts@3.621.0))(payload@2.28.0(@swc/helpers@0.5.5)(@types/react@18.3.5)(encoding@0.1.13)(typescript@5.5.4)(webpack@5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5))(webpack-cli@4.10.0)))': dependencies: bson-objectid: 2.0.4 deepmerge: 4.3.1 @@ -25936,7 +25933,7 @@ snapshots: braces: 3.0.3 picomatch: 2.3.1 - migrate-mongo@11.0.0(mongodb@4.17.1(@aws-sdk/client-sso-oidc@3.645.0(@aws-sdk/client-sts@3.645.0))): + migrate-mongo@11.0.0(mongodb@4.17.1(@aws-sdk/client-sso-oidc@3.645.0(@aws-sdk/client-sts@3.621.0))): dependencies: cli-table3: 0.6.5 commander: 9.5.0 From f1b109b9acee88c5e5864f8b0fa272236c83a594 Mon Sep 17 00:00:00 2001 From: Kipruto <43873157+kelvinkipruto@users.noreply.github.com> Date: Fri, 6 Sep 2024 15:23:48 +0300 Subject: [PATCH 18/20] Use next/link Signed-off-by: Kipruto <43873157+kelvinkipruto@users.noreply.github.com> --- apps/engineeringblog/components/Article/ArticleCard.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/engineeringblog/components/Article/ArticleCard.tsx b/apps/engineeringblog/components/Article/ArticleCard.tsx index a6f590dab..fad5d5113 100644 --- a/apps/engineeringblog/components/Article/ArticleCard.tsx +++ b/apps/engineeringblog/components/Article/ArticleCard.tsx @@ -6,6 +6,7 @@ import { CardMedia, Typography, } from "@mui/material"; +import Link from "next/link"; import React from "react"; const ArticleCard = React.forwardRef(function ArticleCard( @@ -28,7 +29,7 @@ const ArticleCard = React.forwardRef(function ArticleCard( filter: "drop-shadow(0px 4px 8px rgba(0, 0, 0, 0.1))", }} > - + Date: Fri, 6 Sep 2024 16:34:51 +0300 Subject: [PATCH 19/20] use StyledLink Signed-off-by: Kipruto <43873157+kelvinkipruto@users.noreply.github.com> --- apps/engineeringblog/components/Article/ArticleCard.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/engineeringblog/components/Article/ArticleCard.tsx b/apps/engineeringblog/components/Article/ArticleCard.tsx index fad5d5113..1dcf20aa8 100644 --- a/apps/engineeringblog/components/Article/ArticleCard.tsx +++ b/apps/engineeringblog/components/Article/ArticleCard.tsx @@ -1,3 +1,5 @@ +"use client"; +import { StyledLink } from "@/commons-ui/next/Link"; import { ArticleWithoutContent } from "@/engineeringblog/utils"; import { Card, @@ -6,7 +8,6 @@ import { CardMedia, Typography, } from "@mui/material"; -import Link from "next/link"; import React from "react"; const ArticleCard = React.forwardRef(function ArticleCard( @@ -29,7 +30,7 @@ const ArticleCard = React.forwardRef(function ArticleCard( filter: "drop-shadow(0px 4px 8px rgba(0, 0, 0, 0.1))", }} > - + Date: Sat, 7 Sep 2024 17:03:14 +0300 Subject: [PATCH 20/20] Review fixes Signed-off-by: Kipruto <43873157+kelvinkipruto@users.noreply.github.com> --- apps/engineeringblog/.eslintrc.js | 7 +- .../components/Markdown/Markdown.tsx | 14 +- .../components/NoPosts/NoPosts.tsx | 4 +- apps/engineeringblog/package.json | 1 + pnpm-lock.yaml | 543 ++++++++++++++++-- pnpm-workspace.yaml | 1 + 6 files changed, 506 insertions(+), 64 deletions(-) diff --git a/apps/engineeringblog/.eslintrc.js b/apps/engineeringblog/.eslintrc.js index 6c9302824..33fc2da49 100644 --- a/apps/engineeringblog/.eslintrc.js +++ b/apps/engineeringblog/.eslintrc.js @@ -1,11 +1,16 @@ module.exports = { root: true, - extends: ["next/core-web-vitals", "plugin:prettier/recommended"], + extends: [ + "next/core-web-vitals", + "plugin:prettier/recommended", + "plugin:mdx/recommended", + ], settings: { "import/resolver": { webpack: { config: "./eslint.webpack.config.js", }, }, + "mdx/code-blocks": true, }, }; diff --git a/apps/engineeringblog/components/Markdown/Markdown.tsx b/apps/engineeringblog/components/Markdown/Markdown.tsx index 4906a6586..e23bfcdd7 100644 --- a/apps/engineeringblog/components/Markdown/Markdown.tsx +++ b/apps/engineeringblog/components/Markdown/Markdown.tsx @@ -1,5 +1,5 @@ // Addapted from https://amirardalan.com/blog/syntax-highlight-code-in-markdown -import { FC } from "react"; +import React from "react"; import ReactMarkdown, { Components } from "react-markdown"; import { PrismLight as SyntaxHighlighter } from "react-syntax-highlighter"; import bash from "react-syntax-highlighter/dist/cjs/languages/prism/bash"; @@ -29,10 +29,6 @@ SyntaxHighlighter.registerLanguage("python", python); SyntaxHighlighter.registerLanguage("jsx", jsx); SyntaxHighlighter.registerLanguage("java", java); -type MarkdownProps = { - markdown: string; -}; - const Pre = ({ children }: { children: JSX.Element }) => ( ( ); -const Markdown: FC = ({ markdown }) => { +const Markdown = React.forwardRef(function Markdown({ + markdown, +}: { + markdown: string; +}) { const syntaxTheme = oneDark; const MarkdownComponents: Components = { @@ -98,6 +98,6 @@ const Markdown: FC = ({ markdown }) => { return ( {markdown} ); -}; +}); export default Markdown; diff --git a/apps/engineeringblog/components/NoPosts/NoPosts.tsx b/apps/engineeringblog/components/NoPosts/NoPosts.tsx index f8dead8ea..b6667f0e2 100644 --- a/apps/engineeringblog/components/NoPosts/NoPosts.tsx +++ b/apps/engineeringblog/components/NoPosts/NoPosts.tsx @@ -1,9 +1,11 @@ "use client"; + import { Section } from "@commons-ui/core"; import React from "react"; -import bg from "@/engineeringblog/assets/images/1920x668px bg - 2 2.png"; import { alpha, Box, Typography } from "@mui/material"; +import bg from "@/engineeringblog/assets/images/1920x668px bg - 2 2.png"; + const NoPosts = React.forwardRef(function NoPosts() { return ( = 8'} + '@npmcli/config@8.3.4': + resolution: {integrity: sha512-01rtHedemDNhUXdicU7s+QYz/3JyV5Naj84cvdXGH4mgCdL+agmSYaLF4LUG4vMCLzhBO8YtS0gPpH1FGvbgAw==} + engines: {node: ^16.14.0 || >=18.0.0} + '@npmcli/fs@1.1.1': resolution: {integrity: sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==} + '@npmcli/git@5.0.8': + resolution: {integrity: sha512-liASfw5cqhjNW9UFd+ruwwdEf/lbOAQjLL2XY2dFW/bkJheXDYZgOyul/4gVvEV4BWkTXjYGmDqMw9uegdbJNQ==} + engines: {node: ^16.14.0 || >=18.0.0} + + '@npmcli/map-workspaces@3.0.6': + resolution: {integrity: sha512-tkYs0OYnzQm6iIRdfy+LcLBjcKuQCeE5YLb8KnrIlutJfheNaPvPpgoFEyEFgbjzl5PLZ3IA/BWAwRU0eHuQDA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + '@npmcli/move-file@1.1.2': resolution: {integrity: sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==} engines: {node: '>=10'} deprecated: This functionality has been moved to @npmcli/fs + '@npmcli/name-from-folder@2.0.0': + resolution: {integrity: sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + '@npmcli/package-json@5.2.0': + resolution: {integrity: sha512-qe/kiqqkW0AGtvBjL8TJKZk/eBBSpnJkUWvHdQ9jM2lKHXRYYJuyNpJPlJw3c8QjC2ow6NZYiLExhUaeJelbxQ==} + engines: {node: ^16.14.0 || >=18.0.0} + + '@npmcli/promise-spawn@7.0.2': + resolution: {integrity: sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ==} + engines: {node: ^16.14.0 || >=18.0.0} + '@opentelemetry/api-logs@0.52.1': resolution: {integrity: sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==} engines: {node: '>=14'} @@ -6390,6 +6420,9 @@ packages: '@types/caseless@0.12.5': resolution: {integrity: sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg==} + '@types/concat-stream@2.0.3': + resolution: {integrity: sha512-3qe4oQAPNwVNwK4C9c8u+VJqv9kez+2MR4qJpoPFfXtgxxif1QbFusvXzK0/Wra2VX07smostI2VMmJNSpZjuQ==} + '@types/connect@3.4.36': resolution: {integrity: sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==} @@ -6498,6 +6531,9 @@ packages: '@types/http-errors@2.0.4': resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} + '@types/is-empty@1.2.3': + resolution: {integrity: sha512-4J1l5d79hoIvsrKh5VUKVRA1aIdsOb10Hu5j3J2VfP/msDnfTdGPmNp2E1Wg+vs97Bktzo+MZePFFXSGoykYJw==} + '@types/is-hotkey@0.1.10': resolution: {integrity: sha512-RvC8KMw5BCac1NvRRyaHgMMEtBaZ6wh0pyPTBu7izn4Sj/AX9Y4aXU5c7rX8PnM/knsuUpC1IeoBkANtxBypsQ==} @@ -6618,6 +6654,9 @@ packages: '@types/stack-utils@2.0.3': resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} + '@types/supports-color@8.1.3': + resolution: {integrity: sha512-Hy6UMpxhE3j1tLpl27exp1XqHD7n8chAiNPzWfz16LPZoMMoSc4dzLl6w9qijkEb/r5O1ozdu1CWGA2L83ZeZg==} + '@types/tough-cookie@4.0.5': resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} @@ -6896,6 +6935,10 @@ packages: abbrev@1.1.1: resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} + abbrev@2.0.0: + resolution: {integrity: sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + abort-controller@3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} @@ -7545,6 +7588,10 @@ packages: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} + ci-info@4.0.0: + resolution: {integrity: sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==} + engines: {node: '>=8'} + cipher-base@1.0.4: resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} @@ -7710,6 +7757,10 @@ packages: concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + concat-stream@2.0.0: + resolution: {integrity: sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==} + engines: {'0': node >= 6.0} + conf@10.2.0: resolution: {integrity: sha512-8fLl9F04EJqjSqH+QjITQfJF8BrOVaYr1jewVgSRAEWePfxT0sku4w2hrGQ60BC/TNLGQ2pgxNlTbWQmMPFvXg==} engines: {node: '>=12'} @@ -8612,6 +8663,12 @@ packages: eslint-plugin-import: '>=1.4.0' webpack: '>=1.11.0' + eslint-mdx@3.1.5: + resolution: {integrity: sha512-ynztX0k7CQ3iDL7fDEIeg3g0O/d6QPv7IBI9fdYLhXp5fAp0fi8X22xF/D3+Pk0f90R27uwqa1clHpay6t0l8Q==} + engines: {node: '>=18.0.0'} + peerDependencies: + eslint: '>=8.0.0' + eslint-module-utils@2.8.1: resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} engines: {node: '>=4'} @@ -8682,6 +8739,12 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + eslint-plugin-mdx@3.1.5: + resolution: {integrity: sha512-lUE7tP7IrIRHU3gTtASDe5u4YM2SvQveYVJfuo82yn3MLh/B/v05FNySURCK4aIxIYF1QYo3IRemQG/lyQzpAg==} + engines: {node: '>=18.0.0'} + peerDependencies: + eslint: '>=8.0.0' + eslint-plugin-module-resolver@1.5.0: resolution: {integrity: sha512-fz8oVazFk5jfZRCBgURDIM955QufKePsGNgpu+z/HWedy9HII6jir1PGts+p27rCWWwSw2LXoxS4xll2WH17fw==} @@ -9497,6 +9560,10 @@ packages: resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} engines: {node: '>=0.10.0'} + hosted-git-info@7.0.2: + resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==} + engines: {node: ^16.14.0 || >=18.0.0} + html-encoding-sniffer@3.0.0: resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} engines: {node: '>=12'} @@ -9685,6 +9752,9 @@ packages: engines: {node: '>=8'} hasBin: true + import-meta-resolve@4.1.0: + resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} + imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} @@ -9709,6 +9779,10 @@ packages: ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + ini@4.1.3: + resolution: {integrity: sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + inline-style-parser@0.1.1: resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} @@ -9816,6 +9890,9 @@ packages: is-decimal@2.0.1: resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} + is-empty@1.2.0: + resolution: {integrity: sha512-F2FnH/otLNJv0J6wc73A5Xo7oHLNnqplYqZhUu01tD54DIPvxIRSTSLkrUB/M0nHO4vo1O9PDfN4KoTxCzLh/w==} + is-extendable@0.1.1: resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} engines: {node: '>=0.10.0'} @@ -10014,6 +10091,10 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + isexe@3.1.1: + resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} + engines: {node: '>=16'} + isobject@3.0.1: resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} engines: {node: '>=0.10.0'} @@ -10290,6 +10371,10 @@ packages: json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + json-parse-even-better-errors@3.0.2: + resolution: {integrity: sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + json-schema-to-typescript@14.0.5: resolution: {integrity: sha512-JmHsbgY0KKo8Pw0HRXpGzAlZYxlu+M5kFhSzhNkUSrVJ4sCXPdAGIdSpzva5ev2/Kybz10S6AfnNdF4o3Pzt3A==} engines: {node: '>=16.0.0'} @@ -10410,6 +10495,10 @@ packages: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} + kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + klona@2.0.6: resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} engines: {node: '>= 8'} @@ -10442,6 +10531,10 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + lines-and-columns@2.0.4: + resolution: {integrity: sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + lint-staged@15.2.10: resolution: {integrity: sha512-5dY5t743e1byO19P9I4b3x8HJwalIznL5E1FWYnU6OWw33KxNBSLAc6Cy7F2PsFEO8FKnLwjwm5hx7aMF0jzZg==} engines: {node: '>=18.12.0'} @@ -10451,6 +10544,9 @@ packages: resolution: {integrity: sha512-opevsywziHd3zHCVQGAj8zu+Z3yHNkkoYhWIGnq54RrCVwLz0MozotJEDnKsIBLvkfLGN6BLOyAeRrYI0pKA4g==} engines: {node: '>=18.0.0'} + load-plugin@6.0.3: + resolution: {integrity: sha512-kc0X2FEUZr145odl68frm+lMJuQ23+rTXYmR6TImqPtbpmXC4vVXbWKDQ9IzndA0HfyQamWfKLhzsqGSTxE63w==} + loader-runner@4.3.0: resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} engines: {node: '>=6.11.5'} @@ -11153,6 +11249,15 @@ packages: engines: {node: '>=6'} hasBin: true + nopt@7.2.1: + resolution: {integrity: sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + hasBin: true + + normalize-package-data@6.0.2: + resolution: {integrity: sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==} + engines: {node: ^16.14.0 || >=18.0.0} + normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} @@ -11161,6 +11266,22 @@ packages: resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} engines: {node: '>=0.10.0'} + npm-install-checks@6.3.0: + resolution: {integrity: sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + npm-normalize-package-bin@3.0.1: + resolution: {integrity: sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + npm-package-arg@11.0.3: + resolution: {integrity: sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw==} + engines: {node: ^16.14.0 || >=18.0.0} + + npm-pick-manifest@9.1.0: + resolution: {integrity: sha512-nkc+3pIIhqHVQr085X9d2JzPzLyjzQS96zbruppqC9aZRm/x8xx6xhI98gHtsfELP2bE+loHq8ZaHFHhe+NauA==} + engines: {node: ^16.14.0 || >=18.0.0} + npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} @@ -11389,6 +11510,10 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} + parse-json@7.1.1: + resolution: {integrity: sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw==} + engines: {node: '>=16'} + parse-numeric-range@1.3.0: resolution: {integrity: sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==} @@ -11902,6 +12027,10 @@ packages: probe-image-size@6.0.0: resolution: {integrity: sha512-99PZ5+RU4gqiTfK5ZDMDkZtn6eL4WlKfFyVJV7lFQvH3iGmQ85DqMTOdxorERO26LHkevR2qsxnHp0x/2UDJPA==} + proc-log@4.2.0: + resolution: {integrity: sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} @@ -12282,6 +12411,10 @@ packages: resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} engines: {node: '>=0.10.0'} + read-package-json-fast@3.0.2: + resolution: {integrity: sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + read-yaml-file@1.1.0: resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} engines: {node: '>=6'} @@ -12395,6 +12528,9 @@ packages: remark-rehype@11.1.0: resolution: {integrity: sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==} + remark-stringify@11.0.0: + resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} + renderkid@3.0.0: resolution: {integrity: sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==} @@ -12528,6 +12664,10 @@ packages: rw@1.3.3: resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} + sade@1.8.1: + resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} + engines: {node: '>=6'} + safe-array-concat@1.1.2: resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} engines: {node: '>=0.4'} @@ -12826,6 +12966,18 @@ packages: spawndamnit@2.0.0: resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==} + spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + + spdx-exceptions@2.5.0: + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} + + spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + + spdx-license-ids@3.0.20: + resolution: {integrity: sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==} + split2@3.2.2: resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} @@ -12913,6 +13065,10 @@ packages: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} + string-width@6.1.0: + resolution: {integrity: sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ==} + engines: {node: '>=16'} + string-width@7.2.0: resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} engines: {node: '>=18'} @@ -13047,6 +13203,10 @@ packages: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} + supports-color@9.4.0: + resolution: {integrity: sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==} + engines: {node: '>=12'} + supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} @@ -13436,6 +13596,10 @@ packages: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} + type-fest@3.13.1: + resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} + engines: {node: '>=14.16'} + type-fest@4.23.0: resolution: {integrity: sha512-ZiBujro2ohr5+Z/hZWHESLz3g08BBdrdLMieYFULJO+tWc437sn8kQsWLJoZErY8alNhxre9K4p3GURAG11n+w==} engines: {node: '>=16'} @@ -13463,6 +13627,9 @@ packages: resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} engines: {node: '>= 0.4'} + typedarray@0.0.6: + resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} + typescript@5.5.4: resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} engines: {node: '>=14.17'} @@ -13497,6 +13664,9 @@ packages: resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} engines: {node: '>=18'} + unified-engine@11.2.1: + resolution: {integrity: sha512-xBAdZ8UY2X4R9Hm6X6kMne4Nz0PlpOc1oE6DPeqJnewr5Imkb8uT5Eyvy1h7xNekPL3PSWh3ZJyNrMW6jnNQBg==} + unified@11.0.5: resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} @@ -13510,6 +13680,9 @@ packages: resolution: {integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==} engines: {node: '>=12'} + unist-util-inspect@8.1.0: + resolution: {integrity: sha512-mOlg8Mp33pR0eeFpo5d2902ojqFFOKMMG2hF8bmH7ZlhnmjFgh0NI3/ZDwdaBJNbvrS7LZFVrBVtIE9KZ9s7vQ==} + unist-util-is@6.0.0: resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} @@ -13660,6 +13833,11 @@ packages: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} hasBin: true + uvu@0.5.6: + resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} + engines: {node: '>=8'} + hasBin: true + v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} @@ -13667,6 +13845,13 @@ packages: resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} engines: {node: '>=10.12.0'} + validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + + validate-npm-package-name@5.0.1: + resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + value-equal@1.0.1: resolution: {integrity: sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==} @@ -13799,6 +13984,15 @@ packages: vfile-message@4.0.2: resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} + vfile-reporter@8.1.1: + resolution: {integrity: sha512-qxRZcnFSQt6pWKn3PAk81yLK2rO2i7CDXpy8v8ZquiEOMLSnPw6BMSi9Y1sUCwGGl7a9b3CJT1CKpnRF7pp66g==} + + vfile-sort@4.0.0: + resolution: {integrity: sha512-lffPI1JrbHDTToJwcq0rl6rBmkjQmMuXkAxsZPRS9DXbaJQvc642eCg6EGxcX2i1L+esbuhq+2l9tBll5v8AeQ==} + + vfile-statistics@3.0.0: + resolution: {integrity: sha512-/qlwqwWBWFOmpXujL/20P+Iuydil0rZZNglR+VNm6J0gpLHwuVM5s7g2TfVoswbXjZ4HuIhLMySEyIw5i7/D8w==} + vfile@6.0.2: resolution: {integrity: sha512-zND7NlS8rJYb/sPqkb13ZvbbUoExdbi4w3SfRrMq6R3FvnLQmmfpajJNITuuYm6AZ5uao9vy4BAos3EXBPf2rg==} @@ -14149,6 +14343,11 @@ packages: engines: {node: '>= 8'} hasBin: true + which@4.0.0: + resolution: {integrity: sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==} + engines: {node: ^16.13.0 || >=18.0.0} + hasBin: true + wide-align@1.1.5: resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} @@ -14447,7 +14646,7 @@ snapshots: '@aws-sdk/client-sso-oidc': 3.645.0(@aws-sdk/client-sts@3.621.0) '@aws-sdk/client-sts': 3.645.0 '@aws-sdk/core': 3.635.0 - '@aws-sdk/credential-provider-node': 3.645.0(@aws-sdk/client-sso-oidc@3.645.0(@aws-sdk/client-sts@3.645.0))(@aws-sdk/client-sts@3.645.0) + '@aws-sdk/credential-provider-node': 3.645.0(@aws-sdk/client-sso-oidc@3.645.0(@aws-sdk/client-sts@3.645.0))(@aws-sdk/client-sts@3.621.0) '@aws-sdk/middleware-bucket-endpoint': 3.620.0 '@aws-sdk/middleware-expect-continue': 3.620.0 '@aws-sdk/middleware-flexible-checksums': 3.620.0 @@ -14598,7 +14797,7 @@ snapshots: '@aws-crypto/sha256-js': 5.2.0 '@aws-sdk/client-sts': 3.645.0 '@aws-sdk/core': 3.635.0 - '@aws-sdk/credential-provider-node': 3.645.0(@aws-sdk/client-sso-oidc@3.645.0(@aws-sdk/client-sts@3.645.0))(@aws-sdk/client-sts@3.645.0) + '@aws-sdk/credential-provider-node': 3.645.0(@aws-sdk/client-sso-oidc@3.645.0(@aws-sdk/client-sts@3.645.0))(@aws-sdk/client-sts@3.621.0) '@aws-sdk/middleware-host-header': 3.620.0 '@aws-sdk/middleware-logger': 3.609.0 '@aws-sdk/middleware-recursion-detection': 3.620.0 @@ -14774,7 +14973,7 @@ snapshots: '@aws-crypto/sha256-js': 5.2.0 '@aws-sdk/client-sso-oidc': 3.645.0(@aws-sdk/client-sts@3.645.0) '@aws-sdk/core': 3.635.0 - '@aws-sdk/credential-provider-node': 3.645.0(@aws-sdk/client-sso-oidc@3.645.0(@aws-sdk/client-sts@3.645.0))(@aws-sdk/client-sts@3.645.0) + '@aws-sdk/credential-provider-node': 3.645.0(@aws-sdk/client-sso-oidc@3.645.0(@aws-sdk/client-sts@3.645.0))(@aws-sdk/client-sts@3.621.0) '@aws-sdk/middleware-host-header': 3.620.0 '@aws-sdk/middleware-logger': 3.609.0 '@aws-sdk/middleware-recursion-detection': 3.620.0 @@ -14935,24 +15134,6 @@ snapshots: - '@aws-sdk/client-sso-oidc' - aws-crt - '@aws-sdk/credential-provider-ini@3.645.0(@aws-sdk/client-sso-oidc@3.645.0(@aws-sdk/client-sts@3.645.0))(@aws-sdk/client-sts@3.645.0)': - dependencies: - '@aws-sdk/client-sts': 3.645.0 - '@aws-sdk/credential-provider-env': 3.620.1 - '@aws-sdk/credential-provider-http': 3.635.0 - '@aws-sdk/credential-provider-process': 3.620.1 - '@aws-sdk/credential-provider-sso': 3.645.0(@aws-sdk/client-sso-oidc@3.645.0(@aws-sdk/client-sts@3.645.0)) - '@aws-sdk/credential-provider-web-identity': 3.621.0(@aws-sdk/client-sts@3.645.0) - '@aws-sdk/types': 3.609.0 - '@smithy/credential-provider-imds': 3.2.0 - '@smithy/property-provider': 3.1.3 - '@smithy/shared-ini-file-loader': 3.1.4 - '@smithy/types': 3.3.0 - tslib: 2.6.3 - transitivePeerDependencies: - - '@aws-sdk/client-sso-oidc' - - aws-crt - '@aws-sdk/credential-provider-node@3.621.0(@aws-sdk/client-sso-oidc@3.621.0(@aws-sdk/client-sts@3.621.0))(@aws-sdk/client-sts@3.621.0)': dependencies: '@aws-sdk/credential-provider-env': 3.620.1 @@ -15011,25 +15192,6 @@ snapshots: - '@aws-sdk/client-sts' - aws-crt - '@aws-sdk/credential-provider-node@3.645.0(@aws-sdk/client-sso-oidc@3.645.0(@aws-sdk/client-sts@3.645.0))(@aws-sdk/client-sts@3.645.0)': - dependencies: - '@aws-sdk/credential-provider-env': 3.620.1 - '@aws-sdk/credential-provider-http': 3.635.0 - '@aws-sdk/credential-provider-ini': 3.645.0(@aws-sdk/client-sso-oidc@3.645.0(@aws-sdk/client-sts@3.645.0))(@aws-sdk/client-sts@3.645.0) - '@aws-sdk/credential-provider-process': 3.620.1 - '@aws-sdk/credential-provider-sso': 3.645.0(@aws-sdk/client-sso-oidc@3.645.0(@aws-sdk/client-sts@3.645.0)) - '@aws-sdk/credential-provider-web-identity': 3.621.0(@aws-sdk/client-sts@3.645.0) - '@aws-sdk/types': 3.609.0 - '@smithy/credential-provider-imds': 3.2.0 - '@smithy/property-provider': 3.1.3 - '@smithy/shared-ini-file-loader': 3.1.4 - '@smithy/types': 3.3.0 - tslib: 2.6.3 - transitivePeerDependencies: - - '@aws-sdk/client-sso-oidc' - - '@aws-sdk/client-sts' - - aws-crt - '@aws-sdk/credential-provider-process@3.620.1': dependencies: '@aws-sdk/types': 3.609.0 @@ -15086,14 +15248,6 @@ snapshots: '@smithy/types': 3.3.0 tslib: 2.6.3 - '@aws-sdk/credential-provider-web-identity@3.621.0(@aws-sdk/client-sts@3.645.0)': - dependencies: - '@aws-sdk/client-sts': 3.645.0 - '@aws-sdk/types': 3.609.0 - '@smithy/property-provider': 3.1.3 - '@smithy/types': 3.3.0 - tslib: 2.6.3 - '@aws-sdk/credential-providers@3.621.0(@aws-sdk/client-sso-oidc@3.645.0(@aws-sdk/client-sts@3.645.0))': dependencies: '@aws-sdk/client-cognito-identity': 3.621.0 @@ -17812,18 +17966,70 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.1 + '@npmcli/config@8.3.4': + dependencies: + '@npmcli/map-workspaces': 3.0.6 + '@npmcli/package-json': 5.2.0 + ci-info: 4.0.0 + ini: 4.1.3 + nopt: 7.2.1 + proc-log: 4.2.0 + semver: 7.6.3 + walk-up-path: 3.0.1 + transitivePeerDependencies: + - bluebird + '@npmcli/fs@1.1.1': dependencies: '@gar/promisify': 1.1.3 semver: 7.6.3 optional: true + '@npmcli/git@5.0.8': + dependencies: + '@npmcli/promise-spawn': 7.0.2 + ini: 4.1.3 + lru-cache: 10.4.3 + npm-pick-manifest: 9.1.0 + proc-log: 4.2.0 + promise-inflight: 1.0.1 + promise-retry: 2.0.1 + semver: 7.6.3 + which: 4.0.0 + transitivePeerDependencies: + - bluebird + + '@npmcli/map-workspaces@3.0.6': + dependencies: + '@npmcli/name-from-folder': 2.0.0 + glob: 10.4.5 + minimatch: 9.0.5 + read-package-json-fast: 3.0.2 + '@npmcli/move-file@1.1.2': dependencies: mkdirp: 1.0.4 rimraf: 3.0.2 optional: true + '@npmcli/name-from-folder@2.0.0': {} + + '@npmcli/package-json@5.2.0': + dependencies: + '@npmcli/git': 5.0.8 + glob: 10.4.5 + hosted-git-info: 7.0.2 + json-parse-even-better-errors: 3.0.2 + normalize-package-data: 6.0.2 + proc-log: 4.2.0 + semver: 7.6.3 + transitivePeerDependencies: + - bluebird + + '@npmcli/promise-spawn@7.0.2': + dependencies: + which: 4.0.0 + '@opentelemetry/api-logs@0.52.1': dependencies: '@opentelemetry/api': 1.9.0 @@ -19979,6 +20185,10 @@ snapshots: '@types/caseless@0.12.5': {} + '@types/concat-stream@2.0.3': + dependencies: + '@types/node': 20.14.14 + '@types/connect@3.4.36': dependencies: '@types/node': 20.14.14 @@ -20096,6 +20306,8 @@ snapshots: '@types/http-errors@2.0.4': {} + '@types/is-empty@1.2.3': {} + '@types/is-hotkey@0.1.10': {} '@types/istanbul-lib-coverage@2.0.6': {} @@ -20232,6 +20444,8 @@ snapshots: '@types/stack-utils@2.0.3': {} + '@types/supports-color@8.1.3': {} + '@types/tough-cookie@4.0.5': {} '@types/unist@2.0.10': {} @@ -20615,6 +20829,8 @@ snapshots: abbrev@1.1.1: optional: true + abbrev@2.0.0: {} + abort-controller@3.0.0: dependencies: event-target-shim: 5.0.1 @@ -21420,6 +21636,8 @@ snapshots: ci-info@3.9.0: {} + ci-info@4.0.0: {} + cipher-base@1.0.4: dependencies: inherits: 2.0.4 @@ -21570,6 +21788,13 @@ snapshots: concat-map@0.0.1: {} + concat-stream@2.0.0: + dependencies: + buffer-from: 1.1.2 + inherits: 2.0.4 + readable-stream: 3.6.2 + typedarray: 0.0.6 + conf@10.2.0: dependencies: ajv: 8.17.1 @@ -22378,8 +22603,7 @@ snapshots: environment@1.1.0: {} - err-code@2.0.3: - optional: true + err-code@2.0.3: {} error-ex@1.3.2: dependencies: @@ -22797,6 +23021,27 @@ snapshots: transitivePeerDependencies: - supports-color + eslint-mdx@3.1.5(eslint@8.57.0): + dependencies: + acorn: 8.12.1 + acorn-jsx: 5.3.2(acorn@8.12.1) + eslint: 8.57.0 + espree: 9.6.1 + estree-util-visit: 2.0.0 + remark-mdx: 3.0.1 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + synckit: 0.9.1 + tslib: 2.6.3 + unified: 11.0.5 + unified-engine: 11.2.1 + unist-util-visit: 5.0.0 + uvu: 0.5.6 + vfile: 6.0.2 + transitivePeerDependencies: + - bluebird + - supports-color + eslint-module-utils@2.8.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-webpack@0.13.9(eslint-plugin-import@2.29.1)(webpack@5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5))))(eslint-plugin-import@2.29.1(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.0))(eslint@8.57.0))(eslint-import-resolver-webpack@0.13.9(eslint-plugin-import@2.29.1)(webpack@5.93.0(@swc/core@1.7.23(@swc/helpers@0.5.5))))(eslint@8.57.0): dependencies: debug: 3.2.7 @@ -22999,6 +23244,21 @@ snapshots: transitivePeerDependencies: - supports-color + eslint-plugin-mdx@3.1.5(eslint@8.57.0): + dependencies: + eslint: 8.57.0 + eslint-mdx: 3.1.5(eslint@8.57.0) + eslint-plugin-markdown: 3.0.1(eslint@8.57.0) + remark-mdx: 3.0.1 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + tslib: 2.6.3 + unified: 11.0.5 + vfile: 6.0.2 + transitivePeerDependencies: + - bluebird + - supports-color + eslint-plugin-module-resolver@1.5.0: {} eslint-plugin-playwright@1.6.2(eslint-plugin-jest@28.8.3(@typescript-eslint/eslint-plugin@7.2.0(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(jest@29.7.0(babel-plugin-macros@3.1.0))(typescript@5.5.4))(eslint@8.57.0): @@ -24101,6 +24361,10 @@ snapshots: dependencies: parse-passwd: 1.0.0 + hosted-git-info@7.0.2: + dependencies: + lru-cache: 10.4.3 + html-encoding-sniffer@3.0.0: dependencies: whatwg-encoding: 2.0.0 @@ -24351,6 +24615,8 @@ snapshots: pkg-dir: 4.2.0 resolve-cwd: 3.0.0 + import-meta-resolve@4.1.0: {} + imurmurhash@0.1.4: {} indent-string@4.0.0: {} @@ -24369,6 +24635,8 @@ snapshots: ini@1.3.8: {} + ini@4.1.3: {} + inline-style-parser@0.1.1: {} inline-style-parser@0.2.3: {} @@ -24463,6 +24731,8 @@ snapshots: is-decimal@2.0.1: {} + is-empty@1.2.0: {} + is-extendable@0.1.1: {} is-extglob@1.0.0: {} @@ -24615,6 +24885,8 @@ snapshots: isexe@2.0.0: {} + isexe@3.1.1: {} + isobject@3.0.1: {} isomorphic-fetch@3.0.0(encoding@0.1.13): @@ -25160,6 +25432,8 @@ snapshots: json-parse-even-better-errors@2.3.1: {} + json-parse-even-better-errors@3.0.2: {} + json-schema-to-typescript@14.0.5: dependencies: '@apidevtools/json-schema-ref-parser': 11.7.0 @@ -25319,6 +25593,8 @@ snapshots: kleur@3.0.3: {} + kleur@4.1.5: {} + klona@2.0.6: {} language-subtag-registry@0.3.23: {} @@ -25344,6 +25620,8 @@ snapshots: lines-and-columns@1.2.4: {} + lines-and-columns@2.0.4: {} + lint-staged@15.2.10: dependencies: chalk: 5.3.0 @@ -25368,6 +25646,13 @@ snapshots: rfdc: 1.4.1 wrap-ansi: 9.0.0 + load-plugin@6.0.3: + dependencies: + '@npmcli/config': 8.3.4 + import-meta-resolve: 4.1.0 + transitivePeerDependencies: + - bluebird + loader-runner@4.3.0: {} loader-utils@2.0.4: @@ -26374,10 +26659,40 @@ snapshots: abbrev: 1.1.1 optional: true + nopt@7.2.1: + dependencies: + abbrev: 2.0.0 + + normalize-package-data@6.0.2: + dependencies: + hosted-git-info: 7.0.2 + semver: 7.6.3 + validate-npm-package-license: 3.0.4 + normalize-path@3.0.0: {} normalize-range@0.1.2: {} + npm-install-checks@6.3.0: + dependencies: + semver: 7.6.3 + + npm-normalize-package-bin@3.0.1: {} + + npm-package-arg@11.0.3: + dependencies: + hosted-git-info: 7.0.2 + proc-log: 4.2.0 + semver: 7.6.3 + validate-npm-package-name: 5.0.1 + + npm-pick-manifest@9.1.0: + dependencies: + npm-install-checks: 6.3.0 + npm-normalize-package-bin: 3.0.1 + npm-package-arg: 11.0.3 + semver: 7.6.3 + npm-run-path@4.0.1: dependencies: path-key: 3.1.1 @@ -26640,6 +26955,14 @@ snapshots: json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 + parse-json@7.1.1: + dependencies: + '@babel/code-frame': 7.24.7 + error-ex: 1.3.2 + json-parse-even-better-errors: 3.0.2 + lines-and-columns: 2.0.4 + type-fest: 3.13.1 + parse-numeric-range@1.3.0: {} parse-passwd@1.0.0: {} @@ -27426,6 +27749,8 @@ snapshots: transitivePeerDependencies: - supports-color + proc-log@4.2.0: {} + process-nextick-args@2.0.1: {} process-warning@2.3.2: {} @@ -27434,14 +27759,12 @@ snapshots: progress@2.0.3: {} - promise-inflight@1.0.1: - optional: true + promise-inflight@1.0.1: {} promise-retry@2.0.1: dependencies: err-code: 2.0.3 retry: 0.12.0 - optional: true prompts@2.4.2: dependencies: @@ -27872,6 +28195,11 @@ snapshots: dependencies: loose-envify: 1.4.0 + read-package-json-fast@3.0.2: + dependencies: + json-parse-even-better-errors: 3.0.2 + npm-normalize-package-bin: 3.0.1 + read-yaml-file@1.1.0: dependencies: graceful-fs: 4.2.11 @@ -28039,6 +28367,12 @@ snapshots: unified: 11.0.5 vfile: 6.0.2 + remark-stringify@11.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-to-markdown: 2.1.0 + unified: 11.0.5 + renderkid@3.0.0: dependencies: css-select: 4.3.0 @@ -28141,8 +28475,7 @@ snapshots: onetime: 7.0.0 signal-exit: 4.1.0 - retry@0.12.0: - optional: true + retry@0.12.0: {} reusify@1.0.4: {} @@ -28185,6 +28518,10 @@ snapshots: rw@1.3.3: {} + sade@1.8.1: + dependencies: + mri: 1.2.0 + safe-array-concat@1.1.2: dependencies: call-bind: 1.0.7 @@ -28561,6 +28898,20 @@ snapshots: cross-spawn: 5.1.0 signal-exit: 3.0.7 + spdx-correct@3.2.0: + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.20 + + spdx-exceptions@2.5.0: {} + + spdx-expression-parse@3.0.1: + dependencies: + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.20 + + spdx-license-ids@3.0.20: {} + split2@3.2.2: dependencies: readable-stream: 3.6.2 @@ -28699,6 +29050,12 @@ snapshots: emoji-regex: 9.2.2 strip-ansi: 7.1.0 + string-width@6.1.0: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 10.3.0 + strip-ansi: 7.1.0 + string-width@7.2.0: dependencies: emoji-regex: 10.3.0 @@ -28851,6 +29208,8 @@ snapshots: dependencies: has-flag: 4.0.0 + supports-color@9.4.0: {} + supports-preserve-symlinks-flag@1.0.0: {} svg-parser@2.0.4: {} @@ -29281,6 +29640,8 @@ snapshots: type-fest@2.19.0: {} + type-fest@3.13.1: {} + type-fest@4.23.0: {} type-is@1.6.18: @@ -29322,6 +29683,8 @@ snapshots: is-typed-array: 1.1.13 possible-typed-array-names: 1.0.0 + typedarray@0.0.6: {} + typescript@5.5.4: {} ufo@1.5.4: {} @@ -29348,6 +29711,33 @@ snapshots: unicorn-magic@0.1.0: {} + unified-engine@11.2.1: + dependencies: + '@types/concat-stream': 2.0.3 + '@types/debug': 4.1.12 + '@types/is-empty': 1.2.3 + '@types/node': 20.14.14 + '@types/unist': 3.0.2 + concat-stream: 2.0.0 + debug: 4.3.6 + extend: 3.0.2 + glob: 10.4.5 + ignore: 5.3.1 + is-empty: 1.2.0 + is-plain-obj: 4.1.0 + load-plugin: 6.0.3 + parse-json: 7.1.1 + trough: 2.2.0 + unist-util-inspect: 8.1.0 + vfile: 6.0.2 + vfile-message: 4.0.2 + vfile-reporter: 8.1.1 + vfile-statistics: 3.0.0 + yaml: 2.5.1 + transitivePeerDependencies: + - bluebird + - supports-color + unified@11.0.5: dependencies: '@types/unist': 3.0.2 @@ -29372,6 +29762,10 @@ snapshots: dependencies: crypto-random-string: 4.0.0 + unist-util-inspect@8.1.0: + dependencies: + '@types/unist': 3.0.2 + unist-util-is@6.0.0: dependencies: '@types/unist': 3.0.2 @@ -29546,6 +29940,13 @@ snapshots: uuid@9.0.1: {} + uvu@0.5.6: + dependencies: + dequal: 2.0.3 + diff: 5.2.0 + kleur: 4.1.5 + sade: 1.8.1 + v8-compile-cache-lib@3.0.1: {} v8-to-istanbul@9.3.0: @@ -29554,6 +29955,13 @@ snapshots: '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 2.0.0 + validate-npm-package-license@3.0.4: + dependencies: + spdx-correct: 3.2.0 + spdx-expression-parse: 3.0.1 + + validate-npm-package-name@5.0.1: {} + value-equal@1.0.1: {} vary@1.1.2: {} @@ -29870,6 +30278,27 @@ snapshots: '@types/unist': 3.0.2 unist-util-stringify-position: 4.0.0 + vfile-reporter@8.1.1: + dependencies: + '@types/supports-color': 8.1.3 + string-width: 6.1.0 + supports-color: 9.4.0 + unist-util-stringify-position: 4.0.0 + vfile: 6.0.2 + vfile-message: 4.0.2 + vfile-sort: 4.0.0 + vfile-statistics: 3.0.0 + + vfile-sort@4.0.0: + dependencies: + vfile: 6.0.2 + vfile-message: 4.0.2 + + vfile-statistics@3.0.0: + dependencies: + vfile: 6.0.2 + vfile-message: 4.0.2 + vfile@6.0.2: dependencies: '@types/unist': 3.0.2 @@ -30521,6 +30950,10 @@ snapshots: dependencies: isexe: 2.0.0 + which@4.0.0: + dependencies: + isexe: 3.1.1 + wide-align@1.1.5: dependencies: string-width: 4.2.3 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 8eab6582d..0ff1f46f6 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -101,6 +101,7 @@ catalog: eslint-plugin-json: ^3.1.0 eslint-plugin-jsx-a11y: ^6.10.0 eslint-plugin-markdown: ^3.0.1 + eslint-plugin-mdx: ^3.1.5 eslint-plugin-module-resolver: ^1.5.0 eslint-plugin-playwright: ^1.6.2 eslint-plugin-prettier: ^5.2.1