From 1a8b1976a913d9844aebbe68cff96a1a7eeefd03 Mon Sep 17 00:00:00 2001 From: Dilan Date: Tue, 8 Nov 2022 04:11:42 -0600 Subject: [PATCH] prepare for 7.0.0 release --- README.md | 1143 +---------------- docs/blog/2019-05-28-first-blog-post.md | 12 - docs/blog/2019-05-29-long-blog-post.md | 44 - docs/blog/2021-08-01-mdx-blog-post.mdx | 20 - .../docusaurus-plushie-banner.jpeg | Bin 96122 -> 0 bytes docs/blog/2021-08-26-welcome/index.md | 25 - docs/blog/authors.yml | 17 - docs/docs/intro.md | 47 - docs/docs/tutorial-basics/_category_.json | 8 - docs/docs/tutorial-basics/congratulations.md | 23 - .../tutorial-basics/create-a-blog-post.md | 34 - .../docs/tutorial-basics/create-a-document.md | 57 - docs/docs/tutorial-basics/create-a-page.md | 43 - docs/docs/tutorial-basics/deploy-your-site.md | 31 - .../tutorial-basics/markdown-features.mdx | 146 --- docs/docs/tutorial-extras/_category_.json | 7 - .../img/docsVersionDropdown.png | Bin 25427 -> 0 bytes .../tutorial-extras/img/localeDropdown.png | Bin 27841 -> 0 bytes .../tutorial-extras/manage-docs-versions.md | 55 - .../tutorial-extras/translate-your-site.md | 88 -- docs/docusaurus.config.js | 132 -- docs/sidebars.js | 33 - docs/src/css/custom.css | 30 - docs/src/pages/index.js | 41 - docs/src/pages/index.module.css | 23 - docs/src/pages/markdown-page.md | 7 - docs/static/img/docusaurus.png | Bin 5142 -> 0 bytes docs/static/img/favicon.ico | Bin 3626 -> 0 bytes docs/static/img/logo.svg | 1 - .../static/img/undraw_docusaurus_mountain.svg | 171 --- docs/static/img/undraw_docusaurus_react.svg | 170 --- docs/static/img/undraw_docusaurus_tree.svg | 40 - packages/craco-types/README.md | 3 + packages/craco-types/package.json | 2 +- packages/craco/README.md | 51 +- packages/craco/package.json | 2 +- packages/craco/src/bin/jest.ts | 22 +- packages/craco/src/lib/asset-modules.ts | 4 +- packages/craco/src/lib/plugin-utils.ts | 2 +- packages/craco/src/lib/user-config-utils.ts | 26 +- {docs => website}/.gitignore | 0 {docs => website}/README.md | 0 {docs => website}/babel.config.js | 0 website/docs/configuration-api.md | 47 + website/docs/configuration/babel.md | 45 + website/docs/configuration/devserver.md | 34 + website/docs/configuration/eslint.md | 56 + website/docs/configuration/getting-started.md | 196 +++ website/docs/configuration/jest.md | 56 + website/docs/configuration/plugins.md | 21 + website/docs/configuration/style.md | 114 ++ website/docs/configuration/typescript.md | 21 + website/docs/configuration/webpack.md | 76 ++ website/docs/getting-started.md | 83 ++ website/docs/plugin-api/getting-started.md | 59 + website/docs/plugin-api/hooks.md | 228 ++++ .../utility-functions/miscellaneous.md | 97 ++ .../webpack-asset-modules.md | 263 ++++ .../utility-functions/webpack-loaders.md | 261 ++++ .../utility-functions/webpack-plugins.md | 109 ++ website/docs/welcome.md | 62 + website/docusaurus.config.js | 261 ++++ {docs => website}/package-lock.json | 1078 +++++++++------- {docs => website}/package.json | 15 +- website/plugins/plugins.md | 30 + .../recipes/add-autoprefixer-options.md | 0 website/sidebars.js | 56 + website/sidebarsRecipes.js | 19 + .../src/components/HomepageFeatures/index.js | 0 .../HomepageFeatures/styles.module.css | 0 website/src/css/custom.scss | 108 ++ website/src/pages/index.js | 61 + website/static/.nojekyll | 0 website/static/CNAME | 1 + website/static/img/craco.png | Bin 0 -> 33016 bytes website/static/img/favicon.ico | Bin 0 -> 179575 bytes website/static/img/open-source.svg | 1 + 77 files changed, 3108 insertions(+), 2910 deletions(-) delete mode 100644 docs/blog/2019-05-28-first-blog-post.md delete mode 100644 docs/blog/2019-05-29-long-blog-post.md delete mode 100644 docs/blog/2021-08-01-mdx-blog-post.mdx delete mode 100644 docs/blog/2021-08-26-welcome/docusaurus-plushie-banner.jpeg delete mode 100644 docs/blog/2021-08-26-welcome/index.md delete mode 100644 docs/blog/authors.yml delete mode 100644 docs/docs/intro.md delete mode 100644 docs/docs/tutorial-basics/_category_.json delete mode 100644 docs/docs/tutorial-basics/congratulations.md delete mode 100644 docs/docs/tutorial-basics/create-a-blog-post.md delete mode 100644 docs/docs/tutorial-basics/create-a-document.md delete mode 100644 docs/docs/tutorial-basics/create-a-page.md delete mode 100644 docs/docs/tutorial-basics/deploy-your-site.md delete mode 100644 docs/docs/tutorial-basics/markdown-features.mdx delete mode 100644 docs/docs/tutorial-extras/_category_.json delete mode 100644 docs/docs/tutorial-extras/img/docsVersionDropdown.png delete mode 100644 docs/docs/tutorial-extras/img/localeDropdown.png delete mode 100644 docs/docs/tutorial-extras/manage-docs-versions.md delete mode 100644 docs/docs/tutorial-extras/translate-your-site.md delete mode 100644 docs/docusaurus.config.js delete mode 100644 docs/sidebars.js delete mode 100644 docs/src/css/custom.css delete mode 100644 docs/src/pages/index.js delete mode 100644 docs/src/pages/index.module.css delete mode 100644 docs/src/pages/markdown-page.md delete mode 100644 docs/static/img/docusaurus.png delete mode 100644 docs/static/img/favicon.ico delete mode 100644 docs/static/img/logo.svg delete mode 100644 docs/static/img/undraw_docusaurus_mountain.svg delete mode 100644 docs/static/img/undraw_docusaurus_react.svg delete mode 100644 docs/static/img/undraw_docusaurus_tree.svg create mode 100644 packages/craco-types/README.md rename {docs => website}/.gitignore (100%) rename {docs => website}/README.md (100%) rename {docs => website}/babel.config.js (100%) create mode 100644 website/docs/configuration-api.md create mode 100644 website/docs/configuration/babel.md create mode 100644 website/docs/configuration/devserver.md create mode 100644 website/docs/configuration/eslint.md create mode 100644 website/docs/configuration/getting-started.md create mode 100644 website/docs/configuration/jest.md create mode 100644 website/docs/configuration/plugins.md create mode 100644 website/docs/configuration/style.md create mode 100644 website/docs/configuration/typescript.md create mode 100644 website/docs/configuration/webpack.md create mode 100644 website/docs/getting-started.md create mode 100644 website/docs/plugin-api/getting-started.md create mode 100644 website/docs/plugin-api/hooks.md create mode 100644 website/docs/plugin-api/utility-functions/miscellaneous.md create mode 100644 website/docs/plugin-api/utility-functions/webpack-asset-modules.md create mode 100644 website/docs/plugin-api/utility-functions/webpack-loaders.md create mode 100644 website/docs/plugin-api/utility-functions/webpack-plugins.md create mode 100644 website/docs/welcome.md create mode 100644 website/docusaurus.config.js rename {docs => website}/package-lock.json (96%) rename {docs => website}/package.json (71%) create mode 100644 website/plugins/plugins.md rename docs/static/.nojekyll => website/recipes/add-autoprefixer-options.md (100%) create mode 100644 website/sidebars.js create mode 100644 website/sidebarsRecipes.js rename {docs => website}/src/components/HomepageFeatures/index.js (100%) rename {docs => website}/src/components/HomepageFeatures/styles.module.css (100%) create mode 100644 website/src/css/custom.scss create mode 100644 website/src/pages/index.js create mode 100644 website/static/.nojekyll create mode 100644 website/static/CNAME create mode 100644 website/static/img/craco.png create mode 100644 website/static/img/favicon.ico create mode 100644 website/static/img/open-source.svg diff --git a/README.md b/README.md index 0a201b4b..15158e93 100644 --- a/README.md +++ b/README.md @@ -1,1119 +1,50 @@ -# CRACO +
+ + + +

CRACO

+

+ +**C**reate **R**eact **A**pp **C**onfiguration **O**verride, an easy and comprehensible configuration layer for create-react-app. -[![NPM Status](https://img.shields.io/npm/v/@craco/craco.svg)](https://www.npmjs.com/package/@craco/craco) [![Build Status](https://img.shields.io/travis/gsoft-inc/craco/master.svg?style=flat&label=travis)](https://travis-ci.org/gsoft-inc/craco) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-green.svg)](https://github.com/sharegate/craco/pulls) [![NPM Downloads](https://img.shields.io/npm/dm/@craco/craco.svg)](https://www.npmjs.com/package/@craco/craco) +**Find config docs, API docs, plugins, and example configs at [craco.js.org](https://craco.js.org)!** -**C**reate **R**eact **A**pp **C**onfiguration **O**verride is an easy and comprehensible configuration layer for create-react-app. +

-Get all the benefits of create-react-app **and** customization without using 'eject' by adding a single configuration (e.g. `craco.config.js`) file at the root of your application and customize your eslint, babel, postcss configurations and many more. +
-All you have to do is create your app using [create-react-app](https://github.com/facebook/create-react-app/) and customize the configuration file. +[![npm status](https://img.shields.io/npm/v/@craco/craco.svg)](https://www.npmjs.com/package/@craco/craco) [![npm downloads](https://img.shields.io/npm/dm/@craco/craco.svg)](https://www.npmjs.com/package/@craco/craco) [![npm license](https://img.shields.io/npm/l/@craco/craco?color=orange)](https://github.com/dilanx/craco/blob/main/packages/craco/LICENSE) [![GitHub stars](https://img.shields.io/github/stars/dilanx/craco?color=red)](https://github.com/dilanx/craco) [![GitHub contributors](https://img.shields.io/github/contributors/dilanx/craco?color=blueviolet)](https://github.com/dilanx/craco/graphs/contributors) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-blueviolet.svg)](https://github.com/dilanx/craco/pulls) -## Support +
-- Create React App (CRA) 4.\* -- Yarn -- Yarn Workspace -- NPM -- Lerna (with or without hoisting) -- Custom `react-scripts` version +Get all the benefits of [Create React App](https://create-react-app.dev) **and** customization without using 'eject' by adding a single configuration (e.g. `craco.config.js`) file at the root of your application and customize your ESLint, Babel, PostCSS configurations and many more. -## Documentation +1. Install the latest version of the package from npm as a dev dependency: -- [Installation](#installation) - How to install and setup CRACO. -- [Configuration](#configuration) - How to customize your CRA installation with CRACO. - - [Configuration File](#configuration-file) - - [Configuration Helpers](#configuration-helpers) - - [Exporting your Configuration](#exporting-your-configuration) - - [Setting a Custom Location for the configuration file](#setting-a-custom-location-for-cracoconfigjs) -- [CRA toolchain for Beginners](#cra-toolchain-for-beginners) - - [Notes on CRA Configurations and Problem Solving](#notes-on-cra-configurations-and-problem-solving) - - [Ejecting CRA to Learn](#ejecting-cra-to-learn) - - [Direct Versus Functional Config Definitions](#direct-object-literal-versus-functional-config-definitions) -- [API](#api) - CRACO APIs for Jest and Webpack. - - [Jest API](#jest-api) - - [Webpack API](#webpack-api) -- [Recipes](https://github.com/sharegate/craco/tree/master/recipes) – Short recipes for common use cases. -- [Available Plugins](https://github.com/sharegate/craco#community-maintained-plugins) - Plugins maintained by the community. -- [Develop a Plugin](#develop-a-plugin) - How to develop a plugin for CRACO. -- [Backward Compatibility](#backward-compatibility) -- [Debugging](#debugging) -- [License](#license) + ``` + npm i -D @craco/craco + ``` -## Preface +2. Create a CRACO configuration file in your project's root directory and [configure](https://craco.js.org/docs/): -### Acknowledgements + ```diff + my-app + ├── node_modules + + ├── craco.config.js + └── package.json + ``` -We are grateful to [@timarney](https://github.com/timarney) the creator of [react-app-rewired](https://github.com/timarney/react-app-rewired) for his original idea. +3. Update the existing calls to `react-scripts` in the `scripts` section of your `package.json` to use the `craco` CLI: -The configuration style of this plugin has been greatly influenced by [Vue CLI](https://cli.vuejs.org/guide/). + ```diff title="package.json" + "scripts": { + - "start": "react-scripts start" + + "start": "craco start" + - "build": "react-scripts build" + + "build": "craco build" + - "test": "react-scripts test" + + "test": "craco test" + } + ``` -### Fair Warning - -By doing this you're breaking the ["guarantees"](https://github.com/facebookincubator/create-react-app/issues/99#issuecomment-234657710) that CRA provides. That is to say you now "own" the configs. **No support** will be provided. Proceed with caution. - -## Installation - -Install the latest version of the package from npm: - -```bash -$ npm i @craco/craco -``` - -> _Alternatively, you can install the latest alpha build:_ -> -> ```bash -> $ npm i @craco/craco@alpha -> ``` -> -> _However, you should be aware that these versions are experimental._ - -Create a `craco.config.js` file in the root directory and [configure CRACO](#configuration): - -``` -my-app -├── node_modules -├── craco.config.js -└── package.json -``` - -Update the existing calls to `react-scripts` in the `scripts` section of your `package.json` file to use the `craco` CLI: - -```diff -/* package.json */ - -"scripts": { -- "start": "react-scripts start", -+ "start": "craco start", -- "build": "react-scripts build", -+ "build": "craco build" -- "test": "react-scripts test", -+ "test": "craco test" -} -``` - -Start your app for development: - -```bash -$ npm start -``` - -Or build your app: - -```bash -$ npm run build -``` - -## Configuration - -CRACO is configured with a `craco.config.ts`, `craco.config.js`, `.cracorc.ts`, `.cracorc.js` or `.cracorc` file, or [a file specified in `package.json`](#setting-a-custom-location-for-cracoconfigjs). This file is divided into sections representing the major parts of what makes up the default create react app. - -If there are multiple configuration files in the same directory, CRACO will only use one. The priority order is: - -1. `package.json` -1. `craco.config.ts` -1. `craco.config.js` -1. `.cracorc.ts` -1. `.cracorc.js` -1. `.cracorc` - -### Configuration File - -Below is a sample CRACO configuration file. Your final config file will be much shorter than this sample. See example CRACO configurations in [Recipes](https://github.com/sharegate/craco/tree/master/recipes). - -Some sections have a `mode` property. When this is available there are 2 possible values: - -- `extends`: the provided configuration will extends the CRA settings (**default mode**) -- `file`: the CRA settings will be reset and you will provide an official configuration file for the plugin ([postcss](https://github.com/michael-ciniawsky/postcss-load-config#postcssrc), [eslint](https://eslint.org/docs/user-guide/configuring#configuration-file-formats)) that will supersede any settings. - -```javascript -const { when, whenDev, whenProd, whenTest, ESLINT_MODES, POSTCSS_MODES } = require('@craco/craco'); - -module.exports = { - reactScriptsVersion: 'react-scripts' /* (default value) */, - style: { - modules: { - localIdentName: '', - }, - css: { - loaderOptions: { - /* Any css-loader configuration options: https://github.com/webpack-contrib/css-loader. */ - }, - loaderOptions: (cssLoaderOptions, { env, paths }) => { - return cssLoaderOptions; - }, - }, - sass: { - loaderOptions: { - /* Any sass-loader configuration options: https://github.com/webpack-contrib/sass-loader. */ - }, - loaderOptions: (sassLoaderOptions, { env, paths }) => { - return sassLoaderOptions; - }, - }, - postcss: { - mode: 'extends' /* (default value) */ || 'file', - plugins: [require('plugin-to-append')], // Additional plugins given in an array are appended to existing config. - plugins: (plugins) => [require('plugin-to-prepend')].concat(plugins), // Or you may use the function variant. - env: { - autoprefixer: { - /* Any autoprefixer options: https://github.com/postcss/autoprefixer#options */ - }, - stage: 3 /* Any valid stages: https://cssdb.org/#staging-process. */, - features: { - /* Any CSS features: https://preset-env.cssdb.org/features. */ - }, - }, - loaderOptions: { - /* Any postcss-loader configuration options: https://github.com/postcss/postcss-loader. */ - }, - loaderOptions: (postcssLoaderOptions, { env, paths }) => { - return postcssLoaderOptions; - }, - }, - }, - eslint: { - enable: true /* (default value) */, - mode: 'extends' /* (default value) */ || 'file', - configure: { - /* Any eslint configuration options: https://eslint.org/docs/user-guide/configuring */ - }, - configure: (eslintConfig, { env, paths }) => { - return eslintConfig; - }, - pluginOptions: { - /* Any eslint plugin configuration options: https://github.com/webpack-contrib/eslint-webpack-plugin#options. */ - }, - pluginOptions: (eslintOptions, { env, paths }) => { - return eslintOptions; - }, - }, - babel: { - presets: [], - plugins: [], - loaderOptions: { - /* Any babel-loader configuration options: https://github.com/babel/babel-loader. */ - }, - loaderOptions: (babelLoaderOptions, { env, paths }) => { - return babelLoaderOptions; - }, - }, - typescript: { - enableTypeChecking: true /* (default value) */, - }, - webpack: { - alias: {}, - plugins: { - add: [] /* An array of plugins */, - add: [ - plugin1, - [plugin2, 'append'], - [plugin3, 'prepend'] /* Specify if plugin should be appended or prepended */, - ] /* An array of plugins */, - remove: [] /* An array of plugin constructor's names (i.e. "StyleLintPlugin", "ESLintWebpackPlugin" ) */, - }, - configure: { - /* Any webpack configuration options: https://webpack.js.org/configuration */ - }, - configure: (webpackConfig, { env, paths }) => { - return webpackConfig; - }, - }, - jest: { - babel: { - addPresets: true /* (default value) */, - addPlugins: true /* (default value) */, - }, - configure: { - /* Any Jest configuration options: https://jestjs.io/docs/en/configuration */ - }, - configure: (jestConfig, { env, paths, resolve, rootDir }) => { - return jestConfig; - }, - }, - devServer: { - /* Any devServer configuration options: https://webpack.js.org/configuration/dev-server/#devserver */ - }, - devServer: (devServerConfig, { env, paths, proxy, allowedHost }) => { - return devServerConfig; - }, - plugins: [ - { - plugin: { - overrideCracoConfig: ({ cracoConfig, pluginOptions, context: { env, paths } }) => { - return cracoConfig; - }, - overrideWebpackConfig: ({ webpackConfig, cracoConfig, pluginOptions, context: { env, paths } }) => { - return webpackConfig; - }, - overrideDevServerConfig: ({ - devServerConfig, - cracoConfig, - pluginOptions, - context: { env, paths, proxy, allowedHost }, - }) => { - return devServerConfig; - }, - overrideJestConfig: ({ - jestConfig, - cracoConfig, - pluginOptions, - context: { env, paths, resolve, rootDir }, - }) => { - return jestConfig; - }, - }, - options: {}, - }, - ], -}; -``` - -### Configuration Helpers - -Usage for all "when" functions is the same, `whenDev, whenProd, whenTest` are shortcuts for `when`. - -`when(condition, fct, [unmetValue])` - -Usage: - -```javascript -const { when, whenDev } = require('@craco/craco'); - -module.exports = { - eslint: { - mode: ESLINT_MODES.file, - configure: { - formatter: when(process.env.NODE_ENV === 'CI', require('eslint-formatter-vso')), - }, - }, - webpack: { - plugins: [new ConfigWebpackPlugin(), ...whenDev(() => [new CircularDependencyPlugin()], [])], - }, -}; -``` - -### Exporting your Configuration - -You can export your configuration as an **object literal**: - -```javascript -/* craco.config.js */ - -module.exports = { - ... -} -``` - -a **function**: - -```javascript -/* craco.config.js */ - -module.exports = function({ env }) { - return { - ... - }; -} -``` - -a **promise** or an **async function**: - -```javascript -/* craco.config.js */ - -module.exports = async function({ env }) { - await ... - - return { - ... - }; -} -``` - -### Setting a Custom Location for craco.config.js - -Both options support a **relative** or an **absolute** path. - -**1- package.json** _(Recommended)_ - -You can change the location of the `craco.config.js` file by specifying a value for `cracoConfig` in your `package.json` -file. - -```javascript -/* package.json */ - -{ - "cracoConfig": "config/craco-config-with-custom-name.js" -} -``` - -**2- CLI** _(For backward compatibility)_ - -You can also change the location of the `craco.config.js` file by specifying the `--config` CLI option. _This option -doesn't support Babel with Jest_ - -```javascript -/* package.json */ - -{ - "scripts": { - "start": "craco start --config config/craco-config-with-custom-name.js" - } -} -``` - -## CRA Toolchain for Beginners - -### Introduction to CRACO - -Create React App ([CRA](https://github.com/facebook/create-react-app)) is intended to allow people to get started with -writing React apps quickly. It does this by packaging several key components with a solid default configuration. - -After some initial experimentation, many people find the default CRA is not quite the right fit. Yet, selecting and configuring a toolchain featuring all of the components CRA already offers is overwhelming. - -CRACO allows you to enjoy the recognizable project structure of CRA while changing detailed configuration settings of -each component. - -### Notes on CRA Configurations and Problem Solving - -Keep in mind that there are _some_ configuration settings available to CRA without CRACO. - -Getting exactly what you want may involve a combination of making changes your CRACO configuration file and by using -some of the more limited _but still important_ settings available in Create React App. - -Before jumping into customizing your _CRACO_ configuration, step back and think about each part of the problem you're -trying to solve. Be sure to review these resources on the CRA configuration, as it may save you time: - -- [Important Environment Variables that Configure CRA](https://create-react-app.dev/docs/advanced-configuration) -- [Learn about using `postbuild` commands in `package.json`](https://stackoverflow.com/a/51818028/4028977) -- [Proxying API or other Requests](https://create-react-app.dev/docs/proxying-api-requests-in-development/), or "how - to integrate CRA's dev server with a second backend": - [problem statement](https://github.com/facebook/create-react-app/issues/147) -- [Search CRACO issues, for gotchas, hints and examples](https://github.com/gsoft-inc/craco/issues?q=is%3Aissue+sort%3Aupdated-desc) - -### Ejecting CRA to Learn - -Avoiding ejecting is a major goal for many CRACO users. However, if you're still learning toolchains and modern -frontend workflows, it may be helpful to create a sample ejected CRA project to see how the default CRA app configures -each of the components. - -While [CRACO's sample configuration file](#configuration-file) inherits directly from CRA's default settings, seeing the default CRA config in -the ejected CRA file structure may give you useful perspective. - -You may even want to try testing a change in the ejected app to better understand how it would be done with your CRACO -config-based project. - -### Direct (object literal) Versus Functional Config Definitions - -The [sample CRACO config file](#configuration-file) is meant to show possibilities for configuring your CRA-based project. Each section -contains a primary configuration area, `loaderOptions` or `configure`. These config areas are where you will make most -of your detailed changes. - -You, (or perhaps your IDE) may have noticed that the sections have duplicate keys, i.e. loaderOptions is listed twice -in the sample config file. - -The reason for this is to allow you to choose between object literal or functionally defined configuration choices. -There are a few reasons for this: - -1. Sometimes it may be faster to test a minor change using keys. -1. Other times a functional definition is necessary to get the right configuration. -1. While not common, a setting may **only** work if you use one or the other! See, - [devServer port example](https://github.com/gsoft-inc/craco/issues/172#issuecomment-651505730) - -#### A simple example of equivalent direct and functionally defined configuration settings: - -##### Direct configuration (object literal) - -```javascript -devServer: { - writeToDisk: true; -} -``` - -##### Functionally defined configuration - -```javascript -devServer: (devServerConfig, { env, paths, proxy, allowedHost }) => { - devServerConfig.writeToDisk = true; - return devServerConfig; -}; -``` - -## API - -To integrate with other tools, it's useful to have access to the configuration generated by CRACO. - -That's what CRACO APIs are for. The current API support Jest and Webpack. - -### Jest API - -Accept a `cracoConfig`, a `context` object and `options`. The generated Jest config object is returned. - -> **Warning:** `createJestConfig` does NOT accept `cracoConfig` as a function. If your `craco.config.js` exposes a config -> function, you have to call it yourself before passing it to `createJestConfig`. - -`createJestConfig(cracoConfig, context = {}, options = { verbose: false, config: null })` - -Usage: - -```javascript -/* jest.config.js */ - -const { createJestConfig } = require('@craco/craco'); - -const cracoConfig = require('./craco.config.js'); -const jestConfig = createJestConfig(cracoConfig); - -module.exports = jestConfig; -``` - -#### Examples - -- [vscode-jest](https://github.com/sharegate/craco/tree/master/recipes/use-a-jest-config-file) - -### Webpack API - -You can create Webpack DevServer and Production configurations using `createWebpackDevConfig` and `createWebpackProdConfig`. - -Accept a `cracoConfig`, a `context` object and `options`. The generated Webpack config object is returned. - -> **Warning:** Similar to `createJestConfig`, these functions do NOT accept `cracoConfig` as a function. If your -> `craco.config.js` exposes a config function, you have to call it yourself before passing it further. - -`createWebpackDevConfig(cracoConfig, context = {}, options = { verbose: false, config: null })` - -`createWebpackProdConfig(cracoConfig, context = {}, options = { verbose: false, config: null })` - -Usage: - -```javascript -/* webpack.config.js */ - -const { createWebpackDevConfig } = require('@craco/craco'); - -const cracoConfig = require('./craco.config.js'); -const webpackConfig = createWebpackDevConfig(cracoConfig); - -module.exports = webpackConfig; -``` - -## Develop a Plugin - -### Hooks - -There are four hooks available to a plugin: - -- `overrideCracoConfig`: Let a plugin customize the config object before it's process by `craco`. -- `overrideWebpackConfig`: Let a plugin customize the `webpack` config that will be used by CRA. -- `overrideDevServerConfig`: Let a plugin customize the dev server config that will be used by CRA. -- `overrideJestConfig`: Let a plugin customize the `Jest` config that will be used by CRA. - -**Important:** - -Every function must return the updated config object. - -#### overrideCracoConfig - -The function `overrideCracoConfig` let a plugin override the config object **before** it's process by `craco`. - -If a plugin define the function, it will be called with the config object read from the `craco.config.js` file provided -by the consumer. - -_The function must return a valid config object, otherwise `craco` will throw an error._ - -The function will be called with a single object argument having the following structure: - -```javascript -{ - cracoConfig: "The config object read from the craco.config.js file provided by the consumer", - pluginOptions: "The plugin options provided by the consumer", - context: { - env: "The current NODE_ENV (development, production, etc..)", - paths: "An object that contains all the paths used by CRA" - } -} -``` - -##### Example - -Plugin: - -```javascript -/* craco-plugin-log-craco-config.js */ - -module.exports = { - overrideCracoConfig: ({ cracoConfig, pluginOptions, context: { env, paths } }) => { - if (pluginOptions.preText) { - console.log(pluginOptions.preText); - } - - console.log(JSON.stringify(cracoConfig, null, 4)); - - // Always return the config object. - return cracoConfig; - }, -}; -``` - -Registration (in a `craco.config.js` file): - -```javascript -const logCracoConfigPlugin = require("./craco-plugin-log-craco-config"); - -module.exports = { - ... - plugins: [ - { plugin: logCracoConfigPlugin, options: { preText: "Will log the craco config:" } } - ] -}; -``` - -#### overrideWebpackConfig - -The function `overrideWebpackConfig` let a plugin override the `webpack` config object **after** it's been customized -by `craco`. - -_The function must return a valid config object, otherwise `craco` will throw an error._ - -The function will be called with a single object argument having the following structure: - -```javascript -{ - webpackConfig: "The webpack config object already customized by craco", - cracoConfig: "The configuration object read from the craco.config.js file provided by the consumer", - pluginOptions: "The plugin options provided by the consumer", - context: { - env: "The current NODE_ENV (development, production, etc..)", - paths: "An object that contains all the paths used by CRA" - } -} -``` - -##### Example - -Plugin: - -```javascript -/* craco-plugin-log-webpack-config.js */ - -module.exports = { - overrideWebpackConfig: ({ webpackConfig, cracoConfig, pluginOptions, context: { env, paths } }) => { - if (pluginOptions.preText) { - console.log(pluginOptions.preText); - } - - console.log(JSON.stringify(webpackConfig, null, 4)); - - // Always return the config object. - return webpackConfig; - }, -}; -``` - -Registration (in a `craco.config.js` file): - -```javascript -const logWebpackConfigPlugin = require("./craco-plugin-log-webpack-config"); - -module.exports = { - ... - plugins: [ - { plugin: logWebpackConfigPlugin, options: { preText: "Will log the webpack config:" } } - ] -}; -``` - -#### overrideDevServerConfig - -The function `overrideDevServerConfig` let a plugin override the dev server config object **after** it's been customized -by `craco`. - -_The function must return a valid config object, otherwise `craco` will throw an error._ - -The function will be called with a single object argument having the following structure: - -```javascript -{ - devServerConfig: "The dev server config object already customized by craco", - cracoConfig: "The configuration object read from the craco.config.js file provided by the consumer", - pluginOptions: "The plugin options provided by the consumer", - context: { - env: "The current NODE_ENV (development, production, etc..)", - paths: "An object that contains all the paths used by CRA", - allowedHost: "Provided by CRA" - } -} -``` - -##### Example - -Plugin: - -```javascript -/* craco-plugin-log-dev-server-config.js */ - -module.exports = { - overrideDevServerConfig: ({ - devServerConfig, - cracoConfig, - pluginOptions, - context: { env, paths, allowedHost }, - }) => { - if (pluginOptions.preText) { - console.log(pluginOptions.preText); - } - - console.log(JSON.stringify(devServerConfig, null, 4)); - - // Always return the config object. - return devServerConfig; - }, -}; -``` - -Registration (in a `craco.config.js` file): - -```javascript -const logDevServerConfigPlugin = require("./craco-plugin-log-dev-server-config"); - -module.exports = { - ... - plugins: [ - { plugin: logDevServerConfigPlugin, options: { preText: "Will log the dev server config:" } } - ] -}; -``` - -#### overrideJestConfig - -The function `overrideJestConfig` let a plugin override the `Jest` config object **after** it's been customized by -`craco`. - -_The function must return a valid config object, otherwise `craco` will throw an error._ - -The function will be called with a single object argument having the following structure: - -```javascript -{ - jestConfig: "The Jest config object already customized by craco", - cracoConfig: "The configuration object read from the craco.config.js file provided by the consumer", - pluginOptions: "The plugin options provided by the consumer", - context: { - env: "The current NODE_ENV (development, production, etc..)", - paths: "An object that contains all the paths used by CRA", - resolve: "Provided by CRA", - rootDir: "Provided by CRA" - } -} -``` - -##### Example - -Plugin: - -```javascript -/* craco-plugin-log-jest-config.js */ - -module.exports = { - overrideJestConfig: ({ jestConfig, cracoConfig, pluginOptions, context: { env, paths, resolve, rootDir } }) => { - if (pluginOptions.preText) { - console.log(pluginOptions.preText); - } - - console.log(JSON.stringify(jestConfig, null, 4)); - - // Always return the config object. - return jestConfig; - }, -}; -``` - -Registration (in a `craco.config.js` file): - -```javascript -const logJestConfigPlugin = require("./craco-plugin-log-jest-config"); - -module.exports = { - ... - plugins: [ - { plugin: logJestConfigPlugin, options: { preText: "Will log the Jest config:" } } - ] -}; -``` - -### Utility Functions - -A few utility functions are provided by CRACO to help you develop a plugin: - -- `getLoader` -- `getLoaders` -- `removeLoaders` -- `addBeforeLoader` -- `addBeforeLoaders` -- `addAfterLoader` -- `addAfterLoaders` -- `getPlugin` -- `removePlugins` -- `addPlugins` -- `throwUnexpectedConfigError` - -```javascript -const { - getLoader, - getLoaders, - removeLoaders, - loaderByName, - getPlugin, - removePlugins, - addPlugins, - pluginByName, - throwUnexpectedConfigError, -} = require('@craco/craco'); -``` - -#### getLoader - -Retrieve the **first** loader that match the specified criteria from the webpack config. - -Returns: - -```javascript -{ - isFound: true | false, - match: { - loader, - parent, - index - } -} -``` - -Usage: - -```javascript -const { getLoader, loaderByName } = require('@craco/craco'); - -const { isFound, match } = getLoader(webpackConfig, loaderByName('eslint-loader')); - -if (isFound) { - // do stuff... -} -``` - -#### getLoaders - -Retrieve **all** the loaders that match the specified criteria from the webpack config. - -Returns: - -```javascript -{ - hasFoundAny: true | false, - matches: [ - { - loader, - parent, - index - } - ] -} -``` - -Usage: - -```javascript -const { getLoaders, loaderByName } = require('@craco/craco'); - -const { hasFoundAny, matches } = getLoaders(webpackConfig, loaderByName('babel-loader')); - -if (hasFoundAny) { - matches.forEach((x) => { - // do stuff... - }); -} -``` - -#### removeLoaders - -Remove **all** the loaders that match the specified criteria from the webpack config. - -Returns: - -```javascript -{ - hasRemovedAny: true | false, - removedCount: int -} -``` - -Usage: - -```javascript -const { removeLoaders, loaderByName } = require('@craco/craco'); - -removeLoaders(webpackConfig, loaderByName('eslint-loader')); -``` - -#### addBeforeLoader - -Add a new _loader_ **before** the loader that match specified criteria to the webpack config. - -Returns: - -```javascript -{ - isAdded: true | false; -} -``` - -Usage: - -```javascript -const { addBeforeLoader, loaderByName } = require('@craco/craco'); - -const myNewWebpackLoader = { - loader: require.resolve('tslint-loader'), -}; - -addBeforeLoader(webpackConfig, loaderByName('eslint-loader'), myNewWebpackLoader); -``` - -#### addBeforeLoaders - -Add a new _loader_ **before** all the loaders that match specified criteria to the webpack config. - -Returns: - -```javascript -{ - isAdded: true | false, - addedCount: int -} -``` - -Usage: - -```javascript -const { addBeforeLoaders, loaderByName } = require('@craco/craco'); - -const myNewWebpackLoader = { - loader: require.resolve('tslint-loader'), -}; - -addBeforeLoaders(webpackConfig, loaderByName('eslint-loader'), myNewWebpackLoader); -``` - -#### addAfterLoader - -Add a new _loader_ **after** the loader that match specified criteria to the webpack config. - -Returns: - -```javascript -{ - isAdded: true | false; -} -``` - -Usage: - -```javascript -const { addAfterLoader, loaderByName } = require('@craco/craco'); - -const myNewWebpackLoader = { - loader: require.resolve('tslint-loader'), -}; - -addAfterLoader(webpackConfig, loaderByName('eslint-loader'), myNewWebpackLoader); -``` - -#### addAfterLoaders - -Add a new _loader_ **after** all the loaders that match specified criteria to the webpack config. - -Returns: - -```javascript -{ - isAdded: true | false, - addedCount: int -} -``` - -Usage: - -```javascript -const { addAfterLoaders, loaderByName } = require('@craco/craco'); - -const myNewWebpackLoader = { - loader: require.resolve('tslint-loader'), -}; - -addAfterLoaders(webpackConfig, loaderByName('eslint-loader'), myNewWebpackLoader); -``` - -#### getPlugin - -Retrieve the **first** plugin that match the specified criteria from the webpack config. - -Returns: - -```javascript -{ - isFound: true | false, - match: {...} // the webpack plugin -} -``` - -Usage: - -```javascript -const { getPlugin, pluginByName } = require('@craco/craco'); - -const { isFound, match } = getPlugin(webpackConfig, pluginByName('ESLintWebpackPlugin')); - -if (isFound) { - // do stuff... -} -``` - -#### removePlugins - -Remove **all** the plugins that match the specified criteria from the webpack config. - -Returns: - -```javascript -{ - hasRemovedAny::true | false, removedCount::int; -} -``` - -Usage: - -```javascript -const { removePlugins, pluginByName } = require('@craco/craco'); - -removePlugins(webpackConfig, pluginByName('ESLintWebpackPlugin')); -``` - -#### addPlugins - -Add new _plugins_ to the webpack config. - -Usage: - -```javascript -const { addPlugins } = require('@craco/craco'); - -const myNewWebpackPlugin = require.resolve('ESLintWebpackPlugin'); - -addPlugins(webpackConfig, [myNewWebpackPlugin]); -addPlugins(webpackConfig, [[myNewWebpackPlugin, 'append']]); -addPlugins(webpackConfig, [[myNewWebpackPlugin, 'prepend']]); -``` - -#### throwUnexpectedConfigError - -Throw an error if the webpack configuration changes and does not match your expectations. (For example, `getLoader` -cannot find a loader and `isFound` is `false`.) `create-react-app` might update the structure of their webpack config, -so it is very important to show a helpful error message when something breaks. - -Raises an error and crashes Node.js: - -```bash -$ yarn start -yarn run v1.12.3 -$ craco start -/path/to/your/app/craco.config.js:23 - throw new Error( - ^ - - Error: Can't find eslint-loader in the webpack config! - - This error probably occurred because you updated react-scripts or craco. Please try updating craco-less to the latest version: - - $ yarn upgrade craco-less - - Or: - - $ npm update craco-less - - If that doesn't work, craco-less needs to be fixed to support the latest version. - Please check to see if there's already an issue in the ndbroadbent/craco-less repo: - - * https://github.com/ndbroadbent/craco-less/issues?q=is%3Aissue+webpack+eslint-loader - - If not, please open an issue and we'll take a look. (Or you can send a PR!) - - You might also want to look for related issues in the craco and create-react-app repos: - - * https://github.com/sharegate/craco/issues?q=is%3Aissue+webpack+eslint-loader - * https://github.com/facebook/create-react-app/issues?q=is%3Aissue+webpack+eslint-loader - - at throwUnexpectedConfigError (/path/to/your/app/craco.config.js:23:19) - ... -``` - -Usage: - -```javascript -const { getLoader, loaderByName, throwUnexpectedConfigError } = require('@craco/craco'); - -// Create a helper function if you need to call this multiple times -const throwError = (message, githubIssueQuery) => - throwUnexpectedConfigError({ - packageName: 'craco-less', - githubRepo: 'ndbroadbent/craco-less', - message, - githubIssueQuery, - }); - -const { isFound, match } = getLoader(webpackConfig, loaderByName('eslint-loader')); - -if (!isFound) { - throwError("Can't find eslint-loader in the webpack config!", 'webpack+eslint-loader'); -} -``` - -Options: - -```javascript -{ - message: "An error message explaining what went wrong", - packageName: "NPM package name", - githubRepo: "GitHub repo where people can open an issue. Format: username/repo", - githubIssueQuery: "Search string to find related issues" -} -``` - -> Only `message` is required. - -## Backward Compatibility - -CRACO is not meant to be backward compatible with older versions of react-scripts. This package will only support the latest version. If your project uses an old react-scripts version, refer to the following table to select the appropriate CRACO version. - -| react-scripts Version | CRACO Version | -| --------------------- | ------------: | -| react-scripts < 4.0.0 | 5.8.0 | - -## Debugging - -### Verbose Logging - -To activate **verbose** logging specify the CLI option `--verbose` - -```javascript -/* package.json */ - -{ - "scripts": { - "start": "craco start --verbose" - } -} -``` - -## License - -Copyright © 2020, Groupe Sharegate inc. This code is licensed under the Apache License, Version 2.0. You may obtain a -copy of this license at https://github.com/gsoft-inc/gsoft-license/blob/master/LICENSE. +Visit [craco.js.org](https://craco.js.org) to learn more. diff --git a/docs/blog/2019-05-28-first-blog-post.md b/docs/blog/2019-05-28-first-blog-post.md deleted file mode 100644 index 02f3f81b..00000000 --- a/docs/blog/2019-05-28-first-blog-post.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -slug: first-blog-post -title: First Blog Post -authors: - name: Gao Wei - title: Docusaurus Core Team - url: https://github.com/wgao19 - image_url: https://github.com/wgao19.png -tags: [hola, docusaurus] ---- - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet diff --git a/docs/blog/2019-05-29-long-blog-post.md b/docs/blog/2019-05-29-long-blog-post.md deleted file mode 100644 index 26ffb1b1..00000000 --- a/docs/blog/2019-05-29-long-blog-post.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -slug: long-blog-post -title: Long Blog Post -authors: endi -tags: [hello, docusaurus] ---- - -This is the summary of a very long blog post, - -Use a `` comment to limit blog post size in the list view. - - - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet diff --git a/docs/blog/2021-08-01-mdx-blog-post.mdx b/docs/blog/2021-08-01-mdx-blog-post.mdx deleted file mode 100644 index c04ebe32..00000000 --- a/docs/blog/2021-08-01-mdx-blog-post.mdx +++ /dev/null @@ -1,20 +0,0 @@ ---- -slug: mdx-blog-post -title: MDX Blog Post -authors: [slorber] -tags: [docusaurus] ---- - -Blog posts support [Docusaurus Markdown features](https://docusaurus.io/docs/markdown-features), such as [MDX](https://mdxjs.com/). - -:::tip - -Use the power of React to create interactive blog posts. - -```js - -``` - - - -::: diff --git a/docs/blog/2021-08-26-welcome/docusaurus-plushie-banner.jpeg b/docs/blog/2021-08-26-welcome/docusaurus-plushie-banner.jpeg deleted file mode 100644 index 11bda0928456b12f8e53d0ba5709212a4058d449..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 96122 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 diff --git a/docs/blog/2021-08-26-welcome/index.md b/docs/blog/2021-08-26-welcome/index.md deleted file mode 100644 index 9455168f..00000000 --- a/docs/blog/2021-08-26-welcome/index.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -slug: welcome -title: Welcome -authors: [slorber, yangshun] -tags: [facebook, hello, docusaurus] ---- - -[Docusaurus blogging features](https://docusaurus.io/docs/blog) are powered by the [blog plugin](https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-content-blog). - -Simply add Markdown files (or folders) to the `blog` directory. - -Regular blog authors can be added to `authors.yml`. - -The blog post date can be extracted from filenames, such as: - -- `2019-05-30-welcome.md` -- `2019-05-30-welcome/index.md` - -A blog post folder can be convenient to co-locate blog post images: - -![Docusaurus Plushie](./docusaurus-plushie-banner.jpeg) - -The blog supports tags as well! - -**And if you don't want a blog**: just delete this directory, and use `blog: false` in your Docusaurus config. diff --git a/docs/blog/authors.yml b/docs/blog/authors.yml deleted file mode 100644 index bcb29915..00000000 --- a/docs/blog/authors.yml +++ /dev/null @@ -1,17 +0,0 @@ -endi: - name: Endilie Yacop Sucipto - title: Maintainer of Docusaurus - url: https://github.com/endiliey - image_url: https://github.com/endiliey.png - -yangshun: - name: Yangshun Tay - title: Front End Engineer @ Facebook - url: https://github.com/yangshun - image_url: https://github.com/yangshun.png - -slorber: - name: Sébastien Lorber - title: Docusaurus maintainer - url: https://sebastienlorber.com - image_url: https://github.com/slorber.png diff --git a/docs/docs/intro.md b/docs/docs/intro.md deleted file mode 100644 index 8a2e69d9..00000000 --- a/docs/docs/intro.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Tutorial Intro - -Let's discover **Docusaurus in less than 5 minutes**. - -## Getting Started - -Get started by **creating a new site**. - -Or **try Docusaurus immediately** with **[docusaurus.new](https://docusaurus.new)**. - -### What you'll need - -- [Node.js](https://nodejs.org/en/download/) version 16.14 or above: - - When installing Node.js, you are recommended to check all checkboxes related to dependencies. - -## Generate a new site - -Generate a new Docusaurus site using the **classic template**. - -The classic template will automatically be added to your project after you run the command: - -```bash -npm init docusaurus@latest my-website classic -``` - -You can type this command into Command Prompt, Powershell, Terminal, or any other integrated terminal of your code editor. - -The command also installs all necessary dependencies you need to run Docusaurus. - -## Start your site - -Run the development server: - -```bash -cd my-website -npm run start -``` - -The `cd` command changes the directory you're working with. In order to work with your newly created Docusaurus site, you'll need to navigate the terminal there. - -The `npm run start` command builds your website locally and serves it through a development server, ready for you to view at http://localhost:3000/. - -Open `docs/intro.md` (this page) and edit some lines: the site **reloads automatically** and displays your changes. diff --git a/docs/docs/tutorial-basics/_category_.json b/docs/docs/tutorial-basics/_category_.json deleted file mode 100644 index 2e6db55b..00000000 --- a/docs/docs/tutorial-basics/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "Tutorial - Basics", - "position": 2, - "link": { - "type": "generated-index", - "description": "5 minutes to learn the most important Docusaurus concepts." - } -} diff --git a/docs/docs/tutorial-basics/congratulations.md b/docs/docs/tutorial-basics/congratulations.md deleted file mode 100644 index 04771a00..00000000 --- a/docs/docs/tutorial-basics/congratulations.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -sidebar_position: 6 ---- - -# Congratulations! - -You have just learned the **basics of Docusaurus** and made some changes to the **initial template**. - -Docusaurus has **much more to offer**! - -Have **5 more minutes**? Take a look at **[versioning](../tutorial-extras/manage-docs-versions.md)** and **[i18n](../tutorial-extras/translate-your-site.md)**. - -Anything **unclear** or **buggy** in this tutorial? [Please report it!](https://github.com/facebook/docusaurus/discussions/4610) - -## What's next? - -- Read the [official documentation](https://docusaurus.io/) -- Modify your site configuration with [`docusaurus.config.js`](https://docusaurus.io/docs/api/docusaurus-config) -- Add navbar and footer items with [`themeConfig`](https://docusaurus.io/docs/api/themes/configuration) -- Add a custom [Design and Layout](https://docusaurus.io/docs/styling-layout) -- Add a [search bar](https://docusaurus.io/docs/search) -- Find inspirations in the [Docusaurus showcase](https://docusaurus.io/showcase) -- Get involved in the [Docusaurus Community](https://docusaurus.io/community/support) diff --git a/docs/docs/tutorial-basics/create-a-blog-post.md b/docs/docs/tutorial-basics/create-a-blog-post.md deleted file mode 100644 index ea472bba..00000000 --- a/docs/docs/tutorial-basics/create-a-blog-post.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -sidebar_position: 3 ---- - -# Create a Blog Post - -Docusaurus creates a **page for each blog post**, but also a **blog index page**, a **tag system**, an **RSS** feed... - -## Create your first Post - -Create a file at `blog/2021-02-28-greetings.md`: - -```md title="blog/2021-02-28-greetings.md" ---- -slug: greetings -title: Greetings! -authors: - - name: Joel Marcey - title: Co-creator of Docusaurus 1 - url: https://github.com/JoelMarcey - image_url: https://github.com/JoelMarcey.png - - name: Sébastien Lorber - title: Docusaurus maintainer - url: https://sebastienlorber.com - image_url: https://github.com/slorber.png -tags: [greetings] ---- - -Congratulations, you have made your first post! - -Feel free to play around and edit this post as much you like. -``` - -A new blog post is now available at [http://localhost:3000/blog/greetings](http://localhost:3000/blog/greetings). diff --git a/docs/docs/tutorial-basics/create-a-document.md b/docs/docs/tutorial-basics/create-a-document.md deleted file mode 100644 index ffddfa8e..00000000 --- a/docs/docs/tutorial-basics/create-a-document.md +++ /dev/null @@ -1,57 +0,0 @@ ---- -sidebar_position: 2 ---- - -# Create a Document - -Documents are **groups of pages** connected through: - -- a **sidebar** -- **previous/next navigation** -- **versioning** - -## Create your first Doc - -Create a Markdown file at `docs/hello.md`: - -```md title="docs/hello.md" -# Hello - -This is my **first Docusaurus document**! -``` - -A new document is now available at [http://localhost:3000/docs/hello](http://localhost:3000/docs/hello). - -## Configure the Sidebar - -Docusaurus automatically **creates a sidebar** from the `docs` folder. - -Add metadata to customize the sidebar label and position: - -```md title="docs/hello.md" {1-4} ---- -sidebar_label: 'Hi!' -sidebar_position: 3 ---- - -# Hello - -This is my **first Docusaurus document**! -``` - -It is also possible to create your sidebar explicitly in `sidebars.js`: - -```js title="sidebars.js" -module.exports = { - tutorialSidebar: [ - 'intro', - // highlight-next-line - 'hello', - { - type: 'category', - label: 'Tutorial', - items: ['tutorial-basics/create-a-document'], - }, - ], -}; -``` diff --git a/docs/docs/tutorial-basics/create-a-page.md b/docs/docs/tutorial-basics/create-a-page.md deleted file mode 100644 index 20e2ac30..00000000 --- a/docs/docs/tutorial-basics/create-a-page.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Create a Page - -Add **Markdown or React** files to `src/pages` to create a **standalone page**: - -- `src/pages/index.js` → `localhost:3000/` -- `src/pages/foo.md` → `localhost:3000/foo` -- `src/pages/foo/bar.js` → `localhost:3000/foo/bar` - -## Create your first React Page - -Create a file at `src/pages/my-react-page.js`: - -```jsx title="src/pages/my-react-page.js" -import React from 'react'; -import Layout from '@theme/Layout'; - -export default function MyReactPage() { - return ( - -

My React page

-

This is a React page

-
- ); -} -``` - -A new page is now available at [http://localhost:3000/my-react-page](http://localhost:3000/my-react-page). - -## Create your first Markdown Page - -Create a file at `src/pages/my-markdown-page.md`: - -```mdx title="src/pages/my-markdown-page.md" -# My Markdown page - -This is a Markdown page -``` - -A new page is now available at [http://localhost:3000/my-markdown-page](http://localhost:3000/my-markdown-page). diff --git a/docs/docs/tutorial-basics/deploy-your-site.md b/docs/docs/tutorial-basics/deploy-your-site.md deleted file mode 100644 index 1c50ee06..00000000 --- a/docs/docs/tutorial-basics/deploy-your-site.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -sidebar_position: 5 ---- - -# Deploy your site - -Docusaurus is a **static-site-generator** (also called **[Jamstack](https://jamstack.org/)**). - -It builds your site as simple **static HTML, JavaScript and CSS files**. - -## Build your site - -Build your site **for production**: - -```bash -npm run build -``` - -The static files are generated in the `build` folder. - -## Deploy your site - -Test your production build locally: - -```bash -npm run serve -``` - -The `build` folder is now served at [http://localhost:3000/](http://localhost:3000/). - -You can now deploy the `build` folder **almost anywhere** easily, **for free** or very small cost (read the **[Deployment Guide](https://docusaurus.io/docs/deployment)**). diff --git a/docs/docs/tutorial-basics/markdown-features.mdx b/docs/docs/tutorial-basics/markdown-features.mdx deleted file mode 100644 index 6b3aaaaa..00000000 --- a/docs/docs/tutorial-basics/markdown-features.mdx +++ /dev/null @@ -1,146 +0,0 @@ ---- -sidebar_position: 4 ---- - -# Markdown Features - -Docusaurus supports **[Markdown](https://daringfireball.net/projects/markdown/syntax)** and a few **additional features**. - -## Front Matter - -Markdown documents have metadata at the top called [Front Matter](https://jekyllrb.com/docs/front-matter/): - -```text title="my-doc.md" -// highlight-start ---- -id: my-doc-id -title: My document title -description: My document description -slug: /my-custom-url ---- -// highlight-end - -## Markdown heading - -Markdown text with [links](./hello.md) -``` - -## Links - -Regular Markdown links are supported, using url paths or relative file paths. - -```md -Let's see how to [Create a page](/create-a-page). -``` - -```md -Let's see how to [Create a page](./create-a-page.md). -``` - -**Result:** Let's see how to [Create a page](./create-a-page.md). - -## Images - -Regular Markdown images are supported. - -You can use absolute paths to reference images in the static directory (`static/img/docusaurus.png`): - -```md -![Docusaurus logo](/img/docusaurus.png) -``` - -![Docusaurus logo](/img/docusaurus.png) - -You can reference images relative to the current file as well, as shown in [the extra guides](../tutorial-extras/manage-docs-versions.md). - -## Code Blocks - -Markdown code blocks are supported with Syntax highlighting. - - ```jsx title="src/components/HelloDocusaurus.js" - function HelloDocusaurus() { - return ( -

Hello, Docusaurus!

- ) - } - ``` - -```jsx title="src/components/HelloDocusaurus.js" -function HelloDocusaurus() { - return

Hello, Docusaurus!

; -} -``` - -## Admonitions - -Docusaurus has a special syntax to create admonitions and callouts: - - :::tip My tip - - Use this awesome feature option - - ::: - - :::danger Take care - - This action is dangerous - - ::: - -:::tip My tip - -Use this awesome feature option - -::: - -:::danger Take care - -This action is dangerous - -::: - -## MDX and React Components - -[MDX](https://mdxjs.com/) can make your documentation more **interactive** and allows using any **React components inside Markdown**: - -```jsx -export const Highlight = ({children, color}) => ( - { - alert(`You clicked the color ${color} with label ${children}`) - }}> - {children} - -); - -This is Docusaurus green ! - -This is Facebook blue ! -``` - -export const Highlight = ({children, color}) => ( - { - alert(`You clicked the color ${color} with label ${children}`); - }}> - {children} - -); - -This is Docusaurus green ! - -This is Facebook blue ! diff --git a/docs/docs/tutorial-extras/_category_.json b/docs/docs/tutorial-extras/_category_.json deleted file mode 100644 index a8ffcc19..00000000 --- a/docs/docs/tutorial-extras/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "label": "Tutorial - Extras", - "position": 3, - "link": { - "type": "generated-index" - } -} diff --git a/docs/docs/tutorial-extras/img/docsVersionDropdown.png b/docs/docs/tutorial-extras/img/docsVersionDropdown.png deleted file mode 100644 index 97e4164618b5f8beda34cfa699720aba0ad2e342..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25427 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 diff --git a/docs/docs/tutorial-extras/img/localeDropdown.png b/docs/docs/tutorial-extras/img/localeDropdown.png deleted file mode 100644 index e257edc1f932985396bf59584c7ccfaddf955779..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27841 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 JrC|B>e*nH7H{}2T diff --git a/docs/docs/tutorial-extras/manage-docs-versions.md b/docs/docs/tutorial-extras/manage-docs-versions.md deleted file mode 100644 index e12c3f34..00000000 --- a/docs/docs/tutorial-extras/manage-docs-versions.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Manage Docs Versions - -Docusaurus can manage multiple versions of your docs. - -## Create a docs version - -Release a version 1.0 of your project: - -```bash -npm run docusaurus docs:version 1.0 -``` - -The `docs` folder is copied into `versioned_docs/version-1.0` and `versions.json` is created. - -Your docs now have 2 versions: - -- `1.0` at `http://localhost:3000/docs/` for the version 1.0 docs -- `current` at `http://localhost:3000/docs/next/` for the **upcoming, unreleased docs** - -## Add a Version Dropdown - -To navigate seamlessly across versions, add a version dropdown. - -Modify the `docusaurus.config.js` file: - -```js title="docusaurus.config.js" -module.exports = { - themeConfig: { - navbar: { - items: [ - // highlight-start - { - type: 'docsVersionDropdown', - }, - // highlight-end - ], - }, - }, -}; -``` - -The docs version dropdown appears in your navbar: - -![Docs Version Dropdown](./img/docsVersionDropdown.png) - -## Update an existing version - -It is possible to edit versioned docs in their respective folder: - -- `versioned_docs/version-1.0/hello.md` updates `http://localhost:3000/docs/hello` -- `docs/hello.md` updates `http://localhost:3000/docs/next/hello` diff --git a/docs/docs/tutorial-extras/translate-your-site.md b/docs/docs/tutorial-extras/translate-your-site.md deleted file mode 100644 index caeaffb0..00000000 --- a/docs/docs/tutorial-extras/translate-your-site.md +++ /dev/null @@ -1,88 +0,0 @@ ---- -sidebar_position: 2 ---- - -# Translate your site - -Let's translate `docs/intro.md` to French. - -## Configure i18n - -Modify `docusaurus.config.js` to add support for the `fr` locale: - -```js title="docusaurus.config.js" -module.exports = { - i18n: { - defaultLocale: 'en', - locales: ['en', 'fr'], - }, -}; -``` - -## Translate a doc - -Copy the `docs/intro.md` file to the `i18n/fr` folder: - -```bash -mkdir -p i18n/fr/docusaurus-plugin-content-docs/current/ - -cp docs/intro.md i18n/fr/docusaurus-plugin-content-docs/current/intro.md -``` - -Translate `i18n/fr/docusaurus-plugin-content-docs/current/intro.md` in French. - -## Start your localized site - -Start your site on the French locale: - -```bash -npm run start -- --locale fr -``` - -Your localized site is accessible at [http://localhost:3000/fr/](http://localhost:3000/fr/) and the `Getting Started` page is translated. - -:::caution - -In development, you can only use one locale at a same time. - -::: - -## Add a Locale Dropdown - -To navigate seamlessly across languages, add a locale dropdown. - -Modify the `docusaurus.config.js` file: - -```js title="docusaurus.config.js" -module.exports = { - themeConfig: { - navbar: { - items: [ - // highlight-start - { - type: 'localeDropdown', - }, - // highlight-end - ], - }, - }, -}; -``` - -The locale dropdown now appears in your navbar: - -![Locale Dropdown](./img/localeDropdown.png) - -## Build your localized site - -Build your site for a specific locale: - -```bash -npm run build -- --locale fr -``` - -Or build your site to include all the locales at once: - -```bash -npm run build -``` diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js deleted file mode 100644 index cbea7b1b..00000000 --- a/docs/docusaurus.config.js +++ /dev/null @@ -1,132 +0,0 @@ -// @ts-check -// Note: type annotations allow type checking and IDEs autocompletion - -const lightCodeTheme = require('prism-react-renderer/themes/github'); -const darkCodeTheme = require('prism-react-renderer/themes/dracula'); - -/** @type {import('@docusaurus/types').Config} */ -const config = { - title: 'My Site', - tagline: 'Dinosaurs are cool', - url: 'https://your-docusaurus-test-site.com', - baseUrl: '/', - onBrokenLinks: 'throw', - onBrokenMarkdownLinks: 'warn', - favicon: 'img/favicon.ico', - - // GitHub pages deployment config. - // If you aren't using GitHub pages, you don't need these. - organizationName: 'facebook', // Usually your GitHub org/user name. - projectName: 'docusaurus', // Usually your repo name. - - // 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'], - }, - - presets: [ - [ - 'classic', - /** @type {import('@docusaurus/preset-classic').Options} */ - ({ - docs: { - sidebarPath: require.resolve('./sidebars.js'), - // Please change this to your repo. - // Remove this to remove the "edit this page" links. - editUrl: - 'https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/', - }, - blog: { - showReadingTime: true, - // Please change this to your repo. - // Remove this to remove the "edit this page" links. - editUrl: - 'https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/', - }, - theme: { - customCss: require.resolve('./src/css/custom.css'), - }, - }), - ], - ], - - themeConfig: - /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ - ({ - navbar: { - title: 'My Site', - logo: { - alt: 'My Site Logo', - src: 'img/logo.svg', - }, - items: [ - { - type: 'doc', - docId: 'intro', - position: 'left', - label: 'Tutorial', - }, - {to: '/blog', label: 'Blog', position: 'left'}, - { - href: 'https://github.com/facebook/docusaurus', - label: 'GitHub', - position: 'right', - }, - ], - }, - footer: { - style: 'dark', - links: [ - { - title: 'Docs', - items: [ - { - label: 'Tutorial', - to: '/docs/intro', - }, - ], - }, - { - title: 'Community', - items: [ - { - label: 'Stack Overflow', - href: 'https://stackoverflow.com/questions/tagged/docusaurus', - }, - { - label: 'Discord', - href: 'https://discordapp.com/invite/docusaurus', - }, - { - label: 'Twitter', - href: 'https://twitter.com/docusaurus', - }, - ], - }, - { - title: 'More', - items: [ - { - label: 'Blog', - to: '/blog', - }, - { - label: 'GitHub', - href: 'https://github.com/facebook/docusaurus', - }, - ], - }, - ], - copyright: `Copyright © ${new Date().getFullYear()} My Project, Inc. Built with Docusaurus.`, - }, - prism: { - theme: lightCodeTheme, - darkTheme: darkCodeTheme, - }, - }), -}; - -module.exports = config; diff --git a/docs/sidebars.js b/docs/sidebars.js deleted file mode 100644 index 9ab54c24..00000000 --- a/docs/sidebars.js +++ /dev/null @@ -1,33 +0,0 @@ -/** - * Creating a sidebar enables you to: - - create an ordered group of docs - - render a sidebar for each doc of that group - - provide next/previous navigation - - The sidebars can be generated from the filesystem, or explicitly defined here. - - Create as many sidebars as you want. - */ - -// @ts-check - -/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */ -const sidebars = { - // By default, Docusaurus generates a sidebar from the docs folder structure - tutorialSidebar: [{type: 'autogenerated', dirName: '.'}], - - // But you can create a sidebar manually - /* - tutorialSidebar: [ - 'intro', - 'hello', - { - type: 'category', - label: 'Tutorial', - items: ['tutorial-basics/create-a-document'], - }, - ], - */ -}; - -module.exports = sidebars; diff --git a/docs/src/css/custom.css b/docs/src/css/custom.css deleted file mode 100644 index 2bc6a4cf..00000000 --- a/docs/src/css/custom.css +++ /dev/null @@ -1,30 +0,0 @@ -/** - * Any CSS included here will be global. The classic template - * bundles Infima by default. Infima is a CSS framework designed to - * work well for content-centric websites. - */ - -/* You can override the default Infima variables here. */ -:root { - --ifm-color-primary: #2e8555; - --ifm-color-primary-dark: #29784c; - --ifm-color-primary-darker: #277148; - --ifm-color-primary-darkest: #205d3b; - --ifm-color-primary-light: #33925d; - --ifm-color-primary-lighter: #359962; - --ifm-color-primary-lightest: #3cad6e; - --ifm-code-font-size: 95%; - --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1); -} - -/* For readability concerns, you should choose a lighter palette in dark mode. */ -[data-theme='dark'] { - --ifm-color-primary: #25c2a0; - --ifm-color-primary-dark: #21af90; - --ifm-color-primary-darker: #1fa588; - --ifm-color-primary-darkest: #1a8870; - --ifm-color-primary-light: #29d5b0; - --ifm-color-primary-lighter: #32d8b4; - --ifm-color-primary-lightest: #4fddbf; - --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3); -} diff --git a/docs/src/pages/index.js b/docs/src/pages/index.js deleted file mode 100644 index affcd909..00000000 --- a/docs/src/pages/index.js +++ /dev/null @@ -1,41 +0,0 @@ -import React from 'react'; -import clsx from 'clsx'; -import Link from '@docusaurus/Link'; -import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; -import Layout from '@theme/Layout'; -import HomepageFeatures from '@site/src/components/HomepageFeatures'; - -import styles from './index.module.css'; - -function HomepageHeader() { - const {siteConfig} = useDocusaurusContext(); - return ( -
-
-

{siteConfig.title}

-

{siteConfig.tagline}

-
- - Docusaurus Tutorial - 5min ⏱️ - -
-
-
- ); -} - -export default function Home() { - const {siteConfig} = useDocusaurusContext(); - return ( - - -
- -
-
- ); -} diff --git a/docs/src/pages/index.module.css b/docs/src/pages/index.module.css deleted file mode 100644 index 9f71a5da..00000000 --- a/docs/src/pages/index.module.css +++ /dev/null @@ -1,23 +0,0 @@ -/** - * CSS files with the .module.css suffix will be treated as CSS modules - * and scoped locally. - */ - -.heroBanner { - padding: 4rem 0; - text-align: center; - position: relative; - overflow: hidden; -} - -@media screen and (max-width: 996px) { - .heroBanner { - padding: 2rem; - } -} - -.buttons { - display: flex; - align-items: center; - justify-content: center; -} diff --git a/docs/src/pages/markdown-page.md b/docs/src/pages/markdown-page.md deleted file mode 100644 index 9756c5b6..00000000 --- a/docs/src/pages/markdown-page.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: Markdown page example ---- - -# Markdown page example - -You don't need React to write simple standalone pages. diff --git a/docs/static/img/docusaurus.png b/docs/static/img/docusaurus.png deleted file mode 100644 index f458149e3c8f53335f28fbc162ae67f55575c881..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5142 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 F{0H{b<4^zq diff --git a/docs/static/img/favicon.ico b/docs/static/img/favicon.ico deleted file mode 100644 index c01d54bcd39a5f853428f3cd5aa0f383d963c484..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3626 zcmb`Je@s(X6vrR`EK3%b%orErlDW({vnABqA zcfaS{d+xbU5JKp0*;0YOg+;Fl!eT)XRuapIwFLL`=imZCSon$`se`_<%@MB=M~KG+ z=EW^FL`w|Bo>*ktlaS^(fut!95`iG5u=SZ8nfDHO#GaTlH1-XG^;vsjUb^gWTVz0+ z^=WR1wv9-2oeR=_;fL0H7rNWqAzGtO(D;`~cX(RcN0w2v24Y8)6t`cS^_ghs`_ho? z{0ka~1Dgo8TfAP$r*ua?>$_V+kZ!-(TvEJ7O2f;Y#tezt$&R4 zLI}=-y@Z!grf*h3>}DUL{km4R>ya_I5Ag#{h_&?+HpKS!;$x3LC#CqUQ8&nM?X))Q zXAy2?`YL4FbC5CgJu(M&Q|>1st8XXLZ|5MgwgjP$m_2Vt0(J z&Gu7bOlkbGzGm2sh?X`){7w69Y$1#@P@7DF{ZE=4%T0NDS)iH`tiPSKpDNW)zmtn( zw;4$f>k)4$LBc>eBAaTZeCM2(iD+sHlj!qd z2GjRJ>f_Qes(+mnzdA^NH?^NB(^o-%Gmg$c8MNMq&`vm@9Ut;*&$xSD)PKH{wBCEC z4P9%NQ;n2s59ffMn8*5)5AAg4-93gBXBDX`A7S& zH-|%S3Wd%T79fk-e&l`{!?lve8_epXhE{d3Hn$Cg!t=-4D(t$cK~7f&4s?t7wr3ZP z*!SRQ-+tr|e1|hbc__J`k3S!rMy<0PHy&R`v#aJv?`Y?2{avK5sQz%=Us()jcNuZV z*$>auD4cEw>;t`+m>h?f?%VFJZj8D|Y1e_SjxG%J4{-AkFtT2+ZZS5UScS~%;dp!V>)7zi`w(xwSd*FS;Lml=f6hn#jq)2is4nkp+aTrV?)F6N z>DY#SU0IZ;*?Hu%tSj4edd~kYNHMFvS&5}#3-M;mBCOCZL3&;2obdG?qZ>rD|zC|Lu|sny76pn2xl|6sk~Hs{X9{8iBW zwiwgQt+@hi`FYMEhX2 \ No newline at end of file diff --git a/docs/static/img/undraw_docusaurus_mountain.svg b/docs/static/img/undraw_docusaurus_mountain.svg deleted file mode 100644 index af961c49..00000000 --- a/docs/static/img/undraw_docusaurus_mountain.svg +++ /dev/null @@ -1,171 +0,0 @@ - - Easy to Use - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/static/img/undraw_docusaurus_react.svg b/docs/static/img/undraw_docusaurus_react.svg deleted file mode 100644 index 94b5cf08..00000000 --- a/docs/static/img/undraw_docusaurus_react.svg +++ /dev/null @@ -1,170 +0,0 @@ - - Powered by React - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/static/img/undraw_docusaurus_tree.svg b/docs/static/img/undraw_docusaurus_tree.svg deleted file mode 100644 index d9161d33..00000000 --- a/docs/static/img/undraw_docusaurus_tree.svg +++ /dev/null @@ -1,40 +0,0 @@ - - Focus on What Matters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/packages/craco-types/README.md b/packages/craco-types/README.md new file mode 100644 index 00000000..42d90bba --- /dev/null +++ b/packages/craco-types/README.md @@ -0,0 +1,3 @@ +# @craco/types + +Official type definitions for [CRACO](https://www.npmjs.com/package/@craco/craco) diff --git a/packages/craco-types/package.json b/packages/craco-types/package.json index 747ea99d..172542ce 100644 --- a/packages/craco-types/package.json +++ b/packages/craco-types/package.json @@ -21,7 +21,7 @@ "bugs": { "url": "https://github.com/dilanx/craco/issues" }, - "homepage": "https://github.com/dilanx/craco#readme", + "homepage": "https://craco.js.org", "dependencies": { "@babel/types": "^7.19.3", "@jest/types": "^29.1.2", diff --git a/packages/craco/README.md b/packages/craco/README.md index 0bf529f1..15158e93 100644 --- a/packages/craco/README.md +++ b/packages/craco/README.md @@ -1,3 +1,50 @@ -# @craco/craco +
+ + + +

CRACO

+

+ +**C**reate **R**eact **A**pp **C**onfiguration **O**verride, an easy and comprehensible configuration layer for create-react-app. -Core craco package +**Find config docs, API docs, plugins, and example configs at [craco.js.org](https://craco.js.org)!** + +

+ +
+ +[![npm status](https://img.shields.io/npm/v/@craco/craco.svg)](https://www.npmjs.com/package/@craco/craco) [![npm downloads](https://img.shields.io/npm/dm/@craco/craco.svg)](https://www.npmjs.com/package/@craco/craco) [![npm license](https://img.shields.io/npm/l/@craco/craco?color=orange)](https://github.com/dilanx/craco/blob/main/packages/craco/LICENSE) [![GitHub stars](https://img.shields.io/github/stars/dilanx/craco?color=red)](https://github.com/dilanx/craco) [![GitHub contributors](https://img.shields.io/github/contributors/dilanx/craco?color=blueviolet)](https://github.com/dilanx/craco/graphs/contributors) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-blueviolet.svg)](https://github.com/dilanx/craco/pulls) + +
+ +Get all the benefits of [Create React App](https://create-react-app.dev) **and** customization without using 'eject' by adding a single configuration (e.g. `craco.config.js`) file at the root of your application and customize your ESLint, Babel, PostCSS configurations and many more. + +1. Install the latest version of the package from npm as a dev dependency: + + ``` + npm i -D @craco/craco + ``` + +2. Create a CRACO configuration file in your project's root directory and [configure](https://craco.js.org/docs/): + + ```diff + my-app + ├── node_modules + + ├── craco.config.js + └── package.json + ``` + +3. Update the existing calls to `react-scripts` in the `scripts` section of your `package.json` to use the `craco` CLI: + + ```diff title="package.json" + "scripts": { + - "start": "react-scripts start" + + "start": "craco start" + - "build": "react-scripts build" + + "build": "craco build" + - "test": "react-scripts test" + + "test": "craco test" + } + ``` + +Visit [craco.js.org](https://craco.js.org) to learn more. diff --git a/packages/craco/package.json b/packages/craco/package.json index bfc56894..23f22f4b 100644 --- a/packages/craco/package.json +++ b/packages/craco/package.json @@ -32,7 +32,7 @@ "bugs": { "url": "https://github.com/dilanx/craco/issues" }, - "homepage": "https://github.com/dilanx/craco#readme", + "homepage": "https://craco.js.org", "engines": { "node": ">=6" }, diff --git a/packages/craco/src/bin/jest.ts b/packages/craco/src/bin/jest.ts index d5af55dd..6a8f81d8 100644 --- a/packages/craco/src/bin/jest.ts +++ b/packages/craco/src/bin/jest.ts @@ -6,26 +6,26 @@ * This file is necessary to allow usage of craco as a drop-in replacement * for react-scripts with WebStorms's test runner UI. * - * For more information, see https://github.com/sharegate/craco/pull/41 + * For more information, see https://github.com/dilanx/craco/pull/41 */ import spawn from 'cross-spawn'; const args = process.argv.slice(2); const setupScriptFileIndex = - args.findIndex((x) => x === '--setupTestFrameworkScriptFile') + 1; + args.findIndex((x) => x === '--setupTestFrameworkScriptFile') + 1; const isIntelliJ = - setupScriptFileIndex !== -1 - ? false - : args[setupScriptFileIndex].indexOf('jest-intellij') !== -1; + setupScriptFileIndex !== -1 + ? false + : args[setupScriptFileIndex].indexOf('jest-intellij') !== -1; const result = spawn.sync( - process.argv[0], - ([] as any[]).concat(require.resolve('../scripts/test'), args), - { - stdio: 'inherit', - env: Object.assign({}, process.env, isIntelliJ ? { CI: 1 } : null), - } + process.argv[0], + ([] as any[]).concat(require.resolve('../scripts/test'), args), + { + stdio: 'inherit', + env: Object.assign({}, process.env, isIntelliJ ? { CI: 1 } : null), + } ); process.exit(result.signal ? 1 : result.status ?? undefined); diff --git a/packages/craco/src/lib/asset-modules.ts b/packages/craco/src/lib/asset-modules.ts index 60c0ed34..fb01685c 100644 --- a/packages/craco/src/lib/asset-modules.ts +++ b/packages/craco/src/lib/asset-modules.ts @@ -108,7 +108,7 @@ export const addAfterAssetModule = ( function addAssetModules( webpackConfig: WebpackConfig, matcher: AssetModuleMatcher, - newLoader: RuleSetRule, + newAssetModule: RuleSetRule, positionAdapter: (index: number) => number ) { const { matches } = getAssetModules(webpackConfig, matcher); @@ -118,7 +118,7 @@ function addAssetModules( webpackConfig.module?.rules?.splice( positionAdapter(match.index), 0, - newLoader + newAssetModule ); }); diff --git a/packages/craco/src/lib/plugin-utils.ts b/packages/craco/src/lib/plugin-utils.ts index d930bb41..aa87b064 100644 --- a/packages/craco/src/lib/plugin-utils.ts +++ b/packages/craco/src/lib/plugin-utils.ts @@ -52,7 +52,7 @@ export function throwUnexpectedConfigError({ : 'You will need to update this plugin to work with the latest version.\n\n') + 'You might also want to look for related issues in the ' + 'craco and create-react-app repos:\n\n' + - ` * ${gitHubIssueUrl('sharegate/craco', query)}\n` + + ` * ${gitHubIssueUrl('dilanx/craco', query)}\n` + ` * ${gitHubIssueUrl('facebook/create-react-app', query)}\n` ); } diff --git a/packages/craco/src/lib/user-config-utils.ts b/packages/craco/src/lib/user-config-utils.ts index 177e3fba..f9fa8e31 100644 --- a/packages/craco/src/lib/user-config-utils.ts +++ b/packages/craco/src/lib/user-config-utils.ts @@ -1,19 +1,23 @@ -export function when(condition: boolean, fn: () => T, unmetValue: T): T { - if (condition) { - return fn(); - } +export function when( + condition: boolean, + fn: () => T, + unmetValue?: T +): T | undefined { + if (condition) { + return fn(); + } - return unmetValue; + return unmetValue; } -export function whenDev(fn: () => T, unmetValue: T): T { - return when(process.env.NODE_ENV === 'development', fn, unmetValue); +export function whenDev(fn: () => T, unmetValue?: T): T | undefined { + return when(process.env.NODE_ENV === 'development', fn, unmetValue); } -export function whenProd(fn: () => T, unmetValue: T): T { - return when(process.env.NODE_ENV === 'production', fn, unmetValue); +export function whenProd(fn: () => T, unmetValue?: T): T | undefined { + return when(process.env.NODE_ENV === 'production', fn, unmetValue); } -export function whenTest(fn: () => T, unmetValue: T): T { - return when(process.env.NODE_ENV === 'test', fn, unmetValue); +export function whenTest(fn: () => T, unmetValue?: T): T | undefined { + return when(process.env.NODE_ENV === 'test', fn, unmetValue); } diff --git a/docs/.gitignore b/website/.gitignore similarity index 100% rename from docs/.gitignore rename to website/.gitignore diff --git a/docs/README.md b/website/README.md similarity index 100% rename from docs/README.md rename to website/README.md diff --git a/docs/babel.config.js b/website/babel.config.js similarity index 100% rename from docs/babel.config.js rename to website/babel.config.js diff --git a/website/docs/configuration-api.md b/website/docs/configuration-api.md new file mode 100644 index 00000000..be5d7db7 --- /dev/null +++ b/website/docs/configuration-api.md @@ -0,0 +1,47 @@ +# Configuration API + +To integrate with other tools, it's useful to have access to the configuration generated by CRACO. + +The CRACO Configuration API supports Jest and Webpack. + +## Jest + +`createJestConfig(cracoConfig, context = {}, options = { verbose: false, config: null })` + +A [CRACO config](./configuration/getting-started.md), a [JEST context object](./configuration/jest.md#jestconfigure), and an options object (`{ verbose?: boolean, config?: string }`) are taken as arguments and the generated Jest config object is returned. + +:::note + +`createJestConfig` does **not** accept `cracoConfig` as a function. If your `craco.config.js` exposes a config function, you have to call it yourself before using it here. + +::: + +```js title="jest.config.js (example)" +const { createJestConfig } = require('@craco/craco'); + +const cracoConfig = require('./craco.config.js'); +const jestConfig = createJestConfig(cracoConfig); + +module.exports = jestConfig; +``` + +## Webpack + +`createWebpackDevConfig(cracoConfig, context = {}, options = { verbose: false, config: null })` + +`createWebpackProdConfig(cracoConfig, context = {}, options = { verbose: false, config: null })` + +:::note + +`createWebpackDevConfig` and `createWebpackProdConfig` do **not** accept `cracoConfig` as a function. If your `craco.config.js` exposes a config function, you have to call it yourself before using it here. + +::: + +```js title="webpack.config.js (example)" +const { createWebpackDevConfig } = require('@craco/craco'); + +const cracoConfig = require('./craco.config.js'); +const webpackConfig = createWebpackDevConfig(cracoConfig); + +module.exports = webpackConfig; +``` diff --git a/website/docs/configuration/babel.md b/website/docs/configuration/babel.md new file mode 100644 index 00000000..2d007120 --- /dev/null +++ b/website/docs/configuration/babel.md @@ -0,0 +1,45 @@ +--- +description: Customize Babel +--- + +# Babel + + +```js title="craco.config.js" +module.exports = { + // ... + babel: { + presets: [ /* ... */ ], + plugins: [ /* ... */ ], + loaderOptions: { /* ... */ }, + loaderOptions: (babelLoaderOptions, { env, paths }) => { + /* ... */ + return babelLoaderOptions; + }, + }, +}; +``` + +:::tip + +Properties listed twice in the outline above (for example, `loaderOptions`) can be assigned an **object literal** or a **function**. See [configuration tips](./getting-started.md#object-literals-and-functions) for details. + +::: + +## babel.presets + +`[string | [string, object]]` + +Any Babel presets: https://babeljs.io/docs/en/presets/ + +## babel.plugins + +`[string | [string, object]]` + +Any Babel plugins: https://babeljs.io/docs/en/plugins + +## babel.loaderOptions + +`BabelLoaderOptions` or `(options: BabelLoaderOptions, { env, paths }) => BabelLoaderOptions` + +Any babel-loader options: https://github.com/babel/babel-loader#options diff --git a/website/docs/configuration/devserver.md b/website/docs/configuration/devserver.md new file mode 100644 index 00000000..eb565581 --- /dev/null +++ b/website/docs/configuration/devserver.md @@ -0,0 +1,34 @@ +--- +description: Configure DevServer +--- + +# DevServer + + +```js title="craco.config.js" +module.exports = { + // ... + devServer: { /* ... */ }, + devServer: (devServerConfig, { env, paths, proxy, allowedHost }) => { + /* ... */ + return devServerConfig; + }, +}; +``` + +:::tip + +Properties listed twice in the outline above (for example, `devServer`) can be assigned an **object literal** or a **function**. See [configuration tips](./getting-started.md#object-literals-and-functions) for details. + +::: + +## devServer + +`DevServerConfig` or `(config: DevServerConfig, { env, paths, proxy, allowedHost }) => DevServerConfig` + +Any DevServer configuration options: https://webpack.js.org/configuration/dev-server/#devserver + +The function version of `configure` provides two extra properties within the [context object](./getting-started.md#context-object--env-paths-): + +- `proxy` - DevServer proxy config array +- `allowedHost` - the allowed host diff --git a/website/docs/configuration/eslint.md b/website/docs/configuration/eslint.md new file mode 100644 index 00000000..b2121db0 --- /dev/null +++ b/website/docs/configuration/eslint.md @@ -0,0 +1,56 @@ +--- +description: Customize ESLint +--- + +# ESLint + + +```js title="craco.config.js" +module.exports = { + // ... + eslint: { + enable: true /* (default value) */, + mode: 'extends' /* (default value) */ || 'file', + configure: { /* ... */ }, + configure: (eslintConfig, { env, paths }) => { + /* ... */ + return eslintConfig; + }, + pluginOptions: { /* ... */ }, + pluginOptions: (eslintPluginOptions, { env, paths }) => { + /* ... */ + return eslintPluginOptions; + }, + }, +}; +``` + +:::tip + +Properties listed twice in the outline above (for example, `configure`) can be assigned an **object literal** or a **function**. See [configuration tips](./getting-started.md#object-literals-and-functions) for details. + +::: + +## eslint.enable + +`boolean = true` + +Whether or not ESLint is enabled. + +## eslint.mode + +`'extends' | 'file' = 'extends'` + +See [override modes](./getting-started.md#override-modes). + +## eslint.configure + +`ESLintConfig` or `(config: ESLintConfig, { env, paths }) => ESLintConfig` + +Any ESLint configuration options: https://eslint.org/docs/latest/user-guide/configuring/ + +## eslint.pluginOptions + +`ESLintPluginOptions` or `(options: ESLintPluginOptions, { env, paths }) => ESLintPluginOptions` + +Any ESLint plugin configuration options: https://github.com/webpack-contrib/eslint-webpack-plugin#options diff --git a/website/docs/configuration/getting-started.md b/website/docs/configuration/getting-started.md new file mode 100644 index 00000000..b7a53fad --- /dev/null +++ b/website/docs/configuration/getting-started.md @@ -0,0 +1,196 @@ +--- +description: Setting up the configuration file +--- + +# Getting Started + +## Creating the file + +CRACO can be configured in a file with any of the following names: + +1. `craco.config.ts` +2. `craco.config.js` +3. `craco.config.cjs` +4. `cracorc.ts` +5. `cracorc.js` +6. `.cracorc` + +If multiple configuration files are found, CRACO will use the one highest on the list above. You can also [specify a file path in your `package.json` file], which will take priority over all files listed above. + +### Setting a custom location + +#### Option 1: package.json (recommended) + +You can change the location of your config file by specifying a value for `cracoConfig` in your `package.json` file. + +```json title="package.json" +{ + "cracoConfig": "config/craco-config-with-custom-name.js" +} +``` + +#### Option 2: CLI (for backward compatibility) + +You can change the location of your config file by specifying a file path with the `--config` CLI option. + +```json title="package.json" +{ + "scripts": { + "start": "craco start --config config/craco-config-with-custom-name.js" + } +} +``` + +:::caution + +The CLI option doesn't support Babel with Jest. + +::: + +## Configuration tips + +### Object literals and functions + +Many config override properties in the CRACO config can be assigned either one of two things: + +- an **object literal**, which will be merged with the original config + + ```js title="craco.config.js (example)" + module.exports = { + webpack: { + configure: { + entry: './path/to/my/entry/file.js', + }, + }, + }; + ``` + +- a **function** that takes in the original config as the first argument (and optionally a [context object](#context-object--env-paths-)) and returns the new config + + ```js title="craco.config.js (example)" + module.exports = { + webpack: { + configure: (webpackConfig, { env, paths }) => { + webpackConfig.entry = './path/to/my/entry/file.js'; + return webpackConfig; + }, + }, + }; + ``` + +Configuration outlines within this documentation will show both of these options as two properties with the same name (for example, two properties named `configure` where one is an object literal and the other is a function). + +### Context object (`{ env, paths }`) + +The function version of config override properties accepts an optional second argument, which is a single object containing the following properties: + +- `env` - the current NODE_ENV (development, production, etc.) +- `paths` - an object that contains all the paths used by CRA + +Some configuration sections, like [`jest.configure`](./jest.md#jestconfigure) and [`devServer`](./devserver.md#devserver-1), include extra properties in their context object. + +### Override modes + +Some sections have a `mode` property, which can be assigned one of two values: + +- `extends` - the provided configuration will extend the CRA settings (**default**) +- `file` - the CRA settings will be reset and you'll need to provide an official configuration file for the plugin that will supersede any settings + +## Configuration helpers + +### when + +```js title="craco.config.js (example)" +module.exports = { + eslint: { + mode: ESLINT_MODES.file, + configure: { + formatter: when( + process.env.NODE_ENV === 'CI', + require('eslint-formatter-vso') + ), + }, + }, + webpack: { + plugins: [ + new ConfigWebpackPlugin(), + ...whenDev(() => [new CircularDependencyPlugin()], []), + ], + }, +}; +``` + +#### `when(condition, fn, [unmetValue])` + +`when(condition: boolean, fn: () => T, unmetValue?: T): T | undefined` + +If `condition` evaluates to true, `fn` is called and the helper will return what that function returns. If false, `unmetValue` will be returned (or `undefined` if not provided). + +#### `whenDev(condition, fn, [unmetValue])` + +`whenDev(fn: () => T, unmetValue?: T): T | undefined` + +Equivalent to `when(process.env.NODE_ENV === 'development', fn, unmetValue)`. + +#### `whenProd(condition, fn, [unmetValue])` + +`whenProd(fn: () => T, unmetValue?: T): T | undefined` + +Equivalent to `when(process.env.NODE_ENV === 'production', fn, unmetValue)`. + +#### `whenTest(condition, fn, [unmetValue])` + +`whenTest(fn: () => T, unmetValue?: T): T | undefined` + +Equivalent to `when(process.env.NODE_ENV === 'test', fn, unmetValue)`. + +## Exporting your configuration + +You can export your configuration in a variety of ways. + +:::tip + +The function options will be called with an object containing the current environment variables (for example, `NODE_ENV`). + +::: + +### Object literal + +```js title="craco.config.js" +module.exports = { + ... +}; +``` + +### Function + +```js title="craco.config.js" +module.exports = function ({ env }) { + return { + ... + }; +}; +``` + +### Promise or Async Function + +```js title="craco.config.js" +module.exports = async function ({ env }) { + await ...; + + return { + ... + }; +}; +``` + +## Using a custom `react-scripts` package + +If you're using a fork of Create React App's `react-scripts` package, you can specify the name in your configuration so CRACO knows where the scripts are. If this property is omitted, CRACO defaults to `react-scripts`. + +```js title="craco.config.js" +module.exports = { + // ... + reactScriptsVersion: 'custom-react-scripts-package', +}; +``` diff --git a/website/docs/configuration/jest.md b/website/docs/configuration/jest.md new file mode 100644 index 00000000..04b2c1c4 --- /dev/null +++ b/website/docs/configuration/jest.md @@ -0,0 +1,56 @@ +--- +description: Customize Jest +--- + +# Jest + + +```js title="craco.config.js" +module.exports = { + // ... + jest: { + babel: { + addPresets: true /* (default value) */, + addPlugins: true /* (default value) */, + }, + configure: { /* ... */ }, + configure: (jestConfig, { env, paths, resolve, rootDir }) => { + /* ... */ + return jestConfig; + }, + }, +}; +``` + +:::tip + +Properties listed twice in the outline above (for example, `configure`) can be assigned an **object literal** or a **function**. See [configuration tips](./getting-started.md#object-literals-and-functions) for details. + +::: + +## jest.babel + +Configuration options for the `babel-jest` transformer: https://jestjs.io/docs/code-transformation + +### jest.babel.addPresets + +`boolean = true` + +Whether or not Babel presets should be added. + +### jest.babel.addPlugins + +`boolean = true` + +Whether or not Babel plugins should be added. + +## jest.configure + +`JestConfig` or `(config: JestConfig, { env, paths, resolve, rootDir }) => JestConfig` + +Any Jest configuration options: https://jestjs.io/docs/configuration + +The function version of `configure` provides two extra properties within the [context object](./getting-started.md#context-object--env-paths-): + +- `resolve` - provided by CRA +- `rootDir` - provided by CRA diff --git a/website/docs/configuration/plugins.md b/website/docs/configuration/plugins.md new file mode 100644 index 00000000..f8299a75 --- /dev/null +++ b/website/docs/configuration/plugins.md @@ -0,0 +1,21 @@ +--- +description: Include third-party CRACO plugins +--- + +# CRACO Plugins + +View a list of [community maintained plugins](/plugins) or [develop your own](../plugin-api/getting-started.md). + + +```js title="craco.config.js" +module.exports = { + // ... + plugins: [ + { + plugin: require('some-craco-plugin'), + options: { /* ... */ }, + }, + // ... + ], +}; +``` diff --git a/website/docs/configuration/style.md b/website/docs/configuration/style.md new file mode 100644 index 00000000..d764c1ec --- /dev/null +++ b/website/docs/configuration/style.md @@ -0,0 +1,114 @@ +--- +description: Customize CSS preprocessors +--- + +# Style + + +```js title="craco.config.js" +module.exports = { + // ... + style: { + modules: { + localIdentName: '', + }, + css: { + loaderOptions: { /* ... */ }, + loaderOptions: (cssLoaderOptions, { env, paths }) => { + /* ... */ + return cssLoaderOptions; + }, + }, + sass: { + loaderOptions: { /* ... */ }, + loaderOptions: (sassLoaderOptions, { env, paths }) => { + /* ... */ + return sassLoaderOptions; + }, + }, + postcss: { + mode: 'extends' /* (default value) */ || 'file', + plugins: [require('plugin-to-append')], + plugins: (plugins) => [require('plugin-to-prepend')].concat(plugins), + env: { + autoprefixer: { /* ... */ }, + stage: 3, + features: { /* ... */ }, + }, + loaderOptions: { /* ... */ }, + loaderOptions: (postcssLoaderOptions, { env, paths }) => { + /* ... */ + return postcssLoaderOptions; + }, + }, + }, +}; +``` + +:::tip + +Properties listed twice in the outline above (for example, `loaderOptions`) can be assigned an **object literal** or a **function**. See [configuration tips](./getting-started.md#object-literals-and-functions) for details. + +::: + +## style.modules + +### style.modules.localIdentName + +`string` + +https://github.com/webpack-contrib/css-loader#localidentname + +## style.css + +### style.css.loaderOptions + +`CSSLoaderOptions` or `(options: CSSLoaderOptions, { env, paths }) => CSSLoaderOptions` + +Any css-loader configuration options: https://github.com/webpack-contrib/css-loader#options + +## style.sass + +### style.sass.loaderOptions + +`SASSLoaderOptions` or `(options: SASSLoaderOptions, { env, paths }) => SASSLoaderOptions` + +Any sass-loader configuration options: https://github.com/webpack-contrib/sass-loader#options + +## style.postcss + +### style.postcss.mode + +`'extends' | 'file' = 'extends'` + +See [override modes](./getting-started.md#override-modes). + +### style.postcss.plugins + +`[PostCSSPlugin]` or `(plugins: [PostCSSPlugin]) => [PostCSSPlugin]` + +Any PostCSS plugins: https://github.com/postcss/postcss#plugins + +### style.postcss.env + +#### style.postcss.env.autoprefixer + +`AutoprefixerOptions` + +Any autoprefixer options: https://github.com/postcss/autoprefixer#options + +#### style.postcss.env.stage + +`0 | 1 | 2 | 3 | 4` + +Any valid CSS stage: https://cssdb.org/#the-staging-process + +#### style.postcss.env.features + +Any CSS features: https://preset-env.cssdb.org/features/ + +### style.postcss.loaderOptions + +`PostCSSLoaderOptions` or `(options: PostCSSLoaderOptions, { env, paths }) => PostCSSLoaderOptions` + +Any postcss-loader options: https://github.com/webpack-contrib/postcss-loader#options diff --git a/website/docs/configuration/typescript.md b/website/docs/configuration/typescript.md new file mode 100644 index 00000000..174277b9 --- /dev/null +++ b/website/docs/configuration/typescript.md @@ -0,0 +1,21 @@ +--- +description: Customize TypeScript +--- + +# TypeScript + + +```js title="craco.config.js" +module.exports = { + // ... + typescript: { + enableTypeChecking: true /* (default value) */, + }, +}; +``` + +## typescript.enableTypeChecking + +`boolean = true` + +Whether or not TypeScript type checking is enabled. diff --git a/website/docs/configuration/webpack.md b/website/docs/configuration/webpack.md new file mode 100644 index 00000000..a161c7da --- /dev/null +++ b/website/docs/configuration/webpack.md @@ -0,0 +1,76 @@ +--- +description: Customize Webpack +--- + +# Webpack + + +```js title="craco.config.js" +module.exports = { + // ... + webpack: { + alias: { /* ... */ }, + plugins: { + add: [ /* ... */ ], + remove: [ /* ... */ ], + }, + configure: { /* ... */}, + configure: (webpackConfig, { env, paths }) => { + /* ... */ + return webpackConfig; + }, + }, +}; +``` + +:::tip + +Properties listed twice in the outline above (for example, `configure`) can be assigned an **object literal** or a **function**. See [configuration tips](./getting-started.md#object-literals-and-functions) for details. + +::: + +## webpack.alias + +`object` + +See https://webpack.js.org/configuration/resolve/#resolvealias. + +## webpack.plugins + +### webpack.plugins.add + +`[WebpackPlugin | [WebpackPlugin, 'append' | 'prepend']]` + +An array of Webpack plugins to add: https://webpack.js.org/plugins/ + +You can specify whether or not each plugin is appended or prepended to the existing list of Webpack plugins. If not specified, the default is to prepend. Check out the following example: + +```js title="craco.config.js" +const CopyPlugin = require('copy-webpack-plugin'); +const ESLintPlugin = require('eslint-webpack-plugin'); +const HtmlPlugin = require('html-webpack-plugin'); + +module.exports = { + webpack: { + plugins: { + add: [ + new CopyWebpackPlugin() /* this plugin will be prepended */, + [new ESLintPlugin(), 'prepend'] /* this one, too */, + [new HtmlPlugin(), 'append'] /* not this one though */, + ], + }, + }, +}; +``` + +### webpack.plugins.remove + +`[string]` + +An array of plugin constructor names to remove. + +## webpack.configure + +`WebpackConfig` or `(config: WebpackConfig, { env, paths }) => WebpackConfig` + +Any Webpack configuration options: https://webpack.js.org/configuration/ diff --git a/website/docs/getting-started.md b/website/docs/getting-started.md new file mode 100644 index 00000000..ce4c4453 --- /dev/null +++ b/website/docs/getting-started.md @@ -0,0 +1,83 @@ +# Getting Started + +:::info + +The current **CRACO** version requires **Create React App 5** (`react-scripts 5.x.x`). If using an older version of CRA, [use the appropriate version of CRACO](#backward-compatibility). + +::: + +## Set up CRACO + +1. Install the latest version of the package from npm as a dev dependency: + + ``` + npm i -D @craco/craco + ``` + +2. Create a CRACO configuration file in your project's root directory and [configure](./configuration/getting-started.md): + + ```diff + my-app + ├── node_modules + + ├── craco.config.js + └── package.json + ``` + +3. Update the existing calls to `react-scripts` in the `scripts` section of your `package.json` to use the `craco` CLI: + + ```diff title="package.json" + "scripts": { + - "start": "react-scripts start" + + "start": "craco start" + - "build": "react-scripts build" + + "build": "craco build" + - "test": "react-scripts test" + + "test": "craco test" + } + ``` + +You can now start or build your app like normal: + +``` +npm start +``` + +``` +npm run build +``` + +## Start configuring + +Check out the [configuration documentation](./configuration/getting-started.md). + +## TypeScript support + +CRACO provides official typings that you can use if you'd like type checking and IDE autocompletion in your configuration file: + +``` +npm i -D @craco/types +``` + +## Backward compatibility + +CRACO is not meant to be backward compatible with older versions of Create React App and will only support the latest version. If your project uses an old version (which can be determined by the version of the `react-scripts` dependency in your project), refer to the following table to select the appropriate CRACO version. + +| react-scripts version | CRACO version | +| --------------------- | ------------- | +| 5.x.x (latest) | 7.0.0 | +| 4.x.x | 6.4.5 | +| < 4.0.0 | 5.8.0 | + +## Debugging + +### Verbose logging + +To activate verbose logging, specify the CLI option `--verbose` + +```json title="package.json" +{ + "scripts": { + "start": "craco start --verbose" + } +} +``` diff --git a/website/docs/plugin-api/getting-started.md b/website/docs/plugin-api/getting-started.md new file mode 100644 index 00000000..07ddf0b2 --- /dev/null +++ b/website/docs/plugin-api/getting-started.md @@ -0,0 +1,59 @@ +--- +description: Get started with CRACO plugin development +--- + +# Getting Started + +CRACO has a nice plugin API. You can view a list of [community maintained plugins](/plugins) or develop your own. + +## Develop a plugin + +CRACO provides a bunch of [hooks](./hooks.md) and [utility functions](../../category/utility-functions) to make plugin development easy. A plugin is structured using the four hooks (all are optional): + +```js title="craco-example-plugin.js" +module.exports = { + overrideCracoConfig: ({ cracoConfig, pluginOptions, context }) => { + /* ... */ + return cracoConfig; + }, + + overrideWebpackConfig: ({ + webpackConfig, + cracoConfig, + pluginOptions, + context, + }) => { + /* ... */ + return webpackConfig; + }, + + overrideDevServerConfig: ({ + devServerConfig, + cracoConfig, + pluginOptions, + context, + }) => { + /* ... */ + return devServerConfig; + }, + + overrideJestConfig: ({ jestConfig, cracoConfig, pluginOptions, context }) => { + /* ... */ + return jestConfig; + }, +}; +``` + +:::note + +Notice how all hooks only accept a single object as an argument. The outline above destructures each object. + +::: + +:::caution important + +All functions must return the updated configuration object. + +::: + +Get started by checking out the documentation for [hooks](./hooks.md). diff --git a/website/docs/plugin-api/hooks.md b/website/docs/plugin-api/hooks.md new file mode 100644 index 00000000..d4cedd08 --- /dev/null +++ b/website/docs/plugin-api/hooks.md @@ -0,0 +1,228 @@ +--- +description: Hooks available to CRACO plugins +--- + +# Hooks + +There are four hooks available to a plugin: + +- [`overrideCracoConfig`](#overridecracoconfig) - customize the CRACO config object **before** it is processed by CRACO +- [`overrideWebpackConfig`](#overridewebpackconfig) - customize the Webpack config **after** it is processed by CRACO +- [`overrideDevServerConfig`](#overridedevserverconfig) - customize the DevServer config **after** it is processed by CRACO +- [`overrideJestConfig`](#overridejestconfig) - customize the Jest config **after** it is processed by CRACO + +:::caution important + +Every function **must** return the updated configuration object. + +::: + +## overrideCracoConfig + +`overrideCracoConfig(data): CracoConfig` + +`data` is an object with the following structure: + +| Property | Description | +| --------------- | --------------------------------------------------------------------------------------------------------------- | +| `cracoConfig` | The config object read from the [CRACO config](../configuration/getting-started.md) provided by the consumer | +| `pluginOptions` | The plugin options provided by the consumer | +| `context` | A [context object](../configuration/getting-started.md#context-object--env-paths-) containing `env` and `paths` | + +This function must return a valid [CRACO config](../configuration/getting-started.md). + +
+ Example + +```js title="craco-log-plugin.js" +module.exports = { + overrideCracoConfig: ({ + cracoConfig, + pluginOptions, + context: { env, paths }, + }) => { + if (pluginOptions.preText) { + console.log(pluginOptions.preText); + } + + console.log(JSON.stringify(cracoConfig, null, 4)); + + return cracoConfig; + }, +}; +``` + +```js title="craco.config.js" +const logPlugin = require('./craco-log-plugin'); + +module.exports = { + // ... + plugins: [ + { + plugin: logPlugin, + options: { preText: 'CRACO CONFIG' }, + }, + ], +}; +``` + +
+ +## overrideWebpackConfig + +`overrideWebpackConfig(data): WebpackConfig` + +`data` is an object with the following structure: + +| Property | Description | +| --------------- | --------------------------------------------------------------------------------------------------------------- | +| `webpackConfig` | The [Webpack config](https://webpack.js.org/configuration/) object already customized by CRACO | +| `cracoConfig` | The config object read from the [CRACO config](../configuration/getting-started.md) provided by the consumer | +| `pluginOptions` | The plugin options provided by the consumer | +| `context` | A [context object](../configuration/getting-started.md#context-object--env-paths-) containing `env` and `paths` | + +This function must return a valid [Webpack config](https://webpack.js.org/configuration/). + +
+ Example + +```js title="craco-log-plugin.js" +module.exports = { + overrideWebpackConfig: ({ + webpackConfig, + cracoConfig, + pluginOptions, + context: { env, paths }, + }) => { + if (pluginOptions.preText) { + console.log(pluginOptions.preText); + } + + console.log(JSON.stringify(webpackConfig, null, 4)); + + return cracoConfig; + }, +}; +``` + +```js title="craco.config.js" +const logPlugin = require('./craco-log-plugin'); + +module.exports = { + // ... + plugins: [ + { + plugin: logPlugin, + options: { preText: 'WEBPACK CONFIG' }, + }, + ], +}; +``` + +
+ +## overrideDevServerConfig + +`overrideDevServerConfig(data): DevServerConfig` + +`data` is an object with the following structure: + +| Property | Description | +| ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `devServerConfig` | The [DevServer config](https://webpack.js.org/configuration/dev-server/#devserver) object already customized by CRACO | +| `cracoConfig` | The config object read from the [CRACO config](../configuration/getting-started.md) provided by the consumer | +| `pluginOptions` | The plugin options provided by the consumer | +| `context` | A [context object](../configuration/getting-started.md#context-object--env-paths-) ([DevServer-specific](../configuration/devserver.md#devserver-1)) containing `env`, `paths`, and `allowedHost` | + +This function must return a valid [DevServer config](https://webpack.js.org/configuration/dev-server/#devserver). + +
+ Example + +```js title="craco-log-plugin.js" +module.exports = { + overrideDevServerConfig: ({ + devServerConfig, + cracoConfig, + pluginOptions, + context: { env, paths, allowedHost }, + }) => { + if (pluginOptions.preText) { + console.log(pluginOptions.preText); + } + + console.log(JSON.stringify(devServerConfig, null, 4)); + + return devServerConfig; + }, +}; +``` + +```js title="craco.config.js" +const logPlugin = require('./craco-log-plugin'); + +module.exports = { + // ... + plugins: [ + { + plugin: logPlugin, + options: { preText: 'DEVSERVER CONFIG' }, + }, + ], +}; +``` + +
+ +## overrideJestConfig + +`overrideJestConfig(data): JestConfig` + +`data` is an object with the following structure: + +| Property | Description | +| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `jestConfig` | The [Jest config](https://jestjs.io/docs/configuration) object already customized by CRACO | +| `cracoConfig` | The config object read from the [CRACO config](../configuration/getting-started.md) provided by the consumer | +| `pluginOptions` | The plugin options provided by the consumer | +| `context` | A [context object](../configuration/getting-started.md#context-object--env-paths-) ([Jest-specific](../configuration/jest.md#jestconfigure)) containing `env`, `paths`, `resolve`, and `rootDir` | + +This function must return a valid [Jest config](https://jestjs.io/docs/configuration). + +
+ Example + +```js title="craco-log-plugin.js" +module.exports = { + overrideJestConfig: ({ + jestConfig, + cracoConfig, + pluginOptions, + context: { env, paths, resolve, rootDir }, + }) => { + if (pluginOptions.preText) { + console.log(pluginOptions.preText); + } + + console.log(JSON.stringify(jestConfig, null, 4)); + + return jestConfig; + }, +}; +``` + +```js title="craco.config.js" +const logPlugin = require('./craco-log-plugin'); + +module.exports = { + // ... + plugins: [ + { + plugin: logPlugin, + options: { preText: 'JEST CONFIG' }, + }, + ], +}; +``` + +
diff --git a/website/docs/plugin-api/utility-functions/miscellaneous.md b/website/docs/plugin-api/utility-functions/miscellaneous.md new file mode 100644 index 00000000..aa7f70a0 --- /dev/null +++ b/website/docs/plugin-api/utility-functions/miscellaneous.md @@ -0,0 +1,97 @@ +# Miscellaneous + +Other useful utility functions + +```js +const { throwUnexpectedConfigError } = require('@craco/craco'); +``` + +## Functions + +### throwUnexpectedConfigError + +`throwUnexpectedConfigError(options)` + +Raises an error and crashes Node.js. + +`options` should be an object with the following structure: + +| Property | Description | Type / Format | Required | +| ------------------ | ------------------------------------------- | --------------------- | -------- | +| `message` | An error message explaining what went wrong | string | Yes | +| `packageName` | npm package name | string | No | +| `githubRepo` | GitHub repo where people can open an issue | string: username/repo | No | +| `githubIssueQuery` | Search string to find related issues | string | No | + +:::tip + +Throw an error if the configuration changes and does not match your expectations. (For example, `getLoader` cannot find a loader and `isFound` is false.) Create React App might update the structure of their webpack config, so it is very important to show a helpful error message when something breaks. + +::: + +#### Example + +``` +$ yarn start +yarn run v1.12.3 +$ craco start +/path/to/your/app/craco.config.js:23 + throw new Error( + ^ + + Error: Can't find eslint-loader in the webpack config! + + This error probably occurred because you updated react-scripts or craco. Please try updating craco-less to the latest version: + + $ yarn upgrade craco-less + + Or: + + $ npm update craco-less + + If that doesn't work, craco-less needs to be fixed to support the latest version. + Please check to see if there's already an issue in the ndbroadbent/craco-less repo: + + * https://github.com/DocSpring/craco-less/issues?q=is%3Aissue+webpack+eslint-loader + + If not, please open an issue and we'll take a look. (Or you can send a PR!) + + You might also want to look for related issues in the craco and create-react-app repos: + + * https://github.com/dilanx/craco/issues?q=is%3Aissue+webpack+eslint-loader + * https://github.com/facebook/create-react-app/issues?q=is%3Aissue+webpack+eslint-loader + + at throwUnexpectedConfigError (/path/to/your/app/craco.config.js:23:19) + ... +``` + +#### Usage + +```js +const { + getLoader, + loaderByName, + throwUnexpectedConfigError, +} = require('@craco/craco'); + +// Create a helper function if you need to call this multiple times +const throwError = (message, githubIssueQuery) => + throwUnexpectedConfigError({ + packageName: 'craco-less', + githubRepo: 'ndbroadbent/craco-less', + message, + githubIssueQuery, + }); + +const { isFound, match } = getLoader( + webpackConfig, + loaderByName('eslint-loader') +); + +if (!isFound) { + throwError( + "Can't find eslint-loader in the webpack config!", + 'webpack+eslint-loader' + ); +} +``` diff --git a/website/docs/plugin-api/utility-functions/webpack-asset-modules.md b/website/docs/plugin-api/utility-functions/webpack-asset-modules.md new file mode 100644 index 00000000..035f530f --- /dev/null +++ b/website/docs/plugin-api/utility-functions/webpack-asset-modules.md @@ -0,0 +1,263 @@ +# Webpack Asset Modules + +Utility functions for [Webpack asset modules](https://webpack.js.org/guides/asset-modules/) + +```js +const { + assetModuleByName, + getAssetModule, + getAssetModules, + addBeforeAssetModule, + addBeforeAssetModules, + addAfterAssetModule, + addAfterAssetModules, + removeAssetModules, +} = require('@craco/craco'); +``` + +## Functions + +### assetModuleByName + +`assetModuleByName(targetAssetModuleName: string): AssetModuleMatcher` + +Returns an [asset module matcher](#assetmodulematcher) function to be used with other asset module utility functions to match a name to an existing asset module. + +### getAssetModule + +`getAssetModule(webpackConfig: WebpackConfig, matcher: AssetModuleMatcher)` + +Retrieve the **first** asset module for which the matcher returns true from the Webpack config. + +#### Return Type + +``` +{ + isFound: boolean; + match: { + rule: Rule; + index: number; + } +} +``` + +#### Usage + +```js +const { getAssetModule, assetModuleByName } = require('@craco/craco'); + +const { isFound, match } = getAssetModule( + webpackConfig, + assetModuleByName('asset/source') +); + +if (isFound) { + // do stuff... +} +``` + +### getAssetModules + +`getAssetModules(webpackConfig: WebpackConfig, matcher: AssetModuleMatcher)` + +Retrieve **all** of the asset modules for which the matcher returns true from the Webpack config. + +#### Return Type + +``` +{ + hasFoundAny: boolean; + matches: [ + { + rule: Rule; + index: number; + } + ] +} +``` + +#### Usage + +```js +const { getAssetModules, assetModuleByName } = require('@craco/craco'); + +const { hasFoundAny, matches } = getAssetModules( + webpackConfig, + assetModuleByName('asset/inline') +); + +if (hasFoundAny) { + matches.forEach((x) => { + // do stuff... + }); +} +``` + +### addBeforeAssetModule + +`addBeforeAssetModule(webpackConfig: WebpackConfig, matcher: AssetModuleMatcher, newAssetModule: Rule)` + +Add a new asset module **before** the asset module for which the matcher returns true in the Webpack config. + +#### Return Type + +``` +{ + isAdded: boolean; +} +``` + +#### Usage + +```js +const { addBeforeAssetModule, assetModuleByName } = require('@craco/craco'); + +const myNewWebpackAssetModule = { + test: /\.png/, + type: 'asset/resource', +}; + +addBeforeAssetModule( + webpackConfig, + assetModuleByName('asset/source'), + myNewWebpackAssetModule +); +``` + +### addBeforeAssetModules + +`addBeforeAssetModules(webpackConfig: WebpackConfig, matcher: AssetModuleMatcher, newAssetModule: Rule)` + +Add a new asset module **before all** of the asset modules for which the matcher returns true in the Webpack config. + +#### Return Type + +``` +{ + isAdded: boolean; + addedCount: number; +} +``` + +#### Usage + +```js +const { addBeforeAssetModules, assetModuleByName } = require('@craco/craco'); + +const myNewWebpackAssetModule = { + test: /\.png/, + type: 'asset/resource', +}; + +addBeforeAssetModules( + webpackConfig, + assetModuleByName('asset/source'), + myNewWebpackAssetModule +); +``` + +### addAfterAssetModule + +`addAfterAssetModule(webpackConfig: WebpackConfig, matcher: AssetModuleMatcher, newAssetModule: Rule)` + +Add a new asset module **after** the asset module for which the matcher returns true in the Webpack config. + +#### Return Type + +``` +{ + isAdded: boolean; +} +``` + +#### Usage + +```js +const { addAfterAssetModule, assetModuleByName } = require('@craco/craco'); + +const myNewWebpackAssetModule = { + test: /\.png/, + type: 'asset/resource', +}; + +addAfterAssetModule( + webpackConfig, + assetModuleByName('asset/source'), + myNewWebpackAssetModule +); +``` + +### addAfterAssetModules + +`addAfterAssetModules(webpackConfig: WebpackConfig, matcher: AssetModuleMatcher, newAssetModule: Rule)` + +Add a new asset module **after all** of the asset modules for which the matcher returns true in the Webpack config. + +#### Return Type + +``` +{ + isAdded: boolean; + addedCount: number; +} +``` + +#### Usage + +```js +const { addAfterAssetModules, assetModuleByName } = require('@craco/craco'); + +const myNewWebpackAssetModule = { + test: /\.png/, + type: 'asset/resource', +}; + +addAfterAssetModules( + webpackConfig, + assetModuleByName('asset/source'), + myNewWebpackAssetModule +); +``` + +### removeAssetModules + +`removeAssetModules(webpackConfig: WebpackConfig, matcher: AssetModuleMatcher)` + +Remove **all** of the asset modules for which the matcher returns true from the Webpack config. + +#### Return Type + +``` +{ + hasRemovedAny: boolean; + removedCount: number; +} +``` + +#### Usage + +```js +const { removeAssetModules, assetModuleByName } = require('@craco/craco'); + +removeAssetModules(webpackConfig, assetModuleByName('asset/source')); +``` + +## Reference + +### WebpackConfig + +See https://webpack.js.org/configuration/. + +### AssetModuleMatcher + +An asset module matcher should return true if the provided asset module (within a rule) matches the specified criteria. The function is of the following type: + +``` +(rule: Rule) => boolean; +``` + +### Rule + +See https://webpack.js.org/configuration/module/#rule. + +### diff --git a/website/docs/plugin-api/utility-functions/webpack-loaders.md b/website/docs/plugin-api/utility-functions/webpack-loaders.md new file mode 100644 index 00000000..aa2a6fb4 --- /dev/null +++ b/website/docs/plugin-api/utility-functions/webpack-loaders.md @@ -0,0 +1,261 @@ +# Webpack Loaders + +Utility functions for [Webpack loaders](https://webpack.js.org/loaders/) + +```js +const { + loaderByName, + getLoader, + getLoaders, + addBeforeLoader, + addBeforeLoaders, + addAfterLoader, + addAfterLoaders, + removeLoaders, +} = require('@craco/craco'); +``` + +## Functions + +### loaderByName + +`loaderByName(targetLoaderName: string): LoaderMatcher` + +Returns a [loader matcher](#loadermatcher) function to be used with other loader utility functions to match a name to an existing loader. + +### getLoader + +`getLoader(webpackConfig: WebpackConfig, matcher: LoaderMatcher)` + +Retrieve the **first** loader for which the matcher returns true from the Webpack config. + +#### Return Type + +``` +{ + isFound: boolean; + match: { + loader: Rule; + parent: Rule[]; + index: number; + } +} +``` + +#### Usage + +```js +const { getLoader, loaderByName } = require('@craco/craco'); + +const { isFound, match } = getLoader( + webpackConfig, + loaderByName('eslint-loader') +); + +if (isFound) { + // do stuff... +} +``` + +### getLoaders + +`getLoaders(webpackConfig: WebpackConfig, matcher: LoaderMatcher)` + +Retrieve **all** of the loaders for which the matcher returns true from the Webpack config. + +#### Return Type + +``` +{ + hasFoundAny: boolean; + matches: [ + { + loader: Rule; + parent: Rule[]; + index: number; + } + ] +} +``` + +#### Usage + +```js +const { getLoaders, loaderByName } = require('@craco/craco'); + +const { hasFoundAny, matches } = getLoaders( + webpackConfig, + loaderByName('babel-loader') +); + +if (hasFoundAny) { + matches.forEach((x) => { + // do stuff... + }); +} +``` + +### addBeforeLoader + +`addBeforeLoader(webpackConfig: WebpackConfig, matcher: LoaderMatcher, newLoader: Rule)` + +Add a new loader **before** the loader for which the matcher returns true in the Webpack config. + +#### Return Type + +``` +{ + isAdded: boolean; +} +``` + +#### Usage + +```js +const { addBeforeLoader, loaderByName } = require('@craco/craco'); + +const myNewWebpackLoader = { + loader: require.resolve('tslint-loader'), +}; + +addBeforeLoader( + webpackConfig, + loaderByName('eslint-loader'), + myNewWebpackLoader +); +``` + +### addBeforeLoaders + +`addBeforeLoaders(webpackConfig: WebpackConfig, matcher: LoaderMatcher, newLoader: Rule)` + +Add a new loader **before all** of the loaders for which the matcher returns true in the Webpack config. + +#### Return Type + +``` +{ + isAdded: boolean; + addedCount: number; +} +``` + +#### Usage + +```js +const { addBeforeLoaders, loaderByName } = require('@craco/craco'); + +const myNewWebpackLoader = { + loader: require.resolve('tslint-loader'), +}; + +addBeforeLoaders( + webpackConfig, + loaderByName('eslint-loader'), + myNewWebpackLoader +); +``` + +### addAfterLoader + +`addAfterLoader(webpackConfig: WebpackConfig, matcher: LoaderMatcher, newLoader: Rule)` + +Add a new loader **after** the loader for which the matcher returns true in the Webpack config. + +#### Return Type + +``` +{ + isAdded: boolean; +} +``` + +#### Usage + +```js +const { addAfterLoader, loaderByName } = require('@craco/craco'); + +const myNewWebpackLoader = { + loader: require.resolve('tslint-loader'), +}; + +addAfterLoader( + webpackConfig, + loaderByName('eslint-loader'), + myNewWebpackLoader +); +``` + +### addAfterLoaders + +`addAfterLoaders(webpackConfig: WebpackConfig, matcher: LoaderMatcher, newLoader: Rule)` + +Add a new loader **after all** of the loaders for which the matcher returns true in the Webpack config. + +#### Return Type + +``` +{ + isAdded: boolean; + addedCount: number; +} +``` + +#### Usage + +```js +const { addAfterLoaders, loaderByName } = require('@craco/craco'); + +const myNewWebpackLoader = { + loader: require.resolve('tslint-loader'), +}; + +addAfterLoaders( + webpackConfig, + loaderByName('eslint-loader'), + myNewWebpackLoader +); +``` + +### removeLoaders + +`removeLoaders(webpackConfig: WebpackConfig, matcher: LoaderMatcher)` + +Remove **all** of the loaders for which the matcher returns true from the Webpack config. + +#### Return Type + +``` +{ + hasRemovedAny: boolean; + removedCount: number; +} +``` + +#### Usage + +```js +const { removeLoaders, loaderByName } = require('@craco/craco'); + +removeLoaders(webpackConfig, loaderByName('eslint-loader')); +``` + +## Reference + +### WebpackConfig + +See https://webpack.js.org/configuration/. + +### LoaderMatcher + +A loader matcher should return true if the provided loader (within a rule) matches the specified criteria. The function is of the following type: + +``` +(rule: Rule) => boolean; +``` + +### Rule + +See https://webpack.js.org/configuration/module/#rule. + +### diff --git a/website/docs/plugin-api/utility-functions/webpack-plugins.md b/website/docs/plugin-api/utility-functions/webpack-plugins.md new file mode 100644 index 00000000..99b7c757 --- /dev/null +++ b/website/docs/plugin-api/utility-functions/webpack-plugins.md @@ -0,0 +1,109 @@ +# Webpack Plugins + +Utility functions for [Webpack plugins](https://webpack.js.org/plugins/) + +```js +const { + pluginByName, + getPlugin, + addPlugins, + removePlugins, +} = require('@craco/craco'); +``` + +## Functions + +### pluginByName + +`pluginByName(targetPluginName: string): PluginMatcher` + +Returns a [plugin matcher](#pluginmatcher) function to be used with other plugin utility functions to match a name to an existing plugin. This name is the plugin's constructor (`plugin.constructor.name`). + +### getPlugin + +`getPlugin(webpackConfig: WebpackConfig, matcher: PluginMatcher)` + +Retrieve the **first** plugin for which the matcher returns true from the Webpack config. + +#### Return Type + +``` +{ + isFound: boolean; + match: WebpackPlugin; +} +``` + +#### Usage + +```js +const { getPlugin, pluginByName } = require('@craco/craco'); + +const { isFound, match } = getPlugin( + webpackConfig, + pluginByName('ESLintWebpackPlugin') +); + +if (isFound) { + // do stuff... +} +``` + +### addPlugins + +`addPlugins(webpackConfig: WebpackConfig, plugins: [WebpackPlugin | [WebpackPlugin, 'append' | 'prepend']]): void` + +Add new plugins to the Webpack config. Plugins are added with the [same syntax used within the CRACO config](../../configuration/webpack.md#webpackpluginsadd). + +#### Usage + +```js +const { addPlugins } = require('@craco/craco'); + +const myNewWebpackPlugin = require.resolve('ESLintWebpackPlugin'); + +addPlugins(webpackConfig, [myNewWebpackPlugin]); +addPlugins(webpackConfig, [[myNewWebpackPlugin, 'append']]); +addPlugins(webpackConfig, [[myNewWebpackPlugin, 'prepend']]); +``` + +### removePlugins + +`removePlugins(webpackConfig: WebpackConfig, matcher: PluginMatcher)` + +Remove **all** of the plugins for which the matcher returns true from the Webpack config. + +#### Return Type + +``` +{ + hasRemovedAny: boolean; + removedCount: number; +} +``` + +#### Usage + +```js +const { removePlugins, pluginByName } = require('@craco/craco'); + +removePlugins(webpackConfig, pluginByName('ESLintWebpackPlugin')); +``` + +## Reference + +### WebpackConfig + +See https://webpack.js.org/configuration/. + +### PluginMatcher + +A loader matcher should return true if the provided plugin matches the specified criteria. The function is of the following type: + +``` +(plugin: WebpackPlugin) => boolean; +``` + +### WebpackPlugin + +See https://webpack.js.org/plugins/. diff --git a/website/docs/welcome.md b/website/docs/welcome.md new file mode 100644 index 00000000..0580157e --- /dev/null +++ b/website/docs/welcome.md @@ -0,0 +1,62 @@ +--- +title: Welcome +slug: / +--- + +# CRACO + +## What is CRACO? + +To customize most things when using [Create React App](https://create-react-app.dev), you can eject. However, you'll then need to maintain every configuration and script yourself, which can be a bit annoying. **CRACO**, which stands for **C**reate **R**eact **A**pp **C**onfiguration **O**verride, allows you to get all of the benefits of [Create React App](https://create-react-app.dev) without ejecting. Customize your configurations ESLint, Babel, PostCSS, and many more with just a single configuration file at the root of your project. + +:::caution + +By doing this you're breaking the ["guarantees"](https://github.com/facebookincubator/create-react-app/issues/99#issuecomment-234657710) that CRA provides. That is to say, you now "own" the configs. **No support** will be provided. Proceed with caution. + +::: + +## About the documentation + +On this site, you can find the complete documentation for CRACO. If you notice any mistakes or have something you think should be added, create an [issue](https://github.com/dilanx/craco/issues) or submit a pull request. + +## CRA toolchain + +### Introduction + +Create React App is intended to allow people to get started with writing React apps quickly. It does this by packaging several key components with a solid default configuration. + +After some initial experimentation, many people find the default CRA is not quite the right fit. Yet, selecting and configuring a toolchain featuring all of the components CRA already offers is overwhelming. + +CRACO allows you to enjoy the recognizable project structure of CRA while changing detailed configuration settings of each component. + +### Notes on CRA configurations and problem solving + +Keep in mind that there are _some_ configuration settings available to CRA without CRACO. + +Getting exactly what you want may involve a combination of making changes through your CRACO configuration file and by using some of the more limited but still important settings available in CRA. + +Before jumping into customizing your CRACO configuration, step back and think about each part of the problem you're trying to solve. Be sure to review these resources on the CRA configuration, as it may save you time: + +- [Important environment variables that configure CRA](https://create-react-app.dev/docs/advanced-configuration/) +- [Learn about using `postbuild` commands in `package.json`](https://stackoverflow.com/questions/41495658/use-custom-build-output-folder-when-using-create-react-app/51818028#51818028) +- [Proxying API or other requests](https://create-react-app.dev/docs/proxying-api-requests-in-development/) or ["how to integrate CRA's dev server with a second backend"](https://github.com/facebook/create-react-app/issues/147) +- [Search CRACO issues for gotchas, hints, and examples](https://github.com/dilanx/craco/issues?q=is%3Aissue+sort%3Aupdated-desc) + +### Ejecting CRA to learn + +Avoiding ejecting is a major goal for many CRACO users. However, if you're still learning toolchains and modern frontend workflows, it may be helpful to create a sample ejected CRA project to see how the default CRA app configures each of the components. + +While CRACO's default configuration inherits directly from CRA's default settings, seeing the default CRA config files throughout the ejected CRA file structure may give you useful perspective. + +You may even want to try testing a change in the ejected app to better understand how it would be done with your CRACO-based project. + +## Acknowledgements + +- Thanks to [@gsoft-inc](https://github.com/gsoft-inc), the original creator of CRACO, who then passed the project off to me. Specifically, a big shout out to [@patricklafrance](https://github.com/patricklafrance). +- Thanks to [@timarney](https://github.com/timarney), the creator of [react-app-rewired](https://github.com/timarney/react-app-rewired), for his original idea. + +## License + +Copyright © 2022 Dilan Nair. + +This code is licensed under the Apache License 2.0, which can be viewed [here](https://github.com/dilanx/craco/blob/main/packages/craco/LICENSE). diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js new file mode 100644 index 00000000..f8960dda --- /dev/null +++ b/website/docusaurus.config.js @@ -0,0 +1,261 @@ +// @ts-check +// Note: type annotations allow type checking and IDEs autocompletion + +const darkCodeThemeStyles = + require('prism-react-renderer/themes/vsDark').styles; + +/** @type {import('@docusaurus/types').Config} */ +const config = { + title: 'CRACO', + tagline: 'Create React App Configuration Override', + url: 'https://craco.js.org', + baseUrl: '/', + onBrokenLinks: 'throw', + onBrokenMarkdownLinks: 'warn', + favicon: 'img/favicon.ico', + trailingSlash: true, + + // GitHub pages deployment config. + // If you aren't using GitHub pages, you don't need these. + organizationName: 'dilanx', // Usually your GitHub org/user name. + projectName: 'craco', // Usually your repo name. + + // 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'], + }, + + presets: [ + [ + 'classic', + /** @type {import('@docusaurus/preset-classic').Options} */ + ({ + docs: { + sidebarPath: require.resolve('./sidebars.js'), + // Please change this to your repo. + // Remove this to remove the "edit this page" links. + editUrl: 'https://github.com/dilanx/craco/tree/main/website', + }, + blog: false, + theme: { + customCss: require.resolve('./src/css/custom.scss'), + }, + }), + ], + ], + + plugins: [ + [ + '@docusaurus/plugin-content-docs', + { + id: 'plugins', + path: 'plugins', + routeBasePath: 'plugins', + sidebarPath: false, + editUrl: 'https://github.com/dilanx/craco/tree/main/website', + }, + ], + [ + '@docusaurus/plugin-content-docs', + { + id: 'recipes', + path: 'recipes', + routeBasePath: 'recipes', + sidebarPath: require.resolve('./sidebarsRecipes.js'), + editUrl: 'https://github.com/dilanx/craco/tree/main/website', + }, + ], + 'docusaurus-plugin-sass', + ], + + themeConfig: + /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ + ({ + navbar: { + title: 'CRACO', + logo: { + alt: 'CRACO logo', + src: 'img/craco.png', + }, + items: [ + { + type: 'doc', + docId: 'welcome', + position: 'left', + label: 'Documentation', + }, + { + to: 'plugins', + label: 'Plugins', + position: 'left', + }, + { + to: 'recipes', + label: 'Recipes', + position: 'left', + }, + { + href: 'https://github.com/facebook/docusaurus', + label: 'GitHub', + position: 'right', + }, + { + href: 'https://www.npmjs.com/package/@craco/craco', + label: 'npm', + position: 'right', + }, + ], + }, + footer: { + style: 'dark', + logo: { + alt: 'Dilan Nair Open Source Logo', + src: '/img/open-source.svg', + href: 'https://www.dilanxd.com', + width: 280, + target: '_blank', + }, + links: [ + { + title: 'Documentation', + items: [ + { + label: 'Getting Started', + to: 'docs/getting-started', + }, + { + label: 'Configuration', + to: 'docs/configuration/getting-started', + }, + { + label: 'Configuration API', + to: 'docs/configuration-api', + }, + { + label: 'Plugin API', + to: 'docs/plugin-api/getting-started', + }, + ], + }, + { + title: 'Community', + items: [ + { + label: 'Community Maintained Plugins', + to: 'plugins', + }, + { + label: 'Recipes', + to: 'recipes', + }, + { + label: 'GitHub Issues', + href: 'https://github.com/dilanx/craco/issues', + }, + { + label: 'Stack Overflow', + href: 'https://stackoverflow.com/questions/tagged/craco', + }, + ], + }, + { + title: 'More', + items: [ + { + label: 'GitHub', + href: 'https://github.com/dilanx/craco', + }, + { + label: 'npm', + href: 'https://www.npmjs.com/package/@craco/craco', + }, + ], + }, + ], + + copyright: `Copyright © ${new Date().getFullYear()} Dilan Nair. Built with Docusaurus.`, + }, + prism: { + darkTheme: { + plain: { + color: '#D4D4D4', + backgroundColor: '#212121', + }, + styles: [ + ...darkCodeThemeStyles, + { + types: ['title'], + style: { + color: '#569CD6', + fontWeight: 'bold', + }, + }, + { + types: ['property', 'parameter'], + style: { + color: '#9CDCFE', + }, + }, + { + types: ['script'], + style: { + color: '#D4D4D4', + }, + }, + { + types: ['boolean', 'arrow', 'atrule', 'tag'], + style: { + color: '#569CD6', + }, + }, + { + types: ['number', 'color', 'unit'], + style: { + color: '#B5CEA8', + }, + }, + { + types: ['font-matter'], + style: { + color: '#CE9178', + }, + }, + { + types: ['keyword', 'rule'], + style: { + color: '#C586C0', + }, + }, + { + types: ['regex'], + style: { + color: '#D16969', + }, + }, + { + types: ['maybe-class-name'], + style: { + color: '#4EC9B0', + }, + }, + { + types: ['constant'], + style: { + color: '#4FC1FF', + }, + }, + ], + }, + }, + colorMode: { + defaultMode: 'dark', + disableSwitch: true, + }, + }), +}; + +module.exports = config; diff --git a/docs/package-lock.json b/website/package-lock.json similarity index 96% rename from docs/package-lock.json rename to website/package-lock.json index 365acd87..4d5c5e8e 100644 --- a/docs/package-lock.json +++ b/website/package-lock.json @@ -8,45 +8,48 @@ "name": "craco-docs", "version": "0.0.0", "dependencies": { - "@docusaurus/core": "2.1.0", - "@docusaurus/preset-classic": "2.1.0", + "@docusaurus/core": "^2.2.0", + "@docusaurus/preset-classic": "^2.2.0", + "@heroicons/react": "^2.0.12", "@mdx-js/react": "^1.6.22", "clsx": "^1.2.1", + "docusaurus-plugin-sass": "^0.2.2", "prism-react-renderer": "^1.3.5", "react": "^17.0.2", - "react-dom": "^17.0.2" + "react-dom": "^17.0.2", + "sass": "^1.55.0" }, "devDependencies": { - "@docusaurus/module-type-aliases": "2.1.0" + "@docusaurus/module-type-aliases": "^2.2.0" }, "engines": { "node": ">=16.14" } }, "node_modules/@algolia/autocomplete-core": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.7.1.tgz", - "integrity": "sha512-eiZw+fxMzNQn01S8dA/hcCpoWCOCwcIIEUtHHdzN5TGB3IpzLbuhqFeTfh2OUhhgkE8Uo17+wH+QJ/wYyQmmzg==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.7.2.tgz", + "integrity": "sha512-eclwUDC6qfApNnEfu1uWcL/rudQsn59tjEoUYZYE2JSXZrHLRjBUGMxiCoknobU2Pva8ejb0eRxpIYDtVVqdsw==", "dependencies": { - "@algolia/autocomplete-shared": "1.7.1" + "@algolia/autocomplete-shared": "1.7.2" } }, "node_modules/@algolia/autocomplete-preset-algolia": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.7.1.tgz", - "integrity": "sha512-pJwmIxeJCymU1M6cGujnaIYcY3QPOVYZOXhFkWVM7IxKzy272BwCvMFMyc5NpG/QmiObBxjo7myd060OeTNJXg==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.7.2.tgz", + "integrity": "sha512-+RYEG6B0QiGGfRb2G3MtPfyrl0dALF3cQNTWBzBX6p5o01vCCGTTinAm2UKG3tfc2CnOMAtnPLkzNZyJUpnVJw==", "dependencies": { - "@algolia/autocomplete-shared": "1.7.1" + "@algolia/autocomplete-shared": "1.7.2" }, "peerDependencies": { - "@algolia/client-search": "^4.9.1", - "algoliasearch": "^4.9.1" + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" } }, "node_modules/@algolia/autocomplete-shared": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.7.1.tgz", - "integrity": "sha512-eTmGVqY3GeyBTT8IWiB2K5EuURAqhnumfktAEoHxfDY2o7vg2rSnO16ZtIG0fMgt3py28Vwgq42/bVEuaQV7pg==" + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.7.2.tgz", + "integrity": "sha512-QCckjiC7xXHIUaIL3ektBtjJ0w7tTA3iqKcAE/Hjn1lZ5omp7i3Y4e09rAr9ZybqirL7AbxCLLq0Ra5DDPKeug==" }, "node_modules/@algolia/cache-browser-local-storage": { "version": "4.14.2", @@ -1963,18 +1966,18 @@ } }, "node_modules/@docsearch/css": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.2.1.tgz", - "integrity": "sha512-gaP6TxxwQC+K8D6TRx5WULUWKrcbzECOPA2KCVMuI+6C7dNiGUk5yXXzVhc5sld79XKYLnO9DRTI4mjXDYkh+g==" + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.3.0.tgz", + "integrity": "sha512-rODCdDtGyudLj+Va8b6w6Y85KE85bXRsps/R4Yjwt5vueXKXZQKYw0aA9knxLBT6a/bI/GMrAcmCR75KYOM6hg==" }, "node_modules/@docsearch/react": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.2.1.tgz", - "integrity": "sha512-EzTQ/y82s14IQC5XVestiK/kFFMe2aagoYFuTAIfIb/e+4FU7kSMKonRtLwsCiLQHmjvNQq+HO+33giJ5YVtaQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.3.0.tgz", + "integrity": "sha512-fhS5adZkae2SSdMYEMVg6pxI5a/cE+tW16ki1V0/ur4Fdok3hBRkmN/H8VvlXnxzggkQIIRIVvYPn00JPjen3A==", "dependencies": { - "@algolia/autocomplete-core": "1.7.1", - "@algolia/autocomplete-preset-algolia": "1.7.1", - "@docsearch/css": "3.2.1", + "@algolia/autocomplete-core": "1.7.2", + "@algolia/autocomplete-preset-algolia": "1.7.2", + "@docsearch/css": "3.3.0", "algoliasearch": "^4.0.0" }, "peerDependencies": { @@ -1995,9 +1998,9 @@ } }, "node_modules/@docusaurus/core": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.1.0.tgz", - "integrity": "sha512-/ZJ6xmm+VB9Izbn0/s6h6289cbPy2k4iYFwWDhjiLsVqwa/Y0YBBcXvStfaHccudUC3OfP+26hMk7UCjc50J6Q==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.2.0.tgz", + "integrity": "sha512-Vd6XOluKQqzG12fEs9prJgDtyn6DPok9vmUWDR2E6/nV5Fl9SVkhEQOBxwObjk3kQh7OY7vguFaLh0jqdApWsA==", "dependencies": { "@babel/core": "^7.18.6", "@babel/generator": "^7.18.7", @@ -2009,13 +2012,13 @@ "@babel/runtime": "^7.18.6", "@babel/runtime-corejs3": "^7.18.6", "@babel/traverse": "^7.18.8", - "@docusaurus/cssnano-preset": "2.1.0", - "@docusaurus/logger": "2.1.0", - "@docusaurus/mdx-loader": "2.1.0", + "@docusaurus/cssnano-preset": "2.2.0", + "@docusaurus/logger": "2.2.0", + "@docusaurus/mdx-loader": "2.2.0", "@docusaurus/react-loadable": "5.5.2", - "@docusaurus/utils": "2.1.0", - "@docusaurus/utils-common": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", + "@docusaurus/utils": "2.2.0", + "@docusaurus/utils-common": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", "@slorber/static-site-generator-webpack-plugin": "^4.0.7", "@svgr/webpack": "^6.2.1", "autoprefixer": "^10.4.7", @@ -2083,9 +2086,9 @@ } }, "node_modules/@docusaurus/cssnano-preset": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.1.0.tgz", - "integrity": "sha512-pRLewcgGhOies6pzsUROfmPStDRdFw+FgV5sMtLr5+4Luv2rty5+b/eSIMMetqUsmg3A9r9bcxHk9bKAKvx3zQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.2.0.tgz", + "integrity": "sha512-mAAwCo4n66TMWBH1kXnHVZsakW9VAXJzTO4yZukuL3ro4F+JtkMwKfh42EG75K/J/YIFQG5I/Bzy0UH/hFxaTg==", "dependencies": { "cssnano-preset-advanced": "^5.3.8", "postcss": "^8.4.14", @@ -2097,9 +2100,9 @@ } }, "node_modules/@docusaurus/logger": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-2.1.0.tgz", - "integrity": "sha512-uuJx2T6hDBg82joFeyobywPjSOIfeq05GfyKGHThVoXuXsu1KAzMDYcjoDxarb9CoHCI/Dor8R2MoL6zII8x1Q==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-2.2.0.tgz", + "integrity": "sha512-DF3j1cA5y2nNsu/vk8AG7xwpZu6f5MKkPPMaaIbgXLnWGfm6+wkOeW7kNrxnM95YOhKUkJUophX69nGUnLsm0A==", "dependencies": { "chalk": "^4.1.2", "tslib": "^2.4.0" @@ -2109,14 +2112,14 @@ } }, "node_modules/@docusaurus/mdx-loader": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.1.0.tgz", - "integrity": "sha512-i97hi7hbQjsD3/8OSFhLy7dbKGH8ryjEzOfyhQIn2CFBYOY3ko0vMVEf3IY9nD3Ld7amYzsZ8153RPkcnXA+Lg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.2.0.tgz", + "integrity": "sha512-X2bzo3T0jW0VhUU+XdQofcEeozXOTmKQMvc8tUnWRdTnCvj4XEcBVdC3g+/jftceluiwSTNRAX4VBOJdNt18jA==", "dependencies": { "@babel/parser": "^7.18.8", "@babel/traverse": "^7.18.8", - "@docusaurus/logger": "2.1.0", - "@docusaurus/utils": "2.1.0", + "@docusaurus/logger": "2.2.0", + "@docusaurus/utils": "2.2.0", "@mdx-js/mdx": "^1.6.22", "escape-html": "^1.0.3", "file-loader": "^6.2.0", @@ -2140,12 +2143,12 @@ } }, "node_modules/@docusaurus/module-type-aliases": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-2.1.0.tgz", - "integrity": "sha512-Z8WZaK5cis3xEtyfOT817u9xgGUauT0PuuVo85ysnFRX8n7qLN1lTPCkC+aCmFm/UcV8h/W5T4NtIsst94UntQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-2.2.0.tgz", + "integrity": "sha512-wDGW4IHKoOr9YuJgy7uYuKWrDrSpsUSDHLZnWQYM9fN7D5EpSmYHjFruUpKWVyxLpD/Wh0rW8hYZwdjJIQUQCQ==", "dependencies": { "@docusaurus/react-loadable": "5.5.2", - "@docusaurus/types": "2.1.0", + "@docusaurus/types": "2.2.0", "@types/history": "^4.7.11", "@types/react": "*", "@types/react-router-config": "*", @@ -2159,17 +2162,17 @@ } }, "node_modules/@docusaurus/plugin-content-blog": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.1.0.tgz", - "integrity": "sha512-xEp6jlu92HMNUmyRBEeJ4mCW1s77aAEQO4Keez94cUY/Ap7G/r0Awa6xSLff7HL0Fjg8KK1bEbDy7q9voIavdg==", - "dependencies": { - "@docusaurus/core": "2.1.0", - "@docusaurus/logger": "2.1.0", - "@docusaurus/mdx-loader": "2.1.0", - "@docusaurus/types": "2.1.0", - "@docusaurus/utils": "2.1.0", - "@docusaurus/utils-common": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.2.0.tgz", + "integrity": "sha512-0mWBinEh0a5J2+8ZJXJXbrCk1tSTNf7Nm4tYAl5h2/xx+PvH/Bnu0V+7mMljYm/1QlDYALNIIaT/JcoZQFUN3w==", + "dependencies": { + "@docusaurus/core": "2.2.0", + "@docusaurus/logger": "2.2.0", + "@docusaurus/mdx-loader": "2.2.0", + "@docusaurus/types": "2.2.0", + "@docusaurus/utils": "2.2.0", + "@docusaurus/utils-common": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", "cheerio": "^1.0.0-rc.12", "feed": "^4.2.2", "fs-extra": "^10.1.0", @@ -2189,17 +2192,17 @@ } }, "node_modules/@docusaurus/plugin-content-docs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.1.0.tgz", - "integrity": "sha512-Rup5pqXrXlKGIC4VgwvioIhGWF7E/NNSlxv+JAxRYpik8VKlWsk9ysrdHIlpX+KJUCO9irnY21kQh2814mlp/Q==", - "dependencies": { - "@docusaurus/core": "2.1.0", - "@docusaurus/logger": "2.1.0", - "@docusaurus/mdx-loader": "2.1.0", - "@docusaurus/module-type-aliases": "2.1.0", - "@docusaurus/types": "2.1.0", - "@docusaurus/utils": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.2.0.tgz", + "integrity": "sha512-BOazBR0XjzsHE+2K1wpNxz5QZmrJgmm3+0Re0EVPYFGW8qndCWGNtXW/0lGKhecVPML8yyFeAmnUCIs7xM2wPw==", + "dependencies": { + "@docusaurus/core": "2.2.0", + "@docusaurus/logger": "2.2.0", + "@docusaurus/mdx-loader": "2.2.0", + "@docusaurus/module-type-aliases": "2.2.0", + "@docusaurus/types": "2.2.0", + "@docusaurus/utils": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", "@types/react-router-config": "^5.0.6", "combine-promises": "^1.1.0", "fs-extra": "^10.1.0", @@ -2219,15 +2222,15 @@ } }, "node_modules/@docusaurus/plugin-content-pages": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.1.0.tgz", - "integrity": "sha512-SwZdDZRlObHNKXTnFo7W2aF6U5ZqNVI55Nw2GCBryL7oKQSLeI0lsrMlMXdzn+fS7OuBTd3MJBO1T4Zpz0i/+g==", - "dependencies": { - "@docusaurus/core": "2.1.0", - "@docusaurus/mdx-loader": "2.1.0", - "@docusaurus/types": "2.1.0", - "@docusaurus/utils": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.2.0.tgz", + "integrity": "sha512-+OTK3FQHk5WMvdelz8v19PbEbx+CNT6VSpx7nVOvMNs5yJCKvmqBJBQ2ZSxROxhVDYn+CZOlmyrC56NSXzHf6g==", + "dependencies": { + "@docusaurus/core": "2.2.0", + "@docusaurus/mdx-loader": "2.2.0", + "@docusaurus/types": "2.2.0", + "@docusaurus/utils": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", "fs-extra": "^10.1.0", "tslib": "^2.4.0", "webpack": "^5.73.0" @@ -2241,13 +2244,13 @@ } }, "node_modules/@docusaurus/plugin-debug": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.1.0.tgz", - "integrity": "sha512-8wsDq3OIfiy6440KLlp/qT5uk+WRHQXIXklNHEeZcar+Of0TZxCNe2FBpv+bzb/0qcdP45ia5i5WmR5OjN6DPw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.2.0.tgz", + "integrity": "sha512-p9vOep8+7OVl6r/NREEYxf4HMAjV8JMYJ7Bos5fCFO0Wyi9AZEo0sCTliRd7R8+dlJXZEgcngSdxAUo/Q+CJow==", "dependencies": { - "@docusaurus/core": "2.1.0", - "@docusaurus/types": "2.1.0", - "@docusaurus/utils": "2.1.0", + "@docusaurus/core": "2.2.0", + "@docusaurus/types": "2.2.0", + "@docusaurus/utils": "2.2.0", "fs-extra": "^10.1.0", "react-json-view": "^1.21.3", "tslib": "^2.4.0" @@ -2261,13 +2264,13 @@ } }, "node_modules/@docusaurus/plugin-google-analytics": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.1.0.tgz", - "integrity": "sha512-4cgeqIly/wcFVbbWP03y1QJJBgH8W+Bv6AVbWnsXNOZa1yB3AO6hf3ZdeQH9x20v9T2pREogVgAH0rSoVnNsgg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.2.0.tgz", + "integrity": "sha512-+eZVVxVeEnV5nVQJdey9ZsfyEVMls6VyWTIj8SmX0k5EbqGvnIfET+J2pYEuKQnDIHxy+syRMoRM6AHXdHYGIg==", "dependencies": { - "@docusaurus/core": "2.1.0", - "@docusaurus/types": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", + "@docusaurus/core": "2.2.0", + "@docusaurus/types": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", "tslib": "^2.4.0" }, "engines": { @@ -2279,13 +2282,13 @@ } }, "node_modules/@docusaurus/plugin-google-gtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.1.0.tgz", - "integrity": "sha512-/3aDlv2dMoCeiX2e+DTGvvrdTA+v3cKQV3DbmfsF4ENhvc5nKV23nth04Z3Vq0Ci1ui6Sn80TkhGk/tiCMW2AA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.2.0.tgz", + "integrity": "sha512-6SOgczP/dYdkqUMGTRqgxAS1eTp6MnJDAQMy8VCF1QKbWZmlkx4agHDexihqmYyCujTYHqDAhm1hV26EET54NQ==", "dependencies": { - "@docusaurus/core": "2.1.0", - "@docusaurus/types": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", + "@docusaurus/core": "2.2.0", + "@docusaurus/types": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", "tslib": "^2.4.0" }, "engines": { @@ -2297,16 +2300,16 @@ } }, "node_modules/@docusaurus/plugin-sitemap": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.1.0.tgz", - "integrity": "sha512-2Y6Br8drlrZ/jN9MwMBl0aoi9GAjpfyfMBYpaQZXimbK+e9VjYnujXlvQ4SxtM60ASDgtHIAzfVFBkSR/MwRUw==", - "dependencies": { - "@docusaurus/core": "2.1.0", - "@docusaurus/logger": "2.1.0", - "@docusaurus/types": "2.1.0", - "@docusaurus/utils": "2.1.0", - "@docusaurus/utils-common": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.2.0.tgz", + "integrity": "sha512-0jAmyRDN/aI265CbWZNZuQpFqiZuo+5otk2MylU9iVrz/4J7gSc+ZJ9cy4EHrEsW7PV8s1w18hIEsmcA1YgkKg==", + "dependencies": { + "@docusaurus/core": "2.2.0", + "@docusaurus/logger": "2.2.0", + "@docusaurus/types": "2.2.0", + "@docusaurus/utils": "2.2.0", + "@docusaurus/utils-common": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", "fs-extra": "^10.1.0", "sitemap": "^7.1.1", "tslib": "^2.4.0" @@ -2320,22 +2323,22 @@ } }, "node_modules/@docusaurus/preset-classic": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.1.0.tgz", - "integrity": "sha512-NQMnaq974K4BcSMXFSJBQ5itniw6RSyW+VT+6i90kGZzTwiuKZmsp0r9lC6BYAvvVMQUNJQwrETmlu7y2XKW7w==", - "dependencies": { - "@docusaurus/core": "2.1.0", - "@docusaurus/plugin-content-blog": "2.1.0", - "@docusaurus/plugin-content-docs": "2.1.0", - "@docusaurus/plugin-content-pages": "2.1.0", - "@docusaurus/plugin-debug": "2.1.0", - "@docusaurus/plugin-google-analytics": "2.1.0", - "@docusaurus/plugin-google-gtag": "2.1.0", - "@docusaurus/plugin-sitemap": "2.1.0", - "@docusaurus/theme-classic": "2.1.0", - "@docusaurus/theme-common": "2.1.0", - "@docusaurus/theme-search-algolia": "2.1.0", - "@docusaurus/types": "2.1.0" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.2.0.tgz", + "integrity": "sha512-yKIWPGNx7BT8v2wjFIWvYrS+nvN04W+UameSFf8lEiJk6pss0kL6SG2MRvyULiI3BDxH+tj6qe02ncpSPGwumg==", + "dependencies": { + "@docusaurus/core": "2.2.0", + "@docusaurus/plugin-content-blog": "2.2.0", + "@docusaurus/plugin-content-docs": "2.2.0", + "@docusaurus/plugin-content-pages": "2.2.0", + "@docusaurus/plugin-debug": "2.2.0", + "@docusaurus/plugin-google-analytics": "2.2.0", + "@docusaurus/plugin-google-gtag": "2.2.0", + "@docusaurus/plugin-sitemap": "2.2.0", + "@docusaurus/theme-classic": "2.2.0", + "@docusaurus/theme-common": "2.2.0", + "@docusaurus/theme-search-algolia": "2.2.0", + "@docusaurus/types": "2.2.0" }, "engines": { "node": ">=16.14" @@ -2358,22 +2361,22 @@ } }, "node_modules/@docusaurus/theme-classic": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.1.0.tgz", - "integrity": "sha512-xn8ZfNMsf7gaSy9+ClFnUu71o7oKgMo5noYSS1hy3svNifRTkrBp6+MReLDsmIaj3mLf2e7+JCBYKBFbaGzQng==", - "dependencies": { - "@docusaurus/core": "2.1.0", - "@docusaurus/mdx-loader": "2.1.0", - "@docusaurus/module-type-aliases": "2.1.0", - "@docusaurus/plugin-content-blog": "2.1.0", - "@docusaurus/plugin-content-docs": "2.1.0", - "@docusaurus/plugin-content-pages": "2.1.0", - "@docusaurus/theme-common": "2.1.0", - "@docusaurus/theme-translations": "2.1.0", - "@docusaurus/types": "2.1.0", - "@docusaurus/utils": "2.1.0", - "@docusaurus/utils-common": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.2.0.tgz", + "integrity": "sha512-kjbg/qJPwZ6H1CU/i9d4l/LcFgnuzeiGgMQlt6yPqKo0SOJIBMPuz7Rnu3r/WWbZFPi//o8acclacOzmXdUUEg==", + "dependencies": { + "@docusaurus/core": "2.2.0", + "@docusaurus/mdx-loader": "2.2.0", + "@docusaurus/module-type-aliases": "2.2.0", + "@docusaurus/plugin-content-blog": "2.2.0", + "@docusaurus/plugin-content-docs": "2.2.0", + "@docusaurus/plugin-content-pages": "2.2.0", + "@docusaurus/theme-common": "2.2.0", + "@docusaurus/theme-translations": "2.2.0", + "@docusaurus/types": "2.2.0", + "@docusaurus/utils": "2.2.0", + "@docusaurus/utils-common": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", "@mdx-js/react": "^1.6.22", "clsx": "^1.2.1", "copy-text-to-clipboard": "^3.0.1", @@ -2397,16 +2400,16 @@ } }, "node_modules/@docusaurus/theme-common": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.1.0.tgz", - "integrity": "sha512-vT1otpVPbKux90YpZUnvknsn5zvpLf+AW1W0EDcpE9up4cDrPqfsh0QoxGHFJnobE2/qftsBFC19BneN4BH8Ag==", - "dependencies": { - "@docusaurus/mdx-loader": "2.1.0", - "@docusaurus/module-type-aliases": "2.1.0", - "@docusaurus/plugin-content-blog": "2.1.0", - "@docusaurus/plugin-content-docs": "2.1.0", - "@docusaurus/plugin-content-pages": "2.1.0", - "@docusaurus/utils": "2.1.0", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.2.0.tgz", + "integrity": "sha512-R8BnDjYoN90DCL75gP7qYQfSjyitXuP9TdzgsKDmSFPNyrdE3twtPNa2dIN+h+p/pr+PagfxwWbd6dn722A1Dw==", + "dependencies": { + "@docusaurus/mdx-loader": "2.2.0", + "@docusaurus/module-type-aliases": "2.2.0", + "@docusaurus/plugin-content-blog": "2.2.0", + "@docusaurus/plugin-content-docs": "2.2.0", + "@docusaurus/plugin-content-pages": "2.2.0", + "@docusaurus/utils": "2.2.0", "@types/history": "^4.7.11", "@types/react": "*", "@types/react-router-config": "*", @@ -2425,18 +2428,18 @@ } }, "node_modules/@docusaurus/theme-search-algolia": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.1.0.tgz", - "integrity": "sha512-rNBvi35VvENhucslEeVPOtbAzBdZY/9j55gdsweGV5bYoAXy4mHB6zTGjealcB4pJ6lJY4a5g75fXXMOlUqPfg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.2.0.tgz", + "integrity": "sha512-2h38B0tqlxgR2FZ9LpAkGrpDWVdXZ7vltfmTdX+4RsDs3A7khiNsmZB+x/x6sA4+G2V2CvrsPMlsYBy5X+cY1w==", "dependencies": { "@docsearch/react": "^3.1.1", - "@docusaurus/core": "2.1.0", - "@docusaurus/logger": "2.1.0", - "@docusaurus/plugin-content-docs": "2.1.0", - "@docusaurus/theme-common": "2.1.0", - "@docusaurus/theme-translations": "2.1.0", - "@docusaurus/utils": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", + "@docusaurus/core": "2.2.0", + "@docusaurus/logger": "2.2.0", + "@docusaurus/plugin-content-docs": "2.2.0", + "@docusaurus/theme-common": "2.2.0", + "@docusaurus/theme-translations": "2.2.0", + "@docusaurus/utils": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", "algoliasearch": "^4.13.1", "algoliasearch-helper": "^3.10.0", "clsx": "^1.2.1", @@ -2455,9 +2458,9 @@ } }, "node_modules/@docusaurus/theme-translations": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-2.1.0.tgz", - "integrity": "sha512-07n2akf2nqWvtJeMy3A+7oSGMuu5F673AovXVwY0aGAux1afzGCiqIFlYW3EP0CujvDJAEFSQi/Tetfh+95JNg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-2.2.0.tgz", + "integrity": "sha512-3T140AG11OjJrtKlY4pMZ5BzbGRDjNs2co5hJ6uYJG1bVWlhcaFGqkaZ5lCgKflaNHD7UHBHU9Ec5f69jTdd6w==", "dependencies": { "fs-extra": "^10.1.0", "tslib": "^2.4.0" @@ -2467,9 +2470,9 @@ } }, "node_modules/@docusaurus/types": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.1.0.tgz", - "integrity": "sha512-BS1ebpJZnGG6esKqsjtEC9U9qSaPylPwlO7cQ1GaIE7J/kMZI3FITnNn0otXXu7c7ZTqhb6+8dOrG6fZn6fqzQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.2.0.tgz", + "integrity": "sha512-b6xxyoexfbRNRI8gjblzVOnLr4peCJhGbYGPpJ3LFqpi5nsFfoK4mmDLvWdeah0B7gmJeXabN7nQkFoqeSdmOw==", "dependencies": { "@types/history": "^4.7.11", "@types/react": "*", @@ -2486,11 +2489,11 @@ } }, "node_modules/@docusaurus/utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.1.0.tgz", - "integrity": "sha512-fPvrfmAuC54n8MjZuG4IysaMdmvN5A/qr7iFLbSGSyDrsbP4fnui6KdZZIa/YOLIPLec8vjZ8RIITJqF18mx4A==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.2.0.tgz", + "integrity": "sha512-oNk3cjvx7Tt1Lgh/aeZAmFpGV2pDr5nHKrBVx6hTkzGhrnMuQqLt6UPlQjdYQ3QHXwyF/ZtZMO1D5Pfi0lu7SA==", "dependencies": { - "@docusaurus/logger": "2.1.0", + "@docusaurus/logger": "2.2.0", "@svgr/webpack": "^6.2.1", "file-loader": "^6.2.0", "fs-extra": "^10.1.0", @@ -2519,9 +2522,9 @@ } }, "node_modules/@docusaurus/utils-common": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.1.0.tgz", - "integrity": "sha512-F2vgmt4yRFgRQR2vyEFGTWeyAdmgKbtmu3sjHObF0tjjx/pN0Iw/c6eCopaH34E6tc9nO0nvp01pwW+/86d1fg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.2.0.tgz", + "integrity": "sha512-qebnerHp+cyovdUseDQyYFvMW1n1nv61zGe5JJfoNQUnjKuApch3IVsz+/lZ9a38pId8kqehC1Ao2bW/s0ntDA==", "dependencies": { "tslib": "^2.4.0" }, @@ -2538,12 +2541,12 @@ } }, "node_modules/@docusaurus/utils-validation": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.1.0.tgz", - "integrity": "sha512-AMJzWYKL3b7FLltKtDXNLO9Y649V2BXvrnRdnW2AA+PpBnYV78zKLSCz135cuWwRj1ajNtP4onbXdlnyvCijGQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.2.0.tgz", + "integrity": "sha512-I1hcsG3yoCkasOL5qQAYAfnmVoLei7apugT6m4crQjmDGxq+UkiRrq55UqmDDyZlac/6ax/JC0p+usZ6W4nVyg==", "dependencies": { - "@docusaurus/logger": "2.1.0", - "@docusaurus/utils": "2.1.0", + "@docusaurus/logger": "2.2.0", + "@docusaurus/utils": "2.2.0", "joi": "^17.6.0", "js-yaml": "^4.1.0", "tslib": "^2.4.0" @@ -2565,6 +2568,14 @@ "@hapi/hoek": "^9.0.0" } }, + "node_modules/@heroicons/react": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@heroicons/react/-/react-2.0.12.tgz", + "integrity": "sha512-FZxKh3i9aKIDxyALTgIpSF2t6V6/eZfF5mRu41QlwkX3Oxzecdm1u6dpft6PQGxIBwO7TKYWaMAYYL8mp/EaOg==", + "peerDependencies": { + "react": ">= 16" + } + }, "node_modules/@jest/schemas": { "version": "29.0.0", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.0.0.tgz", @@ -3827,9 +3838,9 @@ } }, "node_modules/autoprefixer": { - "version": "10.4.12", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.12.tgz", - "integrity": "sha512-WrCGV9/b97Pa+jtwf5UGaRjgQIg7OK3D06GnoYoZNcG1Xb8Gt3EfuKjlhh9i/VtT16g6PYjZ69jdJ2g8FxSC4Q==", + "version": "10.4.13", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz", + "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==", "funding": [ { "type": "opencollective", @@ -3842,7 +3853,7 @@ ], "dependencies": { "browserslist": "^4.21.4", - "caniuse-lite": "^1.0.30001407", + "caniuse-lite": "^1.0.30001426", "fraction.js": "^4.2.0", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", @@ -4262,9 +4273,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001414", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001414.tgz", - "integrity": "sha512-t55jfSaWjCdocnFdKQoO+d2ct9C59UZg4dY3OnUlSZ447r8pUtIKdp0hpAzrGFultmTC+Us+KpKi4GZl/LXlFg==", + "version": "1.0.30001426", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001426.tgz", + "integrity": "sha512-n7cosrHLl8AWt0wwZw/PJZgUg3lV0gk9LMI7ikGJwhyhgsd2Nb65vKvmSexCqq/J7rbH3mFG6yZZiPR5dLPW5A==", "funding": [ { "type": "opencollective", @@ -5083,12 +5094,12 @@ } }, "node_modules/cssnano-preset-advanced": { - "version": "5.3.8", - "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.8.tgz", - "integrity": "sha512-xUlLLnEB1LjpEik+zgRNlk8Y/koBPPtONZjp7JKbXigeAmCrFvq9H0pXW5jJV45bQWAlmJ0sKy+IMr0XxLYQZg==", + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.9.tgz", + "integrity": "sha512-njnh4pp1xCsibJcEHnWZb4EEzni0ePMqPuPNyuWT4Z+YeXmsgqNuTPIljXFEXhxGsWs9183JkXgHxc1TcsahIg==", "dependencies": { - "autoprefixer": "^10.3.7", - "cssnano-preset-default": "^5.2.12", + "autoprefixer": "^10.4.12", + "cssnano-preset-default": "^5.2.13", "postcss-discard-unused": "^5.1.0", "postcss-merge-idents": "^5.1.1", "postcss-reduce-idents": "^5.2.0", @@ -5102,24 +5113,24 @@ } }, "node_modules/cssnano-preset-default": { - "version": "5.2.12", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.12.tgz", - "integrity": "sha512-OyCBTZi+PXgylz9HAA5kHyoYhfGcYdwFmyaJzWnzxuGRtnMw/kR6ilW9XzlzlRAtB6PLT/r+prYgkef7hngFew==", + "version": "5.2.13", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.13.tgz", + "integrity": "sha512-PX7sQ4Pb+UtOWuz8A1d+Rbi+WimBIxJTRyBdgGp1J75VU0r/HFQeLnMYgHiCAp6AR4rqrc7Y4R+1Rjk3KJz6DQ==", "dependencies": { - "css-declaration-sorter": "^6.3.0", + "css-declaration-sorter": "^6.3.1", "cssnano-utils": "^3.1.0", "postcss-calc": "^8.2.3", "postcss-colormin": "^5.3.0", - "postcss-convert-values": "^5.1.2", + "postcss-convert-values": "^5.1.3", "postcss-discard-comments": "^5.1.2", "postcss-discard-duplicates": "^5.1.0", "postcss-discard-empty": "^5.1.1", "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.6", - "postcss-merge-rules": "^5.1.2", + "postcss-merge-longhand": "^5.1.7", + "postcss-merge-rules": "^5.1.3", "postcss-minify-font-values": "^5.1.0", "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.3", + "postcss-minify-params": "^5.1.4", "postcss-minify-selectors": "^5.2.1", "postcss-normalize-charset": "^5.1.0", "postcss-normalize-display-values": "^5.1.0", @@ -5127,11 +5138,11 @@ "postcss-normalize-repeat-style": "^5.1.1", "postcss-normalize-string": "^5.1.0", "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.0", + "postcss-normalize-unicode": "^5.1.1", "postcss-normalize-url": "^5.1.0", "postcss-normalize-whitespace": "^5.1.1", "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.0", + "postcss-reduce-initial": "^5.1.1", "postcss-reduce-transforms": "^5.1.0", "postcss-svgo": "^5.1.0", "postcss-unique-selectors": "^5.1.1" @@ -5376,6 +5387,18 @@ "node": ">=6" } }, + "node_modules/docusaurus-plugin-sass": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/docusaurus-plugin-sass/-/docusaurus-plugin-sass-0.2.2.tgz", + "integrity": "sha512-ZZBpj3PrhGpYE2kAnkZB9NRwy/CDi4rGun1oec6PYR8YvGzqxYGtXvLgHi6FFbu8/N483klk8udqyYMh6Ted+A==", + "dependencies": { + "sass-loader": "^10.1.1" + }, + "peerDependencies": { + "@docusaurus/core": "^2.0.0-beta", + "sass": "^1.30.0" + } + }, "node_modules/dom-converter": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", @@ -6281,9 +6304,9 @@ } }, "node_modules/github-slugger": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.4.0.tgz", - "integrity": "sha512-w0dzqw/nt51xMVmlaV1+JRzN+oCa1KfcgGEWhxUG16wbdA+Xnt/yoFO8Z8x/V82ZcZ0wy6ln9QDup5avbhiDhQ==" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", + "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==" }, "node_modules/glob": { "version": "7.2.3", @@ -6932,6 +6955,11 @@ "url": "https://opencollective.com/immer" } }, + "node_modules/immutable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", + "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==" + }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -8544,11 +8572,11 @@ } }, "node_modules/postcss-convert-values": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.2.tgz", - "integrity": "sha512-c6Hzc4GAv95B7suy4udszX9Zy4ETyMCgFPUDtWjdFTKH1SE9eFY/jEpHSwTH1QPuwxHpWslhckUQWbNRM4ho5g==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", "dependencies": { - "browserslist": "^4.20.3", + "browserslist": "^4.21.4", "postcss-value-parser": "^4.2.0" }, "engines": { @@ -8653,12 +8681,12 @@ } }, "node_modules/postcss-merge-longhand": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.6.tgz", - "integrity": "sha512-6C/UGF/3T5OE2CEbOuX7iNO63dnvqhGZeUnKkDeifebY0XqkkvrctYSZurpNE902LDf2yKwwPFgotnfSoPhQiw==", + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", "dependencies": { "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.0" + "stylehacks": "^5.1.1" }, "engines": { "node": "^10 || ^12 || >=14.0" @@ -8668,11 +8696,11 @@ } }, "node_modules/postcss-merge-rules": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.2.tgz", - "integrity": "sha512-zKMUlnw+zYCWoPN6yhPjtcEdlJaMUZ0WyVcxTAmw3lkkN/NDMRkOkiuctQEoWAOvH7twaxUUdvBWl0d4+hifRQ==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.3.tgz", + "integrity": "sha512-LbLd7uFC00vpOuMvyZop8+vvhnfRGpp2S+IMQKeuOZZapPRY4SMq5ErjQeHbHsjCUgJkRNrlU+LmxsKIqPKQlA==", "dependencies": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "caniuse-api": "^3.0.0", "cssnano-utils": "^3.1.0", "postcss-selector-parser": "^6.0.5" @@ -8715,11 +8743,11 @@ } }, "node_modules/postcss-minify-params": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.3.tgz", - "integrity": "sha512-bkzpWcjykkqIujNL+EVEPOlLYi/eZ050oImVtHU7b4lFS82jPnsCb44gvC6pxaNt38Els3jWYDHTjHKf0koTgg==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", "dependencies": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "cssnano-utils": "^3.1.0", "postcss-value-parser": "^4.2.0" }, @@ -8881,11 +8909,11 @@ } }, "node_modules/postcss-normalize-unicode": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.0.tgz", - "integrity": "sha512-J6M3MizAAZ2dOdSjy2caayJLQT8E8K9XjLce8AUQMwOrCvjCHv24aLC/Lps1R1ylOfol5VIDMaM/Lo9NGlk1SQ==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", "dependencies": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "postcss-value-parser": "^4.2.0" }, "engines": { @@ -8954,11 +8982,11 @@ } }, "node_modules/postcss-reduce-initial": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.0.tgz", - "integrity": "sha512-5OgTUviz0aeH6MtBjHfbr57tml13PuedK/Ecg8szzd4XRMbYxH4572JFG067z+FqBIf6Zp/d+0581glkvvWMFw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.1.tgz", + "integrity": "sha512-//jeDqWcHPuXGZLoolFrUXBDyuEGbr9S2rMo19bkTIjBQ4PqkaO+oI8wua5BOUxpfi97i3PCoInsiFIEBfkm9w==", "dependencies": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "caniuse-api": "^3.0.0" }, "engines": { @@ -10206,6 +10234,75 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "node_modules/sass": { + "version": "1.55.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.55.0.tgz", + "integrity": "sha512-Pk+PMy7OGLs9WaxZGJMn7S96dvlyVBwwtToX895WmCpAOr5YiJYEUJfiJidMuKb613z2xNWcXCHEuOvjZbqC6A==", + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/sass-loader": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-10.3.1.tgz", + "integrity": "sha512-y2aBdtYkbqorVavkC3fcJIUDGIegzDWPn3/LAFhsf3G+MzPKTJx37sROf5pXtUeggSVbNbmfj8TgRaSLMelXRA==", + "dependencies": { + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "neo-async": "^2.6.2", + "schema-utils": "^3.0.0", + "semver": "^7.3.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", + "sass": "^1.3.0", + "webpack": "^4.36.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/sass-loader/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, "node_modules/sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", @@ -10844,11 +10941,11 @@ } }, "node_modules/stylehacks": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.0.tgz", - "integrity": "sha512-SzLmvHQTrIWfSgljkQCw2++C9+Ne91d/6Sp92I8c5uHTcy/PgeHamwITIbBW9wnFTY/3ZfSXR9HIL6Ikqmcu6Q==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", + "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", "dependencies": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "postcss-selector-parser": "^6.0.4" }, "engines": { @@ -11243,9 +11340,9 @@ } }, "node_modules/ua-parser-js": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.31.tgz", - "integrity": "sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ==", + "version": "0.7.32", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.32.tgz", + "integrity": "sha512-f9BESNVhzlhEFf2CHMSj40NWOjYPl1YKYbrvIr/hFTDEmLq7SRbWvm7FcdcpCYT95zrOhC7gZSxjdnnTpBcwVw==", "funding": [ { "type": "opencollective", @@ -12438,25 +12535,25 @@ }, "dependencies": { "@algolia/autocomplete-core": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.7.1.tgz", - "integrity": "sha512-eiZw+fxMzNQn01S8dA/hcCpoWCOCwcIIEUtHHdzN5TGB3IpzLbuhqFeTfh2OUhhgkE8Uo17+wH+QJ/wYyQmmzg==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.7.2.tgz", + "integrity": "sha512-eclwUDC6qfApNnEfu1uWcL/rudQsn59tjEoUYZYE2JSXZrHLRjBUGMxiCoknobU2Pva8ejb0eRxpIYDtVVqdsw==", "requires": { - "@algolia/autocomplete-shared": "1.7.1" + "@algolia/autocomplete-shared": "1.7.2" } }, "@algolia/autocomplete-preset-algolia": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.7.1.tgz", - "integrity": "sha512-pJwmIxeJCymU1M6cGujnaIYcY3QPOVYZOXhFkWVM7IxKzy272BwCvMFMyc5NpG/QmiObBxjo7myd060OeTNJXg==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.7.2.tgz", + "integrity": "sha512-+RYEG6B0QiGGfRb2G3MtPfyrl0dALF3cQNTWBzBX6p5o01vCCGTTinAm2UKG3tfc2CnOMAtnPLkzNZyJUpnVJw==", "requires": { - "@algolia/autocomplete-shared": "1.7.1" + "@algolia/autocomplete-shared": "1.7.2" } }, "@algolia/autocomplete-shared": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.7.1.tgz", - "integrity": "sha512-eTmGVqY3GeyBTT8IWiB2K5EuURAqhnumfktAEoHxfDY2o7vg2rSnO16ZtIG0fMgt3py28Vwgq42/bVEuaQV7pg==" + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.7.2.tgz", + "integrity": "sha512-QCckjiC7xXHIUaIL3ektBtjJ0w7tTA3iqKcAE/Hjn1lZ5omp7i3Y4e09rAr9ZybqirL7AbxCLLq0Ra5DDPKeug==" }, "@algolia/cache-browser-local-storage": { "version": "4.14.2", @@ -13795,25 +13892,25 @@ "optional": true }, "@docsearch/css": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.2.1.tgz", - "integrity": "sha512-gaP6TxxwQC+K8D6TRx5WULUWKrcbzECOPA2KCVMuI+6C7dNiGUk5yXXzVhc5sld79XKYLnO9DRTI4mjXDYkh+g==" + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.3.0.tgz", + "integrity": "sha512-rODCdDtGyudLj+Va8b6w6Y85KE85bXRsps/R4Yjwt5vueXKXZQKYw0aA9knxLBT6a/bI/GMrAcmCR75KYOM6hg==" }, "@docsearch/react": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.2.1.tgz", - "integrity": "sha512-EzTQ/y82s14IQC5XVestiK/kFFMe2aagoYFuTAIfIb/e+4FU7kSMKonRtLwsCiLQHmjvNQq+HO+33giJ5YVtaQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.3.0.tgz", + "integrity": "sha512-fhS5adZkae2SSdMYEMVg6pxI5a/cE+tW16ki1V0/ur4Fdok3hBRkmN/H8VvlXnxzggkQIIRIVvYPn00JPjen3A==", "requires": { - "@algolia/autocomplete-core": "1.7.1", - "@algolia/autocomplete-preset-algolia": "1.7.1", - "@docsearch/css": "3.2.1", + "@algolia/autocomplete-core": "1.7.2", + "@algolia/autocomplete-preset-algolia": "1.7.2", + "@docsearch/css": "3.3.0", "algoliasearch": "^4.0.0" } }, "@docusaurus/core": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.1.0.tgz", - "integrity": "sha512-/ZJ6xmm+VB9Izbn0/s6h6289cbPy2k4iYFwWDhjiLsVqwa/Y0YBBcXvStfaHccudUC3OfP+26hMk7UCjc50J6Q==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.2.0.tgz", + "integrity": "sha512-Vd6XOluKQqzG12fEs9prJgDtyn6DPok9vmUWDR2E6/nV5Fl9SVkhEQOBxwObjk3kQh7OY7vguFaLh0jqdApWsA==", "requires": { "@babel/core": "^7.18.6", "@babel/generator": "^7.18.7", @@ -13825,13 +13922,13 @@ "@babel/runtime": "^7.18.6", "@babel/runtime-corejs3": "^7.18.6", "@babel/traverse": "^7.18.8", - "@docusaurus/cssnano-preset": "2.1.0", - "@docusaurus/logger": "2.1.0", - "@docusaurus/mdx-loader": "2.1.0", + "@docusaurus/cssnano-preset": "2.2.0", + "@docusaurus/logger": "2.2.0", + "@docusaurus/mdx-loader": "2.2.0", "@docusaurus/react-loadable": "5.5.2", - "@docusaurus/utils": "2.1.0", - "@docusaurus/utils-common": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", + "@docusaurus/utils": "2.2.0", + "@docusaurus/utils-common": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", "@slorber/static-site-generator-webpack-plugin": "^4.0.7", "@svgr/webpack": "^6.2.1", "autoprefixer": "^10.4.7", @@ -13889,9 +13986,9 @@ } }, "@docusaurus/cssnano-preset": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.1.0.tgz", - "integrity": "sha512-pRLewcgGhOies6pzsUROfmPStDRdFw+FgV5sMtLr5+4Luv2rty5+b/eSIMMetqUsmg3A9r9bcxHk9bKAKvx3zQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.2.0.tgz", + "integrity": "sha512-mAAwCo4n66TMWBH1kXnHVZsakW9VAXJzTO4yZukuL3ro4F+JtkMwKfh42EG75K/J/YIFQG5I/Bzy0UH/hFxaTg==", "requires": { "cssnano-preset-advanced": "^5.3.8", "postcss": "^8.4.14", @@ -13900,23 +13997,23 @@ } }, "@docusaurus/logger": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-2.1.0.tgz", - "integrity": "sha512-uuJx2T6hDBg82joFeyobywPjSOIfeq05GfyKGHThVoXuXsu1KAzMDYcjoDxarb9CoHCI/Dor8R2MoL6zII8x1Q==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-2.2.0.tgz", + "integrity": "sha512-DF3j1cA5y2nNsu/vk8AG7xwpZu6f5MKkPPMaaIbgXLnWGfm6+wkOeW7kNrxnM95YOhKUkJUophX69nGUnLsm0A==", "requires": { "chalk": "^4.1.2", "tslib": "^2.4.0" } }, "@docusaurus/mdx-loader": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.1.0.tgz", - "integrity": "sha512-i97hi7hbQjsD3/8OSFhLy7dbKGH8ryjEzOfyhQIn2CFBYOY3ko0vMVEf3IY9nD3Ld7amYzsZ8153RPkcnXA+Lg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.2.0.tgz", + "integrity": "sha512-X2bzo3T0jW0VhUU+XdQofcEeozXOTmKQMvc8tUnWRdTnCvj4XEcBVdC3g+/jftceluiwSTNRAX4VBOJdNt18jA==", "requires": { "@babel/parser": "^7.18.8", "@babel/traverse": "^7.18.8", - "@docusaurus/logger": "2.1.0", - "@docusaurus/utils": "2.1.0", + "@docusaurus/logger": "2.2.0", + "@docusaurus/utils": "2.2.0", "@mdx-js/mdx": "^1.6.22", "escape-html": "^1.0.3", "file-loader": "^6.2.0", @@ -13933,12 +14030,12 @@ } }, "@docusaurus/module-type-aliases": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-2.1.0.tgz", - "integrity": "sha512-Z8WZaK5cis3xEtyfOT817u9xgGUauT0PuuVo85ysnFRX8n7qLN1lTPCkC+aCmFm/UcV8h/W5T4NtIsst94UntQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-2.2.0.tgz", + "integrity": "sha512-wDGW4IHKoOr9YuJgy7uYuKWrDrSpsUSDHLZnWQYM9fN7D5EpSmYHjFruUpKWVyxLpD/Wh0rW8hYZwdjJIQUQCQ==", "requires": { "@docusaurus/react-loadable": "5.5.2", - "@docusaurus/types": "2.1.0", + "@docusaurus/types": "2.2.0", "@types/history": "^4.7.11", "@types/react": "*", "@types/react-router-config": "*", @@ -13948,17 +14045,17 @@ } }, "@docusaurus/plugin-content-blog": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.1.0.tgz", - "integrity": "sha512-xEp6jlu92HMNUmyRBEeJ4mCW1s77aAEQO4Keez94cUY/Ap7G/r0Awa6xSLff7HL0Fjg8KK1bEbDy7q9voIavdg==", - "requires": { - "@docusaurus/core": "2.1.0", - "@docusaurus/logger": "2.1.0", - "@docusaurus/mdx-loader": "2.1.0", - "@docusaurus/types": "2.1.0", - "@docusaurus/utils": "2.1.0", - "@docusaurus/utils-common": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.2.0.tgz", + "integrity": "sha512-0mWBinEh0a5J2+8ZJXJXbrCk1tSTNf7Nm4tYAl5h2/xx+PvH/Bnu0V+7mMljYm/1QlDYALNIIaT/JcoZQFUN3w==", + "requires": { + "@docusaurus/core": "2.2.0", + "@docusaurus/logger": "2.2.0", + "@docusaurus/mdx-loader": "2.2.0", + "@docusaurus/types": "2.2.0", + "@docusaurus/utils": "2.2.0", + "@docusaurus/utils-common": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", "cheerio": "^1.0.0-rc.12", "feed": "^4.2.2", "fs-extra": "^10.1.0", @@ -13971,17 +14068,17 @@ } }, "@docusaurus/plugin-content-docs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.1.0.tgz", - "integrity": "sha512-Rup5pqXrXlKGIC4VgwvioIhGWF7E/NNSlxv+JAxRYpik8VKlWsk9ysrdHIlpX+KJUCO9irnY21kQh2814mlp/Q==", - "requires": { - "@docusaurus/core": "2.1.0", - "@docusaurus/logger": "2.1.0", - "@docusaurus/mdx-loader": "2.1.0", - "@docusaurus/module-type-aliases": "2.1.0", - "@docusaurus/types": "2.1.0", - "@docusaurus/utils": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.2.0.tgz", + "integrity": "sha512-BOazBR0XjzsHE+2K1wpNxz5QZmrJgmm3+0Re0EVPYFGW8qndCWGNtXW/0lGKhecVPML8yyFeAmnUCIs7xM2wPw==", + "requires": { + "@docusaurus/core": "2.2.0", + "@docusaurus/logger": "2.2.0", + "@docusaurus/mdx-loader": "2.2.0", + "@docusaurus/module-type-aliases": "2.2.0", + "@docusaurus/types": "2.2.0", + "@docusaurus/utils": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", "@types/react-router-config": "^5.0.6", "combine-promises": "^1.1.0", "fs-extra": "^10.1.0", @@ -13994,88 +14091,88 @@ } }, "@docusaurus/plugin-content-pages": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.1.0.tgz", - "integrity": "sha512-SwZdDZRlObHNKXTnFo7W2aF6U5ZqNVI55Nw2GCBryL7oKQSLeI0lsrMlMXdzn+fS7OuBTd3MJBO1T4Zpz0i/+g==", - "requires": { - "@docusaurus/core": "2.1.0", - "@docusaurus/mdx-loader": "2.1.0", - "@docusaurus/types": "2.1.0", - "@docusaurus/utils": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.2.0.tgz", + "integrity": "sha512-+OTK3FQHk5WMvdelz8v19PbEbx+CNT6VSpx7nVOvMNs5yJCKvmqBJBQ2ZSxROxhVDYn+CZOlmyrC56NSXzHf6g==", + "requires": { + "@docusaurus/core": "2.2.0", + "@docusaurus/mdx-loader": "2.2.0", + "@docusaurus/types": "2.2.0", + "@docusaurus/utils": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", "fs-extra": "^10.1.0", "tslib": "^2.4.0", "webpack": "^5.73.0" } }, "@docusaurus/plugin-debug": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.1.0.tgz", - "integrity": "sha512-8wsDq3OIfiy6440KLlp/qT5uk+WRHQXIXklNHEeZcar+Of0TZxCNe2FBpv+bzb/0qcdP45ia5i5WmR5OjN6DPw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.2.0.tgz", + "integrity": "sha512-p9vOep8+7OVl6r/NREEYxf4HMAjV8JMYJ7Bos5fCFO0Wyi9AZEo0sCTliRd7R8+dlJXZEgcngSdxAUo/Q+CJow==", "requires": { - "@docusaurus/core": "2.1.0", - "@docusaurus/types": "2.1.0", - "@docusaurus/utils": "2.1.0", + "@docusaurus/core": "2.2.0", + "@docusaurus/types": "2.2.0", + "@docusaurus/utils": "2.2.0", "fs-extra": "^10.1.0", "react-json-view": "^1.21.3", "tslib": "^2.4.0" } }, "@docusaurus/plugin-google-analytics": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.1.0.tgz", - "integrity": "sha512-4cgeqIly/wcFVbbWP03y1QJJBgH8W+Bv6AVbWnsXNOZa1yB3AO6hf3ZdeQH9x20v9T2pREogVgAH0rSoVnNsgg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.2.0.tgz", + "integrity": "sha512-+eZVVxVeEnV5nVQJdey9ZsfyEVMls6VyWTIj8SmX0k5EbqGvnIfET+J2pYEuKQnDIHxy+syRMoRM6AHXdHYGIg==", "requires": { - "@docusaurus/core": "2.1.0", - "@docusaurus/types": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", + "@docusaurus/core": "2.2.0", + "@docusaurus/types": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", "tslib": "^2.4.0" } }, "@docusaurus/plugin-google-gtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.1.0.tgz", - "integrity": "sha512-/3aDlv2dMoCeiX2e+DTGvvrdTA+v3cKQV3DbmfsF4ENhvc5nKV23nth04Z3Vq0Ci1ui6Sn80TkhGk/tiCMW2AA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.2.0.tgz", + "integrity": "sha512-6SOgczP/dYdkqUMGTRqgxAS1eTp6MnJDAQMy8VCF1QKbWZmlkx4agHDexihqmYyCujTYHqDAhm1hV26EET54NQ==", "requires": { - "@docusaurus/core": "2.1.0", - "@docusaurus/types": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", + "@docusaurus/core": "2.2.0", + "@docusaurus/types": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", "tslib": "^2.4.0" } }, "@docusaurus/plugin-sitemap": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.1.0.tgz", - "integrity": "sha512-2Y6Br8drlrZ/jN9MwMBl0aoi9GAjpfyfMBYpaQZXimbK+e9VjYnujXlvQ4SxtM60ASDgtHIAzfVFBkSR/MwRUw==", - "requires": { - "@docusaurus/core": "2.1.0", - "@docusaurus/logger": "2.1.0", - "@docusaurus/types": "2.1.0", - "@docusaurus/utils": "2.1.0", - "@docusaurus/utils-common": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.2.0.tgz", + "integrity": "sha512-0jAmyRDN/aI265CbWZNZuQpFqiZuo+5otk2MylU9iVrz/4J7gSc+ZJ9cy4EHrEsW7PV8s1w18hIEsmcA1YgkKg==", + "requires": { + "@docusaurus/core": "2.2.0", + "@docusaurus/logger": "2.2.0", + "@docusaurus/types": "2.2.0", + "@docusaurus/utils": "2.2.0", + "@docusaurus/utils-common": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", "fs-extra": "^10.1.0", "sitemap": "^7.1.1", "tslib": "^2.4.0" } }, "@docusaurus/preset-classic": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.1.0.tgz", - "integrity": "sha512-NQMnaq974K4BcSMXFSJBQ5itniw6RSyW+VT+6i90kGZzTwiuKZmsp0r9lC6BYAvvVMQUNJQwrETmlu7y2XKW7w==", - "requires": { - "@docusaurus/core": "2.1.0", - "@docusaurus/plugin-content-blog": "2.1.0", - "@docusaurus/plugin-content-docs": "2.1.0", - "@docusaurus/plugin-content-pages": "2.1.0", - "@docusaurus/plugin-debug": "2.1.0", - "@docusaurus/plugin-google-analytics": "2.1.0", - "@docusaurus/plugin-google-gtag": "2.1.0", - "@docusaurus/plugin-sitemap": "2.1.0", - "@docusaurus/theme-classic": "2.1.0", - "@docusaurus/theme-common": "2.1.0", - "@docusaurus/theme-search-algolia": "2.1.0", - "@docusaurus/types": "2.1.0" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.2.0.tgz", + "integrity": "sha512-yKIWPGNx7BT8v2wjFIWvYrS+nvN04W+UameSFf8lEiJk6pss0kL6SG2MRvyULiI3BDxH+tj6qe02ncpSPGwumg==", + "requires": { + "@docusaurus/core": "2.2.0", + "@docusaurus/plugin-content-blog": "2.2.0", + "@docusaurus/plugin-content-docs": "2.2.0", + "@docusaurus/plugin-content-pages": "2.2.0", + "@docusaurus/plugin-debug": "2.2.0", + "@docusaurus/plugin-google-analytics": "2.2.0", + "@docusaurus/plugin-google-gtag": "2.2.0", + "@docusaurus/plugin-sitemap": "2.2.0", + "@docusaurus/theme-classic": "2.2.0", + "@docusaurus/theme-common": "2.2.0", + "@docusaurus/theme-search-algolia": "2.2.0", + "@docusaurus/types": "2.2.0" } }, "@docusaurus/react-loadable": { @@ -14088,22 +14185,22 @@ } }, "@docusaurus/theme-classic": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.1.0.tgz", - "integrity": "sha512-xn8ZfNMsf7gaSy9+ClFnUu71o7oKgMo5noYSS1hy3svNifRTkrBp6+MReLDsmIaj3mLf2e7+JCBYKBFbaGzQng==", - "requires": { - "@docusaurus/core": "2.1.0", - "@docusaurus/mdx-loader": "2.1.0", - "@docusaurus/module-type-aliases": "2.1.0", - "@docusaurus/plugin-content-blog": "2.1.0", - "@docusaurus/plugin-content-docs": "2.1.0", - "@docusaurus/plugin-content-pages": "2.1.0", - "@docusaurus/theme-common": "2.1.0", - "@docusaurus/theme-translations": "2.1.0", - "@docusaurus/types": "2.1.0", - "@docusaurus/utils": "2.1.0", - "@docusaurus/utils-common": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.2.0.tgz", + "integrity": "sha512-kjbg/qJPwZ6H1CU/i9d4l/LcFgnuzeiGgMQlt6yPqKo0SOJIBMPuz7Rnu3r/WWbZFPi//o8acclacOzmXdUUEg==", + "requires": { + "@docusaurus/core": "2.2.0", + "@docusaurus/mdx-loader": "2.2.0", + "@docusaurus/module-type-aliases": "2.2.0", + "@docusaurus/plugin-content-blog": "2.2.0", + "@docusaurus/plugin-content-docs": "2.2.0", + "@docusaurus/plugin-content-pages": "2.2.0", + "@docusaurus/theme-common": "2.2.0", + "@docusaurus/theme-translations": "2.2.0", + "@docusaurus/types": "2.2.0", + "@docusaurus/utils": "2.2.0", + "@docusaurus/utils-common": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", "@mdx-js/react": "^1.6.22", "clsx": "^1.2.1", "copy-text-to-clipboard": "^3.0.1", @@ -14120,16 +14217,16 @@ } }, "@docusaurus/theme-common": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.1.0.tgz", - "integrity": "sha512-vT1otpVPbKux90YpZUnvknsn5zvpLf+AW1W0EDcpE9up4cDrPqfsh0QoxGHFJnobE2/qftsBFC19BneN4BH8Ag==", - "requires": { - "@docusaurus/mdx-loader": "2.1.0", - "@docusaurus/module-type-aliases": "2.1.0", - "@docusaurus/plugin-content-blog": "2.1.0", - "@docusaurus/plugin-content-docs": "2.1.0", - "@docusaurus/plugin-content-pages": "2.1.0", - "@docusaurus/utils": "2.1.0", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.2.0.tgz", + "integrity": "sha512-R8BnDjYoN90DCL75gP7qYQfSjyitXuP9TdzgsKDmSFPNyrdE3twtPNa2dIN+h+p/pr+PagfxwWbd6dn722A1Dw==", + "requires": { + "@docusaurus/mdx-loader": "2.2.0", + "@docusaurus/module-type-aliases": "2.2.0", + "@docusaurus/plugin-content-blog": "2.2.0", + "@docusaurus/plugin-content-docs": "2.2.0", + "@docusaurus/plugin-content-pages": "2.2.0", + "@docusaurus/utils": "2.2.0", "@types/history": "^4.7.11", "@types/react": "*", "@types/react-router-config": "*", @@ -14141,18 +14238,18 @@ } }, "@docusaurus/theme-search-algolia": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.1.0.tgz", - "integrity": "sha512-rNBvi35VvENhucslEeVPOtbAzBdZY/9j55gdsweGV5bYoAXy4mHB6zTGjealcB4pJ6lJY4a5g75fXXMOlUqPfg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.2.0.tgz", + "integrity": "sha512-2h38B0tqlxgR2FZ9LpAkGrpDWVdXZ7vltfmTdX+4RsDs3A7khiNsmZB+x/x6sA4+G2V2CvrsPMlsYBy5X+cY1w==", "requires": { "@docsearch/react": "^3.1.1", - "@docusaurus/core": "2.1.0", - "@docusaurus/logger": "2.1.0", - "@docusaurus/plugin-content-docs": "2.1.0", - "@docusaurus/theme-common": "2.1.0", - "@docusaurus/theme-translations": "2.1.0", - "@docusaurus/utils": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", + "@docusaurus/core": "2.2.0", + "@docusaurus/logger": "2.2.0", + "@docusaurus/plugin-content-docs": "2.2.0", + "@docusaurus/theme-common": "2.2.0", + "@docusaurus/theme-translations": "2.2.0", + "@docusaurus/utils": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", "algoliasearch": "^4.13.1", "algoliasearch-helper": "^3.10.0", "clsx": "^1.2.1", @@ -14164,18 +14261,18 @@ } }, "@docusaurus/theme-translations": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-2.1.0.tgz", - "integrity": "sha512-07n2akf2nqWvtJeMy3A+7oSGMuu5F673AovXVwY0aGAux1afzGCiqIFlYW3EP0CujvDJAEFSQi/Tetfh+95JNg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-2.2.0.tgz", + "integrity": "sha512-3T140AG11OjJrtKlY4pMZ5BzbGRDjNs2co5hJ6uYJG1bVWlhcaFGqkaZ5lCgKflaNHD7UHBHU9Ec5f69jTdd6w==", "requires": { "fs-extra": "^10.1.0", "tslib": "^2.4.0" } }, "@docusaurus/types": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.1.0.tgz", - "integrity": "sha512-BS1ebpJZnGG6esKqsjtEC9U9qSaPylPwlO7cQ1GaIE7J/kMZI3FITnNn0otXXu7c7ZTqhb6+8dOrG6fZn6fqzQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.2.0.tgz", + "integrity": "sha512-b6xxyoexfbRNRI8gjblzVOnLr4peCJhGbYGPpJ3LFqpi5nsFfoK4mmDLvWdeah0B7gmJeXabN7nQkFoqeSdmOw==", "requires": { "@types/history": "^4.7.11", "@types/react": "*", @@ -14188,11 +14285,11 @@ } }, "@docusaurus/utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.1.0.tgz", - "integrity": "sha512-fPvrfmAuC54n8MjZuG4IysaMdmvN5A/qr7iFLbSGSyDrsbP4fnui6KdZZIa/YOLIPLec8vjZ8RIITJqF18mx4A==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.2.0.tgz", + "integrity": "sha512-oNk3cjvx7Tt1Lgh/aeZAmFpGV2pDr5nHKrBVx6hTkzGhrnMuQqLt6UPlQjdYQ3QHXwyF/ZtZMO1D5Pfi0lu7SA==", "requires": { - "@docusaurus/logger": "2.1.0", + "@docusaurus/logger": "2.2.0", "@svgr/webpack": "^6.2.1", "file-loader": "^6.2.0", "fs-extra": "^10.1.0", @@ -14210,20 +14307,20 @@ } }, "@docusaurus/utils-common": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.1.0.tgz", - "integrity": "sha512-F2vgmt4yRFgRQR2vyEFGTWeyAdmgKbtmu3sjHObF0tjjx/pN0Iw/c6eCopaH34E6tc9nO0nvp01pwW+/86d1fg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.2.0.tgz", + "integrity": "sha512-qebnerHp+cyovdUseDQyYFvMW1n1nv61zGe5JJfoNQUnjKuApch3IVsz+/lZ9a38pId8kqehC1Ao2bW/s0ntDA==", "requires": { "tslib": "^2.4.0" } }, "@docusaurus/utils-validation": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.1.0.tgz", - "integrity": "sha512-AMJzWYKL3b7FLltKtDXNLO9Y649V2BXvrnRdnW2AA+PpBnYV78zKLSCz135cuWwRj1ajNtP4onbXdlnyvCijGQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.2.0.tgz", + "integrity": "sha512-I1hcsG3yoCkasOL5qQAYAfnmVoLei7apugT6m4crQjmDGxq+UkiRrq55UqmDDyZlac/6ax/JC0p+usZ6W4nVyg==", "requires": { - "@docusaurus/logger": "2.1.0", - "@docusaurus/utils": "2.1.0", + "@docusaurus/logger": "2.2.0", + "@docusaurus/utils": "2.2.0", "joi": "^17.6.0", "js-yaml": "^4.1.0", "tslib": "^2.4.0" @@ -14242,6 +14339,12 @@ "@hapi/hoek": "^9.0.0" } }, + "@heroicons/react": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@heroicons/react/-/react-2.0.12.tgz", + "integrity": "sha512-FZxKh3i9aKIDxyALTgIpSF2t6V6/eZfF5mRu41QlwkX3Oxzecdm1u6dpft6PQGxIBwO7TKYWaMAYYL8mp/EaOg==", + "requires": {} + }, "@jest/schemas": { "version": "29.0.0", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.0.0.tgz", @@ -15244,12 +15347,12 @@ "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" }, "autoprefixer": { - "version": "10.4.12", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.12.tgz", - "integrity": "sha512-WrCGV9/b97Pa+jtwf5UGaRjgQIg7OK3D06GnoYoZNcG1Xb8Gt3EfuKjlhh9i/VtT16g6PYjZ69jdJ2g8FxSC4Q==", + "version": "10.4.13", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz", + "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==", "requires": { "browserslist": "^4.21.4", - "caniuse-lite": "^1.0.30001407", + "caniuse-lite": "^1.0.30001426", "fraction.js": "^4.2.0", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", @@ -15565,9 +15668,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001414", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001414.tgz", - "integrity": "sha512-t55jfSaWjCdocnFdKQoO+d2ct9C59UZg4dY3OnUlSZ447r8pUtIKdp0hpAzrGFultmTC+Us+KpKi4GZl/LXlFg==" + "version": "1.0.30001426", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001426.tgz", + "integrity": "sha512-n7cosrHLl8AWt0wwZw/PJZgUg3lV0gk9LMI7ikGJwhyhgsd2Nb65vKvmSexCqq/J7rbH3mFG6yZZiPR5dLPW5A==" }, "ccount": { "version": "1.1.0", @@ -16116,12 +16219,12 @@ } }, "cssnano-preset-advanced": { - "version": "5.3.8", - "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.8.tgz", - "integrity": "sha512-xUlLLnEB1LjpEik+zgRNlk8Y/koBPPtONZjp7JKbXigeAmCrFvq9H0pXW5jJV45bQWAlmJ0sKy+IMr0XxLYQZg==", + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.9.tgz", + "integrity": "sha512-njnh4pp1xCsibJcEHnWZb4EEzni0ePMqPuPNyuWT4Z+YeXmsgqNuTPIljXFEXhxGsWs9183JkXgHxc1TcsahIg==", "requires": { - "autoprefixer": "^10.3.7", - "cssnano-preset-default": "^5.2.12", + "autoprefixer": "^10.4.12", + "cssnano-preset-default": "^5.2.13", "postcss-discard-unused": "^5.1.0", "postcss-merge-idents": "^5.1.1", "postcss-reduce-idents": "^5.2.0", @@ -16129,24 +16232,24 @@ } }, "cssnano-preset-default": { - "version": "5.2.12", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.12.tgz", - "integrity": "sha512-OyCBTZi+PXgylz9HAA5kHyoYhfGcYdwFmyaJzWnzxuGRtnMw/kR6ilW9XzlzlRAtB6PLT/r+prYgkef7hngFew==", + "version": "5.2.13", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.13.tgz", + "integrity": "sha512-PX7sQ4Pb+UtOWuz8A1d+Rbi+WimBIxJTRyBdgGp1J75VU0r/HFQeLnMYgHiCAp6AR4rqrc7Y4R+1Rjk3KJz6DQ==", "requires": { - "css-declaration-sorter": "^6.3.0", + "css-declaration-sorter": "^6.3.1", "cssnano-utils": "^3.1.0", "postcss-calc": "^8.2.3", "postcss-colormin": "^5.3.0", - "postcss-convert-values": "^5.1.2", + "postcss-convert-values": "^5.1.3", "postcss-discard-comments": "^5.1.2", "postcss-discard-duplicates": "^5.1.0", "postcss-discard-empty": "^5.1.1", "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.6", - "postcss-merge-rules": "^5.1.2", + "postcss-merge-longhand": "^5.1.7", + "postcss-merge-rules": "^5.1.3", "postcss-minify-font-values": "^5.1.0", "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.3", + "postcss-minify-params": "^5.1.4", "postcss-minify-selectors": "^5.2.1", "postcss-normalize-charset": "^5.1.0", "postcss-normalize-display-values": "^5.1.0", @@ -16154,11 +16257,11 @@ "postcss-normalize-repeat-style": "^5.1.1", "postcss-normalize-string": "^5.1.0", "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.0", + "postcss-normalize-unicode": "^5.1.1", "postcss-normalize-url": "^5.1.0", "postcss-normalize-whitespace": "^5.1.1", "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.0", + "postcss-reduce-initial": "^5.1.1", "postcss-reduce-transforms": "^5.1.0", "postcss-svgo": "^5.1.0", "postcss-unique-selectors": "^5.1.1" @@ -16328,6 +16431,14 @@ "@leichtgewicht/ip-codec": "^2.0.1" } }, + "docusaurus-plugin-sass": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/docusaurus-plugin-sass/-/docusaurus-plugin-sass-0.2.2.tgz", + "integrity": "sha512-ZZBpj3PrhGpYE2kAnkZB9NRwy/CDi4rGun1oec6PYR8YvGzqxYGtXvLgHi6FFbu8/N483klk8udqyYMh6Ted+A==", + "requires": { + "sass-loader": "^10.1.1" + } + }, "dom-converter": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", @@ -16990,9 +17101,9 @@ } }, "github-slugger": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.4.0.tgz", - "integrity": "sha512-w0dzqw/nt51xMVmlaV1+JRzN+oCa1KfcgGEWhxUG16wbdA+Xnt/yoFO8Z8x/V82ZcZ0wy6ln9QDup5avbhiDhQ==" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", + "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==" }, "glob": { "version": "7.2.3", @@ -17476,6 +17587,11 @@ "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.15.tgz", "integrity": "sha512-2eB/sswms9AEUSkOm4SbV5Y7Vmt/bKRwByd52jfLkW4OLYeaTP3EEiJ9agqU0O/tq6Dk62Zfj+TJSqfm1rLVGQ==" }, + "immutable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", + "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==" + }, "import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -18610,11 +18726,11 @@ } }, "postcss-convert-values": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.2.tgz", - "integrity": "sha512-c6Hzc4GAv95B7suy4udszX9Zy4ETyMCgFPUDtWjdFTKH1SE9eFY/jEpHSwTH1QPuwxHpWslhckUQWbNRM4ho5g==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", "requires": { - "browserslist": "^4.20.3", + "browserslist": "^4.21.4", "postcss-value-parser": "^4.2.0" } }, @@ -18670,20 +18786,20 @@ } }, "postcss-merge-longhand": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.6.tgz", - "integrity": "sha512-6C/UGF/3T5OE2CEbOuX7iNO63dnvqhGZeUnKkDeifebY0XqkkvrctYSZurpNE902LDf2yKwwPFgotnfSoPhQiw==", + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", "requires": { "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.0" + "stylehacks": "^5.1.1" } }, "postcss-merge-rules": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.2.tgz", - "integrity": "sha512-zKMUlnw+zYCWoPN6yhPjtcEdlJaMUZ0WyVcxTAmw3lkkN/NDMRkOkiuctQEoWAOvH7twaxUUdvBWl0d4+hifRQ==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.3.tgz", + "integrity": "sha512-LbLd7uFC00vpOuMvyZop8+vvhnfRGpp2S+IMQKeuOZZapPRY4SMq5ErjQeHbHsjCUgJkRNrlU+LmxsKIqPKQlA==", "requires": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "caniuse-api": "^3.0.0", "cssnano-utils": "^3.1.0", "postcss-selector-parser": "^6.0.5" @@ -18708,11 +18824,11 @@ } }, "postcss-minify-params": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.3.tgz", - "integrity": "sha512-bkzpWcjykkqIujNL+EVEPOlLYi/eZ050oImVtHU7b4lFS82jPnsCb44gvC6pxaNt38Els3jWYDHTjHKf0koTgg==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", "requires": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "cssnano-utils": "^3.1.0", "postcss-value-parser": "^4.2.0" } @@ -18804,11 +18920,11 @@ } }, "postcss-normalize-unicode": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.0.tgz", - "integrity": "sha512-J6M3MizAAZ2dOdSjy2caayJLQT8E8K9XjLce8AUQMwOrCvjCHv24aLC/Lps1R1ylOfol5VIDMaM/Lo9NGlk1SQ==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", "requires": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "postcss-value-parser": "^4.2.0" } }, @@ -18847,11 +18963,11 @@ } }, "postcss-reduce-initial": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.0.tgz", - "integrity": "sha512-5OgTUviz0aeH6MtBjHfbr57tml13PuedK/Ecg8szzd4XRMbYxH4572JFG067z+FqBIf6Zp/d+0581glkvvWMFw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.1.tgz", + "integrity": "sha512-//jeDqWcHPuXGZLoolFrUXBDyuEGbr9S2rMo19bkTIjBQ4PqkaO+oI8wua5BOUxpfi97i3PCoInsiFIEBfkm9w==", "requires": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "caniuse-api": "^3.0.0" } }, @@ -19774,6 +19890,40 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "sass": { + "version": "1.55.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.55.0.tgz", + "integrity": "sha512-Pk+PMy7OGLs9WaxZGJMn7S96dvlyVBwwtToX895WmCpAOr5YiJYEUJfiJidMuKb613z2xNWcXCHEuOvjZbqC6A==", + "requires": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + } + }, + "sass-loader": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-10.3.1.tgz", + "integrity": "sha512-y2aBdtYkbqorVavkC3fcJIUDGIegzDWPn3/LAFhsf3G+MzPKTJx37sROf5pXtUeggSVbNbmfj8TgRaSLMelXRA==", + "requires": { + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "neo-async": "^2.6.2", + "schema-utils": "^3.0.0", + "semver": "^7.3.2" + }, + "dependencies": { + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, "sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", @@ -20274,11 +20424,11 @@ } }, "stylehacks": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.0.tgz", - "integrity": "sha512-SzLmvHQTrIWfSgljkQCw2++C9+Ne91d/6Sp92I8c5uHTcy/PgeHamwITIbBW9wnFTY/3ZfSXR9HIL6Ikqmcu6Q==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", + "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", "requires": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "postcss-selector-parser": "^6.0.4" } }, @@ -20548,9 +20698,9 @@ "peer": true }, "ua-parser-js": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.31.tgz", - "integrity": "sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ==" + "version": "0.7.32", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.32.tgz", + "integrity": "sha512-f9BESNVhzlhEFf2CHMSj40NWOjYPl1YKYbrvIr/hFTDEmLq7SRbWvm7FcdcpCYT95zrOhC7gZSxjdnnTpBcwVw==" }, "unherit": { "version": "1.1.3", diff --git a/docs/package.json b/website/package.json similarity index 71% rename from docs/package.json rename to website/package.json index 9edb4083..349b4446 100644 --- a/docs/package.json +++ b/website/package.json @@ -1,5 +1,5 @@ { - "name": "craco-docs", + "name": "craco-website", "version": "0.0.0", "private": true, "scripts": { @@ -7,23 +7,26 @@ "start": "docusaurus start", "build": "docusaurus build", "swizzle": "docusaurus swizzle", - "deploy": "docusaurus deploy", + "deploy": "GIT_USER=dilanx docusaurus deploy", "clear": "docusaurus clear", "serve": "docusaurus serve", "write-translations": "docusaurus write-translations", "write-heading-ids": "docusaurus write-heading-ids" }, "dependencies": { - "@docusaurus/core": "2.1.0", - "@docusaurus/preset-classic": "2.1.0", + "@docusaurus/core": "^2.2.0", + "@docusaurus/preset-classic": "^2.2.0", + "@heroicons/react": "^2.0.12", "@mdx-js/react": "^1.6.22", "clsx": "^1.2.1", + "docusaurus-plugin-sass": "^0.2.2", "prism-react-renderer": "^1.3.5", "react": "^17.0.2", - "react-dom": "^17.0.2" + "react-dom": "^17.0.2", + "sass": "^1.55.0" }, "devDependencies": { - "@docusaurus/module-type-aliases": "2.1.0" + "@docusaurus/module-type-aliases": "^2.2.0" }, "browserslist": { "production": [ diff --git a/website/plugins/plugins.md b/website/plugins/plugins.md new file mode 100644 index 00000000..ced49bd3 --- /dev/null +++ b/website/plugins/plugins.md @@ -0,0 +1,30 @@ +--- +title: Plugins +slug: / +--- + +# Community Maintained Plugins + +- [craco-antd](https://github.com/DocSpring/craco-antd) by [@DocSpring](https://github.com/DocSpring) +- [craco-babel-loader](https://github.com/rjerue/craco-babel-loader) by [@rjerue](https://github.com/rjerue/) +- [craco-base64-inline-loader](https://github.com/melMass/craco-base64-inline-loader) by [@melMass](https://github.com/melMass) +- [craco-cesium](https://www.npmjs.com/package/craco-cesium) by [rot1024](https://github.com/rot1024) +- [craco-esbuild](https://github.com/pradel/create-react-app-esbuild) by [@pradel](https://github.com/pradel) +- [craco-favicons](https://github.com/rickysullivan/craco-favicons) by [@rickysullivan](https://github.com/rickysullivan) +- [craco-image-optimizer-plugin](https://github.com/kkulbae/craco-image-optimizer-plugin) by [@kkulbae](https://github.com/kkulbae) +- [craco-interpolate-html-plugin](https://github.com/kkulbae/craco-interpolate-html-plugin) by [@kkulbae](https://github.com/kkulbae) +- [craco-less](https://github.com/DocSpring/craco-less) by [@DocSpring](https://github.com/DocSpring) +- [craco-linaria](https://github.com/jedmao/craco-linaria) by [jedmao](https://github.com/jedmao) +- [craco-parameter-decorator](https://github.com/org-redtea/craco-parameter-decorator) by [@Hokid](https://github.com/Hokid) +- [craco-plugin-react-hot-reload](https://github.com/HasanAyan/craco-plugin-react-hot-reload) by [@hasanayan](https://github.com/hasanayan) +- [craco-plugin-scoped-css](https://github.com/gaoxiaoliangz/react-scoped-css/tree/master/packages/craco-plugin-scoped-css) by [gaoxiaoliangz](https://github.com/gaoxiaoliangz) +- [craco-plugin-single-spa-application](https://github.com/hasanayan/craco-plugin-single-spa-application) by [@hasanayan](https://github.com/hasanayan) +- [craco-purescript-loader](https://github.com/andys8/craco-purescript-loader) by [@andys8](https://github.com/andys8) +- [craco-styled-jsx](https://github.com/cr4zyc4t/craco-styled-jsx) by [@cr4zyc4t](https://github.com/cr4zyc4t) +- [craco-preact](https://github.com/DocSpring/craco-preact) by [@DocSpring](https://github.com/DocSpring) +- [craco-raw-loader](https://github.com/melMass/craco-raw-loader) by [@melMass](https://github.com/melMass) +- [craco-sass-resources-loader](https://github.com/tilap/craco-sass-resources-loader) by [tilap](https://github.com/tilap) +- [craco-use-babelrc](https://github.com/jackwilsdon/craco-use-babelrc) by [@jackwilsdon](https://github.com/jackwilsdon) +- [craco-workbox](https://github.com/kevinsperrine/craco-workbox) by [@kevinsperrine](https://github.com/kevinsperrine) +- [react-app-alias](https://github.com/oklas/react-app-alias) by [@oklas](https://github.com/oklas) +- [storybook-preset-craco](https://github.com/artisanofcode/storybook-preset-craco) by [@danielknell](https://github.com/danielknell) diff --git a/docs/static/.nojekyll b/website/recipes/add-autoprefixer-options.md similarity index 100% rename from docs/static/.nojekyll rename to website/recipes/add-autoprefixer-options.md diff --git a/website/sidebars.js b/website/sidebars.js new file mode 100644 index 00000000..fcf3c128 --- /dev/null +++ b/website/sidebars.js @@ -0,0 +1,56 @@ +// @ts-check + +/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */ +const sidebars = { + docs: [ + 'welcome', + 'getting-started', + { + type: 'category', + label: 'Configuration', + link: { + type: 'generated-index', + }, + items: [ + 'configuration/getting-started', + 'configuration/style', + 'configuration/eslint', + 'configuration/babel', + 'configuration/typescript', + 'configuration/webpack', + 'configuration/jest', + 'configuration/devserver', + 'configuration/plugins', + ], + }, + 'configuration-api', + { + type: 'category', + label: 'Plugin API', + link: { + type: 'generated-index', + }, + items: [ + 'plugin-api/getting-started', + 'plugin-api/hooks', + { + type: 'category', + label: 'Utility Functions', + link: { + type: 'generated-index', + description: + 'CRACO provides a suite of utility functions to help you develop your plugins.', + }, + items: [ + 'plugin-api/utility-functions/webpack-loaders', + 'plugin-api/utility-functions/webpack-asset-modules', + 'plugin-api/utility-functions/webpack-plugins', + 'plugin-api/utility-functions/miscellaneous', + ], + }, + ], + }, + ], +}; + +module.exports = sidebars; diff --git a/website/sidebarsRecipes.js b/website/sidebarsRecipes.js new file mode 100644 index 00000000..d82be216 --- /dev/null +++ b/website/sidebarsRecipes.js @@ -0,0 +1,19 @@ +// @ts-check + +/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */ +const sidebarsRecipes = { + docs: [ + { + type: 'category', + label: 'Recipes', + link: { + type: 'generated-index', + slug: '/', + description: 'A collection of configs for common use cases.', + }, + items: ['add-autoprefixer-options'], + }, + ], +}; + +module.exports = sidebarsRecipes; diff --git a/docs/src/components/HomepageFeatures/index.js b/website/src/components/HomepageFeatures/index.js similarity index 100% rename from docs/src/components/HomepageFeatures/index.js rename to website/src/components/HomepageFeatures/index.js diff --git a/docs/src/components/HomepageFeatures/styles.module.css b/website/src/components/HomepageFeatures/styles.module.css similarity index 100% rename from docs/src/components/HomepageFeatures/styles.module.css rename to website/src/components/HomepageFeatures/styles.module.css diff --git a/website/src/css/custom.scss b/website/src/css/custom.scss new file mode 100644 index 00000000..1d848ccd --- /dev/null +++ b/website/src/css/custom.scss @@ -0,0 +1,108 @@ +/** + * Any CSS included here will be global. The classic template + * bundles Infima by default. Infima is a CSS framework designed to + * work well for content-centric websites. + */ + +/* You can override the default Infima variables here. */ +:root { + --ifm-color-primary: #2e8555; + --ifm-color-primary-dark: #29784c; + --ifm-color-primary-darker: #277148; + --ifm-color-primary-darkest: #205d3b; + --ifm-color-primary-light: #33925d; + --ifm-color-primary-lighter: #359962; + --ifm-color-primary-lightest: #3cad6e; + --ifm-code-font-size: 95%; + --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1); +} + +/* For readability concerns, you should choose a lighter palette in dark mode. */ +[data-theme='dark'] { + --ifm-color-primary: #28dfb7; + --ifm-color-primary-dark: #1fcea8; + --ifm-color-primary-darker: #1dc39e; + --ifm-color-primary-darkest: #18a082; + --ifm-color-primary-light: #3fe2bf; + --ifm-color-primary-lighter: #4ae4c2; + --ifm-color-primary-lightest: #6de9ce; +} + +.craco-main { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + margin: 64px; + + .header { + display: flex; + justify-content: center; + align-items: center; + gap: 16px; + + img { + width: 256px; + height: 256px; + } + + .text { + font-size: 48px; + font-weight: bold; + p { + margin: 0; + } + span { + color: var(--ifm-color-primary); + } + margin-bottom: 32px; + } + + @media screen and (max-width: 768px) { + flex-direction: column; + img { + width: 128px; + height: 128px; + } + .text { + font-size: 32px; + } + } + } + + .buttons { + display: flex; + gap: 16px; + flex-wrap: wrap; + justify-content: center; + align-items: center; + + a { + padding: 12px 48px; + font-size: 18px; + font-weight: bold; + color: var(--color); + border: 2px solid var(--color); + border-radius: 16px; + display: flex; + justify-content: center; + align-items: center; + gap: 8px; + + &:hover { + text-decoration: none; + background-color: var(--color); + color: black; + } + + p { + margin: 0; + } + + svg { + width: 24px; + height: 24px; + } + } + } +} diff --git a/website/src/pages/index.js b/website/src/pages/index.js new file mode 100644 index 00000000..388f6589 --- /dev/null +++ b/website/src/pages/index.js @@ -0,0 +1,61 @@ +import React, { useEffect, useState } from 'react'; +import Layout from '@theme/Layout'; +import { PlayIcon, StarIcon } from '@heroicons/react/24/solid'; +import CracoLogo from '@site/static/img/craco.png'; + +export default function Home() { + const [stars, setStars] = useState('-'); + + useEffect(() => { + fetch('https://api.github.com/repos/dilanx/craco') + .then((response) => response.json()) + .then((data) => + setStars( + data.stargazers_count.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ) + ); + }, []); + + return ( + +
+
+ CRACO logo +
+

+ CREATE +

+

+ REACT +

+

+ APP +

+

+ CONFIGURATION +

+

+ OVERRIDE +

+
+
+ +
+
+ ); +} diff --git a/website/static/.nojekyll b/website/static/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/website/static/CNAME b/website/static/CNAME new file mode 100644 index 00000000..c00cab10 --- /dev/null +++ b/website/static/CNAME @@ -0,0 +1 @@ +craco.js.org diff --git a/website/static/img/craco.png b/website/static/img/craco.png new file mode 100644 index 0000000000000000000000000000000000000000..31dedbd31ecece9316711cf713ce1133ed4455fb GIT binary patch literal 33016 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 z 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 literal 0 HcmV?d00001 diff --git a/website/static/img/favicon.ico b/website/static/img/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..402e9e91311cc80a8a60d6c774fefb99798b305c GIT binary patch literal 179575 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 q3LqJLyx6Pt|LG@fmb*&; literal 0 HcmV?d00001 diff --git a/website/static/img/open-source.svg b/website/static/img/open-source.svg new file mode 100644 index 00000000..1b3800b0 --- /dev/null +++ b/website/static/img/open-source.svg @@ -0,0 +1 @@ + \ No newline at end of file