From 78ce2f510d88c724d36ea4191e183bbb63c11e94 Mon Sep 17 00:00:00 2001 From: Richard Zampieri Date: Sun, 8 Oct 2023 20:44:31 -0700 Subject: [PATCH] feat: add automatic versioning --- docs/cli/generate.md | 19 +- docusaurus.config.js | 324 +++++++++--------- .../current/cli/generate.md | 37 +- package-lock.json | 114 +++++- package.json | 1 + 5 files changed, 307 insertions(+), 188 deletions(-) diff --git a/docs/cli/generate.md b/docs/cli/generate.md index 7e8a67ed..4e241bf7 100644 --- a/docs/cli/generate.md +++ b/docs/cli/generate.md @@ -52,15 +52,16 @@ Current available resources: | dto | d | | provider | p | | service | s | +| entity | e | ## Usage Example -| Command | Expected result | -| -------------------------- | ----------------------------------------------------------------------------------------- | -| expressots g u user/find | Use case to be created in the folder `useCases` with this folder structure: user/find | -| expressots g c user/find | Controller to be created in the folder `useCases` inside of user/find | -| expressots g d user/find | DTO to be created in the folder `useCases` inside of user/find | -| expressots g p email/email | Provider to be created in the folder `providers` inside of user/find | +| Command | Expected result | +| -------------------------- | ---------------------------------------------------------------------------------------- | +| expressots g u user/find | Use case to be created in the folder `useCases` with this folder structure: user/find | +| expressots g c user/find | Controller to be created in the folder `useCases` inside of user/find | +| expressots g d user/find | DTO to be created in the folder `useCases` inside of user/find | +| expressots g p email/email | Provider to be created in the folder `providers` inside of user/find | | expressots g s user/find | Service creates usecase, controller and DTO and add them in the desired folder user/find | All resources can be created using the structure `folder/subfolder/resource`. @@ -85,9 +86,9 @@ Here is the current configuration file with all the available options: import { ExpressoConfig, Pattern } from "@expressots/core"; const config: ExpressoConfig = { - sourceRoot: "src", - scaffoldPattern: Pattern.KEBAB_CASE, - opinionated: false, + sourceRoot: "src", + scaffoldPattern: Pattern.KEBAB_CASE, + opinionated: false, }; export default config; diff --git a/docusaurus.config.js b/docusaurus.config.js index c38ad6cb..d83fe1ca 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -4,175 +4,193 @@ const lightCodeTheme = require("prism-react-renderer/themes/github"); const darkCodeTheme = require("prism-react-renderer/themes/dracula"); -/** @type {import('@docusaurus/types').Config} */ -const config = { - title: "Expresso TS", - tagline: "A lightweight, fast and easy to use TypeScript framework", - favicon: "img/favicon.ico", +const { default: axios } = require("axios"); - // Set the production url of your site here - url: "https://doc.expresso-ts.com", //'https://expressots.github.io/', - // Set the // pathname under which your site is served - // For GitHub pages deployment, it is often '//' - baseUrl: "/", +module.exports = async () => { + /** @type {import('@docusaurus/types').Config} */ + const config = { + title: "Expresso TS", + tagline: "A lightweight, fast and easy to use TypeScript framework", + favicon: "img/favicon.ico", - // GitHub pages deployment config. - // If you aren't using GitHub pages, you don't need these. - organizationName: "expressots", // Usually your GitHub org/user name. - projectName: "expresso-site-doc", // Usually your repo name. - deploymentBranch: "gh-pages", - trailingSlash: false, + // Set the production url of your site here + url: "https://doc.expresso-ts.com", //'https://expressots.github.io/', + // Set the // pathname under which your site is served + // For GitHub pages deployment, it is often '//' + baseUrl: "/", - onBrokenLinks: "warn", // 'throw' | 'warn' | 'ignore' - onBrokenMarkdownLinks: "warn", + // GitHub pages deployment config. + // If you aren't using GitHub pages, you don't need these. + organizationName: "expressots", // Usually your GitHub org/user name. + projectName: "expresso-site-doc", // Usually your repo name. + deploymentBranch: "gh-pages", + trailingSlash: false, - // Even if you don't use internalization, you can use this field to set useful - // metadata like html lang. For example, if your site is Chinese, you may want - // to replace "en" with "zh-Hans". - i18n: { - defaultLocale: "en", - locales: ["en", "pt"], - localeConfigs: { - en: { - label: "English", - }, - pt: { - label: "Português", - }, - }, - }, + onBrokenLinks: "warn", // 'throw' | 'warn' | 'ignore' + onBrokenMarkdownLinks: "warn", - presets: [ - [ - "classic", - /** @type {import('@docusaurus/preset-classic').Options} */ - ({ - docs: { - sidebarPath: require.resolve("./sidebars.js"), - }, - theme: { - customCss: require.resolve("./src/css/custom.css"), + // Even if you don't use internalization, you can use this field to set useful + // metadata like html lang. For example, if your site is Chinese, you may want + // to replace "en" with "zh-Hans". + i18n: { + defaultLocale: "en", + locales: ["en", "pt"], + localeConfigs: { + en: { + label: "English", }, - }), - ], - ], - - themeConfig: - /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ - ({ - // Replace with your project's social card - image: "img/expressots-discord-banner-darkbg.png", - metadata: [ - { - name: "keywords", - content: "expressots, framework, nodejs, typescript, javascript", + pt: { + label: "Português", }, - ], - colorMode: { - defaultMode: "light", - disableSwitch: false, - respectPrefersColorScheme: false, - }, - algolia: { - apiKey: "dbc1e8899aa815b7cfdf66b7d4627e74", - indexName: "expresso-ts", - contextualSearch: true, - insights: true, - placeholder: "Search the docs (Press / to focus)", - appId: "3UANWN5EUQ", }, - navbar: { - title: "Expresso TS", - hideOnScroll: true, - logo: { - alt: "Expresso TS", - src: "img/logo.png", - }, - items: [ - { - type: "doc", - docId: "hello", - position: "right", - label: "Documentation", - }, - { - type: "doc", - docId: "governance", - position: "right", - label: "Governance", + }, + + presets: [ + [ + "classic", + /** @type {import('@docusaurus/preset-classic').Options} */ + ({ + docs: { + sidebarPath: require.resolve("./sidebars.js"), }, - { - href: "https://github.com/expressots/expressots", - label: "GitHub", - position: "right", - "aria-label": "GitHub repository", + theme: { + customCss: require.resolve("./src/css/custom.css"), }, + }), + ], + ], + + themeConfig: + /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ + ({ + // Replace with your project's social card + image: "img/expressots-discord-banner-darkbg.png", + metadata: [ { - type: "localeDropdown", - label: "Language", - position: "right", + name: "keywords", + content: "expressots, framework, nodejs, typescript, javascript", }, ], - }, - announcementBar: { - id: "supportus", - content: "Current Version: v2.0.0", - backgroundColor: "#111", - textColor: "#19CE59", - isCloseable: false, - }, - stylesheets: [ - { - href: "/css/custom.css", - type: "text/css", + colorMode: { + defaultMode: "light", + disableSwitch: false, + respectPrefersColorScheme: false, }, - ], - footer: { - style: "light", - links: [ - { - title: "Docs", - items: [ - { - label: "Tutorial", - to: "docs/category/tutorials", - }, - ], - }, - { - title: "Community", - items: [ - { - label: "Twitch TV", - href: "https://www.twitch.tv/richardzampieri", - }, - ], + algolia: { + apiKey: "dbc1e8899aa815b7cfdf66b7d4627e74", + indexName: "expresso-ts", + contextualSearch: true, + insights: true, + placeholder: "Search the docs (Press / to focus)", + appId: "3UANWN5EUQ", + }, + navbar: { + title: "Expresso TS", + hideOnScroll: true, + logo: { + alt: "Expresso TS", + src: "img/logo.png", }, + items: [ + { + type: "doc", + docId: "hello", + position: "right", + label: "Documentation", + }, + { + type: "doc", + docId: "governance", + position: "right", + label: "Governance", + }, + { + href: "https://github.com/expressots/expressots", + label: "GitHub", + position: "right", + "aria-label": "GitHub repository", + }, + { + type: "localeDropdown", + label: "Language", + position: "right", + }, + ], + }, + announcementBar: { + id: "supportus", + content: "Current Version: v2.0.0", + backgroundColor: "#111", + textColor: "#19CE59", + isCloseable: false, + }, + stylesheets: [ { - title: "Code", - items: [ - { - label: "NPM Core", - href: "https://www.npmjs.com/package/@expressots/core", - }, - { - label: "NPM CLI", - href: "https://www.npmjs.com/package/@expressots/cli", - }, - { - label: "GitHub", - href: "https://github.com/expressots", - }, - ], + href: "/css/custom.css", + type: "text/css", }, ], - copyright: `Copyright © ${new Date().getFullYear()} Official ExpressoTS, Released under the MIT License.`, - }, - prism: { - theme: lightCodeTheme, - darkTheme: darkCodeTheme, - }, - }), -}; + footer: { + style: "light", + links: [ + { + title: "Docs", + items: [ + { + label: "Tutorial", + to: "docs/category/tutorials", + }, + ], + }, + { + title: "Community", + items: [ + { + label: "Twitch TV", + href: "https://www.twitch.tv/richardzampieri", + }, + ], + }, + { + title: "Code", + items: [ + { + label: "NPM Core", + href: "https://www.npmjs.com/package/@expressots/core", + }, + { + label: "NPM CLI", + href: "https://www.npmjs.com/package/@expressots/cli", + }, + { + label: "GitHub", + href: "https://github.com/expressots", + }, + ], + }, + ], + copyright: `Copyright © ${new Date().getFullYear()} Official ExpressoTS, Released under the MIT License.`, + }, + prism: { + theme: lightCodeTheme, + darkTheme: darkCodeTheme, + }, + }), + }; + + // Fetch the content asynchronously using Axios + try { + const response = await axios.get("https://api.github.com/repos/expressots/expressots/releases"); + const latestRelease = response.data[0]; + const version = latestRelease.tag_name; -module.exports = config; + const newContent = `Current Version: v${version}`; + // @ts-ignore + config.themeConfig.announcementBar.content = newContent; + + return config; + } catch (error) { + console.error("Error fetching current Version from Github:", error); + return config; + } +}; diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/cli/generate.md b/i18n/pt/docusaurus-plugin-content-docs/current/cli/generate.md index 19325426..a14362a7 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/cli/generate.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/cli/generate.md @@ -45,23 +45,24 @@ Nós fornecemos duas estruturas diferentes para estruturar os recursos: Recursos atualmente disponíveis para serem gerados: -| Forma longa | curta | -| ----------- | ------ | -| usecase | u | -| controller | c | -| dto | d | -| provider | p | -| service | s | +| Forma longa | curta | +| ----------- | ----- | +| usecase | u | +| controller | c | +| dto | d | +| provider | p | +| service | s | +| entity | e | ## Exemplo de uso -| Comando | Resultado esperado -| ----------------------------- | ----------------------------------------------------------------------------------------- | -| expressots g u user/find | Caso de uso para ser criado na pasta `useCases` com esta estrutura de pasta: user/find | -| expressots g c user/find | Controlador para ser criado na pasta `useCases` dentro de user/find | -| expressots g d user/find | DTO a ser criado na pasta `useCases` dentro de user/find | -| expressots g p email/email | Provedor a ser criado na pasta `providers` dentro de user/find | -| expressots g s user/find | Serviço cria caso de uso, controladora e dto e os adiciona na pasta user/find | +| Comando | Resultado esperado | +| -------------------------- | -------------------------------------------------------------------------------------- | +| expressots g u user/find | Caso de uso para ser criado na pasta `useCases` com esta estrutura de pasta: user/find | +| expressots g c user/find | Controlador para ser criado na pasta `useCases` dentro de user/find | +| expressots g d user/find | DTO a ser criado na pasta `useCases` dentro de user/find | +| expressots g p email/email | Provedor a ser criado na pasta `providers` dentro de user/find | +| expressots g s user/find | Serviço cria caso de uso, controladora e dto e os adiciona na pasta user/find | Todos os recursos podem ser criados usando a estrutura `pasta/subpasta/recurso.` @@ -85,9 +86,9 @@ Aqui está o arquivo de configuração atual com todas as opções disponíveis: import { ExpressoConfig, Pattern } from "@expressots/core"; const config: ExpressoConfig = { - sourceRoot: "src", - scaffoldPattern: Pattern.KEBAB_CASE, - opinionated: false, + sourceRoot: "src", + scaffoldPattern: Pattern.KEBAB_CASE, + opinionated: false, }; export default config; @@ -112,4 +113,4 @@ ExpressoTS é um projeto de código aberto licenciado sob o MIT. É um projeto i - Subscreva no nosso canal na Twitch: **[Richard Zampieri](https://www.twitch.tv/richardzampieri)** - Entre no nosso **[Discord](https://discord.com/invite/PyPJfGK)** - Contribua submetendo **[issues e pull requests](https://github.com/expressots/expressots/issues/new/choose)** -- Compartilhe o projeto com seus amigos e colegas \ No newline at end of file +- Compartilhe o projeto com seus amigos e colegas diff --git a/package-lock.json b/package-lock.json index 07f4cf33..bf849635 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,7 @@ "@docusaurus/core": "^2.4.1", "@docusaurus/preset-classic": "^2.4.1", "@mdx-js/react": "^1.6.22", + "axios": "^1.5.1", "clsx": "^1.2.1", "prism-react-renderer": "^1.3.5", "react": "^17.0.2", @@ -4078,6 +4079,11 @@ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, "node_modules/at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", @@ -4123,11 +4129,13 @@ } }, "node_modules/axios": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", - "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.1.tgz", + "integrity": "sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A==", "dependencies": { - "follow-redirects": "^1.14.7" + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" } }, "node_modules/babel-loader": { @@ -4820,6 +4828,17 @@ "node": ">=10" } }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/comma-separated-tokens": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", @@ -5556,6 +5575,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -6438,6 +6465,19 @@ "node": ">=6" } }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -9440,6 +9480,11 @@ "node": ">= 0.10" } }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -12095,6 +12140,14 @@ "node": ">=10.0.0" } }, + "node_modules/wait-on/node_modules/axios": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", + "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==", + "dependencies": { + "follow-redirects": "^1.14.7" + } + }, "node_modules/watchpack": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", @@ -15697,6 +15750,11 @@ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, "at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", @@ -15716,11 +15774,13 @@ } }, "axios": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", - "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.1.tgz", + "integrity": "sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A==", "requires": { - "follow-redirects": "^1.14.7" + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" } }, "babel-loader": { @@ -16209,6 +16269,14 @@ "resolved": "https://registry.npmjs.org/combine-promises/-/combine-promises-1.1.0.tgz", "integrity": "sha512-ZI9jvcLDxqwaXEixOhArm3r7ReIivsXkpbyEWyeOhzz1QS0iSgBPnWvEqvIQtYyamGCYA88gFhmUrs9hrrQ0pg==" }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, "comma-separated-tokens": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", @@ -16712,6 +16780,11 @@ "slash": "^3.0.0" } }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, "depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -17371,6 +17444,16 @@ } } }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, "forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -19455,6 +19538,11 @@ } } }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -21364,6 +21452,16 @@ "lodash": "^4.17.21", "minimist": "^1.2.5", "rxjs": "^7.5.4" + }, + "dependencies": { + "axios": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", + "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==", + "requires": { + "follow-redirects": "^1.14.7" + } + } } }, "watchpack": { diff --git a/package.json b/package.json index 30635cd4..6cb5c940 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "@docusaurus/core": "^2.4.1", "@docusaurus/preset-classic": "^2.4.1", "@mdx-js/react": "^1.6.22", + "axios": "^1.5.1", "clsx": "^1.2.1", "prism-react-renderer": "^1.3.5", "react": "^17.0.2",