From c25e20de6f9b2a7842b4e291668fa9af3d103a68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lui=CC=81s=20Arteiro?= Date: Thu, 25 Jul 2024 00:48:12 +0100 Subject: [PATCH 01/14] feat: Adding config with contentlayer and composite-plugins. --- .gitignore | 5 +- contentlayer.config.js | 23 + next.config.js | 6 +- package.json | 8 +- pnpm-lock.yaml | 1486 +++++++++++++++++++++++++++++++++++++++- scripts/link-check.mjs | 38 + tsconfig.json | 5 +- tutorial.md | 25 +- 8 files changed, 1534 insertions(+), 62 deletions(-) create mode 100644 contentlayer.config.js create mode 100644 scripts/link-check.mjs diff --git a/.gitignore b/.gitignore index b60e595..66f360e 100644 --- a/.gitignore +++ b/.gitignore @@ -139,4 +139,7 @@ dist /playwright-report/ /blob-report/ /playwright/.cache/ -/.swc \ No newline at end of file +/.swc + +# Content layer +.contentlayer \ No newline at end of file diff --git a/contentlayer.config.js b/contentlayer.config.js new file mode 100644 index 0000000..4cac9d9 --- /dev/null +++ b/contentlayer.config.js @@ -0,0 +1,23 @@ +import { defineDocumentType, makeSource } from 'contentlayer/source-files' + +const computedFields = { + slug: { + type: 'string', + resolve: (doc) => doc._raw.sourceFileName.replace(/\.md$/, ''), + }, +} + +export const Page = defineDocumentType(() => ({ + name: 'Page', + filePathPattern: `**/*.mdx`, + computedFields, +})) + +export const MetaJson = defineDocumentType(() => ({ + name: 'MetaJson', + filePathPattern: `**/_meta.json`, +})) +export default makeSource({ + contentDirPath: 'src/pages', + documentTypes: [Page, MetaJson], +}) diff --git a/next.config.js b/next.config.js index bbdf952..d80f489 100644 --- a/next.config.js +++ b/next.config.js @@ -1,7 +1,11 @@ + +const withPlugins = require('next-compose-plugins'); const withNextra = require("nextra")({ theme: "./theme/src/index.tsx", themeConfig: "./theme.config.tsx", defaultShowCopyCode: true }); +const { withContentlayer } = require('next-contentlayer') + -module.exports = withNextra(); +module.exports = withPlugins([withNextra, withContentlayer]); diff --git a/package.json b/package.json index c81de79..fdccf8e 100644 --- a/package.json +++ b/package.json @@ -9,11 +9,14 @@ "e2e:test": "npx playwright test", "e2e:test:show-report": "npx monocart show-report ./e2e-test-results/monocart-report.html", "test": "jest --runInBand", - "types:check": "tsc --noEmit" + "types:check": "tsc --noEmit", + "link:check": "pnpm run contentlayer && node ./scripts/link-check.mjs", + "contentlayer": "contentlayer build --verbose" }, "dependencies": { "next": "^14.2.4", "next-auth": "5.0.0-beta.19", + "next-compose-plugins": "^2.2.1", "nextra": "^2.13.4", "nextra-theme-docs": "^2.13.4", "react": "^18.3.1", @@ -26,11 +29,14 @@ "@types/jest": "^29.5.12", "@types/node": "20.14.5", "autoprefixer": "^10.4.19", + "contentlayer": "^0.3.4", "dotenv": "^16.4.5", "fast-glob": "^3.3.2", "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", + "markdown-link-check": "^3.12.2", "monocart-reporter": "^2.5.0", + "next-contentlayer": "^0.3.4", "open-cli": "^8.0.0", "postcss": "^8.4.31", "tailwindcss": "^3.3.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1e2df80..4616a24 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,16 +10,19 @@ importers: dependencies: next: specifier: ^14.2.4 - version: 14.2.4(@babel/core@7.24.7)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 14.2.4(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next-auth: specifier: 5.0.0-beta.19 - version: 5.0.0-beta.19(next@14.2.4(@babel/core@7.24.7)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(nodemailer@6.9.14)(react@18.3.1) + version: 5.0.0-beta.19(next@14.2.4(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(nodemailer@6.9.14)(react@18.3.1) + next-compose-plugins: + specifier: ^2.2.1 + version: 2.2.1 nextra: specifier: ^2.13.4 - version: 2.13.4(next@14.2.4(@babel/core@7.24.7)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 2.13.4(next@14.2.4(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) nextra-theme-docs: specifier: ^2.13.4 - version: 2.13.4(next@14.2.4(@babel/core@7.24.7)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(nextra@2.13.4(next@14.2.4(@babel/core@7.24.7)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 2.13.4(next@14.2.4(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(nextra@2.13.4(next@14.2.4(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: specifier: ^18.3.1 version: 18.3.1 @@ -45,6 +48,9 @@ importers: autoprefixer: specifier: ^10.4.19 version: 10.4.19(postcss@8.4.38) + contentlayer: + specifier: ^0.3.4 + version: 0.3.4(esbuild@0.21.5) dotenv: specifier: ^16.4.5 version: 16.4.5 @@ -57,9 +63,15 @@ importers: jest-environment-jsdom: specifier: ^29.7.0 version: 29.7.0 + markdown-link-check: + specifier: ^3.12.2 + version: 3.12.2 monocart-reporter: specifier: ^2.5.0 version: 2.5.2 + next-contentlayer: + specifier: ^0.3.4 + version: 0.3.4(contentlayer@0.3.4(esbuild@0.21.5))(esbuild@0.21.5)(next@14.2.4(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) open-cli: specifier: ^8.0.0 version: 8.0.0 @@ -110,10 +122,10 @@ importers: version: 6.3.4 next-seo: specifier: ^6.0.0 - version: 6.5.0(next@13.5.6(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 6.5.0(next@13.5.6(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next-themes: specifier: ^0.2.1 - version: 0.2.1(next@13.5.6(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 0.2.1(next@13.5.6(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) scroll-into-view-if-needed: specifier: ^3.1.0 version: 3.1.0 @@ -150,7 +162,7 @@ importers: version: 23.2.0 next: specifier: ^13.5.6 - version: 13.5.6(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 13.5.6(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) nextra: specifier: workspace:* version: link:.. @@ -398,10 +410,78 @@ packages: '@braintree/sanitize-url@6.0.4': resolution: {integrity: sha512-s3jaWicZd0pkP0jf5ysyHUI/RE7MHos6qlToFcGWXVp+ykHOy77OUMrfbgJ9it2C5bow7OIQwYYaHjk9XlBQ2A==} + '@contentlayer/cli@0.3.4': + resolution: {integrity: sha512-vNDwgLuhYNu+m70NZ3XK9kexKNguuxPXg7Yvzj3B34cEilQjjzSrcTY/i+AIQm9V7uT5GGshx9ukzPf+SmoszQ==} + + '@contentlayer/client@0.3.4': + resolution: {integrity: sha512-QSlLyc3y4PtdC5lFw0L4wTZUH8BQnv2nk37hNCsPAqGf+dRO7TLAzdc+2/mVIRgK+vSH+pSOzjLsQpFxxXRTZA==} + + '@contentlayer/core@0.3.4': + resolution: {integrity: sha512-o68oBLwfYZ+2vtgfk1lgHxOl3LoxvRNiUfeQ8IWFWy/L4wnIkKIqLZX01zlRE5IzYM+ZMMN5V0cKQlO7DsyR9g==} + peerDependencies: + esbuild: 0.17.x || 0.18.x + markdown-wasm: 1.x + peerDependenciesMeta: + esbuild: + optional: true + markdown-wasm: + optional: true + + '@contentlayer/source-files@0.3.4': + resolution: {integrity: sha512-4njyn0OFPu7WY4tAjMxiJgWOKeiHuBOGdQ36EYE03iij/pPPRbiWbL+cmLccYXUFEW58mDwpqROZZm6pnxjRDQ==} + + '@contentlayer/source-remote-files@0.3.4': + resolution: {integrity: sha512-cyiv4sNUySZvR0uAKlM+kSAELzNd2h2QT1R2e41dRKbwOUVxeLfmGiLugr0aVac6Q3xYcD99dbHyR1xWPV+w9w==} + + '@contentlayer/utils@0.3.4': + resolution: {integrity: sha512-ZWWOhbUWYQ2QHoLIlcUnEo7X4ZbwcyFPuzVQWWMkK43BxCveyQtZwBIzfyx54sqVzi0GUmKP8bHzsLQT0QxaLQ==} + peerDependencies: + '@effect-ts/otel-node': '*' + peerDependenciesMeta: + '@effect-ts/otel-node': + optional: true + '@cspotcode/source-map-support@0.8.1': resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} + '@effect-ts/core@0.60.5': + resolution: {integrity: sha512-qi1WrtJA90XLMnj2hnUszW9Sx4dXP03ZJtCc5DiUBIOhF4Vw7plfb65/bdBySPoC9s7zy995TdUX1XBSxUkl5w==} + + '@effect-ts/otel-exporter-trace-otlp-grpc@0.15.1': + resolution: {integrity: sha512-47gAg0O2pW5Jlo86jfzjdkwL5a7Bzb+Kj5WTmdu4CxYRfWn9ytKjuuYIfsNDW8neuhdKzn+P5wCddgEh0glYyQ==} + peerDependencies: + '@effect-ts/core': ^0.60.2 + '@opentelemetry/api': ^1.4.0 + '@opentelemetry/core': ^1.13.0 + '@opentelemetry/exporter-trace-otlp-grpc': ^0.39.0 + '@opentelemetry/sdk-trace-base': ^1.13.0 + + '@effect-ts/otel-sdk-trace-node@0.15.1': + resolution: {integrity: sha512-a2sF0ylmn8xOJs8fNeT/spJ1gUcsksAJCALxo9WOfuTCMtTwMVtVhCKEPEeQoL7wFqU+JgPkVdP91+FJ/Rkeow==} + peerDependencies: + '@effect-ts/core': ^0.60.2 + '@opentelemetry/api': ^1.4.0 + '@opentelemetry/core': ^1.13.0 + '@opentelemetry/sdk-trace-base': ^1.13.0 + '@opentelemetry/sdk-trace-node': ^1.13.0 + + '@effect-ts/otel@0.15.1': + resolution: {integrity: sha512-AmZJHl7t0+Peh7Yb2+hqn6r9+rd9/UfeA4AMV9h0YGTdOyouyFfD3wzWlxnAUzAQ4Lrod4kC7Noruret4EpqpA==} + peerDependencies: + '@effect-ts/core': ^0.60.2 + '@opentelemetry/api': ^1.4.0 + '@opentelemetry/core': ^1.13.0 + '@opentelemetry/sdk-trace-base': ^1.13.0 + + '@effect-ts/system@0.57.5': + resolution: {integrity: sha512-/crHGujo0xnuHIYNc1VgP0HGJGFSoSqq88JFXe6FmFyXPpWt8Xu39LyLg7rchsxfXFeEdA9CrIZvLV5eswXV5g==} + + '@esbuild-plugins/node-resolve@0.1.4': + resolution: {integrity: sha512-haFQ0qhxEpqtWWY0kx1Y5oE3sMyO1PcoSiWEPrAw6tm/ZOOLXjSs6Q+v1v9eyuVF0nNt50YEvrcrvENmyoMv5g==} + peerDependencies: + esbuild: '*' + '@esbuild/aix-ppc64@0.21.5': resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} engines: {node: '>=12'} @@ -540,6 +620,18 @@ packages: cpu: [x64] os: [win32] + '@fal-works/esbuild-plugin-global-externals@2.1.2': + resolution: {integrity: sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ==} + + '@grpc/grpc-js@1.11.1': + resolution: {integrity: sha512-gyt/WayZrVPH2w/UTLansS7F9Nwld472JxxaETamrM8HNlsa+jSLNyKAZmhxI2Me4c3mQHFiS1wWHDY1g1Kthw==} + engines: {node: '>=12.10.0'} + + '@grpc/proto-loader@0.7.13': + resolution: {integrity: sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==} + engines: {node: '>=6'} + hasBin: true + '@headlessui/react@1.7.19': resolution: {integrity: sha512-Ll+8q3OlMJfJbAKM/+/Y2q6PPYbryqNTXDbryx7SXLIDamkF6iQFbriYHga0dY44PvDhvvBWCx1Xj4U5+G4hOw==} engines: {node: '>=10'} @@ -646,6 +738,18 @@ packages: '@jridgewell/trace-mapping@0.3.9': resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + '@js-sdsl/ordered-map@4.4.2': + resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==} + + '@js-temporal/polyfill@0.4.4': + resolution: {integrity: sha512-2X6bvghJ/JAoZO52lbgyAPFj8uCflhTo2g7nkFzEQdXd/D8rEeD4HtmTEpmtGCva260fcd66YNXBOYdnmHqSOg==} + engines: {node: '>=12'} + + '@mdx-js/esbuild@2.3.0': + resolution: {integrity: sha512-r/vsqsM0E+U4Wr0DK+0EfmABE/eg+8ITW4DjvYdh3ve/tK2safaqHArNnaqbOk1DjYGrhxtoXoGaM3BY8fGBTA==} + peerDependencies: + esbuild: '>=0.11.0' + '@mdx-js/mdx@2.3.0': resolution: {integrity: sha512-jLuwRlz8DQfQNiUCJR50Y09CGPq3fLtmtUQfVrj79E0JWu3dvsVcxVIcfhR5h0iXu+/z++zDrYeiJqifRynJkA==} @@ -850,6 +954,119 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@opentelemetry/api-logs@0.39.1': + resolution: {integrity: sha512-9BJ8lMcOzEN0lu+Qji801y707oFO4xT3db6cosPvl+k7ItUHKN5ofWqtSbM9gbt1H4JJ/4/2TVrqI9Rq7hNv6Q==} + engines: {node: '>=14'} + + '@opentelemetry/api@1.9.0': + resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} + engines: {node: '>=8.0.0'} + + '@opentelemetry/context-async-hooks@1.25.1': + resolution: {integrity: sha512-UW/ge9zjvAEmRWVapOP0qyCvPulWU6cQxGxDbWEFfGOj1VBBZAuOqTo3X6yWmDTD3Xe15ysCZChHncr2xFMIfQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/core@1.13.0': + resolution: {integrity: sha512-2dBX3Sj99H96uwJKvc2w9NOiNgbvAO6mOFJFramNkKfS9O4Um+VWgpnlAazoYjT6kUJ1MP70KQ5ngD4ed+4NUw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.5.0' + + '@opentelemetry/core@1.25.1': + resolution: {integrity: sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/exporter-trace-otlp-grpc@0.39.1': + resolution: {integrity: sha512-l5RhLKx6U+yuLhMrtgavTDthX50E1mZM3/SSySC7OPZiArFHV/b/9x9jxAzrOgIQUDxyj4N0V9aLKSA2t7Qzxg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + + '@opentelemetry/otlp-exporter-base@0.39.1': + resolution: {integrity: sha512-Pv5X8fbi6jD/RJBePyn7MnCSuE6MbPB6dl+7YYBWJ5RcMGYMwvLXjd4h2jWsPV2TSUg38H/RoSP0aXvQ06Y7iw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + + '@opentelemetry/otlp-grpc-exporter-base@0.39.1': + resolution: {integrity: sha512-u3ErFRQqQFKjjIMuwLWxz/tLPYInfmiAmSy//fGSCzCh2ZdJgqQjMOAxBgqFtCF2xFL+OmMhyuC2ThMzceGRWA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + + '@opentelemetry/otlp-transformer@0.39.1': + resolution: {integrity: sha512-0hgVnXXz5efI382B/24NxD4b6Zxlh7nxCdJkxkdmQMbn0yRiwoq/ZT+QG8eUL6JNzsBAV1WJlF5aJNsL8skHvw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.5.0' + + '@opentelemetry/propagator-b3@1.25.1': + resolution: {integrity: sha512-p6HFscpjrv7//kE+7L+3Vn00VEDUJB0n6ZrjkTYHrJ58QZ8B3ajSJhRbCcY6guQ3PDjTbxWklyvIN2ojVbIb1A==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/propagator-jaeger@1.25.1': + resolution: {integrity: sha512-nBprRf0+jlgxks78G/xq72PipVK+4or9Ypntw0gVZYNTCSK8rg5SeaGV19tV920CMqBD/9UIOiFr23Li/Q8tiA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/resources@1.13.0': + resolution: {integrity: sha512-euqjOkiN6xhjE//0vQYGvbStxoD/WWQRhDiO0OTLlnLBO9Yw2Gd/VoSx2H+svsebjzYk5OxLuREBmcdw6rbUNg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.5.0' + + '@opentelemetry/resources@1.25.1': + resolution: {integrity: sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/sdk-logs@0.39.1': + resolution: {integrity: sha512-/gmgKfZ1ZVFporKuwsewqIyvaUIGpv76JZ7lBpHQQPb37IMpaXO6pdqFI4ebHAWfNIm3akMyhmdtzivcgF3lgw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.4.0 <1.5.0' + '@opentelemetry/api-logs': '>=0.38.0' + + '@opentelemetry/sdk-metrics@1.13.0': + resolution: {integrity: sha512-MOjZX6AnSOqLliCcZUrb+DQKjAWXBiGeICGbHAGe5w0BB18PJIeIo995lO5JSaFfHpmUMgJButTPfJJD27W3Vg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.5.0' + + '@opentelemetry/sdk-trace-base@1.13.0': + resolution: {integrity: sha512-moTiQtc0uPR1hQLt6gLDJH9IIkeBhgRb71OKjNHZPE1VF45fHtD6nBDi5J/DkTHTwYP5X3kBJLa3xN7ub6J4eg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.5.0' + + '@opentelemetry/sdk-trace-base@1.25.1': + resolution: {integrity: sha512-C8k4hnEbc5FamuZQ92nTOp8X/diCY56XUTnMiv9UTuJitCzaNNHAVsdm5+HLCdI8SLQsLWIrG38tddMxLVoftw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/sdk-trace-node@1.25.1': + resolution: {integrity: sha512-nMcjFIKxnFqoez4gUmihdBrbpsEnAX/Xj16sGvZm+guceYE0NE00vLhpDVK6f3q8Q4VFI5xG8JjlXKMB/SkTTQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/semantic-conventions@1.13.0': + resolution: {integrity: sha512-LMGqfSZkaMQXqewO0o1wvWr/2fQdCh4a3Sqlxka/UsJCe0cfLulh6x2aqnKLnsrSGiCq5rSCwvINd152i0nCqw==} + engines: {node: '>=14'} + + '@opentelemetry/semantic-conventions@1.25.1': + resolution: {integrity: sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==} + engines: {node: '>=14'} + '@panva/hkdf@1.2.0': resolution: {integrity: sha512-97ZQvZJ4gJhi24Io6zI+W7B67I82q1I8i3BSzQ4OyZj1z4OW87/ruF26lrMES58inTKLy2KgVIDcx8PU4AaANQ==} @@ -865,6 +1082,36 @@ packages: '@popperjs/core@2.11.8': resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} + '@protobufjs/aspromise@1.1.2': + resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} + + '@protobufjs/base64@1.1.2': + resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} + + '@protobufjs/codegen@2.0.4': + resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} + + '@protobufjs/eventemitter@1.1.0': + resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} + + '@protobufjs/fetch@1.1.0': + resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} + + '@protobufjs/float@1.0.2': + resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} + + '@protobufjs/inquire@1.1.0': + resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} + + '@protobufjs/path@1.1.2': + resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} + + '@protobufjs/pool@1.1.0': + resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} + + '@protobufjs/utf8@1.1.0': + resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} + '@rollup/rollup-android-arm-eabi@4.18.0': resolution: {integrity: sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==} cpu: [arm] @@ -1043,6 +1290,9 @@ packages: resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} engines: {node: '>= 10'} + '@tootallnate/quickjs-emscripten@0.23.0': + resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} + '@ts-morph/common@0.23.0': resolution: {integrity: sha512-m7Lllj9n/S6sOkCkRftpM7L24uvmfXQFedlW/4hENcuJH1HHm9u5EgxZb9uVjQSCGrbBWBkOGgcTxNg36r6ywA==} @@ -1154,6 +1404,9 @@ packages: '@types/node@20.14.5': resolution: {integrity: sha512-aoRR+fJkZT2l0aGOJhuA8frnCSoNX6W7U2mpNq63+BxBIj5BQFt8rHy627kijCmm63ijdSdwvGgpUsU6MBsZZA==} + '@types/parse5@6.0.3': + resolution: {integrity: sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==} + '@types/prop-types@15.7.12': resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} @@ -1163,6 +1416,9 @@ packages: '@types/react@18.3.3': resolution: {integrity: sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==} + '@types/resolve@1.20.6': + resolution: {integrity: sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ==} + '@types/stack-utils@2.0.3': resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} @@ -1304,6 +1560,9 @@ packages: resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} engines: {node: '>= 0.4'} + array-timsort@1.0.3: + resolution: {integrity: sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==} + array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} @@ -1311,10 +1570,17 @@ packages: assertion-error@1.1.0: resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + ast-types@0.13.4: + resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} + engines: {node: '>=4'} + astring@1.8.6: resolution: {integrity: sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==} hasBin: true + async@3.2.5: + resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} + asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} @@ -1360,6 +1626,10 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + basic-ftp@5.0.5: + resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==} + engines: {node: '>=10.0.0'} + bidi-js@1.0.3: resolution: {integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==} @@ -1367,6 +1637,9 @@ packages: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} @@ -1418,6 +1691,9 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} + camel-case@4.1.2: + resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} + camelcase-css@2.0.1: resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} engines: {node: '>= 6'} @@ -1456,6 +1732,10 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} + chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + char-regex@1.0.2: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} @@ -1475,6 +1755,13 @@ packages: check-error@1.0.3: resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + cheerio-select@2.1.0: + resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} + + cheerio@1.0.0-rc.12: + resolution: {integrity: sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==} + engines: {node: '>= 6'} + chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} @@ -1489,6 +1776,11 @@ packages: client-only@0.0.1: resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + clipanion@3.2.1: + resolution: {integrity: sha512-dYFdjLb7y1ajfxQopN05mylEpK9ZX0sO1/RfMXdfmwjlIsPkbh4p7A682x++zFPLDCo1x3p82dtljHf5cW2LKA==} + peerDependencies: + typanion: '*' + clipboardy@1.2.2: resolution: {integrity: sha512-16KrBOV7bHmHdxcQiCvfUFYVFyEah4FI8vYT1Fr7CGSA4G+xBWMEfUEQJS1hxeHGtI9ju1Bzs9uXSbj5HZKArw==} engines: {node: '>=4'} @@ -1531,6 +1823,10 @@ packages: comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + commander@4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} @@ -1543,6 +1839,10 @@ packages: resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} engines: {node: '>= 12'} + comment-json@4.2.4: + resolution: {integrity: sha512-E5AjpSW+O+N5T2GsOQMHLLsJvrYw6G/AFt9GvU6NguEAfzKShh7hRiLtVo6S9KbRpFMGqE5ojo0/hE+sdteWvQ==} + engines: {node: '>= 6'} + compute-scroll-into-view@3.1.0: resolution: {integrity: sha512-rj8l8pD4bJ1nx+dAkMhV1xB5RuZEyVysfxJqB1pRchh1KVvwOv9b7CGB8ZfjTImVv2oF+sYMUkMZq6Na5Ftmbg==} @@ -1568,6 +1868,11 @@ packages: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} + contentlayer@0.3.4: + resolution: {integrity: sha512-FYDdTUFaN4yqep0waswrhcXjmMJnPD5iXDTtxcUCGdklfuIrXM2xLx51xl748cHmGA6IsC+27YZFxU6Ym13QIA==} + engines: {node: '>=14.18'} + hasBin: true + convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} @@ -1579,6 +1884,9 @@ packages: resolution: {integrity: sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw==} engines: {node: '>= 0.8'} + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + cose-base@1.0.3: resolution: {integrity: sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==} @@ -1601,10 +1909,17 @@ packages: resolution: {integrity: sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==} engines: {node: '>=12'} + css-select@5.1.0: + resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + css-tree@2.3.1: resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + css-what@6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + css.escape@1.5.1: resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} @@ -1781,6 +2096,14 @@ packages: dagre-d3-es@7.0.10: resolution: {integrity: sha512-qTCQmEhcynucuaZgY5/+ti3X/rnszKZhEQH/ZdWdtP1tA/y3VoHJzcVrO9pjjJCNpigfscAtoUB5ONcd2wNn0A==} + data-uri-to-buffer@4.0.1: + resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} + engines: {node: '>= 12'} + + data-uri-to-buffer@6.0.2: + resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} + engines: {node: '>= 14'} + data-urls@3.0.2: resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} engines: {node: '>=12'} @@ -1854,6 +2177,10 @@ packages: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} + degenerator@5.0.1: + resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} + engines: {node: '>= 14'} + delaunator@5.0.1: resolution: {integrity: sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==} @@ -1924,14 +2251,27 @@ packages: dom-accessibility-api@0.6.3: resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} + dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + domexception@4.0.0: resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==} engines: {node: '>=12'} deprecated: Use your platform's native DOMException instead + domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + dompurify@3.1.5: resolution: {integrity: sha512-lwG+n5h8QNpxtyrJW/gJWckL+1/DQiYMX8f7t8Z2AZTPw1esVrqjI63i7Zc2Gz0aKzLVMYC1V1PL/ky+aY/NgA==} + domutils@3.1.0: + resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} + dotenv@16.4.5: resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} engines: {node: '>=12'} @@ -2003,6 +2343,10 @@ packages: resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} engines: {node: '>=8'} + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + escape-string-regexp@5.0.0: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} @@ -2027,6 +2371,9 @@ packages: estree-util-build-jsx@2.2.2: resolution: {integrity: sha512-m56vOXcOBuaF+Igpb9OPAy7f9w9OIkb5yhjsZuaPm7HoGi4oTOQi0h2+yZ+AtKklYFZ+rPC4n0wYCJCEU1ONqg==} + estree-util-is-identifier-name@1.1.0: + resolution: {integrity: sha512-OVJZ3fGGt9By77Ix9NhaRbzfbDV/2rx9EP7YIDJTmsZSEc5kYn2vWcNccYyahJL2uAQZK2a5Or2i0wtIKTPoRQ==} + estree-util-is-identifier-name@2.1.0: resolution: {integrity: sha512-bEN9VHRyXAUOjkKVQVvArFym08BTWB0aJPppZZr0UNyAqWsLaVfAqP7hbaTJjzHifmB5ebnR8Wm7r7yGN/HonQ==} @@ -2080,9 +2427,16 @@ packages: fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + fault@2.0.1: + resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==} + fb-watchman@2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + fetch-blob@3.2.0: + resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} + engines: {node: ^12.20 || >= 14.13} + file-type@18.7.0: resolution: {integrity: sha512-ihHtXRzXEziMrQ56VSgU7wkxh55iNchFkosu7Y9/S+tXHdKyrGjVK0ujbqNnsxzea+78MaLhN6PGmfYSAv1ACw==} engines: {node: '>=14.16'} @@ -2112,6 +2466,14 @@ 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'} + fraction.js@4.3.7: resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} @@ -2123,6 +2485,9 @@ packages: resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} engines: {node: '>=14.14'} + fs-monkey@1.0.6: + resolution: {integrity: sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==} + fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} @@ -2173,6 +2538,10 @@ packages: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} + get-uri@6.0.3: + resolution: {integrity: sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==} + engines: {node: '>= 14'} + git-up@7.0.0: resolution: {integrity: sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==} @@ -2239,6 +2608,10 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} + has-own-prop@2.0.0: + resolution: {integrity: sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==} + engines: {node: '>=8'} + has-property-descriptors@1.0.2: resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} @@ -2258,6 +2631,9 @@ packages: resolution: {integrity: sha512-FwO1BUVWkyHasWDW4S8o0ssQXjvyghLV2rfVhnN36b2bbcj45eGiuzdn9XOvOpjV3TKQD7Gm2BWNXdE9V4KKYg==} engines: {node: '>=12'} + hash-wasm@4.11.0: + resolution: {integrity: sha512-HVusNXlVqHe0fzIzdQOGolnFN6mX/fqcrSAOcTBXdvzrXVHwTz11vXeKRmkR5gTuwVpvHZEIyKoePDvuAR+XwQ==} + hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} @@ -2271,21 +2647,36 @@ packages: hast-util-from-html@2.0.1: resolution: {integrity: sha512-RXQBLMl9kjKVNkJTIO6bZyb2n+cUH8LFaSSzo82jiLT6Tfc+Pt7VQCS+/h3YwG4jaNE2TA2sdJisGWR+aJrp0g==} + hast-util-from-parse5@7.1.2: + resolution: {integrity: sha512-Nz7FfPBuljzsN3tCQ4kCBKqdNhQE2l0Tn+X1ubgKBPRoiDIu1mL08Cfw4k7q71+Duyaw7DXDN+VTAp4Vh3oCOw==} + hast-util-from-parse5@8.0.1: resolution: {integrity: sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==} hast-util-is-element@3.0.0: resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} + hast-util-parse-selector@3.1.1: + resolution: {integrity: sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==} + hast-util-parse-selector@4.0.0: resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} + hast-util-raw@7.2.3: + resolution: {integrity: sha512-RujVQfVsOrxzPOPSzZFiwofMArbQke6DJjnFfceiEbFh7S05CbPt0cYN+A5YeD3pso0JQk6O1aHBnx9+Pm2uqg==} + hast-util-raw@9.0.4: resolution: {integrity: sha512-LHE65TD2YiNsHD3YuXcKPHXPLuYh/gjp12mOfU8jxSrm1f/yJpsb0F/KKljS6U9LJoP0Ux+tCe8iJ2AsPzTdgA==} hast-util-to-estree@2.3.3: resolution: {integrity: sha512-ihhPIUPxN0v0w6M5+IiAZZrn0LH2uZomeWwhn7uP7avZC6TE7lIiEh2yBMPr5+zi1aUCXq6VoYRgs2Bw9xmycQ==} + hast-util-to-html@8.0.4: + resolution: {integrity: sha512-4tpQTUOr9BMjtYyNlt0P50mH7xj0Ks2xpo8M943Vykljf99HW6EzulIoJP1N3eKOSScEHzyzi9dm7/cn0RfGwA==} + + hast-util-to-parse5@7.1.0: + resolution: {integrity: sha512-YNRgAJkH2Jky5ySkIqFXTQiaqcAtJyVE+D5lkN6CdtOqrnkLfGYYrEcKuHOJZlp+MwjSwuD3fZuawI+sic/RBw==} + hast-util-to-parse5@8.0.0: resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==} @@ -2295,6 +2686,9 @@ packages: hast-util-whitespace@2.0.1: resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==} + hastscript@7.2.0: + resolution: {integrity: sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==} + hastscript@8.0.0: resolution: {integrity: sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==} @@ -2309,9 +2703,18 @@ packages: html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + html-link-extractor@1.0.5: + resolution: {integrity: sha512-ADd49pudM157uWHwHQPUSX4ssMsvR/yHIswOR5CUfBdK9g9ZYGMhVSE6KZVHJ6kCkR0gH4htsfzU6zECDNVwyw==} + + html-void-elements@2.0.1: + resolution: {integrity: sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==} + html-void-elements@3.0.0: resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + htmlparser2@8.0.2: + resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} + http-assert@1.5.0: resolution: {integrity: sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==} engines: {node: '>= 0.8'} @@ -2336,6 +2739,10 @@ packages: resolution: {integrity: sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==} engines: {node: '>= 14'} + https-proxy-agent@7.0.5: + resolution: {integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==} + engines: {node: '>= 14'} + human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} @@ -2351,6 +2758,10 @@ packages: resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} engines: {node: '>= 4'} + imagescript@1.3.0: + resolution: {integrity: sha512-lCYzQrWzdnA68K03oMj/BUlBJrVBnslzDOgGFymAp49NmdGEJxGeN7sHh5mCva0nQkq+kkKSuru2zLf1m04+3A==} + engines: {node: '>=14.0.0'} + import-local@3.1.0: resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} engines: {node: '>=8'} @@ -2364,6 +2775,10 @@ packages: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} + inflection@2.0.1: + resolution: {integrity: sha512-wzkZHqpb4eGrOKBl34xy3umnYHx8Si5R1U4fwmdxLo5gdH6mEK8gclckTj/qWqy4Je0bsDYe/qazZYuO7xe3XQ==} + engines: {node: '>=14.0.0'} + inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. @@ -2388,6 +2803,14 @@ packages: intersection-observer@0.12.2: resolution: {integrity: sha512-7m1vEcPCxXYI8HqnL8CKI6siDyD+eIWSwgB3DZA+ZTogxk9I4CDnj4wilt9x/+/QbHI4YG5YZNmC6458/e9Ktg==} + ip-address@9.0.5: + resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} + engines: {node: '>= 12'} + + is-absolute-url@4.0.1: + resolution: {integrity: sha512-/51/TKE88Lmm7Gc4/8btclNXWS+g50wXhYJq8HWIBAGUBnoAdRu1aXeh364t/O7wXDAcTJDP8PNuNKWUDWie+A==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + is-alphabetical@2.0.1: resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} @@ -2506,6 +2929,10 @@ packages: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} + is-relative-url@4.0.0: + resolution: {integrity: sha512-PkzoL1qKAYXNFct5IKdKRH/iBQou/oCC85QhXj6WKtUQBliZ4Yfd3Zk27RHu9KQG8r6zgvAA2AQKC9p+rqTszg==} + engines: {node: '>=14.16'} + is-set@2.0.3: resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} engines: {node: '>= 0.4'} @@ -2552,6 +2979,10 @@ packages: isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + isemail@3.2.0: + resolution: {integrity: sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==} + engines: {node: '>=4.0.0'} + isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -2743,6 +3174,12 @@ packages: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true + jsbi@4.3.0: + resolution: {integrity: sha512-SnZNcinB4RIcnEyZqFPdGPVgrg2AcnykiBy0sHVJQKHYeaLUvi3Exj+iaPpLnFVkDPZIV4U0yvgC9/R4uEAZ9g==} + + jsbn@1.1.0: + resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} + jsdom@20.0.3: resolution: {integrity: sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==} engines: {node: '>=14'} @@ -2893,6 +3330,9 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + link-check@5.3.0: + resolution: {integrity: sha512-Jhb7xueDgQgBaZzkfOtAyOZEZAIMJQIjUpYD2QY/zEB+LKTY1tWiBwZg8QIDbzQdPBOcqzg7oLQDNcES/tQmXg==} + load-tsconfig@0.2.5: resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -2908,15 +3348,24 @@ packages: lodash-es@4.17.21: resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + lodash.get@4.4.2: resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + lodash.sortby@4.7.0: resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + long@5.2.3: + resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==} + longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} @@ -2927,6 +3376,9 @@ packages: loupe@2.3.7: resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + lru-cache@10.2.2: resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==} engines: {node: 14 || >=16.14} @@ -2937,6 +3389,10 @@ packages: lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + lru-cache@7.18.3: + resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} + engines: {node: '>=12'} + lz-string@1.5.0: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true @@ -2965,9 +3421,21 @@ packages: resolution: {integrity: sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==} engines: {node: '>=0.10.0'} + markdown-link-check@3.12.2: + resolution: {integrity: sha512-GWMwSvxuZn+uGGydi5yywnnDZy08SGps4I/63xqvWT7lxtH4cVLnhgZZYtEcPz/QvgPg9vbH2rvWpa29owMtHA==} + hasBin: true + + markdown-link-extractor@4.0.2: + resolution: {integrity: sha512-5cUOu4Vwx1wenJgxaudsJ8xwLUMN7747yDJX3V/L7+gi3e4MsCm7w5nbrDQQy8nEfnl4r5NV3pDXMAjhGXYXAw==} + markdown-table@3.0.3: resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==} + marked@12.0.2: + resolution: {integrity: sha512-qXUm7e/YKFoqFPYPa3Ukg9xlI5cyAtGmyEIzMfW//m6kXwCy2Ps9DYf5ioijFKQ8qyuscrHoY04iJGctu2Kg0Q==} + engines: {node: '>= 18'} + hasBin: true + match-sorter@6.3.4: resolution: {integrity: sha512-jfZW7cWS5y/1xswZo8VBOdudUiSd9nifYRWphc9M5D/ee4w4AoXLgBEdRbgVaxbMuagBPeUC5y2Hi8DO6o9aDg==} @@ -2980,6 +3448,9 @@ packages: mdast-util-from-markdown@1.3.1: resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==} + mdast-util-frontmatter@1.0.1: + resolution: {integrity: sha512-JjA2OjxRqAa8wEG8hloD0uTU0kdn8kbtOWpPP94NBkfAlbxn4S8gCGf/9DwFtEeGPXrDcNXdiDjVaRdUFqYokw==} + mdast-util-gfm-autolink-literal@1.0.3: resolution: {integrity: sha512-My8KJ57FYEy2W2LyNom4n3E7hKTuQk/0SES0u16tjA9Z3oFkF4RrC/hPAPgjlSpezsOvI8ObcXcElo92wn5IGA==} @@ -3031,10 +3502,20 @@ packages: mdn-data@2.0.30: resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + mdx-bundler@9.2.1: + resolution: {integrity: sha512-hWEEip1KU9MCNqeH2rqwzAZ1pdqPPbfkx9OTJjADqGPQz4t9BO85fhI7AP9gVYrpmfArf9/xJZUN0yBErg/G/Q==} + engines: {node: '>=14', npm: '>=6'} + peerDependencies: + esbuild: 0.* + media-typer@0.3.0: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} + memfs@3.5.3: + resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} + engines: {node: '>= 4.0.0'} + meow@12.1.1: resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} engines: {node: '>=16.10'} @@ -3052,6 +3533,9 @@ packages: micromark-core-commonmark@1.1.0: resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==} + micromark-extension-frontmatter@1.1.1: + resolution: {integrity: sha512-m2UH9a7n3W8VAH9JO9y01APpPKmNNNs71P0RbknEmYSaZU5Ghogv38BYO94AI5Xw6OYfxZRdHZZ2nYjs/Z+SZQ==} + micromark-extension-gfm-autolink-literal@1.0.5: resolution: {integrity: sha512-z3wJSLrDf8kRDOh2qBtoTRD53vJ+CWIyo7uyZuxf/JAbNJjiHsOpG1y5wxk8drtv3ETAHutCu6N3thkOOgueWg==} @@ -3235,6 +3719,9 @@ packages: ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} @@ -3246,10 +3733,19 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + needle@3.3.1: + resolution: {integrity: sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==} + engines: {node: '>= 4.4.x'} + hasBin: true + negotiator@0.6.3: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} + netmask@2.0.2: + resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} + engines: {node: '>= 0.4.0'} + next-auth@5.0.0-beta.19: resolution: {integrity: sha512-YHu1igcAxZPh8ZB7GIM93dqgY6gcAzq66FOhQFheAdOx1raxNcApt05nNyNCSB6NegSiyJ4XOPsaNow4pfDmsg==} peerDependencies: @@ -3266,6 +3762,17 @@ packages: nodemailer: optional: true + next-compose-plugins@2.2.1: + resolution: {integrity: sha512-OjJ+fV15FXO2uQXQagLD4C0abYErBjyjE0I0FHpOEIB8upw0hg1ldFP6cqHTJBH1cZqy96OeR3u1dJ+Ez2D4Bg==} + + next-contentlayer@0.3.4: + resolution: {integrity: sha512-UtUCwgAl159KwfhNaOwyiI7Lg6sdioyKMeh+E7jxx0CJ29JuXGxBEYmCI6+72NxFGIFZKx8lvttbbQhbnYWYSw==} + peerDependencies: + contentlayer: 0.3.4 + next: ^12 || ^13 + react: '*' + react-dom: '*' + next-mdx-remote@4.4.1: resolution: {integrity: sha512-1BvyXaIou6xy3XoNF4yaMZUCb6vD2GTAa5ciOa6WoO+gAUTYsb1K4rI/HSC2ogAWLrb/7VSV52skz07vOzmqIQ==} engines: {node: '>=14', npm: '>=7'} @@ -3336,6 +3843,17 @@ packages: react: '>=16.13.1' react-dom: '>=16.13.1' + no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + + node-domexception@1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} + + node-fetch@3.3.2: + resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} @@ -3369,6 +3887,9 @@ packages: resolution: {integrity: sha512-O/j/ROyX0KGLG7O6Ieut/seQ0oiTpHF2tXAcFbpdTLQFiaNtkyTXXocM1fwpaa60dg1qpWj0nHlbNhx6qwuENQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + nwsapi@2.2.10: resolution: {integrity: sha512-QK0sRs7MKv0tKe1+5uZIQk/C8XGza4DAnztJG8iD+TpJIORARrCxczA738awHrZoHeTjSSoHqao2teO0dC/gFQ==} @@ -3413,6 +3934,10 @@ packages: only@0.0.2: resolution: {integrity: sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==} + oo-ascii-tree@1.101.0: + resolution: {integrity: sha512-hNE9Nfvo4HLa9/dAiaiXUm64KHUvgBa7jPftsb8gZdTv1G1wSMMnd9j7SMcRzaMbDEqi+0cfgeBSIcsKy+k0vA==} + engines: {node: '>= 14.17.0'} + open-cli@8.0.0: resolution: {integrity: sha512-3muD3BbfLyzl+aMVSEfn2FfOqGdPYR0O4KNnxXsLEPE2q9OSjBfJAaB6XKbrUzLgymoSMejvb5jpXJfru/Ko2A==} engines: {node: '>=18'} @@ -3446,6 +3971,14 @@ packages: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} + pac-proxy-agent@7.0.2: + resolution: {integrity: sha512-BFi3vZnO9X5Qt6NRz7ZOaPja3ic0PhlsmCRYLOpN11+mWBCR6XJDqW5RF3j8jm4WGGQZtBA+bTfxYzeKW73eHg==} + engines: {node: '>= 14'} + + pac-resolver@7.0.1: + resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==} + engines: {node: '>= 14'} + package-json-from-dist@1.0.0: resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} @@ -3465,6 +3998,12 @@ packages: parse-url@8.1.0: resolution: {integrity: sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==} + parse5-htmlparser2-tree-adapter@7.0.0: + resolution: {integrity: sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==} + + parse5@6.0.1: + resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} + parse5@7.1.2: resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} @@ -3472,6 +4011,9 @@ packages: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} + pascal-case@3.1.2: + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + path-browserify@1.0.1: resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} @@ -3644,6 +4186,10 @@ packages: resolution: {integrity: sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==} engines: {node: '>= 0.8'} + progress@2.0.3: + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} + prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} @@ -3651,9 +4197,20 @@ packages: property-information@6.5.0: resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} + protobufjs@7.3.2: + resolution: {integrity: sha512-RXyHaACeqXeqAKGLDl68rQKbmObRsTIn4TYVUUug1KfS47YWCo5MacGITEryugIgZqORCvJWEk4l449POg5Txg==} + engines: {node: '>=12.0.0'} + protocols@2.0.1: resolution: {integrity: sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==} + proxy-agent@6.4.0: + resolution: {integrity: sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==} + engines: {node: '>= 14'} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + pseudomap@1.0.2: resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} @@ -3733,12 +4290,22 @@ packages: rehype-raw@7.0.0: resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} + rehype-stringify@9.0.4: + resolution: {integrity: sha512-Uk5xu1YKdqobe5XpSskwPvo1XeHUUucWEQSl8hTrXt5selvca1e8K1EZ37E6YoZ4BT8BCqCdVfQW7OfHfthtVQ==} + + remark-frontmatter@4.0.1: + resolution: {integrity: sha512-38fJrB0KnmD3E33a5jZC/5+gGAC2WKNiPw1/fdXJvijBlhA7RCsvJklrYJakS0HedninvaCYW8lQGf9C918GfA==} + remark-gfm@3.0.1: resolution: {integrity: sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==} remark-math@5.1.1: resolution: {integrity: sha512-cE5T2R/xLVtfFI4cCePtiRn+e6jKMtFDR3P8V3qpv8wpKjwvHoBA4eJzvX+nVrnlNy0911bdGmuspCSwetfYHw==} + remark-mdx-frontmatter@1.1.1: + resolution: {integrity: sha512-7teX9DW4tI2WZkXS4DBxneYSY7NHiXl4AKdWDO9LXVweULlCT8OPWsOjLEnMIXViN1j+QcY8mfbq3k0EK6x3uA==} + engines: {node: '>=12.2.0'} + remark-mdx@2.3.0: resolution: {integrity: sha512-g53hMkpM0I98MU266IzDFMrTD980gNF3BJnkyFcmN+dD873mQeD5rdMO3Y2X+x8umQfbSE0PcoEDl7ledSA+2g==} @@ -3754,6 +4321,10 @@ packages: remove-accents@0.5.0: resolution: {integrity: sha512-8g3/Otx1eJaVD12e31UbJj1YzdtVvzH85HV7t+9MJYk/u3XmkOUJ5Ys9wQrf9PCPK8+xn4ymzqYCiZl6QWKn+A==} + repeat-string@1.6.1: + resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} + engines: {node: '>=0.10'} + require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -3819,6 +4390,9 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + sax@1.4.1: + resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} + saxes@6.0.0: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} @@ -3904,6 +4478,18 @@ packages: resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} engines: {node: '>=14.16'} + smart-buffer@4.2.0: + resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} + engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + + socks-proxy-agent@8.0.4: + resolution: {integrity: sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==} + engines: {node: '>= 14'} + + socks@2.8.3: + resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==} + engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + sort-keys@5.0.0: resolution: {integrity: sha512-Pdz01AvCAottHTPQGzndktFNdbRA75BgOfeT1hH+AMnJFv8lynkPi42rfeEhpx1saTEI3YNMWxfqu0sFD1G8pw==} engines: {node: '>=12'} @@ -3915,6 +4501,9 @@ packages: source-map-support@0.5.13: resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} @@ -3936,6 +4525,9 @@ packages: sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + sprintf-js@1.1.3: + resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} + stack-utils@2.0.6: resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} engines: {node: '>=10'} @@ -4127,6 +4719,9 @@ packages: resolution: {integrity: sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==} engines: {node: '>=14.16'} + toml@3.0.0: + resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} + tough-cookie@4.1.4: resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} engines: {node: '>=6'} @@ -4176,6 +4771,9 @@ packages: '@swc/wasm': optional: true + ts-pattern@4.3.0: + resolution: {integrity: sha512-pefrkcd4lmIVR0LA49Imjf9DYLK8vtWhqBPA3Ya1ir8xCW0O2yjL9dsCVvI7pCodLC5q7smNpEtDR2yVulQxOg==} + tslib@2.6.3: resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} @@ -4205,6 +4803,9 @@ packages: turbogrid@3.2.0: resolution: {integrity: sha512-c+2qrCGWzoYpLlxtHgRJ4V5dDRE9fUT7D9maxtdBCqJ0NzCdY+x7xF3/F6cG/+n3VIzKfIS+p9Z/0YMQPf6k/Q==} + typanion@3.14.0: + resolution: {integrity: sha512-ZW/lVMRabETuYCd9O9ZvMhAh8GslSqaUjxmK/JLPCh6l73CvLBiuXswj/+7LdnWOgYsQ130FqLzFz5aGT4I3Ug==} + type-detect@4.0.8: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} @@ -4221,6 +4822,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-is@1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} @@ -4317,6 +4922,10 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + uuid@9.0.1: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} hasBin: true @@ -4337,6 +4946,9 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} + vfile-location@4.1.0: + resolution: {integrity: sha512-YF23YMyASIIJXpktBa4vIGLJ5Gs88UB/XePgqPmTa7cDA+JeO3yclbpheQYCHjVHBn/yePzrXuygIL+xbvRYHw==} + vfile-location@5.0.2: resolution: {integrity: sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==} @@ -4443,6 +5055,10 @@ packages: web-namespaces@2.0.1: resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} + web-streams-polyfill@3.3.3: + resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} + engines: {node: '>= 8'} + web-worker@1.3.0: resolution: {integrity: sha512-BSR9wyRsy/KOValMgd5kMyr3JzpdeoR9KVId8u5GVlTTAtNChlsE4yTxeY7zMdNSyOmoKBv8NH2qeRY9Tg+IaA==} @@ -4840,18 +5456,152 @@ snapshots: '@braintree/sanitize-url@6.0.4': {} - '@cspotcode/source-map-support@0.8.1': + '@contentlayer/cli@0.3.4(esbuild@0.21.5)': dependencies: - '@jridgewell/trace-mapping': 0.3.9 - - '@esbuild/aix-ppc64@0.21.5': - optional: true - - '@esbuild/android-arm64@0.21.5': - optional: true + '@contentlayer/core': 0.3.4(esbuild@0.21.5) + '@contentlayer/utils': 0.3.4 + clipanion: 3.2.1(typanion@3.14.0) + typanion: 3.14.0 + transitivePeerDependencies: + - '@effect-ts/otel-node' + - esbuild + - markdown-wasm + - supports-color - '@esbuild/android-arm@0.21.5': - optional: true + '@contentlayer/client@0.3.4(esbuild@0.21.5)': + dependencies: + '@contentlayer/core': 0.3.4(esbuild@0.21.5) + transitivePeerDependencies: + - '@effect-ts/otel-node' + - esbuild + - markdown-wasm + - supports-color + + '@contentlayer/core@0.3.4(esbuild@0.21.5)': + dependencies: + '@contentlayer/utils': 0.3.4 + camel-case: 4.1.2 + comment-json: 4.2.4 + gray-matter: 4.0.3 + mdx-bundler: 9.2.1(esbuild@0.21.5) + rehype-stringify: 9.0.4 + remark-frontmatter: 4.0.1 + remark-parse: 10.0.2 + remark-rehype: 10.1.0 + source-map-support: 0.5.21 + type-fest: 3.13.1 + unified: 10.1.2 + optionalDependencies: + esbuild: 0.21.5 + transitivePeerDependencies: + - '@effect-ts/otel-node' + - supports-color + + '@contentlayer/source-files@0.3.4(esbuild@0.21.5)': + dependencies: + '@contentlayer/core': 0.3.4(esbuild@0.21.5) + '@contentlayer/utils': 0.3.4 + chokidar: 3.6.0 + fast-glob: 3.3.2 + gray-matter: 4.0.3 + imagescript: 1.3.0 + micromatch: 4.0.7 + ts-pattern: 4.3.0 + unified: 10.1.2 + yaml: 2.4.5 + zod: 3.23.8 + transitivePeerDependencies: + - '@effect-ts/otel-node' + - esbuild + - markdown-wasm + - supports-color + + '@contentlayer/source-remote-files@0.3.4(esbuild@0.21.5)': + dependencies: + '@contentlayer/core': 0.3.4(esbuild@0.21.5) + '@contentlayer/source-files': 0.3.4(esbuild@0.21.5) + '@contentlayer/utils': 0.3.4 + transitivePeerDependencies: + - '@effect-ts/otel-node' + - esbuild + - markdown-wasm + - supports-color + + '@contentlayer/utils@0.3.4': + dependencies: + '@effect-ts/core': 0.60.5 + '@effect-ts/otel': 0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0)) + '@effect-ts/otel-exporter-trace-otlp-grpc': 0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/exporter-trace-otlp-grpc@0.39.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0)) + '@effect-ts/otel-sdk-trace-node': 0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-node@1.25.1(@opentelemetry/api@1.9.0)) + '@js-temporal/polyfill': 0.4.4 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-grpc': 0.39.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-node': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.25.1 + chokidar: 3.6.0 + hash-wasm: 4.11.0 + inflection: 2.0.1 + memfs: 3.5.3 + oo-ascii-tree: 1.101.0 + ts-pattern: 4.3.0 + type-fest: 3.13.1 + + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + + '@effect-ts/core@0.60.5': + dependencies: + '@effect-ts/system': 0.57.5 + + '@effect-ts/otel-exporter-trace-otlp-grpc@0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/exporter-trace-otlp-grpc@0.39.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0))': + dependencies: + '@effect-ts/core': 0.60.5 + '@effect-ts/otel': 0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0)) + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-grpc': 0.39.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.25.1(@opentelemetry/api@1.9.0) + + '@effect-ts/otel-sdk-trace-node@0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-node@1.25.1(@opentelemetry/api@1.9.0))': + dependencies: + '@effect-ts/core': 0.60.5 + '@effect-ts/otel': 0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0)) + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-node': 1.25.1(@opentelemetry/api@1.9.0) + + '@effect-ts/otel@0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0))': + dependencies: + '@effect-ts/core': 0.60.5 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.25.1(@opentelemetry/api@1.9.0) + + '@effect-ts/system@0.57.5': {} + + '@esbuild-plugins/node-resolve@0.1.4(esbuild@0.21.5)': + dependencies: + '@types/resolve': 1.20.6 + debug: 4.3.5 + esbuild: 0.21.5 + escape-string-regexp: 4.0.0 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + + '@esbuild/aix-ppc64@0.21.5': + optional: true + + '@esbuild/android-arm64@0.21.5': + optional: true + + '@esbuild/android-arm@0.21.5': + optional: true '@esbuild/android-x64@0.21.5': optional: true @@ -4913,6 +5663,20 @@ snapshots: '@esbuild/win32-x64@0.21.5': optional: true + '@fal-works/esbuild-plugin-global-externals@2.1.2': {} + + '@grpc/grpc-js@1.11.1': + dependencies: + '@grpc/proto-loader': 0.7.13 + '@js-sdsl/ordered-map': 4.4.2 + + '@grpc/proto-loader@0.7.13': + dependencies: + lodash.camelcase: 4.3.0 + long: 5.2.3 + protobufjs: 7.3.2 + yargs: 17.7.2 + '@headlessui/react@1.7.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@tanstack/react-virtual': 3.7.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -5123,6 +5887,22 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.4.15 + '@js-sdsl/ordered-map@4.4.2': {} + + '@js-temporal/polyfill@0.4.4': + dependencies: + jsbi: 4.3.0 + tslib: 2.6.3 + + '@mdx-js/esbuild@2.3.0(esbuild@0.21.5)': + dependencies: + '@mdx-js/mdx': 2.3.0 + esbuild: 0.21.5 + node-fetch: 3.3.2 + vfile: 5.3.7 + transitivePeerDependencies: + - supports-color + '@mdx-js/mdx@2.3.0': dependencies: '@types/estree-jsx': 1.0.5 @@ -5268,6 +6048,123 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.1 + '@opentelemetry/api-logs@0.39.1': + dependencies: + '@opentelemetry/api': 1.9.0 + + '@opentelemetry/api@1.9.0': {} + + '@opentelemetry/context-async-hooks@1.25.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + + '@opentelemetry/core@1.13.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/semantic-conventions': 1.13.0 + + '@opentelemetry/core@1.25.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/semantic-conventions': 1.25.1 + + '@opentelemetry/exporter-trace-otlp-grpc@0.39.1(@opentelemetry/api@1.9.0)': + dependencies: + '@grpc/grpc-js': 1.11.1 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.13.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-grpc-exporter-base': 0.39.1(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.39.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.13.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.13.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/otlp-exporter-base@0.39.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.13.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/otlp-grpc-exporter-base@0.39.1(@opentelemetry/api@1.9.0)': + dependencies: + '@grpc/grpc-js': 1.11.1 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.13.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.39.1(@opentelemetry/api@1.9.0) + protobufjs: 7.3.2 + + '@opentelemetry/otlp-transformer@0.39.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.39.1 + '@opentelemetry/core': 1.13.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.13.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.39.1(@opentelemetry/api-logs@0.39.1)(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 1.13.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.13.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/propagator-b3@1.25.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) + + '@opentelemetry/propagator-jaeger@1.25.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) + + '@opentelemetry/resources@1.13.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.13.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.13.0 + + '@opentelemetry/resources@1.25.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.25.1 + + '@opentelemetry/sdk-logs@0.39.1(@opentelemetry/api-logs@0.39.1)(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.39.1 + '@opentelemetry/core': 1.13.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.13.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/sdk-metrics@1.13.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.13.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.13.0(@opentelemetry/api@1.9.0) + lodash.merge: 4.6.2 + + '@opentelemetry/sdk-trace-base@1.13.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.13.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.13.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.13.0 + + '@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.25.1 + + '@opentelemetry/sdk-trace-node@1.25.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/context-async-hooks': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/propagator-b3': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/propagator-jaeger': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.25.1(@opentelemetry/api@1.9.0) + semver: 7.6.2 + + '@opentelemetry/semantic-conventions@1.13.0': {} + + '@opentelemetry/semantic-conventions@1.25.1': {} + '@panva/hkdf@1.2.0': {} '@pkgjs/parseargs@0.11.0': @@ -5279,6 +6176,29 @@ snapshots: '@popperjs/core@2.11.8': {} + '@protobufjs/aspromise@1.1.2': {} + + '@protobufjs/base64@1.1.2': {} + + '@protobufjs/codegen@2.0.4': {} + + '@protobufjs/eventemitter@1.1.0': {} + + '@protobufjs/fetch@1.1.0': + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/inquire': 1.1.0 + + '@protobufjs/float@1.0.2': {} + + '@protobufjs/inquire@1.1.0': {} + + '@protobufjs/path@1.1.2': {} + + '@protobufjs/pool@1.1.0': {} + + '@protobufjs/utf8@1.1.0': {} + '@rollup/rollup-android-arm-eabi@4.18.0': optional: true @@ -5434,6 +6354,8 @@ snapshots: '@tootallnate/once@2.0.0': {} + '@tootallnate/quickjs-emscripten@0.23.0': {} + '@ts-morph/common@0.23.0': dependencies: fast-glob: 3.3.2 @@ -5559,6 +6481,8 @@ snapshots: dependencies: undici-types: 5.26.5 + '@types/parse5@6.0.3': {} + '@types/prop-types@15.7.12': {} '@types/react-dom@18.3.0': @@ -5570,6 +6494,8 @@ snapshots: '@types/prop-types': 15.7.12 csstype: 3.1.3 + '@types/resolve@1.20.6': {} + '@types/stack-utils@2.0.3': {} '@types/tough-cookie@4.0.5': {} @@ -5715,12 +6641,20 @@ snapshots: call-bind: 1.0.7 is-array-buffer: 3.0.4 + array-timsort@1.0.3: {} + array-union@2.1.0: {} assertion-error@1.1.0: {} + ast-types@0.13.4: + dependencies: + tslib: 2.6.3 + astring@1.8.6: {} + async@3.2.5: {} + asynckit@0.4.0: {} autoprefixer@10.4.19(postcss@8.4.38): @@ -5793,12 +6727,16 @@ snapshots: balanced-match@1.0.2: {} + basic-ftp@5.0.5: {} + bidi-js@1.0.3: dependencies: require-from-string: 2.0.2 binary-extensions@2.3.0: {} + boolbase@1.0.0: {} + brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 @@ -5855,6 +6793,11 @@ snapshots: callsites@3.1.0: {} + camel-case@4.1.2: + dependencies: + pascal-case: 3.1.2 + tslib: 2.6.3 + camelcase-css@2.0.1: {} camelcase@5.3.1: {} @@ -5897,6 +6840,8 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 + chalk@5.3.0: {} + char-regex@1.0.2: {} character-entities-html4@2.1.0: {} @@ -5911,6 +6856,25 @@ snapshots: dependencies: get-func-name: 2.0.2 + cheerio-select@2.1.0: + dependencies: + boolbase: 1.0.0 + css-select: 5.1.0 + css-what: 6.1.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.1.0 + + cheerio@1.0.0-rc.12: + dependencies: + cheerio-select: 2.1.0 + dom-serializer: 2.0.0 + domhandler: 5.0.3 + domutils: 3.1.0 + htmlparser2: 8.0.2 + parse5: 7.1.2 + parse5-htmlparser2-tree-adapter: 7.0.0 + chokidar@3.6.0: dependencies: anymatch: 3.1.3 @@ -5929,6 +6893,10 @@ snapshots: client-only@0.0.1: {} + clipanion@3.2.1(typanion@3.14.0): + dependencies: + typanion: 3.14.0 + clipboardy@1.2.2: dependencies: arch: 2.2.0 @@ -5966,12 +6934,22 @@ snapshots: comma-separated-tokens@2.0.3: {} + commander@12.1.0: {} + commander@4.1.1: {} commander@7.2.0: {} commander@8.3.0: {} + comment-json@4.2.4: + dependencies: + array-timsort: 1.0.3 + core-util-is: 1.0.3 + esprima: 4.0.1 + has-own-prop: 2.0.0 + repeat-string: 1.6.1 + compute-scroll-into-view@3.1.0: {} concat-map@0.0.1: {} @@ -5998,6 +6976,20 @@ snapshots: content-type@1.0.5: {} + contentlayer@0.3.4(esbuild@0.21.5): + dependencies: + '@contentlayer/cli': 0.3.4(esbuild@0.21.5) + '@contentlayer/client': 0.3.4(esbuild@0.21.5) + '@contentlayer/core': 0.3.4(esbuild@0.21.5) + '@contentlayer/source-files': 0.3.4(esbuild@0.21.5) + '@contentlayer/source-remote-files': 0.3.4(esbuild@0.21.5) + '@contentlayer/utils': 0.3.4 + transitivePeerDependencies: + - '@effect-ts/otel-node' + - esbuild + - markdown-wasm + - supports-color + convert-source-map@2.0.0: {} cookie@0.6.0: {} @@ -6007,6 +6999,8 @@ snapshots: depd: 2.0.0 keygrip: 1.1.0 + core-util-is@1.0.3: {} + cose-base@1.0.3: dependencies: layout-base: 1.0.2 @@ -6044,11 +7038,21 @@ snapshots: dependencies: type-fest: 1.4.0 + css-select@5.1.0: + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 5.0.3 + domutils: 3.1.0 + nth-check: 2.1.1 + css-tree@2.3.1: dependencies: mdn-data: 2.0.30 source-map-js: 1.2.0 + css-what@6.1.0: {} + css.escape@1.5.1: {} cssesc@3.0.0: {} @@ -6246,6 +7250,10 @@ snapshots: d3: 7.9.0 lodash-es: 4.17.21 + data-uri-to-buffer@4.0.1: {} + + data-uri-to-buffer@6.0.2: {} + data-urls@3.0.2: dependencies: abab: 2.0.6 @@ -6325,6 +7333,12 @@ snapshots: has-property-descriptors: 1.0.2 object-keys: 1.1.1 + degenerator@5.0.1: + dependencies: + ast-types: 0.13.4 + escodegen: 2.1.0 + esprima: 4.0.1 + delaunator@5.0.1: dependencies: robust-predicates: 3.0.2 @@ -6369,12 +7383,30 @@ snapshots: dom-accessibility-api@0.6.3: {} + dom-serializer@2.0.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.5.0 + + domelementtype@2.3.0: {} + domexception@4.0.0: dependencies: webidl-conversions: 7.0.0 + domhandler@5.0.3: + dependencies: + domelementtype: 2.3.0 + dompurify@3.1.5: {} + domutils@3.1.0: + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + dotenv@16.4.5: {} eastasianwidth@0.2.0: {} @@ -6453,6 +7485,8 @@ snapshots: escape-string-regexp@2.0.0: {} + escape-string-regexp@4.0.0: {} + escape-string-regexp@5.0.0: {} escodegen@2.1.0: @@ -6477,6 +7511,8 @@ snapshots: estree-util-is-identifier-name: 2.1.0 estree-walker: 3.0.3 + estree-util-is-identifier-name@1.1.0: {} + estree-util-is-identifier-name@2.1.0: {} estree-util-to-js@1.2.0: @@ -6552,10 +7588,19 @@ snapshots: dependencies: reusify: 1.0.4 + fault@2.0.1: + dependencies: + format: 0.2.2 + fb-watchman@2.0.2: dependencies: bser: 2.1.1 + fetch-blob@3.2.0: + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 3.3.3 + file-type@18.7.0: dependencies: readable-web-to-node-stream: 3.0.2 @@ -6590,6 +7635,12 @@ 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 + fraction.js@4.3.7: {} fresh@0.5.2: {} @@ -6600,6 +7651,8 @@ snapshots: jsonfile: 6.1.0 universalify: 2.0.1 + fs-monkey@1.0.6: {} + fs.realpath@1.0.0: {} fsevents@2.3.2: @@ -6634,6 +7687,15 @@ snapshots: get-stream@6.0.1: {} + get-uri@6.0.3: + dependencies: + basic-ftp: 5.0.5 + data-uri-to-buffer: 6.0.2 + debug: 4.3.5 + fs-extra: 11.2.0 + transitivePeerDependencies: + - supports-color + git-up@7.0.0: dependencies: is-ssh: 1.4.0 @@ -6713,6 +7775,8 @@ snapshots: has-flag@4.0.0: {} + has-own-prop@2.0.0: {} + has-property-descriptors@1.0.2: dependencies: es-define-property: 1.0.0 @@ -6731,6 +7795,8 @@ snapshots: sort-keys: 5.0.0 type-fest: 1.4.0 + hash-wasm@4.11.0: {} + hasown@2.0.2: dependencies: function-bind: 1.1.2 @@ -6757,6 +7823,16 @@ snapshots: vfile: 6.0.1 vfile-message: 4.0.2 + hast-util-from-parse5@7.1.2: + dependencies: + '@types/hast': 2.3.10 + '@types/unist': 2.0.10 + hastscript: 7.2.0 + property-information: 6.5.0 + vfile: 5.3.7 + vfile-location: 4.1.0 + web-namespaces: 2.0.1 + hast-util-from-parse5@8.0.1: dependencies: '@types/hast': 3.0.4 @@ -6772,10 +7848,28 @@ snapshots: dependencies: '@types/hast': 3.0.4 + hast-util-parse-selector@3.1.1: + dependencies: + '@types/hast': 2.3.10 + hast-util-parse-selector@4.0.0: dependencies: '@types/hast': 3.0.4 + hast-util-raw@7.2.3: + dependencies: + '@types/hast': 2.3.10 + '@types/parse5': 6.0.3 + hast-util-from-parse5: 7.1.2 + hast-util-to-parse5: 7.1.0 + html-void-elements: 2.0.1 + parse5: 6.0.1 + unist-util-position: 4.0.4 + unist-util-visit: 4.1.2 + vfile: 5.3.7 + web-namespaces: 2.0.1 + zwitch: 2.0.4 + hast-util-raw@9.0.4: dependencies: '@types/hast': 3.0.4 @@ -6812,6 +7906,29 @@ snapshots: transitivePeerDependencies: - supports-color + hast-util-to-html@8.0.4: + dependencies: + '@types/hast': 2.3.10 + '@types/unist': 2.0.10 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-raw: 7.2.3 + hast-util-whitespace: 2.0.1 + html-void-elements: 2.0.1 + property-information: 6.5.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.4 + zwitch: 2.0.4 + + hast-util-to-parse5@7.1.0: + dependencies: + '@types/hast': 2.3.10 + comma-separated-tokens: 2.0.3 + property-information: 6.5.0 + space-separated-tokens: 2.0.2 + web-namespaces: 2.0.1 + zwitch: 2.0.4 + hast-util-to-parse5@8.0.0: dependencies: '@types/hast': 3.0.4 @@ -6831,6 +7948,14 @@ snapshots: hast-util-whitespace@2.0.1: {} + hastscript@7.2.0: + dependencies: + '@types/hast': 2.3.10 + comma-separated-tokens: 2.0.3 + hast-util-parse-selector: 3.1.1 + property-information: 6.5.0 + space-separated-tokens: 2.0.2 + hastscript@8.0.0: dependencies: '@types/hast': 3.0.4 @@ -6849,8 +7974,21 @@ snapshots: html-escaper@2.0.2: {} + html-link-extractor@1.0.5: + dependencies: + cheerio: 1.0.0-rc.12 + + html-void-elements@2.0.1: {} + html-void-elements@3.0.0: {} + htmlparser2@8.0.2: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.1.0 + entities: 4.5.0 + http-assert@1.5.0: dependencies: deep-equal: 1.0.1 @@ -6893,6 +8031,13 @@ snapshots: transitivePeerDependencies: - supports-color + https-proxy-agent@7.0.5: + dependencies: + agent-base: 7.1.1 + debug: 4.3.5 + transitivePeerDependencies: + - supports-color + human-signals@2.1.0: {} iconv-lite@0.6.3: @@ -6903,6 +8048,8 @@ snapshots: ignore@5.3.1: {} + imagescript@1.3.0: {} + import-local@3.1.0: dependencies: pkg-dir: 4.2.0 @@ -6912,6 +8059,8 @@ snapshots: indent-string@4.0.0: {} + inflection@2.0.1: {} + inflight@1.0.6: dependencies: once: 1.4.0 @@ -6933,6 +8082,13 @@ snapshots: intersection-observer@0.12.2: {} + ip-address@9.0.5: + dependencies: + jsbn: 1.1.0 + sprintf-js: 1.1.3 + + is-absolute-url@4.0.1: {} + is-alphabetical@2.0.1: {} is-alphanumerical@2.0.1: @@ -7028,6 +8184,10 @@ snapshots: call-bind: 1.0.7 has-tostringtag: 1.0.2 + is-relative-url@4.0.0: + dependencies: + is-absolute-url: 4.0.1 + is-set@2.0.3: {} is-shared-array-buffer@1.0.3: @@ -7065,6 +8225,10 @@ snapshots: isarray@2.0.5: {} + isemail@3.2.0: + dependencies: + punycode: 2.3.1 + isexe@2.0.0: {} istanbul-lib-coverage@3.2.2: {} @@ -7455,6 +8619,10 @@ snapshots: dependencies: argparse: 2.0.1 + jsbi@4.3.0: {} + + jsbn@1.1.0: {} + jsdom@20.0.3: dependencies: abab: 2.0.6 @@ -7634,6 +8802,16 @@ snapshots: lines-and-columns@1.2.4: {} + link-check@5.3.0: + dependencies: + is-relative-url: 4.0.0 + isemail: 3.2.0 + ms: 2.1.3 + needle: 3.3.1 + proxy-agent: 6.4.0 + transitivePeerDependencies: + - supports-color + load-tsconfig@0.2.5: {} local-pkg@0.4.3: {} @@ -7644,12 +8822,18 @@ snapshots: lodash-es@4.17.21: {} + lodash.camelcase@4.3.0: {} + lodash.get@4.4.2: {} + lodash.merge@4.6.2: {} + lodash.sortby@4.7.0: {} lodash@4.17.21: {} + long@5.2.3: {} + longest-streak@3.1.0: {} loose-envify@1.4.0: @@ -7660,6 +8844,10 @@ snapshots: dependencies: get-func-name: 2.0.2 + lower-case@2.0.2: + dependencies: + tslib: 2.6.3 + lru-cache@10.2.2: {} lru-cache@4.1.5: @@ -7671,6 +8859,8 @@ snapshots: dependencies: yallist: 3.1.1 + lru-cache@7.18.3: {} + lz-string@1.5.0: {} lz-utils@2.0.2: {} @@ -7695,8 +8885,29 @@ snapshots: markdown-extensions@1.1.1: {} + markdown-link-check@3.12.2: + dependencies: + async: 3.2.5 + chalk: 5.3.0 + commander: 12.1.0 + link-check: 5.3.0 + lodash: 4.17.21 + markdown-link-extractor: 4.0.2 + needle: 3.3.1 + progress: 2.0.3 + proxy-agent: 6.4.0 + transitivePeerDependencies: + - supports-color + + markdown-link-extractor@4.0.2: + dependencies: + html-link-extractor: 1.0.5 + marked: 12.0.2 + markdown-table@3.0.3: {} + marked@12.0.2: {} + match-sorter@6.3.4: dependencies: '@babel/runtime': 7.24.7 @@ -7732,6 +8943,12 @@ snapshots: transitivePeerDependencies: - supports-color + mdast-util-frontmatter@1.0.1: + dependencies: + '@types/mdast': 3.0.15 + mdast-util-to-markdown: 1.5.0 + micromark-extension-frontmatter: 1.1.1 + mdast-util-gfm-autolink-literal@1.0.3: dependencies: '@types/mdast': 3.0.15 @@ -7874,8 +9091,27 @@ snapshots: mdn-data@2.0.30: {} + mdx-bundler@9.2.1(esbuild@0.21.5): + dependencies: + '@babel/runtime': 7.24.7 + '@esbuild-plugins/node-resolve': 0.1.4(esbuild@0.21.5) + '@fal-works/esbuild-plugin-global-externals': 2.1.2 + '@mdx-js/esbuild': 2.3.0(esbuild@0.21.5) + esbuild: 0.21.5 + gray-matter: 4.0.3 + remark-frontmatter: 4.0.1 + remark-mdx-frontmatter: 1.1.1 + uuid: 8.3.2 + vfile: 5.3.7 + transitivePeerDependencies: + - supports-color + media-typer@0.3.0: {} + memfs@3.5.3: + dependencies: + fs-monkey: 1.0.6 + meow@12.1.1: {} merge-stream@2.0.0: {} @@ -7926,6 +9162,13 @@ snapshots: micromark-util-types: 1.1.0 uvu: 0.5.6 + micromark-extension-frontmatter@1.1.1: + dependencies: + fault: 2.0.1 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + micromark-extension-gfm-autolink-literal@1.0.5: dependencies: micromark-util-character: 1.2.0 @@ -8270,6 +9513,8 @@ snapshots: ms@2.1.2: {} + ms@2.1.3: {} + mz@2.7.0: dependencies: any-promise: 1.3.0 @@ -8280,16 +9525,39 @@ snapshots: natural-compare@1.4.0: {} + needle@3.3.1: + dependencies: + iconv-lite: 0.6.3 + sax: 1.4.1 + negotiator@0.6.3: {} - next-auth@5.0.0-beta.19(next@14.2.4(@babel/core@7.24.7)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(nodemailer@6.9.14)(react@18.3.1): + netmask@2.0.2: {} + + next-auth@5.0.0-beta.19(next@14.2.4(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(nodemailer@6.9.14)(react@18.3.1): dependencies: '@auth/core': 0.32.0(nodemailer@6.9.14) - next: 14.2.4(@babel/core@7.24.7)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 14.2.4(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 optionalDependencies: nodemailer: 6.9.14 + next-compose-plugins@2.2.1: {} + + next-contentlayer@0.3.4(contentlayer@0.3.4(esbuild@0.21.5))(esbuild@0.21.5)(next@14.2.4(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@contentlayer/core': 0.3.4(esbuild@0.21.5) + '@contentlayer/utils': 0.3.4 + contentlayer: 0.3.4(esbuild@0.21.5) + next: 14.2.4(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(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) + transitivePeerDependencies: + - '@effect-ts/otel-node' + - esbuild + - markdown-wasm + - supports-color + next-mdx-remote@4.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@mdx-js/mdx': 2.3.0 @@ -8301,31 +9569,31 @@ snapshots: transitivePeerDependencies: - supports-color - next-seo@6.5.0(next@13.5.6(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + next-seo@6.5.0(next@13.5.6(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - next: 13.5.6(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 13.5.6(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(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) - next-seo@6.5.0(next@14.2.4(@babel/core@7.24.7)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + next-seo@6.5.0(next@14.2.4(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - next: 14.2.4(@babel/core@7.24.7)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 14.2.4(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(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) - next-themes@0.2.1(next@13.5.6(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + next-themes@0.2.1(next@13.5.6(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - next: 13.5.6(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 13.5.6(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(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) - next-themes@0.2.1(next@14.2.4(@babel/core@7.24.7)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + next-themes@0.2.1(next@14.2.4(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - next: 14.2.4(@babel/core@7.24.7)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 14.2.4(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(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) - next@13.5.6(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + next@13.5.6(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@next/env': 13.5.6 '@swc/helpers': 0.5.2 @@ -8346,11 +9614,12 @@ snapshots: '@next/swc-win32-arm64-msvc': 13.5.6 '@next/swc-win32-ia32-msvc': 13.5.6 '@next/swc-win32-x64-msvc': 13.5.6 + '@opentelemetry/api': 1.9.0 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros - next@14.2.4(@babel/core@7.24.7)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + next@14.2.4(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@next/env': 14.2.4 '@swc/helpers': 0.5.5 @@ -8371,12 +9640,13 @@ snapshots: '@next/swc-win32-arm64-msvc': 14.2.4 '@next/swc-win32-ia32-msvc': 14.2.4 '@next/swc-win32-x64-msvc': 14.2.4 + '@opentelemetry/api': 1.9.0 '@playwright/test': 1.44.1 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros - nextra-theme-docs@2.13.4(next@14.2.4(@babel/core@7.24.7)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(nextra@2.13.4(next@14.2.4(@babel/core@7.24.7)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + nextra-theme-docs@2.13.4(next@14.2.4(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(nextra@2.13.4(next@14.2.4(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@headlessui/react': 1.7.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@popperjs/core': 2.11.8 @@ -8387,16 +9657,16 @@ snapshots: git-url-parse: 13.1.1 intersection-observer: 0.12.2 match-sorter: 6.3.4 - next: 14.2.4(@babel/core@7.24.7)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - next-seo: 6.5.0(next@14.2.4(@babel/core@7.24.7)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - next-themes: 0.2.1(next@14.2.4(@babel/core@7.24.7)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - nextra: 2.13.4(next@14.2.4(@babel/core@7.24.7)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 14.2.4(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next-seo: 6.5.0(next@14.2.4(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next-themes: 0.2.1(next@14.2.4(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + nextra: 2.13.4(next@14.2.4(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(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) scroll-into-view-if-needed: 3.1.0 zod: 3.23.8 - nextra@2.13.4(next@14.2.4(@babel/core@7.24.7)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + nextra@2.13.4(next@14.2.4(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@headlessui/react': 1.7.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@mdx-js/mdx': 2.3.0 @@ -8410,7 +9680,7 @@ snapshots: gray-matter: 4.0.3 katex: 0.16.10 lodash.get: 4.4.2 - next: 14.2.4(@babel/core@7.24.7)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 14.2.4(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next-mdx-remote: 4.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) p-limit: 3.1.0 react: 18.3.1 @@ -8430,6 +9700,19 @@ snapshots: transitivePeerDependencies: - supports-color + no-case@3.0.4: + dependencies: + lower-case: 2.0.2 + tslib: 2.6.3 + + node-domexception@1.0.0: {} + + node-fetch@3.3.2: + dependencies: + data-uri-to-buffer: 4.0.1 + fetch-blob: 3.2.0 + formdata-polyfill: 4.0.10 + node-int64@0.4.0: {} node-releases@2.0.14: {} @@ -8452,6 +9735,10 @@ snapshots: npm-to-yarn@2.2.1: {} + nth-check@2.1.1: + dependencies: + boolbase: 1.0.0 + nwsapi@2.2.10: {} oauth4webapi@2.11.1: {} @@ -8490,6 +9777,8 @@ snapshots: only@0.0.2: {} + oo-ascii-tree@1.101.0: {} + open-cli@8.0.0: dependencies: file-type: 18.7.0 @@ -8525,6 +9814,24 @@ snapshots: p-try@2.2.0: {} + pac-proxy-agent@7.0.2: + dependencies: + '@tootallnate/quickjs-emscripten': 0.23.0 + agent-base: 7.1.1 + debug: 4.3.5 + get-uri: 6.0.3 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.5 + pac-resolver: 7.0.1 + socks-proxy-agent: 8.0.4 + transitivePeerDependencies: + - supports-color + + pac-resolver@7.0.1: + dependencies: + degenerator: 5.0.1 + netmask: 2.0.2 + package-json-from-dist@1.0.0: {} parse-entities@4.0.1: @@ -8555,12 +9862,24 @@ snapshots: dependencies: parse-path: 7.0.0 + parse5-htmlparser2-tree-adapter@7.0.0: + dependencies: + domhandler: 5.0.3 + parse5: 7.1.2 + + parse5@6.0.1: {} + parse5@7.1.2: dependencies: entities: 4.5.0 parseurl@1.3.3: {} + pascal-case@3.1.2: + dependencies: + no-case: 3.0.4 + tslib: 2.6.3 + path-browserify@1.0.1: {} path-exists@4.0.0: {} @@ -8737,6 +10056,8 @@ snapshots: pretty-hrtime@1.0.3: {} + progress@2.0.3: {} + prompts@2.4.2: dependencies: kleur: 3.0.3 @@ -8744,8 +10065,38 @@ snapshots: property-information@6.5.0: {} + protobufjs@7.3.2: + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/base64': 1.1.2 + '@protobufjs/codegen': 2.0.4 + '@protobufjs/eventemitter': 1.1.0 + '@protobufjs/fetch': 1.1.0 + '@protobufjs/float': 1.0.2 + '@protobufjs/inquire': 1.1.0 + '@protobufjs/path': 1.1.2 + '@protobufjs/pool': 1.1.0 + '@protobufjs/utf8': 1.1.0 + '@types/node': 20.14.5 + long: 5.2.3 + protocols@2.0.1: {} + proxy-agent@6.4.0: + dependencies: + agent-base: 7.1.1 + debug: 4.3.5 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.4 + lru-cache: 7.18.3 + pac-proxy-agent: 7.0.2 + proxy-from-env: 1.1.0 + socks-proxy-agent: 8.0.4 + transitivePeerDependencies: + - supports-color + + proxy-from-env@1.1.0: {} + pseudomap@1.0.2: {} psl@1.9.0: {} @@ -8831,6 +10182,19 @@ snapshots: hast-util-raw: 9.0.4 vfile: 6.0.1 + rehype-stringify@9.0.4: + dependencies: + '@types/hast': 2.3.10 + hast-util-to-html: 8.0.4 + unified: 10.1.2 + + remark-frontmatter@4.0.1: + dependencies: + '@types/mdast': 3.0.15 + mdast-util-frontmatter: 1.0.1 + micromark-extension-frontmatter: 1.1.1 + unified: 10.1.2 + remark-gfm@3.0.1: dependencies: '@types/mdast': 3.0.15 @@ -8847,6 +10211,13 @@ snapshots: micromark-extension-math: 2.1.2 unified: 10.1.2 + remark-mdx-frontmatter@1.1.1: + dependencies: + estree-util-is-identifier-name: 1.1.0 + estree-util-value-to-estree: 1.3.0 + js-yaml: 4.1.0 + toml: 3.0.0 + remark-mdx@2.3.0: dependencies: mdast-util-mdx: 2.0.1 @@ -8878,6 +10249,8 @@ snapshots: remove-accents@0.5.0: {} + repeat-string@1.6.1: {} + require-directory@2.1.1: {} require-from-string@2.0.2: {} @@ -8946,6 +10319,8 @@ snapshots: safer-buffer@2.1.2: {} + sax@1.4.1: {} + saxes@6.0.0: dependencies: xmlchars: 2.2.0 @@ -9027,6 +10402,21 @@ snapshots: slash@5.1.0: {} + smart-buffer@4.2.0: {} + + socks-proxy-agent@8.0.4: + dependencies: + agent-base: 7.1.1 + debug: 4.3.5 + socks: 2.8.3 + transitivePeerDependencies: + - supports-color + + socks@2.8.3: + dependencies: + ip-address: 9.0.5 + smart-buffer: 4.2.0 + sort-keys@5.0.0: dependencies: is-plain-obj: 4.1.0 @@ -9038,6 +10428,11 @@ snapshots: buffer-from: 1.1.2 source-map: 0.6.1 + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + source-map@0.6.1: {} source-map@0.7.4: {} @@ -9052,6 +10447,8 @@ snapshots: sprintf-js@1.0.3: {} + sprintf-js@1.1.3: {} + stack-utils@2.0.6: dependencies: escape-string-regexp: 2.0.0 @@ -9250,6 +10647,8 @@ snapshots: '@tokenizer/token': 0.3.0 ieee754: 1.2.1 + toml@3.0.0: {} + tough-cookie@4.1.4: dependencies: psl: 1.9.0 @@ -9302,6 +10701,8 @@ snapshots: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 + ts-pattern@4.3.0: {} + tslib@2.6.3: {} tsscmp@1.0.6: {} @@ -9331,6 +10732,8 @@ snapshots: turbogrid@3.2.0: {} + typanion@3.14.0: {} + type-detect@4.0.8: {} type-fest@0.21.3: {} @@ -9339,6 +10742,8 @@ snapshots: type-fest@2.19.0: {} + type-fest@3.13.1: {} + type-is@1.6.18: dependencies: media-typer: 0.3.0 @@ -9465,6 +10870,8 @@ snapshots: util-deprecate@1.0.2: {} + uuid@8.3.2: {} + uuid@9.0.1: {} uvu@0.5.6: @@ -9484,6 +10891,11 @@ snapshots: vary@1.1.2: {} + vfile-location@4.1.0: + dependencies: + '@types/unist': 2.0.10 + vfile: 5.3.7 + vfile-location@5.0.2: dependencies: '@types/unist': 3.0.2 @@ -9607,6 +11019,8 @@ snapshots: web-namespaces@2.0.1: {} + web-streams-polyfill@3.3.3: {} + web-worker@1.3.0: {} webidl-conversions@4.0.2: {} diff --git a/scripts/link-check.mjs b/scripts/link-check.mjs new file mode 100644 index 0000000..32b05d4 --- /dev/null +++ b/scripts/link-check.mjs @@ -0,0 +1,38 @@ +import markdownLinkCheck from "markdown-link-check"; +import { allDocuments } from "../.contentlayer/generated/index.mjs"; + +const baseUrl = process.argv.find((arg) => arg.includes("--baseUrl")); +const allBody = allDocuments.map(({ body }) => body.raw).join("\n--- NEXT ARTICLE ---\n"); + +const configOpts = { + projectBaseUrl: baseUrl ? baseUrl.replace("--baseUrl=", "https://") : "http://localhost:3000", + replacementPatterns: [ + { + pattern: "^/", + replacement: "{{BASEURL}}/", + }, + ], +}; + +markdownLinkCheck(allBody, configOpts, function (error, linkCheckresults) { + try { + if (error) throw new Error(error); + + const results = linkCheckresults.map((linkCheckResult) => ({ ...linkCheckResult })); + console.log(results) + const hasDeadLink = results.find((result) => result.status.includes("dead")); + + results.forEach(({ link, status}) => { + console.log("%s is %s", link, status === "dead" ? "dead 💀" : "alive 🥳"); + }); + + if (hasDeadLink) { + throw new Error("Dead link found.👆💀"); + } else { + console.log("All links are valid! 🙌") + } + + } catch(error) { + throw Error(error.message) + } +}); diff --git a/tsconfig.json b/tsconfig.json index f3d3061..243e30c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -18,8 +18,11 @@ "name": "next" } ], + + "baseUrl": ".", "paths": { - "@/*": ["./*"] + "@/*": ["./*"], + "contentlayer/generated": ["./.contentlayer/generated"] } }, "include": [ diff --git a/tutorial.md b/tutorial.md index eb5376b..c379336 100644 --- a/tutorial.md +++ b/tutorial.md @@ -35,8 +35,7 @@ - [7.4 Rendering links inside `sidebar`](#74-rendering-links-inside-sidebar) - [7.4.1 Understanding how directory items are passed down to the `sidebar`](#741-understanding-how-directory-items-are-passed-down-to-the-sidebar) - [7.4.2 Conditionally rendering links in `Menu` inside the `sidebar`](#742-conditionally-rendering-links-in-menu-inside-the-sidebar) -- [Change theme](#change-theme) -- [Zones](#zones) +- [Star the repo!](#star-the-repo) > [!TIP] > @@ -2384,28 +2383,10 @@ which is different to what this directory requires. Great job! 🎉 - - -# Change theme - -- custom theme is the only option -- although you can change some aspects of the sidebar - https://nextra.site/docs/docs-theme/theme-configuration#customize-sidebar-content - you can't (yet) do it on the navbar: - [nextra#2799](https://github.com/shuding/nextra/discussions/2799). - Either way, the way Nextra does it doesn't allow us - to have access to the authorization and change the display accordingly. - We need to go deeper. - -# Zones - -See: -[nextra#93](https://github.com/shuding/nextra/discussions/93) -More to come soon! - +# Star the repo! Thanks for learning with us! If you find it useful, please give the repo a star! ⭐️ -[![HitCount](https://hits.dwyl.com/dwyl/nextra-demo-tutorial.svg?style=flat-square)](https://hits.dwyl.com/dwyl/nextra-demo) \ No newline at end of file +[![HitCount](https://hits.dwyl.com/dwyl/nextra-demo.svg?style=flat-square)](https://hits.dwyl.com/dwyl/nextra-demo) From 29f79116d75ffd300b45fc2af93a562d898af02f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lui=CC=81s=20Arteiro?= Date: Thu, 25 Jul 2024 00:51:22 +0100 Subject: [PATCH 02/14] upgrade: Updating `contentlayer` to fork `contentlayer2`. --- contentlayer.config.js | 2 +- next.config.js | 3 +- package.json | 6 +- pnpm-lock.yaml | 1202 ++++++++++++++++++++++++++++------------ 4 files changed, 849 insertions(+), 364 deletions(-) diff --git a/contentlayer.config.js b/contentlayer.config.js index 4cac9d9..3386218 100644 --- a/contentlayer.config.js +++ b/contentlayer.config.js @@ -1,4 +1,4 @@ -import { defineDocumentType, makeSource } from 'contentlayer/source-files' +import { defineDocumentType, makeSource } from 'contentlayer2/source-files' const computedFields = { slug: { diff --git a/next.config.js b/next.config.js index d80f489..fd7a583 100644 --- a/next.config.js +++ b/next.config.js @@ -5,7 +5,6 @@ const withNextra = require("nextra")({ themeConfig: "./theme.config.tsx", defaultShowCopyCode: true }); -const { withContentlayer } = require('next-contentlayer') - +const { withContentlayer } = require('next-contentlayer2'); module.exports = withPlugins([withNextra, withContentlayer]); diff --git a/package.json b/package.json index fdccf8e..c03adb6 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "test": "jest --runInBand", "types:check": "tsc --noEmit", "link:check": "pnpm run contentlayer && node ./scripts/link-check.mjs", - "contentlayer": "contentlayer build --verbose" + "contentlayer": "contentlayer2 build --verbose" }, "dependencies": { "next": "^14.2.4", @@ -29,14 +29,14 @@ "@types/jest": "^29.5.12", "@types/node": "20.14.5", "autoprefixer": "^10.4.19", - "contentlayer": "^0.3.4", + "contentlayer2": "^0.5.0", "dotenv": "^16.4.5", "fast-glob": "^3.3.2", "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", "markdown-link-check": "^3.12.2", "monocart-reporter": "^2.5.0", - "next-contentlayer": "^0.3.4", + "next-contentlayer2": "^0.5.0", "open-cli": "^8.0.0", "postcss": "^8.4.31", "tailwindcss": "^3.3.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4616a24..922518b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -48,9 +48,9 @@ importers: autoprefixer: specifier: ^10.4.19 version: 10.4.19(postcss@8.4.38) - contentlayer: - specifier: ^0.3.4 - version: 0.3.4(esbuild@0.21.5) + contentlayer2: + specifier: ^0.5.0 + version: 0.5.0(esbuild@0.21.5) dotenv: specifier: ^16.4.5 version: 16.4.5 @@ -69,9 +69,9 @@ importers: monocart-reporter: specifier: ^2.5.0 version: 2.5.2 - next-contentlayer: - specifier: ^0.3.4 - version: 0.3.4(contentlayer@0.3.4(esbuild@0.21.5))(esbuild@0.21.5)(next@14.2.4(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next-contentlayer2: + specifier: ^0.5.0 + version: 0.5.0(contentlayer2@0.5.0(esbuild@0.21.5))(esbuild@0.21.5)(next@14.2.4(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) open-cli: specifier: ^8.0.0 version: 8.0.0 @@ -410,16 +410,16 @@ packages: '@braintree/sanitize-url@6.0.4': resolution: {integrity: sha512-s3jaWicZd0pkP0jf5ysyHUI/RE7MHos6qlToFcGWXVp+ykHOy77OUMrfbgJ9it2C5bow7OIQwYYaHjk9XlBQ2A==} - '@contentlayer/cli@0.3.4': - resolution: {integrity: sha512-vNDwgLuhYNu+m70NZ3XK9kexKNguuxPXg7Yvzj3B34cEilQjjzSrcTY/i+AIQm9V7uT5GGshx9ukzPf+SmoszQ==} + '@contentlayer2/cli@0.5.0': + resolution: {integrity: sha512-V6mhjqFN1GNlea75TRsTAdJaT/wG2EwaRUwl13Zv3302682TB8Pkewfew19JvNX+V3c8y7zMYhQ44c2QgR2h9w==} - '@contentlayer/client@0.3.4': - resolution: {integrity: sha512-QSlLyc3y4PtdC5lFw0L4wTZUH8BQnv2nk37hNCsPAqGf+dRO7TLAzdc+2/mVIRgK+vSH+pSOzjLsQpFxxXRTZA==} + '@contentlayer2/client@0.5.0': + resolution: {integrity: sha512-YEsGjKWZvp+wanyK2I38r5X50NQKfRvnQ8BL23H51WeB5Y4J8KrjaDm1fF4qg91RZQCSe+l3z2t7wN6IqunXkQ==} - '@contentlayer/core@0.3.4': - resolution: {integrity: sha512-o68oBLwfYZ+2vtgfk1lgHxOl3LoxvRNiUfeQ8IWFWy/L4wnIkKIqLZX01zlRE5IzYM+ZMMN5V0cKQlO7DsyR9g==} + '@contentlayer2/core@0.5.0': + resolution: {integrity: sha512-yf6sBc2wov/TNVtEms0X5VBzdYf3kxRUObGcn68+G0EE1/mrS7Ynl3aILghxAT//7Re+KeovNkLl+UdTTPF7sg==} peerDependencies: - esbuild: 0.17.x || 0.18.x + esbuild: '>=0.17' markdown-wasm: 1.x peerDependenciesMeta: esbuild: @@ -427,14 +427,14 @@ packages: markdown-wasm: optional: true - '@contentlayer/source-files@0.3.4': - resolution: {integrity: sha512-4njyn0OFPu7WY4tAjMxiJgWOKeiHuBOGdQ36EYE03iij/pPPRbiWbL+cmLccYXUFEW58mDwpqROZZm6pnxjRDQ==} + '@contentlayer2/source-files@0.5.0': + resolution: {integrity: sha512-jdRgHvXy9BQ45BgrNleqx9aWlcUgvZUiakQIk+A1vqGUFpzSFh03TnTUKZw2sC/8QH6Aqtg7+YP1F5C/gCPVLg==} - '@contentlayer/source-remote-files@0.3.4': - resolution: {integrity: sha512-cyiv4sNUySZvR0uAKlM+kSAELzNd2h2QT1R2e41dRKbwOUVxeLfmGiLugr0aVac6Q3xYcD99dbHyR1xWPV+w9w==} + '@contentlayer2/source-remote-files@0.5.0': + resolution: {integrity: sha512-Sj4F0QNHJKzJkfPalWtf8Yb0HJkvAL751sC4LiEevvoqFhIkNMEuVVyPzBA81c8aNBxnSw7NEjPHOlKH1dKJNA==} - '@contentlayer/utils@0.3.4': - resolution: {integrity: sha512-ZWWOhbUWYQ2QHoLIlcUnEo7X4ZbwcyFPuzVQWWMkK43BxCveyQtZwBIzfyx54sqVzi0GUmKP8bHzsLQT0QxaLQ==} + '@contentlayer2/utils@0.5.0': + resolution: {integrity: sha512-7rE37WJrP9U/oz7Y9jC2BPUwNw1/Vz1Xf7LT9C0ontF2uVlAbAzDmZMDxku+aIm+i912563ZZ11HRm7pkfZvCw==} peerDependencies: '@effect-ts/otel-node': '*' peerDependenciesMeta: @@ -448,15 +448,6 @@ packages: '@effect-ts/core@0.60.5': resolution: {integrity: sha512-qi1WrtJA90XLMnj2hnUszW9Sx4dXP03ZJtCc5DiUBIOhF4Vw7plfb65/bdBySPoC9s7zy995TdUX1XBSxUkl5w==} - '@effect-ts/otel-exporter-trace-otlp-grpc@0.15.1': - resolution: {integrity: sha512-47gAg0O2pW5Jlo86jfzjdkwL5a7Bzb+Kj5WTmdu4CxYRfWn9ytKjuuYIfsNDW8neuhdKzn+P5wCddgEh0glYyQ==} - peerDependencies: - '@effect-ts/core': ^0.60.2 - '@opentelemetry/api': ^1.4.0 - '@opentelemetry/core': ^1.13.0 - '@opentelemetry/exporter-trace-otlp-grpc': ^0.39.0 - '@opentelemetry/sdk-trace-base': ^1.13.0 - '@effect-ts/otel-sdk-trace-node@0.15.1': resolution: {integrity: sha512-a2sF0ylmn8xOJs8fNeT/spJ1gUcsksAJCALxo9WOfuTCMtTwMVtVhCKEPEeQoL7wFqU+JgPkVdP91+FJ/Rkeow==} peerDependencies: @@ -477,8 +468,8 @@ packages: '@effect-ts/system@0.57.5': resolution: {integrity: sha512-/crHGujo0xnuHIYNc1VgP0HGJGFSoSqq88JFXe6FmFyXPpWt8Xu39LyLg7rchsxfXFeEdA9CrIZvLV5eswXV5g==} - '@esbuild-plugins/node-resolve@0.1.4': - resolution: {integrity: sha512-haFQ0qhxEpqtWWY0kx1Y5oE3sMyO1PcoSiWEPrAw6tm/ZOOLXjSs6Q+v1v9eyuVF0nNt50YEvrcrvENmyoMv5g==} + '@esbuild-plugins/node-resolve@0.2.2': + resolution: {integrity: sha512-+t5FdX3ATQlb53UFDBRb4nqjYBz492bIrnVWvpQHpzZlu9BQL5HasMZhqc409ygUwOWCXZhrWr6NyZ6T6Y+cxw==} peerDependencies: esbuild: '*' @@ -745,14 +736,35 @@ packages: resolution: {integrity: sha512-2X6bvghJ/JAoZO52lbgyAPFj8uCflhTo2g7nkFzEQdXd/D8rEeD4HtmTEpmtGCva260fcd66YNXBOYdnmHqSOg==} engines: {node: '>=12'} - '@mdx-js/esbuild@2.3.0': - resolution: {integrity: sha512-r/vsqsM0E+U4Wr0DK+0EfmABE/eg+8ITW4DjvYdh3ve/tK2safaqHArNnaqbOk1DjYGrhxtoXoGaM3BY8fGBTA==} + '@jsonjoy.com/base64@1.1.2': + resolution: {integrity: sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==} + engines: {node: '>=10.0'} peerDependencies: - esbuild: '>=0.11.0' + tslib: '2' + + '@jsonjoy.com/json-pack@1.0.4': + resolution: {integrity: sha512-aOcSN4MeAtFROysrbqG137b7gaDDSmVrl5mpo6sT/w+kcXpWnzhMjmY/Fh/sDx26NBxyIE7MB1seqLeCAzy9Sg==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/util@1.2.0': + resolution: {integrity: sha512-4B8B+3vFsY4eo33DMKyJPlQ3sBMpPFUZK2dr3O3rXrOGKKbYG44J0XSFkDo1VOQiri5HFEhIeVvItjR2xcazmg==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@mdx-js/esbuild@3.0.1': + resolution: {integrity: sha512-+KZbCKcRjFtRD6qzD+c70Vq/VPVt5LHFsOshNcsdcONkaLTCSjmM7/uj71i3BcP+170f+P4DwVEMtqR/k0t5aw==} + peerDependencies: + esbuild: '>=0.14.0' '@mdx-js/mdx@2.3.0': resolution: {integrity: sha512-jLuwRlz8DQfQNiUCJR50Y09CGPq3fLtmtUQfVrj79E0JWu3dvsVcxVIcfhR5h0iXu+/z++zDrYeiJqifRynJkA==} + '@mdx-js/mdx@3.0.1': + resolution: {integrity: sha512-eIQ4QTrOWyL3LWEe/bu6Taqzq2HQvHcyTMaOrI95P2/LmJE7AsfPfgJGuFLPVqBUE1BC1rik3VIhU+s9u72arA==} + '@mdx-js/react@2.3.0': resolution: {integrity: sha512-zQH//gdOmuu7nt2oJR29vFhDv88oGPmVw6BggmrHeMI+xgEkp1B2dX9/bMBSYtK0dyLX/aOmesKS09g222K1/g==} peerDependencies: @@ -954,8 +966,8 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@opentelemetry/api-logs@0.39.1': - resolution: {integrity: sha512-9BJ8lMcOzEN0lu+Qji801y707oFO4xT3db6cosPvl+k7ItUHKN5ofWqtSbM9gbt1H4JJ/4/2TVrqI9Rq7hNv6Q==} + '@opentelemetry/api-logs@0.51.1': + resolution: {integrity: sha512-E3skn949Pk1z2XtXu/lxf6QAZpawuTM/IUEXcAzpiUkTd73Hmvw26FiN3cJuTmkpM5hZzHwkomVdtrh/n/zzwA==} engines: {node: '>=14'} '@opentelemetry/api@1.9.0': @@ -968,11 +980,11 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/core@1.13.0': - resolution: {integrity: sha512-2dBX3Sj99H96uwJKvc2w9NOiNgbvAO6mOFJFramNkKfS9O4Um+VWgpnlAazoYjT6kUJ1MP70KQ5ngD4ed+4NUw==} + '@opentelemetry/core@1.24.1': + resolution: {integrity: sha512-wMSGfsdmibI88K9wB498zXY04yThPexo8jvwNNlm542HZB7XrrMRBbAyKJqG8qDRJwIBdBrPMi4V9ZPW/sqrcg==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.5.0' + '@opentelemetry/api': '>=1.0.0 <1.9.0' '@opentelemetry/core@1.25.1': resolution: {integrity: sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==} @@ -980,29 +992,29 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/exporter-trace-otlp-grpc@0.39.1': - resolution: {integrity: sha512-l5RhLKx6U+yuLhMrtgavTDthX50E1mZM3/SSySC7OPZiArFHV/b/9x9jxAzrOgIQUDxyj4N0V9aLKSA2t7Qzxg==} + '@opentelemetry/exporter-trace-otlp-grpc@0.51.1': + resolution: {integrity: sha512-P9+Hkszih95ITvldGZ+kXvj9HpD1QfS+PwooyHK72GYA+Bgm+yUSAsDkUkDms8+s9HW6poxURv3LcjaMuBBpVQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.0.0 - '@opentelemetry/otlp-exporter-base@0.39.1': - resolution: {integrity: sha512-Pv5X8fbi6jD/RJBePyn7MnCSuE6MbPB6dl+7YYBWJ5RcMGYMwvLXjd4h2jWsPV2TSUg38H/RoSP0aXvQ06Y7iw==} + '@opentelemetry/otlp-exporter-base@0.51.1': + resolution: {integrity: sha512-UYlnOYyDdzo1Gw559EHCzru0RwhvuXCwoH8jGo9J4gO1TE58GjnEmIjomMsKBCym3qWNJfIQXw+9SZCV0DdQNg==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.0.0 - '@opentelemetry/otlp-grpc-exporter-base@0.39.1': - resolution: {integrity: sha512-u3ErFRQqQFKjjIMuwLWxz/tLPYInfmiAmSy//fGSCzCh2ZdJgqQjMOAxBgqFtCF2xFL+OmMhyuC2ThMzceGRWA==} + '@opentelemetry/otlp-grpc-exporter-base@0.51.1': + resolution: {integrity: sha512-ZAS+4pq8o7dsugGTwV9s6JMKSxi+guIHdn0acOv0bqj26e9pWDFx5Ky+bI0aY46uR9Y0JyXqY+KAEYM/SO3DFA==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.0.0 - '@opentelemetry/otlp-transformer@0.39.1': - resolution: {integrity: sha512-0hgVnXXz5efI382B/24NxD4b6Zxlh7nxCdJkxkdmQMbn0yRiwoq/ZT+QG8eUL6JNzsBAV1WJlF5aJNsL8skHvw==} + '@opentelemetry/otlp-transformer@0.51.1': + resolution: {integrity: sha512-OppYOXwV9LQqqtYUCywqoOqX/JT9LQ5/FMuPZ//eTkvuHdUC4ZMwz2c6uSoT2R90GWvvGnF1iEqTGyTT3xAt2Q==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.3.0 <1.5.0' + '@opentelemetry/api': '>=1.3.0 <1.9.0' '@opentelemetry/propagator-b3@1.25.1': resolution: {integrity: sha512-p6HFscpjrv7//kE+7L+3Vn00VEDUJB0n6ZrjkTYHrJ58QZ8B3ajSJhRbCcY6guQ3PDjTbxWklyvIN2ojVbIb1A==} @@ -1016,11 +1028,11 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/resources@1.13.0': - resolution: {integrity: sha512-euqjOkiN6xhjE//0vQYGvbStxoD/WWQRhDiO0OTLlnLBO9Yw2Gd/VoSx2H+svsebjzYk5OxLuREBmcdw6rbUNg==} + '@opentelemetry/resources@1.24.1': + resolution: {integrity: sha512-cyv0MwAaPF7O86x5hk3NNgenMObeejZFLJJDVuSeSMIsknlsj3oOZzRv3qSzlwYomXsICfBeFFlxwHQte5mGXQ==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.5.0' + '@opentelemetry/api': '>=1.0.0 <1.9.0' '@opentelemetry/resources@1.25.1': resolution: {integrity: sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==} @@ -1028,24 +1040,24 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/sdk-logs@0.39.1': - resolution: {integrity: sha512-/gmgKfZ1ZVFporKuwsewqIyvaUIGpv76JZ7lBpHQQPb37IMpaXO6pdqFI4ebHAWfNIm3akMyhmdtzivcgF3lgw==} + '@opentelemetry/sdk-logs@0.51.1': + resolution: {integrity: sha512-ULQQtl82b673PpZc5/0EtH4V+BrwVOgKJZEB7tYZnGTG3I98tQVk89S9/JSixomDr++F4ih+LSJTCqIKBz+MQQ==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.4.0 <1.5.0' - '@opentelemetry/api-logs': '>=0.38.0' + '@opentelemetry/api': '>=1.4.0 <1.9.0' + '@opentelemetry/api-logs': '>=0.39.1' - '@opentelemetry/sdk-metrics@1.13.0': - resolution: {integrity: sha512-MOjZX6AnSOqLliCcZUrb+DQKjAWXBiGeICGbHAGe5w0BB18PJIeIo995lO5JSaFfHpmUMgJButTPfJJD27W3Vg==} + '@opentelemetry/sdk-metrics@1.24.1': + resolution: {integrity: sha512-FrAqCbbGao9iKI+Mgh+OsC9+U2YMoXnlDHe06yH7dvavCKzE3S892dGtX54+WhSFVxHR/TMRVJiK/CV93GR0TQ==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.3.0 <1.5.0' + '@opentelemetry/api': '>=1.3.0 <1.9.0' - '@opentelemetry/sdk-trace-base@1.13.0': - resolution: {integrity: sha512-moTiQtc0uPR1hQLt6gLDJH9IIkeBhgRb71OKjNHZPE1VF45fHtD6nBDi5J/DkTHTwYP5X3kBJLa3xN7ub6J4eg==} + '@opentelemetry/sdk-trace-base@1.24.1': + resolution: {integrity: sha512-zz+N423IcySgjihl2NfjBf0qw1RWe11XIAWVrTNOSSI6dtSPJiVom2zipFB2AEEtJWpv0Iz6DY6+TjnyTV5pWg==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.5.0' + '@opentelemetry/api': '>=1.0.0 <1.9.0' '@opentelemetry/sdk-trace-base@1.25.1': resolution: {integrity: sha512-C8k4hnEbc5FamuZQ92nTOp8X/diCY56XUTnMiv9UTuJitCzaNNHAVsdm5+HLCdI8SLQsLWIrG38tddMxLVoftw==} @@ -1059,8 +1071,8 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/semantic-conventions@1.13.0': - resolution: {integrity: sha512-LMGqfSZkaMQXqewO0o1wvWr/2fQdCh4a3Sqlxka/UsJCe0cfLulh6x2aqnKLnsrSGiCq5rSCwvINd152i0nCqw==} + '@opentelemetry/semantic-conventions@1.24.1': + resolution: {integrity: sha512-VkliWlS4/+GHLLW7J/rVBA00uXus1SWvwFvcUDxDwmFxYfg/2VI6ekwdXS28cjI8Qz2ky2BzG8OUHo+WeYIWqw==} engines: {node: '>=14'} '@opentelemetry/semantic-conventions@1.25.1': @@ -1404,9 +1416,6 @@ packages: '@types/node@20.14.5': resolution: {integrity: sha512-aoRR+fJkZT2l0aGOJhuA8frnCSoNX6W7U2mpNq63+BxBIj5BQFt8rHy627kijCmm63ijdSdwvGgpUsU6MBsZZA==} - '@types/parse5@6.0.3': - resolution: {integrity: sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==} - '@types/prop-types@15.7.12': resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} @@ -1800,6 +1809,9 @@ packages: code-block-writer@13.0.1: resolution: {integrity: sha512-c5or4P6erEA69TxaxTNcHUNcIn+oyxSRTOWV+pSYF+z4epXqNvwvJ70XPGjPNgue83oAFAPBRQYwpAJ/Hpe/Sg==} + collapse-white-space@2.1.0: + resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==} + collect-v8-coverage@1.0.2: resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} @@ -1868,9 +1880,9 @@ packages: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} - contentlayer@0.3.4: - resolution: {integrity: sha512-FYDdTUFaN4yqep0waswrhcXjmMJnPD5iXDTtxcUCGdklfuIrXM2xLx51xl748cHmGA6IsC+27YZFxU6Ym13QIA==} - engines: {node: '>=14.18'} + contentlayer2@0.5.0: + resolution: {integrity: sha512-Q8OqhJv+mGIl/yqLOTJd6hNIs0241PGMAFfobCSq/A29dOQeOTvA1CwlePx/QxgrvLfqsx/stga8rb/1SRNz2Q==} + engines: {node: '>=18'} hasBin: true convert-source-map@2.0.0: @@ -2096,10 +2108,6 @@ packages: dagre-d3-es@7.0.10: resolution: {integrity: sha512-qTCQmEhcynucuaZgY5/+ti3X/rnszKZhEQH/ZdWdtP1tA/y3VoHJzcVrO9pjjJCNpigfscAtoUB5ONcd2wNn0A==} - data-uri-to-buffer@4.0.1: - resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} - engines: {node: '>= 12'} - data-uri-to-buffer@6.0.2: resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} engines: {node: '>= 14'} @@ -2368,25 +2376,40 @@ packages: estree-util-attach-comments@2.1.1: resolution: {integrity: sha512-+5Ba/xGGS6mnwFbXIuQiDPTbuTxuMCooq3arVv7gPZtYpjp+VXH/NkHAP35OOefPhNG/UGqU3vt/LTABwcHX0w==} + estree-util-attach-comments@3.0.0: + resolution: {integrity: sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==} + estree-util-build-jsx@2.2.2: resolution: {integrity: sha512-m56vOXcOBuaF+Igpb9OPAy7f9w9OIkb5yhjsZuaPm7HoGi4oTOQi0h2+yZ+AtKklYFZ+rPC4n0wYCJCEU1ONqg==} - estree-util-is-identifier-name@1.1.0: - resolution: {integrity: sha512-OVJZ3fGGt9By77Ix9NhaRbzfbDV/2rx9EP7YIDJTmsZSEc5kYn2vWcNccYyahJL2uAQZK2a5Or2i0wtIKTPoRQ==} + estree-util-build-jsx@3.0.1: + resolution: {integrity: sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==} estree-util-is-identifier-name@2.1.0: resolution: {integrity: sha512-bEN9VHRyXAUOjkKVQVvArFym08BTWB0aJPppZZr0UNyAqWsLaVfAqP7hbaTJjzHifmB5ebnR8Wm7r7yGN/HonQ==} + estree-util-is-identifier-name@3.0.0: + resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} + estree-util-to-js@1.2.0: resolution: {integrity: sha512-IzU74r1PK5IMMGZXUVZbmiu4A1uhiPgW5hm1GjcOfr4ZzHaMPpLNJjR7HjXiIOzi25nZDrgFTobHTkV5Q6ITjA==} + estree-util-to-js@2.0.0: + resolution: {integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==} + estree-util-value-to-estree@1.3.0: resolution: {integrity: sha512-Y+ughcF9jSUJvncXwqRageavjrNPAI+1M/L3BI3PyLp1nmgYTGUXU6t5z1Y7OWuThoDdhPME07bQU+d5LxdJqw==} engines: {node: '>=12.0.0'} + estree-util-value-to-estree@3.1.2: + resolution: {integrity: sha512-S0gW2+XZkmsx00tU2uJ4L9hUT7IFabbml9pHh2WQqFmAbxit++YGZne0sKJbNwkj9Wvg9E4uqWl4nCIFQMmfag==} + estree-util-visit@1.2.1: resolution: {integrity: sha512-xbgqcrkIVbIG+lI/gzbvd9SGTJL4zqJKBFttUl5pP27KhAjtMKbX/mQXJ7qgyXpMgVy/zvpm0xoQQaGL8OloOw==} + estree-util-visit@2.0.0: + resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==} + estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} @@ -2433,10 +2456,6 @@ packages: fb-watchman@2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} - fetch-blob@3.2.0: - resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} - engines: {node: ^12.20 || >= 14.13} - file-type@18.7.0: resolution: {integrity: sha512-ihHtXRzXEziMrQ56VSgU7wkxh55iNchFkosu7Y9/S+tXHdKyrGjVK0ujbqNnsxzea+78MaLhN6PGmfYSAv1ACw==} engines: {node: '>=14.16'} @@ -2470,10 +2489,6 @@ packages: 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'} - fraction.js@4.3.7: resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} @@ -2485,9 +2500,6 @@ packages: resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} engines: {node: '>=14.14'} - fs-monkey@1.0.6: - resolution: {integrity: sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==} - fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} @@ -2647,35 +2659,29 @@ packages: hast-util-from-html@2.0.1: resolution: {integrity: sha512-RXQBLMl9kjKVNkJTIO6bZyb2n+cUH8LFaSSzo82jiLT6Tfc+Pt7VQCS+/h3YwG4jaNE2TA2sdJisGWR+aJrp0g==} - hast-util-from-parse5@7.1.2: - resolution: {integrity: sha512-Nz7FfPBuljzsN3tCQ4kCBKqdNhQE2l0Tn+X1ubgKBPRoiDIu1mL08Cfw4k7q71+Duyaw7DXDN+VTAp4Vh3oCOw==} - hast-util-from-parse5@8.0.1: resolution: {integrity: sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==} hast-util-is-element@3.0.0: resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} - hast-util-parse-selector@3.1.1: - resolution: {integrity: sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==} - hast-util-parse-selector@4.0.0: resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} - hast-util-raw@7.2.3: - resolution: {integrity: sha512-RujVQfVsOrxzPOPSzZFiwofMArbQke6DJjnFfceiEbFh7S05CbPt0cYN+A5YeD3pso0JQk6O1aHBnx9+Pm2uqg==} - hast-util-raw@9.0.4: resolution: {integrity: sha512-LHE65TD2YiNsHD3YuXcKPHXPLuYh/gjp12mOfU8jxSrm1f/yJpsb0F/KKljS6U9LJoP0Ux+tCe8iJ2AsPzTdgA==} hast-util-to-estree@2.3.3: resolution: {integrity: sha512-ihhPIUPxN0v0w6M5+IiAZZrn0LH2uZomeWwhn7uP7avZC6TE7lIiEh2yBMPr5+zi1aUCXq6VoYRgs2Bw9xmycQ==} - hast-util-to-html@8.0.4: - resolution: {integrity: sha512-4tpQTUOr9BMjtYyNlt0P50mH7xj0Ks2xpo8M943Vykljf99HW6EzulIoJP1N3eKOSScEHzyzi9dm7/cn0RfGwA==} + hast-util-to-estree@3.1.0: + resolution: {integrity: sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw==} - hast-util-to-parse5@7.1.0: - resolution: {integrity: sha512-YNRgAJkH2Jky5ySkIqFXTQiaqcAtJyVE+D5lkN6CdtOqrnkLfGYYrEcKuHOJZlp+MwjSwuD3fZuawI+sic/RBw==} + hast-util-to-html@9.0.1: + resolution: {integrity: sha512-hZOofyZANbyWo+9RP75xIDV/gq+OUKx+T46IlwERnKmfpwp81XBFbT9mi26ws+SJchA4RVUQwIBJpqEOBhMzEQ==} + + 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==} @@ -2686,8 +2692,8 @@ packages: hast-util-whitespace@2.0.1: resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==} - hastscript@7.2.0: - resolution: {integrity: sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==} + hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} hastscript@8.0.0: resolution: {integrity: sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==} @@ -2706,9 +2712,6 @@ packages: html-link-extractor@1.0.5: resolution: {integrity: sha512-ADd49pudM157uWHwHQPUSX4ssMsvR/yHIswOR5CUfBdK9g9ZYGMhVSE6KZVHJ6kCkR0gH4htsfzU6zECDNVwyw==} - html-void-elements@2.0.1: - resolution: {integrity: sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==} - html-void-elements@3.0.0: resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} @@ -2747,6 +2750,10 @@ packages: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} + hyperdyperid@1.2.0: + resolution: {integrity: sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==} + engines: {node: '>=10.18'} + iconv-lite@0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} @@ -2775,9 +2782,9 @@ packages: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} - inflection@2.0.1: - resolution: {integrity: sha512-wzkZHqpb4eGrOKBl34xy3umnYHx8Si5R1U4fwmdxLo5gdH6mEK8gclckTj/qWqy4Je0bsDYe/qazZYuO7xe3XQ==} - engines: {node: '>=14.0.0'} + inflection@3.0.0: + resolution: {integrity: sha512-1zEJU1l19SgJlmwqsEyFTbScw/tkMHFenUo//Y0i+XEP83gDFdMvPizAD/WGcE+l1ku12PcTVHQhO6g5E0UCMw==} + engines: {node: '>=18.0.0'} inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} @@ -2789,6 +2796,9 @@ packages: inline-style-parser@0.1.1: resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} + inline-style-parser@0.2.3: + resolution: {integrity: sha512-qlD8YNDqyTKTyuITrDOffsl6Tdhv+UC4hcdAVuQsK4IMQ99nSgd1MIA/Q+jQYoh9r3hVUXhYh7urSRmXPkW04g==} + internal-slot@1.0.7: resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} engines: {node: '>= 0.4'} @@ -3421,6 +3431,10 @@ packages: resolution: {integrity: sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==} engines: {node: '>=0.10.0'} + markdown-extensions@2.0.0: + resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} + engines: {node: '>=16'} + markdown-link-check@3.12.2: resolution: {integrity: sha512-GWMwSvxuZn+uGGydi5yywnnDZy08SGps4I/63xqvWT7lxtH4cVLnhgZZYtEcPz/QvgPg9vbH2rvWpa29owMtHA==} hasBin: true @@ -3448,8 +3462,11 @@ packages: mdast-util-from-markdown@1.3.1: resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==} - mdast-util-frontmatter@1.0.1: - resolution: {integrity: sha512-JjA2OjxRqAa8wEG8hloD0uTU0kdn8kbtOWpPP94NBkfAlbxn4S8gCGf/9DwFtEeGPXrDcNXdiDjVaRdUFqYokw==} + mdast-util-from-markdown@2.0.1: + resolution: {integrity: sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==} + + mdast-util-frontmatter@2.0.1: + resolution: {integrity: sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==} mdast-util-gfm-autolink-literal@1.0.3: resolution: {integrity: sha512-My8KJ57FYEy2W2LyNom4n3E7hKTuQk/0SES0u16tjA9Z3oFkF4RrC/hPAPgjlSpezsOvI8ObcXcElo92wn5IGA==} @@ -3475,18 +3492,33 @@ packages: mdast-util-mdx-expression@1.3.2: resolution: {integrity: sha512-xIPmR5ReJDu/DHH1OoIT1HkuybIfRGYRywC+gJtI7qHjCJp/M9jrmBEJW22O8lskDWm562BX2W8TiAwRTb0rKA==} + mdast-util-mdx-expression@2.0.0: + resolution: {integrity: sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw==} + mdast-util-mdx-jsx@2.1.4: resolution: {integrity: sha512-DtMn9CmVhVzZx3f+optVDF8yFgQVt7FghCRNdlIaS3X5Bnym3hZwPbg/XW86vdpKjlc1PVj26SpnLGeJBXD3JA==} + mdast-util-mdx-jsx@3.1.2: + resolution: {integrity: sha512-eKMQDeywY2wlHc97k5eD8VC+9ASMjN8ItEZQNGwJ6E0XWKiW/Z0V5/H8pvoXUf+y+Mj0VIgeRRbujBmFn4FTyA==} + mdast-util-mdx@2.0.1: resolution: {integrity: sha512-38w5y+r8nyKlGvNjSEqWrhG0w5PmnRA+wnBvm+ulYCct7nsGYhFVb0lljS9bQav4psDAS1eGkP2LMVcZBi/aqw==} + mdast-util-mdx@3.0.0: + resolution: {integrity: sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==} + mdast-util-mdxjs-esm@1.3.1: resolution: {integrity: sha512-SXqglS0HrEvSdUEfoXFtcg7DRl7S2cwOXc7jkuusG472Mmjag34DUDeOJUZtl+BVnyeO1frIgVpHlNRWc2gk/w==} + 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@12.3.0: resolution: {integrity: sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==} @@ -3496,15 +3528,21 @@ packages: 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==} + 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==} + mdn-data@2.0.30: resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} - mdx-bundler@9.2.1: - resolution: {integrity: sha512-hWEEip1KU9MCNqeH2rqwzAZ1pdqPPbfkx9OTJjADqGPQz4t9BO85fhI7AP9gVYrpmfArf9/xJZUN0yBErg/G/Q==} - engines: {node: '>=14', npm: '>=6'} + mdx-bundler@10.0.2: + resolution: {integrity: sha512-0wF0zoCv+Ms4G+eSlk/jaKYoJHc0oXBaOma3kYlFJiKq9H8h41Dd66ioDBGF4noy80Pf7KTBQlyHfEpTqVml7A==} + engines: {node: '>=18', npm: '>=6'} peerDependencies: esbuild: 0.* @@ -3512,8 +3550,8 @@ packages: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} - memfs@3.5.3: - resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} + memfs@4.9.4: + resolution: {integrity: sha512-Xlj8b2rU11nM6+KU6wC7cuWcHQhVINWCUgdPS4Ar9nPxLaOya3RghqK7ALyDW2QtGebYAYs6uEdEVnwPVT942A==} engines: {node: '>= 4.0.0'} meow@12.1.1: @@ -3533,8 +3571,11 @@ packages: micromark-core-commonmark@1.1.0: resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==} - micromark-extension-frontmatter@1.1.1: - resolution: {integrity: sha512-m2UH9a7n3W8VAH9JO9y01APpPKmNNNs71P0RbknEmYSaZU5Ghogv38BYO94AI5Xw6OYfxZRdHZZ2nYjs/Z+SZQ==} + 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-gfm-autolink-literal@1.0.5: resolution: {integrity: sha512-z3wJSLrDf8kRDOh2qBtoTRD53vJ+CWIyo7uyZuxf/JAbNJjiHsOpG1y5wxk8drtv3ETAHutCu6N3thkOOgueWg==} @@ -3563,36 +3604,69 @@ packages: micromark-extension-mdx-expression@1.0.8: resolution: {integrity: sha512-zZpeQtc5wfWKdzDsHRBY003H2Smg+PUi2REhqgIhdzAa5xonhP03FcXxqFSerFiNUr5AWmHpaNPQTBVOS4lrXw==} + micromark-extension-mdx-expression@3.0.0: + resolution: {integrity: sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ==} + micromark-extension-mdx-jsx@1.0.5: resolution: {integrity: sha512-gPH+9ZdmDflbu19Xkb8+gheqEDqkSpdCEubQyxuz/Hn8DOXiXvrXeikOoBA71+e8Pfi0/UYmU3wW3H58kr7akA==} + micromark-extension-mdx-jsx@3.0.0: + resolution: {integrity: sha512-uvhhss8OGuzR4/N17L1JwvmJIpPhAd8oByMawEKx6NVdBCbesjH4t+vjEp3ZXft9DwvlKSD07fCeI44/N0Vf2w==} + micromark-extension-mdx-md@1.0.1: resolution: {integrity: sha512-7MSuj2S7xjOQXAjjkbjBsHkMtb+mDGVW6uI2dBL9snOBCbZmoNgDAeZ0nSn9j3T42UE/g2xVNMn18PJxZvkBEA==} + micromark-extension-mdx-md@2.0.0: + resolution: {integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==} + micromark-extension-mdxjs-esm@1.0.5: resolution: {integrity: sha512-xNRBw4aoURcyz/S69B19WnZAkWJMxHMT5hE36GtDAyhoyn/8TuAeqjFJQlwk+MKQsUD7b3l7kFX+vlfVWgcX1w==} + micromark-extension-mdxjs-esm@3.0.0: + resolution: {integrity: sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==} + micromark-extension-mdxjs@1.0.1: resolution: {integrity: sha512-7YA7hF6i5eKOfFUzZ+0z6avRG52GpWR8DL+kN47y3f2KhxbBZMhmxe7auOeaTBrW2DenbbZTf1ea9tA2hDpC2Q==} + 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@1.0.9: resolution: {integrity: sha512-jGIWzSmNfdnkJq05c7b0+Wv0Kfz3NJ3N4cBjnbO4zjXIlxJr+f8lk+5ZmwFvqdAbUy2q6B5rCY//g0QAAaXDWA==} + 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==} @@ -3602,18 +3676,33 @@ packages: 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==} @@ -3623,15 +3712,27 @@ packages: micromark-util-events-to-acorn@1.2.3: resolution: {integrity: sha512-ij4X7Wuc4fED6UoLWkmo0xJQhsktfNh1J0m8g4PbIMPlx+ek/4YdW5mvbye8z/aZvAPUoxgXHrwVlXAPKMRp1w==} + 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==} @@ -3641,6 +3742,9 @@ packages: 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==} @@ -3656,6 +3760,9 @@ packages: micromark@3.2.0: resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==} + micromark@4.0.0: + resolution: {integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==} + micromatch@4.0.7: resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} engines: {node: '>=8.6'} @@ -3765,11 +3872,11 @@ packages: next-compose-plugins@2.2.1: resolution: {integrity: sha512-OjJ+fV15FXO2uQXQagLD4C0abYErBjyjE0I0FHpOEIB8upw0hg1ldFP6cqHTJBH1cZqy96OeR3u1dJ+Ez2D4Bg==} - next-contentlayer@0.3.4: - resolution: {integrity: sha512-UtUCwgAl159KwfhNaOwyiI7Lg6sdioyKMeh+E7jxx0CJ29JuXGxBEYmCI6+72NxFGIFZKx8lvttbbQhbnYWYSw==} + next-contentlayer2@0.5.0: + resolution: {integrity: sha512-pcJGCvxbYfpxD3oBFCsfTNyIPGbz5Aj/n2EU08Db2VgXC0T/vbzfG3cihRFRh1/YmnsoGHXLhnmfh3oeCVfiZg==} peerDependencies: - contentlayer: 0.3.4 - next: ^12 || ^13 + contentlayer2: 0.5.0 + next: '>=12.0.0' react: '*' react-dom: '*' @@ -3846,14 +3953,6 @@ packages: no-case@3.0.4: resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} - node-domexception@1.0.0: - resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} - engines: {node: '>=10.5.0'} - - node-fetch@3.3.2: - resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} @@ -4001,9 +4100,6 @@ packages: parse5-htmlparser2-tree-adapter@7.0.0: resolution: {integrity: sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==} - parse5@6.0.1: - resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} - parse5@7.1.2: resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} @@ -4290,11 +4386,11 @@ packages: rehype-raw@7.0.0: resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} - rehype-stringify@9.0.4: - resolution: {integrity: sha512-Uk5xu1YKdqobe5XpSskwPvo1XeHUUucWEQSl8hTrXt5selvca1e8K1EZ37E6YoZ4BT8BCqCdVfQW7OfHfthtVQ==} + rehype-stringify@10.0.0: + resolution: {integrity: sha512-1TX1i048LooI9QoecrXy7nGFFbFSufxVRAfc6Y9YMRAi56l+oB0zP51mLSV312uRuvVLPV1opSlJmslozR1XHQ==} - remark-frontmatter@4.0.1: - resolution: {integrity: sha512-38fJrB0KnmD3E33a5jZC/5+gGAC2WKNiPw1/fdXJvijBlhA7RCsvJklrYJakS0HedninvaCYW8lQGf9C918GfA==} + remark-frontmatter@5.0.0: + resolution: {integrity: sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==} remark-gfm@3.0.1: resolution: {integrity: sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==} @@ -4302,22 +4398,30 @@ packages: remark-math@5.1.1: resolution: {integrity: sha512-cE5T2R/xLVtfFI4cCePtiRn+e6jKMtFDR3P8V3qpv8wpKjwvHoBA4eJzvX+nVrnlNy0911bdGmuspCSwetfYHw==} - remark-mdx-frontmatter@1.1.1: - resolution: {integrity: sha512-7teX9DW4tI2WZkXS4DBxneYSY7NHiXl4AKdWDO9LXVweULlCT8OPWsOjLEnMIXViN1j+QcY8mfbq3k0EK6x3uA==} - engines: {node: '>=12.2.0'} + remark-mdx-frontmatter@4.0.0: + resolution: {integrity: sha512-PZzAiDGOEfv1Ua7exQ8S5kKxkD8CDaSb4nM+1Mprs6u8dyvQifakh+kCj6NovfGXW+bTvrhjaR3srzjS2qJHKg==} remark-mdx@2.3.0: resolution: {integrity: sha512-g53hMkpM0I98MU266IzDFMrTD980gNF3BJnkyFcmN+dD873mQeD5rdMO3Y2X+x8umQfbSE0PcoEDl7ledSA+2g==} + remark-mdx@3.0.1: + resolution: {integrity: sha512-3Pz3yPQ5Rht2pM5R+0J2MrGoBSrzf+tJG94N+t/ilfdh8YLyyKYtidAYwTveB20BoHAcwIopOUqhcmh2F7hGYA==} + remark-parse@10.0.2: resolution: {integrity: sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==} + remark-parse@11.0.0: + resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} + remark-reading-time@2.0.1: resolution: {integrity: sha512-fy4BKy9SRhtYbEHvp6AItbRTnrhiDGbqLQTSYVbQPGuRCncU1ubSsh9p/W5QZSxtYcUXv8KGL0xBgPLyNJA1xw==} remark-rehype@10.1.0: resolution: {integrity: sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==} + remark-rehype@11.1.0: + resolution: {integrity: sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==} + remove-accents@0.5.0: resolution: {integrity: sha512-8g3/Otx1eJaVD12e31UbJj1YzdtVvzH85HV7t+9MJYk/u3XmkOUJ5Ys9wQrf9PCPK8+xn4ymzqYCiZl6QWKn+A==} @@ -4610,6 +4714,9 @@ packages: style-to-object@0.4.4: resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==} + style-to-object@1.0.6: + resolution: {integrity: sha512-khxq+Qm3xEyZfKd/y9L3oIWQimxuc4STrQKtQn8aSDRHb8mFgpukgX1hdzfrMEW6JCjyJ8p89x+IUMVnCBI1PA==} + styled-jsx@5.1.1: resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} engines: {node: '>= 12.0.0'} @@ -4681,6 +4788,12 @@ packages: thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + thingies@1.21.0: + resolution: {integrity: sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==} + engines: {node: '>=10.18'} + peerDependencies: + tslib: ^2 + tinybench@2.8.0: resolution: {integrity: sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw==} @@ -4737,6 +4850,12 @@ packages: resolution: {integrity: sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==} engines: {node: '>=18'} + tree-dump@1.0.2: + resolution: {integrity: sha512-dpev9ABuLWdEubk+cIaI9cHwRNNDjkBBLXTwI4UCUFdQ5xXKqNXoK4FEciw/vxf+NQ7Cb7sGUyeUtORvHIdRXQ==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + tree-kill@1.2.2: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true @@ -4771,8 +4890,8 @@ packages: '@swc/wasm': optional: true - ts-pattern@4.3.0: - resolution: {integrity: sha512-pefrkcd4lmIVR0LA49Imjf9DYLK8vtWhqBPA3Ya1ir8xCW0O2yjL9dsCVvI7pCodLC5q7smNpEtDR2yVulQxOg==} + ts-pattern@5.2.0: + resolution: {integrity: sha512-aGaSpOlDcns7ZoeG/OMftWyQG1KqPVhgplhJxNCvyIXqWrumM5uIoOSarw/hmmi/T1PnuQ/uD8NaFHvLpHicDg==} tslib@2.6.3: resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} @@ -4822,9 +4941,9 @@ 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'} type-is@1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} @@ -4844,6 +4963,9 @@ packages: unified@10.1.2: resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} + unified@11.0.5: + resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} + unique-string@3.0.0: resolution: {integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==} engines: {node: '>=12'} @@ -4863,6 +4985,9 @@ packages: unist-util-position-from-estree@1.1.2: resolution: {integrity: sha512-poZa0eXpS+/XpoQwGwl79UUdea4ol2ZuCYguVaJS4qzIOMDzbqz8a3erUCOmubSZkaOuGamb3tX790iwOIROww==} + unist-util-position-from-estree@2.0.0: + resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==} + unist-util-position@4.0.4: resolution: {integrity: sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==} @@ -4922,10 +5047,6 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - uuid@8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true - uuid@9.0.1: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} hasBin: true @@ -4946,9 +5067,6 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} - vfile-location@4.1.0: - resolution: {integrity: sha512-YF23YMyASIIJXpktBa4vIGLJ5Gs88UB/XePgqPmTa7cDA+JeO3yclbpheQYCHjVHBn/yePzrXuygIL+xbvRYHw==} - vfile-location@5.0.2: resolution: {integrity: sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==} @@ -5055,10 +5173,6 @@ packages: web-namespaces@2.0.1: resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} - web-streams-polyfill@3.3.3: - resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} - engines: {node: '>= 8'} - web-worker@1.3.0: resolution: {integrity: sha512-BSR9wyRsy/KOValMgd5kMyr3JzpdeoR9KVId8u5GVlTTAtNChlsE4yTxeY7zMdNSyOmoKBv8NH2qeRY9Tg+IaA==} @@ -5456,10 +5570,10 @@ snapshots: '@braintree/sanitize-url@6.0.4': {} - '@contentlayer/cli@0.3.4(esbuild@0.21.5)': + '@contentlayer2/cli@0.5.0(esbuild@0.21.5)': dependencies: - '@contentlayer/core': 0.3.4(esbuild@0.21.5) - '@contentlayer/utils': 0.3.4 + '@contentlayer2/core': 0.5.0(esbuild@0.21.5) + '@contentlayer2/utils': 0.5.0 clipanion: 3.2.1(typanion@3.14.0) typanion: 3.14.0 transitivePeerDependencies: @@ -5468,46 +5582,46 @@ snapshots: - markdown-wasm - supports-color - '@contentlayer/client@0.3.4(esbuild@0.21.5)': + '@contentlayer2/client@0.5.0(esbuild@0.21.5)': dependencies: - '@contentlayer/core': 0.3.4(esbuild@0.21.5) + '@contentlayer2/core': 0.5.0(esbuild@0.21.5) transitivePeerDependencies: - '@effect-ts/otel-node' - esbuild - markdown-wasm - supports-color - '@contentlayer/core@0.3.4(esbuild@0.21.5)': + '@contentlayer2/core@0.5.0(esbuild@0.21.5)': dependencies: - '@contentlayer/utils': 0.3.4 + '@contentlayer2/utils': 0.5.0 camel-case: 4.1.2 comment-json: 4.2.4 gray-matter: 4.0.3 - mdx-bundler: 9.2.1(esbuild@0.21.5) - rehype-stringify: 9.0.4 - remark-frontmatter: 4.0.1 - remark-parse: 10.0.2 - remark-rehype: 10.1.0 + mdx-bundler: 10.0.2(esbuild@0.21.5) + rehype-stringify: 10.0.0 + remark-frontmatter: 5.0.0 + remark-parse: 11.0.0 + remark-rehype: 11.1.0 source-map-support: 0.5.21 - type-fest: 3.13.1 - unified: 10.1.2 + type-fest: 4.23.0 + unified: 11.0.5 optionalDependencies: esbuild: 0.21.5 transitivePeerDependencies: - '@effect-ts/otel-node' - supports-color - '@contentlayer/source-files@0.3.4(esbuild@0.21.5)': + '@contentlayer2/source-files@0.5.0(esbuild@0.21.5)': dependencies: - '@contentlayer/core': 0.3.4(esbuild@0.21.5) - '@contentlayer/utils': 0.3.4 + '@contentlayer2/core': 0.5.0(esbuild@0.21.5) + '@contentlayer2/utils': 0.5.0 chokidar: 3.6.0 fast-glob: 3.3.2 gray-matter: 4.0.3 imagescript: 1.3.0 micromatch: 4.0.7 - ts-pattern: 4.3.0 - unified: 10.1.2 + ts-pattern: 5.2.0 + unified: 11.0.5 yaml: 2.4.5 zod: 3.23.8 transitivePeerDependencies: @@ -5516,38 +5630,37 @@ snapshots: - markdown-wasm - supports-color - '@contentlayer/source-remote-files@0.3.4(esbuild@0.21.5)': + '@contentlayer2/source-remote-files@0.5.0(esbuild@0.21.5)': dependencies: - '@contentlayer/core': 0.3.4(esbuild@0.21.5) - '@contentlayer/source-files': 0.3.4(esbuild@0.21.5) - '@contentlayer/utils': 0.3.4 + '@contentlayer2/core': 0.5.0(esbuild@0.21.5) + '@contentlayer2/source-files': 0.5.0(esbuild@0.21.5) + '@contentlayer2/utils': 0.5.0 transitivePeerDependencies: - '@effect-ts/otel-node' - esbuild - markdown-wasm - supports-color - '@contentlayer/utils@0.3.4': + '@contentlayer2/utils@0.5.0': dependencies: '@effect-ts/core': 0.60.5 '@effect-ts/otel': 0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0)) - '@effect-ts/otel-exporter-trace-otlp-grpc': 0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/exporter-trace-otlp-grpc@0.39.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0)) '@effect-ts/otel-sdk-trace-node': 0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-node@1.25.1(@opentelemetry/api@1.9.0)) '@js-temporal/polyfill': 0.4.4 '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-trace-otlp-grpc': 0.39.1(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-grpc': 0.51.1(@opentelemetry/api@1.9.0) '@opentelemetry/resources': 1.25.1(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-trace-base': 1.25.1(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-trace-node': 1.25.1(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.25.1 chokidar: 3.6.0 hash-wasm: 4.11.0 - inflection: 2.0.1 - memfs: 3.5.3 + inflection: 3.0.0 + memfs: 4.9.4 oo-ascii-tree: 1.101.0 - ts-pattern: 4.3.0 - type-fest: 3.13.1 + ts-pattern: 5.2.0 + type-fest: 4.23.0 '@cspotcode/source-map-support@0.8.1': dependencies: @@ -5557,15 +5670,6 @@ snapshots: dependencies: '@effect-ts/system': 0.57.5 - '@effect-ts/otel-exporter-trace-otlp-grpc@0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/exporter-trace-otlp-grpc@0.39.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0))': - dependencies: - '@effect-ts/core': 0.60.5 - '@effect-ts/otel': 0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0)) - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-trace-otlp-grpc': 0.39.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 1.25.1(@opentelemetry/api@1.9.0) - '@effect-ts/otel-sdk-trace-node@0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-node@1.25.1(@opentelemetry/api@1.9.0))': dependencies: '@effect-ts/core': 0.60.5 @@ -5584,7 +5688,7 @@ snapshots: '@effect-ts/system@0.57.5': {} - '@esbuild-plugins/node-resolve@0.1.4(esbuild@0.21.5)': + '@esbuild-plugins/node-resolve@0.2.2(esbuild@0.21.5)': dependencies: '@types/resolve': 1.20.6 debug: 4.3.5 @@ -5894,12 +5998,29 @@ snapshots: jsbi: 4.3.0 tslib: 2.6.3 - '@mdx-js/esbuild@2.3.0(esbuild@0.21.5)': + '@jsonjoy.com/base64@1.1.2(tslib@2.6.3)': dependencies: - '@mdx-js/mdx': 2.3.0 + tslib: 2.6.3 + + '@jsonjoy.com/json-pack@1.0.4(tslib@2.6.3)': + dependencies: + '@jsonjoy.com/base64': 1.1.2(tslib@2.6.3) + '@jsonjoy.com/util': 1.2.0(tslib@2.6.3) + hyperdyperid: 1.2.0 + thingies: 1.21.0(tslib@2.6.3) + tslib: 2.6.3 + + '@jsonjoy.com/util@1.2.0(tslib@2.6.3)': + dependencies: + tslib: 2.6.3 + + '@mdx-js/esbuild@3.0.1(esbuild@0.21.5)': + dependencies: + '@mdx-js/mdx': 3.0.1 + '@types/unist': 3.0.2 esbuild: 0.21.5 - node-fetch: 3.3.2 - vfile: 5.3.7 + vfile: 6.0.1 + vfile-message: 4.0.2 transitivePeerDependencies: - supports-color @@ -5925,6 +6046,34 @@ snapshots: transitivePeerDependencies: - supports-color + '@mdx-js/mdx@3.0.1': + dependencies: + '@types/estree': 1.0.5 + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdx': 2.0.13 + collapse-white-space: 2.1.0 + devlop: 1.1.0 + estree-util-build-jsx: 3.0.1 + estree-util-is-identifier-name: 3.0.0 + estree-util-to-js: 2.0.0 + estree-walker: 3.0.3 + hast-util-to-estree: 3.1.0 + hast-util-to-jsx-runtime: 2.3.0 + markdown-extensions: 2.0.0 + periscopic: 3.1.0 + remark-mdx: 3.0.1 + remark-parse: 11.0.0 + remark-rehype: 11.1.0 + source-map: 0.7.4 + unified: 11.0.5 + unist-util-position-from-estree: 2.0.0 + unist-util-stringify-position: 4.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.1 + transitivePeerDependencies: + - supports-color + '@mdx-js/react@2.3.0(react@18.3.1)': dependencies: '@types/mdx': 2.0.13 @@ -6048,7 +6197,7 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.1 - '@opentelemetry/api-logs@0.39.1': + '@opentelemetry/api-logs@0.51.1': dependencies: '@opentelemetry/api': 1.9.0 @@ -6058,48 +6207,48 @@ snapshots: dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core@1.13.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/core@1.24.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/semantic-conventions': 1.13.0 + '@opentelemetry/semantic-conventions': 1.24.1 '@opentelemetry/core@1.25.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/semantic-conventions': 1.25.1 - '@opentelemetry/exporter-trace-otlp-grpc@0.39.1(@opentelemetry/api@1.9.0)': + '@opentelemetry/exporter-trace-otlp-grpc@0.51.1(@opentelemetry/api@1.9.0)': dependencies: '@grpc/grpc-js': 1.11.1 '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.13.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-grpc-exporter-base': 0.39.1(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.39.1(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 1.13.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 1.13.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-grpc-exporter-base': 0.51.1(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.51.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.24.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.24.1(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-exporter-base@0.39.1(@opentelemetry/api@1.9.0)': + '@opentelemetry/otlp-exporter-base@0.51.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.13.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-grpc-exporter-base@0.39.1(@opentelemetry/api@1.9.0)': + '@opentelemetry/otlp-grpc-exporter-base@0.51.1(@opentelemetry/api@1.9.0)': dependencies: '@grpc/grpc-js': 1.11.1 '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.13.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-exporter-base': 0.39.1(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.51.1(@opentelemetry/api@1.9.0) protobufjs: 7.3.2 - '@opentelemetry/otlp-transformer@0.39.1(@opentelemetry/api@1.9.0)': + '@opentelemetry/otlp-transformer@0.51.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.39.1 - '@opentelemetry/core': 1.13.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 1.13.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-logs': 0.39.1(@opentelemetry/api-logs@0.39.1)(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-metrics': 1.13.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 1.13.0(@opentelemetry/api@1.9.0) + '@opentelemetry/api-logs': 0.51.1 + '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.24.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.51.1(@opentelemetry/api-logs@0.51.1)(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 1.24.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.24.1(@opentelemetry/api@1.9.0) '@opentelemetry/propagator-b3@1.25.1(@opentelemetry/api@1.9.0)': dependencies: @@ -6111,11 +6260,11 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) - '@opentelemetry/resources@1.13.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/resources@1.24.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.13.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.13.0 + '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.24.1 '@opentelemetry/resources@1.25.1(@opentelemetry/api@1.9.0)': dependencies: @@ -6123,26 +6272,26 @@ snapshots: '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.25.1 - '@opentelemetry/sdk-logs@0.39.1(@opentelemetry/api-logs@0.39.1)(@opentelemetry/api@1.9.0)': + '@opentelemetry/sdk-logs@0.51.1(@opentelemetry/api-logs@0.51.1)(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.39.1 - '@opentelemetry/core': 1.13.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 1.13.0(@opentelemetry/api@1.9.0) + '@opentelemetry/api-logs': 0.51.1 + '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.24.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-metrics@1.13.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/sdk-metrics@1.24.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.13.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 1.13.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.24.1(@opentelemetry/api@1.9.0) lodash.merge: 4.6.2 - '@opentelemetry/sdk-trace-base@1.13.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/sdk-trace-base@1.24.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.13.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 1.13.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.13.0 + '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.24.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.24.1 '@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0)': dependencies: @@ -6161,7 +6310,7 @@ snapshots: '@opentelemetry/sdk-trace-base': 1.25.1(@opentelemetry/api@1.9.0) semver: 7.6.2 - '@opentelemetry/semantic-conventions@1.13.0': {} + '@opentelemetry/semantic-conventions@1.24.1': {} '@opentelemetry/semantic-conventions@1.25.1': {} @@ -6481,8 +6630,6 @@ snapshots: dependencies: undici-types: 5.26.5 - '@types/parse5@6.0.3': {} - '@types/prop-types@15.7.12': {} '@types/react-dom@18.3.0': @@ -6914,6 +7061,8 @@ snapshots: code-block-writer@13.0.1: {} + collapse-white-space@2.1.0: {} + collect-v8-coverage@1.0.2: {} color-convert@1.9.3: @@ -6976,14 +7125,14 @@ snapshots: content-type@1.0.5: {} - contentlayer@0.3.4(esbuild@0.21.5): + contentlayer2@0.5.0(esbuild@0.21.5): dependencies: - '@contentlayer/cli': 0.3.4(esbuild@0.21.5) - '@contentlayer/client': 0.3.4(esbuild@0.21.5) - '@contentlayer/core': 0.3.4(esbuild@0.21.5) - '@contentlayer/source-files': 0.3.4(esbuild@0.21.5) - '@contentlayer/source-remote-files': 0.3.4(esbuild@0.21.5) - '@contentlayer/utils': 0.3.4 + '@contentlayer2/cli': 0.5.0(esbuild@0.21.5) + '@contentlayer2/client': 0.5.0(esbuild@0.21.5) + '@contentlayer2/core': 0.5.0(esbuild@0.21.5) + '@contentlayer2/source-files': 0.5.0(esbuild@0.21.5) + '@contentlayer2/source-remote-files': 0.5.0(esbuild@0.21.5) + '@contentlayer2/utils': 0.5.0 transitivePeerDependencies: - '@effect-ts/otel-node' - esbuild @@ -7250,8 +7399,6 @@ snapshots: d3: 7.9.0 lodash-es: 4.17.21 - data-uri-to-buffer@4.0.1: {} - data-uri-to-buffer@6.0.2: {} data-urls@3.0.2: @@ -7505,31 +7652,57 @@ snapshots: dependencies: '@types/estree': 1.0.5 + estree-util-attach-comments@3.0.0: + dependencies: + '@types/estree': 1.0.5 + estree-util-build-jsx@2.2.2: dependencies: '@types/estree-jsx': 1.0.5 estree-util-is-identifier-name: 2.1.0 estree-walker: 3.0.3 - estree-util-is-identifier-name@1.1.0: {} + estree-util-build-jsx@3.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + estree-walker: 3.0.3 estree-util-is-identifier-name@2.1.0: {} + estree-util-is-identifier-name@3.0.0: {} + estree-util-to-js@1.2.0: dependencies: '@types/estree-jsx': 1.0.5 astring: 1.8.6 source-map: 0.7.4 + estree-util-to-js@2.0.0: + dependencies: + '@types/estree-jsx': 1.0.5 + astring: 1.8.6 + source-map: 0.7.4 + estree-util-value-to-estree@1.3.0: dependencies: is-plain-obj: 3.0.0 + estree-util-value-to-estree@3.1.2: + dependencies: + '@types/estree': 1.0.5 + estree-util-visit@1.2.1: dependencies: '@types/estree-jsx': 1.0.5 '@types/unist': 2.0.10 + estree-util-visit@2.0.0: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/unist': 3.0.2 + estree-walker@3.0.3: dependencies: '@types/estree': 1.0.5 @@ -7596,11 +7769,6 @@ snapshots: dependencies: bser: 2.1.1 - fetch-blob@3.2.0: - dependencies: - node-domexception: 1.0.0 - web-streams-polyfill: 3.3.3 - file-type@18.7.0: dependencies: readable-web-to-node-stream: 3.0.2 @@ -7637,10 +7805,6 @@ snapshots: format@0.2.2: {} - formdata-polyfill@4.0.10: - dependencies: - fetch-blob: 3.2.0 - fraction.js@4.3.7: {} fresh@0.5.2: {} @@ -7651,8 +7815,6 @@ snapshots: jsonfile: 6.1.0 universalify: 2.0.1 - fs-monkey@1.0.6: {} - fs.realpath@1.0.0: {} fsevents@2.3.2: @@ -7823,16 +7985,6 @@ snapshots: vfile: 6.0.1 vfile-message: 4.0.2 - hast-util-from-parse5@7.1.2: - dependencies: - '@types/hast': 2.3.10 - '@types/unist': 2.0.10 - hastscript: 7.2.0 - property-information: 6.5.0 - vfile: 5.3.7 - vfile-location: 4.1.0 - web-namespaces: 2.0.1 - hast-util-from-parse5@8.0.1: dependencies: '@types/hast': 3.0.4 @@ -7848,28 +8000,10 @@ snapshots: dependencies: '@types/hast': 3.0.4 - hast-util-parse-selector@3.1.1: - dependencies: - '@types/hast': 2.3.10 - hast-util-parse-selector@4.0.0: dependencies: '@types/hast': 3.0.4 - hast-util-raw@7.2.3: - dependencies: - '@types/hast': 2.3.10 - '@types/parse5': 6.0.3 - hast-util-from-parse5: 7.1.2 - hast-util-to-parse5: 7.1.0 - html-void-elements: 2.0.1 - parse5: 6.0.1 - unist-util-position: 4.0.4 - unist-util-visit: 4.1.2 - vfile: 5.3.7 - web-namespaces: 2.0.1 - zwitch: 2.0.4 - hast-util-raw@9.0.4: dependencies: '@types/hast': 3.0.4 @@ -7906,28 +8040,61 @@ snapshots: transitivePeerDependencies: - supports-color - hast-util-to-html@8.0.4: + hast-util-to-estree@3.1.0: dependencies: - '@types/hast': 2.3.10 - '@types/unist': 2.0.10 + '@types/estree': 1.0.5 + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + estree-util-attach-comments: 3.0.0 + estree-util-is-identifier-name: 3.0.0 + hast-util-whitespace: 3.0.0 + mdast-util-mdx-expression: 2.0.0 + mdast-util-mdx-jsx: 3.1.2 + mdast-util-mdxjs-esm: 2.0.1 + property-information: 6.5.0 + space-separated-tokens: 2.0.2 + style-to-object: 0.4.4 + unist-util-position: 5.0.0 + zwitch: 2.0.4 + transitivePeerDependencies: + - supports-color + + hast-util-to-html@9.0.1: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.2 ccount: 2.0.1 comma-separated-tokens: 2.0.3 - hast-util-raw: 7.2.3 - hast-util-whitespace: 2.0.1 - html-void-elements: 2.0.1 + hast-util-raw: 9.0.4 + 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-parse5@7.1.0: + hast-util-to-jsx-runtime@2.3.0: dependencies: - '@types/hast': 2.3.10 + '@types/estree': 1.0.5 + '@types/hast': 3.0.4 + '@types/unist': 3.0.2 comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + hast-util-whitespace: 3.0.0 + mdast-util-mdx-expression: 2.0.0 + mdast-util-mdx-jsx: 3.1.2 + mdast-util-mdxjs-esm: 2.0.1 property-information: 6.5.0 space-separated-tokens: 2.0.2 - web-namespaces: 2.0.1 - zwitch: 2.0.4 + style-to-object: 1.0.6 + unist-util-position: 5.0.0 + vfile-message: 4.0.2 + transitivePeerDependencies: + - supports-color hast-util-to-parse5@8.0.0: dependencies: @@ -7948,13 +8115,9 @@ snapshots: hast-util-whitespace@2.0.1: {} - hastscript@7.2.0: + hast-util-whitespace@3.0.0: dependencies: - '@types/hast': 2.3.10 - comma-separated-tokens: 2.0.3 - hast-util-parse-selector: 3.1.1 - property-information: 6.5.0 - space-separated-tokens: 2.0.2 + '@types/hast': 3.0.4 hastscript@8.0.0: dependencies: @@ -7978,8 +8141,6 @@ snapshots: dependencies: cheerio: 1.0.0-rc.12 - html-void-elements@2.0.1: {} - html-void-elements@3.0.0: {} htmlparser2@8.0.2: @@ -8040,6 +8201,8 @@ snapshots: human-signals@2.1.0: {} + hyperdyperid@1.2.0: {} + iconv-lite@0.6.3: dependencies: safer-buffer: 2.1.2 @@ -8059,7 +8222,7 @@ snapshots: indent-string@4.0.0: {} - inflection@2.0.1: {} + inflection@3.0.0: {} inflight@1.0.6: dependencies: @@ -8070,6 +8233,8 @@ snapshots: inline-style-parser@0.1.1: {} + inline-style-parser@0.2.3: {} + internal-slot@1.0.7: dependencies: es-errors: 1.3.0 @@ -8885,6 +9050,8 @@ snapshots: markdown-extensions@1.1.1: {} + markdown-extensions@2.0.0: {} + markdown-link-check@3.12.2: dependencies: async: 3.2.5 @@ -8943,11 +9110,33 @@ snapshots: transitivePeerDependencies: - supports-color - mdast-util-frontmatter@1.0.1: + mdast-util-from-markdown@2.0.1: dependencies: - '@types/mdast': 3.0.15 - mdast-util-to-markdown: 1.5.0 - micromark-extension-frontmatter: 1.1.1 + '@types/mdast': 4.0.4 + '@types/unist': 3.0.2 + decode-named-character-reference: 1.0.2 + devlop: 1.1.0 + mdast-util-to-string: 4.0.0 + micromark: 4.0.0 + micromark-util-decode-numeric-character-reference: 2.0.1 + micromark-util-decode-string: 2.0.0 + micromark-util-normalize-identifier: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + unist-util-stringify-position: 4.0.0 + 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-gfm-autolink-literal@1.0.3: dependencies: @@ -9009,6 +9198,17 @@ snapshots: transitivePeerDependencies: - supports-color + mdast-util-mdx-expression@2.0.0: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.1 + mdast-util-to-markdown: 2.1.0 + transitivePeerDependencies: + - supports-color + mdast-util-mdx-jsx@2.1.4: dependencies: '@types/estree-jsx': 1.0.5 @@ -9026,6 +9226,24 @@ snapshots: transitivePeerDependencies: - supports-color + mdast-util-mdx-jsx@3.1.2: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@types/unist': 3.0.2 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.1 + mdast-util-to-markdown: 2.1.0 + parse-entities: 4.0.1 + stringify-entities: 4.0.4 + unist-util-remove-position: 5.0.0 + unist-util-stringify-position: 4.0.0 + vfile-message: 4.0.2 + transitivePeerDependencies: + - supports-color + mdast-util-mdx@2.0.1: dependencies: mdast-util-from-markdown: 1.3.1 @@ -9036,6 +9254,16 @@ snapshots: transitivePeerDependencies: - supports-color + mdast-util-mdx@3.0.0: + dependencies: + mdast-util-from-markdown: 2.0.1 + mdast-util-mdx-expression: 2.0.0 + mdast-util-mdx-jsx: 3.1.2 + mdast-util-mdxjs-esm: 2.0.1 + mdast-util-to-markdown: 2.1.0 + transitivePeerDependencies: + - supports-color + mdast-util-mdxjs-esm@1.3.1: dependencies: '@types/estree-jsx': 1.0.5 @@ -9046,11 +9274,27 @@ snapshots: transitivePeerDependencies: - supports-color + mdast-util-mdxjs-esm@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.1 + mdast-util-to-markdown: 2.1.0 + 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 + unist-util-is: 6.0.0 + mdast-util-to-hast@12.3.0: dependencies: '@types/hast': 2.3.10 @@ -9085,32 +9329,50 @@ snapshots: unist-util-visit: 4.1.2 zwitch: 2.0.4 + mdast-util-to-markdown@2.1.0: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.2 + longest-streak: 3.1.0 + mdast-util-phrasing: 4.1.0 + mdast-util-to-string: 4.0.0 + micromark-util-decode-string: 2.0.0 + unist-util-visit: 5.0.0 + zwitch: 2.0.4 + 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 + mdn-data@2.0.30: {} - mdx-bundler@9.2.1(esbuild@0.21.5): + mdx-bundler@10.0.2(esbuild@0.21.5): dependencies: '@babel/runtime': 7.24.7 - '@esbuild-plugins/node-resolve': 0.1.4(esbuild@0.21.5) + '@esbuild-plugins/node-resolve': 0.2.2(esbuild@0.21.5) '@fal-works/esbuild-plugin-global-externals': 2.1.2 - '@mdx-js/esbuild': 2.3.0(esbuild@0.21.5) + '@mdx-js/esbuild': 3.0.1(esbuild@0.21.5) esbuild: 0.21.5 gray-matter: 4.0.3 - remark-frontmatter: 4.0.1 - remark-mdx-frontmatter: 1.1.1 - uuid: 8.3.2 - vfile: 5.3.7 + remark-frontmatter: 5.0.0 + remark-mdx-frontmatter: 4.0.0 + uuid: 9.0.1 + vfile: 6.0.1 transitivePeerDependencies: - supports-color media-typer@0.3.0: {} - memfs@3.5.3: + memfs@4.9.4: dependencies: - fs-monkey: 1.0.6 + '@jsonjoy.com/json-pack': 1.0.4(tslib@2.6.3) + '@jsonjoy.com/util': 1.2.0(tslib@2.6.3) + tree-dump: 1.0.2(tslib@2.6.3) + tslib: 2.6.3 meow@12.1.1: {} @@ -9162,12 +9424,31 @@ snapshots: micromark-util-types: 1.1.0 uvu: 0.5.6 - micromark-extension-frontmatter@1.1.1: + micromark-core-commonmark@2.0.1: + dependencies: + decode-named-character-reference: 1.0.2 + devlop: 1.1.0 + micromark-factory-destination: 2.0.0 + micromark-factory-label: 2.0.0 + micromark-factory-space: 2.0.0 + micromark-factory-title: 2.0.0 + micromark-factory-whitespace: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-chunked: 2.0.0 + micromark-util-classify-character: 2.0.0 + micromark-util-html-tag-name: 2.0.0 + micromark-util-normalize-identifier: 2.0.0 + micromark-util-resolve-all: 2.0.0 + micromark-util-subtokenize: 2.0.1 + 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: 1.2.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 micromark-extension-gfm-autolink-literal@1.0.5: dependencies: @@ -9248,6 +9529,17 @@ snapshots: micromark-util-types: 1.1.0 uvu: 0.5.6 + micromark-extension-mdx-expression@3.0.0: + dependencies: + '@types/estree': 1.0.5 + devlop: 1.1.0 + micromark-factory-mdx-expression: 2.0.1 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-events-to-acorn: 2.0.2 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + micromark-extension-mdx-jsx@1.0.5: dependencies: '@types/acorn': 4.0.6 @@ -9261,10 +9553,27 @@ snapshots: uvu: 0.5.6 vfile-message: 3.1.4 + micromark-extension-mdx-jsx@3.0.0: + dependencies: + '@types/acorn': 4.0.6 + '@types/estree': 1.0.5 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + micromark-factory-mdx-expression: 2.0.1 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + vfile-message: 4.0.2 + micromark-extension-mdx-md@1.0.1: dependencies: micromark-util-types: 1.1.0 + micromark-extension-mdx-md@2.0.0: + dependencies: + micromark-util-types: 2.0.0 + micromark-extension-mdxjs-esm@1.0.5: dependencies: '@types/estree': 1.0.5 @@ -9277,6 +9586,18 @@ snapshots: uvu: 0.5.6 vfile-message: 3.1.4 + micromark-extension-mdxjs-esm@3.0.0: + dependencies: + '@types/estree': 1.0.5 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.1 + micromark-util-character: 2.1.0 + micromark-util-events-to-acorn: 2.0.2 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + unist-util-position-from-estree: 2.0.0 + vfile-message: 4.0.2 + micromark-extension-mdxjs@1.0.1: dependencies: acorn: 8.12.0 @@ -9288,12 +9609,29 @@ snapshots: micromark-util-combine-extensions: 1.1.0 micromark-util-types: 1.1.0 + micromark-extension-mdxjs@3.0.0: + dependencies: + acorn: 8.12.0 + acorn-jsx: 5.3.2(acorn@8.12.0) + micromark-extension-mdx-expression: 3.0.0 + micromark-extension-mdx-jsx: 3.0.0 + micromark-extension-mdx-md: 2.0.0 + micromark-extension-mdxjs-esm: 3.0.0 + 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 @@ -9301,6 +9639,13 @@ snapshots: micromark-util-types: 1.1.0 uvu: 0.5.6 + micromark-factory-label@2.0.0: + dependencies: + devlop: 1.1.0 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + micromark-factory-mdx-expression@1.0.9: dependencies: '@types/estree': 1.0.5 @@ -9312,11 +9657,27 @@ snapshots: uvu: 0.5.6 vfile-message: 3.1.4 + micromark-factory-mdx-expression@2.0.1: + dependencies: + '@types/estree': 1.0.5 + devlop: 1.1.0 + micromark-util-character: 2.1.0 + micromark-util-events-to-acorn: 2.0.2 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + 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 @@ -9324,6 +9685,13 @@ snapshots: 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 + micromark-util-character: 2.1.0 + 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 @@ -9331,6 +9699,13 @@ snapshots: 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 + micromark-util-character: 2.1.0 + 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 @@ -9345,21 +9720,40 @@ snapshots: 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 @@ -9367,6 +9761,13 @@ snapshots: 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 + micromark-util-character: 2.1.0 + 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: {} @@ -9382,16 +9783,37 @@ snapshots: uvu: 0.5.6 vfile-message: 3.1.4 + micromark-util-events-to-acorn@2.0.2: + dependencies: + '@types/acorn': 4.0.6 + '@types/estree': 1.0.5 + '@types/unist': 3.0.2 + devlop: 1.1.0 + estree-util-visit: 2.0.0 + micromark-util-symbol: 2.0.0 + 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 @@ -9411,6 +9833,13 @@ snapshots: micromark-util-types: 1.1.0 uvu: 0.5.6 + micromark-util-subtokenize@2.0.1: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + micromark-util-symbol@1.1.0: {} micromark-util-symbol@2.0.0: {} @@ -9441,6 +9870,28 @@ snapshots: transitivePeerDependencies: - supports-color + micromark@4.0.0: + dependencies: + '@types/debug': 4.1.12 + debug: 4.3.5 + decode-named-character-reference: 1.0.2 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.1 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-chunked: 2.0.0 + micromark-util-combine-extensions: 2.0.0 + micromark-util-decode-numeric-character-reference: 2.0.1 + micromark-util-encode: 2.0.0 + micromark-util-normalize-identifier: 2.0.0 + micromark-util-resolve-all: 2.0.0 + micromark-util-sanitize-uri: 2.0.0 + micromark-util-subtokenize: 2.0.1 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + transitivePeerDependencies: + - supports-color + micromatch@4.0.7: dependencies: braces: 3.0.3 @@ -9544,11 +9995,11 @@ snapshots: next-compose-plugins@2.2.1: {} - next-contentlayer@0.3.4(contentlayer@0.3.4(esbuild@0.21.5))(esbuild@0.21.5)(next@14.2.4(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + next-contentlayer2@0.5.0(contentlayer2@0.5.0(esbuild@0.21.5))(esbuild@0.21.5)(next@14.2.4(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@contentlayer/core': 0.3.4(esbuild@0.21.5) - '@contentlayer/utils': 0.3.4 - contentlayer: 0.3.4(esbuild@0.21.5) + '@contentlayer2/core': 0.5.0(esbuild@0.21.5) + '@contentlayer2/utils': 0.5.0 + contentlayer2: 0.5.0(esbuild@0.21.5) next: 14.2.4(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(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) @@ -9705,14 +10156,6 @@ snapshots: lower-case: 2.0.2 tslib: 2.6.3 - node-domexception@1.0.0: {} - - node-fetch@3.3.2: - dependencies: - data-uri-to-buffer: 4.0.1 - fetch-blob: 3.2.0 - formdata-polyfill: 4.0.10 - node-int64@0.4.0: {} node-releases@2.0.14: {} @@ -9867,8 +10310,6 @@ snapshots: domhandler: 5.0.3 parse5: 7.1.2 - parse5@6.0.1: {} - parse5@7.1.2: dependencies: entities: 4.5.0 @@ -10182,18 +10623,20 @@ snapshots: hast-util-raw: 9.0.4 vfile: 6.0.1 - rehype-stringify@9.0.4: + rehype-stringify@10.0.0: dependencies: - '@types/hast': 2.3.10 - hast-util-to-html: 8.0.4 - unified: 10.1.2 + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.1 + unified: 11.0.5 - remark-frontmatter@4.0.1: + remark-frontmatter@5.0.0: dependencies: - '@types/mdast': 3.0.15 - mdast-util-frontmatter: 1.0.1 - micromark-extension-frontmatter: 1.1.1 - unified: 10.1.2 + '@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-gfm@3.0.1: dependencies: @@ -10211,12 +10654,14 @@ snapshots: micromark-extension-math: 2.1.2 unified: 10.1.2 - remark-mdx-frontmatter@1.1.1: + remark-mdx-frontmatter@4.0.0: dependencies: - estree-util-is-identifier-name: 1.1.0 - estree-util-value-to-estree: 1.3.0 - js-yaml: 4.1.0 + '@types/mdast': 4.0.4 + estree-util-is-identifier-name: 3.0.0 + estree-util-value-to-estree: 3.1.2 toml: 3.0.0 + unified: 11.0.5 + yaml: 2.4.5 remark-mdx@2.3.0: dependencies: @@ -10225,6 +10670,13 @@ snapshots: transitivePeerDependencies: - supports-color + remark-mdx@3.0.1: + dependencies: + mdast-util-mdx: 3.0.0 + micromark-extension-mdxjs: 3.0.0 + transitivePeerDependencies: + - supports-color + remark-parse@10.0.2: dependencies: '@types/mdast': 3.0.15 @@ -10233,6 +10685,15 @@ snapshots: transitivePeerDependencies: - supports-color + remark-parse@11.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.1 + micromark-util-types: 2.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + remark-reading-time@2.0.1: dependencies: estree-util-is-identifier-name: 2.1.0 @@ -10247,6 +10708,14 @@ snapshots: mdast-util-to-hast: 12.3.0 unified: 10.1.2 + remark-rehype@11.1.0: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + mdast-util-to-hast: 13.2.0 + unified: 11.0.5 + vfile: 6.0.1 + remove-accents@0.5.0: {} repeat-string@1.6.1: {} @@ -10526,6 +10995,10 @@ snapshots: dependencies: inline-style-parser: 0.1.1 + style-to-object@1.0.6: + dependencies: + inline-style-parser: 0.2.3 + styled-jsx@5.1.1(@babel/core@7.24.7)(react@18.3.1): dependencies: client-only: 0.0.1 @@ -10617,6 +11090,10 @@ snapshots: dependencies: any-promise: 1.3.0 + thingies@1.21.0(tslib@2.6.3): + dependencies: + tslib: 2.6.3 + tinybench@2.8.0: {} tinypool@0.7.0: {} @@ -10668,6 +11145,10 @@ snapshots: dependencies: punycode: 2.3.1 + tree-dump@1.0.2(tslib@2.6.3): + dependencies: + tslib: 2.6.3 + tree-kill@1.2.2: {} trim-lines@3.0.1: {} @@ -10701,7 +11182,7 @@ snapshots: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 - ts-pattern@4.3.0: {} + ts-pattern@5.2.0: {} tslib@2.6.3: {} @@ -10742,7 +11223,7 @@ snapshots: type-fest@2.19.0: {} - type-fest@3.13.1: {} + type-fest@4.23.0: {} type-is@1.6.18: dependencies: @@ -10765,6 +11246,16 @@ snapshots: trough: 2.2.0 vfile: 5.3.7 + unified@11.0.5: + dependencies: + '@types/unist': 3.0.2 + bail: 2.0.2 + devlop: 1.1.0 + extend: 3.0.2 + is-plain-obj: 4.1.0 + trough: 2.2.0 + vfile: 6.0.1 + unique-string@3.0.0: dependencies: crypto-random-string: 4.0.0 @@ -10788,6 +11279,10 @@ snapshots: dependencies: '@types/unist': 2.0.10 + unist-util-position-from-estree@2.0.0: + dependencies: + '@types/unist': 3.0.2 + unist-util-position@4.0.4: dependencies: '@types/unist': 2.0.10 @@ -10870,8 +11365,6 @@ snapshots: util-deprecate@1.0.2: {} - uuid@8.3.2: {} - uuid@9.0.1: {} uvu@0.5.6: @@ -10891,11 +11384,6 @@ snapshots: vary@1.1.2: {} - vfile-location@4.1.0: - dependencies: - '@types/unist': 2.0.10 - vfile: 5.3.7 - vfile-location@5.0.2: dependencies: '@types/unist': 3.0.2 @@ -11019,8 +11507,6 @@ snapshots: web-namespaces@2.0.1: {} - web-streams-polyfill@3.3.3: {} - web-worker@1.3.0: {} webidl-conversions@4.0.2: {} From 9affdbfd8e577b46e95781e559b499c3b22f5863 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lui=CC=81s=20Arteiro?= Date: Thu, 25 Jul 2024 23:45:14 +0100 Subject: [PATCH 03/14] chore: Fixing links. --- src/pages/index.mdx | 10 +++++----- src/pages/reference_api/index.mdx | 2 +- src/pages/reference_api/person.mdx | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/pages/index.mdx b/src/pages/index.mdx index 5cad4ce..0f49e12 100644 --- a/src/pages/index.mdx +++ b/src/pages/index.mdx @@ -40,15 +40,15 @@ features, and best practices for using `Nextra`. ## Getting Started -To get started with Nextra, check out the [About](about) page +To get started with Nextra, check out the [About](./about) page to learn more about its capabilities and features. -If you need any assistance, visit our [Contact](contact) page +If you need any assistance, visit our [Contact](./contact) page to find out how to reach us. Explore the sections below to dive deeper into specific topics: -- [About Nextra](about) -- [API Reference](reference_api) -- [Contact Us](contact) +- [About Nextra](/about) +- [API Reference](/reference_api) +- [Contact Us](/contact) We hope you find Nextra useful for your documentation needs! diff --git a/src/pages/reference_api/index.mdx b/src/pages/reference_api/index.mdx index 7a3c907..f9f948d 100644 --- a/src/pages/reference_api/index.mdx +++ b/src/pages/reference_api/index.mdx @@ -12,4 +12,4 @@ Each section includes detailed descriptions, usage examples, and response formats to help you get started quickly and efficiently. Check out the individual API sections for more details: -- [About API](reference_api/about) \ No newline at end of file +- [About API](/reference_api/about) \ No newline at end of file diff --git a/src/pages/reference_api/person.mdx b/src/pages/reference_api/person.mdx index 490d3aa..6dfc936 100644 --- a/src/pages/reference_api/person.mdx +++ b/src/pages/reference_api/person.mdx @@ -150,4 +150,4 @@ Whether you need to add a new `person`, update or remove existing ones, these endpoints offer the flexibility to handle all person-related tasks efficiently. For more information on other available APIs, -refer back to the [API Reference](index). +refer back to the [API Reference](/index). From 6c3f2968c85a632fce089b4db190bad03efbab00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lui=CC=81s=20Arteiro?= Date: Thu, 25 Jul 2024 23:59:35 +0100 Subject: [PATCH 04/14] feat: Adding linting all links. --- contentlayer.config.js | 11 +++++++---- package.json | 6 ++++-- pnpm-lock.yaml | 3 +++ scripts/link-check.mjs | 25 +++++++++++++++++-------- 4 files changed, 31 insertions(+), 14 deletions(-) diff --git a/contentlayer.config.js b/contentlayer.config.js index 3386218..b4b7fc0 100644 --- a/contentlayer.config.js +++ b/contentlayer.config.js @@ -1,23 +1,26 @@ import { defineDocumentType, makeSource } from 'contentlayer2/source-files' -const computedFields = { +const computedFieldsPage = { slug: { type: 'string', - resolve: (doc) => doc._raw.sourceFileName.replace(/\.md$/, ''), + resolve: (doc) => doc._raw.sourceFileName.replace(/\.mdx$/, ''), }, } export const Page = defineDocumentType(() => ({ name: 'Page', filePathPattern: `**/*.mdx`, - computedFields, + computedFieldsPage, })) export const MetaJson = defineDocumentType(() => ({ name: 'MetaJson', filePathPattern: `**/_meta.json`, })) + export default makeSource({ contentDirPath: 'src/pages', - documentTypes: [Page, MetaJson], + documentTypes: [Page], + onUnknownDocuments: 'skip-ignore' + }) diff --git a/package.json b/package.json index c03adb6..a69a987 100644 --- a/package.json +++ b/package.json @@ -10,8 +10,9 @@ "e2e:test:show-report": "npx monocart show-report ./e2e-test-results/monocart-report.html", "test": "jest --runInBand", "types:check": "tsc --noEmit", - "link:check": "pnpm run contentlayer && node ./scripts/link-check.mjs", - "contentlayer": "contentlayer2 build --verbose" + "lint:link-check-all": "concurrently -n start_server,link_check \"pnpm run dev\" \"pnpm lint:contentlayer-build && pnpm lint:link-check\" -k", + "lint:link-check": "node ./scripts/link-check.mjs", + "lint:contentlayer-build": "contentlayer2 build --verbose" }, "dependencies": { "next": "^14.2.4", @@ -29,6 +30,7 @@ "@types/jest": "^29.5.12", "@types/node": "20.14.5", "autoprefixer": "^10.4.19", + "concurrently": "^8.0.0", "contentlayer2": "^0.5.0", "dotenv": "^16.4.5", "fast-glob": "^3.3.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 922518b..b421b59 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -48,6 +48,9 @@ importers: autoprefixer: specifier: ^10.4.19 version: 10.4.19(postcss@8.4.38) + concurrently: + specifier: ^8.0.0 + version: 8.2.2 contentlayer2: specifier: ^0.5.0 version: 0.5.0(esbuild@0.21.5) diff --git a/scripts/link-check.mjs b/scripts/link-check.mjs index 32b05d4..efedc43 100644 --- a/scripts/link-check.mjs +++ b/scripts/link-check.mjs @@ -2,37 +2,46 @@ import markdownLinkCheck from "markdown-link-check"; import { allDocuments } from "../.contentlayer/generated/index.mjs"; const baseUrl = process.argv.find((arg) => arg.includes("--baseUrl")); -const allBody = allDocuments.map(({ body }) => body.raw).join("\n--- NEXT ARTICLE ---\n"); +const allBody = allDocuments.map(({ body }) => body.raw).join("\n--- NEXT PAGE ---\n"); +// Options for `markdown-lint-check` const configOpts = { projectBaseUrl: baseUrl ? baseUrl.replace("--baseUrl=", "https://") : "http://localhost:3000", replacementPatterns: [ + // Match links like `[example](/example) { pattern: "^/", replacement: "{{BASEURL}}/", }, + // Match links like `[example](./example) + { + pattern: "^./", + replacement: "{{BASEURL}}/", + }, ], }; +// NOTE: +// Runs `markdown-link-check` +// If this step fails, check the output. You should find "input". It shows the link that caused the error. +// Most likely the reason it's failing is because the link doesn't start with `./` or `/` (e.g. [example](index.md), instead of [example](./index.md)). markdownLinkCheck(allBody, configOpts, function (error, linkCheckresults) { try { if (error) throw new Error(error); const results = linkCheckresults.map((linkCheckResult) => ({ ...linkCheckResult })); - console.log(results) const hasDeadLink = results.find((result) => result.status.includes("dead")); - results.forEach(({ link, status}) => { + results.forEach(({ link, status }) => { console.log("%s is %s", link, status === "dead" ? "dead 💀" : "alive 🥳"); }); if (hasDeadLink) { throw new Error("Dead link found.👆💀"); } else { - console.log("All links are valid! 🙌") + console.log("All links are valid! 🙌"); } - - } catch(error) { - throw Error(error.message) + } catch (error) { + console.error(error.message); } -}); +}); \ No newline at end of file From a8f71ca7c7d81b2afcde6f6be4cf7143bec11252 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lui=CC=81s=20Arteiro?= Date: Fri, 26 Jul 2024 01:04:32 +0100 Subject: [PATCH 05/14] lint: Adding markdownlint --- .markdownlint-cli2.mjs | 19 +++ package.json | 3 + pnpm-lock.yaml | 128 ++++++++++++++++++ src/pages/about.mdx | 22 +-- src/pages/contact.mdx | 11 +- src/pages/index.mdx | 16 +-- src/pages/reference_api/about.mdx | 11 +- src/pages/reference_api/index.mdx | 17 +-- src/pages/reference_api/mega_private.mdx | 2 +- .../reference_api/mega_private/hello.mdx | 4 +- src/pages/reference_api/person.mdx | 37 +++-- 11 files changed, 214 insertions(+), 56 deletions(-) create mode 100644 .markdownlint-cli2.mjs diff --git a/.markdownlint-cli2.mjs b/.markdownlint-cli2.mjs new file mode 100644 index 0000000..81c0d2a --- /dev/null +++ b/.markdownlint-cli2.mjs @@ -0,0 +1,19 @@ +// @ts-check + +const options = { + config: { + default: true, + "relative-links": true, + MD041: false, + MD013: false, + "no-inline-html": { + // Add React components we want to allow here + allowed_elements: ["LoginOrUserInfo", "Info"], + }, + }, + globs: ["src/pages/**/*.{md,mdx}"], + ignores: ["**/node_modules", "theme", "scripts"], + customRules: ["markdownlint-rule-relative-links"], +}; + +export default options; \ No newline at end of file diff --git a/package.json b/package.json index a69a987..cc75a42 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "e2e:test:show-report": "npx monocart show-report ./e2e-test-results/monocart-report.html", "test": "jest --runInBand", "types:check": "tsc --noEmit", + "lint:fix-markdown": "markdownlint-cli2 --fix", "lint:link-check-all": "concurrently -n start_server,link_check \"pnpm run dev\" \"pnpm lint:contentlayer-build && pnpm lint:link-check\" -k", "lint:link-check": "node ./scripts/link-check.mjs", "lint:contentlayer-build": "contentlayer2 build --verbose" @@ -37,6 +38,8 @@ "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", "markdown-link-check": "^3.12.2", + "markdownlint-cli2": "^0.13.0", + "markdownlint-rule-relative-links": "^3.0.0", "monocart-reporter": "^2.5.0", "next-contentlayer2": "^0.5.0", "open-cli": "^8.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b421b59..48e6839 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -69,6 +69,12 @@ importers: markdown-link-check: specifier: ^3.12.2 version: 3.12.2 + markdownlint-cli2: + specifier: ^0.13.0 + version: 0.13.0 + markdownlint-rule-relative-links: + specifier: ^3.0.0 + version: 3.0.0 monocart-reporter: specifier: ^2.5.0 version: 2.5.2 @@ -1210,6 +1216,10 @@ packages: '@sinclair/typebox@0.27.8': resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + '@sindresorhus/merge-streams@2.3.0': + resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} + engines: {node: '>=18'} + '@sinonjs/commons@3.0.1': resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} @@ -2598,6 +2608,10 @@ packages: resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + globby@14.0.1: + resolution: {integrity: sha512-jOMLD2Z7MAhyG8aJpNOpmziMOP4rPLcc95oQPKXBazW82z+CEgPFBQvEpRUa1KeIMUJo4Wsm+q6uzO/Q/4BksQ==} + engines: {node: '>=18'} + gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} @@ -3346,6 +3360,9 @@ packages: link-check@5.3.0: resolution: {integrity: sha512-Jhb7xueDgQgBaZzkfOtAyOZEZAIMJQIjUpYD2QY/zEB+LKTY1tWiBwZg8QIDbzQdPBOcqzg7oLQDNcES/tQmXg==} + linkify-it@5.0.0: + resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} + load-tsconfig@0.2.5: resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -3438,6 +3455,10 @@ packages: resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} engines: {node: '>=16'} + markdown-it@14.1.0: + resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} + hasBin: true + markdown-link-check@3.12.2: resolution: {integrity: sha512-GWMwSvxuZn+uGGydi5yywnnDZy08SGps4I/63xqvWT7lxtH4cVLnhgZZYtEcPz/QvgPg9vbH2rvWpa29owMtHA==} hasBin: true @@ -3448,6 +3469,28 @@ packages: markdown-table@3.0.3: resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==} + markdownlint-cli2-formatter-default@0.0.4: + resolution: {integrity: sha512-xm2rM0E+sWgjpPn1EesPXx5hIyrN2ddUnUwnbCsD/ONxYtw3PX6LydvdH6dciWAoFDpwzbHM1TO7uHfcMd6IYg==} + peerDependencies: + markdownlint-cli2: '>=0.0.4' + + markdownlint-cli2@0.13.0: + resolution: {integrity: sha512-Pg4nF7HlopU97ZXtrcVISWp3bdsuc5M0zXyLp2/sJv2zEMlInrau0ZKK482fQURzVezJzWBpNmu4u6vGAhij+g==} + engines: {node: '>=18'} + hasBin: true + + markdownlint-micromark@0.1.9: + resolution: {integrity: sha512-5hVs/DzAFa8XqYosbEAEg6ok6MF2smDj89ztn9pKkCtdKHVdPQuGMH7frFfYL9mLkvfFe4pTyAMffLbjf3/EyA==} + engines: {node: '>=18'} + + markdownlint-rule-relative-links@3.0.0: + resolution: {integrity: sha512-+Ek2J8kXKtL8IcjmPYBsxtS37etKIbPE85aj/ehwSlxcWIlT0BCsA/SPHZlIICiZON786XVrLStMCJ1x25D3oA==} + engines: {node: '>=16.0.0', npm: '>=9.0.0'} + + markdownlint@0.34.0: + resolution: {integrity: sha512-qwGyuyKwjkEMOJ10XN6OTKNOVYvOIi35RNvDLNxTof5s8UmyGHlCdpngRHoRGNvQVGuxO3BJ7uNSgdeX166WXw==} + engines: {node: '>=18'} + marked@12.0.2: resolution: {integrity: sha512-qXUm7e/YKFoqFPYPa3Ukg9xlI5cyAtGmyEIzMfW//m6kXwCy2Ps9DYf5ioijFKQ8qyuscrHoY04iJGctu2Kg0Q==} engines: {node: '>= 18'} @@ -3543,6 +3586,9 @@ packages: mdn-data@2.0.30: resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + mdurl@2.0.0: + resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} + mdx-bundler@10.0.2: resolution: {integrity: sha512-0wF0zoCv+Ms4G+eSlk/jaKYoJHc0oXBaOma3kYlFJiKq9H8h41Dd66ioDBGF4noy80Pf7KTBQlyHfEpTqVml7A==} engines: {node: '>=18', npm: '>=6'} @@ -3766,6 +3812,10 @@ packages: micromark@4.0.0: resolution: {integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==} + micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + micromatch@4.0.7: resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} engines: {node: '>=8.6'} @@ -4143,6 +4193,10 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} + path-type@5.0.0: + resolution: {integrity: sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==} + engines: {node: '>=12'} + pathe@1.1.2: resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} @@ -4316,6 +4370,10 @@ packages: psl@1.9.0: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} + punycode.js@2.3.1: + resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} + engines: {node: '>=6'} + punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -4957,12 +5015,19 @@ packages: engines: {node: '>=14.17'} hasBin: true + uc.micro@2.1.0: + resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} + ufo@1.5.3: resolution: {integrity: sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==} undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + unicorn-magic@0.1.0: + resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} + engines: {node: '>=18'} + unified@10.1.2: resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} @@ -6401,6 +6466,8 @@ snapshots: '@sinclair/typebox@0.27.8': {} + '@sindresorhus/merge-streams@2.3.0': {} + '@sinonjs/commons@3.0.1': dependencies: type-detect: 4.0.8 @@ -7919,6 +7986,15 @@ snapshots: merge2: 1.4.1 slash: 4.0.0 + globby@14.0.1: + dependencies: + '@sindresorhus/merge-streams': 2.3.0 + fast-glob: 3.3.2 + ignore: 5.3.1 + path-type: 5.0.0 + slash: 5.1.0 + unicorn-magic: 0.1.0 + gopd@1.0.1: dependencies: get-intrinsic: 1.2.4 @@ -8980,6 +9056,10 @@ snapshots: transitivePeerDependencies: - supports-color + linkify-it@5.0.0: + dependencies: + uc.micro: 2.1.0 + load-tsconfig@0.2.5: {} local-pkg@0.4.3: {} @@ -9055,6 +9135,15 @@ snapshots: markdown-extensions@2.0.0: {} + markdown-it@14.1.0: + dependencies: + argparse: 2.0.1 + entities: 4.5.0 + linkify-it: 5.0.0 + mdurl: 2.0.0 + punycode.js: 2.3.1 + uc.micro: 2.1.0 + markdown-link-check@3.12.2: dependencies: async: 3.2.5 @@ -9076,6 +9165,30 @@ snapshots: markdown-table@3.0.3: {} + markdownlint-cli2-formatter-default@0.0.4(markdownlint-cli2@0.13.0): + dependencies: + markdownlint-cli2: 0.13.0 + + markdownlint-cli2@0.13.0: + dependencies: + globby: 14.0.1 + js-yaml: 4.1.0 + jsonc-parser: 3.2.1 + markdownlint: 0.34.0 + markdownlint-cli2-formatter-default: 0.0.4(markdownlint-cli2@0.13.0) + micromatch: 4.0.5 + + markdownlint-micromark@0.1.9: {} + + markdownlint-rule-relative-links@3.0.0: + dependencies: + markdown-it: 14.1.0 + + markdownlint@0.34.0: + dependencies: + markdown-it: 14.1.0 + markdownlint-micromark: 0.1.9 + marked@12.0.2: {} match-sorter@6.3.4: @@ -9353,6 +9466,8 @@ snapshots: mdn-data@2.0.30: {} + mdurl@2.0.0: {} + mdx-bundler@10.0.2(esbuild@0.21.5): dependencies: '@babel/runtime': 7.24.7 @@ -9895,6 +10010,11 @@ snapshots: transitivePeerDependencies: - supports-color + micromatch@4.0.5: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + micromatch@4.0.7: dependencies: braces: 3.0.3 @@ -10343,6 +10463,8 @@ snapshots: path-type@4.0.0: {} + path-type@5.0.0: {} + pathe@1.1.2: {} pathval@1.1.1: {} @@ -10545,6 +10667,8 @@ snapshots: psl@1.9.0: {} + punycode.js@2.3.1: {} + punycode@2.3.1: {} pure-rand@6.1.0: {} @@ -11235,10 +11359,14 @@ snapshots: typescript@5.4.5: {} + uc.micro@2.1.0: {} + ufo@1.5.3: {} undici-types@5.26.5: {} + unicorn-magic@0.1.0: {} + unified@10.1.2: dependencies: '@types/unist': 2.0.10 diff --git a/src/pages/about.mdx b/src/pages/about.mdx index 4f27e3e..e7cf124 100644 --- a/src/pages/about.mdx +++ b/src/pages/about.mdx @@ -1,18 +1,18 @@ # About Nextra -`Nextra` is a powerful static site generator designed specifically -for creating modern and highly customizable documentation websites. -Built on top of `Next.js`, it leverages -[React](https://github.com/dwyl/learn-react/issues/23) -capabilities +`Nextra` is a powerful static site generator designed specifically +for creating modern and highly customizable documentation websites. +Built on top of `Next.js`, it leverages +[React](https://github.com/dwyl/learn-react/issues/23) +capabilities to deliver a seamless and efficient experience for developers. -With `Nextra`, you can easily create documentation sites -with automatic navigation, markdown support, -and themable design options. -Whether you are documenting an API, creating a knowledge base, -or writing a user manual, +With `Nextra`, you can easily create documentation sites +with automatic navigation, markdown support, +and themable design options. +Whether you are documenting an API, creating a knowledge base, +or writing a user manual, `Nextra` provides the tools you need to get the job done. -Learn more about the features and capabilities of `Nextra` +Learn more about the features and capabilities of `Nextra` as you explore this demo. diff --git a/src/pages/contact.mdx b/src/pages/contact.mdx index 8b5081e..b160853 100644 --- a/src/pages/contact.mdx +++ b/src/pages/contact.mdx @@ -1,22 +1,23 @@ # Contact Us -We'd love to hear from you! -If you have any questions, feedback, or suggestions regarding `Nextra`, +We'd love to hear from you! +If you have any questions, feedback, or suggestions regarding `Nextra`, please feel free to reach out. ## Email -You can email us at +You can email us at [support@nextra.io](mailto:support@nextra.io). ## Social Media Follow us on social media to stay updated with the latest news and updates: + - [X](https://x.com/dwyl) - [GitHub](https://github.com/dwyl/nextra-demo) ## Community -Join our community on -[Discord](https://discord.gg/nextra) +Join our community on +[Discord](https://discord.gg/nextra) to connect with other `people`, ask questions, and share your experiences. diff --git a/src/pages/index.mdx b/src/pages/index.mdx index 0f49e12..eb26010 100644 --- a/src/pages/index.mdx +++ b/src/pages/index.mdx @@ -26,10 +26,10 @@ export const Info = () => { # Welcome to Nextra Documentation -Welcome to the `Nextra` documentation site! -`Nextra` is a modern static site generator -optimized for creating high-quality documentation websites with ease. -This documentation will guide you through the setup, +Welcome to the `Nextra` documentation site! +`Nextra` is a modern static site generator +optimized for creating high-quality documentation websites with ease. +This documentation will guide you through the setup, features, and best practices for using `Nextra`. --- @@ -40,12 +40,13 @@ features, and best practices for using `Nextra`. ## Getting Started -To get started with Nextra, check out the [About](./about) page -to learn more about its capabilities and features. -If you need any assistance, visit our [Contact](./contact) page +To get started with Nextra, check out the [About](/about) page +to learn more about its capabilities and features. +If you need any assistance, visit our [Contact](/contact) page to find out how to reach us. Explore the sections below to dive deeper into specific topics: + - [About Nextra](/about) - [API Reference](/reference_api) - [Contact Us](/contact) @@ -83,4 +84,3 @@ Z --> E; Z --> F; Z --> G; ``` - diff --git a/src/pages/reference_api/about.mdx b/src/pages/reference_api/about.mdx index 83ddc84..9fe1c24 100644 --- a/src/pages/reference_api/about.mdx +++ b/src/pages/reference_api/about.mdx @@ -1,14 +1,13 @@ # About API -The About API provides information about the `Nextra` framework, -including its version, features, and capabilities. -This endpoint is useful for retrieving metadata -about your documentation site and can be utilized +The About API provides information about the `Nextra` framework, +including its version, features, and capabilities. +This endpoint is useful for retrieving metadata +about your documentation site and can be utilized in various parts of your application. ## GET `/api/about` - ## Response The response includes the following fields: @@ -25,4 +24,4 @@ The response includes the following fields: "features": ["markdown support", "automatic navigation", "theme customization"], "description": "Nextra is a static site generator for creating modern documentation websites." } -``` \ No newline at end of file +``` diff --git a/src/pages/reference_api/index.mdx b/src/pages/reference_api/index.mdx index f9f948d..c68fb05 100644 --- a/src/pages/reference_api/index.mdx +++ b/src/pages/reference_api/index.mdx @@ -1,15 +1,16 @@ # API Reference Overview -The `Nextra` API Reference provides comprehensive information about the APIs -available within the `Nextra` framework. -This documentation is intended for developers -who wish to integrate `Nextra` features into their own applications +The `Nextra` API Reference provides comprehensive information about the APIs +available within the `Nextra` framework. +This documentation is intended for developers +who wish to integrate `Nextra` features into their own applications or extend its functionality. -Explore the various API endpoints -and learn how to effectively use them in your projects. -Each section includes detailed descriptions, usage examples, +Explore the various API endpoints +and learn how to effectively use them in your projects. +Each section includes detailed descriptions, usage examples, and response formats to help you get started quickly and efficiently. Check out the individual API sections for more details: -- [About API](/reference_api/about) \ No newline at end of file + +- [About API](/reference_api/about) diff --git a/src/pages/reference_api/mega_private.mdx b/src/pages/reference_api/mega_private.mdx index 577d64f..3941c02 100644 --- a/src/pages/reference_api/mega_private.mdx +++ b/src/pages/reference_api/mega_private.mdx @@ -1,3 +1,3 @@ # Mega Private Page -You should never see this page! 🤭 \ No newline at end of file +You should never see this page! 🤭 diff --git a/src/pages/reference_api/mega_private/hello.mdx b/src/pages/reference_api/mega_private/hello.mdx index ecf33bc..9987d55 100644 --- a/src/pages/reference_api/mega_private/hello.mdx +++ b/src/pages/reference_api/mega_private/hello.mdx @@ -1,3 +1,3 @@ -# Hey there! +# Hey there -This is super private, so you can't read it! \ No newline at end of file +This is super private, so you can't read it! diff --git a/src/pages/reference_api/person.mdx b/src/pages/reference_api/person.mdx index 6dfc936..26c5bc0 100644 --- a/src/pages/reference_api/person.mdx +++ b/src/pages/reference_api/person.mdx @@ -1,9 +1,9 @@ # Person API -The `Person` API allows you to manage personal data -within your Nextra-powered documentation site. -This endpoint provides functionalities to create, retrieve, update, -and delete `person` information, making it a crucial component +The `Person` API allows you to manage personal data +within your Nextra-powered documentation site. +This endpoint provides functionalities to create, retrieve, update, +and delete `person` information, making it a crucial component for any personalized applications. ## Endpoints @@ -13,14 +13,16 @@ for any personalized applications. Retrieve a list of all persons (people). **Endpoint:** -``` + +```sh GET /api/persons ``` **Response:** -The response includes a list of `person` objects, +The response includes a list of `person` objects, each containing the following fields: + - `id`: The unique identifier for the `person`. - `name`: The name of the `person`. - `email`: The email address the `person` provided. @@ -50,13 +52,15 @@ each containing the following fields: Add a new `person` to the system. **Endpoint:** -``` + +```sh POST /api/person ``` **Request Body:** The request body should include the following fields: + - `name` (required): The name of the `person`. - `email` (required): The email address of the `person`. - `role` (optional): The role of the `person`. Default is `viewer`. @@ -89,13 +93,15 @@ The response includes the created `person` object. Modify an existing `person` information. **Endpoint:** -``` + +```sh PUT /api/person/:id ``` **Request Body:** The request body can include any of the following fields to update: + - `name` (optional): The name of the `person`. - `email` (optional): The email address of the `person`. - `role` (optional): The role of the `person`. @@ -128,7 +134,8 @@ The response includes the updated `person` object. Remove a `person` from the system. **Endpoint:** -``` + +```sh DELETE /api/person/:id ``` @@ -144,10 +151,10 @@ The response includes a confirmation message. ## Summary -The `person` API provides essential operations -for managing people within your `Nextra` documentation site. -Whether you need to add a new `person`, update or remove existing ones, -these endpoints offer the flexibility -to handle all person-related tasks efficiently. -For more information on other available APIs, +The `person` API provides essential operations +for managing people within your `Nextra` documentation site. +Whether you need to add a new `person`, update or remove existing ones, +these endpoints offer the flexibility +to handle all person-related tasks efficiently. +For more information on other available APIs, refer back to the [API Reference](/index). From 5cee6fae723c4b4f72bbc9a6e2822b6defc51193 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lui=CC=81s=20Arteiro?= Date: Fri, 26 Jul 2024 01:57:28 +0100 Subject: [PATCH 06/14] fix: Using `markdown-lint-check` for external URL only. Adding to CI. --- .github/workflows/ci.yml | 10 +++++++++ package.json | 6 ++--- pnpm-lock.yaml | 48 +++++++++++++++++++++++++++++++++++++--- scripts/link-check.mjs | 33 ++++++++++++++++++--------- 4 files changed, 79 insertions(+), 18 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index cdab519..09f0e5d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -23,6 +23,16 @@ jobs: - name: Install dependencies run: pnpm install --no-frozen-lockfile + # Run `markdownlint-cli2` to lint markdown files + - name: Running `markdownlint-cli2-action` + uses: DavidAnson/markdownlint-cli2-action@v16.0.0 + with: + config: '.markdownlint-cli2.mjs' + + # Run script to check for dead links + - name: Checking for dead links + run: pnpm run lint:check-external-links + # Run build - name: Build Next.js app run: pnpm run build diff --git a/package.json b/package.json index cc75a42..e9de2cd 100644 --- a/package.json +++ b/package.json @@ -11,9 +11,7 @@ "test": "jest --runInBand", "types:check": "tsc --noEmit", "lint:fix-markdown": "markdownlint-cli2 --fix", - "lint:link-check-all": "concurrently -n start_server,link_check \"pnpm run dev\" \"pnpm lint:contentlayer-build && pnpm lint:link-check\" -k", - "lint:link-check": "node ./scripts/link-check.mjs", - "lint:contentlayer-build": "contentlayer2 build --verbose" + "lint:check-external-links": "contentlayer2 build --verbose && node ./scripts/link-check.mjs" }, "dependencies": { "next": "^14.2.4", @@ -25,13 +23,13 @@ "react-dom": "^18.3.1" }, "devDependencies": { + "@actions/core": "^1.10.1", "@playwright/test": "^1.44.1", "@testing-library/jest-dom": "^6.4.6", "@testing-library/react": "^16.0.0", "@types/jest": "^29.5.12", "@types/node": "20.14.5", "autoprefixer": "^10.4.19", - "concurrently": "^8.0.0", "contentlayer2": "^0.5.0", "dotenv": "^16.4.5", "fast-glob": "^3.3.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 48e6839..602bbdc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -30,6 +30,9 @@ importers: specifier: ^18.3.1 version: 18.3.1(react@18.3.1) devDependencies: + '@actions/core': + specifier: ^1.10.1 + version: 1.10.1 '@playwright/test': specifier: ^1.44.1 version: 1.44.1 @@ -48,9 +51,6 @@ importers: autoprefixer: specifier: ^10.4.19 version: 10.4.19(postcss@8.4.38) - concurrently: - specifier: ^8.0.0 - version: 8.2.2 contentlayer2: specifier: ^0.5.0 version: 0.5.0(esbuild@0.21.5) @@ -205,6 +205,12 @@ importers: packages: + '@actions/core@1.10.1': + resolution: {integrity: sha512-3lBR9EDAY+iYIpTnTIXmWcNbX3T2kCkAEQGIQx4NVQ0575nk2k3GRZDTPQG+vVtS2izSLmINlxXf0uLtnrTP+g==} + + '@actions/http-client@2.2.1': + resolution: {integrity: sha512-KhC/cZsq7f8I4LfZSJKgCvEwfkE8o1538VoBeoGzokVLLnbFDEAdFD3UhoMklxo2un9NJVBdANOresx7vTHlHw==} + '@adobe/css-tools@4.4.0': resolution: {integrity: sha512-Ff9+ksdQQB3rMncgqDK78uLznstjyfIf2Arnh22pW8kBpLs6rpKDwgnZT46hin5Hl1WzazzK64DOrhSwYpS7bQ==} @@ -623,6 +629,10 @@ packages: '@fal-works/esbuild-plugin-global-externals@2.1.2': resolution: {integrity: sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ==} + '@fastify/busboy@2.1.1': + resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} + engines: {node: '>=14'} + '@grpc/grpc-js@1.11.1': resolution: {integrity: sha512-gyt/WayZrVPH2w/UTLansS7F9Nwld472JxxaETamrM8HNlsa+jSLNyKAZmhxI2Me4c3mQHFiS1wWHDY1g1Kthw==} engines: {node: '>=12.10.0'} @@ -4980,6 +4990,10 @@ packages: typescript: optional: true + tunnel@0.0.6: + resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==} + engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'} + turbogrid@3.2.0: resolution: {integrity: sha512-c+2qrCGWzoYpLlxtHgRJ4V5dDRE9fUT7D9maxtdBCqJ0NzCdY+x7xF3/F6cG/+n3VIzKfIS+p9Z/0YMQPf6k/Q==} @@ -5024,6 +5038,10 @@ packages: undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + undici@5.28.4: + resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==} + engines: {node: '>=14.0'} + unicorn-magic@0.1.0: resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} engines: {node: '>=18'} @@ -5115,6 +5133,10 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + uuid@9.0.1: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} hasBin: true @@ -5388,6 +5410,16 @@ packages: snapshots: + '@actions/core@1.10.1': + dependencies: + '@actions/http-client': 2.2.1 + uuid: 8.3.2 + + '@actions/http-client@2.2.1': + dependencies: + tunnel: 0.0.6 + undici: 5.28.4 + '@adobe/css-tools@4.4.0': {} '@alloc/quick-lru@5.2.0': {} @@ -5837,6 +5869,8 @@ snapshots: '@fal-works/esbuild-plugin-global-externals@2.1.2': {} + '@fastify/busboy@2.1.1': {} + '@grpc/grpc-js@1.11.1': dependencies: '@grpc/proto-loader': 0.7.13 @@ -11338,6 +11372,8 @@ snapshots: - supports-color - ts-node + tunnel@0.0.6: {} + turbogrid@3.2.0: {} typanion@3.14.0: {} @@ -11365,6 +11401,10 @@ snapshots: undici-types@5.26.5: {} + undici@5.28.4: + dependencies: + '@fastify/busboy': 2.1.1 + unicorn-magic@0.1.0: {} unified@10.1.2: @@ -11496,6 +11536,8 @@ snapshots: util-deprecate@1.0.2: {} + uuid@8.3.2: {} + uuid@9.0.1: {} uvu@0.5.6: diff --git a/scripts/link-check.mjs b/scripts/link-check.mjs index efedc43..54b7ed2 100644 --- a/scripts/link-check.mjs +++ b/scripts/link-check.mjs @@ -1,47 +1,58 @@ +import core from "@actions/core" import markdownLinkCheck from "markdown-link-check"; import { allDocuments } from "../.contentlayer/generated/index.mjs"; +// String to tag internal links to be ignored when checking in `markdown-lint-check` +const ignoreURLTag = "#ignoreURL#" +const localhost = "http://localhost:3000" + const baseUrl = process.argv.find((arg) => arg.includes("--baseUrl")); const allBody = allDocuments.map(({ body }) => body.raw).join("\n--- NEXT PAGE ---\n"); -// Options for `markdown-lint-check` +// Options for `markdown-lint-check`. +// It catches internal links and external links. const configOpts = { - projectBaseUrl: baseUrl ? baseUrl.replace("--baseUrl=", "https://") : "http://localhost:3000", + projectBaseUrl: baseUrl ? baseUrl.replace("--baseUrl=", "https://") : localhost, replacementPatterns: [ - // Match links like `[example](/example) + // Match links like `[example](/example) and adding tag to later ignore { pattern: "^/", - replacement: "{{BASEURL}}/", + replacement: `${ignoreURLTag}{{BASEURL}}/`, }, - // Match links like `[example](./example) + // Match links like `[example](./example) and adding tag to later ignore { pattern: "^./", - replacement: "{{BASEURL}}/", + replacement: `${ignoreURLTag}{{BASEURL}}/`, }, ], }; -// NOTE: -// Runs `markdown-link-check` +// Runs `markdown-link-check` only on external links. // If this step fails, check the output. You should find "input". It shows the link that caused the error. // Most likely the reason it's failing is because the link doesn't start with `./` or `/` (e.g. [example](index.md), instead of [example](./index.md)). markdownLinkCheck(allBody, configOpts, function (error, linkCheckresults) { try { if (error) throw new Error(error); + // Filtering links for only external URLs const results = linkCheckresults.map((linkCheckResult) => ({ ...linkCheckResult })); - const hasDeadLink = results.find((result) => result.status.includes("dead")); + const filteredResults = results.filter(function(item) { + return !item.link.includes(ignoreURLTag) + }); - results.forEach(({ link, status }) => { + // Iterate over URLs and log them + filteredResults.forEach(({ link, status }) => { console.log("%s is %s", link, status === "dead" ? "dead 💀" : "alive 🥳"); }); + // Check if there is any dead link in the filtered external URLs + const hasDeadLink = filteredResults.find((result) => result.status.includes("dead")); if (hasDeadLink) { throw new Error("Dead link found.👆💀"); } else { console.log("All links are valid! 🙌"); } } catch (error) { - console.error(error.message); + core.setFailed(error.message); } }); \ No newline at end of file From 67f4e480a597abca919b163d05d67c56e27e1ac9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lui=CC=81s=20Arteiro?= Date: Fri, 26 Jul 2024 02:06:13 +0100 Subject: [PATCH 07/14] ci: Trying to fix configuration used in `markdownlint-cli2` action --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 09f0e5d..828c944 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -27,7 +27,7 @@ jobs: - name: Running `markdownlint-cli2-action` uses: DavidAnson/markdownlint-cli2-action@v16.0.0 with: - config: '.markdownlint-cli2.mjs' + config: './.markdownlint-cli2.mjs' # Run script to check for dead links - name: Checking for dead links From b996dde42391ba83c14c4d8ca8e3400b87930c82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lui=CC=81s=20Arteiro?= Date: Fri, 26 Jul 2024 02:11:03 +0100 Subject: [PATCH 08/14] ci: Fixing checking markdown relative files in CI. --- .github/workflows/ci.yml | 4 +--- package.json | 1 + 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 828c944..c11568f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -25,9 +25,7 @@ jobs: # Run `markdownlint-cli2` to lint markdown files - name: Running `markdownlint-cli2-action` - uses: DavidAnson/markdownlint-cli2-action@v16.0.0 - with: - config: './.markdownlint-cli2.mjs' + run: pnpm run lint:check-markdown # Run script to check for dead links - name: Checking for dead links diff --git a/package.json b/package.json index e9de2cd..9c6269e 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "test": "jest --runInBand", "types:check": "tsc --noEmit", "lint:fix-markdown": "markdownlint-cli2 --fix", + "lint:check-markdown": "markdownlint-cli2", "lint:check-external-links": "contentlayer2 build --verbose && node ./scripts/link-check.mjs" }, "dependencies": { From 2e4d4297dbf700b79d825b1a4b5a3cd25b2a4d69 Mon Sep 17 00:00:00 2001 From: Nelson <194400+nelsonic@users.noreply.github.com> Date: Fri, 26 Jul 2024 09:55:08 +0100 Subject: [PATCH 09/14] chore(docs): revert hits badge in tutorial.md to be distinct from README.md to track click-through --- tutorial.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tutorial.md b/tutorial.md index c379336..9c8f012 100644 --- a/tutorial.md +++ b/tutorial.md @@ -2389,4 +2389,4 @@ Thanks for learning with us! If you find it useful, please give the repo a star! ⭐️ -[![HitCount](https://hits.dwyl.com/dwyl/nextra-demo.svg?style=flat-square)](https://hits.dwyl.com/dwyl/nextra-demo) +[![HitCount](https://hits.dwyl.com/dwyl/nextra-demo-tutorial.svg?style=flat-square)](https://hits.dwyl.com/dwyl/nextra-demo) From 02c88526e78e0e400bd83ea0568d974ffdde1d97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lui=CC=81s=20Arteiro?= Date: Fri, 26 Jul 2024 13:04:21 +0100 Subject: [PATCH 10/14] chore: Making lint-check testable (wrapped in function). --- .github/workflows/ci.yml | 2 +- scripts/link-check.mjs | 106 +++++++++++++++++++++------------------ 2 files changed, 58 insertions(+), 50 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c11568f..fcdc9bd 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -24,7 +24,7 @@ jobs: run: pnpm install --no-frozen-lockfile # Run `markdownlint-cli2` to lint markdown files - - name: Running `markdownlint-cli2-action` + - name: Running `markdownlint-cli2` run: pnpm run lint:check-markdown # Run script to check for dead links diff --git a/scripts/link-check.mjs b/scripts/link-check.mjs index 54b7ed2..fbbe311 100644 --- a/scripts/link-check.mjs +++ b/scripts/link-check.mjs @@ -1,58 +1,66 @@ -import core from "@actions/core" +import core from "@actions/core"; import markdownLinkCheck from "markdown-link-check"; import { allDocuments } from "../.contentlayer/generated/index.mjs"; // String to tag internal links to be ignored when checking in `markdown-lint-check` -const ignoreURLTag = "#ignoreURL#" -const localhost = "http://localhost:3000" +const ignoreURLTag = "#ignoreURL#"; +const localhost = "http://localhost:3000"; const baseUrl = process.argv.find((arg) => arg.includes("--baseUrl")); const allBody = allDocuments.map(({ body }) => body.raw).join("\n--- NEXT PAGE ---\n"); -// Options for `markdown-lint-check`. -// It catches internal links and external links. -const configOpts = { - projectBaseUrl: baseUrl ? baseUrl.replace("--baseUrl=", "https://") : localhost, - replacementPatterns: [ - // Match links like `[example](/example) and adding tag to later ignore - { - pattern: "^/", - replacement: `${ignoreURLTag}{{BASEURL}}/`, - }, - // Match links like `[example](./example) and adding tag to later ignore - { - pattern: "^./", - replacement: `${ignoreURLTag}{{BASEURL}}/`, - }, - ], -}; - -// Runs `markdown-link-check` only on external links. -// If this step fails, check the output. You should find "input". It shows the link that caused the error. -// Most likely the reason it's failing is because the link doesn't start with `./` or `/` (e.g. [example](index.md), instead of [example](./index.md)). -markdownLinkCheck(allBody, configOpts, function (error, linkCheckresults) { - try { - if (error) throw new Error(error); - - // Filtering links for only external URLs - const results = linkCheckresults.map((linkCheckResult) => ({ ...linkCheckResult })); - const filteredResults = results.filter(function(item) { - return !item.link.includes(ignoreURLTag) - }); - - // Iterate over URLs and log them - filteredResults.forEach(({ link, status }) => { - console.log("%s is %s", link, status === "dead" ? "dead 💀" : "alive 🥳"); - }); - - // Check if there is any dead link in the filtered external URLs - const hasDeadLink = filteredResults.find((result) => result.status.includes("dead")); - if (hasDeadLink) { - throw new Error("Dead link found.👆💀"); - } else { - console.log("All links are valid! 🙌"); +/** + * This function checks external links that are present in the markdown files. + * It checks if they're alive or dead using `markdown-lint-check`. + */ +function checkMarkdownExternalLinks() { + // Options for `markdown-lint-check`. + // It catches internal links and external links. + const configOpts = { + projectBaseUrl: baseUrl ? baseUrl.replace("--baseUrl=", "https://") : localhost, + replacementPatterns: [ + // Match links like `[example](/example) and adding tag to later ignore + { + pattern: "^/", + replacement: `${ignoreURLTag}{{BASEURL}}/`, + }, + // Match links like `[example](./example) and adding tag to later ignore + { + pattern: "^./", + replacement: `${ignoreURLTag}{{BASEURL}}/`, + }, + ], + }; + + // Runs `markdown-link-check` only on external links. + // If this step fails, check the output. You should find "input". It shows the link that caused the error. + // Most likely the reason it's failing is because the link doesn't start with `./` or `/` (e.g. [example](index.md), instead of [example](./index.md)). + markdownLinkCheck(allBody, configOpts, function (error, linkCheckresults) { + try { + if (error) throw new Error(error); + + // Filtering links for only external URLs + const results = linkCheckresults.map((linkCheckResult) => ({ ...linkCheckResult })); + const filteredResults = results.filter(function (item) { + return !item.link.includes(ignoreURLTag); + }); + + // Iterate over URLs and log them + filteredResults.forEach(({ link, status }) => { + console.log("%s is %s", link, status === "dead" ? "dead 💀" : "alive 🥳"); + }); + + // Check if there is any dead link in the filtered external URLs + const hasDeadLink = filteredResults.find((result) => result.status.includes("dead")); + if (hasDeadLink) { + throw new Error("Dead link found.👆💀"); + } else { + console.log("All links are valid! 🙌"); + } + } catch (error) { + core.setFailed(error.message); } - } catch (error) { - core.setFailed(error.message); - } -}); \ No newline at end of file + }); +} + +checkMarkdownExternalLinks() \ No newline at end of file From c6de60d0cc470ec73ba20b27fc67a692a5e32ba9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lui=CC=81s=20Arteiro?= Date: Sat, 27 Jul 2024 00:08:40 +0100 Subject: [PATCH 11/14] test: Adding functioning test for markdown linting. --- README.md | 14 +++++---- jest.config.ts | 11 +++---- jest.polyfills.js | 31 ++++++++++++++++++++ package.json | 2 +- scripts/link-check.mjs | 54 +++++++++++++++++++++-------------- tests/unit/link-check.test.ts | 21 ++++++++++++++ 6 files changed, 100 insertions(+), 33 deletions(-) create mode 100644 jest.polyfills.js create mode 100644 tests/unit/link-check.test.ts diff --git a/README.md b/README.md index 9088fa3..4f6daad 100644 --- a/README.md +++ b/README.md @@ -26,14 +26,16 @@ https://marketplace.visualstudio.com/items?itemName=yzhang.markdown-all-in-one - [What? ✨](#what-) - [Who? 👥](#who-) - [How? 👩‍💻](#how-) + - [Run the _Finished_ Project](#run-the-finished-project) - [1. Clone the Project](#1-clone-the-project) - [2. Install Dependencies](#2-install-dependencies) - [3. Create Environment Variables](#3-create-environment-variables) - [4. Run the App!](#4-run-the-app) - [Run the Tests!](#run-the-tests) - [Build It!](#build-it) - - [_Please_ star the repo! ⭐️](#please-star-the-repo-️) - - [Troubleshooting](#troubleshooting) +- [_Please_ star the repo! ⭐️](#please-star-the-repo-️) +- [Troubleshooting](#troubleshooting) + - [I'm getting an error pertaining a missing secret](#im-getting-an-error-pertaining-a-missing-secret) # Why? 🤷‍♀️ @@ -107,7 +109,7 @@ or just want to discuss this further, Ready? Let's go! 🚀 -## Run the _Finished_ Project +## Run the _Finished_ Project ### 1. Clone the Project @@ -193,7 +195,7 @@ See: [tutorial.md](./tutorial.md) -## _Please_ star the repo! ⭐️ +# _Please_ star the repo! ⭐️ If you find this repo/tutorial useful, please star it on GitHub, so that we know! ⭐ @@ -201,9 +203,9 @@ please star it on GitHub, so that we know! ⭐ Thank you! 🙏 -## Troubleshooting +# Troubleshooting -### I'm getting an error pertaining a missing secret +## I'm getting an error pertaining a missing secret You may have encountered the following error. diff --git a/jest.config.ts b/jest.config.ts index 590793c..67221eb 100644 --- a/jest.config.ts +++ b/jest.config.ts @@ -12,15 +12,15 @@ const createJestConfig = nextJest({ }); const config: Config = { + setupFiles: ["./jest.polyfills.js"], + collectCoverage: true, - collectCoverageFrom: ["src/**/*.{js,jsx,ts,tsx}", "!/node_modules/"], + collectCoverageFrom: ["src/**/*.{js,jsx,ts,tsx}", "scripts/*.{mjs,js,jsx,ts,tsx}", "!/node_modules/"], coverageDirectory: "coverage", coveragePathIgnorePatterns: ["/node_modules/"], coverageProvider: "v8", - moduleDirectories: [ - "node_modules" - ], + moduleDirectories: ["node_modules"], modulePathIgnorePatterns: [ // Testing auth with `next-auth` complains (consider switching to Vitest) // Doesn't seem to have a proper solution. See https://github.com/nextauthjs/next-auth/issues/4198. @@ -36,10 +36,11 @@ const config: Config = { "src/pages/_app.ts", // The `app` folder is only used to export the default handlers from `next-auth`. - "src/app" + "src/app", ], moduleNameMapper: { "next-auth/(.*)": "/node_modules/next-auth/$1", + "^uuid$": require.resolve("uuid"), // See https://github.com/uuidjs/uuid/issues/451#issuecomment-1377066303. }, testEnvironment: "jsdom", diff --git a/jest.polyfills.js b/jest.polyfills.js new file mode 100644 index 0000000..27f66f5 --- /dev/null +++ b/jest.polyfills.js @@ -0,0 +1,31 @@ +// jest.polyfills.js +/** + * From https://mswjs.io/docs/migrations/1.x-to-2.x#requestresponsetextencoder-is-not-defined-jest. + * @note The block below contains polyfills for Node.js globals + * required for Jest to function when running JSDOM tests. + * These HAVE to be require's and HAVE to be in this exact + * order, since "undici" depends on the "TextEncoder" global API. + * + * Consider migrating to a more modern test runner if + * you don't want to deal with this. + */ + +const { TextDecoder, TextEncoder } = require('node:util') + +Object.defineProperties(globalThis, { + TextDecoder: { value: TextDecoder }, + TextEncoder: { value: TextEncoder }, +}) + +const { Blob, File } = require('node:buffer') +const { fetch, Headers, FormData, Request, Response } = require('undici') + +Object.defineProperties(globalThis, { + fetch: { value: fetch, writable: true }, + Blob: { value: Blob }, + File: { value: File }, + Headers: { value: Headers }, + FormData: { value: FormData }, + Request: { value: Request }, + Response: { value: Response }, +}) \ No newline at end of file diff --git a/package.json b/package.json index 9c6269e..e9d7c3b 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "types:check": "tsc --noEmit", "lint:fix-markdown": "markdownlint-cli2 --fix", "lint:check-markdown": "markdownlint-cli2", - "lint:check-external-links": "contentlayer2 build --verbose && node ./scripts/link-check.mjs" + "lint:check-external-links": "contentlayer2 build --verbose && node scripts/link-check.mjs" }, "dependencies": { "next": "^14.2.4", diff --git a/scripts/link-check.mjs b/scripts/link-check.mjs index fbbe311..273a916 100644 --- a/scripts/link-check.mjs +++ b/scripts/link-check.mjs @@ -5,15 +5,15 @@ import { allDocuments } from "../.contentlayer/generated/index.mjs"; // String to tag internal links to be ignored when checking in `markdown-lint-check` const ignoreURLTag = "#ignoreURL#"; const localhost = "http://localhost:3000"; - const baseUrl = process.argv.find((arg) => arg.includes("--baseUrl")); -const allBody = allDocuments.map(({ body }) => body.raw).join("\n--- NEXT PAGE ---\n"); /** * This function checks external links that are present in the markdown files. * It checks if they're alive or dead using `markdown-lint-check`. + * @param {string} markdownAllBody all of the markdowns text + * @returns array of dead links */ -function checkMarkdownExternalLinks() { +export async function findDeadExternalLinksInMarkdown(markdownAllBody) { // Options for `markdown-lint-check`. // It catches internal links and external links. const configOpts = { @@ -32,12 +32,20 @@ function checkMarkdownExternalLinks() { ], }; + // Initialize the array to store dead links + let deadLinks = []; + // Runs `markdown-link-check` only on external links. // If this step fails, check the output. You should find "input". It shows the link that caused the error. // Most likely the reason it's failing is because the link doesn't start with `./` or `/` (e.g. [example](index.md), instead of [example](./index.md)). - markdownLinkCheck(allBody, configOpts, function (error, linkCheckresults) { - try { - if (error) throw new Error(error); + return new Promise((resolve, reject) => { + // Runs `markdown-link-check` only on external links. + // If this step fails, check the output. You should find "input". It shows the link that caused the error. + // Most likely the reason it's failing is because the link doesn't start with `./` or `/` (e.g. [example](index.md), instead of [example](./index.md)). + markdownLinkCheck(markdownAllBody, configOpts, function (error, linkCheckresults) { + if (error) { + return reject(new Error(error)); + } // Filtering links for only external URLs const results = linkCheckresults.map((linkCheckResult) => ({ ...linkCheckResult })); @@ -45,22 +53,26 @@ function checkMarkdownExternalLinks() { return !item.link.includes(ignoreURLTag); }); - // Iterate over URLs and log them - filteredResults.forEach(({ link, status }) => { - console.log("%s is %s", link, status === "dead" ? "dead 💀" : "alive 🥳"); - }); + // Collecting dead links + const deadLinks = filteredResults.filter(result => result.status === "dead").map(result => result.link); - // Check if there is any dead link in the filtered external URLs - const hasDeadLink = filteredResults.find((result) => result.status.includes("dead")); - if (hasDeadLink) { - throw new Error("Dead link found.👆💀"); - } else { - console.log("All links are valid! 🙌"); - } - } catch (error) { - core.setFailed(error.message); - } + resolve(deadLinks); + }); }); } -checkMarkdownExternalLinks() \ No newline at end of file +// This is used to be called from `package.json`. +// This "if" statement checks if the script is being run from the command line rather than being imported as module - it's the entry point of the script. +if (process.argv[1] === new URL(import.meta.url).pathname) { + (async () => { + const allBody = allDocuments.map(({ body }) => body.raw).join("\n--- NEXT PAGE ---\n"); + const deadLinks = await findDeadExternalLinksInMarkdown(allBody); + + if (deadLinks.length > 0) { + console.error("Dead links found:", deadLinks); + core.setFailed(); + } else { + console.log("All links are valid! 🙌"); + } + })(); +} diff --git a/tests/unit/link-check.test.ts b/tests/unit/link-check.test.ts new file mode 100644 index 0000000..0863d86 --- /dev/null +++ b/tests/unit/link-check.test.ts @@ -0,0 +1,21 @@ +import { findDeadExternalLinksInMarkdown } from "scripts/link-check.mjs"; +jest.useFakeTimers() + + +// Mock contentlayer2 +jest.mock("contentlayer2/client", () => ({ + isType: jest.fn(), +})); + +// Test suite for getPrivateRoutes function +describe("testing external routes", () => { + it("should succeed with correct links", async () => { + const markdownBody = "[external_link](https://www.example.com/)"; + + const deadLinks = await findDeadExternalLinksInMarkdown(markdownBody); + + expect(deadLinks).toEqual([]); // or w + + //await new Promise(process.nextTick); +}); +}); From eba7e69ddf2507e77186d87262a27097b6c8e612 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lui=CC=81s=20Arteiro?= Date: Sat, 27 Jul 2024 01:21:04 +0100 Subject: [PATCH 12/14] tests: Getting test to 100%. --- scripts/link-check.mjs | 15 +++++---------- tests/unit/link-check.test.ts | 22 ++++++++++++++++------ 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/scripts/link-check.mjs b/scripts/link-check.mjs index 273a916..39b9a6b 100644 --- a/scripts/link-check.mjs +++ b/scripts/link-check.mjs @@ -17,6 +17,7 @@ export async function findDeadExternalLinksInMarkdown(markdownAllBody) { // Options for `markdown-lint-check`. // It catches internal links and external links. const configOpts = { + /* c8 ignore next */ projectBaseUrl: baseUrl ? baseUrl.replace("--baseUrl=", "https://") : localhost, replacementPatterns: [ // Match links like `[example](/example) and adding tag to later ignore @@ -32,20 +33,11 @@ export async function findDeadExternalLinksInMarkdown(markdownAllBody) { ], }; - // Initialize the array to store dead links - let deadLinks = []; - // Runs `markdown-link-check` only on external links. // If this step fails, check the output. You should find "input". It shows the link that caused the error. // Most likely the reason it's failing is because the link doesn't start with `./` or `/` (e.g. [example](index.md), instead of [example](./index.md)). return new Promise((resolve, reject) => { - // Runs `markdown-link-check` only on external links. - // If this step fails, check the output. You should find "input". It shows the link that caused the error. - // Most likely the reason it's failing is because the link doesn't start with `./` or `/` (e.g. [example](index.md), instead of [example](./index.md)). markdownLinkCheck(markdownAllBody, configOpts, function (error, linkCheckresults) { - if (error) { - return reject(new Error(error)); - } // Filtering links for only external URLs const results = linkCheckresults.map((linkCheckResult) => ({ ...linkCheckResult })); @@ -61,10 +53,12 @@ export async function findDeadExternalLinksInMarkdown(markdownAllBody) { }); } -// This is used to be called from `package.json`. +/* c8 ignore start */ +// This section only runs when the script is invoked from `package.json`. // This "if" statement checks if the script is being run from the command line rather than being imported as module - it's the entry point of the script. if (process.argv[1] === new URL(import.meta.url).pathname) { (async () => { + // Get the map of all the markdown files after running `contentlayer2` const allBody = allDocuments.map(({ body }) => body.raw).join("\n--- NEXT PAGE ---\n"); const deadLinks = await findDeadExternalLinksInMarkdown(allBody); @@ -76,3 +70,4 @@ if (process.argv[1] === new URL(import.meta.url).pathname) { } })(); } +/* c8 ignore end */ diff --git a/tests/unit/link-check.test.ts b/tests/unit/link-check.test.ts index 0863d86..579c9e6 100644 --- a/tests/unit/link-check.test.ts +++ b/tests/unit/link-check.test.ts @@ -1,6 +1,5 @@ import { findDeadExternalLinksInMarkdown } from "scripts/link-check.mjs"; -jest.useFakeTimers() - +jest.useFakeTimers(); // Mock contentlayer2 jest.mock("contentlayer2/client", () => ({ @@ -11,11 +10,22 @@ jest.mock("contentlayer2/client", () => ({ describe("testing external routes", () => { it("should succeed with correct links", async () => { const markdownBody = "[external_link](https://www.example.com/)"; + const deadLinks: string[] = await findDeadExternalLinksInMarkdown(markdownBody); - const deadLinks = await findDeadExternalLinksInMarkdown(markdownBody); + expect(deadLinks).toEqual([]); + }); - expect(deadLinks).toEqual([]); // or w + it("should succeed and show dead links", async () => { + const markdownBody = "[external_link](https://localhost/)"; + const deadLinks: string[] = await findDeadExternalLinksInMarkdown(markdownBody); - //await new Promise(process.nextTick); -}); + expect(deadLinks.length).toEqual(1); + }); + + it("invalid hash should not be included", async () => { + const markdownBody = "[external_link](invalid:https://localhost/)"; + const deadLinks: string[] = await findDeadExternalLinksInMarkdown(markdownBody); + + expect(deadLinks.length).toEqual(0); + }); }); From 58770acbf4299c761d13996d15be7fadb9085a92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lui=CC=81s=20Arteiro?= Date: Sat, 27 Jul 2024 15:59:25 +0100 Subject: [PATCH 13/14] readme: Adding section in README. --- tutorial.md | 509 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 507 insertions(+), 2 deletions(-) diff --git a/tutorial.md b/tutorial.md index 9c8f012..f9d358c 100644 --- a/tutorial.md +++ b/tutorial.md @@ -35,6 +35,11 @@ - [7.4 Rendering links inside `sidebar`](#74-rendering-links-inside-sidebar) - [7.4.1 Understanding how directory items are passed down to the `sidebar`](#741-understanding-how-directory-items-are-passed-down-to-the-sidebar) - [7.4.2 Conditionally rendering links in `Menu` inside the `sidebar`](#742-conditionally-rendering-links-in-menu-inside-the-sidebar) + - [8. Linting the `Markdown` files](#8-linting-the-markdown-files) + - [8.1 Installing dependencies](#81-installing-dependencies) + - [8.2 Checking external links](#82-checking-external-links) + - [8.3 Linting and checking for broken internal relative links](#83-linting-and-checking-for-broken-internal-relative-links) + - [8.4 Adding to CI](#84-adding-to-ci) - [Star the repo!](#star-the-repo) > [!TIP] @@ -2383,10 +2388,510 @@ which is different to what this directory requires. Great job! 🎉 -# Star the repo! + +## 8. Linting the `Markdown` files + +[Maintaining a consistent style guide](https://learn.microsoft.com/en-us/style-guide/welcome/) +is critical for documentation to be easily accessible. +This _saves time for the person reading it_ +by making it more predictable to navigate. + +With this in mind, +it is a good idea to add +**automatic linting** to our documentation `.mdx` files. + +In this section, we'll focus on three things: +- adding a script to check if any external URLs are dead or alive. +- linting the `.mdx` files. +- checking if relative links in files are valid. + +These are extremely useful to maintain consistency +and + +[Maintaining a consistent style guide](https://learn.microsoft.com/en-us/style-guide/welcome/) +is crucial for ensuring that documentation is easily accessible. +This approach not only enhances _readability_ +but also _saves time_ for readers by making the content more predictable and easier to navigate. + +To achieve this, +incorporating automatic linting into our documentation `.mdx` files is a smart move. + +In this section, we will focus on three key tasks: + +- **adding a acript to verify external URLs:** +This script will check if any external links are dead or alive, +ensuring that all references are up-to-date and functional. + +- **linting the `.mdx` files:** +Implementing linting tools will help maintain the consistency and quality of our Markdown files +by automatically detecting and fixing common formatting pitfalls. + +- **validating relative links:** +We will also check if the relative links within the files are valid, +preventing broken links and enhancing the user experience. + +These steps are instrumental in maintaining a high standard of documentation quality and consistency. +Are you ready to get started? +Let's go! 🏃‍♂️ + + +### 8.1 Installing dependencies + +Let's start by installing some dependencies. +Run the following commands. + +```sh +pnpm install -w --saveDev @actions/core contentlayer2 next-contentlayer2 markdown-link-check markdownlint-cli2 markdownlint-rule-relative-links +pnpm install -w next-compose-plugins +``` + +- [**`next-compose-plugins`**](https://github.com/cyrilwanner/next-compose-plugins) +makes it easier to add plugins to our `Next.js` application. +- [**`contentlayer2`**](https://github.com/timlrx/contentlayer2) +converts the content of the site into type-safe JSON data. +This will be used to see the contents of the `.mdx` files +to find URLs, internal or external. +It is a maintained fork of the original `contentlayer`, +which maintenance efforts have been halted +(see https://github.com/contentlayerdev/contentlayer/issues/651#issuecomment-2030335434 +for more information). +- **`next-contentlayer2`** is an adapter of `contentlayer2` +to `Next.js` projects. +- [**`markdown-link-check`**](https://github.com/tcort/markdown-link-check) +extracts links from Markdown texts +and checks whether the link is alive (HTTP Code `200`) +or dead. +It also checks `mailto:` links. +This will be used solely for external and e-mail links. +- [**`markdownlint-cli2`**](https://github.com/DavidAnson/markdownlint-cli2) +is the successor of the original `markdownlint-cli`, +a statis analysis tool to enforce standards and consistency for Markdown files. +You can file the linting rules used in +https://github.com/DavidAnson/markdownlint#rules--aliases. +- [**`markdownlint-rule-relative-links`**](https://github.com/theoludwig/markdownlint-rule-relative-links) +is a custom `markdownlint` rule to validate relative links. +It will be used to check for internal/relative links between Markdown files. +- [**`@actions/core`**](https://github.com/actions/toolkit/tree/main/packages/core) +are a collection of functions for Github Actions. +Because we want to employ these steps in our Github Actions, +this will be used to mark as a step as `failed` +in case linting fails. + +Now we're ready to start implementing these features! + + +### 8.2 Checking external links + +Let's start with arguably the "hardest" feature to implement. +We're going to scour the Markdown files for external links +and then check if they are alive or not. + +First, head over to `next.config.js`. +We are going to be adding a `contentlayer2` plugin +so it can correctly get the site content. + +Head over to the file and use `withPlugins` +from `next-compose-plugin` to make it easy to add other plugins. +We are adding the `withContentLayer` plugin to our app. + +```js +// next.config.js + + +const withPlugins = require('next-compose-plugins'); // import this +const { withContentlayer } = require('next-contentlayer2'); //import this +const withNextra = require("nextra")({ + theme: "./theme/src/index.tsx", + themeConfig: "./theme.config.tsx", + defaultShowCopyCode: true +}); + +// Use `withPlugins` to compose the plugins and add the `withContentLayer` plugin we've imported +module.exports = withPlugins([withNextra, withContentlayer]); +``` + +Next, let's change our `tsconfig.json` +and add a `baseUrl` and a path to `path` to it. +This will make it so `contentlayer` is accessible in our script. + +```json +// tsconfig.json + +// ... +"compilerOptions": { + // ... + "baseUrl": ".", + "paths": { + "@/*": ["./*"], + "contentlayer/generated": ["./.contentlayer/generated"] + } +} +// ... +``` + +Now, we need to define the configuration for `contentlayer2`. +We are going to define two documents to match: +- the `.mdx` pages. +- the `_meta.json` files. + +`contentlayer2` needs to be aware of these +so they can properly construct the site contents. + +For this, in the root of the project, +create a file called `contentlayer.config.js`. + +```js +// contentlayer.config.js + +import { defineDocumentType, makeSource } from 'contentlayer2/source-files' + +const computedFieldsPage = { + slug: { + type: 'string', + resolve: (doc) => doc._raw.sourceFileName.replace(/\.mdx$/, ''), + }, +} + +export const Page = defineDocumentType(() => ({ + name: 'Page', + filePathPattern: `**/*.mdx`, + computedFieldsPage, +})) + +export const MetaJson = defineDocumentType(() => ({ + name: 'MetaJson', + filePathPattern: `**/_meta.json`, +})) + +export default makeSource({ + contentDirPath: 'src/pages', + documentTypes: [Page], + onUnknownDocuments: 'skip-ignore' +}) +``` + +As you can see, +we are using `defineDocumentType` +to define a type of document expected to find in the docs. +In our case, +we define `Page` for `.mdx` pages +and `MetaJson` for `_meta.json` files. +We set the `contentDirPath` to `src/pages`, +which is the directory where we want `contentlayer2` to run. + +Now we're ready to create our script! +For this, +create a folder `scripts` in the root of the project. +Inside this folder, +add a file called `link-check.mjs`. +This will be our script! + +```mjs +import core from "@actions/core"; +import markdownLinkCheck from "markdown-link-check"; +import { allDocuments } from "../.contentlayer/generated/index.mjs"; + +// String to tag internal links to be ignored when checking in `markdown-lint-check` +const ignoreURLTag = "#ignoreURL#"; +const localhost = "http://localhost:3000"; +const baseUrl = process.argv.find((arg) => arg.includes("--baseUrl")); + +/** + * This function checks external links that are present in the markdown files. + * It checks if they're alive or dead using `markdown-lint-check`. + * @param {string} markdownAllBody all of the markdowns text + * @returns array of dead links + */ +export async function findDeadExternalLinksInMarkdown(markdownAllBody) { + // Options for `markdown-lint-check`. + // It catches internal links and external links. + const configOpts = { + projectBaseUrl: baseUrl ? baseUrl.replace("--baseUrl=", "https://") : localhost, + replacementPatterns: [ + // Match links like `[example](/example) and adding tag to later ignore + { + pattern: "^/", + replacement: `${ignoreURLTag}{{BASEURL}}/`, + }, + // Match links like `[example](./example) and adding tag to later ignore + { + pattern: "^./", + replacement: `${ignoreURLTag}{{BASEURL}}/`, + }, + ], + }; + + // Runs `markdown-link-check` only on external links. + // If this step fails, check the output. You should find "input". It shows the link that caused the error. + // Most likely the reason it's failing is because the link doesn't start with `./` or `/` (e.g. [example](index.md), instead of [example](./index.md)). + return new Promise((resolve, reject) => { + markdownLinkCheck(markdownAllBody, configOpts, function (error, linkCheckresults) { + + // Filtering links for only external URLs + const results = linkCheckresults.map((linkCheckResult) => ({ ...linkCheckResult })); + const filteredResults = results.filter(function (item) { + return !item.link.includes(ignoreURLTag); + }); + + // Collecting dead links + const deadLinks = filteredResults.filter(result => result.status === "dead").map(result => result.link); + + resolve(deadLinks); + }); + }); +} + +// This section only runs when the script is invoked from `package.json`. +// This "if" statement checks if the script is being run from the command line rather than being imported as module - it's the entry point of the script. +if (process.argv[1] === new URL(import.meta.url).pathname) { + (async () => { + // Get the map of all the markdown files after running `contentlayer2` + const allBody = allDocuments.map(({ body }) => body.raw).join("\n--- NEXT PAGE ---\n"); + const deadLinks = await findDeadExternalLinksInMarkdown(allBody); + + if (deadLinks.length > 0) { + console.error("Dead links found:", deadLinks); + core.setFailed(); + } else { + console.log("All links are valid! 🙌"); + } + })(); +} +``` + +Let's go over the changes we've made! +- we create a function **`findDeadExternalLinksInMarkdown()`** +that is responsible for finding all the external links given a markdown text. + - we first initialize `configOpts`, +where we define the parameters for `markdownLintCheck`, `markdown-lint-check`'s main function. +In this configuration, +we define the base URL of the project and, most importantly, +the patterns to replace internal links we find. +For this, we define a tag (a string) that we'll later use to filter out these internal links, +leaving only the external links inside our `.mdx` files. + - we return a `Promise` which calls `markdownLintCheck`, +which receives the body of all the Markdown files and the configuration we've just defined. +Inside the callback function, +we filter out the internal links and return an array of dead links. +- we added an `if` statement that is only invoked +when the script is called from the command line. +We do this to make it easier to test with `Jest`. +In here, we call the function we've just created (`findDeadExternalLinksInMarkdown()`) +and provide the text of all the `.mdx` files. +We get this text after `contentlayer2` parses through our site. +Inside this `if` statement, +we call `core.setFailed();` in case anything goes wrong, +so the Github Actions workflow fails gracefully. + +And that's it! +All that we need to do call this script inside our `package.json`! +Simply head over there and, +inside the `scripts` section, +add the following line. + +```json +"lint:check-external-links": "contentlayer2 build --verbose && node scripts/link-check.mjs" +``` + +In here, +we call `contentlayer2` to build the content of the `.mdx` files +that is later used inside `link-check.mjs`. + +> [!IMPORTANT] +> +> `contentlayer2` generates the data inside a folder called `.contentlayer`. +> Add it to your `.gitignore` so it isn't pushed to version control! + +And that's it! +All you need to do now is _run the script_! + +```sh +pnpm run lint:check-external-links +``` + +Depending on the links found in your documentation, +the console will log the dead links +or if everything is valid! + +> [!IMPORTANT] +> +> If you have links in the following format `[link](invalid)`, +> where the link is internal but does not have `/` or `./` in the beginning, +> this script will fail because of `markdown-lint-check` not being able +> to create an URL from `invalid`. +> +> You will be able to see the culprit index under the `input` property +> in the crash log. +> +> ```sh +> TypeError: Invalid URL +> at new URL (node:internal/url:797:36) +> ... +> code: 'ERR_INVALID_URL', +> input: 'invalid' +> ``` + + +### 8.3 Linting and checking for broken internal relative links + +Now let's lint our `.mdx` files +and check if the relative links are properly set up! +All we need to do is add configuration +to the `markdownlint-cli2` package we've installed. +This package will lint the `.mdx` files +according to rules we've defined. +We are going to use the default ones, +**plus** the `markdownlint-rule-relative-links` one we've installed. + +For this, +in the root of the project, +add a file called `.markdownlint-cli2.mjs`. + +```mjs +// .markdownlint-cli2.mjs + +// @ts-check + +const options = { + config: { + default: true, + "relative-links": true, + MD041: false, + MD013: false, + "no-inline-html": { + // Add React components we want to allow here + allowed_elements: ["LoginOrUserInfo", "Info"], + }, + }, + globs: ["src/pages/**/*.{md,mdx}"], + ignores: ["**/node_modules", "theme", "scripts"], + customRules: ["markdownlint-rule-relative-links"], +}; + +export default options; +``` + +- we are using the `default` options, +with some overrides so it works best with `.mdx` files. +We've disabled [`MD041`](https://github.com/DavidAnson/markdownlint/blob/main/doc/md041.md) +and [`MD013`](https://github.com/DavidAnson/markdownlint/blob/main/doc/md013.md). +In addition to this, +we only allow specific inline HTML components +in our `.mdx` files, +those being `LoginOrUserInfo` and `Info` +components we've defined for the authentication flow. +- inside `globs`, +we add the paths of the `.mdx` files we want to lint. +- in `ignores`, +we define paths to ignore the linting. +- in `customRules`, +we add additional, third-party custom rules. +In here, +we use the `markdownlint-rule-relative-links` we've installed +to check the relative internal links. + +And that's the hart part done! +Because `markdownlint-cli2` uses this config path by default, +all that's left is calling it in our `package.json`. +Add the following scripts to it. + +```json + "lint:fix-markdown": "markdownlint-cli2 --fix", + "lint:check-markdown": "markdownlint-cli2", +``` + +- **`lint:fix-markdown`** is meant to be used in development mode. +It parses the `.mdx` files and attempts to fix any issues. +- **`lint:check-markdown`** is meant to be used in CI (Github Actions). + +And you're done! 🎉 +Awesome work! + +You can run the script try and fix any issues you may have in your files. + +```sh +pnpm run lint:fix-markdown +``` + +The console will log any issues that arise. + + +### 8.4 Adding to CI + +Because we've automated the linting, +it's simple for us to use in our Github Actions workflow! + +```yml +name: Build & Test +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] +jobs: + ci: + timeout-minutes: 60 + runs-on: ubuntu-latest + steps: + + # Setup environment (Node and pnpm) + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: lts/* + - uses: pnpm/action-setup@v4 + with: + version: latest + + # Install dependencies + - name: Install dependencies + run: pnpm install --no-frozen-lockfile + + # ADD THESE LINES ---------------------------------------- + # Run `markdownlint-cli2` to lint markdown files + - name: Running `markdownlint-cli2` + run: pnpm run lint:check-markdown + + # Run script to check for dead links + - name: Checking for dead links + run: pnpm run lint:check-external-links + # ADD THESE LINES ---------------------------------------- + + # Run build + - name: Build Next.js app + run: pnpm run build + + # Run unit tests + - name: Running unit tests + run: pnpm run test + + # Run E2E tests + - name: Install Playwright Browsers + run: pnpm exec playwright install --with-deps + - name: Run Playwright tests + run: pnpm exec playwright test + env: + AUTH_SECRET: some_nextauth_secret + TEST_PASSWORD: password + + - uses: actions/upload-artifact@v4 + if: always() + with: + name: playwright-report + path: playwright-report/ + retention-days: 30 +``` + +As you can see, +we simply call the scripts from our `package.json` file! + +Simple as! 😃 + + +# Star the repo! Thanks for learning with us! -If you find it useful, +If you find it useful, please give the repo a star! ⭐️ [![HitCount](https://hits.dwyl.com/dwyl/nextra-demo-tutorial.svg?style=flat-square)](https://hits.dwyl.com/dwyl/nextra-demo) From 1a3befcbc5b5cd386bb70732200c6c180f9af996 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lui=CC=81s=20Arteiro?= Date: Mon, 29 Jul 2024 20:01:50 +0100 Subject: [PATCH 14/14] chore: Adding comments. --- .markdownlint-cli2.mjs | 15 +++++++++++---- contentlayer.config.js | 3 +++ 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/.markdownlint-cli2.mjs b/.markdownlint-cli2.mjs index 81c0d2a..552a9b5 100644 --- a/.markdownlint-cli2.mjs +++ b/.markdownlint-cli2.mjs @@ -1,18 +1,25 @@ // @ts-check - const options = { + + // Overriding default configs config: { default: true, - "relative-links": true, - MD041: false, - MD013: false, + MD041: false, // https://github.com/DavidAnson/markdownlint/blob/main/doc/md041.md + MD013: false, // https://github.com/DavidAnson/markdownlint/blob/main/doc/md013.md "no-inline-html": { // Add React components we want to allow here allowed_elements: ["LoginOrUserInfo", "Info"], }, + "relative-links": true, // Setting the custom `markdownlint-reule-relative-links` rule }, + + // Run the lint in the following directory globs: ["src/pages/**/*.{md,mdx}"], + + // Don't run lint in these directories ignores: ["**/node_modules", "theme", "scripts"], + + // Import custom rules customRules: ["markdownlint-rule-relative-links"], }; diff --git a/contentlayer.config.js b/contentlayer.config.js index b4b7fc0..6254d00 100644 --- a/contentlayer.config.js +++ b/contentlayer.config.js @@ -1,5 +1,6 @@ import { defineDocumentType, makeSource } from 'contentlayer2/source-files' +// This function computes the fields to add to the `Page` document type const computedFieldsPage = { slug: { type: 'string', @@ -7,12 +8,14 @@ const computedFieldsPage = { }, } +// Define the document type for a `Page` (an `.mdx` file). export const Page = defineDocumentType(() => ({ name: 'Page', filePathPattern: `**/*.mdx`, computedFieldsPage, })) +// Define the document type for each `_meta.json` file export const MetaJson = defineDocumentType(() => ({ name: 'MetaJson', filePathPattern: `**/_meta.json`,