{"maintainers":[{"name":"anonymous","email":"dilan@dilanxd.com"},{"name":"anonymous","email":"pa.lafrance@gmail.com"}],"keywords":["react","create-react-app","cra"],"dist-tags":{"alpha":"7.0.0-alpha.9","latest":"7.1.0"},"author":{"name":"Dilan Nair","url":"https://www.dilanxd.com"},"description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app.","readme":"<div align=\"center\">\n  <a href=\"https://craco.js.org\">\n    <img src=\"https://craco.js.org/img/craco.png\" width=\"200\" height=\"200\">\n  </a>\n  <h1>CRACO</h1>\n  <p>\n  \n**C**reate **R**eact **A**pp **C**onfiguration **O**verride, an easy and comprehensible configuration layer for create-react-app.\n\n**Find config docs, API docs, plugins, and example configs at [craco.js.org](https://craco.js.org)!**\n\n  </p>\n\n  <br>\n\n[![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)\n\n</div>\n\nGet 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.\n\n1. Install the latest version of the package from npm as a dev dependency:\n\n   ```\n   npm i -D @craco/craco\n   ```\n\n2. Create a CRACO configuration file in your project's root directory and [configure](https://craco.js.org/docs/):\n\n   ```diff\n     my-app\n     ├── node_modules\n   + ├── craco.config.js\n     └── package.json\n   ```\n\n3. Update the existing calls to `react-scripts` in the `scripts` section of your `package.json` to use the `craco` CLI:\n\n   ```diff title=\"package.json\"\n   \"scripts\": {\n   -  \"start\": \"react-scripts start\"\n   +  \"start\": \"craco start\"\n   -  \"build\": \"react-scripts build\"\n   +  \"build\": \"craco build\"\n   -  \"test\": \"react-scripts test\"\n   +  \"test\": \"craco test\"\n   }\n   ```\n\nVisit [craco.js.org](https://craco.js.org) to learn more.\n","repository":{"type":"git","url":"git+https://github.com/dilanx/craco.git","directory":"packages/craco"},"users":{"flumpus-dev":true},"bugs":{"url":"https://github.com/dilanx/craco/issues"},"license":"Apache-2.0","versions":{"1.0.0-alpha.7":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app v2.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/sharegate/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/sharegate/craco/issues"},"homepage":"https://github.com/sharegate/craco","engines":{"node":">=6"},"bin":{"craco":"./bin/craco.js"},"peerDependencies":{"react-scripts":"^2.0.5"},"dependencies":{"cross-spawn":"6.0.5","lodash.mergewith":"4.6.1","webpack-merge":"4.1.4"},"version":"1.0.0-alpha.7","gitHead":"ac33e688620f0c4fd59f5b5d9530531fcc52ebd2","_resolved":"","_integrity":"","_from":"file:packages\\craco\\craco-craco-1.0.0-alpha.7.tgz","_id":"@craco/craco@1.0.0-alpha.7","_npmVersion":"6.4.1","_nodeVersion":"10.11.0","_npmUser":{"name":"anonymous","email":"npm.patricklafrance@spamgourmet.com"},"dist":{"integrity":"sha512-qV53MnqjzUmqVSjNJ315JP6sSHo7ilGP72WQ+diP7NJGbXSdC46JILWekuSH+Y5eL88dviHWJq9fNJsz+wNM+g==","shasum":"db7ff843d150fbd676c9c68f45105aec1a56e441","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-1.0.0-alpha.7.tgz","fileCount":24,"unpackedSize":44484,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbxigzCRA9TVsSAnZWagAAY9gP/3w4Bi5n47RpN2YfvtNR\nyr/bCtx5fyPVOOm2qkdxgdb3taSEHs+/RLBU0w+I3nltindGEDoySVdd6hGF\nTiGYHNV5b+exZT5It1tSknS+jTkDk3pPvd/1fNQVP9ECULCOFuqCkmHZc+6A\nxCJFWMyXdwoSubCylK2fExaLximbuEKfs8hKuwgGBGS0WFD4YkxvRIRY8Ohz\nPDYlsnDIpIR6ZmnIQxdmgYVy6keFyr74M16peC8X/JwxtsfiEcEvFxeubYMN\nn6WL2b4uTbovG2fGeKL2m3O92kYb5W2KK7Sn+JDkKZ87L8FZsSprEUgmoz2H\n7P3ua1uwUKlZn9vu4i+Czf6j9O/fzwNnlKe+shT2bNxr+AF0NelTG7tSeuqK\nu/HGw4uguuF7GPixb2ZbNHtuvv6kIxkjpI97tFdfwnsACz8Dcf8acyR0Cptp\ncNWXCTWkAGuV0quibWFgF5pmXj/tvOVXLFpmda3glL6jzKvRF2Ve0DBTdbwW\npPP8FQ0NW34CRy5iCB8obMvpzbPB3PLmoHuOmpMumIIdxkDWOJzXOR3oB16S\nVLKzBZjjtkXjVheitmMeDgVZE5bozo/zAsJhrUVvfakBZTSbBqvn1ly1U0UL\nP/sSL8SGZRnPZUVFDyg9x9hqZYHpqqGroMc63JjwnAbeWo/IjithImdIbewJ\nMnVg\r\n=ywEO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDhtzLpmOmmdzMzLqk1Xgeuqc8BBTuqo3+pfHiwp/uLUAiA4p9bxhmjJNUsw1VcxigMtkGPp3eYfX8AfLBF2qtSdnQ=="}]},"maintainers":[{"name":"anonymous","email":"npm.patricklafrance@spamgourmet.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_1.0.0-alpha.7_1539713072393_0.0056004944695704495"},"_hasShrinkwrap":false},"1.0.0-alpha.8":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app v2.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/sharegate/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/sharegate/craco/issues"},"homepage":"https://github.com/sharegate/craco","engines":{"node":">=6"},"bin":{"craco":"./bin/craco.js"},"peerDependencies":{"react-scripts":"^2.0.5"},"dependencies":{"cross-spawn":"6.0.5","lodash.mergewith":"4.6.1","webpack-merge":"4.1.4"},"version":"1.0.0-alpha.8","gitHead":"7be9159eb31d85fdffbcee3a14d3277d1c55c79d","_resolved":"","_integrity":"","_from":"file:craco-craco-1.0.0-alpha.8.tgz","readme":"ERROR: No README data found!","_id":"@craco/craco@1.0.0-alpha.8","_npmVersion":"6.4.1","_nodeVersion":"10.11.0","_npmUser":{"name":"anonymous","email":"npm.patricklafrance@spamgourmet.com"},"dist":{"integrity":"sha512-p7JEkf+umda9jeCh/JdgWQJ20ofiSuaxFaSYm6OQ5AkgWpVSTA56xd/J9UXK/DwEX+Jxf5U8G3pbIylERh9zIw==","shasum":"a7a0e8043016075729b8f9e7d8ca1f2deea8f6d3","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-1.0.0-alpha.8.tgz","fileCount":24,"unpackedSize":44511,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbxiulCRA9TVsSAnZWagAAcI4P/1swoYfQWLVj1x1dxi68\nr8oJURLbKtQdhc/gt20TB7SFUPIt/NS4ko3J6QQMjFg2GYeLIW7Gy4KW2uLY\nsIR876LO/o9cEtYtzbNoN9Dg1QEYM8VJLh70dALLp8jQ3EAmqozGiDssc7/O\nM3yhws8nOfTPcCqtaxoLTehguU6X1Uxvh7tPjxbPHMvKV8JEyzDFrTNPcXR6\nUGPKfzBAjquU22B6aOs07uH37C7cvP6eozNnzEJkZq2nb5w59V0iv9stbpCK\n6loomTvYrGhl28KDeB3d4oZZU+9PxrvK2WLs/KkapSVOWAqhzHbmwMhIieEW\n1wG4kpPF7PHeAX6PZtVwn5n9q/86kM4VfBiUmoiDgYjCJ/fSiky6snb/os/H\nw9LkWoCNnWWN78/mp8voHQiBbOipJbOaOtPF8A/Y0lFeTCO4U1yYSYTbrkWR\navmKmiNGaw5OBoEVecbIzG/dvd8J16ToPjmwheMs9dq1dDqh38MaG7NauFJq\njbRU7MjgnOvu1RbXmoGEfyfcTHxTat65Bq5XhIWk8xyGS89+fRf4YhMLiGKG\n5TXKV1XQH8DsfC294unJ7nOovQDlV9tt5qom+Un6zbSbe05O0Ie5iDCTOjiZ\n5FKG7Dw4b6D8IiOK4PmF+ofF8oIBmVJQ/bOjldloLvAaqBtMMqqMBjQSnhX8\nd9vk\r\n=su1N\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEhflXs7v0LYz1G1lwYRtBoSs58lWPV6fGUOoBtGWE7sAiAbN23N/x6tqu0bSumXlgSCwKrBvl8S0Xma05a8Nud6dQ=="}]},"maintainers":[{"name":"anonymous","email":"npm.patricklafrance@spamgourmet.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_1.0.0-alpha.8_1539713957093_0.08623320912630583"},"_hasShrinkwrap":false},"1.0.0-alpha.9":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app v2.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/sharegate/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/sharegate/craco/issues"},"homepage":"https://github.com/sharegate/craco","engines":{"node":">=6"},"bin":{"craco":"./bin/craco.js"},"peerDependencies":{"react-scripts":"^2.0.5"},"dependencies":{"cross-spawn":"6.0.5","lodash.mergewith":"4.6.1","webpack-merge":"4.1.4"},"version":"1.0.0-alpha.9","gitHead":"b0a279f1bb21d8044237d37018a9912199697f77","_resolved":"","_integrity":"","_from":"file:craco-craco-1.0.0-alpha.9.tgz","readme":"# craco\r\n\r\n**C**reate **R**eact **A**pp **C**onfiguration **O**verride is an easy and comprehensible configuration layer for create-react-app v2.\r\n\r\nGet all the benefits of create-react-app **and** customization without using 'eject' by adding a single `craco.config.js` file at the root of your application and customize your eslint, babel, postcss configurations and many more.\r\n\r\nAll you have to do is create your app using [create-react-app](https://github.com/facebook/create-react-app/) and customize the configuration with a `craco.config.js` file.\r\n\r\n- [Configuration Overview](#configuration-overview) - Quickly see how you can configure your CRA installation with this plugin.\r\n- [Recipes](#creating-an-app) – Short and easy recipes for common use cases.\r\n- [Develop a Plugin](#develop-a-plugin) - How to develop a plugin for `craco`.\r\n\r\n**Acknowledgements:**\r\n\r\nWe 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.\r\n\r\nAlso, please note that the configuration style of this plugin has been greatly influenced by the way [Vue CLI](https://cli.vuejs.org/guide/) does it.\r\n\r\n**Please Note:**\r\n\r\nBy 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.\r\n\r\n## Installation\r\n\r\nInstall the plugin from **npm**:\r\n\r\n```bash\r\n$ npm install @craco/craco --save-dev\r\n```\r\n\r\nCreate a `craco.config.js` file in the root directory:\r\n\r\n```\r\nmy-app\r\n├── node_modules\r\n├── craco.config.js\r\n└── package.json\r\n```\r\n\r\nExport your configuration as an **object literal**:\r\n\r\n```javascript\r\n/* craco.config.js */\r\n\r\nmodule.exports = {\r\n    ...\r\n}\r\n```\r\n\r\nor a **function**:\r\n\r\n```javascript\r\n/* craco.config.js */\r\n\r\nmodule.exports = function({ env, paths }) {\r\n    return {\r\n        ...\r\n    };\r\n}\r\n```\r\n\r\nUpdate the existing calls to `react-scripts` in the `scripts` section of your `package.json` file to use the `craco` CLI:\r\n\r\n```diff\r\n/* package.json */\r\n\r\n\"scripts\": {\r\n-   \"start\": \"react-scripts start\",\r\n+   \"start\": \"craco start\",\r\n-   \"build\": \"react-scripts build\",\r\n+   \"build\": \"craco build\"\r\n}\r\n```\r\n\r\nStart your app for development:\r\n\r\n```bash\r\n$ npm start\r\n```\r\n\r\nOr build your app:\r\n\r\n```bash\r\n$ npm run build\r\n```\r\n\r\n## CLI Options\r\n\r\nWhen you execute `craco start` or `craco build` a few options are available.\r\n\r\nTo change the location of the configuration file:\r\n\r\n```bash\r\n$ npm start craco --config config/my-cra-customized-config.js\r\n```\r\n\r\nTo use a custom version of the `react-scripts` packages:\r\n\r\n```bash\r\n$ npm start craco --react-scripts react-scripts-ts\r\n```\r\n\r\nTo activate **verbose** logging:\r\n\r\n```bash\r\n$ npm start craco --verbose\r\n```\r\n\r\n## Configuration Overview\r\n\r\nWhen the property **mode** is available there are 2 possible values:\r\n- `extends`: the provided configuration will extends the CRA settings\r\n- `file`: the CRA settings will be reseted 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.\r\n\r\n```javascript\r\nconst { paths, when, whenDev, whenProd, ESLINT_MODES, POSTCSS_MODES } = require(\"craco\");\r\n\r\nmodule.exports = {\r\n    style: {\r\n        modules: {\r\n            localIdentName: \"\"\r\n        },\r\n        css: {\r\n            loaderOptions: {} || (cssLoaderOptions, { env, paths }) => { return cssLoaderOptions; }\r\n        },\r\n        sass: {\r\n            loaderOptions: {} || (sassLoaderOptions, { env, paths }) => { return sassLoaderOptions; }\r\n        },\r\n        postcss: {\r\n            mode: \"extends\" || \"file\",\r\n            plugins: [],\r\n            loaderOptions: {} || (postcssLoaderOptions, { env, paths }) => { return postcssLoaderOptions; }\r\n        }\r\n    },\r\n    eslint: {\r\n        enable: true,\r\n        mode: \"extends\" || \"file\",\r\n        formatter: \"\",\r\n        globals: [],\r\n        plugins: [],\r\n        extends: [],\r\n        rules: {},\r\n        loaderOptions: {} || (eslintOptions, { env, paths }) => { return eslintOptions; }\r\n    },\r\n    webpack: {\r\n        alias: {},\r\n        plugins: []\r\n    },\r\n    configureWebpack: {} || (webpackConfig, { env, paths }) => { return webpackConfig; },\r\n    devServer: {},\r\n    babel: {\r\n        presets: [],\r\n        plugins: [],\r\n        loaderOptions: {} || (babelLoaderOptions, { env, paths }) => { return babelLoaderOptions; }\r\n    },\r\n    plugins: [\r\n        {\r\n            plugin: {\r\n                overrideCracoConfig: ({ cracoConfig, pluginOptions, context: { env, paths } }) => { return cracoConfig; },\r\n                overrideWebpackConfig: ({ webpackConfig, cracoConfig, pluginOptions, context: { env, paths } }) => { return webpackConfig; },\r\n            },\r\n            options: {}\r\n        }\r\n    ]\r\n};\r\n```\r\n\r\n## Develop a plugin\r\n\r\n## Acknowledgements\r\n\r\n[@timarney](https://github.com/timarney) for having created [react-app-rewired](https://github.com/timarney/react-app-rewired).\r\n\r\n## License\r\n\r\nCopyright © 2018, 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/sharegate/craco/blob/master/LICENSE.\r\n","readmeFilename":"README.md","_id":"@craco/craco@1.0.0-alpha.9","_npmVersion":"6.4.1","_nodeVersion":"10.11.0","_npmUser":{"name":"anonymous","email":"npm.patricklafrance@spamgourmet.com"},"dist":{"integrity":"sha512-aLfeZxYH/zvbOA+Iy1IhwZB8LWLPDFRVfgHcIk5/BxDsmDh3Nq9BtL5m2HbI7BbNuoDWmn+z55IR+FZfwBzZhg==","shasum":"f844327b3d288339a1563a7d3455df3ce6bb2882","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-1.0.0-alpha.9.tgz","fileCount":25,"unpackedSize":49941,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbxjGrCRA9TVsSAnZWagAAbBUP/0Dm64MMFqyMwXSVbhSV\nIzk8M0bz3HNLNIA+rTFnUJGKYe1rxLepkqJc+5rCjKIoMYNBHPeMwR50WARd\nrCvrbf3Omt7DFJ/IbkVgHUtgrUdbQGWUjwooZ1vHQWQuEXT1+Nl9q9O3uaqZ\nDiIGSXiAi2zJ8htVgSSuTif9wRJy/ZIeIQPr1QJGe6xjjyqhvH4NZ6Q2aABV\nQmPDbBueL8vWRXaGS7u1H1IdyNCQ1HbgK7yQyrrVlxiZ7XeJN+aQmisA/ycx\nxpqz4BEYUyht3B6dx59ibXCAiRP94F/N8NxBuktxJmZBq5keAfJzmXFQhhUq\nWDH2PI76im7ioqbljzNWtuTDWDjDpuK6qhujBomBSSaR9xMsQxG87WJ/JDTg\nG/ADtvFG4jiV9hneFGZ6t0plKP+D8/viVJevd2kj35mbY4YYmQcm0gkSZxGs\nRSfe/A2PGAsAOE91eWixsfWqsx2PveoLnRaj5cZhpbTWgs+1bv/9sTKDhEeO\nmrWhE8Og5mmvGkFf3mlW9es7Ny8xDo3j5rV5WHGEn6lbq9cCcAWQ2qcxVE5X\nzDkb9wjwhMipqQOBunCdQxTWqYW8/cmvQxQN9MOfij0GCMpEdL9xmRCiQVi+\nZED73FAgk6DKblc0o4uy1dqywlwJAxrfsYfE9Qgw8Up8YcU77E4HV8YxsjoR\n31G1\r\n=mBqE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDWVIHpi0mjtCNuMVCql8XHreR34N9JlIN7EK4NBIGhRgIgFohhrjyi2HHmbmozKb39I/8BVkB/CL5uxIngShlotzM="}]},"maintainers":[{"name":"anonymous","email":"npm.patricklafrance@spamgourmet.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_1.0.0-alpha.9_1539715499367_0.11636021752300918"},"_hasShrinkwrap":false},"1.0.0-alpha.10":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app v2.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/sharegate/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/sharegate/craco/issues"},"homepage":"https://github.com/sharegate/craco","engines":{"node":">=6"},"bin":{"craco":"./bin/craco.js"},"peerDependencies":{"react-scripts":"^2.0.5"},"dependencies":{"cross-spawn":"6.0.5","lodash.mergewith":"4.6.1","webpack-merge":"4.1.4"},"version":"1.0.0-alpha.10","gitHead":"bce5af14e2b74da153b1437a81156d4ff6e7087e","_resolved":"","_integrity":"","_from":"file:craco-craco-1.0.0-alpha.10.tgz","_id":"@craco/craco@1.0.0-alpha.10","_npmVersion":"6.4.1","_nodeVersion":"10.11.0","_npmUser":{"name":"anonymous","email":"npm.patricklafrance@spamgourmet.com"},"dist":{"integrity":"sha512-9kCK6hP1hJtrZbtHhx5Gzx98VrMk7wRrV/vBRMq/0AUsMh0Cuki+89kQBtMWTU3DQDQO5NI0U3aE1sW9bP29PA==","shasum":"be7e1afd6ac1d7ec684015429ae2114491daddde","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-1.0.0-alpha.10.tgz","fileCount":25,"unpackedSize":54713,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbyPOsCRA9TVsSAnZWagAAA48P/RQgG1oprOW1eFhFCGB8\ngtRUiOGu+5+hRENmxM+PaVWu+nrzi+3v8s3ZDOSHb7UUUcTXebwGVfMhSERN\nb/aIAVBlW5NrID2eKZh9hil4trfvC0ueooZIkEExwB32hy9O2rOhZBSr5K8F\n01IYk1ovHLStOcH/sANi5HEkLwB1mVhOkprZcljBfxoIWnmaieuHk7CiPM04\nSq6u2GNAdS5YXfqw+iN2L1mfYo8aVPSxlUFrFNKsn3TwWh/WGXXYg71xlZIT\neW8iCicIh+8CxhArmvTJVK43otNaQ78e2hm2640vUjc+mB5Ho5te6DplStE8\n3GLh8IhO+bK2UCpeFje+LCVqcCGluLWzpFkioTdnplDppm35KecfNNO5Od4u\nAEUsh3G57Kkpbs87esbIc3lJtJnCZJyl2ulhjEPVKW3jvy7hL0A0lSoOj6eo\nx8L/MPR7CMk1hAJEOo5t6ia+E7GVBmrak+AKs0/z/Tsgc1WppchoczrRxVGJ\nYZG98WOZFgzS8CPPemUDy3boraSb7MyMpSvGRhWMXmQ64Dii1n49AfHdiTK+\nW6xNkkV6v60defgtYKCT9DOhymVb0sdE5YVukPmKbmK56mD4RoHbDmtiRFAY\ntE7MJrCVAa78Cg0beFvDLeW3bN/e6zVScDvI4YAnZje/lFOjzTGrkSys9rNU\nA3RI\r\n=D4ex\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA1rRUHtjL90V3kRcLZcqE8qh+EiG+csCADln9bZS8sXAiEA458X+aP1JEdXY53e6fr1FY2SvH0viP/F3moJ6aM1KG4="}]},"maintainers":[{"name":"anonymous","email":"npm.patricklafrance@spamgourmet.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_1.0.0-alpha.10_1539896234948_0.7269688305551316"},"_hasShrinkwrap":false},"1.0.0":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app v2.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/sharegate/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/sharegate/craco/issues"},"homepage":"https://github.com/sharegate/craco","engines":{"node":">=6"},"bin":{"craco":"./bin/craco.js"},"peerDependencies":{"react-scripts":"^2.0.5"},"dependencies":{"cross-spawn":"6.0.5","lodash.mergewith":"4.6.1","webpack-merge":"4.1.4"},"version":"1.0.0","gitHead":"bce01279199acc5f6307156bc28af896718f96fa","_resolved":"","_integrity":"","_from":"file:craco-craco-1.0.0.tgz","_id":"@craco/craco@1.0.0","_npmVersion":"6.4.1","_nodeVersion":"10.11.0","_npmUser":{"name":"anonymous","email":"npm.patricklafrance@spamgourmet.com"},"dist":{"integrity":"sha512-cyYQ5hl8aY+Qo7mC6UNzP5pYQFXY49wnpOPAce/dp7t46gN/o6Lt04pUu4b8u+Ub7ptnqPAfqUqHrzN1iq/jJw==","shasum":"4434257620425e5390ddd4ab7a3bd724e522e467","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-1.0.0.tgz","fileCount":25,"unpackedSize":54782,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbyPqGCRA9TVsSAnZWagAAFIwP/ROPyCcfGozrl45vf1Xb\n3j7UcmEfYIAi/4bKFdwvYlJIwPySPCvGEFaKDi+0efE1ZdRQvYBl2s25yfrD\nff2Z6uOuRTMLaDJ5fAU9FwL0ifvrY577gkSbQX+lASoTkUfaVbAwjWWyKn09\nVYIe39fYJQt5upmogpPOPFepatIXOxj/x6TGdEwZYdgn0318N4CuM9F50onK\nG6WIhtwSRLCNSfgrrZzpWFEN5vLZRleZmhUkn5ssIbbSm5tvj9hrU8E3DkjT\nSqeI6vtmNkws/OzTmBjaWfKJc4jX3gOCkkXKvibybJkRBMLzYyCktbVSBDsV\nxEvLYJUfcAN1K2U8UR5QUkfdoLz9in1VVm9HbmBu5DQsz0RPD3pWbUzBRmgQ\nvoNKmDquG5UNXugQG1B0Y9+1twM4wQSwXvRqsujK0PLMGTgKNNNHntEhbEhq\nGZVZ/iSa5xHg0PuIcwknaqijX2GhEm0w/gkeA28GgkpjOwMSP54qNobRsbHY\nXellfbXkki6HE5jhN8NJhECxeOgq7/W3qY1oq6DWM1O0CPWBo1nAmEl8mFLE\nxbXEnOR29T3Jeug1UqTMk6N2l0sSELJfcGH88YgXmHmhBBFXJtirFxiaz5Db\nCWB9/QNay5/FDChRtYkzSYQDylOAB2d+7KH34/rW9HybPFfChnX9+dfj0vQr\nSjmX\r\n=CKhv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGXKbovraS45Nbapp5CI5aD2oL5GdBpbIS2vSr7s+f/3AiAnGHsnbSYvHVyhAv/zId7R1437s/0yauWOb44/+FS1dQ=="}]},"maintainers":[{"name":"anonymous","email":"npm.patricklafrance@spamgourmet.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_1.0.0_1539897989756_0.6233915447308302"},"_hasShrinkwrap":false},"1.1.0":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app v2.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/sharegate/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/sharegate/craco/issues"},"homepage":"https://github.com/sharegate/craco","engines":{"node":">=6"},"bin":{"craco":"./bin/craco.js"},"peerDependencies":{"react-scripts":"^2.0.5"},"dependencies":{"cross-spawn":"6.0.5","lodash.mergewith":"4.6.1","webpack-merge":"4.1.4"},"version":"1.1.0","gitHead":"4ea3ebe7e13ffe97d9b2852ed33718fe7511e212","_resolved":"","_integrity":"","_from":"file:craco-craco-1.1.0.tgz","_id":"@craco/craco@1.1.0","_npmVersion":"6.4.1","_nodeVersion":"10.11.0","_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"dist":{"integrity":"sha512-UTQbNWEIos1PgI/QKaAakB7EbivZEnNtlCutwVtq+G6EANidtTX5tONInSa/d0DLwUfgPRaIudIuRHkBGZ0DQg==","shasum":"50554840b3236e6668dcfef196265d19ac92054e","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-1.1.0.tgz","fileCount":25,"unpackedSize":55429,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbygKHCRA9TVsSAnZWagAA+oAQAJ6lxWonfXsZ1AYth7fd\nPfPZJ0sXFwF7SckSCJYhPfw6INTxuHnGPSW5kZKxKNbp77YC3HZH4PecWJkQ\nbIHLXe9vQ1so+1FTP1nFH7FcjLXkr+mcl1PeneKffCn3emszWqJI654YWxbB\nBZtbHANAY1xMNxW8ZOtshgN2NCJoeQ/z8LTlAPUwQZMlZ8l/sQBCcqsoJtJI\nzuCTdbhYGtS9vDrArl4wtljs1VARzNZoPwairmTIDfGzt1TXJBrznTXGRHX6\nT16iI1eknxxyp+F5vUOe2AyqgDqyvUucxNZGr1moarTfIvG/bUroRPpShUOv\nye4aWBPOVfZDOrYL3W2okt3sZD8/yu3UcTphSQWFin/89OQvY9RR0Kd+0ffZ\njiPM+8PcdyIZ4+QOAI7XkHxzMK3mwtq6IIVil+RBoxRX3CT/Z07OvbTaNN0S\nObDiT/BYpqTBdu2E8ABRpySgJAyQEgmm03hNVIAPHzm5jcgvlwoMPTe+HVLd\ncVSiMtWbjl5UTXDhF/ATGiqLON2BXSYIOu+bVyYFA7m24SfJ8HLrrr2Ffgyq\nffr0PaCVMHhlg4EZi5lLcjUe6cr583wOyYu52/7OCfvJwl7CDgmEIt4qPnBk\no9szJJX4UcbL6OfV6UAD1/DwsUxwVrNf4gwi0OovI3stgfvnKDoe7af8JHRA\n90JB\r\n=kXRc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFEQv1LYwyzluVmlWSqZv94iUuXe5CjBr63RdEq3Z7MOAiEA2+6yzZ/hRasyVygWl83z1CWzjhmgp8CWPgE2eX+gyGQ="}]},"maintainers":[{"name":"anonymous","email":"npm.patricklafrance@spamgourmet.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_1.1.0_1539965574918_0.22377915588088437"},"_hasShrinkwrap":false},"2.0.0":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app v2.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/sharegate/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/sharegate/craco/issues"},"homepage":"https://github.com/sharegate/craco","engines":{"node":">=6"},"bin":{"craco":"./bin/craco.js"},"peerDependencies":{"react-scripts":"^2.0.5"},"devDependencies":{"react-scripts":"2.0.5"},"dependencies":{"cross-spawn":"6.0.5","lodash.mergewith":"4.6.1","webpack-merge":"4.1.4"},"version":"2.0.0","gitHead":"4a678c3b9e364e64594d311135a2a4c47d8d4df3","_resolved":"","_integrity":"","_from":"file:craco-craco-2.0.0.tgz","_id":"@craco/craco@2.0.0","_npmVersion":"6.4.1","_nodeVersion":"10.11.0","_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"dist":{"integrity":"sha512-zrP7vT8oVmnSU3gq2Z2i01rfKgDndW770gbrj4aiWIX4n8qGy3spCQpqE+T29p5/aajIA0OZ27ml8RVK2f6rXg==","shasum":"e4f4820c94748e932259a9fe27a826b3486c9b03","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-2.0.0.tgz","fileCount":28,"unpackedSize":66983,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbzm1vCRA9TVsSAnZWagAAp9gP/j0so9KjFerPfyhmrs2L\nTPwXKPXHx25ZuSuHns64J9RRBAy8pRg5i3w//eDRb8/3qPG/Dz38no33W3J0\ntzw1UDn4TsyeIuCZjqKMMu5J9U5Cu0fxX4C6ogV3rrn0ymkp4Z18NWgMFk3S\nV4ZQIPZiSDNdBNI5U3FQIaJWnLQ/+PEmidpFUMNiPbYn0fRG6f9hf47aOCMr\n0Jno7CuFIuT+3LShSEkeYNQPiIIZ+RiZ7wrk+rf0yqM49OcmX0HZTPZ0qHBX\noGlwV9VjQFlpHehGh6YfwkGG4Jd0ApjQqcm1ayiV1w+a6K61ra3viA8fsoaS\nXelW8Dr6794K7YTifwQ2ZJ02rSzUk5iaqG1SVgya1EY1BqTOoP5wE0OigJz5\nW1zQHveV9+uXVbq5+BlZkXh3v/GhzD3W2lMr5eXkyHCnm6Sa3sHrTAI3FcTl\n+BX78gdzV/dLq58oueiSYj7Z9FPOhWAh2TwnB0Td48kLOcUFKLeOsFG1HiOc\n+TUR/Vs7Gk26R43b7EwcK2aONxnRRPN+oF1aMTJEa1yaa871BOR78pCWZANo\nUUTGnvcrpqFNrCJTm5Ty9vVUEJJdkA/+gYynAGYAooPG1FStGCKfWWza/eep\nj8iw6ZW3A6/yzSkpp6Rz6QMPAsE8PbFZJ6ZFQqEr8PhUJ7F+Bfb6Y677yM7E\nAAAE\r\n=7Z7+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCQq2K0ozOmGRnlZJPlMp1/nMQZ7/2dpSYHSUiv1FB4BQIhAKcSUBSOaykS9wT2RlrvJ1VvsjhcuaUY4RUcqhuBLAop"}]},"maintainers":[{"name":"anonymous","email":"npm.patricklafrance@spamgourmet.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_2.0.0_1540255086934_0.12047541532649375"},"_hasShrinkwrap":false},"2.0.1":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app v2.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/sharegate/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/sharegate/craco/issues"},"homepage":"https://github.com/sharegate/craco","engines":{"node":">=6"},"bin":{"craco":"./bin/craco.js"},"peerDependencies":{"react-scripts":"^2.0.5"},"devDependencies":{"react-scripts":"2.0.5"},"dependencies":{"cross-spawn":"6.0.5","lodash.mergewith":"4.6.1","webpack-merge":"4.1.4"},"version":"2.0.1","gitHead":"dba4290622d8361a3dcb818b13432963f97b733d","_resolved":"","_integrity":"","_from":"file:craco-craco-2.0.1.tgz","_id":"@craco/craco@2.0.1","_npmVersion":"6.4.1","_nodeVersion":"10.11.0","_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"dist":{"integrity":"sha512-Ri8Yt0oShNh+U7ekxP5ugJChDD7HlzJrGEBM/HmAf6y29adlxpU9arIwbbQ13WFqsx4q325amPqLKEloSP7Hvw==","shasum":"67e2034f387ccc513730935dee6b6bf6ca56886f","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-2.0.1.tgz","fileCount":28,"unpackedSize":66725,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbznC+CRA9TVsSAnZWagAAjmwP/0dMAzaLDhw9D+/FKpAL\ntE0oKkLfFZGKepQ8vbPmFoKcfsx6JQvIjw2MbOD7LLmdhMEbQu8gmzk3QayV\nwkC3wEXz+88htSNNNPmgSPwcbl7rdGIbYH83ZQQoo5IpLg243QXZnNk4cyD3\nTTgBwKfoA7ppvBihdkJgFQRPH/ug79CaA/4SDEBIphiuwb3quhLuaN68RcdF\ngmbcRN4Rt9IQ1tJffxp5ebMhSVRBLFgGkjy2o/WHWb18HtNESI3EPDHhcK8T\n1ilp+33Q5n56GbGoTqIksyA39FIfuhbrKRqPSy1soJ9DcN+7lIOsVmf/voT1\nZdsAYS6zSrNdK1BjJ0WzrCiJ0DMGrm4GCNLJfY/9NjntTVRgJ31u/kEa2cqo\n3bNv3iXqCn2rAyB9EWboOfnO2buaYrhO0XSIk+F/woFjYlL+z5zR2v9zy7Pe\nPeBZ5JqSSOuCZCEbM9ouf2+5G7I8b6GsbFiax4v2+MhDRc6kxpiM3aSEfeCy\nMGekmXSmnmGc9nWY4C0DLDTxz1ykwMo9YzuJTaHhLjhvGewL99LKWH0pcPHT\nIQvDb1+JGMdES0Fo21AQxKEdITMDCXy/2zgiPJGR+u5hcHWCiJufF6aOfhri\nNBhvJ/Xd3mDmWwdyIq80OJdl7tiGPjh58fMQ8SGL3d8olWkYd/p5A1rhIwSi\nFL69\r\n=gZB9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHHi7eOM4WNECxawkkTsqQjfJx4JzxC0zaCnjJZGS7PFAiEAkTAi2MgISFipaSLBbERux9rDlTXKjUO25rIEzy3fYoE="}]},"maintainers":[{"name":"anonymous","email":"npm.patricklafrance@spamgourmet.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_2.0.1_1540255933804_0.5019204190427557"},"_hasShrinkwrap":false},"2.0.2":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app v2.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/sharegate/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/sharegate/craco/issues"},"homepage":"https://github.com/sharegate/craco","engines":{"node":">=6"},"bin":{"craco":"./bin/craco.js"},"peerDependencies":{"react-scripts":"^2.0.5"},"devDependencies":{"react-scripts":"2.0.5"},"dependencies":{"cross-spawn":"6.0.5","lodash.mergewith":"4.6.1","webpack-merge":"4.1.4"},"version":"2.0.2","gitHead":"e323a7841fedbcccc4f29d672ea38a549b5fff42","_resolved":"","_integrity":"","_from":"file:craco-craco-2.0.2.tgz","_id":"@craco/craco@2.0.2","_npmVersion":"6.4.1","_nodeVersion":"10.11.0","_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"dist":{"integrity":"sha512-pSGT8YB5eDbhnr+QryhJr7/vQ4iMRh7E5kz0Wo6aQ5BVyvEJdi7ExcXmy8K/cJpXTUCs4Smn5RjCaNgEzIrUuA==","shasum":"779ca6380dac1aee083be68f663132556a54ea10","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-2.0.2.tgz","fileCount":28,"unpackedSize":67028,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbz1r6CRA9TVsSAnZWagAAjpkQAJHa8DFXcTCfTC0MDrJ7\nC0SsxdXibxc30ZeBdXd2DHjcfMiD1NOQ0N4UDhpzkPEXhrfD/JIsUsxtK4f2\nlaxMdjPKYW+Cg+DA44rxeDdC/S644krFSPP1HrzY0XOxPxs6pbawhxcBzmyb\nRafptyKBjJhbyAKg0BBeGUE2L1oERnwe9Kf1mprijZC/rmiY9LWc1/mSNXvG\nLaO9X+7emeOq1kFOVNkLyx4HXO50e0Q+DVzyEsFpryHyHo6OCUIjTp/4wnzI\nB+nlQwqU6NcPmZ99RqKrfjC0ysGjtExF3Vl2ATLo4inkbY1EkdLDhmTuZKam\njYYqc0UOUWWNsLVM8U2ilvbbekzcbPaFnyFfVtNlUk2SPc3wXKCDVLQgoMku\nV2P0/uXNWDRIXwTTkNGx+iLkEQLFdSjESXyYHm4Wn8AY68GWjBsCmUzOxOmy\nIdqB+LF1FNLeOscvDmXBIQqh+gSoixlzsTbJ5+PoF7SaoDjdxaXA/4tutwh4\nq2gVKTg5QgZJbtFy/scARa/oRnUbWLYQYDOkwR4m8oLTWEwlqQC7oKQ7gfrx\nk1XRs7+C16vM1H+AuZdsb7uRro/O+Xr3Adq0Au6En4NhQm4UujFKvyeXBK5f\nAllPgQW1NIN0w54XoDYfbMJ1eMc9y60oFTW7ofU4sYkUNqtaoY6GhX1GOAWt\nc/ug\r\n=jvqU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBCDpJjc4o/WsbZXKIEPKK/1OmREbSh1YgzJucMF3fYUAiEApg9qSDcyXLukZaor4phPraRj9js0rwQvPYiB3NY8FbA="}]},"maintainers":[{"name":"anonymous","email":"npm.patricklafrance@spamgourmet.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_2.0.2_1540315897653_0.2785145735319565"},"_hasShrinkwrap":false},"2.1.0":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app v2.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/sharegate/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/sharegate/craco/issues"},"homepage":"https://github.com/sharegate/craco","engines":{"node":">=6"},"bin":{"craco":"./bin/craco.js"},"peerDependencies":{"react-scripts":"^2.1.1"},"devDependencies":{"react-scripts":"2.1.1"},"dependencies":{"cross-spawn":"6.0.5","lodash.mergewith":"4.6.1","webpack-merge":"4.1.4"},"version":"2.1.0","gitHead":"f7556256edb6420d3c2919975968d770cf573a58","_resolved":"","_integrity":"","_from":"file:craco-craco-2.1.0.tgz","_id":"@craco/craco@2.1.0","_npmVersion":"6.4.1","_nodeVersion":"10.11.0","_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"dist":{"integrity":"sha512-ZLJBgMAV3nLp8aLbXpyLKRmOAHnxkQEG/7ZAyRMjEbNh+SRMfZKsEX5d0voRkbldm9IPq6BWD46Jy2VpoK0aTg==","shasum":"dfc3e76a373e44204529d922df601c63270434db","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-2.1.0.tgz","fileCount":28,"unpackedSize":71217,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb4ma/CRA9TVsSAnZWagAAmaAP/0Qhlt7irylPqgK2TELF\nprhP9NKYdA3LqR2oEQJMUJ1Lm5hJAS33N/dloDzUXbRGT/AN0O24ft4bxDm2\nAvqIWW6ztnkjW+1BMZv5BcZMxr2T3JFrlXSl/lI/nOdK4ztdkIwM/8bhCl38\n19ino09SM02m3Um8eeRZ5e13bqH159gsd8IAadSREuBc0jUZ//zBMqT0Vdsx\nUmUulWm+3dGFlIalu9lqZAMKZLqeocvcQRfgXvw+aWL+mxnJGt1eOCH6Pl84\n3ihUMIyk6RsISEal9FEEZY1yWTEdtQjPzTjhkgacuhiMalz+YXOgId19QSS+\n6cQRTrOm6TjZ2OFcv9gu7UfXYyM6QUhoMJYtaYjyDdRBJ77MB/+sSbZLoUEb\ny8LEpE8O4fXNAg1IZVV/Xc8KRt4Voge7r1Qt8Gxwe/4BaZn+y8Q+4naezOsL\nFk6uPwVgDRLE73jcO7qksPnhqfnwkL1qnEUDkfg2EzQzyKZxwOeCyCtrj7Vu\nTb0dqVukKEo65/LwIQq4ItZ6VjOTSnVb7HOAXhEnqQn1lsjb/yk6T9I1y7zB\naHpLaC3LZxgeqETFSMXbsFbNcqzNcYjXpm4EHY2HTFvqnf1E2+FE0PkAYQHE\nYCxhHlmen7BX/tN0z8ggq7pAnixue6MIik+Dsh71g9OdwyaIF38ba58Y6VVT\n72Ik\r\n=6QI6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD7hM4vFm8TE9HkaLVYA5V0X4RdfHz4EsGVqP2XBGZgvAIhAIge3qw6PmODfdjMnAm/dbZxhqiWK1XKvIk4aRvzjOK0"}]},"maintainers":[{"email":"pa.lafrance@gmail.com","name":"anonymous"},{"email":"yohan.belval@gmail.com","name":"anonymous"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_2.1.0_1541564094203_0.18614475817982123"},"_hasShrinkwrap":false},"2.2.0":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app v2.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/sharegate/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/sharegate/craco/issues"},"homepage":"https://github.com/sharegate/craco","engines":{"node":">=6"},"bin":{"craco":"./bin/craco.js"},"peerDependencies":{"react-scripts":"^2.1.1"},"devDependencies":{"react-scripts":"2.1.1"},"dependencies":{"cross-spawn":"6.0.5","lodash.mergewith":"4.6.1","webpack-merge":"4.1.4"},"version":"2.2.0","gitHead":"69fb706d8b144878546ef757aeef131ce0fc1aee","_resolved":"","_integrity":"","_from":"file:craco-craco-2.2.0.tgz","_id":"@craco/craco@2.2.0","_npmVersion":"6.4.1","_nodeVersion":"10.11.0","_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"dist":{"integrity":"sha512-jtN0BcavFMLeyXN7Oyk+m3hTAMlsnhL/czwFIThuMXz/Cxr8a7V6xw41BwGYwA9I3JlbIHvSgUdzi3wH5ETjJQ==","shasum":"beb4b33b80ecd4cced665f104d682285765b64fb","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-2.2.0.tgz","fileCount":28,"unpackedSize":71152,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb4uooCRA9TVsSAnZWagAAxjAP/0Fc1/cf7DY+iz9cEpfU\nNBxlVlCQJBLTlxzM/9DCrdJwpE3AmQ4KHyWOZFH0S3sv3jwVjWA2yQJMGxef\n8yaZeq8rhnUUGsMY0yQ5ZDX0O6zlrnNZzyEj0/xD7Feqrbmc3v8jqxrt+N82\nZDSBFcfPqdEasfzYvK9ulihCxzI8iKHFGAd46H94/gFFP24iaBG84iAL0QeA\nbfFs7MDV+87zqhi8mh+5WjXA3SZ3gNEDfd6cFIBlViZTmedMtiPSCcCu4e2d\nZDD/6jpvyVg8dYMzrYbBNHYTai0s7jWEJUZKX4G+vCOLss+D6LElIsHbUFoJ\nnmy97PLftqhu7fTeN1m3mM/SacPtIsMBfmx1Ye9uGbk8b+3hnHHo4V2Ch0rU\n/vAjsrlTGHEIcrj6Kbld9uMbA9XURtY1Fn2JpTJ2N4o/NYCJN14+ckB9EJoB\n7/JiP3TAtEfWOTJ7RXryyUGOMbype6FztEYO9M3Nnps/+9giX1SDZFM7O7K/\nibd8QmyYb0f3C2xwyyM1YFDOGZy5TQYzJMwtjBST7vAHm2Qe7RR15SPyBcj8\nnmpcsvLxpMEQrF7dBgBL9vHdRsKq+ddigo9+fENTqeoN4HgDf9qM+cWs6Guw\nlBt7qiQTMdjHLfiq5oCpI+uMtOfZw1+Jxt+uzXj9ceR5oehKsCNHKibPJYOX\nEMtV\r\n=IGEN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDcbiGE9DmxXBlyK3Mkz/myjjAUG7TJzwJ9pJxnPRejOQIgRDffnAifHljJeiHW4t+sdXgzpKjRZZ+TZtqTE0Hu/+w="}]},"maintainers":[{"email":"pa.lafrance@gmail.com","name":"anonymous"},{"email":"yohan.belval@gmail.com","name":"anonymous"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_2.2.0_1541597735126_0.1118060000018899"},"_hasShrinkwrap":false},"2.2.1":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app v2.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/sharegate/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/sharegate/craco/issues"},"homepage":"https://github.com/sharegate/craco","engines":{"node":">=6"},"bin":{"craco":"./bin/craco.js"},"peerDependencies":{"react-scripts":"^2.1.1"},"devDependencies":{"react-scripts":"2.1.1"},"dependencies":{"cross-spawn":"6.0.5","lodash.mergewith":"4.6.1","webpack-merge":"4.1.4"},"version":"2.2.1","gitHead":"a3ea7b9a653bb065f8a5781316a557acb9d6692f","_resolved":"","_integrity":"","_from":"file:craco-craco-2.2.1.tgz","_id":"@craco/craco@2.2.1","_npmVersion":"6.4.1","_nodeVersion":"10.11.0","_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"dist":{"integrity":"sha512-CN+3tTaZ9orwIpXRQMCEKjSs8gP+taWNfQh4P1m8niP2Y91o1vlgMkBUCkcWYUjJGLTEIPLME1yTENTcv6hFKw==","shasum":"47ebd5fd3342baab9b6d7d87f2e6574d2b9609ba","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-2.2.1.tgz","fileCount":28,"unpackedSize":71342,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb5EbaCRA9TVsSAnZWagAA6HsP/1W5Rm9hnATeCG4o54fc\nUycU18H0IIcjuQ/UM2yxr2RIksdpBzsmNB+cXca3p3bW4xZro5WQtwdAih1h\nVHoHrRLL2uvZe7bWwIJorCVM6cqxcn0pcj8jx4ULM7jsIQckYFqSISeu7SdY\njGNyAc4CFXwoK3g8m8aScgrHaycMgfYy6OJ5haCDZZRT048OgKDBvbPwjHnM\n3UtuuXRUT7o4yx5wSs3QZaJnTetZO5vzT56aCZC98/YWQ8iiksvI8Om1KX6I\njYJxi4tyjBwGKqA4rylsbUVz74gj4bYuhnqAktyXox6ro9Ro3t7l8oV6lYwD\nQjqKYqcij+XQdsR0S5LTju8eMMF4xXC6HmZSSzUGwFnquNUnf4CLa+fG6WBe\ntz92Qt+jL8CP4FPGM9RxEBOOfVSUJr7rC6wmh+MzmyQaq1yqh6iuU0BIb/lc\nkQGkEtGmhrRqx9eYPv5YBT2fOKkEj7NVIpF+kqfSzpc7RTyg878bZOHUsgAN\nAq+DdcuXk5rdwKarKM9PSR/boRjT7qPV+cB3cq9V2z5bjC2B4Kvk828u6MSh\nER2T9HU7wGj8MOjMaQpz+KulPhvovlIvXe6Kt64SQBYYGe9KD2Vvauhm1AhF\nRtiZ7HXhI6MrRHAEErxleGOe7sWYmpKT7qnHxds7iKswv4shv67iUjVW1akx\nsdap\r\n=g/eV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDPkbk2JjyrMClB2k1tyJOoYtB5tYEEnYU6g8yttsqiVAiEA9PBQl/vZl/auNeDG8jxmw1uddTFsB3FxzCy87LSP5hM="}]},"maintainers":[{"email":"pa.lafrance@gmail.com","name":"anonymous"},{"email":"yohan.belval@gmail.com","name":"anonymous"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_2.2.1_1541687001713_0.8462886214187562"},"_hasShrinkwrap":false},"2.2.3":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app v2.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/sharegate/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/sharegate/craco/issues"},"homepage":"https://github.com/sharegate/craco","engines":{"node":">=6"},"bin":{"craco":"./bin/craco.js"},"peerDependencies":{"react-scripts":"^2.1.1"},"devDependencies":{"react-scripts":"2.1.1"},"dependencies":{"cross-spawn":"6.0.5","lodash.mergewith":"4.6.1","webpack-merge":"4.1.4"},"version":"2.2.3","gitHead":"702006083f4d854b74556149702585a1ceb57ec0","_id":"@craco/craco@2.2.3","_npmVersion":"6.4.1","_nodeVersion":"10.11.0","_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"dist":{"integrity":"sha512-sdcxGwvPBmYb8x2GqgffWq6Dci2+MSDRFzAH0kaujXSuqTvLVherreiiYuIgqkgTTYOBieDBZ433mk4U7mW6gQ==","shasum":"aa91eb3fca2c7f8228e6c9e5bb48ffe6325764af","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-2.2.3.tgz","fileCount":28,"unpackedSize":71795,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb5btGCRA9TVsSAnZWagAAzYAQAIJx4KkD7JJanVNc8qBU\nsGasbmhezvB3cObCmO0+ozgQnKGYzf6pYrAWM8HsiLwz0JDqrgO18bZ/VVn7\nC/Z/NCfZEgXA7T3QrAj3sPcHTKPw+cVmqwcDYLtlWnhJTlPp9qCw8F1aVkJY\nKDTc8KhaF81ifke4wC78399BtOc/ntsbDiPfQn4VBnQlW3dntw4LlORMYHQ6\nhxw3OAMjnOk7i8BYDfeOCQh2FVaz5KoW0J0tht9o3tmvcIevUJczSsPyIrw1\nwdTyL+3qdmq6rQD4h8I4xq4guXUcfKMH+jPGhJyD+QHJF4tROoDRXCJ3stUA\nhdwkuR/IO19FIcaTP/qQDDQn5tqjHZfKxI1/MNS7M+yMIHwJCYKDPp7GZpsD\n7d4sbIqa/snJ392Rl3NsK6/2xNwSDz+R43gA/Poprm2w0C5trh3O2ur8sQp2\nQazc7cDnZ11To15rPPn787OQiFTW5GZOWwt7yQy8LL6sW8Nef0Il5yNnf+nP\nt1cCTOReOxzu4LoE3oQNIZu7C2hja5I2pnrs5KpXNu7Vhx0zK+9tP+ptMe2s\nkWTQtk2Rzm6bJeUoit7mnDewo9CyE618QmEVKcCtTaNfna17ftPEBv1vmUQE\nIYmwcY3V5VCHm0vM7q7YEUpSLKU4hV3lvsd4QaQ+GWJp0LwnVTKfPCn/p8t1\nLc7O\r\n=R1mY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC2b49hXdcqNI8ufZuSJ/D2qQTJqonWVg1ptttQM5E5vgIhAP7WGUJHZnOsOsbgIyZV6aHNUWpaOyIvo62eIMYq5l93"}]},"maintainers":[{"email":"pa.lafrance@gmail.com","name":"anonymous"},{"email":"yohan.belval@gmail.com","name":"anonymous"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_2.2.3_1541782341780_0.27299046458929666"},"_hasShrinkwrap":false},"2.4.0":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app v2.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/sharegate/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/sharegate/craco/issues"},"homepage":"https://github.com/sharegate/craco","engines":{"node":">=6"},"bin":{"craco":"./bin/craco.js"},"peerDependencies":{"react-scripts":"*"},"devDependencies":{"react-scripts":"2.1.1"},"dependencies":{"cross-spawn":"6.0.5","lodash.mergewith":"4.6.1","webpack-merge":"4.1.4"},"version":"2.4.0","gitHead":"2561b45afcad5614233df95ae55ce117be1218d6","_resolved":"","_integrity":"","_from":"file:craco-craco-2.4.0.tgz","_id":"@craco/craco@2.4.0","_npmVersion":"6.4.1","_nodeVersion":"10.11.0","_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"dist":{"integrity":"sha512-Zb1qAfBK23SisnW4ksoevztxNyRBRzox8pnJixvpfwBLgb2PJMeDEr3hztA3eXnLnSWH7JTcOcV3E1GrhhJorQ==","shasum":"9ff31d00d88a2fffc7f87a812c03b1e257e64fa1","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-2.4.0.tgz","fileCount":29,"unpackedSize":78817,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb7NAPCRA9TVsSAnZWagAAXvgP/jsqmkIQ8ElEP+6sq3n3\n1lOy6qyCsFg5oONgP9lVJa9x3oV7tbEghsPOcevLfwVsafx0cXII9qBYfGHa\nkIZeDjipKfrMOg6hLPwagYkVFnOnSJKnhersjkwWwH55sU6Nxf2rjUwUwhdL\noP55RdgT82FDB/sn7CBhfdXUxgZmz5j52K4lXskLpxS04Wl3tZYWzP0uIU3h\nD2RGoA7/fd0o/7cHIQv1NKJvgM0g2mR/mRNNSLpyYkxRM+4E2ps6jpf55hpI\nwsnbfGCEnBaqK+/0az/Bl4jB7yMOtnU3VD+t4z1KTsq6t8T+hBl8VTnfSwhC\naRAn1+YBzTWqZk/qJ3a98MTNESiHh1j+xgj3i+gC66aZMqsjS1tQaNP3h7GR\nLwpiHddRJitT05LRrIgq18LlpoqKrw1eDnwqNKWs+h2t8cuZimfmwC/w+qwg\nOrVnHQUIH8k5BjhYw4mrwgBoczwp4CNz0DcI/tG4rdsoGgZDyutB84SIlCTV\nVkYr4LQYH4wBpqSmV80MVJp234IItq84gxHpr3VRuGQi45InaFhD1WOAzLuG\njE8bdimNXCHN1co+CHNA0sIV/9l7sUBZQQqw2fdglL9FBBMS55ZjvCVtStoP\n0kcTQHVS9jq22ap44UmEU6dXO62K+2KF5L8BHvCV38CXPwiXSZPF2j1dtG7G\n82Y2\r\n=U1lj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCo/N4rGhJQGMqaeIdQCGbWAdEROLFCHXkP5Su5wn+D7gIgQh/Kwhq0e9mcZAzAqbmJ3P3IyN2X5gKQx5157isA268="}]},"maintainers":[{"email":"pa.lafrance@gmail.com","name":"anonymous"},{"email":"yohan.belval@gmail.com","name":"anonymous"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_2.4.0_1542246414681_0.7292949777391844"},"_hasShrinkwrap":false},"2.5.0":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app v2.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/sharegate/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/sharegate/craco/issues"},"homepage":"https://github.com/sharegate/craco","engines":{"node":">=6"},"bin":{"craco":"./bin/craco.js"},"peerDependencies":{"react-scripts":"*"},"devDependencies":{"react-scripts":"2.1.1"},"dependencies":{"cross-spawn":"6.0.5","lodash.mergewith":"4.6.1","webpack-merge":"4.1.4"},"version":"2.5.0","gitHead":"e28d736a87842e5b392ac13b4713821ab111c1ea","_resolved":"","_integrity":"","_from":"file:craco-craco-2.5.0.tgz","_id":"@craco/craco@2.5.0","_npmVersion":"6.4.1","_nodeVersion":"10.11.0","_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"dist":{"integrity":"sha512-vD/yWCoWs2u6EHLn1UD0OxAu9f4ISEls72GOWrJg2NzKJmwcRNG/AjFYJfeVHprQ6cPKYNGKltaFRPbzAydWpw==","shasum":"149df649d9d0fb0fcd0994fc597afd2f975b280b","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-2.5.0.tgz","fileCount":29,"unpackedSize":78436,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb7jSrCRA9TVsSAnZWagAAUjoP+wfjmgZ0ipYvJqhG8JNC\nAm+j9RwwppyGFwdu3ep+5hjkqm9wkNjHDFdmuIBRq9Vn4kpk2q6tzpk6URsm\nid0p7mYMxhiCMQv80T/O24+DMJ4ZZTzYtDvFhEujp/IhrZUkFgt1Mgqa1XvZ\nuzJU3V1fbZ0wvfjxBVYx1t+cpBpe2aYS37vUSoauGhOPJB+DoFE7fEtWRsgY\nbUrifDk8KFih/aHxqR4X1chxoP9K5kXzI+ydXkwA3jks2at0Pubm/YnsK7Ix\nSoNix6AZx3L3BltkMtrhyM3lnxpHNsPjLo+wrToj04ZZPyIwxWVe7BzSJ372\nMdWl1nwy+iRNpaLxyND6Gek1N9/Vw72tc15BRofYZOeVS0cYTeSIYtQQlLaN\nBvSWuQomc0wDr8G747iEkWj7fR2K9Q3ib5U4V4hyjgT2f0mDOh4au/sVUuu2\nfxw/jlujt6dvoKqBzgrkSaux1Ns7FRAfUM8yqjuwLPFtKEzXaScUPFpqT7+F\nN621FA6IjTDQHnzjjy7O52gZkFbExEtqujVSWRu0C/4mxTlfpmLRzhnOTh05\nEyn9WUuyZmjfXAwpPbVja55VLAEFAGa+W+vhxcFqf3FgBTekrQby82TXaa7v\nR4+ACphkyxspqjnHplUhxSubhN4lM4E8DLVR/eiN4lSkj5e3bJ2eRmVrTwNz\nIf0O\r\n=M/m6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCMdV4nEKBVpyoOka6emZpcv+JN/0/l7X3YtZQnGe3TWwIgIQQPVN01N6akoPkuwhwWwpsUdhLFXQsZTLI6KN0hMfc="}]},"maintainers":[{"email":"pa.lafrance@gmail.com","name":"anonymous"},{"email":"yohan.belval@gmail.com","name":"anonymous"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_2.5.0_1542337706980_0.18353040187193326"},"_hasShrinkwrap":false},"3.0.0":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app v2.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/sharegate/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/sharegate/craco/issues"},"homepage":"https://github.com/sharegate/craco","engines":{"node":">=6"},"bin":{"craco":"./bin/craco.js"},"peerDependencies":{"react-scripts":"*"},"devDependencies":{"react-scripts":"2.1.1"},"dependencies":{"cross-spawn":"6.0.5","lodash.mergewith":"4.6.1","webpack-merge":"4.1.4"},"version":"3.0.0","gitHead":"8236b3aa62598b47d534ed2106cffafcc0c2177f","_resolved":"","_integrity":"","_from":"file:craco-craco-3.0.0.tgz","readme":"# craco [![Build Status](https://travis-ci.org/sharegate/craco.svg?branch=master)](https://travis-ci.org/sharegate/craco) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-green.svg)](https://github.com/sharegate/craco/pulls)\r\n\r\n**C**reate **R**eact **A**pp **C**onfiguration **O**verride is an easy and comprehensible configuration layer for create-react-app v2.\r\n\r\nGet all the benefits of create-react-app **and** customization without using 'eject' by adding a single `craco.config.js` file at the root of your application and customize your eslint, babel, postcss configurations and many more.\r\n\r\nAll you have to do is create your app using [create-react-app](https://github.com/facebook/create-react-app/) and customize the configuration with a `craco.config.js` file.\r\n\r\n- [CLI Options](#cli-options) - Available CLI options.\r\n- [Configuration Overview](#configuration-overview) - Quickly see how you can configure your CRA installation with this plugin.\r\n- [Recipes](https://github.com/sharegate/craco/tree/master/recipes) – Short recipes for common use cases.\r\n- [Available Plugins](https://github.com/sharegate/craco#community-maintained-plugins) - Plugins maintained by the community.\r\n- [Develop a Plugin](#develop-a-plugin) - How to develop a plugin for `craco`.\r\n\r\n**Acknowledgements:**\r\n\r\nWe 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.\r\n\r\nAlso, please note that the configuration style of this plugin has been greatly influenced by the way [Vue CLI](https://cli.vuejs.org/guide/) does it.\r\n\r\n**Please Note:**\r\n\r\nBy 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.\r\n\r\n## Installation\r\n\r\nInstall the plugin from **npm**:\r\n\r\n```bash\r\n$ yarn add @craco/craco\r\n\r\n# OR\r\n\r\n$ npm install @craco/craco --save\r\n```\r\n\r\nCreate a `craco.config.js` file in the root directory:\r\n\r\n```\r\nmy-app\r\n├── node_modules\r\n├── craco.config.js\r\n└── package.json\r\n```\r\n\r\nExport your configuration as an **object literal**:\r\n\r\n```javascript\r\n/* craco.config.js */\r\n\r\nmodule.exports = {\r\n    ...\r\n}\r\n```\r\n\r\nor a **function**:\r\n\r\n```javascript\r\n/* craco.config.js */\r\n\r\nmodule.exports = function({ env, paths }) {\r\n    return {\r\n        ...\r\n    };\r\n}\r\n```\r\n\r\nUpdate the existing calls to `react-scripts` in the `scripts` section of your `package.json` file to use the `craco` CLI:\r\n\r\n```diff\r\n/* package.json */\r\n\r\n\"scripts\": {\r\n-   \"start\": \"react-scripts start\",\r\n+   \"start\": \"craco start\",\r\n-   \"build\": \"react-scripts build\",\r\n+   \"build\": \"craco build\"\r\n-   \"test\": \"react-scripts test\",\r\n+   \"test\": \"craco test\"\r\n}\r\n```\r\n\r\nStart your app for development:\r\n\r\n```bash\r\n$ npm start\r\n```\r\n\r\nOr build your app:\r\n\r\n```bash\r\n$ npm run build\r\n```\r\n\r\n## CLI Options\r\n\r\nWhen you execute `craco start` or `craco build` a few options are available.\r\n\r\nTo change the location of the configuration file:\r\n\r\n```javascript\r\n\"scripts\": {\r\n    \"start\": \"craco start --config config/craco-config-with-custom-name.js\"\r\n}\r\n```\r\n\r\nTo use with a **yarn workspace** or any **monorepo setup** that follows the popular convention `packages/*`:\r\n\r\n```javascript\r\n\"scripts\": {\r\n    \"start\": \"craco start --workspace\"\r\n}\r\n```\r\n\r\nTo use with a different version of `react-scripts`:\r\n\r\n```javascript\r\n\"scripts\": {\r\n    \"start\": \"craco start --scripts-version react-scripts-ts\"\r\n}\r\n```\r\n\r\nTo provided a custom path for the `react-scripts` folder:\r\n\r\n```javascript\r\n\"scripts\": {\r\n    \"start\": \"craco start --react-scripts ../../react-scripts-with-custom-name\"\r\n}\r\n```\r\n\r\n_The provided `react-scripts` folder path must be relative to the current working directory._\r\n\r\n_If `--react-scripts` is provided, `--workspace` and `--scripts-version` will be ignored._\r\n\r\nTo activate **verbose** logging:\r\n\r\n```javascript\r\n\"scripts\": {\r\n    \"start\": \"craco start --verbose\"\r\n}\r\n```\r\n\r\n## Configuration Overview\r\n\r\nWhen the property **mode** is available there are 2 possible values:\r\n- `extends`: the provided configuration will extends the CRA settings (**default mode**)\r\n- `file`: the CRA settings will be reseted 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.\r\n\r\n```javascript\r\nconst { paths, when, whenDev, whenProd, whenTest, ESLINT_MODES, POSTCSS_MODES } = require(\"@craco/craco\");\r\n\r\nmodule.exports = {\r\n    style: {\r\n        modules: {\r\n            localIdentName: \"\"\r\n        },\r\n        css: {\r\n            loaderOptions: { /* Any css-loader configuration options: https://github.com/webpack-contrib/css-loader. */ },\r\n            loaderOptions: (cssLoaderOptions, { env, paths }) => { return cssLoaderOptions; }\r\n        },\r\n        sass: {\r\n            loaderOptions: { /* Any sass-loader configuration options: https://github.com/webpack-contrib/sass-loader. */ },\r\n            loaderOptions: (sassLoaderOptions, { env, paths }) => { return sassLoaderOptions; }\r\n        },\r\n        postcss: {\r\n            mode: \"extends\" /* (default value) */ || \"file\",\r\n            plugins: [],\r\n            loaderOptions: { /* Any postcss-loader configuration options: https://github.com/postcss/postcss-loader. */ },\r\n            loaderOptions: (postcssLoaderOptions, { env, paths }) => { return postcssLoaderOptions; }\r\n        }\r\n    },\r\n    eslint: {\r\n        enable: true,\r\n        mode: \"extends\" /* (default value) */ || \"file\",\r\n        configure: { /* Any eslint configuration options: https://eslint.org/docs/user-guide/configuring */ },\r\n        configure: (eslintConfig, { env, paths }) => { return eslintConfig; },\r\n        loaderOptions: { /* Any eslint-loader configuration options: https://github.com/webpack-contrib/eslint-loader. */ },\r\n        loaderOptions: (eslintOptions, { env, paths }) => { return eslintOptions; }\r\n    },\r\n    babel: {\r\n        presets: [],\r\n        plugins: [],\r\n        loaderOptions: { /* Any babel-loader configuration options: https://github.com/babel/babel-loader. */ },\r\n        loaderOptions: (babelLoaderOptions, { env, paths }) => { return babelLoaderOptions; }\r\n    },\r\n    webpack: {\r\n        alias: {},\r\n        plugins: [],\r\n        configure: { /* Any webpack configuration options: https://webpack.js.org/configuration */ },\r\n        configure: (webpackConfig, { env, paths }) => { return webpackConfig; }\r\n    },\r\n    jest: {\r\n        babel: {\r\n            addPresets: true, // (default value)\r\n            addPlugins: true  // (default value)\r\n        },\r\n        configure: { /* Any Jest configuration options: https://jestjs.io/docs/en/configuration. */ },\r\n        configure: (jestConfig, { env, paths, resolve, rootDir }) => { return jestConfig; }\r\n    },\r\n    devServer: { /* Any devServer configuration options: https://webpack.js.org/configuration/dev-server/#devserver. */ },\r\n    devServer: (devServerConfig, { env, paths, proxy, allowedHost }) => { return devServerConfig; },\r\n    plugins: [\r\n        {\r\n            plugin: {\r\n                overrideCracoConfig: ({ cracoConfig, pluginOptions, context: { env, paths } }) => { return cracoConfig; },\r\n                overrideWebpackConfig: ({ webpackConfig, cracoConfig, pluginOptions, context: { env, paths } }) => { return webpackConfig; },\r\n                overrideJestConfig: ({ jestConfig, cracoConfig, pluginOptions, context: { env, paths, resolve, rootDir } }) => { return jestConfig };\r\n            },\r\n            options: {}\r\n        }\r\n    ]\r\n};\r\n```\r\n\r\n## Develop a plugin\r\n\r\nThere are 3 functions available to a plugin:\r\n- `overrideCracoConfig`: Let a plugin customize the config object before it's process by `craco`.\r\n- `overrideWebpackConfig`: Let a plugin customize the `webpack` config that will be used by CRA.\r\n- `overrideJestConfig`: Let a plugin customize the `Jest` config that will be used by CRA.\r\n\r\n**Important:**\r\n\r\nEvery functions must return the updated config object.\r\n\r\n### overrideCracoConfig\r\n\r\nThe function `overrideCracoConfig` let a plugin override the config object **before** it's process by `craco`.\r\n\r\nIf a plugin define the function, it will be called with the config object read from the `craco.config.js` file provided by the consumer.\r\n\r\n*The function must return a valid config object, otherwise `craco` will throw an error.*\r\n\r\nThe function will be called with a single object argument having the following structure:\r\n\r\n```javascript\r\n{\r\n    cracoConfig: \"The config object read from the craco.config.js file provided by the consumer\",\r\n    pluginOptions: \"The plugin options provided by the consumer\",\r\n    context: {\r\n        env: \"The current NODE_ENV (development, production, etc..)\",\r\n        paths: \"An object that contains all the paths used by CRA\"\r\n    }\r\n}\r\n```\r\n\r\n#### Example\r\n\r\nPlugin:\r\n\r\n```javascript\r\n/* craco-plugin-log-craco-config.js */\r\n\r\nmodule.exports = {\r\n    overrideCracoConfig: ({ cracoConfig, pluginOptions, context: { env, paths } }) => {\r\n        if (pluginOptions.preText) {\r\n            console.log(pluginOptions.preText);\r\n        }\r\n\r\n        console.log(JSON.stringify(craconfig, null, 4));\r\n\r\n        // Always return the config object.\r\n        return cracoConfig;\r\n    }\r\n};\r\n```\r\n\r\nRegistration (in a `craco.config.js` file):\r\n\r\n```javascript\r\nconst logCracoConfigPlugin = require(\"./craco-plugin-log-craco-config\");\r\n\r\nmodule.exports = {\r\n    ...\r\n    plugins: [\r\n        { plugin: logCracoConfigPlugin, options: { preText: \"Will log the craco config:\" } }\r\n    ]\r\n};\r\n```\r\n\r\n### overrideWebpackConfig\r\n\r\nThe function `overrideWebpackConfig` let a plugin override the `webpack` config object **after** it's been customized by `craco`.\r\n\r\n*The function must return a valid config object, otherwise `craco` will throw an error.*\r\n\r\nThe function will be called with a single object argument having the following structure:\r\n\r\n```javascript\r\n{\r\n    webpackConfig: \"The webpack config object already customized by craco\",\r\n    cracoConfig: \"The configuration object read from the craco.config.js file provided by the consumer\",\r\n    pluginOptions: \"The plugin options provided by the consumer\",\r\n    context: {\r\n        env: \"The current NODE_ENV (development, production, etc..)\",\r\n        paths: \"An object that contains all the paths used by CRA\"\r\n    }\r\n}\r\n```\r\n\r\n#### Example\r\n\r\nPlugin:\r\n\r\n```javascript\r\n/* craco-plugin-log-webpack-config.js */\r\n\r\nmodule.exports = {\r\n    overrideWebpackConfig: ({ webpackConfig, cracoConfig, pluginOptions, context: { env, paths } }) => {\r\n        if (pluginOptions.preText) {\r\n            console.log(pluginOptions.preText);\r\n        }\r\n\r\n        console.log(JSON.stringify(webpackConfig, null, 4));\r\n\r\n        // Always return the config object.\r\n        return webpackConfig;\r\n    }\r\n};\r\n```\r\n\r\nRegistration (in a `craco.config.js` file):\r\n\r\n```javascript\r\nconst logWebpackConfigPlugin = require(\"./craco-plugin-log-webpack-config\");\r\n\r\nmodule.exports = {\r\n    ...\r\n    plugins: [\r\n        { plugin: logWebpackConfigPlugin, options: { preText: \"Will log the webpack config:\" } }\r\n    ]\r\n};\r\n```\r\n\r\n### overrideJestConfig\r\n\r\nThe function `overrideJestConfig` let a plugin override the `Jest` config object **after** it's been customized by `craco`.\r\n\r\n*The function must return a valid config object, otherwise `craco` will throw an error.*\r\n\r\nThe function will be called with a single object argument having the following structure:\r\n\r\n```javascript\r\n{\r\n    jestConfig: \"The Jest config object already customized by craco\",\r\n    cracoConfig: \"The configuration object read from the craco.config.js file provided by the consumer\",\r\n    pluginOptions: \"The plugin options provided by the consumer\",\r\n    context: {\r\n        env: \"The current NODE_ENV (development, production, etc..)\",\r\n        paths: \"An object that contains all the paths used by CRA\",\r\n        resolve: \"Provided by CRA\",\r\n        rootDir: \"Provided by CRA\"\r\n    }\r\n}\r\n```\r\n\r\n#### Example\r\n\r\nPlugin:\r\n\r\n```javascript\r\n/* craco-plugin-log-jest-config.js */\r\n\r\nmodule.exports = {\r\n    overrideJestConfig: ({ jestConfig, cracoConfig, pluginOptions, context: { env, paths, resolve, rootDir } }) => {\r\n        if (pluginOptions.preText) {\r\n            console.log(pluginOptions.preText);\r\n        }\r\n\r\n        console.log(JSON.stringify(jestConfig, null, 4));\r\n\r\n        // Always return the config object.\r\n        return jestConfig;\r\n    }\r\n};\r\n```\r\n\r\nRegistration (in a `craco.config.js` file):\r\n\r\n```javascript\r\nconst logJestConfigPlugin = require(\"./craco-plugin-log-jest-config\");\r\n\r\nmodule.exports = {\r\n    ...\r\n    plugins: [\r\n        { plugin: logJestConfigPlugin, options: { preText: \"Will log the Jest config:\" } }\r\n    ]\r\n};\r\n```\r\n\r\n### Utility functions\r\n\r\nA few utility functions are provided by `craco` to develop a plugin:\r\n\r\n```javascript\r\nconst { getLoader, getLoaders, removeLoader, loaderByName, throwUnexpectedConfigError } = require(\"@craco/craco\");\r\n```\r\n\r\n#### getLoader\r\n\r\nRetrieve the **first** loader that match the specified criteria from the webpack config.\r\n\r\nReturns:\r\n\r\n```javascript\r\n{\r\n    isFound: true | false,\r\n    match: {\r\n        loader,\r\n        parent,\r\n        index\r\n    }\r\n}\r\n```\r\n\r\nUsage:\r\n\r\n```javascript\r\nconst { getLoader, loaderByName } = require(\"@craco/craco\");\r\n\r\nconst { isFound, match } = getLoader(webpackConfig, loaderByName(\"eslint-loader\"));\r\n\r\nif (isFound) {\r\n    // do stuff...\r\n}\r\n```\r\n\r\n#### getLoaders\r\n\r\nRetrieve **all** the loaders that match the specified criteria from the webpack config.\r\n\r\nReturns:\r\n\r\n```javascript\r\n{\r\n    hasFoundAny: true | false,\r\n    matches: [\r\n        {\r\n            loader,\r\n            parent,\r\n            index\r\n        }\r\n    ]\r\n}\r\n```\r\n\r\nUsage:\r\n\r\n```javascript\r\nconst { getLoaders, loaderByName } = require(\"@craco/craco\");\r\n\r\nconst { hasFoundAny, matches } = getLoaders(webpackConfig, loaderByName(\"babel-loader\"));\r\n\r\nif (hasFoundAny) {\r\n    matches.forEach(x => {\r\n        // do stuff...\r\n    });\r\n}\r\n```\r\n\r\n#### removeLoaders\r\n\r\nRemove **all** the loaders that match the specified criteria from the webpack config.\r\n\r\nReturns:\r\n\r\n```javascript\r\n{\r\n    hasRemovedAny:: true | false,\r\n    removedCount:: int\r\n}\r\n```\r\n\r\nUsage:\r\n\r\n```javascript\r\nconst { removeLoaders, loaderByName } = require(\"@craco/craco\");\r\n\r\nremoveLoaders(webpackConfig, loaderByName(\"eslint-loader\"));\r\n```\r\n\r\n#### addBeforeLoader\r\n\r\nAdd a new *loader* **before** the loader that match specified criteria to the webpack config.\r\n\r\nReturns:\r\n\r\n```javascript\r\n{\r\n    isAdded: true | false\r\n}\r\n```\r\n\r\nUsage:\r\n\r\n```javascript\r\nconst { addBeforeLoader, loaderByName } = require(\"@craco/craco\");\r\n\r\nconst myNewWebpackLoader = {\r\n    loader: require.resolve(\"tslint-loader\")\r\n};\r\n\r\naddBeforeLoader(webpackConfig, loaderByName(\"eslint-loader\"), myNewWebpackLoader);\r\n```\r\n\r\n#### addBeforeLoaders\r\n\r\nAdd a new *loader* **before** all the loaders that match specified criteria to the webpack config.\r\n\r\nReturns:\r\n\r\n```javascript\r\n{\r\n    isAdded: true | false,\r\n    addedCount: int\r\n}\r\n```\r\n\r\nUsage:\r\n\r\n```javascript\r\nconst { addBeforeLoaders, loaderByName } = require(\"@craco/craco\");\r\n\r\nconst myNewWebpackLoader = {\r\n    loader: require.resolve(\"tslint-loader\")\r\n};\r\n\r\naddBeforeLoaders(webpackConfig, loaderByName(\"eslint-loader\"), myNewWebpackLoader);\r\n```\r\n\r\n#### addAfterLoader\r\n\r\nAdd a new *loader* **after** the loader that match specified criteria to the webpack config.\r\n\r\nReturns:\r\n\r\n```javascript\r\n{\r\n    isAdded: true | false\r\n}\r\n```\r\n\r\nUsage:\r\n\r\n```javascript\r\nconst { addAfterLoader, loaderByName } = require(\"@craco/craco\");\r\n\r\nconst myNewWebpackLoader = {\r\n    loader: require.resolve(\"tslint-loader\")\r\n};\r\n\r\naddAfterLoader(webpackConfig, loaderByName(\"eslint-loader\"), myNewWebpackLoader);\r\n```\r\n\r\n#### addAfterLoaders\r\n\r\nAdd a new *loader* **after** all the loaders that match specified criteria to the webpack config.\r\n\r\nReturns:\r\n\r\n```javascript\r\n{\r\n    isAdded: true | false,\r\n    addedCount: int\r\n}\r\n```\r\n\r\nUsage:\r\n\r\n```javascript\r\nconst { addAfterLoaders, loaderByName } = require(\"@craco/craco\");\r\n\r\nconst myNewWebpackLoader = {\r\n    loader: require.resolve(\"tslint-loader\")\r\n};\r\n\r\naddAfterLoaders(webpackConfig, loaderByName(\"eslint-loader\"), myNewWebpackLoader);\r\n```\r\n\r\n#### throwUnexpectedConfigError\r\n\r\nThrow 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.\r\n\r\nRaises an error and crashes Node.js:\r\n\r\n```bash\r\n$ yarn start\r\nyarn run v1.12.3\r\n$ craco start\r\n/path/to/your/app/craco.config.js:23\r\n            throw new Error(\r\n            ^\r\n\r\n    Error: Can't find eslint-loader in the webpack config!\r\n\r\n    This error probably occurred because you updated react-scripts or craco. Please try updating craco-less to the latest version:\r\n\r\n       $ yarn upgrade craco-less\r\n\r\n    Or:\r\n\r\n       $ npm update craco-less\r\n\r\n    If that doesn't work, craco-less needs to be fixed to support the latest version.\r\n    Please check to see if there's already an issue in the ndbroadbent/craco-less repo:\r\n\r\n       * https://github.com/ndbroadbent/craco-less/issues?q=is%3Aissue+webpack+eslint-loader\r\n\r\n    If not, please open an issue and we'll take a look. (Or you can send a PR!)\r\n\r\n    You might also want to look for related issues in the craco and create-react-app repos:\r\n\r\n       * https://github.com/sharegate/craco/issues?q=is%3Aissue+webpack+eslint-loader\r\n       * https://github.com/facebook/create-react-app/issues?q=is%3Aissue+webpack+eslint-loader\r\n\r\n    at throwUnexpectedConfigError (/path/to/your/app/craco.config.js:23:19)\r\n    ...\r\n```\r\n\r\nUsage:\r\n\r\n```javascript\r\nconst { getLoader, loaderByName, throwUnexpectedConfigError } = require(\"@craco/craco\");\r\n\r\n// Create a helper function if you need to call this multiple times\r\nconst throwError = (message, githubIssueQuery) =>\r\n    throwUnexpectedConfigError({\r\n        packageName: \"craco-less\",\r\n        githubRepo: \"ndbroadbent/craco-less\",\r\n        message,\r\n        githubIssueQuery,\r\n    });\r\n\r\nconst { isFound, match } = getLoader(webpackConfig, loaderByName(\"eslint-loader\"));\r\n\r\nif (!isFound) {\r\n    throwError(\"Can't find eslint-loader in the webpack config!\", \"webpack+eslint-loader\")\r\n}\r\n```\r\n\r\nOptions:\r\n\r\n```javascript\r\n{\r\n    message: \"An error message explaining what went wrong\",\r\n    packageName: \"NPM package name\",\r\n    githubRepo: \"GitHub repo where people can open an issue. Format: username/repo\",\r\n    githubIssueQuery: \"Search string to find related issues\"\r\n}\r\n```\r\n\r\n> Only `message` is required.\r\n\r\n## Acknowledgements\r\n\r\n[@timarney](https://github.com/timarney) for having created [react-app-rewired](https://github.com/timarney/react-app-rewired).\r\n\r\n## License\r\n\r\nCopyright © 2018, 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/sharegate/craco/blob/master/LICENSE.\r\n","readmeFilename":"README.md","_id":"@craco/craco@3.0.0","_npmVersion":"6.4.1","_nodeVersion":"10.11.0","_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"dist":{"integrity":"sha512-K+Yx6egX7cMH7t1bcRFvBwGPpKLbZMIHIcPpkkk2kFMUbsXba+aSCDCO5qM4x+ZI1c1D5DMZn6efX5Tl9ptrjw==","shasum":"08d4f741c9eb8a71d5d4805f507d7e9eac26411a","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-3.0.0.tgz","fileCount":29,"unpackedSize":76511,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb7x+MCRA9TVsSAnZWagAAfaYP/2w6DmnjCEf98TYbyVh/\nmV++UWYTlykIW2QHr65r0a+1MyRqmLWfAmyc6SVrEGh3STf7swEANFxQjsDV\nWbjggWRUyrh5wQfhyiv103z28WEiddcgig+UmnpnXZLVQVg+hHhzd5nfYpMv\nQvY9ZO2+jkOstSp+7ET7XqBPT9xjFvL35LGuE8qmJCyP+fGfiTBUL6wGaakl\nvhzUPBzWou1LPS9aspHTPu/9iBcrG8cWw1cKSTjjyrQ1LJpvkl3MIfjIfhd9\ngLsOZRJKaY4hUtrcXCG0zxSWUm6iXH+nMBA9zBExLRdUCBr2gxk5YiQEPiTw\n6YkUC/uNgcFSDYuU8MW64MbxHLuvPr997RIfQRdMliYSa+F5vpDLCcy1jnLm\nalMZSH7x7gqbBkcIaGxpODe0pmZGYRGa0Pzmtcl0g6vVYF06vlkJIjHCXirj\ngUpyYHYXmXbUldtQfxQjrhLdn7RoAEA+EwrwVAlySJtNwWiyhwuar+hAODCX\nDAP3+ixCmDB6mzBKYBO07XhMaLGkKEnVPRuSdzTFqKw9gOlXnBvkj+WcD8TD\nx7pOtds0IrZQZ8dr4ctazriH8xPlnvbZjR2GS7pidEMeBXnBabWRAYZhz+qk\nuWrKkbkgZDyseMLtHGdPYb/bIChWfA1s7ruYql5pfi4zZ9oCRsYe7JL+pfQR\nxsgX\r\n=bhIZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE3w1wu1+9giWWN18UlnYlrK0IPRP8zNXc9yoxYdzuezAiEAo09RWzBFlCvSo9T7aIDujSx1tSc3svVn+dUxYoNFyhc="}]},"maintainers":[{"email":"pa.lafrance@gmail.com","name":"anonymous"},{"email":"yohan.belval@gmail.com","name":"anonymous"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_3.0.0_1542397835613_0.28114101859030405"},"_hasShrinkwrap":false},"3.0.1":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app v2.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/sharegate/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/sharegate/craco/issues"},"homepage":"https://github.com/sharegate/craco","engines":{"node":">=6"},"bin":{"craco":"./bin/craco.js"},"peerDependencies":{"react-scripts":"*"},"devDependencies":{"react-scripts":"2.1.1"},"dependencies":{"cross-spawn":"6.0.5","lodash.mergewith":"4.6.1","webpack-merge":"4.1.4"},"version":"3.0.1","gitHead":"a06754c85542548f46afc190826d7663bfaae449","_resolved":"","_integrity":"","_from":"file:craco-craco-3.0.1.tgz","_id":"@craco/craco@3.0.1","_npmVersion":"6.4.1","_nodeVersion":"10.11.0","_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"dist":{"integrity":"sha512-3O80xWO3nMxePhJ2mnkfJP7xsKCiBLm8YYagII962S1N63Ww9C/RmXMLtjc0p5xr6+naqSn6tV0t9GMwVwyBdg==","shasum":"95069d972f38c78c3388ea391437cd6397af143b","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-3.0.1.tgz","fileCount":29,"unpackedSize":76228,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb7zaZCRA9TVsSAnZWagAARf4P/R1+bM7Fc4Nx3o55dZlr\nO5An1uuOoHjj6beQjBn2+Q13RLEkhueSgKw8Z0ZMkkRBYqSSEqM+nLh047UZ\ntEvJ+Gx0NLTAbonJX1Gg2ki8YS2dlf9lsOaWxXkyyFMC9j9v8jV+8/NR5kdj\nwHNADUzLBmBo+75XVGdAzC4Ucy01CNV8jn0jwIAX03mEMBMpv5J2RD3jFKDv\nBMlTtu02kI7y8jcH/2IXWndF6JSzacQmCabH/E+MKIHrAle42HQyZvHGo40R\nEN0Je3AXYU+BT705faRvrrZRjd9p32qPrRHv1JpkARGCi/LL5AvmIYrMkZcR\nuxgUxiw1lNOKa3Hem/alasq9fFOfjq0YoUSjhCr0GofIdCTRxbbyrxBIFeqM\nex9Zdi26Q74lMK5b0hYgKwUOyn8oOkV4uZ/EXAW4c4f+JTZ6f5y72GaOtKc3\nGNMbf6/N3IiXRuunnSvpWJGcoFM3r7An1K0+X0T8usIL2MCepT0uWNun0nqK\nLaXKtwkhMIItUsTmwJ2ZXt0xBwftZyyFjeUE2FiKqRcm8UcqnTSYG413Hibo\nppwfnZ0BUd0aQXivEmHc+En2/OR9y/aJy78VADrae1E4CnlIgrjqgPV+sJZv\npso5bz4qUGrve7Ht1KPq6tzmr/8YLm5O9sjTRRmhCcll2hQJbWZL4BJLAvok\nAL9y\r\n=zQtB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDZgJfvaGOY204RndobzP/q5fougAaOJEqzGh+psmzaEAiBCN1dGVqgnBTl2rfTjxyotEm+sPadYXPGCsKwRdw4Yww=="}]},"maintainers":[{"email":"pa.lafrance@gmail.com","name":"anonymous"},{"email":"yohan.belval@gmail.com","name":"anonymous"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_3.0.1_1542403736097_0.36995440702893356"},"_hasShrinkwrap":false},"3.1.0":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app v2.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/sharegate/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/sharegate/craco/issues"},"homepage":"https://github.com/sharegate/craco","engines":{"node":">=6"},"bin":{"craco":"./bin/craco.js"},"peerDependencies":{"react-scripts":"*"},"devDependencies":{"react-scripts":"2.1.1"},"dependencies":{"cross-spawn":"6.0.5","lodash.mergewith":"4.6.1","webpack-merge":"4.1.4"},"version":"3.1.0","gitHead":"3b8ace8de2eaa83a6afd52aaf5bfd93a292c94bb","_resolved":"","_integrity":"","_from":"file:craco-craco-3.1.0.tgz","_id":"@craco/craco@3.1.0","_npmVersion":"6.4.1","_nodeVersion":"10.11.0","_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"dist":{"integrity":"sha512-Rj8KDqcJqyggf6EZC57zHXGN7oWKDJo1Yc1PSN7i6mQE7Ne3P2KdX0J5q50qHtKlfgScfxbVj3Km79jqLd6HGw==","shasum":"498b538a183a5543a5072dcf4eb24961eb4d3bc2","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-3.1.0.tgz","fileCount":29,"unpackedSize":77132,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb81ucCRA9TVsSAnZWagAAtzAQAKH0DjKVV+CjkHwS0MO7\n7WXOESP5JTM6iXuwmqwYfEh8GsJYnR1I13nbUmH6sc43uH6OtKUR+IY91RBu\nhRc2NIa+AlKnk02PKyl8OOmpdr54V/CtbRGjanLW6qAJaypSQMeHQvnwQcI7\nCIOEy4EtZqjaKslIioVI+W215Jiwyc2p08qLnTXaFNlKhzXWMEGHmEQeBLNh\n6ztWs39Fjsg3833R7Hnu5N5vKBqK/RKsWeZaSTzhwm3Ms44iqoFIt/xWjY1T\nC4yxwF/Te9gwWp9f2U1XBoVpePwHQwdY1qu8/e6GJtUfuq5F4eUo9GoYx1vX\nTChaBconERBUPKoIRIoRmR49CLE2Bs2ndOdl1iFg3O4KzVy5OcSxEZyY0tFF\nF+MEd/yjYD13BtRd4KP3CBNK7z+cHo4+3f3xAXA87GGI8MkKqIHafZVYyjNH\nJGXXj8Y+oOuQ/0PeT/7C8OZ0xJwrgTC2kf2W8u2Y3tfacgFpBhp0hNYh6xqz\noXF14PELKwTdxETl0Mr0RIM/+08QvXgYIO2dfWDmY1qLjO4tXhPsrF1Wjudd\nLrpTCEzlw5iAsOKxfVgSVKB7I4ppSEtRN4p4RGQfEgI42uCU5Gu0LfM495bs\nDMWQY6pNq8R9H+uSNpqtN+ryFnINkBChXtmfqVfg1OWOyq8elhC1LgPpWOIc\nd6C/\r\n=dPnb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC8oTvHty/ZbVXLCTqkXPbqjtO9BgrYfxG1mq31qSasjAIhAO/NGWcv42poBW8QJkcFaidQ4g7nSiVMWnYm1y1TM2Ag"}]},"maintainers":[{"email":"pa.lafrance@gmail.com","name":"anonymous"},{"email":"yohan.belval@gmail.com","name":"anonymous"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_3.1.0_1542675355855_0.2781058896452171"},"_hasShrinkwrap":false},"3.1.1":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app v2.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/sharegate/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/sharegate/craco/issues"},"homepage":"https://github.com/sharegate/craco","engines":{"node":">=6"},"bin":{"craco":"./bin/craco.js"},"peerDependencies":{"react-scripts":"*"},"devDependencies":{"react-scripts":"2.1.1"},"dependencies":{"cross-spawn":"6.0.5","lodash.mergewith":"4.6.1","webpack-merge":"4.1.4"},"version":"3.1.1","gitHead":"b36790422a9d313ef9e625fd27ebeaea28bcff76","_resolved":"","_integrity":"","_from":"file:craco-craco-3.1.1.tgz","_id":"@craco/craco@3.1.1","_npmVersion":"6.4.1","_nodeVersion":"10.11.0","_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"dist":{"integrity":"sha512-xStoWXLZ3m9YCBrqzRsQ/3dgCn/T0Mkv1HK95Ws5fPnPSYpLZtezUvTAxXwJoDDigaMFMVqARULKimFKSQ2Szw==","shasum":"6a63f73995cf261fa830cd7146797138b225063e","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-3.1.1.tgz","fileCount":30,"unpackedSize":79578,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb+AwTCRA9TVsSAnZWagAA5ZsP/3bUkCYuDk/9VwzFo2Fn\nRZomRdmqr8MxpB7/DHo0lbIFi/o4DLd13/ioFeY3svoZdC6f9pRWqRptrVkO\nKolPWOv4Sza5bdsAEdAQ8MHk/PfhhTw0yTmIugM0vIeoBo8CpUmJ1LqEJD1y\nhEr7KEB4P6yw4wyW2RoXwsy3ILfwz3Swk1d3S40TzckbH+NsAPnfP5PA8S7J\n33rox/NRm2h/CPi1uHBDZj6Rfohspcx0Ivf4qULGYzVan++yW8RqVB2siqA1\nPqMNazp0iAcnkV9e8jkv3rmKJ32Jmv7HLnjnvl5b4y7ebnVq6zq2aLZXqK9Q\nPzorrsve28Q7Z/nkFCmzCspF0XJfDYU4DR3I4A6RleFTAFPc6fKcUzSc/M9N\nw438+mVoobUybhT5SDPtsDA8TPO6MHtgskYBLxQpY/2QxQoiJ6kHmSlo/66R\n5L30dJG1qJ8NG9Sg8y0l/kcytArchH2kR++4AqohvRK5a5N11sRIxlVy9hnB\nNIy7vGaNXKcQa7i+LWZuMWmL9TLDAAwTPThpgLtuzwHRYRPH6NHyzk9kL+QD\nTRUxgOPtM8lOtsfAo49asQUpblH4CZEd2MGSFJZ0Ww5Itor+Se5NZ+pgxMjo\nIe00vHZZ0gGmgS7+RkgPqhqNA/gaFTtBYNfD+Wjw/GhWo/EaI2ok7ZVWjTx7\nbDW1\r\n=BCyJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD40u9X5xpaXFVTbmOK1/9B7QuqxxBcPhKLFM8X7rnVwQIhAIEIQ3i+J0EVJiWaeYoopBz9zWOpPDexCItKUecnHuc/"}]},"maintainers":[{"email":"pa.lafrance@gmail.com","name":"anonymous"},{"email":"yohan.belval@gmail.com","name":"anonymous"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_3.1.1_1542982673949_0.1263625302566196"},"_hasShrinkwrap":false},"3.2.0":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app v2.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/sharegate/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/sharegate/craco/issues"},"homepage":"https://github.com/sharegate/craco","engines":{"node":">=6"},"bin":{"craco":"./bin/craco.js"},"peerDependencies":{"react-scripts":"*"},"devDependencies":{"react-scripts":"2.1.1"},"dependencies":{"cross-spawn":"6.0.5","lodash.mergewith":"4.6.1","webpack-merge":"4.1.4"},"version":"3.2.0","gitHead":"c23acb75d7ba87609f41a6facaf4f25a12faee8d","_resolved":"","_integrity":"","_from":"file:craco-craco-3.2.0.tgz","_id":"@craco/craco@3.2.0","_npmVersion":"6.4.1","_nodeVersion":"10.11.0","_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"dist":{"integrity":"sha512-dvBYkkNE7sm0IwQ71GROb7yZ6CjzcSP4TRPzQVv/IvWaImZwjj2jaJQhM7SqQXb6k3CJ4jDvqrioLbMI/rsXzA==","shasum":"5c9a70b9c17e9c20bdfc761314e9af858e3cbd39","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-3.2.0.tgz","fileCount":31,"unpackedSize":80363,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcBz4PCRA9TVsSAnZWagAAxWUP/jufPrLucFoUWqG6aG68\nr7M4uZO2Z52DtIsZe0Z8ySiczVGM1EeULMxKBAEiUYtcPc+G/ZM9txLAkc+G\ngDfN11THvqs7D76o3+W47pj4qZ41Ub+/YsZ6t+ltHRQDUFa7SluGxc9PCNew\ndXtRY7uNrZCRtAMDQDlW2aO1yXPzC+yhW2A4iYvVqkwHbISCiN7WptMsq4oZ\nQiaRzpAktrB4QK9Aq//uiu1JGgRdYefQ+NLom+6BgrviBLgIIMaFhSSdzU90\ntnhweQPMhYmkmjPf5B14X015cpF99ES0Z3GOsh8shqpgvludYBpimiNcDUgw\nJVIOxdGupc1bS9FSqn7UyQZeU7Bg6007AgMQjJA/UzPHuRNx7KsyBzEAtnUU\nPmvNyb2o+M+dUqBJYM+NHgK6KDf8xIm5sLFmh5d2Mu9Fj+COvAU+4mlg/4qw\n3H38sjenMAWc0HR2A7+ZNxQ3dTU+JTCG8kLHU5nT+kXu+fNnyAEk/wIUQDrW\nnB2sR5znV72t3S3BtsIYJQBjTZfzYxtY5cEfKX2E1AD7/yOGQ7m5ooi+FOqC\nHinyHhb1oR20ijtVMgR7hxmNB+hftH0GDhupGgkXAzIyhVl+tT3fva80PjLE\ndHIAyuw15KckEPI1uv1XcfcRReRxfqEPQX+AW8qVzkHs+cFTZ7UGz3Vsuk3q\nyo9y\r\n=lTRR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDV9Q8KYOfq1hEp7EmT3Q8VeXBuSTx2y4okJ6z/L6GymAiEAiDV8TRAozG54wNoNz733N03kTBmIRuDJvl2Bum8G2H0="}]},"maintainers":[{"email":"pa.lafrance@gmail.com","name":"anonymous"},{"email":"yohan.belval@gmail.com","name":"anonymous"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_3.2.0_1543978510624_0.8584449244341468"},"_hasShrinkwrap":false},"3.2.1-alpha.0":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app v2.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/sharegate/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/sharegate/craco/issues"},"homepage":"https://github.com/sharegate/craco","engines":{"node":">=6"},"bin":{"craco":"./bin/craco.js"},"peerDependencies":{"react-scripts":"*"},"devDependencies":{"react-scripts":"2.1.1"},"dependencies":{"cross-spawn":"6.0.5","lodash.mergewith":"4.6.1","webpack-merge":"4.1.4"},"version":"3.2.1-alpha.0","gitHead":"253f6e53b71e5610327a8846713b4fc7bce4a107","_resolved":"","_integrity":"","_from":"file:craco-craco-3.2.1-alpha.0.tgz","readme":"# craco [![Build Status](https://travis-ci.org/sharegate/craco.svg?branch=master)](https://travis-ci.org/sharegate/craco) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-green.svg)](https://github.com/sharegate/craco/pulls)\n\n**C**reate **R**eact **A**pp **C**onfiguration **O**verride is an easy and comprehensible configuration layer for create-react-app v2.\n\nGet all the benefits of create-react-app **and** customization without using 'eject' by adding a single `craco.config.js` file at the root of your application and customize your eslint, babel, postcss configurations and many more.\n\nAll you have to do is create your app using [create-react-app](https://github.com/facebook/create-react-app/) and customize the configuration with a `craco.config.js` file.\n\n- [CLI Options](#cli-options) - Available CLI options.\n- [Configuration Overview](#configuration-overview) - Quickly see how you can configure your CRA installation with this plugin.\n- [Recipes](https://github.com/sharegate/craco/tree/master/recipes) – Short recipes for common use cases.\n- [Available Plugins](https://github.com/sharegate/craco#community-maintained-plugins) - Plugins maintained by the community.\n- [Develop a Plugin](#develop-a-plugin) - How to develop a plugin for `craco`.\n- [Changelog](https://github.com/sharegate/craco/tree/master/changelog) - List of major changes\n\n**Acknowledgements:**\n\nWe 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.\n\nAlso, please note that the configuration style of this plugin has been greatly influenced by the way [Vue CLI](https://cli.vuejs.org/guide/) does it.\n\n**Please Note:**\n\nBy 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.\n\n## You updated craco and everything falls apart\n\nBefore logging an issue, please consult the [changelog](https://github.com/sharegate/craco/tree/master/changelog).\n\nIf you can't find a solution to your problem in the changelog, log an issue and someone should help you quickly!\n\n## Installation\n\nInstall the plugin from **npm**:\n\n```bash\n$ yarn add @craco/craco\n\n# OR\n\n$ npm install @craco/craco --save\n```\n\nCreate a `craco.config.js` file in the root directory:\n\n```\nmy-app\n├── node_modules\n├── craco.config.js\n└── package.json\n```\n\nExport your configuration as an **object literal**:\n\n```javascript\n/* craco.config.js */\n\nmodule.exports = {\n    ...\n}\n```\n\nor a **function**:\n\n```javascript\n/* craco.config.js */\n\nmodule.exports = function({ env, paths }) {\n    return {\n        ...\n    };\n}\n```\n\nUpdate the existing calls to `react-scripts` in the `scripts` section of your `package.json` file to use the `craco` CLI:\n\n```diff\n/* package.json */\n\n\"scripts\": {\n-   \"start\": \"react-scripts start\",\n+   \"start\": \"craco start\",\n-   \"build\": \"react-scripts build\",\n+   \"build\": \"craco build\"\n-   \"test\": \"react-scripts test\",\n+   \"test\": \"craco test\"\n}\n```\n\nStart your app for development:\n\n```bash\n$ npm start\n```\n\nOr build your app:\n\n```bash\n$ npm run build\n```\n\n## CLI Options\n\nWhen you execute `craco start` or `craco build` a few options are available.\n\nTo change the location of the configuration file:\n\n```javascript\n\"scripts\": {\n    \"start\": \"craco start --config config/craco-config-with-custom-name.js\"\n}\n```\n\nTo use with a **yarn workspace** or any **monorepo setup** that follows the popular convention `packages/*`:\n\n```javascript\n\"scripts\": {\n    \"start\": \"craco start --workspace\"\n}\n```\n\nTo use with a different version of `react-scripts`:\n\n```javascript\n\"scripts\": {\n    \"start\": \"craco start --scripts-version react-scripts-ts\"\n}\n```\n\nTo provided a custom path for the `react-scripts` folder:\n\n```javascript\n\"scripts\": {\n    \"start\": \"craco start --react-scripts ../../react-scripts-with-custom-name\"\n}\n```\n\n_The provided `react-scripts` folder path must be relative to the current working directory._\n\n_If `--react-scripts` is provided, `--workspace` and `--scripts-version` will be ignored._\n\nTo activate **verbose** logging:\n\n```javascript\n\"scripts\": {\n    \"start\": \"craco start --verbose\"\n}\n```\n\n## Configuration Overview\n\nWhen the property **mode** is available there are 2 possible values:\n- `extends`: the provided configuration will extends the CRA settings (**default mode**)\n- `file`: the CRA settings will be reseted 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.\n\n```javascript\nconst { paths, when, whenDev, whenProd, whenTest, ESLINT_MODES, POSTCSS_MODES } = require(\"@craco/craco\");\n\nmodule.exports = {\n    style: {\n        modules: {\n            localIdentName: \"\"\n        },\n        css: {\n            loaderOptions: { /* Any css-loader configuration options: https://github.com/webpack-contrib/css-loader. */ },\n            loaderOptions: (cssLoaderOptions, { env, paths }) => { return cssLoaderOptions; }\n        },\n        sass: {\n            loaderOptions: { /* Any sass-loader configuration options: https://github.com/webpack-contrib/sass-loader. */ },\n            loaderOptions: (sassLoaderOptions, { env, paths }) => { return sassLoaderOptions; }\n        },\n        postcss: {\n            mode: \"extends\" /* (default value) */ || \"file\",\n            plugins: [],\n            env: {\n                autoprefixer: { /* Any autoprefixer options: https://github.com/postcss/autoprefixer#options */ },\n                stage: 3, /* Any valid stages: https://cssdb.org/#staging-process. */\n                features: { /* Any CSS features: https://preset-env.cssdb.org/features. */ }\n            },\n            loaderOptions: { /* Any postcss-loader configuration options: https://github.com/postcss/postcss-loader. */ },\n            loaderOptions: (postcssLoaderOptions, { env, paths }) => { return postcssLoaderOptions; }\n        }\n    },\n    eslint: {\n        enable: true,\n        mode: \"extends\" /* (default value) */ || \"file\",\n        configure: { /* Any eslint configuration options: https://eslint.org/docs/user-guide/configuring */ },\n        configure: (eslintConfig, { env, paths }) => { return eslintConfig; },\n        loaderOptions: { /* Any eslint-loader configuration options: https://github.com/webpack-contrib/eslint-loader. */ },\n        loaderOptions: (eslintOptions, { env, paths }) => { return eslintOptions; }\n    },\n    babel: {\n        presets: [],\n        plugins: [],\n        loaderOptions: { /* Any babel-loader configuration options: https://github.com/babel/babel-loader. */ },\n        loaderOptions: (babelLoaderOptions, { env, paths }) => { return babelLoaderOptions; }\n    },\n    webpack: {\n        alias: {},\n        plugins: [],\n        configure: { /* Any webpack configuration options: https://webpack.js.org/configuration */ },\n        configure: (webpackConfig, { env, paths }) => { return webpackConfig; }\n    },\n    jest: {\n        babel: {\n            addPresets: true, // (default value)\n            addPlugins: true  // (default value)\n        },\n        configure: { /* Any Jest configuration options: https://jestjs.io/docs/en/configuration. */ },\n        configure: (jestConfig, { env, paths, resolve, rootDir }) => { return jestConfig; }\n    },\n    devServer: { /* Any devServer configuration options: https://webpack.js.org/configuration/dev-server/#devserver. */ },\n    devServer: (devServerConfig, { env, paths, proxy, allowedHost }) => { return devServerConfig; },\n    plugins: [\n        {\n            plugin: {\n                overrideCracoConfig: ({ cracoConfig, pluginOptions, context: { env, paths } }) => { return cracoConfig; },\n                overrideWebpackConfig: ({ webpackConfig, cracoConfig, pluginOptions, context: { env, paths } }) => { return webpackConfig; },\n                overrideJestConfig: ({ jestConfig, cracoConfig, pluginOptions, context: { env, paths, resolve, rootDir } }) => { return jestConfig };\n            },\n            options: {}\n        }\n    ]\n};\n```\n\n## Develop a plugin\n\nThere are 3 functions available to a plugin:\n- `overrideCracoConfig`: Let a plugin customize the config object before it's process by `craco`.\n- `overrideWebpackConfig`: Let a plugin customize the `webpack` config that will be used by CRA.\n- `overrideJestConfig`: Let a plugin customize the `Jest` config that will be used by CRA.\n\n**Important:**\n\nEvery functions must return the updated config object.\n\n### overrideCracoConfig\n\nThe function `overrideCracoConfig` let a plugin override the config object **before** it's process by `craco`.\n\nIf a plugin define the function, it will be called with the config object read from the `craco.config.js` file provided by the consumer.\n\n*The function must return a valid config object, otherwise `craco` will throw an error.*\n\nThe function will be called with a single object argument having the following structure:\n\n```javascript\n{\n    cracoConfig: \"The config object read from the craco.config.js file provided by the consumer\",\n    pluginOptions: \"The plugin options provided by the consumer\",\n    context: {\n        env: \"The current NODE_ENV (development, production, etc..)\",\n        paths: \"An object that contains all the paths used by CRA\"\n    }\n}\n```\n\n#### Example\n\nPlugin:\n\n```javascript\n/* craco-plugin-log-craco-config.js */\n\nmodule.exports = {\n    overrideCracoConfig: ({ cracoConfig, pluginOptions, context: { env, paths } }) => {\n        if (pluginOptions.preText) {\n            console.log(pluginOptions.preText);\n        }\n\n        console.log(JSON.stringify(craconfig, null, 4));\n\n        // Always return the config object.\n        return cracoConfig;\n    }\n};\n```\n\nRegistration (in a `craco.config.js` file):\n\n```javascript\nconst logCracoConfigPlugin = require(\"./craco-plugin-log-craco-config\");\n\nmodule.exports = {\n    ...\n    plugins: [\n        { plugin: logCracoConfigPlugin, options: { preText: \"Will log the craco config:\" } }\n    ]\n};\n```\n\n### overrideWebpackConfig\n\nThe function `overrideWebpackConfig` let a plugin override the `webpack` config object **after** it's been customized by `craco`.\n\n*The function must return a valid config object, otherwise `craco` will throw an error.*\n\nThe function will be called with a single object argument having the following structure:\n\n```javascript\n{\n    webpackConfig: \"The webpack config object already customized by craco\",\n    cracoConfig: \"The configuration object read from the craco.config.js file provided by the consumer\",\n    pluginOptions: \"The plugin options provided by the consumer\",\n    context: {\n        env: \"The current NODE_ENV (development, production, etc..)\",\n        paths: \"An object that contains all the paths used by CRA\"\n    }\n}\n```\n\n#### Example\n\nPlugin:\n\n```javascript\n/* craco-plugin-log-webpack-config.js */\n\nmodule.exports = {\n    overrideWebpackConfig: ({ webpackConfig, cracoConfig, pluginOptions, context: { env, paths } }) => {\n        if (pluginOptions.preText) {\n            console.log(pluginOptions.preText);\n        }\n\n        console.log(JSON.stringify(webpackConfig, null, 4));\n\n        // Always return the config object.\n        return webpackConfig;\n    }\n};\n```\n\nRegistration (in a `craco.config.js` file):\n\n```javascript\nconst logWebpackConfigPlugin = require(\"./craco-plugin-log-webpack-config\");\n\nmodule.exports = {\n    ...\n    plugins: [\n        { plugin: logWebpackConfigPlugin, options: { preText: \"Will log the webpack config:\" } }\n    ]\n};\n```\n\n### overrideJestConfig\n\nThe function `overrideJestConfig` let a plugin override the `Jest` config object **after** it's been customized by `craco`.\n\n*The function must return a valid config object, otherwise `craco` will throw an error.*\n\nThe function will be called with a single object argument having the following structure:\n\n```javascript\n{\n    jestConfig: \"The Jest config object already customized by craco\",\n    cracoConfig: \"The configuration object read from the craco.config.js file provided by the consumer\",\n    pluginOptions: \"The plugin options provided by the consumer\",\n    context: {\n        env: \"The current NODE_ENV (development, production, etc..)\",\n        paths: \"An object that contains all the paths used by CRA\",\n        resolve: \"Provided by CRA\",\n        rootDir: \"Provided by CRA\"\n    }\n}\n```\n\n#### Example\n\nPlugin:\n\n```javascript\n/* craco-plugin-log-jest-config.js */\n\nmodule.exports = {\n    overrideJestConfig: ({ jestConfig, cracoConfig, pluginOptions, context: { env, paths, resolve, rootDir } }) => {\n        if (pluginOptions.preText) {\n            console.log(pluginOptions.preText);\n        }\n\n        console.log(JSON.stringify(jestConfig, null, 4));\n\n        // Always return the config object.\n        return jestConfig;\n    }\n};\n```\n\nRegistration (in a `craco.config.js` file):\n\n```javascript\nconst logJestConfigPlugin = require(\"./craco-plugin-log-jest-config\");\n\nmodule.exports = {\n    ...\n    plugins: [\n        { plugin: logJestConfigPlugin, options: { preText: \"Will log the Jest config:\" } }\n    ]\n};\n```\n\n### Utility functions\n\nA few utility functions are provided by `craco` to develop a plugin:\n\n```javascript\nconst { getLoader, getLoaders, removeLoader, loaderByName, throwUnexpectedConfigError } = require(\"@craco/craco\");\n```\n\n#### getLoader\n\nRetrieve the **first** loader that match the specified criteria from the webpack config.\n\nReturns:\n\n```javascript\n{\n    isFound: true | false,\n    match: {\n        loader,\n        parent,\n        index\n    }\n}\n```\n\nUsage:\n\n```javascript\nconst { getLoader, loaderByName } = require(\"@craco/craco\");\n\nconst { isFound, match } = getLoader(webpackConfig, loaderByName(\"eslint-loader\"));\n\nif (isFound) {\n    // do stuff...\n}\n```\n\n#### getLoaders\n\nRetrieve **all** the loaders that match the specified criteria from the webpack config.\n\nReturns:\n\n```javascript\n{\n    hasFoundAny: true | false,\n    matches: [\n        {\n            loader,\n            parent,\n            index\n        }\n    ]\n}\n```\n\nUsage:\n\n```javascript\nconst { getLoaders, loaderByName } = require(\"@craco/craco\");\n\nconst { hasFoundAny, matches } = getLoaders(webpackConfig, loaderByName(\"babel-loader\"));\n\nif (hasFoundAny) {\n    matches.forEach(x => {\n        // do stuff...\n    });\n}\n```\n\n#### removeLoaders\n\nRemove **all** the loaders that match the specified criteria from the webpack config.\n\nReturns:\n\n```javascript\n{\n    hasRemovedAny:: true | false,\n    removedCount:: int\n}\n```\n\nUsage:\n\n```javascript\nconst { removeLoaders, loaderByName } = require(\"@craco/craco\");\n\nremoveLoaders(webpackConfig, loaderByName(\"eslint-loader\"));\n```\n\n#### addBeforeLoader\n\nAdd a new *loader* **before** the loader that match specified criteria to the webpack config.\n\nReturns:\n\n```javascript\n{\n    isAdded: true | false\n}\n```\n\nUsage:\n\n```javascript\nconst { addBeforeLoader, loaderByName } = require(\"@craco/craco\");\n\nconst myNewWebpackLoader = {\n    loader: require.resolve(\"tslint-loader\")\n};\n\naddBeforeLoader(webpackConfig, loaderByName(\"eslint-loader\"), myNewWebpackLoader);\n```\n\n#### addBeforeLoaders\n\nAdd a new *loader* **before** all the loaders that match specified criteria to the webpack config.\n\nReturns:\n\n```javascript\n{\n    isAdded: true | false,\n    addedCount: int\n}\n```\n\nUsage:\n\n```javascript\nconst { addBeforeLoaders, loaderByName } = require(\"@craco/craco\");\n\nconst myNewWebpackLoader = {\n    loader: require.resolve(\"tslint-loader\")\n};\n\naddBeforeLoaders(webpackConfig, loaderByName(\"eslint-loader\"), myNewWebpackLoader);\n```\n\n#### addAfterLoader\n\nAdd a new *loader* **after** the loader that match specified criteria to the webpack config.\n\nReturns:\n\n```javascript\n{\n    isAdded: true | false\n}\n```\n\nUsage:\n\n```javascript\nconst { addAfterLoader, loaderByName } = require(\"@craco/craco\");\n\nconst myNewWebpackLoader = {\n    loader: require.resolve(\"tslint-loader\")\n};\n\naddAfterLoader(webpackConfig, loaderByName(\"eslint-loader\"), myNewWebpackLoader);\n```\n\n#### addAfterLoaders\n\nAdd a new *loader* **after** all the loaders that match specified criteria to the webpack config.\n\nReturns:\n\n```javascript\n{\n    isAdded: true | false,\n    addedCount: int\n}\n```\n\nUsage:\n\n```javascript\nconst { addAfterLoaders, loaderByName } = require(\"@craco/craco\");\n\nconst myNewWebpackLoader = {\n    loader: require.resolve(\"tslint-loader\")\n};\n\naddAfterLoaders(webpackConfig, loaderByName(\"eslint-loader\"), myNewWebpackLoader);\n```\n\n#### throwUnexpectedConfigError\n\nThrow 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.\n\nRaises an error and crashes Node.js:\n\n```bash\n$ yarn start\nyarn run v1.12.3\n$ craco start\n/path/to/your/app/craco.config.js:23\n            throw new Error(\n            ^\n\n    Error: Can't find eslint-loader in the webpack config!\n\n    This error probably occurred because you updated react-scripts or craco. Please try updating craco-less to the latest version:\n\n       $ yarn upgrade craco-less\n\n    Or:\n\n       $ npm update craco-less\n\n    If that doesn't work, craco-less needs to be fixed to support the latest version.\n    Please check to see if there's already an issue in the ndbroadbent/craco-less repo:\n\n       * https://github.com/ndbroadbent/craco-less/issues?q=is%3Aissue+webpack+eslint-loader\n\n    If not, please open an issue and we'll take a look. (Or you can send a PR!)\n\n    You might also want to look for related issues in the craco and create-react-app repos:\n\n       * https://github.com/sharegate/craco/issues?q=is%3Aissue+webpack+eslint-loader\n       * https://github.com/facebook/create-react-app/issues?q=is%3Aissue+webpack+eslint-loader\n\n    at throwUnexpectedConfigError (/path/to/your/app/craco.config.js:23:19)\n    ...\n```\n\nUsage:\n\n```javascript\nconst { getLoader, loaderByName, throwUnexpectedConfigError } = require(\"@craco/craco\");\n\n// Create a helper function if you need to call this multiple times\nconst throwError = (message, githubIssueQuery) =>\n    throwUnexpectedConfigError({\n        packageName: \"craco-less\",\n        githubRepo: \"ndbroadbent/craco-less\",\n        message,\n        githubIssueQuery,\n    });\n\nconst { isFound, match } = getLoader(webpackConfig, loaderByName(\"eslint-loader\"));\n\nif (!isFound) {\n    throwError(\"Can't find eslint-loader in the webpack config!\", \"webpack+eslint-loader\")\n}\n```\n\nOptions:\n\n```javascript\n{\n    message: \"An error message explaining what went wrong\",\n    packageName: \"NPM package name\",\n    githubRepo: \"GitHub repo where people can open an issue. Format: username/repo\",\n    githubIssueQuery: \"Search string to find related issues\"\n}\n```\n\n> Only `message` is required.\n\n## Acknowledgements\n\n[@timarney](https://github.com/timarney) for having created [react-app-rewired](https://github.com/timarney/react-app-rewired).\n\n## License\n\nCopyright © 2018, 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/sharegate/craco/blob/master/LICENSE.\n","readmeFilename":"README.md","_id":"@craco/craco@3.2.1-alpha.0","_npmVersion":"6.4.1","_nodeVersion":"10.11.0","_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"dist":{"integrity":"sha512-DkTyLv9g29ahW3BB1U9xMWFdvhJ5dv3uXcwFA7REprUCbNOoTLYnwRQsTa9RKfCTQtRqJ/LQIxATYZ0PttQXvQ==","shasum":"cae8a437499dc5a7a70f6fec0db00abc4a98c8aa","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-3.2.1-alpha.0.tgz","fileCount":31,"unpackedSize":80855,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcCWvYCRA9TVsSAnZWagAAjLEP/i9NySZVAgMUuL/bDFog\no+wHzXdbnW7+Tyf2XkYIYyFdc/siF74iGNaJuD5KUObz+RNnofNVdlmBnxap\nzlpNhzrYqShedHyot1p7Y6Vi5ut+BH2k41fsvOgo2W5WAcAVkfcKqekO2hxk\n+sSlGIMG04wqylvo7zNM+ibdOGnCdJtr+vu6F0XJKkMODzArdw0/91kZsGNJ\nE5n7GldF9QhHr8T3NWOU/sqUfFJKtm8HLO3ih0xPTEprRMXSobZxqs5Zsc/B\nJwnztAGCIYU5AV6nePAfAUV+1rWMuOXvSDuYVkTgoW7UPeUsm0mQq1ThxiDE\nsQ/qmyWwvb/tz+kKk22+0ujzhZ7NxjiDTnjrSjuKpxQvUODen13vuC6TQE9D\nmVzW2S+XYWAihFPcm8vaMMsNfi7R74/qFJhkxX+ben/jsjKNxWl0/C98f7CA\nvCTy4CJZRWAq4vyk1z6AvvL+AddYg0DgYf0+WMv+BCAVURW67JbrsGjFn4cL\n+n1xN/MYSxnTr1jfXLdOJWaq/MRFyDQFVjWZG3UjPe4scRun77Z2vgVEZGU+\nQ+ETRbFH3OGbuTnJ7aIQli3b/YHgm3NLDo620CiXBTpy9WK1vjm+JaHT7Qf2\n89CC2uz526ZuBssY21PTi6+KY5DfcGek6ewUkgT0y9JZlDtuD41EVOmepq/Z\nKKVU\r\n=dP7Y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH8pEbBarVTDajRj8rktH4jKcsZvwDragi6HNyPc5xXEAiBpmWmxx34TH/571MhyHJJKPGCBEYwO1JHzCkIK00s60Q=="}]},"maintainers":[{"email":"pa.lafrance@gmail.com","name":"anonymous"},{"email":"yohan.belval@gmail.com","name":"anonymous"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_3.2.1-alpha.0_1544121303262_0.2927522430290552"},"_hasShrinkwrap":false},"3.2.2-alpha.0":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app v2.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/sharegate/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/sharegate/craco/issues"},"homepage":"https://github.com/sharegate/craco","engines":{"node":">=6"},"bin":{"craco":"./bin/craco.js"},"peerDependencies":{"react-scripts":"*"},"devDependencies":{"react-scripts":"2.1.1"},"dependencies":{"cross-spawn":"6.0.5","lodash.mergewith":"4.6.1","webpack-merge":"4.1.4"},"version":"3.2.2-alpha.0","gitHead":"1b4273d7c5187bcdfc585c2eddcddc78099fca9e","_resolved":"","_integrity":"","_from":"file:craco-craco-3.2.2-alpha.0.tgz","readme":"# craco [![Build Status](https://travis-ci.org/sharegate/craco.svg?branch=master)](https://travis-ci.org/sharegate/craco) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-green.svg)](https://github.com/sharegate/craco/pulls)\n\n**C**reate **R**eact **A**pp **C**onfiguration **O**verride is an easy and comprehensible configuration layer for create-react-app v2.\n\nGet all the benefits of create-react-app **and** customization without using 'eject' by adding a single `craco.config.js` file at the root of your application and customize your eslint, babel, postcss configurations and many more.\n\nAll you have to do is create your app using [create-react-app](https://github.com/facebook/create-react-app/) and customize the configuration with a `craco.config.js` file.\n\n- [CLI Options](#cli-options) - Available CLI options.\n- [Configuration Overview](#configuration-overview) - Quickly see how you can configure your CRA installation with this plugin.\n- [Recipes](https://github.com/sharegate/craco/tree/master/recipes) – Short recipes for common use cases.\n- [Available Plugins](https://github.com/sharegate/craco#community-maintained-plugins) - Plugins maintained by the community.\n- [Develop a Plugin](#develop-a-plugin) - How to develop a plugin for `craco`.\n- [Changelog](https://github.com/sharegate/craco/tree/master/changelog) - List of major changes\n\n**Acknowledgements:**\n\nWe 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.\n\nAlso, please note that the configuration style of this plugin has been greatly influenced by the way [Vue CLI](https://cli.vuejs.org/guide/) does it.\n\n**Please Note:**\n\nBy 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.\n\n## You updated craco and everything falls apart\n\nBefore logging an issue, please consult the [changelog](https://github.com/sharegate/craco/tree/master/changelog).\n\nIf you can't find a solution to your problem in the changelog, log an issue and someone should help you quickly!\n\n## Installation\n\nInstall the plugin from **npm**:\n\n```bash\n$ yarn add @craco/craco\n\n# OR\n\n$ npm install @craco/craco --save\n```\n\nCreate a `craco.config.js` file in the root directory:\n\n```\nmy-app\n├── node_modules\n├── craco.config.js\n└── package.json\n```\n\nExport your configuration as an **object literal**:\n\n```javascript\n/* craco.config.js */\n\nmodule.exports = {\n    ...\n}\n```\n\nor a **function**:\n\n```javascript\n/* craco.config.js */\n\nmodule.exports = function({ env, paths }) {\n    return {\n        ...\n    };\n}\n```\n\nUpdate the existing calls to `react-scripts` in the `scripts` section of your `package.json` file to use the `craco` CLI:\n\n```diff\n/* package.json */\n\n\"scripts\": {\n-   \"start\": \"react-scripts start\",\n+   \"start\": \"craco start\",\n-   \"build\": \"react-scripts build\",\n+   \"build\": \"craco build\"\n-   \"test\": \"react-scripts test\",\n+   \"test\": \"craco test\"\n}\n```\n\nStart your app for development:\n\n```bash\n$ npm start\n```\n\nOr build your app:\n\n```bash\n$ npm run build\n```\n\n## CLI Options\n\nWhen you execute `craco start` or `craco build` a few options are available.\n\nTo change the location of the configuration file:\n\n```javascript\n\"scripts\": {\n    \"start\": \"craco start --config config/craco-config-with-custom-name.js\"\n}\n```\n\nTo use with a **yarn workspace** or any **monorepo setup** that follows the popular convention `packages/*`:\n\n```javascript\n\"scripts\": {\n    \"start\": \"craco start --workspace\"\n}\n```\n\nTo use with a different version of `react-scripts`:\n\n```javascript\n\"scripts\": {\n    \"start\": \"craco start --scripts-version react-scripts-ts\"\n}\n```\n\nTo provided a custom path for the `react-scripts` folder:\n\n```javascript\n\"scripts\": {\n    \"start\": \"craco start --react-scripts ../../react-scripts-with-custom-name\"\n}\n```\n\n_The provided `react-scripts` folder path must be relative to the current working directory._\n\n_If `--react-scripts` is provided, `--workspace` and `--scripts-version` will be ignored._\n\nTo activate **verbose** logging:\n\n```javascript\n\"scripts\": {\n    \"start\": \"craco start --verbose\"\n}\n```\n\n## Configuration Overview\n\nWhen the property **mode** is available there are 2 possible values:\n- `extends`: the provided configuration will extends the CRA settings (**default mode**)\n- `file`: the CRA settings will be reseted 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.\n\n```javascript\nconst { paths, when, whenDev, whenProd, whenTest, ESLINT_MODES, POSTCSS_MODES } = require(\"@craco/craco\");\n\nmodule.exports = {\n    style: {\n        modules: {\n            localIdentName: \"\"\n        },\n        css: {\n            loaderOptions: { /* Any css-loader configuration options: https://github.com/webpack-contrib/css-loader. */ },\n            loaderOptions: (cssLoaderOptions, { env, paths }) => { return cssLoaderOptions; }\n        },\n        sass: {\n            loaderOptions: { /* Any sass-loader configuration options: https://github.com/webpack-contrib/sass-loader. */ },\n            loaderOptions: (sassLoaderOptions, { env, paths }) => { return sassLoaderOptions; }\n        },\n        postcss: {\n            mode: \"extends\" /* (default value) */ || \"file\",\n            plugins: [],\n            env: {\n                autoprefixer: { /* Any autoprefixer options: https://github.com/postcss/autoprefixer#options */ },\n                stage: 3, /* Any valid stages: https://cssdb.org/#staging-process. */\n                features: { /* Any CSS features: https://preset-env.cssdb.org/features. */ }\n            },\n            loaderOptions: { /* Any postcss-loader configuration options: https://github.com/postcss/postcss-loader. */ },\n            loaderOptions: (postcssLoaderOptions, { env, paths }) => { return postcssLoaderOptions; }\n        }\n    },\n    eslint: {\n        enable: true,\n        mode: \"extends\" /* (default value) */ || \"file\",\n        configure: { /* Any eslint configuration options: https://eslint.org/docs/user-guide/configuring */ },\n        configure: (eslintConfig, { env, paths }) => { return eslintConfig; },\n        loaderOptions: { /* Any eslint-loader configuration options: https://github.com/webpack-contrib/eslint-loader. */ },\n        loaderOptions: (eslintOptions, { env, paths }) => { return eslintOptions; }\n    },\n    babel: {\n        presets: [],\n        plugins: [],\n        loaderOptions: { /* Any babel-loader configuration options: https://github.com/babel/babel-loader. */ },\n        loaderOptions: (babelLoaderOptions, { env, paths }) => { return babelLoaderOptions; }\n    },\n    webpack: {\n        alias: {},\n        plugins: [],\n        configure: { /* Any webpack configuration options: https://webpack.js.org/configuration */ },\n        configure: (webpackConfig, { env, paths }) => { return webpackConfig; }\n    },\n    jest: {\n        babel: {\n            addPresets: true, // (default value)\n            addPlugins: true  // (default value)\n        },\n        configure: { /* Any Jest configuration options: https://jestjs.io/docs/en/configuration. */ },\n        configure: (jestConfig, { env, paths, resolve, rootDir }) => { return jestConfig; }\n    },\n    devServer: { /* Any devServer configuration options: https://webpack.js.org/configuration/dev-server/#devserver. */ },\n    devServer: (devServerConfig, { env, paths, proxy, allowedHost }) => { return devServerConfig; },\n    plugins: [\n        {\n            plugin: {\n                overrideCracoConfig: ({ cracoConfig, pluginOptions, context: { env, paths } }) => { return cracoConfig; },\n                overrideWebpackConfig: ({ webpackConfig, cracoConfig, pluginOptions, context: { env, paths } }) => { return webpackConfig; },\n                overrideJestConfig: ({ jestConfig, cracoConfig, pluginOptions, context: { env, paths, resolve, rootDir } }) => { return jestConfig };\n            },\n            options: {}\n        }\n    ]\n};\n```\n\n## Develop a plugin\n\nThere are 3 functions available to a plugin:\n- `overrideCracoConfig`: Let a plugin customize the config object before it's process by `craco`.\n- `overrideWebpackConfig`: Let a plugin customize the `webpack` config that will be used by CRA.\n- `overrideJestConfig`: Let a plugin customize the `Jest` config that will be used by CRA.\n\n**Important:**\n\nEvery functions must return the updated config object.\n\n### overrideCracoConfig\n\nThe function `overrideCracoConfig` let a plugin override the config object **before** it's process by `craco`.\n\nIf a plugin define the function, it will be called with the config object read from the `craco.config.js` file provided by the consumer.\n\n*The function must return a valid config object, otherwise `craco` will throw an error.*\n\nThe function will be called with a single object argument having the following structure:\n\n```javascript\n{\n    cracoConfig: \"The config object read from the craco.config.js file provided by the consumer\",\n    pluginOptions: \"The plugin options provided by the consumer\",\n    context: {\n        env: \"The current NODE_ENV (development, production, etc..)\",\n        paths: \"An object that contains all the paths used by CRA\"\n    }\n}\n```\n\n#### Example\n\nPlugin:\n\n```javascript\n/* craco-plugin-log-craco-config.js */\n\nmodule.exports = {\n    overrideCracoConfig: ({ cracoConfig, pluginOptions, context: { env, paths } }) => {\n        if (pluginOptions.preText) {\n            console.log(pluginOptions.preText);\n        }\n\n        console.log(JSON.stringify(craconfig, null, 4));\n\n        // Always return the config object.\n        return cracoConfig;\n    }\n};\n```\n\nRegistration (in a `craco.config.js` file):\n\n```javascript\nconst logCracoConfigPlugin = require(\"./craco-plugin-log-craco-config\");\n\nmodule.exports = {\n    ...\n    plugins: [\n        { plugin: logCracoConfigPlugin, options: { preText: \"Will log the craco config:\" } }\n    ]\n};\n```\n\n### overrideWebpackConfig\n\nThe function `overrideWebpackConfig` let a plugin override the `webpack` config object **after** it's been customized by `craco`.\n\n*The function must return a valid config object, otherwise `craco` will throw an error.*\n\nThe function will be called with a single object argument having the following structure:\n\n```javascript\n{\n    webpackConfig: \"The webpack config object already customized by craco\",\n    cracoConfig: \"The configuration object read from the craco.config.js file provided by the consumer\",\n    pluginOptions: \"The plugin options provided by the consumer\",\n    context: {\n        env: \"The current NODE_ENV (development, production, etc..)\",\n        paths: \"An object that contains all the paths used by CRA\"\n    }\n}\n```\n\n#### Example\n\nPlugin:\n\n```javascript\n/* craco-plugin-log-webpack-config.js */\n\nmodule.exports = {\n    overrideWebpackConfig: ({ webpackConfig, cracoConfig, pluginOptions, context: { env, paths } }) => {\n        if (pluginOptions.preText) {\n            console.log(pluginOptions.preText);\n        }\n\n        console.log(JSON.stringify(webpackConfig, null, 4));\n\n        // Always return the config object.\n        return webpackConfig;\n    }\n};\n```\n\nRegistration (in a `craco.config.js` file):\n\n```javascript\nconst logWebpackConfigPlugin = require(\"./craco-plugin-log-webpack-config\");\n\nmodule.exports = {\n    ...\n    plugins: [\n        { plugin: logWebpackConfigPlugin, options: { preText: \"Will log the webpack config:\" } }\n    ]\n};\n```\n\n### overrideJestConfig\n\nThe function `overrideJestConfig` let a plugin override the `Jest` config object **after** it's been customized by `craco`.\n\n*The function must return a valid config object, otherwise `craco` will throw an error.*\n\nThe function will be called with a single object argument having the following structure:\n\n```javascript\n{\n    jestConfig: \"The Jest config object already customized by craco\",\n    cracoConfig: \"The configuration object read from the craco.config.js file provided by the consumer\",\n    pluginOptions: \"The plugin options provided by the consumer\",\n    context: {\n        env: \"The current NODE_ENV (development, production, etc..)\",\n        paths: \"An object that contains all the paths used by CRA\",\n        resolve: \"Provided by CRA\",\n        rootDir: \"Provided by CRA\"\n    }\n}\n```\n\n#### Example\n\nPlugin:\n\n```javascript\n/* craco-plugin-log-jest-config.js */\n\nmodule.exports = {\n    overrideJestConfig: ({ jestConfig, cracoConfig, pluginOptions, context: { env, paths, resolve, rootDir } }) => {\n        if (pluginOptions.preText) {\n            console.log(pluginOptions.preText);\n        }\n\n        console.log(JSON.stringify(jestConfig, null, 4));\n\n        // Always return the config object.\n        return jestConfig;\n    }\n};\n```\n\nRegistration (in a `craco.config.js` file):\n\n```javascript\nconst logJestConfigPlugin = require(\"./craco-plugin-log-jest-config\");\n\nmodule.exports = {\n    ...\n    plugins: [\n        { plugin: logJestConfigPlugin, options: { preText: \"Will log the Jest config:\" } }\n    ]\n};\n```\n\n### Utility functions\n\nA few utility functions are provided by `craco` to develop a plugin:\n\n```javascript\nconst { getLoader, getLoaders, removeLoader, loaderByName, throwUnexpectedConfigError } = require(\"@craco/craco\");\n```\n\n#### getLoader\n\nRetrieve the **first** loader that match the specified criteria from the webpack config.\n\nReturns:\n\n```javascript\n{\n    isFound: true | false,\n    match: {\n        loader,\n        parent,\n        index\n    }\n}\n```\n\nUsage:\n\n```javascript\nconst { getLoader, loaderByName } = require(\"@craco/craco\");\n\nconst { isFound, match } = getLoader(webpackConfig, loaderByName(\"eslint-loader\"));\n\nif (isFound) {\n    // do stuff...\n}\n```\n\n#### getLoaders\n\nRetrieve **all** the loaders that match the specified criteria from the webpack config.\n\nReturns:\n\n```javascript\n{\n    hasFoundAny: true | false,\n    matches: [\n        {\n            loader,\n            parent,\n            index\n        }\n    ]\n}\n```\n\nUsage:\n\n```javascript\nconst { getLoaders, loaderByName } = require(\"@craco/craco\");\n\nconst { hasFoundAny, matches } = getLoaders(webpackConfig, loaderByName(\"babel-loader\"));\n\nif (hasFoundAny) {\n    matches.forEach(x => {\n        // do stuff...\n    });\n}\n```\n\n#### removeLoaders\n\nRemove **all** the loaders that match the specified criteria from the webpack config.\n\nReturns:\n\n```javascript\n{\n    hasRemovedAny:: true | false,\n    removedCount:: int\n}\n```\n\nUsage:\n\n```javascript\nconst { removeLoaders, loaderByName } = require(\"@craco/craco\");\n\nremoveLoaders(webpackConfig, loaderByName(\"eslint-loader\"));\n```\n\n#### addBeforeLoader\n\nAdd a new *loader* **before** the loader that match specified criteria to the webpack config.\n\nReturns:\n\n```javascript\n{\n    isAdded: true | false\n}\n```\n\nUsage:\n\n```javascript\nconst { addBeforeLoader, loaderByName } = require(\"@craco/craco\");\n\nconst myNewWebpackLoader = {\n    loader: require.resolve(\"tslint-loader\")\n};\n\naddBeforeLoader(webpackConfig, loaderByName(\"eslint-loader\"), myNewWebpackLoader);\n```\n\n#### addBeforeLoaders\n\nAdd a new *loader* **before** all the loaders that match specified criteria to the webpack config.\n\nReturns:\n\n```javascript\n{\n    isAdded: true | false,\n    addedCount: int\n}\n```\n\nUsage:\n\n```javascript\nconst { addBeforeLoaders, loaderByName } = require(\"@craco/craco\");\n\nconst myNewWebpackLoader = {\n    loader: require.resolve(\"tslint-loader\")\n};\n\naddBeforeLoaders(webpackConfig, loaderByName(\"eslint-loader\"), myNewWebpackLoader);\n```\n\n#### addAfterLoader\n\nAdd a new *loader* **after** the loader that match specified criteria to the webpack config.\n\nReturns:\n\n```javascript\n{\n    isAdded: true | false\n}\n```\n\nUsage:\n\n```javascript\nconst { addAfterLoader, loaderByName } = require(\"@craco/craco\");\n\nconst myNewWebpackLoader = {\n    loader: require.resolve(\"tslint-loader\")\n};\n\naddAfterLoader(webpackConfig, loaderByName(\"eslint-loader\"), myNewWebpackLoader);\n```\n\n#### addAfterLoaders\n\nAdd a new *loader* **after** all the loaders that match specified criteria to the webpack config.\n\nReturns:\n\n```javascript\n{\n    isAdded: true | false,\n    addedCount: int\n}\n```\n\nUsage:\n\n```javascript\nconst { addAfterLoaders, loaderByName } = require(\"@craco/craco\");\n\nconst myNewWebpackLoader = {\n    loader: require.resolve(\"tslint-loader\")\n};\n\naddAfterLoaders(webpackConfig, loaderByName(\"eslint-loader\"), myNewWebpackLoader);\n```\n\n#### throwUnexpectedConfigError\n\nThrow 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.\n\nRaises an error and crashes Node.js:\n\n```bash\n$ yarn start\nyarn run v1.12.3\n$ craco start\n/path/to/your/app/craco.config.js:23\n            throw new Error(\n            ^\n\n    Error: Can't find eslint-loader in the webpack config!\n\n    This error probably occurred because you updated react-scripts or craco. Please try updating craco-less to the latest version:\n\n       $ yarn upgrade craco-less\n\n    Or:\n\n       $ npm update craco-less\n\n    If that doesn't work, craco-less needs to be fixed to support the latest version.\n    Please check to see if there's already an issue in the ndbroadbent/craco-less repo:\n\n       * https://github.com/ndbroadbent/craco-less/issues?q=is%3Aissue+webpack+eslint-loader\n\n    If not, please open an issue and we'll take a look. (Or you can send a PR!)\n\n    You might also want to look for related issues in the craco and create-react-app repos:\n\n       * https://github.com/sharegate/craco/issues?q=is%3Aissue+webpack+eslint-loader\n       * https://github.com/facebook/create-react-app/issues?q=is%3Aissue+webpack+eslint-loader\n\n    at throwUnexpectedConfigError (/path/to/your/app/craco.config.js:23:19)\n    ...\n```\n\nUsage:\n\n```javascript\nconst { getLoader, loaderByName, throwUnexpectedConfigError } = require(\"@craco/craco\");\n\n// Create a helper function if you need to call this multiple times\nconst throwError = (message, githubIssueQuery) =>\n    throwUnexpectedConfigError({\n        packageName: \"craco-less\",\n        githubRepo: \"ndbroadbent/craco-less\",\n        message,\n        githubIssueQuery,\n    });\n\nconst { isFound, match } = getLoader(webpackConfig, loaderByName(\"eslint-loader\"));\n\nif (!isFound) {\n    throwError(\"Can't find eslint-loader in the webpack config!\", \"webpack+eslint-loader\")\n}\n```\n\nOptions:\n\n```javascript\n{\n    message: \"An error message explaining what went wrong\",\n    packageName: \"NPM package name\",\n    githubRepo: \"GitHub repo where people can open an issue. Format: username/repo\",\n    githubIssueQuery: \"Search string to find related issues\"\n}\n```\n\n> Only `message` is required.\n\n## Acknowledgements\n\n[@timarney](https://github.com/timarney) for having created [react-app-rewired](https://github.com/timarney/react-app-rewired).\n\n## License\n\nCopyright © 2018, 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/sharegate/craco/blob/master/LICENSE.\n","readmeFilename":"README.md","_id":"@craco/craco@3.2.2-alpha.0","_npmVersion":"6.4.1","_nodeVersion":"10.11.0","_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"dist":{"integrity":"sha512-3fKuRCJbcdIEsr+NKI9rucsvLq7MHDkklG4fcH7t+gInYGIyetePYcOYWE3CY/kmde6iCVNCf4+hyHMADwMa5g==","shasum":"3bbcc3217a71f89aa884e5f20dc08a3d59b03619","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-3.2.2-alpha.0.tgz","fileCount":30,"unpackedSize":80604,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcCdSaCRA9TVsSAnZWagAAqeoP/0TaUkWFHV8cj19oL2R9\npH+16o8VaFfakl0JqAMyJaNDwM7UEBEI+lMT7teHZQdDTT0YUoLqz9lZRQaJ\nKuYmRjoYLs8zjjwBj2oS2/eTdOjxG2Ugv6Y8mmx7RkKhqsrXmnZjyreR7a7y\n8tSG8OSjpOOQY2Xt3xcyH7Hqfa4BNDBMLiNhECirlsj7x6yKan69FMAaLoMv\nXLpIfsMSvH6sFy7UOUguqbCjcSw3I7WTPnh+y56TdI1K7x8+NVvnQIjbx3FD\nk7kSo8MJb9rxn+IdQbkX+wmM9vYEYvTGYZ2DjGryDvPneMHqKYzaThCFy3wq\nGbzi3aRBEv5kJ6ItGBgtnqbjB4o6O0LkZNyBMa4B5E1aJfCIALVkohinPBNn\nVMXQSvcEjTLBpk7NKHNY1EJpqonDk7EP0Dhw2HxDvet8Lfi19RjFrJEl+hJQ\n7qEJy+f9sXn13mZJlPJMWMqJVVbwiZ7Ex6Wc45r4x//pL3eYoMUKkYKqvU1p\n23VbV0BfH8Q+PxuDb+J72mWsJ0tNEmoJmABuGiCWiPC1YrrcTJxaXwnN8DVQ\nNYThiGYmcvUYWTWLOCAeE1cCqpnTwehgqSg9zNNug70EGcox8AgcyR6SaxxQ\n/L/3sMhWXIj4g12KW4wmOkr3l9R0/8snnfOkLNWWfoACjnYnnImF5+iPepsM\nN8GQ\r\n=D9PP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH4TTZgzCdF7KG09MujHCsbwnvC84xbsKVklx96sSQLEAiEAgxbdCtTGAqFAK2BATGtBOhh8Ud7Hlgk9s/Xzkc9Z6sg="}]},"maintainers":[{"email":"pa.lafrance@gmail.com","name":"anonymous"},{"email":"yohan.belval@gmail.com","name":"anonymous"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_3.2.2-alpha.0_1544148121996_0.10453041630088511"},"_hasShrinkwrap":false},"3.2.2":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app v2.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/sharegate/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/sharegate/craco/issues"},"homepage":"https://github.com/sharegate/craco","engines":{"node":">=6"},"bin":{"craco":"./bin/craco.js"},"peerDependencies":{"react-scripts":"*"},"devDependencies":{"react-scripts":"2.1.1"},"dependencies":{"cross-spawn":"6.0.5","lodash.mergewith":"4.6.1","webpack-merge":"4.1.4"},"version":"3.2.2","gitHead":"73b73078d2591e7261f648a0cd41c0d4945b3b84","_resolved":"","_integrity":"","_from":"file:craco-craco-3.2.2.tgz","_id":"@craco/craco@3.2.2","_npmVersion":"6.4.1","_nodeVersion":"10.11.0","_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"dist":{"integrity":"sha512-rFMmQ2fzzsU3PTBvzt6tOPBD6zBjHno/Lqmz+hCVjtjDRVBOzUs2de5T0f8Eg0goKcdlMjQn/+UGXrikdGgc6Q==","shasum":"d94a63f3ba82aaf66d154274905ffbed3521f7c3","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-3.2.2.tgz","fileCount":30,"unpackedSize":80519,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcDySWCRA9TVsSAnZWagAAtMEQAJWJyL+wLgaUbQOkhmC9\nRRPgV1LM8n8atWiLtBmJHyBwv6voHa4fSrrokt4ZIXPJffEQW10LsSnLs8vL\nhzZa5t0RmiK/KIogwetN7u6c/RavE9dTQJ4LwRgpG2v5wQ2mxUUq/4JqVy9x\n8SJwLylPEp3C5AaldxKA3L6lI4FYDhfPdF2SubCEd5TmYR7e1ayTGVeEEFuY\nPTxKNNS0/ugabxy3AkeEo2HbURgS1aigqkbNh0aMBW3T6a164GCozO9Awv2i\n5HF+F37fg1G0o3+vOJdQyH1wnhl8TySBdl6U4oSyjRw3mImbiemyzt4Sw7x3\nbVDxj3106W+M90SxrVAfmAsAklDL87O3+TgVYNMIzgCohi1E5kXQZJ2lZ+OL\nhxwGYOn8Rmz3qZJuht2vgjSgQQxNWP55F8EpkzwwAV9aF6Ljlxgm9LumIAvV\nufRsee+4zeCGcJX7oscihaNwHFTbMS9fsama2texgCf28pgM7Kg8RSprHiUX\naQnmYm/kYlP2/+ta47BldU5gq6ss6OopSlVKFTkUAV4o4I6TdqN8ySjy9+tB\n7pNph+Frzp+yXMYdl2kO4vTTbBzHn5bL1E802Q1oAwwaQ0On/ko+k1F9Q3ld\n23tw3ZXxDrcj2/gyJchdU3YKpoxoOGuZq3b6Is9UgO4umcMAUEC7Vp56pJT1\njN7c\r\n=LeNF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD0xxlm/EL5UmhCM3myoKFmNcJYdDyL0Kun3lSmxL4FswIhALDLyzz8SHflqDFNYlhKzV3uDSm7uocm9O1ASJukqMxx"}]},"maintainers":[{"email":"pa.lafrance@gmail.com","name":"anonymous"},{"email":"yohan.belval@gmail.com","name":"anonymous"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_3.2.2_1544496277695_0.7912803789713263"},"_hasShrinkwrap":false},"3.2.3":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app v2.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/sharegate/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/sharegate/craco/issues"},"homepage":"https://github.com/sharegate/craco","engines":{"node":">=6"},"bin":{"craco":"./bin/craco.js"},"peerDependencies":{"react-scripts":"*"},"devDependencies":{"react-scripts":"2.1.1"},"dependencies":{"cross-spawn":"6.0.5","lodash.mergewith":"4.6.1","webpack-merge":"4.1.4"},"version":"3.2.3","gitHead":"c4e8dd40aa875fcef02467dac444122bbf241956","_resolved":"","_integrity":"","_from":"file:craco-craco-3.2.3.tgz","_id":"@craco/craco@3.2.3","_npmVersion":"6.4.1","_nodeVersion":"10.11.0","_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"dist":{"integrity":"sha512-p8Kmq8CbX1kIbhiv5elTunmgjYmSdI91kQtRHDN92R1YDIDrXbYiFf15PJOdjpN0nAnQdplZjEJwG/aXJ7Px8w==","shasum":"28e29e4bb7b0c02512e4c68fca524adb94e54e31","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-3.2.3.tgz","fileCount":30,"unpackedSize":80658,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcEDrCCRA9TVsSAnZWagAAeb4P/3Lg1rc6GhO80Gpy/SWr\nyWYId2+5bBlusVF5TUBcgu9DuB8yvmNgB3rtDNTb+9O0rrwgWL5aJ7Y/MQ7M\n0XuW/d64XyV4PZDxNHaIfuDCFhZ5VV7s68PjelJ7V+rAt4b/MwLsRrr+IFJA\nnTbHD2aror1fQG2hFEQuVZcImwN3iJ8NmvPkhhA8KXzQeJBBdjLqJoVGB8YX\nJIbv1f9ugdNyX0uOr4QN59HlarAV9NifMdSdwnM280sjnsbkXPBCrmbP1yAo\niI/CBUaAUsd+trxr2YvRycwadZ9VwniSKMKYXk6RDBFq6ELAZU6tJI1dOSBW\ntguC9n5FxCn2kpTJwpdVGBTU5KUnU9HXyk54sRda9R5RUgCLC/Pfpv0hQ3s5\n9JFfyxZ45fz5/wB8FepYJgK3DNZubB2N1HITIF1IAw5OLJ7/MeGpF4r3woS0\nUAKqUXvyMrzox864FGqumNQM2jYL3427nq5mFDzaVniNh4fGI8qCZXamnP5n\nzHyNohHDaueDzb+Rlcjt5oFkiBF6QMG5G2YSuY1cPpG+EYSjZDcs9HFGphSz\nhGd3D3jJCfBmPYgt6HKg1A4jmUiNJq5cJyXOZAVH1is52sxjN25x2A8j38mE\n8ZJNi3KTfQAOJUIHO+eYRiDVhXLzjXkcw2W/7uSxe5dWpDGmXpiTcbVzZZEy\nGHeD\r\n=Xv9t\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDDnn2dPWMJq//XRi4/DZDq6yllcXtv2Ew8Ou9EJn6AdgIhAK0VIPdI4vc5a8r81uNxgnPF++/UQUHXgCsYgcCd8xTK"}]},"maintainers":[{"email":"pa.lafrance@gmail.com","name":"anonymous"},{"email":"yohan.belval@gmail.com","name":"anonymous"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_3.2.3_1544567490080_0.3065010443125826"},"_hasShrinkwrap":false},"3.3.1":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app v2.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/sharegate/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/sharegate/craco/issues"},"homepage":"https://github.com/sharegate/craco","engines":{"node":">=6"},"bin":{"craco":"./bin/craco.js"},"peerDependencies":{"react-scripts":"*"},"devDependencies":{"react-scripts":"2.1.1"},"dependencies":{"cross-spawn":"6.0.5","lodash.mergewith":"4.6.1","webpack-merge":"4.1.4"},"version":"3.3.1","gitHead":"37c0e8d36dac726047bc8dfc13cd335b33bfe471","_resolved":"","_integrity":"","_from":"file:craco-craco-3.3.1.tgz","_id":"@craco/craco@3.3.1","_npmVersion":"6.4.1","_nodeVersion":"10.11.0","_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"dist":{"integrity":"sha512-Iiq8j3zXD9oc37rRpzQK5dec2b1g5Vk3UvXHIH3zZ2cuRncVdHjhUMkwkb3Qh0u4R+t5M/9TFBSwI/MEa31onA==","shasum":"514701f3230d7762f6a5d8da8a0ad9667b725df7","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-3.3.1.tgz","fileCount":30,"unpackedSize":80594,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcP/R6CRA9TVsSAnZWagAAm6cQAIDq3O5GGdN8FjOy2KTX\n1RRtwGgEy2p2vcqeM2vJOORZYC+DIw18K0AniMlYvDP7yU5+wL9veNBuMNQx\nNoN7t8N7Nl2ZfqbeHh74lElqsKvHOP8acc3ykbzSKIpX7yacNbRuWtgrndyD\nqbyzRDt7R1D/m7GmfodqRZG+Mxp6JlYcxllQm33xco1o+Sll49vudEK+Bs11\nJRmUUnDuGEqmL7FEGGwerc0GT3VvkqoQnxk59uISNDS14E+4ydEXc3ruubXX\np88Msz2sJN9E87c6aYhYolTFfeohW20vVx6IjWczZ97WXPZY/sU+3O/YLR9q\nGWER85dCGjFODVjUaOvvfqh9+W8kZB0m0jzSleDLLS7kxwxECmrxWGgtrNLH\nF7UklLV/J1R5LJBo2Xl73HFwVlr1uxf62C9I7wP4bHVDhTqjbkM5+WyF1+Rm\nrW4vC/ke6On9Fp+rzzzH3mIj83O6g4wGr/DgeLmx37A/PaSWn+cvO9rM/nGx\ncsZJwKp4GJKLX/zsFhs7cr8U3nGQ2fjhzSIiJt5Koea9ux0g2XCLmJT84a2m\nYskoD0uQt6eOcdjRAlqAmccruDFpnLaqJx00hwi0kjkE+k5QBuPNLRk50efy\nei8+R/Uq2ey6rlg2sdz8ANa6YpgFVokC0f3YtRJfMl58e5bPUfy0KAPwCV7a\nd0rH\r\n=lMsa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID//kOqB7L9tus+qvnFtRwu7uzBwI0tbEPMZpVoG+H+IAiATV4nUvxZZtHE6tDsO9vdA8sOjxwdQpab61j/nvByqHw=="}]},"maintainers":[{"email":"pa.lafrance@gmail.com","name":"anonymous"},{"email":"yohan.belval@gmail.com","name":"anonymous"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_3.3.1_1547695225944_0.6434534845192756"},"_hasShrinkwrap":false},"3.4.0":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app v2.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/sharegate/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/sharegate/craco/issues"},"homepage":"https://github.com/sharegate/craco","engines":{"node":">=6"},"bin":{"craco":"./bin/craco.js"},"peerDependencies":{"react-scripts":"*"},"devDependencies":{"react-scripts":"2.1.1"},"dependencies":{"cross-spawn":"6.0.5","lodash.mergewith":"4.6.1","webpack-merge":"4.1.4"},"version":"3.4.0","gitHead":"fa0a471ef73e022c7e95fd751fa953eb6e8ab32b","_resolved":"","_integrity":"","_from":"file:craco-craco-3.4.0.tgz","_id":"@craco/craco@3.4.0","_npmVersion":"6.4.1","_nodeVersion":"10.11.0","_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"dist":{"integrity":"sha512-/T66VOX6Pt7si2zt8FQxEdLzXhd61RzvC0Gb9nwr8SL4Ugkj+TjA9czgLHciMU/91/1GRJ4a4c+ur8IbH2YMaQ==","shasum":"6717c0fefb4e4154b17fa6bf9e3a5f1588cc9e79","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-3.4.0.tgz","fileCount":30,"unpackedSize":80852,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcQPXVCRA9TVsSAnZWagAAXmQP/1Lee6G7jfN2c8DrB5D8\ngNsI6ifPYmQty7a+5dYCzecVHyNWCJgsHCtrJZzaf1qQxiHPha8vtZS4Hit8\nD05/0eJdXAyG5uyJzR4A2vJ+90RjDY4SArX9QgrNBzmoil0+NFKUC38gUyTk\nrEZJTJ/uEoOI3u7gO8S5KNYqgQwvEFS1fhHLig15o6izqnYRRf3OzXFEzYaw\nT8H+P3B8cY/o8L1oi8FL+GMO8HKlVUNBujp38AZGyiUiPep+rIX+Vg+uSXc0\nOHhKO9SapLe7XpYmbYEndm1UZrsTQg5Jkte027wW9IlloKEqq9LngCDZjiSX\n87A9F96lnjSL7HNyZAMrChHxZ9NgIeuFejsXIYyo0lOj4Ih963T64y6TJ72z\nGTm8+jVzPsOFv4ijwQ6saZRpQN7PWpROFpw5/Bl+waB+0l5LgjYwR/BCyRR5\nPYWNPDzfeYT3TYCewOK2pcuFcIRos6c43ak3l9rzCT5bfBgUXmSPtl0x53Nx\nm/i5l8D5XbulB2EDUra9T2BJaQezQwhNG4Io8piZM2EdcD4mDaK1Unewg53S\nqKvueN5advJQ3sea5qem30AQOeodo2ayU8lzN6cVBTcWjx2ofp9qhsuOupRh\norvnTlx6lNeoEV/Lt4SA7LqTgHIAdb7nl+l7WY/kh5ztH17rBZnZJFvQGAuy\nMXab\r\n=jH9d\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCrKNmJe2rjr3QyEkHxHv1Zm4VKJVArbY0di3Ck293VYAIgSEj2pyfMiIQxh+RoZxVx6SUHIY0t5bKyAMhxHqm2p7M="}]},"maintainers":[{"email":"pa.lafrance@gmail.com","name":"anonymous"},{"email":"yohan.belval@gmail.com","name":"anonymous"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_3.4.0_1547761108022_0.8563317264474679"},"_hasShrinkwrap":false},"3.4.1":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app v2.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/sharegate/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/sharegate/craco/issues"},"homepage":"https://github.com/sharegate/craco","engines":{"node":">=6"},"bin":{"craco":"./bin/craco.js"},"peerDependencies":{"react-scripts":"*"},"devDependencies":{"react-scripts":"2.1.1"},"dependencies":{"cross-spawn":"6.0.5","lodash.mergewith":"4.6.1","webpack-merge":"4.1.4"},"version":"3.4.1","gitHead":"5c2536a7d82e2e436cbba8a9b2678138d0fa6b28","_resolved":"","_integrity":"","_from":"file:craco-craco-3.4.1.tgz","_id":"@craco/craco@3.4.1","_npmVersion":"6.4.1","_nodeVersion":"10.11.0","_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"dist":{"integrity":"sha512-PVuDx5iLzoYeFrjNUVbblQCGzFyw/DoBBHFI4+JlSCvgEkp07jbBm5fe+z/MqzYJUQm1bFbxe6qbQWI5LFl6XA==","shasum":"a65e29d7cb661e09e68269ba09ade39d174ec359","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-3.4.1.tgz","fileCount":30,"unpackedSize":80911,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcUFy6CRA9TVsSAnZWagAAmucP/j6izdDR50qXcWzoUbbM\nWDn/VHi/fCa652UBFUFoZuyquQKQHs/MIWsE1ssfrng6FswXviu0MCF6Jt6h\nRH+9Qa9upDWX00q0KgmPqJKS0YtwZcCNdUwGDe+peAxgWm+eZMpjurey7/9W\nZlRwaZREW6sJQvLQvZj8zWm9qRTElymxBnLvPvnsDEV/GZXpibvbr9tl8lY9\nKDrgvRoiVA3A3d0Rt5oqrZLt4Qys9zOFQ34L82DZqLrvYz8NPe7azvkCP8NA\nw7rKOr9mYdLkcUbnZhRE9Ws//NKS2JXuD4WXSb2758Plt4ww5AOhkNvUz+oK\nhFJh8iWmKaR8V+oQF6SZp+QjWzR5l8pcBoqMBTd/SH9B7/uIMKpzI2wEC4lQ\ngrD3kRwYZzCyZmVwzOJLcnM3PKnpZhS0YbbsDYXY6lXF+sstfFw0vcMwzyul\no2dr0BVMVPFFxzJxG7Znmi7fsfAbJEn4q3jEO7LhziVmosfueuax+Ykx1b1o\n2TWEIPs6nbLkm87+IFLsitBdldFgV0HAbpA79bRswQ3N/5SfoBYp/Up9P1m7\nKakgOW8SY5q8Vm68WveZE4xBXv426XXy4K9RUhdNlnm3hdaHU1EfSUr6qskX\n/8nd1NJ5bZrUPPNx+bgb9i9nkKsDMV1lf9Nr+ByIMkAjtPv81zIxwByRgElG\no4LX\r\n=syAU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEBCRI95e0BjU6XIL/WyjevchYtt2HQomdVx/A1poU26AiEAlXC0KYXYCM7SKQj1atEJJ1Ora65syq111AaWzu/RQIA="}]},"maintainers":[{"email":"dev@formapi.io","name":"anonymous"},{"email":"pa.lafrance@gmail.com","name":"anonymous"},{"email":"yohan.belval@gmail.com","name":"anonymous"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_3.4.1_1548770490097_0.9454745509987506"},"_hasShrinkwrap":false},"3.5.0":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app v2.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/sharegate/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/sharegate/craco/issues"},"homepage":"https://github.com/sharegate/craco","engines":{"node":">=6"},"bin":{"craco":"./bin/craco.js"},"peerDependencies":{"react-scripts":"*"},"devDependencies":{"react-scripts":"2.1.1"},"dependencies":{"cross-spawn":"6.0.5","lodash.mergewith":"4.6.1","webpack-merge":"4.1.4"},"version":"3.5.0","gitHead":"48252ff133f21ab802082cf9020785f7c5d9ae58","_resolved":"","_integrity":"","_from":"file:craco-craco-3.5.0.tgz","_id":"@craco/craco@3.5.0","_npmVersion":"6.4.1","_nodeVersion":"10.11.0","_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"dist":{"integrity":"sha512-peQtKgJawPGq5D8qqW2oxkSzCp1wwWL7H8G98Run3UxF5fVJjJLIcnxoRKvXFmrMQYuKBOOsO54ApEeJdTzC0Q==","shasum":"698e9f808e4fc5723345a38d8b505a465d885234","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-3.5.0.tgz","fileCount":30,"unpackedSize":82388,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcdbQ0CRA9TVsSAnZWagAAG0UP/0Wo1sXUA0h2PY6oD+lg\nJY1e7SqIMtCXDbl1WFh4MwmDSE9ZeST1Ns+RgxRFnoTSIbRKGi3Rff+iIjuN\nl3CIKMgKe7dx1rtbAhft7lwH04feVElysVJT2J9cZOVNR0FudV74Qczx2NIA\nvFyJkzYo+00+dUArCLHvwFz8VccJ2MfCQWoapyC/KMABB5wsvbsANUvr4GHO\ndgiYa84gPUJXDVMYSEcZFdNdhpuM7FxLKk2NrOWi+VUlsfCsZUueYVGsxIoa\n6BBcc4NKpuu/0t2j2zSUx36NX0DffPuCEe5/90XhW/zBbIKUYACeYBg+1B/5\nWGM9mUg5FB8IKLv2F2kfvN6MxfTjNuHMF9qPy0WFkMkcp0HeYiucGOkimlAr\nJNBOj5zTxv6c632zRR9dJ5X+N7fYCaVRCVXmEOU3I9h2lNrICu7wGTC1f+O2\nX9bkxmGb5/jsTGqIikLX+ncEwQzz7NmLuhUSYuX793fk1JOLe1jOH1J0pV92\nz5KhmJRXqMMMJkjSlveLidSk+9ipSkM9UQk08axnxYkkesejrDKluWzNx9FY\ngn25zU1QlhANW1X/l3DM1i2FMpL4GJAvnAS3KeMrJA7SbVR0EuLkPWA25Uki\nDxCEhHs07CoUW6OMps9twsnCQbg2UBQZMbqv8ngZ3ueTVpY8VfeaJ2MaxGSi\nT2KQ\r\n=8HKE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGPLK7oNvDqr9+0vNZuCSck2l5ftEBj/NTjw8qyqRwNZAiB5rKvb0Ck7CcJyQdtxyuiARrIkqvabsqpih24cTpe3CQ=="}]},"maintainers":[{"email":"dev@formapi.io","name":"anonymous"},{"email":"pa.lafrance@gmail.com","name":"anonymous"},{"email":"yohan.belval@gmail.com","name":"anonymous"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_3.5.0_1551217715912_0.22615476652828725"},"_hasShrinkwrap":false},"3.6.0":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app v2.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/sharegate/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/sharegate/craco/issues"},"homepage":"https://github.com/sharegate/craco","engines":{"node":">=6"},"bin":{"craco":"./bin/craco.js"},"peerDependencies":{"react-scripts":"*"},"devDependencies":{"react-scripts":"2.1.1"},"dependencies":{"cross-spawn":"6.0.5","lodash.mergewith":"4.6.1","webpack-merge":"4.1.4"},"version":"3.6.0","gitHead":"22b2148376cdf849809b035a99fe1f20b031e173","_resolved":"","_integrity":"","_from":"file:craco-craco-3.6.0.tgz","_id":"@craco/craco@3.6.0","_npmVersion":"6.4.1","_nodeVersion":"10.11.0","_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"dist":{"integrity":"sha512-01hBd0kefkDmfOsiXq5lAnSISVPgLqT1Qrr8Y062XRboeIlz9GQvOjJxhIxoqgVFYdeKURW6xza2qOEj5Til4w==","shasum":"4b4ce7dacda8ac64731c18b1542f70127cd3eb8e","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-3.6.0.tgz","fileCount":31,"unpackedSize":83244,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJciGwKCRA9TVsSAnZWagAAKEkP/iv/evWGXSrPgrxcueIZ\n+L9J035zD4rcYi9cyfG2fuMxNvSo0Is+XbOjP0txTzhScuyjnd5cPo+LUfPY\nD2v1MAvlE40fx8GdjUc0Y3gYqJ4eB/nqC+lUBbzgzrNEPsaNGkgPA6T4g095\n7hp0lshuO2EBa7l0E0dYVgVNnUSrBA+p6+/GJrBWlyYsnCVtSAzA2lWEUuGF\nrwCQRhtmwag9UZYIy+inZxzYwODdvCL+kBAJFdvZZfcfifWOOUlX1vWU4ong\nXngvLm8aOFPVyLR1orT0vSmUCV1rfc7L3clkesc3y8Gwbf5hsbGCahBZLppl\n5ATvPsSnx3UmzIujfk9Uyt0Fp/V3p5DZ5ohinlCldxLMyAiKBWHWVu5GbAnO\nMZc327kQESrsHBNezZsFkzNiO++TOT/D4viUQpj4WFWhN3P5houZKqW6QqlU\nZZSXGy99fKB8qjeldK3fPQCq7UitvhOkwbVJqivwsJf1Zb14G7RZ1E7Y31Ow\nM6dmv51YuVwksSGdRyEX9ZBhWMfhYSVrwCR2bh16j8Mr7dhM1WcmFr+0HWsf\nrYZ3Rc/SuWYEUB8B+KcW65bYyjBznPZCqPBDpAwiauUnAKWocdfXA190BMkw\nU0HmkJ48GbwbNh7gfptsLMSamBo2t33surSVZHtmaFw0kQkZUBda9Ano0De1\nvb4o\r\n=z3Q8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHEfMjf12hhOxlLQ+NxzycCn9+WAs9qUHDEDQyxymL1CAiEA8kFNNvq45xA4+pqTtJfwa3vJR/4BoXPyEGE/yJVjw1Y="}]},"maintainers":[{"email":"dev@formapi.io","name":"anonymous"},{"email":"pa.lafrance@gmail.com","name":"anonymous"},{"email":"yohan.belval@gmail.com","name":"anonymous"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_3.6.0_1552444425507_0.1651574741452917"},"_hasShrinkwrap":false},"4.0.0":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app v2.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/sharegate/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/sharegate/craco/issues"},"homepage":"https://github.com/sharegate/craco","engines":{"node":">=6"},"bin":{"craco":"./bin/craco.js"},"peerDependencies":{"react-scripts":"*"},"devDependencies":{"react-scripts":"2.1.1"},"dependencies":{"cross-spawn":"6.0.5","lodash.mergewith":"4.6.1","webpack-merge":"4.1.4"},"version":"4.0.0","gitHead":"55df12a3b85c15a708f5076d6b795dbd8e1fa712","_resolved":"","_integrity":"","_from":"file:craco-craco-4.0.0.tgz","readme":"# craco [![Build Status](https://travis-ci.org/sharegate/craco.svg?branch=master)](https://travis-ci.org/sharegate/craco) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-green.svg)](https://github.com/sharegate/craco/pulls)\n\n**C**reate **R**eact **A**pp **C**onfiguration **O**verride is an easy and comprehensible configuration layer for create-react-app v2.\n\nGet all the benefits of create-react-app **and** customization without using 'eject' by adding a single `craco.config.js` file at the root of your application and customize your eslint, babel, postcss configurations and many more.\n\nAll you have to do is create your app using [create-react-app](https://github.com/facebook/create-react-app/) and customize the configuration with a `craco.config.js` file.\n\n- [CLI Options](#cli-options) - Available CLI options.\n- [Configuration Overview](#configuration-overview) - Quickly see how you can configure your CRA installation with this plugin.\n- [Recipes](https://github.com/sharegate/craco/tree/master/recipes) – Short recipes for common use cases.\n- [Available Plugins](https://github.com/sharegate/craco#community-maintained-plugins) - Plugins maintained by the community.\n- [Develop a Plugin](#develop-a-plugin) - How to develop a plugin for `craco`.\n- [Changelog](https://github.com/sharegate/craco/tree/master/changelog) - List of major changes\n\n**Acknowledgements:**\n\nWe 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.\n\nAlso, please note that the configuration style of this plugin has been greatly influenced by the way [Vue CLI](https://cli.vuejs.org/guide/) does it.\n\n**Please Note:**\n\nBy 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.\n\n## You updated craco and everything falls apart\n\nBefore logging an issue, please consult the [changelog](https://github.com/sharegate/craco/tree/master/changelog).\n\nIf you can't find a solution to your problem in the changelog, log an issue and someone should help you quickly!\n\n## Installation\n\nInstall the plugin from **npm**:\n\n```bash\n$ yarn add @craco/craco\n\n# OR\n\n$ npm install @craco/craco --save\n```\n\nCreate a `craco.config.js` file in the root directory:\n\n```\nmy-app\n├── node_modules\n├── craco.config.js\n└── package.json\n```\n\nExport your configuration as an **object literal**:\n\n```javascript\n/* craco.config.js */\n\nmodule.exports = {\n    ...\n}\n```\n\nor a **function**:\n\n```javascript\n/* craco.config.js */\n\nmodule.exports = function({ env, paths }) {\n    return {\n        ...\n    };\n}\n```\n\nUpdate the existing calls to `react-scripts` in the `scripts` section of your `package.json` file to use the `craco` CLI:\n\n```diff\n/* package.json */\n\n\"scripts\": {\n-   \"start\": \"react-scripts start\",\n+   \"start\": \"craco start\",\n-   \"build\": \"react-scripts build\",\n+   \"build\": \"craco build\"\n-   \"test\": \"react-scripts test\",\n+   \"test\": \"craco test\"\n}\n```\n\nStart your app for development:\n\n```bash\n$ npm start\n```\n\nOr build your app:\n\n```bash\n$ npm run build\n```\n\n## CLI Options\n\nWhen you execute `craco start` or `craco build` a few options are available.\n\nTo change the location of the configuration file:\n\n```javascript\n\"scripts\": {\n    \"start\": \"craco start --config config/craco-config-with-custom-name.js\"\n}\n```\n\n_When you provide a custom location for the configuration file, `craco` doesn't offer support for Babel with Jest_\n\nTo activate **verbose** logging:\n\n```javascript\n\"scripts\": {\n    \"start\": \"craco start --verbose\"\n}\n```\n\n_For more options view the [configuration overview](#configuration-overview) section._\n\n## Configuration Overview\n\nWhen the property **mode** is available there are 2 possible values:\n- `extends`: the provided configuration will extends the CRA settings (**default mode**)\n- `file`: the CRA settings will be reseted 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.\n\n```javascript\nconst { when, whenDev, whenProd, whenTest, ESLINT_MODES, POSTCSS_MODES } = require(\"@craco/craco\");\n\nmodule.exports = {\n    workspace: false /* (default value) */,\n    reactScriptsVersion: \"react-scripts\" /* (default value) */,\n    reactScriptsPath: \"\" /* Absolute or relative path to the react-scripts folder. */,\n    style: {\n        modules: {\n            localIdentName: \"\"\n        },\n        css: {\n            loaderOptions: { /* Any css-loader configuration options: https://github.com/webpack-contrib/css-loader. */ },\n            loaderOptions: (cssLoaderOptions, { env, paths }) => { return cssLoaderOptions; }\n        },\n        sass: {\n            loaderOptions: { /* Any sass-loader configuration options: https://github.com/webpack-contrib/sass-loader. */ },\n            loaderOptions: (sassLoaderOptions, { env, paths }) => { return sassLoaderOptions; }\n        },\n        postcss: {\n            mode: \"extends\" /* (default value) */ || \"file\",\n            plugins: [],\n            env: {\n                autoprefixer: { /* Any autoprefixer options: https://github.com/postcss/autoprefixer#options */ },\n                stage: 3, /* Any valid stages: https://cssdb.org/#staging-process. */\n                features: { /* Any CSS features: https://preset-env.cssdb.org/features. */ }\n            },\n            loaderOptions: { /* Any postcss-loader configuration options: https://github.com/postcss/postcss-loader. */ },\n            loaderOptions: (postcssLoaderOptions, { env, paths }) => { return postcssLoaderOptions; }\n        }\n    },\n    eslint: {\n        enable: true /* (default value) */,\n        mode: \"extends\" /* (default value) */ || \"file\",\n        configure: { /* Any eslint configuration options: https://eslint.org/docs/user-guide/configuring */ },\n        configure: (eslintConfig, { env, paths }) => { return eslintConfig; },\n        loaderOptions: { /* Any eslint-loader configuration options: https://github.com/webpack-contrib/eslint-loader. */ },\n        loaderOptions: (eslintOptions, { env, paths }) => { return eslintOptions; }\n    },\n    babel: {\n        presets: [],\n        plugins: [],\n        loaderOptions: { /* Any babel-loader configuration options: https://github.com/babel/babel-loader. */ },\n        loaderOptions: (babelLoaderOptions, { env, paths }) => { return babelLoaderOptions; }\n    },\n    typescript: {\n        enableTypeChecking: true /* (default value)  */\n    },\n    webpack: {\n        alias: {},\n        plugins: [],\n        configure: { /* Any webpack configuration options: https://webpack.js.org/configuration */ },\n        configure: (webpackConfig, { env, paths }) => { return webpackConfig; }\n    },\n    jest: {\n        babel: {\n            addPresets: true, /* (default value) */\n            addPlugins: true  /* (default value) */\n        },\n        configure: { /* Any Jest configuration options: https://jestjs.io/docs/en/configuration. */ },\n        configure: (jestConfig, { env, paths, resolve, rootDir }) => { return jestConfig; }\n    },\n    devServer: { /* Any devServer configuration options: https://webpack.js.org/configuration/dev-server/#devserver. */ },\n    devServer: (devServerConfig, { env, paths, proxy, allowedHost }) => { return devServerConfig; },\n    plugins: [\n        {\n            plugin: {\n                overrideCracoConfig: ({ cracoConfig, pluginOptions, context: { env, paths } }) => { return cracoConfig; },\n                overrideWebpackConfig: ({ webpackConfig, cracoConfig, pluginOptions, context: { env, paths } }) => { return webpackConfig; },\n                overrideDevServerConfig: ({ devServerConfig, cracoConfig, pluginOptions, context: { env, paths, proxy, allowedHost } }) => { return devServerConfig; },\n                overrideJestConfig: ({ jestConfig, cracoConfig, pluginOptions, context: { env, paths, resolve, rootDir } }) => { return jestConfig };\n            },\n            options: {}\n        }\n    ]\n};\n```\n\n## Develop a plugin\n\nThere are 3 functions available to a plugin:\n- `overrideCracoConfig`: Let a plugin customize the config object before it's process by `craco`.\n- `overrideWebpackConfig`: Let a plugin customize the `webpack` config that will be used by CRA.\n- `overrideJestConfig`: Let a plugin customize the `Jest` config that will be used by CRA.\n\n**Important:**\n\nEvery functions must return the updated config object.\n\n### overrideCracoConfig\n\nThe function `overrideCracoConfig` let a plugin override the config object **before** it's process by `craco`.\n\nIf a plugin define the function, it will be called with the config object read from the `craco.config.js` file provided by the consumer.\n\n*The function must return a valid config object, otherwise `craco` will throw an error.*\n\nThe function will be called with a single object argument having the following structure:\n\n```javascript\n{\n    cracoConfig: \"The config object read from the craco.config.js file provided by the consumer\",\n    pluginOptions: \"The plugin options provided by the consumer\",\n    context: {\n        env: \"The current NODE_ENV (development, production, etc..)\",\n        paths: \"An object that contains all the paths used by CRA\"\n    }\n}\n```\n\n#### Example\n\nPlugin:\n\n```javascript\n/* craco-plugin-log-craco-config.js */\n\nmodule.exports = {\n    overrideCracoConfig: ({ cracoConfig, pluginOptions, context: { env, paths } }) => {\n        if (pluginOptions.preText) {\n            console.log(pluginOptions.preText);\n        }\n\n        console.log(JSON.stringify(craconfig, null, 4));\n\n        // Always return the config object.\n        return cracoConfig;\n    }\n};\n```\n\nRegistration (in a `craco.config.js` file):\n\n```javascript\nconst logCracoConfigPlugin = require(\"./craco-plugin-log-craco-config\");\n\nmodule.exports = {\n    ...\n    plugins: [\n        { plugin: logCracoConfigPlugin, options: { preText: \"Will log the craco config:\" } }\n    ]\n};\n```\n\n### overrideWebpackConfig\n\nThe function `overrideWebpackConfig` let a plugin override the `webpack` config object **after** it's been customized by `craco`.\n\n*The function must return a valid config object, otherwise `craco` will throw an error.*\n\nThe function will be called with a single object argument having the following structure:\n\n```javascript\n{\n    webpackConfig: \"The webpack config object already customized by craco\",\n    cracoConfig: \"The configuration object read from the craco.config.js file provided by the consumer\",\n    pluginOptions: \"The plugin options provided by the consumer\",\n    context: {\n        env: \"The current NODE_ENV (development, production, etc..)\",\n        paths: \"An object that contains all the paths used by CRA\"\n    }\n}\n```\n\n#### Example\n\nPlugin:\n\n```javascript\n/* craco-plugin-log-webpack-config.js */\n\nmodule.exports = {\n    overrideWebpackConfig: ({ webpackConfig, cracoConfig, pluginOptions, context: { env, paths } }) => {\n        if (pluginOptions.preText) {\n            console.log(pluginOptions.preText);\n        }\n\n        console.log(JSON.stringify(webpackConfig, null, 4));\n\n        // Always return the config object.\n        return webpackConfig;\n    }\n};\n```\n\nRegistration (in a `craco.config.js` file):\n\n```javascript\nconst logWebpackConfigPlugin = require(\"./craco-plugin-log-webpack-config\");\n\nmodule.exports = {\n    ...\n    plugins: [\n        { plugin: logWebpackConfigPlugin, options: { preText: \"Will log the webpack config:\" } }\n    ]\n};\n```\n\n### overrideJestConfig\n\nThe function `overrideJestConfig` let a plugin override the `Jest` config object **after** it's been customized by `craco`.\n\n*The function must return a valid config object, otherwise `craco` will throw an error.*\n\nThe function will be called with a single object argument having the following structure:\n\n```javascript\n{\n    jestConfig: \"The Jest config object already customized by craco\",\n    cracoConfig: \"The configuration object read from the craco.config.js file provided by the consumer\",\n    pluginOptions: \"The plugin options provided by the consumer\",\n    context: {\n        env: \"The current NODE_ENV (development, production, etc..)\",\n        paths: \"An object that contains all the paths used by CRA\",\n        resolve: \"Provided by CRA\",\n        rootDir: \"Provided by CRA\"\n    }\n}\n```\n\n#### Example\n\nPlugin:\n\n```javascript\n/* craco-plugin-log-jest-config.js */\n\nmodule.exports = {\n    overrideJestConfig: ({ jestConfig, cracoConfig, pluginOptions, context: { env, paths, resolve, rootDir } }) => {\n        if (pluginOptions.preText) {\n            console.log(pluginOptions.preText);\n        }\n\n        console.log(JSON.stringify(jestConfig, null, 4));\n\n        // Always return the config object.\n        return jestConfig;\n    }\n};\n```\n\nRegistration (in a `craco.config.js` file):\n\n```javascript\nconst logJestConfigPlugin = require(\"./craco-plugin-log-jest-config\");\n\nmodule.exports = {\n    ...\n    plugins: [\n        { plugin: logJestConfigPlugin, options: { preText: \"Will log the Jest config:\" } }\n    ]\n};\n```\n\n### Utility functions\n\nA few utility functions are provided by `craco` to develop a plugin:\n\n```javascript\nconst { getLoader, getLoaders, removeLoader, loaderByName, throwUnexpectedConfigError } = require(\"@craco/craco\");\n```\n\n#### getLoader\n\nRetrieve the **first** loader that match the specified criteria from the webpack config.\n\nReturns:\n\n```javascript\n{\n    isFound: true | false,\n    match: {\n        loader,\n        parent,\n        index\n    }\n}\n```\n\nUsage:\n\n```javascript\nconst { getLoader, loaderByName } = require(\"@craco/craco\");\n\nconst { isFound, match } = getLoader(webpackConfig, loaderByName(\"eslint-loader\"));\n\nif (isFound) {\n    // do stuff...\n}\n```\n\n#### getLoaders\n\nRetrieve **all** the loaders that match the specified criteria from the webpack config.\n\nReturns:\n\n```javascript\n{\n    hasFoundAny: true | false,\n    matches: [\n        {\n            loader,\n            parent,\n            index\n        }\n    ]\n}\n```\n\nUsage:\n\n```javascript\nconst { getLoaders, loaderByName } = require(\"@craco/craco\");\n\nconst { hasFoundAny, matches } = getLoaders(webpackConfig, loaderByName(\"babel-loader\"));\n\nif (hasFoundAny) {\n    matches.forEach(x => {\n        // do stuff...\n    });\n}\n```\n\n#### removeLoaders\n\nRemove **all** the loaders that match the specified criteria from the webpack config.\n\nReturns:\n\n```javascript\n{\n    hasRemovedAny:: true | false,\n    removedCount:: int\n}\n```\n\nUsage:\n\n```javascript\nconst { removeLoaders, loaderByName } = require(\"@craco/craco\");\n\nremoveLoaders(webpackConfig, loaderByName(\"eslint-loader\"));\n```\n\n#### addBeforeLoader\n\nAdd a new *loader* **before** the loader that match specified criteria to the webpack config.\n\nReturns:\n\n```javascript\n{\n    isAdded: true | false\n}\n```\n\nUsage:\n\n```javascript\nconst { addBeforeLoader, loaderByName } = require(\"@craco/craco\");\n\nconst myNewWebpackLoader = {\n    loader: require.resolve(\"tslint-loader\")\n};\n\naddBeforeLoader(webpackConfig, loaderByName(\"eslint-loader\"), myNewWebpackLoader);\n```\n\n#### addBeforeLoaders\n\nAdd a new *loader* **before** all the loaders that match specified criteria to the webpack config.\n\nReturns:\n\n```javascript\n{\n    isAdded: true | false,\n    addedCount: int\n}\n```\n\nUsage:\n\n```javascript\nconst { addBeforeLoaders, loaderByName } = require(\"@craco/craco\");\n\nconst myNewWebpackLoader = {\n    loader: require.resolve(\"tslint-loader\")\n};\n\naddBeforeLoaders(webpackConfig, loaderByName(\"eslint-loader\"), myNewWebpackLoader);\n```\n\n#### addAfterLoader\n\nAdd a new *loader* **after** the loader that match specified criteria to the webpack config.\n\nReturns:\n\n```javascript\n{\n    isAdded: true | false\n}\n```\n\nUsage:\n\n```javascript\nconst { addAfterLoader, loaderByName } = require(\"@craco/craco\");\n\nconst myNewWebpackLoader = {\n    loader: require.resolve(\"tslint-loader\")\n};\n\naddAfterLoader(webpackConfig, loaderByName(\"eslint-loader\"), myNewWebpackLoader);\n```\n\n#### addAfterLoaders\n\nAdd a new *loader* **after** all the loaders that match specified criteria to the webpack config.\n\nReturns:\n\n```javascript\n{\n    isAdded: true | false,\n    addedCount: int\n}\n```\n\nUsage:\n\n```javascript\nconst { addAfterLoaders, loaderByName } = require(\"@craco/craco\");\n\nconst myNewWebpackLoader = {\n    loader: require.resolve(\"tslint-loader\")\n};\n\naddAfterLoaders(webpackConfig, loaderByName(\"eslint-loader\"), myNewWebpackLoader);\n```\n\n#### throwUnexpectedConfigError\n\nThrow 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.\n\nRaises an error and crashes Node.js:\n\n```bash\n$ yarn start\nyarn run v1.12.3\n$ craco start\n/path/to/your/app/craco.config.js:23\n            throw new Error(\n            ^\n\n    Error: Can't find eslint-loader in the webpack config!\n\n    This error probably occurred because you updated react-scripts or craco. Please try updating craco-less to the latest version:\n\n       $ yarn upgrade craco-less\n\n    Or:\n\n       $ npm update craco-less\n\n    If that doesn't work, craco-less needs to be fixed to support the latest version.\n    Please check to see if there's already an issue in the ndbroadbent/craco-less repo:\n\n       * https://github.com/ndbroadbent/craco-less/issues?q=is%3Aissue+webpack+eslint-loader\n\n    If not, please open an issue and we'll take a look. (Or you can send a PR!)\n\n    You might also want to look for related issues in the craco and create-react-app repos:\n\n       * https://github.com/sharegate/craco/issues?q=is%3Aissue+webpack+eslint-loader\n       * https://github.com/facebook/create-react-app/issues?q=is%3Aissue+webpack+eslint-loader\n\n    at throwUnexpectedConfigError (/path/to/your/app/craco.config.js:23:19)\n    ...\n```\n\nUsage:\n\n```javascript\nconst { getLoader, loaderByName, throwUnexpectedConfigError } = require(\"@craco/craco\");\n\n// Create a helper function if you need to call this multiple times\nconst throwError = (message, githubIssueQuery) =>\n    throwUnexpectedConfigError({\n        packageName: \"craco-less\",\n        githubRepo: \"ndbroadbent/craco-less\",\n        message,\n        githubIssueQuery,\n    });\n\nconst { isFound, match } = getLoader(webpackConfig, loaderByName(\"eslint-loader\"));\n\nif (!isFound) {\n    throwError(\"Can't find eslint-loader in the webpack config!\", \"webpack+eslint-loader\")\n}\n```\n\nOptions:\n\n```javascript\n{\n    message: \"An error message explaining what went wrong\",\n    packageName: \"NPM package name\",\n    githubRepo: \"GitHub repo where people can open an issue. Format: username/repo\",\n    githubIssueQuery: \"Search string to find related issues\"\n}\n```\n\n> Only `message` is required.\n\n## Acknowledgements\n\n[@timarney](https://github.com/timarney) for having created [react-app-rewired](https://github.com/timarney/react-app-rewired).\n\n## License\n\nCopyright © 2019, 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/sharegate/craco/blob/master/LICENSE.\n","readmeFilename":"README.md","_id":"@craco/craco@4.0.0","_npmVersion":"6.4.1","_nodeVersion":"10.11.0","_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"dist":{"integrity":"sha512-YWBywRU77lLLEW2Ue3TqYjthOxknz1/Ah7GyfAEILBcueZm0sfKaLbAxP9AfYdLSNOff0InvWnmOpu5yFGml9w==","shasum":"9baabdc4bd4e156c3dbda647f5bf19b4cfc991ae","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-4.0.0.tgz","fileCount":31,"unpackedSize":84173,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcpAcGCRA9TVsSAnZWagAA1BQP/REzRt2xv1EXGZt/164+\n6DyxtEQnyGUAhfzr1hHuvuPjBl2L+8RiYeqEXoeNL/EfdX6aAia0w7TIrdvl\nH2x6llS6xNPvY7lJQnRpqM3XC1nVXUScgpw9Yi9d2sU/sL3sP+G2t1QZzzqd\nhYkRR7qdEYSm4F0njYq2Rm6Rq6j6VkAymomzfidEvWyZ/toMRNObIJsjeqhk\nLFB5O3Qh9js0Zxvcn7Hn7GTSDvFOxpAxhkBGHHAjqSJKTx4SQgeoVo4fFJ7q\nX4brUQ6kYRGap8W9B406H2+FRkJc7U5/Dld9gEREknTtiY4E32s4RVKf0H5F\nhCw7TYq6qDO9wRG/Vc+mGFzrs8dNcDBTIxdxqJx8bULn9kadZd9c53geBSDY\nGrzhDBaTc/TCfMNdBazqhslYbA2hzSapLKlQ3LeqQXJrcXL2RxiUOQZGuhhO\nbvxOXMSb1Y3pCIMHYh2SGrcFRKJuufkR6HmAh7tVJB1iHzwST80jOAlPaOgc\nhxeLgN3/BVBVgBCaKCxCHLRxkW3Wp3N2jgIXImvgF7iJXr5VbJeS/qHlKiBy\n5821Yrdm6cUVgJEW5CFbKkfLpanpeRLruz5qCS+s2DRp1WtuRiicNXW5uR7Q\n+ALXRJnUwo7vPZllWfEYRYjB6+3H/Gt75jdpi2lMAeqv4x7Q6i7L4AdkI/0O\ncdbi\r\n=opjC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDBfoUMFyGyXrCXBVHRwGz7vqurGkHgCNHZgrzl4WHz6AIhAICoBNZhAEVY/ys6Z7TymOc88PxMnO0JrDaCQ0n4GdNz"}]},"maintainers":[{"email":"dev@formapi.io","name":"anonymous"},{"email":"pa.lafrance@gmail.com","name":"anonymous"},{"email":"yohan.belval@gmail.com","name":"anonymous"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_4.0.0_1554253573660_0.9814021000667148"},"_hasShrinkwrap":false},"4.0.1":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app v2.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/sharegate/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/sharegate/craco/issues"},"homepage":"https://github.com/sharegate/craco","engines":{"node":">=6"},"bin":{"craco":"./bin/craco.js"},"peerDependencies":{"react-scripts":"*"},"devDependencies":{"react-scripts":"2.1.1"},"dependencies":{"cross-spawn":"6.0.5","lodash.mergewith":"4.6.1","webpack-merge":"4.1.4"},"version":"4.0.1","gitHead":"3ceadd978599cb28e6e468215653ccd62d8f9d17","_resolved":"","_integrity":"","_from":"file:craco-craco-4.0.1.tgz","_id":"@craco/craco@4.0.1","_npmVersion":"6.4.1","_nodeVersion":"10.11.0","_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"dist":{"integrity":"sha512-cJOjPPGyzX2cIuLcSwDT0wQadtJRjzIFVoEPI/JF8o+PpxAmbw9p4rtp88TqoytP04cIDwq49dQEv4oX4vLSTg==","shasum":"b9afd218e4f566c2cd83a94e6532ee8e789f451e","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-4.0.1.tgz","fileCount":31,"unpackedSize":84173,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcpnH5CRA9TVsSAnZWagAAh+EP+wce1dIt/9m3QHHTz8M/\nToJzoP7a7Pe+cd4Dba+Wakl48rl5icwI+qf4wZZMM4zZksBpD2jlS8+yotKJ\nCdQiVQl2oTSFUuAVHO81erIAIDX/S/Wrs96s+AyU3IlV1pl7Rkt4FUWA5vFU\npAVaoUfcyzKZerb81NMN63lD9jaIW4FXVaSk+RFzPzr4TRd4W1RNEHRQmfic\nrbqKo3La3bLPWLP97muQqzZOaYj5pUDupW+xezygBwQJIkkHYuXqm43ZIXEU\n5KYA4mO/cIU1xG+tttGNoMu43Yi1KSkxQszacqXM4H9e8GY/39wruQNLsfkQ\n7OnzfiHjD1QFtXrTkv30kiePls3qxc9T8QaP4uyyuG+rqUucStdlEpJN9MmB\n3pR1F41y6+PutwFONodN95OVgKdpfRi7A4lpfpErjpnmJzPrpqa5DEwGoLxn\n2WZYf/NMM2p89PT8uw7l1AeBoWOg0HokyWysLuVzOVZm2VsKL/3tlaWl2e+X\n2Fbigw4HOKp0IyvW/aB2qdBlVSgdSkBxj4/IcLJzJlRvdZ2kqjDzNaA4DBrR\n50RmvKvJNYOEZM1NzruZ0VF5lzf3ET+ZIcNdYxWhUzINtfl/aeV7IqmxKNBG\nsK6s0Qt0jX3LsM88FnCl3vxntZJiZBMj0yxNmluigztQjElV+GAQl1+64YYm\nYLVL\r\n=XdO+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCLSz3DV1XO5liKAhin0rY9sxbRI1RJeteUiqILZgn+xQIgJETwlY59BfB4kjECG7KcGT2l7k3o5UsIZn78B2DIyI8="}]},"maintainers":[{"email":"dev@formapi.io","name":"anonymous"},{"email":"pa.lafrance@gmail.com","name":"anonymous"},{"email":"yohan.belval@gmail.com","name":"anonymous"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_4.0.1_1554412024326_0.044338156861365"},"_hasShrinkwrap":false},"4.1.0":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app v2.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/sharegate/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/sharegate/craco/issues"},"homepage":"https://github.com/sharegate/craco","engines":{"node":">=6"},"bin":{"craco":"./bin/craco.js"},"peerDependencies":{"react-scripts":"*"},"devDependencies":{"react-scripts":"2.1.1"},"dependencies":{"cross-spawn":"6.0.5","lodash.mergewith":"4.6.1","webpack-merge":"4.1.4"},"version":"4.1.0","gitHead":"f464478dce1aaa4cdd7abd2144d834eb847414d2","_resolved":"","_integrity":"","_from":"file:craco-craco-4.1.0.tgz","_id":"@craco/craco@4.1.0","_npmVersion":"6.4.1","_nodeVersion":"10.11.0","_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"dist":{"integrity":"sha512-yaCjyC2GKFsAMZRtBkB61ZSAPcuEn5U3PKRTc+Cwy0IW5KgLDposutT9np44AfaZXOw1kd9Z0bgy+f0HiB9vNg==","shasum":"f8ffbce0324c2d68fd025291a8c1866359bbecfd","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-4.1.0.tgz","fileCount":31,"unpackedSize":84267,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcpqjbCRA9TVsSAnZWagAA6qUP/3q4ppqSE16ESu9zcmlh\nuWCtCA2HGhQVJ/f8RG2KHpvINRcNhAyTGDb6siieFIN/ISr6s8DSzU7IrOo0\nEI4DaJBYy2AIiPh2m97u1HKLe8NaSqKHv2LDg0hKnTHmiwn7rXkoauehErQp\nDPnAZW3pnZUaCUdMWFAQ7k46knCF8jMwkheTvk+32VBD2lfRvZ2UE/4M/nPB\nLhcvYDjGqTpLKB+vwTjBsWgzC5C9W34CKnPFh04ViyMfGpNuaApqrIqExyAR\nHDu1kRqrtr+ry33rPAQwyy6hxVuZ+Mp9yXZ7VG3aTDA3koKS9nC2Pmzuf4Z2\nakXOTBAoOiJPCYKyy4I8fkGxDi/eLBiaamshJjcP0dJJXN9I7A6DY+0HI9B8\nuR9D/H2mn+liDiouJgETVkc7Se7i3z00vduESOd75y68fGhvurLOYfR/cdJ6\nM0/6qwfkbYB1KNefzW7uPM7A9ulHDjR/x3czsQD7iOtuX5lo7cTpBtpmG3PT\npOmHzXOKpqJ/ezl0DGHy8NbLAvRnGY52vMFd2eV6zkTDKO46LVuTO1UEw6OW\nJ/K7A55VZrYgZf49L5SHan+NkanHJb/tnp8Pu3ERoGJZ2h/J6YAffdolalfG\n3/4rBg9pWuIlz6iNfzN65fCyJtYakQ0vhL1ocX40twrntvbrkjahVKnaoy3g\npnLE\r\n=TsT3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCdGq0aHqhH2vh17V57g3vP09N3kJ5nErPmym5Mcv9WkQIhAL9HwiRpv8tlD6nAC5Ymgza0uBcb9vi/bvgcfN8d0UT/"}]},"maintainers":[{"email":"dev@formapi.io","name":"anonymous"},{"email":"pa.lafrance@gmail.com","name":"anonymous"},{"email":"yohan.belval@gmail.com","name":"anonymous"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_4.1.0_1554426074529_0.4047156599086654"},"_hasShrinkwrap":false},"5.0.0":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app v2.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/sharegate/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/sharegate/craco/issues"},"homepage":"https://github.com/sharegate/craco","engines":{"node":">=6"},"bin":{"craco":"./bin/craco.js"},"peerDependencies":{"react-scripts":"*"},"devDependencies":{"react-scripts":"2.1.1"},"dependencies":{"cross-spawn":"6.0.5","lodash.mergewith":"4.6.1","webpack-merge":"4.1.4"},"version":"5.0.0","gitHead":"273a937a4c7ee9e9e00911805e9eb8a634148e9c","_resolved":"","_integrity":"","_from":"file:craco-craco-5.0.0.tgz","_id":"@craco/craco@5.0.0","_npmVersion":"6.4.1","_nodeVersion":"10.11.0","_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"dist":{"integrity":"sha512-zD8F+3D5AJaUDCzj5G7k9eVcBGomlHjjvpmo2QuqhmVdIclfe1/vfSipazlCc/RhrEnW0J2UoSh1Uf0ga2Tnew==","shasum":"4600aa1c53ad95135f1366204f2d326cd13f4f40","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-5.0.0.tgz","fileCount":31,"unpackedSize":84332,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcvn6uCRA9TVsSAnZWagAAib4P/3tpqup1MAFBswdz0DFV\niAEjI8JyYJv/Ip9kNo7vy5/eHevgSEpY3zFFDyMWnlHxfnDMEKas6gfIF6Lk\n5oKF434gMYWesgGk5yNv2elb/zHNX9zdlrQJrMOKjoQC6DpRieS2rU/5Iwwd\n7tB+Amk9tiJfT8wcMMUT7H3XK53e3iEdrqVuCDuFNh3ou5lhRK1cf6/gUEXI\n1XVOUTYW3wQwFqJ3SyXG36Oudu+m4foIMoGbWHY0DF2WudGX0QJPJWPFJByQ\nFZwAHsyX5fpoGoELHWc1hpSBhzpk16BwdFK2UhmBkpC1gV0Dl4ECOetmCj7R\nVLOJX/ZI0axsbdpSb7FXkv+4AlOe/VsG8K2NTfsmye+whkib9uMCFkA0g6Hy\nD+1RWfLaKXknVGCQT7Ve9LJHvj99v33lpUmxes3tUQGsiY941SGRD7dVqEoC\nlTtaXRhTYx3SD56WewMw/IscLGm2PoEyF0xyHKSJ3GAIZPkG4GnF2z/Db/LB\nSxlGz2bHYUtQyRtYA7O7sxhBPA11UAo9oc6z0/5Obr0uzS+Gh2Hv5Fjkjk4Z\nfHT9DYTFMbLWqIIgRbiZJ1rbgvZRxqI6ro8P9WyXRZRd9XNfHhiLdOYYm89o\nwC5WQRoEHiUsm/pf9C+kp4eTvEhqGtciI7Y5qmYPjEMVij/8sK9rjjaBMJEF\n2+wr\r\n=mOqa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHb7xdIihG5IVMyvFnu1E1q0RXcuvAQprb/x0NQfojS+AiB/hNzKDLchd30TT7WjyMfdroVnamGDZn4f2sCi4BZ6tA=="}]},"maintainers":[{"email":"dev@formapi.io","name":"anonymous"},{"email":"pa.lafrance@gmail.com","name":"anonymous"},{"email":"yohan.belval@gmail.com","name":"anonymous"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_5.0.0_1555988141797_0.3084767656952978"},"_hasShrinkwrap":false},"5.0.1":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app v2.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/sharegate/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/sharegate/craco/issues"},"homepage":"https://github.com/sharegate/craco","engines":{"node":">=6"},"bin":{"craco":"./bin/craco.js"},"peerDependencies":{"react-scripts":"*"},"devDependencies":{"react-scripts":"2.1.1"},"dependencies":{"cross-spawn":"6.0.5","lodash.mergewith":"4.6.1","webpack-merge":"4.1.4"},"version":"5.0.1","gitHead":"cc86b5d809f35ec6b4dfd0c50b804649d2983314","_resolved":"","_integrity":"","_from":"file:craco-craco-5.0.1.tgz","_id":"@craco/craco@5.0.1","_npmVersion":"6.4.1","_nodeVersion":"10.11.0","_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"dist":{"integrity":"sha512-l1iNrxKGvuZmSND7GHsPlKOygIan0+UBBJl9BCH2udOHV8v0HYNIYQdy6gN06xF9+Cd8ZCP5HlwuyUSl/kkUvQ==","shasum":"8d293dd038c7777b3afc7024474f74bd81198c55","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-5.0.1.tgz","fileCount":31,"unpackedSize":84332,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcvn+3CRA9TVsSAnZWagAARM0QAJd+rrKlTVaksWlyRNDY\nRNSggTKrfTxiy08dqth4xbLUDH5KgT0r0PDvaiv19c0SYgiqYP5SfFgD1FRt\nE2erk4WQ1+SCQCEZ1J/Gdl0FN8C/JcES7kriJ32Uuzs1VeqCGX/bHq3/aD8x\nvYDgDbEBaL4ZBTQJeZZYPhBFc8DWyZ5UuujOHy6iYe9NvHKGIxYQ8/TQw4U1\n8HT/0lGA3kVPKhq1B5KsA3SIPW5wc9EMStxBAh6McMMmL+O0nqrEvyr1e6k/\nbGz/YGXbuLzJheB0AhgM8Y9xnohpWrrQqccKqHVwpmgYneLkWSaByut5AGVT\neZ8BOvEDSQVwFRcmQ5qXFHYZV2d46P4z99KsH/FxiW3XQ4SRD4N8HA+rrI7H\nNg0L4YjeRk1liUdLqN2J7lsOZMG1bOEMrfsN/sVoQ3z4E/C5SJM55bN8dUqM\nUKdiQugCObt8SWwk8fVyJtg+ukJVIyUOq87zZrZ9Yyk3mWz85M2y+UBcUlbQ\n6W1uYU8xIjrQRvHn3w8CP74V0FgK/chw4Eyqqiti3zi5+6uAZ6w3Vxi8KTy3\np65DqDrqkPHo/fFkSvT5Gw/xzVnb/YBV+GGFANa9E09F7HzLyKuQGpbrQimo\nJM226DQdEhGcGtC++R72kO73+7NlYODuLVfObjmRVEBfpBrIMLB+2b4RyYL7\n6IXZ\r\n=Hr3L\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAMIkDUam4ZlSLhFZAd2Wm5Lmllq++mwf6sUC63FkZXOAiAa1v6GTnnpb5+6OMXC7OQZ5tGlaM63yswDLdca3TEiHg=="}]},"maintainers":[{"email":"dev@formapi.io","name":"anonymous"},{"email":"pa.lafrance@gmail.com","name":"anonymous"},{"email":"yohan.belval@gmail.com","name":"anonymous"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_5.0.1_1555988407194_0.35409788949805066"},"_hasShrinkwrap":false},"5.0.2":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app v2.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/sharegate/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/sharegate/craco/issues"},"homepage":"https://github.com/sharegate/craco","engines":{"node":">=6"},"bin":{"craco":"./bin/craco.js"},"peerDependencies":{"react-scripts":"*"},"devDependencies":{"react-scripts":"2.1.1"},"dependencies":{"cross-spawn":"6.0.5","lodash.mergewith":"4.6.1","webpack-merge":"4.1.4"},"version":"5.0.2","gitHead":"057018efed78a6f92932b475290f97eba0a2bfc7","_resolved":"","_integrity":"","_from":"file:craco-craco-5.0.2.tgz","_id":"@craco/craco@5.0.2","_npmVersion":"6.4.1","_nodeVersion":"10.11.0","_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"dist":{"integrity":"sha512-8jq0QfVXttnIG/XJXAZQasmrlnZ6Eo/3V8kp9Zsi9sADdOiV3T5vpA/9bTrQCK66NJUJ8LSdl9LxVAU+PxXpfg==","shasum":"6ad6a52546bb868d7a5a79bf99f4f58f931490d3","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-5.0.2.tgz","fileCount":31,"unpackedSize":84332,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcvwLDCRA9TVsSAnZWagAAq7cQAJZxT12ye4p+95obsysh\neMxyVYS6/wCmZx+W8vHEhS6bYZuWH5xlPVY1Cl0w3XXjQoVmOIbtGfnXZFKj\nrulNd4YhmVLqYue56TppYGz6abuL6w7AMFSz+P9+RiatXW5TY2TD67iCR5ke\n7SOUAgTg+6BBCdXGmNDi9BOI9SSPIbFcYi9tCZi0rc5+9hkiZHqxSQA28nch\nPhPvJN8ieuniVYaSJWgEZ+6Pr132doeryGajci4c49UxJm/hg4XDKujopOpf\nZUZATCjOJSvQ0JhJKYgP5HRL4FJUSxgFyMgXEa+5BwKduI0TCrjrqQz+/aom\nIIsgkYMRsWC04Z0T0V7u0cT6jKLPJjbr9hJn5xPUH104MdWkf7mrPrkNzVLy\nHA6OdM23moODI479DxWqQhp1L2ztJ/8U1JjzfUgMcNfTnlmVQt+w3Xc1n4ez\nt3kBjrGnnUcTBe1ZhRnFA/F7aOQ+GN3JGQDCtDTU96m+9+jXrS+E2hDSx4K2\ngjqHOyWwMnTPpGJC+S98kuyoaQ86ZUzOeDZOibRouAXp+jy1xmHi9AOwCa6p\nJkrivWXrtrUVBUPHVXVLz5RKsZw9azUA9FrccyMrfBtMsGS38FAi7RxuClNK\nAd2ssP74dLDXZ4a5bD5tX/AYBw2mE+ktckufyd5a+HXHjZdoN75IMyBWemsf\nyJKy\r\n=LeRb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCRoHuny7yYd4dw2D2yZ28Wy4kDqZb9U822NFz2ykgxEwIgPPBcDVWiaSTtsXn1cDEVanK/VQ9n7E35Jqfx/Wbyuoc="}]},"maintainers":[{"email":"dev@formapi.io","name":"anonymous"},{"email":"pa.lafrance@gmail.com","name":"anonymous"},{"email":"yohan.belval@gmail.com","name":"anonymous"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_5.0.2_1556021954881_0.21958974254504082"},"_hasShrinkwrap":false},"5.1.0":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app v2.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/sharegate/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/sharegate/craco/issues"},"homepage":"https://github.com/sharegate/craco","engines":{"node":">=6"},"bin":{"craco":"./bin/craco.js"},"peerDependencies":{"react-scripts":"*"},"devDependencies":{"react-scripts":"2.1.1"},"dependencies":{"cross-spawn":"6.0.5","lodash.mergewith":"4.6.1","webpack-merge":"4.1.4"},"version":"5.1.0","gitHead":"af47f87a18e2e3593ccb205b6fae68612b05320d","_resolved":"","_integrity":"","_from":"file:craco-craco-5.1.0.tgz","_id":"@craco/craco@5.1.0","_npmVersion":"6.4.1","_nodeVersion":"10.11.0","_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"dist":{"integrity":"sha512-/1BHuAXA5RyCFLzCHJVDkfRG7faxxRZSRVrfsZNKz2gbbEMKsIB52psxBeABz6+Vv7cZ3JVwwFbQhGK9X4uhiQ==","shasum":"69c06bafe2d94f5284f87f704e5e47470e663bd5","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-5.1.0.tgz","fileCount":31,"unpackedSize":84468,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc3EHmCRA9TVsSAnZWagAAr2QP/2WUevlMaA6mpHfQiQAx\nHXuLtHfWo2SbQ5CnqKNer3O17eIbnHyjwEIUC4AxOdT0Z+jxq5zGTBtvyO3Z\nt4XZsflWDaCr33AflkuQmOvzz1Qdn2kjBGBttE+TCTa63R+GBae90qP3NIC8\ntQwYcfL9u/Gakgnc9DJoN6NRsyjQJBkS9RyPGhb1p8t2PoVVAel5Ofde/cXp\n07JMr5iSkmYHHOAO/eNinkcKjrFvk73mcI2GJPpQppr9ir+8MZOAEX/9rAgn\nIGRC0ynrnoYiAermxL/ef5XptHvvG/ra/oGr/d1V288/3uAy4GNo6bB+p8z1\nLztQsk5m3um8bVeTrWCiBwgw8/tpJvHE4C1jVzGfFiZKVHquwDj23VgMF5po\n4WU0MEwOlIzFfVygM6d2qrsN1SDmmYimACf1nN1Q4NK3wg9dLh+PdgiAu/gb\nMPlUN6bdHJXfXstDAjUsUoCjrW7fdmf0Rjk0iOLIxz3pgkyqDuVtSVSqwHd5\nNaPLIyUReaDnt79iN7BtxwWx34aJA557cLIKTuOqcDSlX/5fXPcElacnz4k2\nLulaqGxEXqJxNoe+336W7cBFhqjo+jpevf/dGDVUzTe65nRpT0JkUChKJWSq\nlFhzsCxpBch2w4ZKb7A9qJfOu/ENOZr/aXQJIl88F4d4dujeZPqSpQFfkjVO\nemBf\r\n=W8x2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCfEazit/bxzZnJFCH9zPpKpvlSvSymSRcoXlGjh/GbAAIhAKKpM0Lk9DpfkmCD7h9baT7z45+0lultUmiF8Om+7tDz"}]},"maintainers":[{"email":"dev@formapi.io","name":"anonymous"},{"email":"pa.lafrance@gmail.com","name":"anonymous"},{"email":"yohan.belval@gmail.com","name":"anonymous"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_5.1.0_1557938661430_0.26834050028927203"},"_hasShrinkwrap":false},"5.2.0":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app v2.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/sharegate/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/sharegate/craco/issues"},"homepage":"https://github.com/sharegate/craco","engines":{"node":">=6"},"bin":{"craco":"./bin/craco.js"},"peerDependencies":{"react-scripts":"*"},"devDependencies":{"react-scripts":"3.*"},"dependencies":{"cross-spawn":"^6.0.5","lodash.mergewith":"^4.6.1","webpack-merge":"^4.2.1"},"version":"5.2.0","gitHead":"719bdd2b1d7ac30b8d9116661d479f789ceec094","_id":"@craco/craco@5.2.0","_nodeVersion":"10.11.0","_npmVersion":"lerna/3.14.1/node@v10.11.0+x64 (win32)","dist":{"integrity":"sha512-eLWoiTZAIsQaou8x4/roe0Aw6/AI9XP/Bly2jUUgPceHY+eeEEJbV5ilKVY6yyHO5vesXVKbi3ldIBokKoCB/Q==","shasum":"a5cb221d1f387dd31f4103b0e0f52bf40e3b585c","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-5.2.0.tgz","fileCount":31,"unpackedSize":84677,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc41gmCRA9TVsSAnZWagAAD1MP/Rs/zfoRxjFl0XEAGrxF\nli2+WU9RYm+DOafLfHyn1QOycsN/rHMhYHt60BxIa15bFRGN6e/8h3I2fnjJ\n/w0FM2SpiraB7IVOdZ0ny1NrP3cfwr3w5ZZ+a+EqqiHlffsj8bJycyYRFMN9\n92h7fp58TTfn334TllRRGHhHihqgY/RMki450v8uUk8yaju4A2zuh7STf0lg\nvE9hG5+8c5IjS9HJVIChDc2n439x57y4pBf9tddh5ZnL8lnTpicdy5kQYIG9\n1Ac553VOzxy685KLjTcN8V/zDktQ2YN7VCTLj6NxyzsKB0SQUMOSzgrXQiu+\nzsAGUghLLrNbPY/OfuKji4EfWqHgndc9rAZoEt+cFQNd951uG985vW4IepNB\nQq62PjI4YlyPcF6wqsH+RaLvbmPzSQcuNp9xJzWXhideyl2NvGs7vCKdZxRU\n+Y69UQvJzXsVl50OF+8avTKj+qTpAcu90AmUDwYQ5pSO16Gtz6DyuZoaJscU\nGgX76TqQcRMd9dxa8QYWgVXGHJY1Kczg2mN1t2lGtvbmTphohopqeYEJF11x\n2+vkZ97sk/HOQC96pGQzdALwKm+5P5zLTHPFY+hWVMscfKGY25Jc7/foXqJO\ncU4cqZnB0lBXNfzPXY7KvkUYdRNO4Yew1qxaOLdoJAvVrjeaU4hRJM7gNWig\ndXTj\r\n=yV2D\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDTglQ7njpZGORaXl696IDj4a2vUUDcyKf7hrXA8qAXhAiA+E+u+gEfpfR9MT9yNYZsG9+bb6QU91FlTwlzFfCgJYw=="}]},"maintainers":[{"email":"dev@formapi.io","name":"anonymous"},{"email":"pa.lafrance@gmail.com","name":"anonymous"},{"email":"yohan.belval@gmail.com","name":"anonymous"}],"_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_5.2.0_1558403109404_0.5107952644237506"},"_hasShrinkwrap":false},"5.2.1":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/sharegate/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/sharegate/craco/issues"},"homepage":"https://github.com/sharegate/craco","engines":{"node":">=6"},"bin":{"craco":"./bin/craco.js"},"peerDependencies":{"react-scripts":"*"},"devDependencies":{"react-scripts":"3.*"},"dependencies":{"cross-spawn":"^6.0.5","lodash.mergewith":"^4.6.1","webpack-merge":"^4.2.1"},"version":"5.2.1","gitHead":"980d20ad490e9c75bdbb50c1eb162369a469659e","_id":"@craco/craco@5.2.1","_nodeVersion":"10.11.0","_npmVersion":"lerna/3.14.1/node@v10.11.0+x64 (win32)","dist":{"integrity":"sha512-NJfGDeDbDd7yzHvnnf1pTpHg661RtQsC4J5g1qs0lswV+DnVcwG4vrQFdnKm/DkWNzk7lJuG0AdadM2IKMtx+A==","shasum":"d0a8dd7f1eb1c55a7430a5f12534a4ccfbeb8cd0","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-5.2.1.tgz","fileCount":31,"unpackedSize":84674,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc5G4yCRA9TVsSAnZWagAA/f0P/2rerEgRmxTeUIBxnkwW\nDk7L7gekPsd7uZlRWhHx5VVb2qsUblApXVswKg3oVJq6Hf1vM6KvPsKQqG2j\nzBMRNcib3XlAHiFGRgEYvJwZNIs1CPoZwoPW2UAOdHGY1lWwm27ka6Pn40v1\nOV3tyABDNNSbNEGOtCk3sNJWbwyvOHhVsYW3HZLrzC0BCnqVLRwCNSy5aPnz\n4LaD0KKF0hQi8ODW0pOqfH+NZ/VMkjRnlcPnq6sN77N+nXw8IK6fUJksQSpT\nR4N5aICcy/cUG/ZB7vVJjtEFmXSiqTBRQEiTXN+lqHNhkRkwaGowXmhHTdsn\nNcO9Ul+uN1vd2q4Sd/l2vOfi9IBYh07g2vV6d1sxVqw+ee+TY+F8xnDRSZe2\njlYtzFyfr2zNlMDELZ8Y0pREp9k0cjAP71A4sGXpT92oWQkDpDd4K0ruUIJY\nrq13aiN6hrH1BGN8WXglc7Cs7IyLYmQC9geeod/rb3b6YgFEXGoAlDcKxW0K\nsFRVtIPoXyOhMlHbhZvXoSBOx3Ze49MSFQ552MjRQYL3OiOopEgMToBEyIVV\nEOHkgkTg6PScZIS+6/89cCZNkJEdMIGsQUQSTjHj6V01IQ1Wk0UCKRn1oYd9\ncxV9gguHY4tpAkhw7abV5EmUIUbbSW4s8rtEAVNL+b3hRaUNVwp6tfeMN/q+\nXMtU\r\n=Lx4y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDwzS2StVEmWeecTrgLtCFTTqKuvdjr+VPOuLrb0c+NDAIhAOiHBZaUTi1a7xuRQSD0l8hRc4j3MZHJkP9dtkp51ajT"}]},"maintainers":[{"email":"dev@formapi.io","name":"anonymous"},{"email":"pa.lafrance@gmail.com","name":"anonymous"},{"email":"yohan.belval@gmail.com","name":"anonymous"}],"_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_5.2.1_1558474289964_0.7757137983883857"},"_hasShrinkwrap":false},"5.2.2":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/sharegate/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/sharegate/craco/issues"},"homepage":"https://github.com/sharegate/craco","engines":{"node":">=6"},"bin":{"craco":"./bin/craco.js"},"peerDependencies":{"react-scripts":"*"},"devDependencies":{"react-scripts":"3.*"},"dependencies":{"cross-spawn":"^6.0.5","lodash.mergewith":"^4.6.1","webpack-merge":"^4.2.1"},"version":"5.2.2","gitHead":"6b0699f575e00f49158ef0fc63378505aa87cd82","_id":"@craco/craco@5.2.2","_nodeVersion":"10.11.0","_npmVersion":"lerna/3.14.1/node@v10.11.0+x64 (win32)","dist":{"integrity":"sha512-t2dzxHAFSbsA+LCt0OdWiU3xGcJLifvtVi+gnZ4QfMoZWyL2j1CD8EkTiSPTkK4Ao+YrdCSm7gbjnTm6pDkfnA==","shasum":"7c33feb678407f5fc5c51adcf0653a04d903b3aa","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-5.2.2.tgz","fileCount":31,"unpackedSize":84903,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCqJ8CRA9TVsSAnZWagAA7B8P/1tf8yB46TqLBjBviBgd\nQmwd8ify9fgikhjOULR/bId6e50EOVSrXUXaUmIrBcRCvn+dRiQTXOevKcDu\nC/BfADA4jWfSfqJTDoZOcicQ241ZiQ0AY/QD6wNaCxDvdlxvvLqjH4KFpghr\nIRAgWKXGanwlCdEzjq0PpInrw0HTowrmAuhna8LpNo/NDy5L7X2IFxVCa9/Z\nTBKEdNFCx5qm2DCZnMLRTisK0VF4jMgBDsUbKwQsy2R+pWvd+EidYgGSKteE\ntR38jxMPIkZLqR6diMBevxMka3mimqX8qHXJp2WBVAooJ/fc0qWMSoGf2rB6\n5x5b9mt06z3s2FAcS5pdU9U9a4tFEtgO3IqJ797qvkobkgJnqqBu1sLcogZh\nAq3A1kWVcYdwus3x9cpAhGBbsBwPt+M6Ju1zoehq1q0eY3I6aWgAqOY6mnFM\n3CXSFixSy3q+n+ZkXeYg2IiRqcbsi2NQ4ch8GFduwZM17cfCFyS0dFARlsQU\nz+o+F5IcgF0NLimFpsETdRHLQSoZY3mIDT9KvYyem6O+/E4dPjfRMwgPUHpN\nkwDSBARpWp065B4isS1KJ4RVPEMN8PX2x17FxPdrz1jVcJaQGu/lqUgED1SJ\niJ8W+ycpRW1cBUrWLIt+ZSk4bo678phgqF5BLZCC11zy/HKor/QsfGubq3HP\nlxrc\r\n=ouAJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCPz52UC6AObOgktY1wphpRmSvM3nSTF+g+ZdIGgsJ4EAIgB/5XkTTh4dP5HHK7zPibYENv0FlL4LlVaivLs/lCVqE="}]},"maintainers":[{"email":"dev@formapi.io","name":"anonymous"},{"email":"pa.lafrance@gmail.com","name":"anonymous"},{"email":"yohan.belval@gmail.com","name":"anonymous"}],"_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_5.2.2_1560978043740_0.9342537898119112"},"_hasShrinkwrap":false},"5.2.3":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/sharegate/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/sharegate/craco/issues"},"homepage":"https://github.com/sharegate/craco","engines":{"node":">=6"},"bin":{"craco":"./bin/craco.js"},"peerDependencies":{"react-scripts":"*"},"devDependencies":{"react-scripts":"3.*"},"dependencies":{"cross-spawn":"^6.0.5","lodash.mergewith":"^4.6.1","webpack-merge":"^4.2.1"},"version":"5.2.3","gitHead":"c690c6ca1999def37ecf83dc88f5033c2a0d4fc2","_id":"@craco/craco@5.2.3","_nodeVersion":"10.11.0","_npmVersion":"lerna/3.14.1/node@v10.11.0+x64 (win32)","dist":{"integrity":"sha512-fV4BGsARe6W723rDsmrQfezZVT52wI+GJGmK7Ec8DhqzWgMVaULVwqdDm8CIdhKBUzltEs/YcZmig6jh8lvdLQ==","shasum":"5d7d0ffb34953bb30b1265c14fef66b377efaf02","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-5.2.3.tgz","fileCount":31,"unpackedSize":85541,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCuvyCRA9TVsSAnZWagAAJCkP/jeIUicbozllPTlv1DQD\nQ8L2wzcNIwBuGU4+fzlC9oiX0cYIUj97R0pmdBPyhS+fyzK2QGM3kxALm/To\nno+RRM9e7F7sSMCx/BKIqiCioXU0UPNJVrbzWfhMwPwWPTMWfwBk0mOZMngG\nTtHaL+J2cyE6RRV0VxIgEFPKrxp5IqYj6PO9bKCgpgWlPiLCUWykFl6NEt6W\nWsadcmATRhM3QISD7Y+DrAoRBrvfOfuCd65f0QeTmWRkeRzXLq3TRKNIbSX7\nHGj8aD0scGXuCu4yQhe/LumGXN5f6EMopGuMcEeMNpOlKNFbscfnV641mtts\nzp/B0NXblF3RVwzf8bfD7kWmZFMzZitNGtr2R8wQGXo8CWmZicQY/jvX88b3\n+pHa1eMNeQF4yu0q7t9j+5mQiuHGg/RSJLoDFp4GlZyccL9ZmVCNaabD2K9F\nFWYBKNpsxNCTXdSLrXfUJCOzB/1juszOm5o6yn8TeCVrbiuleu7X365rmLdG\nfwTIXdoSCrLGZMiOhiFf6ddZbK2tIRiNMgIWpRH5rTY+tVbZW+3vj2yWZIBJ\nu2wQ+goDejT1wzLSw/kr8UNtuXoSFIlBe/pCwA1ZbTwNk9xopoTrtYLHOZ2Z\n3EheKpYmeze48aGaIac4Q35+ye0TyRP6Ub+rSymawmrcTFo7nvC+Om2OAXje\nZpd+\r\n=RDu0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB6BH9pfL0oW5e/PGIcqHLySy75kcDsvfbiI1e7/c8McAiEA3j4++XeDy+M0Wxh+nTQ2K/wY1jxUgBmVZ/OPqKs4cr4="}]},"maintainers":[{"email":"dev@formapi.io","name":"anonymous"},{"email":"pa.lafrance@gmail.com","name":"anonymous"},{"email":"yohan.belval@gmail.com","name":"anonymous"}],"_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_5.2.3_1560996849537_0.7229240162028241"},"_hasShrinkwrap":false},"5.2.4":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/sharegate/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/sharegate/craco/issues"},"homepage":"https://github.com/sharegate/craco","engines":{"node":">=6"},"bin":{"craco":"./bin/craco.js"},"peerDependencies":{"react-scripts":"*"},"devDependencies":{"react-scripts":"3.*"},"dependencies":{"cross-spawn":"^6.0.5","lodash.mergewith":"^4.6.2","webpack-merge":"^4.2.1"},"version":"5.2.4","gitHead":"f5202f092edc7b4f218e84b4df1d9a7c3be99885","_id":"@craco/craco@5.2.4","_nodeVersion":"12.5.0","_npmVersion":"lerna/3.15.0/node@v12.5.0+x64 (win32)","dist":{"integrity":"sha512-PStzEKDtmeueIhLti0X8VF3LymWi66X0N5g7XL4WV0X/D9eroKY7ar80950IzJWVKSU5mR/4JNDS5EKKw4SLPQ==","shasum":"689201b4f1d4af0833e94edb12e7392f21ebe929","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-5.2.4.tgz","fileCount":31,"unpackedSize":87231,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdJy65CRA9TVsSAnZWagAAQI8P/3zF+R8rQKBtSJ/kj4q6\nCStDFvKOdBNUrCSE3mGQmj6qW95rJLiHsJhQG7qnbN0YKFIjs8KcKgDXfh/1\nc2oWRSecFSnATvNUhkwOJ5eA/Qw3hOhs3oD7/Gg7t6EVuFzNtSKWHeblvB8n\nJtLEvZJ5c2LWTZ9t2ei5GDF7H/bnu6YFWE0m0E4YFGDPWJg5KefgRllPlwQY\n8YDHkWmnbwav9uOhV33n4VYtKcSTrsrs88sJgxloHVV+lrPhEPcOqj0ErQil\nPGJUMXBeK1yBNE8A+0QcISifTttM48BWL0ePpFSaJ23eIzax2/DEta2Chppi\nGE2RHc9UEj4xiiyuvMIC71YTulAo6wyBm/J7Hikz4dl347dfUonKlfwBR/Cb\nPZxFwsKy2yXTV6voyvohykMNyRP7nwm6fbFzju3ashZ2kGsKg9ASV+lzleKD\nzfltlWSaF5THhmHMIXV993y70e1libZp+3QBxLcYKo2eP4q9+1f3B4iSUmb7\nhUM0IOEVITh8ylDCASEFma09fZA2pizhe82UJK8gDC3EOTkYzpYQYJehNeSL\nP9tuNDU9ZWqvYaGFcov5Pk1IMNH3elYpa6gJn1JlbHiafQsX9eolladHAiVV\na/7XajHlsZTLvVjIM9u2lrOhzwjdQB7jGCoJyWyDVS1t117zUeR6QN8wFzwO\n/Mr4\r\n=XgE0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBM2Jk6tv/nUO++jry7z7D6VBHvEJOj/5wf7+ifZt6KUAiEAqyDi4UB9PSbn7aS1jSf+sRybvdnjjELGOUhVmVfzMxo="}]},"maintainers":[{"email":"dev@formapi.io","name":"anonymous"},{"email":"pa.lafrance@gmail.com","name":"anonymous"},{"email":"yohan.belval@gmail.com","name":"anonymous"}],"_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_5.2.4_1562848952180_0.589144366318392"},"_hasShrinkwrap":false},"5.3.0":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/sharegate/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/sharegate/craco/issues"},"homepage":"https://github.com/sharegate/craco","engines":{"node":">=6"},"bin":{"craco":"./bin/craco.js"},"peerDependencies":{"react-scripts":"*"},"devDependencies":{"react-scripts":"3.*"},"dependencies":{"cross-spawn":"^6.0.5","lodash.mergewith":"^4.6.2","webpack-merge":"^4.2.1"},"version":"5.3.0","gitHead":"4d935252cc541f51c60d4fe4a661f66ca1548fbd","_id":"@craco/craco@5.3.0","_nodeVersion":"12.5.0","_npmVersion":"lerna/3.16.4/node@v12.5.0+x64 (win32)","dist":{"integrity":"sha512-QThxeHgNRMuVNvci2gWpNTNwcY5oB5G5LHtrrZFu1YCbPR3sbH4pmGovMHmWjUkDQG3XfHRo3F4FVOkMvzEgHA==","shasum":"d96b1b2f43e6a4bb2fff6c75dfd4b9035743788e","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-5.3.0.tgz","fileCount":34,"unpackedSize":89630,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdUbY0CRA9TVsSAnZWagAAIokP/1jfWEUEmxw8IdR2Hx5a\nGOEXn0dBdZMAwnQQR1wkdeLzfEcxsCg6L+h/W8nZe9KCc3kH/OcRnonZzY46\nP5N/ClrtvAHkb7cAt+I62X16BbY/FaBEiOkgGoDYghVoOwPDM8GP5nONc11w\ny/D3KICsfG+4J4ZExT/hREptXez2V9RWhGwRMp6T6WKtnryW2avIw5KfGLXA\nfn/BUxc6RE9hac6m7cjr3oQWMROaoJFcO0fr7YbUsoLgfQCUumuMO4ybR5rh\njIh7+VgFai+OnC+ekDzElqXGif1UJP4bTik63aKlNTDn+AncbFo2aQ2kAVVb\nOdaQ4vhH/8tkkS1u6s86TSHsprvxtjpsTkxcBXdgVYbVt/gTk5Nuy2a5S1qu\n7LnDxMBsl7Mtvqpp3otcB4keDuTdiAmAJJQLkwdgwhdQB7hQy0AzSEGrMKrX\nfQ8DyNj+I4cbOSJDeRkNNcY4Ibg7R+Aq/0dhnPzfMN4L7fC78RYkh/9fLC/m\nPHBQB9sUHd00t6ryt5ake8IddpdUn/js+biEOk9daCBYxKh3G8mCMfvBnf7j\nyPrauCZlCIdszvxN3JS5c61OWD+zC1KbjuOpP4MwxqxgPIh8VFIl+ZvpGvYK\nYyXyyIdI7OqW8lUMf2J7XscTbivjhZcgZ9ZVUL41dZmUm4T8gTVS+Cm2eVQJ\n0lWv\r\n=tTqt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCRQ3ymS5PRXIz+reIGBzx6iRql/Mu3oYOvLqTuixEGDQIgXFFZR4hckWyQcpIX/t3gc+50Wf1uJrN2sxYTTW+5Ld4="}]},"maintainers":[{"email":"dev@formapi.io","name":"anonymous"},{"email":"pa.lafrance@gmail.com","name":"anonymous"},{"email":"yohan.belval@gmail.com","name":"anonymous"}],"_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_5.3.0_1565636147832_0.7436942196312326"},"_hasShrinkwrap":false},"5.4.0":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/sharegate/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/sharegate/craco/issues"},"homepage":"https://github.com/sharegate/craco","engines":{"node":">=6"},"bin":{"craco":"./bin/craco.js"},"peerDependencies":{"react-scripts":"*"},"devDependencies":{"react-scripts":"3.*"},"dependencies":{"cross-spawn":"^6.0.5","lodash.mergewith":"^4.6.2","webpack-merge":"^4.2.1"},"version":"5.4.0","gitHead":"7d82daf16a87691876258d6688d8fb7758075194","_id":"@craco/craco@5.4.0","_nodeVersion":"12.5.0","_npmVersion":"lerna/3.16.4/node@v12.5.0+x64 (win32)","dist":{"integrity":"sha512-g5htgEDTgC2d4N2luk9c1xHdAT/4qmfp5/JzqI2x5lvmmxtCJXJLMfqrxOx1kobinYWOqdipPmLYVrF10yp0Rw==","shasum":"0e74e3e034f7f2228d0d8935b7b432de05ceec48","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-5.4.0.tgz","fileCount":34,"unpackedSize":89965,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdZa28CRA9TVsSAnZWagAABv8P/1lDBgH1nTkY6cpD3Ust\nJlh+3Un+Pf/VeAwaGmPiS6scgf4VzNCGf91rmfjsX14tLG2yawIA/nxzbWRb\nu7imM4svqX6sKROnSf5cvgUxqO5Te5x8k7/b3eih+xlQj7MpAjPKD67jCpQb\nC0ACH1iR+GSstVkxvi8tYP2O1VtqY6pxhT8dNedG3S32ikTKOUKqaFzQadJs\nz7Le5qxCW7o5DadIY8qleD3oW/XboGAI5RKv+VXUnZ6BucRXSuXapl0co9i0\nMcLqc8DhOriYnjvBokl1Il6r06dpElww1fYNCEOaqhMVNpILZaEZd+cWcE3C\nkNqxZ7hjtgeu5zJD5pXDvYVai7dfV1ulk+0Q6JOvSVvz5x0QvjPNpQO2kmSR\nAlm1zoA92qmfHk0NXYV7IHnqrJwJhM4E47q/pDUOnZz2Tt6NfdbSoTqbfZMZ\n9jP4uUBwXBAoOKjJFN1npIgz8s+ef6pTiAf+aSPtPrv+gZKrZE+v7pEVPonB\n2b/2pqfvD4K9AKORApDJDcV5dlonz8R8bF32B1LTKvHUnSjpBhvMckq3w1dp\nloLU4nG3s1Zyq5hRKdIzpBy0J/uQHRhyfqwiuAJcmXGJm0WZTdZzhDkVUSaP\naHL398dGFWyHNaiHKpe2AD8Mq7o7Rfr4jA5fFuJ2PuNLBBVxQpe0CsG2uH7t\nrFIS\r\n=OASm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDh5R4qMDAVUlzEu3mrHncIFOTcIQo+oEMN7Jq2UUteFQIhAMyrf64GNTcgW4kXJVtqtlIS2AOEJrvoXOQQGqcSlTZr"}]},"maintainers":[{"email":"dev@formapi.io","name":"anonymous"},{"email":"pa.lafrance@gmail.com","name":"anonymous"},{"email":"yohan.belval@gmail.com","name":"anonymous"}],"_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_5.4.0_1566944699233_0.18226711317572453"},"_hasShrinkwrap":false},"5.5.0":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/sharegate/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/sharegate/craco/issues"},"homepage":"https://github.com/sharegate/craco","engines":{"node":">=6"},"bin":{"craco":"./bin/craco.js"},"peerDependencies":{"react-scripts":"*"},"devDependencies":{"react-scripts":"3.*"},"dependencies":{"cross-spawn":"^6.0.5","lodash.mergewith":"^4.6.2","webpack-merge":"^4.2.1"},"version":"5.5.0","gitHead":"72ff5c3367cde3836dab340ae6a0244f7de6af84","_id":"@craco/craco@5.5.0","_nodeVersion":"12.5.0","_npmVersion":"lerna/3.16.4/node@v12.5.0+x64 (win32)","dist":{"integrity":"sha512-VN4pkBku4OmB8DHT/COGfmk4DKIyBDqM8KeGX6jGqsqxhxIf8OI1ULKNtenwvdKTx3XrYMEr0ya4n3VBu8CXew==","shasum":"081b25522d866fbc14b80fe61517f2f10e3e4499","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-5.5.0.tgz","fileCount":34,"unpackedSize":89758,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdflbbCRA9TVsSAnZWagAAb2oP/Rrvag8oyzr+LPgU42V2\ngGRVWY9J/TnnJB5WojCwvwOp24Jo0rVLUvKB+KqJYsBaq9iecQv8jw7CLETb\npXa4vL/fxJW2P/9bblxJXDG2b1XxLsIHeita9Trj67cHyF0kSsTzajAYkmpE\nM6MKUjEhkotogceDIbu1bqysiiwMMvZKc/ynOpC3xh/QvWK9/fISvbgepVL5\ncV9E4Foi1EWCTA91R6WOcJ6Bp6OrCR75Dy+2Q0VHs69d3Vh70AE77OjLzXVL\nxBEqT69gkIQbRvJm0hEkO1I+dK6JTzyqq8Gf//rj22wpuds9HccUeVDiXx1+\nQZUMiBFJO6ZIMWDDmOBoc94UwxpKC5LDpOKvDCeD2bbHyQ0VHqQTq1qwfAJH\nrvSA0L9IGRzcFVootWbiZsQMayWTrOGM9JlgqkJC1FOouDhlinHfG/gKo4TR\n1iISe6NnXcbqY3D4+tEj4jR99MrJ11lEbVp7Ss9HKjLq2dWn+LYGw9PmII63\nu8LWNUiSsA8iD1+w9/WaYeCe3TX6q6+hDBlbUU6bdA7zcmAUUY8ADXrDVtOw\nT7dAPMlurgVqP2JGxyT7nrrpRIZE4Jx8hXIaXxFnDxZCgLeU4SdcSuCv1X1s\nnIvC1YSvDJKlpGu4hihBnLKT2tilMLphoEhYhCE1Eak2rbNDXTUts2gneo8m\n0mpO\r\n=LE/X\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCVKrJZNrrM16ObifIykBe83g6wrxBbMItFBq0s7H4UpAIgIxvNP2diO3Fmn30H4sME9nqtyI+aVyJdFtfaJlrJXVs="}]},"maintainers":[{"email":"dev@formapi.io","name":"anonymous"},{"email":"pa.lafrance@gmail.com","name":"anonymous"},{"email":"yohan.belval@gmail.com","name":"anonymous"}],"_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_5.5.0_1568560858963_0.40141719708587487"},"_hasShrinkwrap":false},"5.6.0":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/gsoft-inc/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/gsoft-inc/craco/issues"},"homepage":"https://github.com/gsoft-inc/craco","engines":{"node":">=6"},"bin":{"craco":"./bin/craco.js"},"peerDependencies":{"react-scripts":"*"},"devDependencies":{"react-scripts":"3.*"},"dependencies":{"cross-spawn":"^7.0.0","lodash.mergewith":"^4.6.2","webpack-merge":"^4.2.2"},"version":"5.6.0","gitHead":"9c9c5e5ee1f79a17af4809945573bfdbdcc912be","readme":"# craco [![Build Status](https://travis-ci.org/sharegate/craco.svg?branch=master)](https://travis-ci.org/sharegate/craco) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-green.svg)](https://github.com/sharegate/craco/pulls)\n\n**C**reate **R**eact **A**pp **C**onfiguration **O**verride is an easy and comprehensible configuration layer for create-react-app.\n\nGet all the benefits of create-react-app **and** customization without using 'eject' by adding a single `craco.config.js` file at the root of your application and customize your eslint, babel, postcss configurations and many more.\n\nAll you have to do is create your app using [create-react-app](https://github.com/facebook/create-react-app/) and customize the configuration with a `craco.config.js` file.\n\n**Support**\n\n- CRA 3.*\n- Yarn\n- Yarn Workspace\n- NPM\n- Lerna (with or without hoisting)\n- Custom `react-scripts` version\n\n**Guide**\n\n- [Custom location for craco.config.js](#custom-location-for-craco.config.js) - Customize the location of your craco.config.js file.\n- [Configuration Overview](#configuration-overview) - Quickly see how you can configure your CRA installation with this plugin.\n- [API](#api) - Have a look at CRACO APIs for Jest and Webpack.\n- [Recipes](https://github.com/sharegate/craco/tree/master/recipes) – Short recipes for common use cases.\n- [Available Plugins](https://github.com/sharegate/craco#community-maintained-plugins) - Plugins maintained by the community.\n- [Develop a Plugin](#develop-a-plugin) - How to develop a plugin for `craco`.\n- [Changelog](https://github.com/sharegate/craco/tree/master/changelog) - List of major changes\n\n**Acknowledgements**\n\nWe 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.\n\nAlso, please note that the configuration style of this plugin has been greatly influenced by the way [Vue CLI](https://cli.vuejs.org/guide/) does it.\n\n**Please Note**\n\nBy 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.\n\n## You updated craco and everything falls apart\n\nBefore logging an issue, please consult the [changelog](https://github.com/sharegate/craco/tree/master/changelog).\n\nIf you can't find a solution to your problem in the changelog, log an issue and someone should help you quickly!\n\n## Installation\n\nInstall the plugin from **npm**:\n\n```bash\n$ yarn add @craco/craco\n\n# OR\n\n$ npm install @craco/craco --save\n```\n\nCreate a `craco.config.js` file in the root directory:\n\n```\nmy-app\n├── node_modules\n├── craco.config.js\n└── package.json\n```\n\nExport your configuration as an **object literal**:\n\n```javascript\n/* craco.config.js */\n\nmodule.exports = {\n    ...\n}\n```\n\nor a **function**:\n\n```javascript\n/* craco.config.js */\n\nmodule.exports = function({ env }) {\n    return {\n        ...\n    };\n}\n```\n\nUpdate the existing calls to `react-scripts` in the `scripts` section of your `package.json` file to use the `craco` CLI:\n\n```diff\n/* package.json */\n\n\"scripts\": {\n-   \"start\": \"react-scripts start\",\n+   \"start\": \"craco start\",\n-   \"build\": \"react-scripts build\",\n+   \"build\": \"craco build\"\n-   \"test\": \"react-scripts test\",\n+   \"test\": \"craco test\"\n}\n```\n\nStart your app for development:\n\n```bash\n$ npm start\n```\n\nOr build your app:\n\n```bash\n$ npm run build\n```\n\n## Custom location for craco.config.js\n\nBoth options support a **relative** or an **absolute** path.\n\n**1- package.json** _(Recommended)_\n\nYou can change the location of the `craco.config.js` file by specifying a value for `cracoConfig` in your `package.json` file.\n\n```javascript\n/* package.json */\n\n{\n    \"cracoConfig\": \"config/craco-config-with-custom-name.js\"\n}\n```\n\n**2- CLI** _(For backward compatibility)_\n\nYou 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_\n\n```javascript\n/* package.json */\n\n{\n    \"scripts\": {\n        \"start\": \"craco start --config config/craco-config-with-custom-name.js\"\n    }\n}\n```\n\n## Configuration Overview\n\nWhen the property **mode** is available there are 2 possible values:\n- `extends`: the provided configuration will extends the CRA settings (**default mode**)\n- `file`: the CRA settings will be reseted 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.\n\n```javascript\nconst { when, whenDev, whenProd, whenTest, ESLINT_MODES, POSTCSS_MODES } = require(\"@craco/craco\");\n\nmodule.exports = {\n    reactScriptsVersion: \"react-scripts\" /* (default value) */,\n    style: {\n        modules: {\n            localIdentName: \"\"\n        },\n        css: {\n            loaderOptions: { /* Any css-loader configuration options: https://github.com/webpack-contrib/css-loader. */ },\n            loaderOptions: (cssLoaderOptions, { env, paths }) => { return cssLoaderOptions; }\n        },\n        sass: {\n            loaderOptions: { /* Any sass-loader configuration options: https://github.com/webpack-contrib/sass-loader. */ },\n            loaderOptions: (sassLoaderOptions, { env, paths }) => { return sassLoaderOptions; }\n        },\n        postcss: {\n            mode: \"extends\" /* (default value) */ || \"file\",\n            plugins: [],\n            env: {\n                autoprefixer: { /* Any autoprefixer options: https://github.com/postcss/autoprefixer#options */ },\n                stage: 3, /* Any valid stages: https://cssdb.org/#staging-process. */\n                features: { /* Any CSS features: https://preset-env.cssdb.org/features. */ }\n            },\n            loaderOptions: { /* Any postcss-loader configuration options: https://github.com/postcss/postcss-loader. */ },\n            loaderOptions: (postcssLoaderOptions, { env, paths }) => { return postcssLoaderOptions; }\n        }\n    },\n    eslint: {\n        enable: true /* (default value) */,\n        mode: \"extends\" /* (default value) */ || \"file\",\n        configure: { /* Any eslint configuration options: https://eslint.org/docs/user-guide/configuring */ },\n        configure: (eslintConfig, { env, paths }) => { return eslintConfig; },\n        loaderOptions: { /* Any eslint-loader configuration options: https://github.com/webpack-contrib/eslint-loader. */ },\n        loaderOptions: (eslintOptions, { env, paths }) => { return eslintOptions; }\n    },\n    babel: {\n        presets: [],\n        plugins: [],\n        loaderOptions: { /* Any babel-loader configuration options: https://github.com/babel/babel-loader. */ },\n        loaderOptions: (babelLoaderOptions, { env, paths }) => { return babelLoaderOptions; }\n    },\n    typescript: {\n        enableTypeChecking: true /* (default value)  */\n    },\n    webpack: {\n        alias: {},\n        plugins: [],\n        configure: { /* Any webpack configuration options: https://webpack.js.org/configuration */ },\n        configure: (webpackConfig, { env, paths }) => { return webpackConfig; }\n    },\n    jest: {\n        babel: {\n            addPresets: true, /* (default value) */\n            addPlugins: true  /* (default value) */\n        },\n        configure: { /* Any Jest configuration options: https://jestjs.io/docs/en/configuration. */ },\n        configure: (jestConfig, { env, paths, resolve, rootDir }) => { return jestConfig; }\n    },\n    devServer: { /* Any devServer configuration options: https://webpack.js.org/configuration/dev-server/#devserver. */ },\n    devServer: (devServerConfig, { env, paths, proxy, allowedHost }) => { return devServerConfig; },\n    plugins: [\n        {\n            plugin: {\n                overrideCracoConfig: ({ cracoConfig, pluginOptions, context: { env, paths } }) => { return cracoConfig; },\n                overrideWebpackConfig: ({ webpackConfig, cracoConfig, pluginOptions, context: { env, paths } }) => { return webpackConfig; },\n                overrideDevServerConfig: ({ devServerConfig, cracoConfig, pluginOptions, context: { env, paths, proxy, allowedHost } }) => { return devServerConfig; },\n                overrideJestConfig: ({ jestConfig, cracoConfig, pluginOptions, context: { env, paths, resolve, rootDir } }) => { return jestConfig };\n            },\n            options: {}\n        }\n    ]\n};\n```\n\n### when, whenDev, whenProd, whenTest\n\nUsage for all those functions is the same, `whenDev, whenProd, whenTest` are shortcuts for `when`.\n\n`when(condition, fct, [unmetValue])`\n\nUsage:\n\n```javascript\nconst { when, whenDev } = require(\"@craco/craco\");\n\nmodule.exports = {\n    eslint: {\n        mode: ESLINT_MODES.file,\n        configure: {\n            formatter: when(process.env.NODE_ENV === \"CI\", require(\"eslint-formatter-vso\"))\n        }\n    },\n    webpack: {\n        plugins: [\n            new ConfigWebpackPlugin(),\n            ...whenDev(() => [new CircularDependencyPlugin()], [])\n        ]\n    }\n};\n```\n\n## API\n\nTo integrate with other tools, it's usefull to have access to the configs generated by CRACO.\n\nThat's what CRACO APIs are for. The current API support Jest and Webpack configs.\n\n### createJestConfig\n\nAccept a `cracoConfig`, a `context` object and `options`. The generated Jest config object is returned.\n\n`createJestConfig(cracoConfig, context = {}, options = { verbose: false, config: null })`\n\nUsage:\n\n```javascript\n/* jest.config.js */\n\nconst { createJestConfig } = require(\"@craco/craco\");\n\nconst cracoConfig = require(\"./craco.config.js\");\nconst jestConfig = createJestConfig(cracoConfig);\n\nmodule.exports = jestConfig;\n```\n\n### createWebpackDevConfig & createWebpackProdConfig\n\nAccept a `cracoConfig`, a `context` object and `options`. The generated Webpack config object is returned.\n\n`createWebpackDevConfig(cracoConfig, context = {}, options = { verbose: false, config: null })`\n`createWebpackProdConfig(cracoConfig, context = {}, options = { verbose: false, config: null })`\n\nUsage:\n\n```javascript\n/* webpack.config.js */\n\nconst { createWebpackDevConfig } = require(\"@craco/craco\");\n\nconst cracoConfig = require(\"./craco.config.js\");\nconst webpackConfig = createWebpackDevConfig(cracoConfig);\n\nmodule.exports = webpackConfig;\n```\n\n### Popular integrations\n\n- [vscode-jest](https://github.com/sharegate/craco/tree/master/recipes/use-a-jest-config-file)\n\n## Develop a plugin\n\nThere are 4 functions available to a plugin:\n- `overrideCracoConfig`: Let a plugin customize the config object before it's process by `craco`.\n- `overrideWebpackConfig`: Let a plugin customize the `webpack` config that will be used by CRA.\n- `overrideDevServerConfig`: Let a plugin customize the dev server config that will be used by CRA.\n- `overrideJestConfig`: Let a plugin customize the `Jest` config that will be used by CRA.\n\n**Important:**\n\nEvery functions must return the updated config object.\n\n### overrideCracoConfig\n\nThe function `overrideCracoConfig` let a plugin override the config object **before** it's process by `craco`.\n\nIf a plugin define the function, it will be called with the config object read from the `craco.config.js` file provided by the consumer.\n\n*The function must return a valid config object, otherwise `craco` will throw an error.*\n\nThe function will be called with a single object argument having the following structure:\n\n```javascript\n{\n    cracoConfig: \"The config object read from the craco.config.js file provided by the consumer\",\n    pluginOptions: \"The plugin options provided by the consumer\",\n    context: {\n        env: \"The current NODE_ENV (development, production, etc..)\",\n        paths: \"An object that contains all the paths used by CRA\"\n    }\n}\n```\n\n#### Example\n\nPlugin:\n\n```javascript\n/* craco-plugin-log-craco-config.js */\n\nmodule.exports = {\n    overrideCracoConfig: ({ cracoConfig, pluginOptions, context: { env, paths } }) => {\n        if (pluginOptions.preText) {\n            console.log(pluginOptions.preText);\n        }\n\n        console.log(JSON.stringify(craconfig, null, 4));\n\n        // Always return the config object.\n        return cracoConfig;\n    }\n};\n```\n\nRegistration (in a `craco.config.js` file):\n\n```javascript\nconst logCracoConfigPlugin = require(\"./craco-plugin-log-craco-config\");\n\nmodule.exports = {\n    ...\n    plugins: [\n        { plugin: logCracoConfigPlugin, options: { preText: \"Will log the craco config:\" } }\n    ]\n};\n```\n\n### overrideWebpackConfig\n\nThe function `overrideWebpackConfig` let a plugin override the `webpack` config object **after** it's been customized by `craco`.\n\n*The function must return a valid config object, otherwise `craco` will throw an error.*\n\nThe function will be called with a single object argument having the following structure:\n\n```javascript\n{\n    webpackConfig: \"The webpack config object already customized by craco\",\n    cracoConfig: \"The configuration object read from the craco.config.js file provided by the consumer\",\n    pluginOptions: \"The plugin options provided by the consumer\",\n    context: {\n        env: \"The current NODE_ENV (development, production, etc..)\",\n        paths: \"An object that contains all the paths used by CRA\"\n    }\n}\n```\n\n#### Example\n\nPlugin:\n\n```javascript\n/* craco-plugin-log-webpack-config.js */\n\nmodule.exports = {\n    overrideWebpackConfig: ({ webpackConfig, cracoConfig, pluginOptions, context: { env, paths } }) => {\n        if (pluginOptions.preText) {\n            console.log(pluginOptions.preText);\n        }\n\n        console.log(JSON.stringify(webpackConfig, null, 4));\n\n        // Always return the config object.\n        return webpackConfig;\n    }\n};\n```\n\nRegistration (in a `craco.config.js` file):\n\n```javascript\nconst logWebpackConfigPlugin = require(\"./craco-plugin-log-webpack-config\");\n\nmodule.exports = {\n    ...\n    plugins: [\n        { plugin: logWebpackConfigPlugin, options: { preText: \"Will log the webpack config:\" } }\n    ]\n};\n```\n\n### overrideDevServerConfig\n\nThe function `overrideDevServerConfig` let a plugin override the dev server config object **after** it's been customized by `craco`.\n\n*The function must return a valid config object, otherwise `craco` will throw an error.*\n\nThe function will be called with a single object argument having the following structure:\n\n```javascript\n{\n    devServerConfig: \"The dev server config object already customized by craco\",\n    cracoConfig: \"The configuration object read from the craco.config.js file provided by the consumer\",\n    pluginOptions: \"The plugin options provided by the consumer\",\n    context: {\n        env: \"The current NODE_ENV (development, production, etc..)\",\n        paths: \"An object that contains all the paths used by CRA\",\n        allowedHost: \"Provided by CRA\"\n    }\n}\n```\n\n#### Example\n\nPlugin:\n\n```javascript\n/* craco-plugin-log-dev-server-config.js */\n\nmodule.exports = {\n    overrideDevServerConfig: ({ devServerConfig, cracoConfig, pluginOptions, context: { env, paths, allowedHost } }) => {\n        if (pluginOptions.preText) {\n            console.log(pluginOptions.preText);\n        }\n\n        console.log(JSON.stringify(devServerConfig, null, 4));\n\n        // Always return the config object.\n        return devServerConfig;\n    }\n};\n```\n\nRegistration (in a `craco.config.js` file):\n\n```javascript\nconst logDevServerConfigPlugin = require(\"./craco-plugin-log-dev-server-config\");\n\nmodule.exports = {\n    ...\n    plugins: [\n        { plugin: logDevServerConfigPlugin, options: { preText: \"Will log the dev server config:\" } }\n    ]\n};\n```\n\n### overrideJestConfig\n\nThe function `overrideJestConfig` let a plugin override the `Jest` config object **after** it's been customized by `craco`.\n\n*The function must return a valid config object, otherwise `craco` will throw an error.*\n\nThe function will be called with a single object argument having the following structure:\n\n```javascript\n{\n    jestConfig: \"The Jest config object already customized by craco\",\n    cracoConfig: \"The configuration object read from the craco.config.js file provided by the consumer\",\n    pluginOptions: \"The plugin options provided by the consumer\",\n    context: {\n        env: \"The current NODE_ENV (development, production, etc..)\",\n        paths: \"An object that contains all the paths used by CRA\",\n        resolve: \"Provided by CRA\",\n        rootDir: \"Provided by CRA\"\n    }\n}\n```\n\n#### Example\n\nPlugin:\n\n```javascript\n/* craco-plugin-log-jest-config.js */\n\nmodule.exports = {\n    overrideJestConfig: ({ jestConfig, cracoConfig, pluginOptions, context: { env, paths, resolve, rootDir } }) => {\n        if (pluginOptions.preText) {\n            console.log(pluginOptions.preText);\n        }\n\n        console.log(JSON.stringify(jestConfig, null, 4));\n\n        // Always return the config object.\n        return jestConfig;\n    }\n};\n```\n\nRegistration (in a `craco.config.js` file):\n\n```javascript\nconst logJestConfigPlugin = require(\"./craco-plugin-log-jest-config\");\n\nmodule.exports = {\n    ...\n    plugins: [\n        { plugin: logJestConfigPlugin, options: { preText: \"Will log the Jest config:\" } }\n    ]\n};\n```\n\n### Utility functions\n\nA few utility functions are provided by `craco` to develop a plugin:\n\n```javascript\nconst { getLoader, getLoaders, removeLoader, loaderByName, throwUnexpectedConfigError } = require(\"@craco/craco\");\n```\n\n#### getLoader\n\nRetrieve the **first** loader that match the specified criteria from the webpack config.\n\nReturns:\n\n```javascript\n{\n    isFound: true | false,\n    match: {\n        loader,\n        parent,\n        index\n    }\n}\n```\n\nUsage:\n\n```javascript\nconst { getLoader, loaderByName } = require(\"@craco/craco\");\n\nconst { isFound, match } = getLoader(webpackConfig, loaderByName(\"eslint-loader\"));\n\nif (isFound) {\n    // do stuff...\n}\n```\n\n#### getLoaders\n\nRetrieve **all** the loaders that match the specified criteria from the webpack config.\n\nReturns:\n\n```javascript\n{\n    hasFoundAny: true | false,\n    matches: [\n        {\n            loader,\n            parent,\n            index\n        }\n    ]\n}\n```\n\nUsage:\n\n```javascript\nconst { getLoaders, loaderByName } = require(\"@craco/craco\");\n\nconst { hasFoundAny, matches } = getLoaders(webpackConfig, loaderByName(\"babel-loader\"));\n\nif (hasFoundAny) {\n    matches.forEach(x => {\n        // do stuff...\n    });\n}\n```\n\n#### removeLoaders\n\nRemove **all** the loaders that match the specified criteria from the webpack config.\n\nReturns:\n\n```javascript\n{\n    hasRemovedAny:: true | false,\n    removedCount:: int\n}\n```\n\nUsage:\n\n```javascript\nconst { removeLoaders, loaderByName } = require(\"@craco/craco\");\n\nremoveLoaders(webpackConfig, loaderByName(\"eslint-loader\"));\n```\n\n#### addBeforeLoader\n\nAdd a new *loader* **before** the loader that match specified criteria to the webpack config.\n\nReturns:\n\n```javascript\n{\n    isAdded: true | false\n}\n```\n\nUsage:\n\n```javascript\nconst { addBeforeLoader, loaderByName } = require(\"@craco/craco\");\n\nconst myNewWebpackLoader = {\n    loader: require.resolve(\"tslint-loader\")\n};\n\naddBeforeLoader(webpackConfig, loaderByName(\"eslint-loader\"), myNewWebpackLoader);\n```\n\n#### addBeforeLoaders\n\nAdd a new *loader* **before** all the loaders that match specified criteria to the webpack config.\n\nReturns:\n\n```javascript\n{\n    isAdded: true | false,\n    addedCount: int\n}\n```\n\nUsage:\n\n```javascript\nconst { addBeforeLoaders, loaderByName } = require(\"@craco/craco\");\n\nconst myNewWebpackLoader = {\n    loader: require.resolve(\"tslint-loader\")\n};\n\naddBeforeLoaders(webpackConfig, loaderByName(\"eslint-loader\"), myNewWebpackLoader);\n```\n\n#### addAfterLoader\n\nAdd a new *loader* **after** the loader that match specified criteria to the webpack config.\n\nReturns:\n\n```javascript\n{\n    isAdded: true | false\n}\n```\n\nUsage:\n\n```javascript\nconst { addAfterLoader, loaderByName } = require(\"@craco/craco\");\n\nconst myNewWebpackLoader = {\n    loader: require.resolve(\"tslint-loader\")\n};\n\naddAfterLoader(webpackConfig, loaderByName(\"eslint-loader\"), myNewWebpackLoader);\n```\n\n#### addAfterLoaders\n\nAdd a new *loader* **after** all the loaders that match specified criteria to the webpack config.\n\nReturns:\n\n```javascript\n{\n    isAdded: true | false,\n    addedCount: int\n}\n```\n\nUsage:\n\n```javascript\nconst { addAfterLoaders, loaderByName } = require(\"@craco/craco\");\n\nconst myNewWebpackLoader = {\n    loader: require.resolve(\"tslint-loader\")\n};\n\naddAfterLoaders(webpackConfig, loaderByName(\"eslint-loader\"), myNewWebpackLoader);\n```\n\n#### throwUnexpectedConfigError\n\nThrow 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.\n\nRaises an error and crashes Node.js:\n\n```bash\n$ yarn start\nyarn run v1.12.3\n$ craco start\n/path/to/your/app/craco.config.js:23\n            throw new Error(\n            ^\n\n    Error: Can't find eslint-loader in the webpack config!\n\n    This error probably occurred because you updated react-scripts or craco. Please try updating craco-less to the latest version:\n\n       $ yarn upgrade craco-less\n\n    Or:\n\n       $ npm update craco-less\n\n    If that doesn't work, craco-less needs to be fixed to support the latest version.\n    Please check to see if there's already an issue in the ndbroadbent/craco-less repo:\n\n       * https://github.com/ndbroadbent/craco-less/issues?q=is%3Aissue+webpack+eslint-loader\n\n    If not, please open an issue and we'll take a look. (Or you can send a PR!)\n\n    You might also want to look for related issues in the craco and create-react-app repos:\n\n       * https://github.com/sharegate/craco/issues?q=is%3Aissue+webpack+eslint-loader\n       * https://github.com/facebook/create-react-app/issues?q=is%3Aissue+webpack+eslint-loader\n\n    at throwUnexpectedConfigError (/path/to/your/app/craco.config.js:23:19)\n    ...\n```\n\nUsage:\n\n```javascript\nconst { getLoader, loaderByName, throwUnexpectedConfigError } = require(\"@craco/craco\");\n\n// Create a helper function if you need to call this multiple times\nconst throwError = (message, githubIssueQuery) =>\n    throwUnexpectedConfigError({\n        packageName: \"craco-less\",\n        githubRepo: \"ndbroadbent/craco-less\",\n        message,\n        githubIssueQuery,\n    });\n\nconst { isFound, match } = getLoader(webpackConfig, loaderByName(\"eslint-loader\"));\n\nif (!isFound) {\n    throwError(\"Can't find eslint-loader in the webpack config!\", \"webpack+eslint-loader\")\n}\n```\n\nOptions:\n\n```javascript\n{\n    message: \"An error message explaining what went wrong\",\n    packageName: \"NPM package name\",\n    githubRepo: \"GitHub repo where people can open an issue. Format: username/repo\",\n    githubIssueQuery: \"Search string to find related issues\"\n}\n```\n\n> Only `message` is required.\n\n## Verbose logging\n\nTo activate **verbose** logging specify the CLI option `--verbose`\n\n```javascript\n/* package.json */\n\n{\n    \"scripts\": {\n        \"start\": \"craco start --verbose\"\n    }\n}\n```\n\n## Acknowledgements\n\n[@timarney](https://github.com/timarney) for having created [react-app-rewired](https://github.com/timarney/react-app-rewired).\n\n## License\n\nCopyright © 2019, 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.\n","readmeFilename":"README.md","_id":"@craco/craco@5.6.0","_nodeVersion":"12.5.0","_npmVersion":"lerna/3.16.4/node@v12.5.0+x64 (win32)","dist":{"integrity":"sha512-1AsLA3bTcyMwQFmOC66htKVBpMEunhCkbVMdsGmUIaHt5n0cDUi3lLO5mWNNmxoxs42dxujsaBziFseCnrTTfw==","shasum":"43315576023637ff3cabf10788cd384a834dfe0a","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-5.6.0.tgz","fileCount":35,"unpackedSize":92944,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdsyl/CRA9TVsSAnZWagAAiKcQAIKCwVoqfO/AifLKx4g/\nLCTJ5z8rLUIJ2LTrNT5VBdX1EG+6wjPaRGXybB5IrNn0zeprL/r5q2uCCRkt\nJTo/sSiWhN47O6RiFsc1d+oLK6Z9blK1c4T4DN4BwUX7Mrjsg6ViZE8o20dF\nLoEgntKhE+uuZv7FhEvKelA6mVW8tNKxycHXkNRfM9uLfblDzd0sUXzoNhBW\nQeCzCjY8KWfZcykDXetVK5/6RQ3/yVm0keyZPwT42D4qdC3n1slQfGemiW3h\nQt9slRUZqpBR77kJ6Omc5CV+9lIQX/9DVSfL8mJpaHp2xJlLFF8wWATwE8dT\nNfFAQFsOZtml6ZQNxxxp9vw63HntJtsjxvV5N7otwI39H94MY45j9BAolAfC\njkjjo9ZAfKajXXgzmP3IS3XfQZlPbOw8rxxl05OUSobPXK3kR/S1dWYoGank\n5Nx9RskSOEFHvnJLEJPEuOMLH9XancHA8XytyCxJgQv+XjKI80CavWLErADb\nu1+W6+7Hpw4JxeWErE0Lc2l9Ct6zbrFknM6QZQ3ymqEUnVHXEhiIIHfEoJGG\n1+CpPSTX/B7thuloC82EPvR6XqbnIdAzl8k50lKJmHy/yKQ03F76v2UmOYyE\nNbGjZvDsySuNtrEgLy1GtND3t3uG7OZHcMCXJr9u58u8Xz83eieEiojcTSUY\nNV+q\r\n=a14U\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBbCxmxUJFEUndHpvz9R0nghjUaXCpag8gZiJOubKlDzAiATsWLYqX0KhXDwnzMQHO29UZVNnuWuMI++2MUDBVXR8A=="}]},"maintainers":[{"email":"dev@formapi.io","name":"anonymous"},{"email":"pa.lafrance@gmail.com","name":"anonymous"},{"email":"yohan.belval@gmail.com","name":"anonymous"}],"_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_5.6.0_1572022655128_0.2710563779285349"},"_hasShrinkwrap":false},"5.6.1":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/gsoft-inc/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/gsoft-inc/craco/issues"},"homepage":"https://github.com/gsoft-inc/craco","engines":{"node":">=6"},"bin":{"craco":"./bin/craco.js"},"peerDependencies":{"react-scripts":"*"},"devDependencies":{"react-scripts":"3.*"},"dependencies":{"cross-spawn":"^7.0.0","lodash.mergewith":"^4.6.2","webpack-merge":"^4.2.2"},"version":"5.6.1","gitHead":"d0e2a5acc23dacf2079ab65bc401ee8e75c351ca","_id":"@craco/craco@5.6.1","_nodeVersion":"12.5.0","_npmVersion":"lerna/3.16.4/node@v12.5.0+x64 (win32)","dist":{"integrity":"sha512-8C+gQG7bBR55kjVc+6yZ4QJgkfVfYNcKQVEjkTkeXwF/Nqm5tUBAyJviOoSVaGlw+avJQEugzYLNSYk9J/2t/A==","shasum":"ececb0c77a69e9988f239ece75233f1c6548b4c1","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-5.6.1.tgz","fileCount":35,"unpackedSize":92944,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdtx8XCRA9TVsSAnZWagAAPbIP/0u8LEF0/s5Omp7kOJYv\nGf1iiaMnYXHa4qDc6mzXKiR/WJfWufrRdzWtL4GHJjaw9i1Nj5floKZiGQHi\nJoENOhSAMptT8kpBBUcj3U4FWQip/fkgsxUwI9aa6Xs3XPPA+mw+s2aK5DeS\nSSdWAlzeyNI8NruM1NnlC7ZzqxEl0MKo1RBh/RnSGDZf4cu9V4oArBag1MKp\n5/x4cyUsvYmWOatgKQa3NrR1jJIKL0DQ04KgZ7ZlgLnER3zEjz9M5cYmFvT5\nYlhFqTiuRXQt0MwNXNGJArSYHvBoTidCng9sgXm96g3kiYyZU++RfLuEvCqO\nFJm9k/Svfig/WmHyxyNVRpqhLAh4+VmC1ZJaOwjmFyqtjLW+RBxmujhNdqHa\n9we/cOkRRMpWlj1Z8K3kf7D7w07o67avLCvBodo//LEnNBATPWKO70aoflrL\nyT6UyiKCJ1GpCcHoYZW00vQqTY3SP9uMXdl3br9vHH7T7HnDxeeabd2HfHqg\nxRZ682HVCXOXD8oiq3cqh/Zq1fTRrB3MhrI3Oj9StYybDtFrh6EJ7TFa54fN\nf7dWePV4cdg9di64pHFY5PqNWJuFqdvvBzkyu97A+nSpyEsLjoaXLJk/TCIP\nRWKio577FjOUn1BZ1rmHCNG17f/cek47i1KfMWWf+AI7zzMCzb9ifJ/dq0xQ\nchsF\r\n=8Lqg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEGjWADeFOpuqYYGSIrybU5J+x7YiimsHvarjorzQT2NAiA9dCNQQ49omL4oORgGoXmKzLw9lWNLyysmXcu7+uCKyQ=="}]},"maintainers":[{"email":"dev@formapi.io","name":"anonymous"},{"email":"pa.lafrance@gmail.com","name":"anonymous"},{"email":"yohan.belval@gmail.com","name":"anonymous"}],"_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_5.6.1_1572282134704_0.8959954764973694"},"_hasShrinkwrap":false},"5.6.2":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/gsoft-inc/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/gsoft-inc/craco/issues"},"homepage":"https://github.com/gsoft-inc/craco","engines":{"node":">=6"},"bin":{"craco":"./bin/craco.js"},"peerDependencies":{"react-scripts":"*"},"devDependencies":{"react-scripts":"3.*"},"dependencies":{"cross-spawn":"^7.0.0","lodash.mergewith":"^4.6.2","webpack-merge":"^4.2.2"},"version":"5.6.2","gitHead":"7828d5d9b10c574e7cededf639e22c44ee965a68","_id":"@craco/craco@5.6.2","_nodeVersion":"12.5.0","_npmVersion":"lerna/3.16.4/node@v12.5.0+x64 (win32)","dist":{"integrity":"sha512-64nPBTTf4EpIAbdVZbgCR77cCTgLI2xgLSesj886HsfatQi6WfcYder4u60CnBsjvQE4/lz8Wa4DvD1ebTXjGQ==","shasum":"d98d660962e810bb1c9bb3e5318b99df6c620472","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-5.6.2.tgz","fileCount":35,"unpackedSize":93132,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzt1ZCRA9TVsSAnZWagAArX4P/3BN+juPUBaI4jCHf8Kk\nUtjR9gRiOB2PEtfGP/U8JibfXqOj7FW8nOYhbPNHaiRdb4ubRB10u/41LtzL\nJisXd2SlHzGpfLbMVSBpLFG1yy6UgJpumbIyZqYYmtLBClndVxrFMUeVCn+o\nbUcPY2/lkRh8sJQ840yPQ+bS5mjvwgJrKn1fmxACqgoD4S4gpo8TSoRketvA\nNfOsGvJTF1/gY07VRNHISO2wpmaua60j/FqXFobBpiALhNY4Xpjit/Jvi/6E\npwbIlmovyDWnZrUwslcEsiINvRhCvd/5heWa7lGDEn0MAmZhDsQ66N20N00k\ny+2neQGhC82CmBW3PyRVn/sjv8SmSmkrGRmaQ4mZubW5dTHBfhkZEsW9Bl8m\nFE3+Bs0hvt7516bWwgS4Xse5kGlWq4TBfNnm8lV+ysEeoG2J6tP1RD7D46CR\n4aVYNX4noB2suyVESTrhuMNIQkVDXFY/Z34jFw/xWH6QhNPwXF4YqGg+XaPK\nb/VC7TM3wmb0yIu4eJylLnTf4dOC1/uPuiQ1ochjBZG5D2X5+WoiCWcKeBXQ\n3/+e14BOhbH7mMsFgnBx8e7LVPcD+xu6eDjZSRN6LbkdkeYVluxiOTowIVNW\n/4l3IUScOH37zG83Y3Z7ra9/KHT/mXx6ESiKT54VU+ehtN+4ivJMvMJn/0M+\nO/t4\r\n=yfXv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCr0pjsgvdnyPjbKKnpgB3ln224Nz+CqUM8DRh8flsd4QIgR+OIfk0I5wTno8+2hToRtW8/p5rTII8WfVCg5jE8q9Q="}]},"maintainers":[{"email":"dev@formapi.io","name":"anonymous"},{"email":"pa.lafrance@gmail.com","name":"anonymous"},{"email":"yohan.belval@gmail.com","name":"anonymous"}],"_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_5.6.2_1573838168961_0.5390633910560645"},"_hasShrinkwrap":false},"5.6.3":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/gsoft-inc/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/gsoft-inc/craco/issues"},"homepage":"https://github.com/gsoft-inc/craco","engines":{"node":">=6"},"bin":{"craco":"./bin/craco.js"},"peerDependencies":{"react-scripts":"*"},"devDependencies":{"react-scripts":"3.*"},"dependencies":{"cross-spawn":"^7.0.0","lodash.mergewith":"^4.6.2","webpack-merge":"^4.2.2"},"version":"5.6.3","gitHead":"10504f6cb2fc1cd44b8ff66349fdc95beb6e4907","_id":"@craco/craco@5.6.3","_nodeVersion":"12.5.0","_npmVersion":"lerna/3.16.4/node@v12.5.0+x64 (win32)","dist":{"integrity":"sha512-QxH+cfLQoqmrVgvesED3VK+WTZbUIaybwEc3/u7m/axQPTY2wjWDm39/jg4Cv8nwDWpGep0JUtBYyRF8Ba2oWA==","shasum":"e76d5d8099b1d31574c0af006703ca6e3d8c1f4a","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-5.6.3.tgz","fileCount":35,"unpackedSize":93486,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeD1cICRA9TVsSAnZWagAADOgP/0TEyZblA5dwOJBYo05F\ngvweMd5JjTILaqQlYEFt4Cwby80pWekdzGXg3iKPTnzUXp098o00Ck7wqGl2\nIL+RaeIPs605yp+OxWVKXPcV6BxAyl+hsnm84+gJPqyCC0qYwmgoZ7OfFwra\nINba7zWsI6OTZPtNMHkan9M5EtZoZhVmTQ0Odqt+TmuOixbAZvVyejtKWFJ4\nBhuFU3Xnqqys3cdgCKMqxMPgxEeti7uOov/YfSNlA4mqjahm5Di/fM5Ltc2z\nR7wCNrzJ5JkWi56ERqzX0gs8sNv2N5ArtxkVraj/FSUsmkZBgw/SFGHT6O5L\nlEYmwZ9g6fuhf3w2EWP+ncmOW7NrGxbHR/B0z6sywBREIiiXsoURm8FGjjlu\nssqi4kfeptEVTvpmnLSlumaLvRoEKu+FIjuiOUHg9q/oNmapxaoU1jz25L1/\nQWy+0ObZpQVXfIilDhL3XUYiIgqCKhStB2kgr9Aj2I3Kinabd7h0uYdMJ3pf\nm9nagnrdqlA8zlXiXYQsXcM3hkdTJq9jDwlyXFoj0EhAY9SV52hD4JSvGuOs\nmQGFdDRBop82yV+jrLU4ejicNV6PaHvp088xmo8/QkLCd3HYm5tDrCMXD2eg\nqCM0DyJKyOsgIqe2dsWdy1XYW/qQIqiOfTX5ocwcFmisZ4CJk0ak/Wxw+68J\nqjlq\r\n=e/na\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCmydv9FCF4cBwELXMQzu9a7v7PUqZWOsE74iXnPlnOzwIhAOGoYOoWGaNmGD2CrACVpI4gxosVaAAnfX26wwkVX9Fa"}]},"maintainers":[{"email":"dev@formapi.io","name":"anonymous"},{"email":"pa.lafrance@gmail.com","name":"anonymous"},{"email":"yohan.belval@gmail.com","name":"anonymous"}],"_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_5.6.3_1578063623869_0.9122565987108227"},"_hasShrinkwrap":false},"5.6.4":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/gsoft-inc/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/gsoft-inc/craco/issues"},"homepage":"https://github.com/gsoft-inc/craco","engines":{"node":">=6"},"bin":{"craco":"./bin/craco.js"},"peerDependencies":{"react-scripts":"*"},"devDependencies":{"react-scripts":"3.*"},"dependencies":{"cross-spawn":"^7.0.0","lodash":"^4.17.15","webpack-merge":"^4.2.2"},"version":"5.6.4","gitHead":"ee80f6c6f1206f6da0c47b40e65f6cbaa3370137","_id":"@craco/craco@5.6.4","_nodeVersion":"12.5.0","_npmVersion":"lerna/3.16.4/node@v12.5.0+x64 (win32)","dist":{"integrity":"sha512-/Qi6yPMOBC7SEZJEDI5vYaPiGFs7HzO4AAZkGB0W3MX2OCw4u4FZC+ZO6TBptGzM3QLrF7WFt5AyQnXhNBcn3A==","shasum":"de7a707c727864f39e6afc192fb6732c3ca45f90","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-5.6.4.tgz","fileCount":38,"unpackedSize":95233,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJed4qgCRA9TVsSAnZWagAAhkYP/1OlUodxc5Wr1AJrMGhE\nPAINeeCcqEdxThOWZHQxqrbkWHGf1Ul0SWKg7raaG6fWnTQ/3ZEE6dCLpas3\nRBSWypfmWV+4+UL90mRbXixA1oQadPasfgRnHHN0G+r9zBAXQqgloJfMb9zF\nXkRSyHge94+SuxdogdRdwmQobhh/owgp692sq/vPxR1f9DrNYLSqBcB49vEx\nKOj3PyIntXE9GwRITTBnaX6N/iPxc/zhdjxWj8eb7pWQruGQdDNKB1ealUGe\nXH6VnovmV3ul15Klng9CEtSe5GCI9YolxFLerl4SWw5v3oq8bMeRb2OqnHDs\nUrTMZNfwaYKyY/wWt2zMYquk3Hf2Z9EDUMU3aqHHIYurA0earXgv/baGp7m0\ntF/weXVJ8782LLAIwR4MDED79w0fU38M/Z0WhsT8Fej81aSIN1vzP8JwQ89W\nxF7tCyKUAwl+tbhLIwGcR5sc5JWHFi8uM24NetLxiR4ISGmNUHC5clCWkl8Q\nWIYj4FV1vO/Ltz3pVSPMuT6E0o7T+B2OWPDZn4pIUE1M6VaMD4ITs6vGlhR7\n8PkOxzY/V2iL50A6Hk7TphRi3BBVS2sYHTKVmWbs3+9LOym4bpsChIFDf8BT\neTWeVNYoG5WpEtEx9WM3GNkPuWgBqbuM1gwPc17IChcTFcqZTwPm7jeqYGiU\nRArM\r\n=XoWo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDIB9Y4Ck8a5r8zYCY9Sh9/L+fLg4gyyqAwjJQw0wY8qQIgPUB2PMEvkCYj1cKRroMXdqoht1WUBXUoKqoiL3T0UJw="}]},"maintainers":[{"email":"dev@formapi.io","name":"anonymous"},{"email":"pa.lafrance@gmail.com","name":"anonymous"},{"email":"yohan.belval@gmail.com","name":"anonymous"}],"_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_5.6.4_1584892576140_0.2732533753571873"},"_hasShrinkwrap":false},"5.7.0":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/gsoft-inc/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/gsoft-inc/craco/issues"},"homepage":"https://github.com/gsoft-inc/craco","engines":{"node":">=6"},"bin":{"craco":"bin/craco.js"},"peerDependencies":{"react-scripts":"*"},"devDependencies":{"react-scripts":"3.*"},"dependencies":{"cross-spawn":"^7.0.0","lodash":"^4.17.15","webpack-merge":"^4.2.2"},"version":"5.7.0","gitHead":"9f4077d8f7718158142636d47d39a862d5877df5","_id":"@craco/craco@5.7.0","_nodeVersion":"14.4.0","_npmVersion":"lerna/3.16.4/node@v14.4.0+x64 (win32)","dist":{"integrity":"sha512-HpThSg+JZ8FuXtaRuNxLe/RH4TqRe7f6bZfB8tO5ukDthMrf8sKUNOkSS9vnsRbycVEAAuaOamXw+T6LPmqlIg==","shasum":"ad6a240e0f85ac948f2935581da12d4223d66366","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-5.7.0.tgz","fileCount":39,"unpackedSize":97898,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfcQ8iCRA9TVsSAnZWagAA3zYP/ijtsGgUVU+srg5RROqT\nyN2es0IKUyVvNscRn1rBCLeWLeEHtq3+RydoVEVLFJXk3kKsWiXo3IG7PuQS\nbyrcTaUsyXQwVCp1RXPl9VylKD9bc+NOTTwOdZEjztDzeG3YoVKEO86ie587\nulXlGppTU0lg94x78USIz1wUw4gZjn1FBI0lPCaKqZRMUqfRxpojTcDj846V\n4jo5dEedVqS/6P065P/QNCKAGl0IQk1woof6toj+SHKz5YFyxutdjZgO4mqq\naNKpACBhLN8TDe1oN+ffqs01FtA5XdOCmFeC6mBsogumQOQgiEYKgMIZul+z\n1ko6Dzh2Wm0aX/3Nb7/r4oWOAWyD3PqTlXxki7JRwKeE4B6dWGcLozYsMO/r\naC6kHJOt6T09JAIXQ/No6cSwZULl6M/XlZIPn0usLXiIDQCPAXkRru5vhqpf\nL5Dnp9eT2agM7R5Udeniy5zDKDqV8a4NimT93LZR5/PQot/c3AaGyn3HZx3F\nImF8hDAH445706M/z2G9A4vHkZspbF6MQ/vTEVAU1qFOkkqZWOciMhbabKgX\n1jQlpmKASE4Ivicxyj4j7tlL75ywHKQp9V/FWN6vyfj1qmaVlYh43qLEoBs+\nd+1g3wMW1RkRDd3HCKf2MozwA8vxozvxljB1iKJirsBXHKqzE6lF/eaplWci\n12Ig\r\n=0bbC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDxtQsKjSzBSFudhDfupaTefNq3iWHhdpzCIcRpDK5rbwIhAO3p7KwyvnXsh6MVfT7OQvQJFdXLD+gr7g43h4G9wCel"}]},"maintainers":[{"name":"anonymous","email":"dev@formapi.io"},{"name":"anonymous","email":"yohan.belval@gmail.com"},{"name":"anonymous","email":"pa.lafrance@gmail.com"}],"_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_5.7.0_1601244961918_0.2138712000224834"},"_hasShrinkwrap":false},"5.8.0":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/gsoft-inc/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/gsoft-inc/craco/issues"},"homepage":"https://github.com/gsoft-inc/craco","engines":{"node":">=6"},"bin":{"craco":"bin/craco.js"},"peerDependencies":{"react-scripts":"*"},"devDependencies":{"react-scripts":"3.*"},"dependencies":{"cross-spawn":"^7.0.0","lodash":"^4.17.15","webpack-merge":"^4.2.2"},"version":"5.8.0","gitHead":"3c535d9a71d3b9ac7b6c454fb2879c38402fa659","_id":"@craco/craco@5.8.0","_nodeVersion":"14.4.0","_npmVersion":"lerna/3.16.4/node@v14.4.0+x64 (win32)","dist":{"integrity":"sha512-4rhusETLD7rJ195GxOK9VmVdv/VD4jawFxc9hcQ9TrZ3/9ny+qwc0uW+08qu9GYwEF9Eb9meSeSvpWjaqdDr1Q==","shasum":"2a0f551290a5eab353b615de4d7093dd83785777","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-5.8.0.tgz","fileCount":39,"unpackedSize":102887,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfpWkBCRA9TVsSAnZWagAAjlwP/RT4ejUZh1FU4FKQlAZv\nZszMyFg6hsee5Itmp9tCNeto6kecGctz6yO390iDGlsBMJxQTkirCVzJRpLy\n+xHh65waGNNKF1LEgOWbCtuh6YaSCYW/PalW3Sp8xd1Kdt5OtvUORoYdgZO+\n2XEnOvLhB/0PuXd5vhtK+R3cNU8u4IcK3uRrSLCBCX+FuBKXkkW1dhuLpvDu\nvtiixF5KQrT8a0D5vZ5EPNtixdK0XfvVnaXuAuZG+nWDQMaXw5QGAPGvzEOv\nrfcIKgWzEuXs1zRbU0ZUmKVu+dx6LXkOB6hcThBlK4FBJdLAHkWm+wEQ9LIN\n7XoJ1R3dPec7oPUMJ10JNaCjBmD4WX/cFJm4b6Q93+1xo0VwIkvNw3lhjg+0\nJjS7baihMhjlTqkhZxCsOTcuBPgyjISUyMvvUPyiQ2WnHnsb/LkuJoMVvpi5\n6ajgFMGtkcwIa5Ad2VUitPrXjlv3XMoiweC/ucs+NBfqPbAcXbSun5Aag2tf\nAtBBF8EmEoBFo4RBbDtEN8IR0NxVACODDAlk/yLALx6CFAIDa/bedWDFGgjY\n5kr1cHoNUXaQiTb4tTdSAaQeFCWLaJmma2QtIJHPcD9IcIRuDr5wnWQYZ18B\n4lFoVl03iyvqskHDys0kGxDu5KIO0abVPclWWT/oMQHEeMmRwqGoSuovc8BX\nCmnm\r\n=NeVC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFB86KAMLVgLQB99GpM00lvbNBr7rrbX9qGCW4wKm5+bAiAPws3JNECInDVbBWudukHRQ8bbx3gZVO8n8EL1U/t6wQ=="}]},"_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"directories":{},"maintainers":[{"name":"anonymous","email":"dev@formapi.io"},{"name":"anonymous","email":"yohan.belval@gmail.com"},{"name":"anonymous","email":"pa.lafrance@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_5.8.0_1604675841162_0.5013130367665586"},"_hasShrinkwrap":false},"5.9.0":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/gsoft-inc/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/gsoft-inc/craco/issues"},"homepage":"https://github.com/gsoft-inc/craco","engines":{"node":">=6"},"bin":{"craco":"bin/craco.js"},"peerDependencies":{"react-scripts":"*"},"devDependencies":{"react-scripts":"3.*"},"dependencies":{"cross-spawn":"^7.0.0","lodash":"^4.17.15","webpack-merge":"^4.2.2"},"version":"5.9.0","gitHead":"70bb963724d8f97bf0b1045b78eb09a23a98be86","_id":"@craco/craco@5.9.0","_nodeVersion":"14.4.0","_npmVersion":"lerna/3.16.4/node@v14.4.0+x64 (win32)","dist":{"integrity":"sha512-2Q8gIB4W0/nPiUxr9iAKUhGsFlXYN0/wngUdK1VWtfV2NtBv+yllNn2AjieaLbttgpQinuOYmDU65vocC0NMDg==","shasum":"dcd34330b558596a4841374743071b7fa041dce9","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-5.9.0.tgz","fileCount":39,"unpackedSize":103500,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfxQqbCRA9TVsSAnZWagAANM8QAI95dL7/yFn/E78KfA/6\nU/JXBLktvNzXhi84EXG+vs5/K2yL5WCmb6WVT4MIuXc4fXkPNML48TSII5lu\nvLqGJsxQvS7eTPS2N0MrWMr/2pInqBv9HfmvNsV+A55GvYotIz8Wfw8Ym97s\nif3+GaGUHalQ0Yrtt7FG9pH51jQ0azlCwOZJeqORcQdKdbf12ZrPkG4QzzIV\nUeV0OMJG6Twkix9upbxXQ8lVElZ4RCmkky1H68A4PWZFwGug4FCkRgeZmEHB\nAvf343Dm3LKUctmM/nQdubpCJF3yb1/g7rx9DO/sLN2VouOTjQM4ltgcincR\nUlTKNYK5kTtJRguxst1dZLIQDhOHg5hd8pWWBRx6sHISNKOPZNw471G9ekNT\nzKFidnGl2dik9dnCcIbc4RGN6KpikVNpOUzZdFfvm5BX/ssRV8VCZARYFMaL\n0eWSfGO96k7eqLZMm/eVVWdMOZZBra6MQ/5N8JwmOU38cMVL/+7OCUnp6oO6\nCSAYrqsxg6tPSD75WUpqQUjuxkWzyPgDGbBSfblCscWeWVG02+Yh0Qw0KnQ2\nCdjyNim4XAuRAtD9nfHgXy+2PVQczS7Jc1zR96U9tDojfwNe/WcW80tVI3Te\nUqERiou8dbqUY2VhBk4vNiyH+JcqVzmobshdXpgGRYohDQOc8fcu8NNsbMNt\nJ4Vq\r\n=8oiZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDs+LDS0PSZW+Q0870mGM/dtHEWNNsJL+m0s1K2v5Py6gIgKhLSCc+Ie2dnpmlqi3SeFxv3JWIdIgc5xJumKqddunU="}]},"_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"directories":{},"maintainers":[{"name":"anonymous","email":"dev@formapi.io"},{"name":"anonymous","email":"yohan.belval@gmail.com"},{"name":"anonymous","email":"pa.lafrance@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_5.9.0_1606748827112_0.710859033572123"},"_hasShrinkwrap":false},"6.0.0":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/gsoft-inc/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/gsoft-inc/craco/issues"},"homepage":"https://github.com/gsoft-inc/craco","engines":{"node":">=6"},"bin":{"craco":"bin/craco.js"},"peerDependencies":{"react-scripts":"^4.0.0"},"devDependencies":{"react-scripts":"4.*"},"dependencies":{"cross-spawn":"^7.0.0","lodash":"^4.17.15","semver":"^7.3.2","webpack-merge":"^4.2.2"},"version":"6.0.0","gitHead":"ffbb33ea7e1806d91f5ba9d4dc3681d2c4da3bba","_id":"@craco/craco@6.0.0","_nodeVersion":"14.4.0","_npmVersion":"lerna/3.16.4/node@v14.4.0+x64 (win32)","dist":{"integrity":"sha512-NSgcGqTlQ+XTBJ/AhE0ngdfab5xIyx/06yrRPkvDH02V90ejrL6bSM54k3+h3OjGE/SO7nmF1MqfFwemPo8kVw==","shasum":"f4e66e82f5bc77671dc0a5e839c3269e2414fe0f","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-6.0.0.tgz","fileCount":41,"unpackedSize":106278,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfz6GQCRA9TVsSAnZWagAAtigP/i1BPzeB9OXXJ5IYRon6\nz1wfLnaklU7XTioUaC7lf5Ks2KbUEdrNyr2MMVBqumceQMQeaq1NxFOeOAxU\nyTDWwu0bA8hxSx3xfl5vOs7NmRl1+4/LxCEmZUasWCplY7y3yaRwNDQwxz2z\n3b4KzZkK3pZmfB+tgCb5qcUJUL0bcarlnxs51pkSUgW7eepGATEsDhr4tjde\ncBSwAK7kwUxx4vkb1PYi2mbCAZNRlmYQ0h7SL7Co1c5o1LIzyUScYhVZyylu\nFaTotdtfC1Bmd/2ObjbXgaUNAdAqGe9z9S5lPorBIusxLXnuEpDT0rybBeok\nqe93N5KPz2K5Vd8WkqBr2Nc3RhPcQsm0zcSK5m+hVdY7ZVzLyRAsoPGcc7My\nPgoGaWsUYj2yqvGT93dH+WYYJwAXDGlI5PLwYGblaQRuWaz5saFxbeANCaJk\nLyN+o0xGBxRhympJzijZMXKNiQNCwMIugp1sVLJqOr5ow3CI32bLhIlhiz4y\neZYb3SE+lbQ8u3u9ln2XDf2fgiFJiCHfcgD5rVF29wSjh+ebXIbIkX/uhqgO\nEzNorth7b90RDV6+ShSdV+Y1wG5uj4rBdiIPTW/dP18sphoMvEBznvb0NqqX\nzXzxwk/2vXpkD5hw5Z8+nLFxQTI1dtfkzdKxjV1xruSW7vyWaAhT8GAXtNi9\ndN6j\r\n=S7px\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDn5vINOGUDPWLB3tidmr5qbY78oEk2J6aoywLDDSBFCAiEA+bRaFS4452mH+9AUIDjw4lz4gCvkp8ctFqltU/7/plg="}]},"_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"directories":{},"maintainers":[{"name":"anonymous","email":"dev@formapi.io"},{"name":"anonymous","email":"yohan.belval@gmail.com"},{"name":"anonymous","email":"pa.lafrance@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_6.0.0_1607442832033_0.7278695860731668"},"_hasShrinkwrap":false},"6.1.0":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/gsoft-inc/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/gsoft-inc/craco/issues"},"homepage":"https://github.com/gsoft-inc/craco","engines":{"node":">=6"},"bin":{"craco":"bin/craco.js"},"peerDependencies":{"react-scripts":"^4.0.0"},"devDependencies":{"react-scripts":"4.*"},"dependencies":{"cross-spawn":"^7.0.0","lodash":"^4.17.15","semver":"^7.3.2","webpack-merge":"^4.2.2"},"version":"6.1.0","gitHead":"203a485b70fc5de873291ee1bad6d5b766e2e7fd","_id":"@craco/craco@6.1.0","_nodeVersion":"14.4.0","_npmVersion":"lerna/3.16.4/node@v14.4.0+x64 (win32)","dist":{"integrity":"sha512-JD09kzTJCfz8XjsH6iGn+Qu/8LBWOc4ed2K8MYoZTgd49oIbD+XwHwViToi2vyO4V72DZmrp0gQQvgFM7bw0Jw==","shasum":"9b7d9d1afe0edb4c8d2725676464e6a3d7d0ce6b","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-6.1.0.tgz","fileCount":41,"unpackedSize":109122,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgEeZpCRA9TVsSAnZWagAA8i0P/RKkfhwJGFIjvWfZKdav\nzjmLmVz8ENV0pyoAPOIeF5JYrv1sHm9a+rcxNeOdRBjYSm7tG4HRxjmNIyCK\nim7BjFNcUB1QdHvg+FiA0d7ZtLCExYdcIpgHZtShjsqhnQIAUiBaGZ53ofd0\nZhxMxVPSKPfFJNc/50mRtN1tbTUtPkhOL/QyN5Yh7AUdi8ZchxcKKsAFPm3y\nxdwsFBLUcnrmOgrNNa7C/Kb6W1wunjCqHXp6/oNig8bdhL0dS7LdDEO9sso3\n9gNa/IRyMHoX/uB7A4Du/NbZjK5R/E07/pabJQhLSmsGCJgO2xTowzMNfJPF\nwT0cwueYOxg2aoDJMh0Eyrnh0FAFwINPc11k++/K4teF8m3oMi69LDVedeTE\nJDUndjdD57zZLlPnpUraLly12ODGaRdT+DtME/GMrtRVRuUUYxALgLBBQQaX\nizNNIR8XNjJZzOzZkow0S0V0f8fIRhUMErJiLxsPccCNE+0uHV/tvcAHYwbz\nzAVEt4F4+jY7+LgvQVH/OAOIGTUsW4YwvNbULIeWm73E6HBhthXNg0NOv2Lo\nV8BHPAeeBXdZh5NYp/5E7OkzhVHupMpcJZsZlyGOvoSui9sX691M3uILpGs7\nuqfbfZyLW0Z7MTRgd1WGHzgxP2t5IsLM5jjnOdhGnMGPagGs3zt7AHeoR9Xq\niiVr\r\n=hBxI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHQOaPLqTzpLQHjintLBELifGmu+n1tgzSNDKAyum1RFAiEAv1dNgX5Z5hQQGMGbYMJBGgqBcptKEZUlt96Wzi4UxmQ="}]},"_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"directories":{},"maintainers":[{"name":"anonymous","email":"pa.lafrance@gmail.com"},{"name":"anonymous","email":"yohan.belval@gmail.com"},{"name":"anonymous","email":"dev@formapi.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_6.1.0_1611785832859_0.4890395344310632"},"_hasShrinkwrap":false},"6.1.1":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/gsoft-inc/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/gsoft-inc/craco/issues"},"homepage":"https://github.com/gsoft-inc/craco","engines":{"node":">=6"},"bin":{"craco":"bin/craco.js"},"peerDependencies":{"react-scripts":"^4.0.0"},"devDependencies":{"react-scripts":"4.*"},"dependencies":{"cross-spawn":"^7.0.0","lodash":"^4.17.15","semver":"^7.3.2","webpack-merge":"^4.2.2"},"version":"6.1.1","gitHead":"8fae9959d04243f2bcc7a12e4862c89c8d1ef509","_id":"@craco/craco@6.1.1","_nodeVersion":"14.4.0","_npmVersion":"lerna/3.16.4/node@v14.4.0+x64 (win32)","dist":{"integrity":"sha512-4irfOM8RgYNhFJzAXyIuM8CZLju2Jh9GdOem8uqM2/cI2xPulQSxZKU/9q3uiSbFUJfQLi3pomVKii6KzWLu3Q==","shasum":"0233b28d6896b6560379f64b608d3c888874e9fa","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-6.1.1.tgz","fileCount":41,"unpackedSize":109346,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgHsC5CRA9TVsSAnZWagAAeskP/1NITebXOCNUsjSSkuJw\nnbQUhY3Qcx8Lv7P32YUCrTG7DOCJ23fOhehr84Rph1eZOc1VyWGkZopNVghC\npsq7AeYNdRhMRrd8ayMmEhstnHXW3r+n5JHtNfQpBgDkH8ol/U92shuBzvO7\n3rmcsZMbIedQGnrJhS2l/LaDTA447xyRdZSe/6f934uvmWNVdFwpwID8q34M\nTnOnps75Yv64TisOuYNJ5CO1OdrVBlV+jPHLMCPSDAqN+Y8XzP6KFSz77JCN\n77Kus+gCQ6ZYViaBaXwO1PhQJa+DmA4AtDLMhNTkK0i9x1HFXnqerz8Yr3Lw\n833clx2YhW0Ff8WMCV3Y3CpGA2J0dfyJX/gVRAcd/wIC/d6yiYpRtQAay3rH\nWqzSaKIw0ayDviytGlyA6AboSja89VULOV3nHCDa3gAO71oyFQN3AGEOxtsE\nbwZvrU8NcCwX7PtLaiZcoIkrDI91HM8JLQ/ptqBknf91HUb/AhQbM2HRNDHo\ntRy07YaUln76lqcIKU91hWraNs806eCvWfQgSDXu1/0CcQMQCP+BbQaYK8Ik\nw4ge/itkt9s/5KbanK+JUulVkrfnFwoxWNbOeqYxJPrlJCUbsRXAuYBHX7Vn\n6RjrU+qtZ1FjW3djXzpdn3IVyBz+x50U1UROCWAlh3eU3Hyg7aVXAePHwcSF\nwGjx\r\n=Cv1m\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAIFcsTUe2+mDJYajQU5c26zjeq+WkWhySf4rEsXww6GAiEA+AFrMXVNMVwn0+0rjEnmFAwmnFEusJ1RaovAzKvu2Dk="}]},"_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"directories":{},"maintainers":[{"name":"anonymous","email":"pa.lafrance@gmail.com"},{"name":"anonymous","email":"yohan.belval@gmail.com"},{"name":"anonymous","email":"dev@formapi.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_6.1.1_1612628152978_0.42519744666631665"},"_hasShrinkwrap":false},"6.1.2":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/gsoft-inc/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/gsoft-inc/craco/issues"},"homepage":"https://github.com/gsoft-inc/craco","engines":{"node":">=6"},"bin":{"craco":"bin/craco.js"},"peerDependencies":{"react-scripts":"^4.0.0"},"devDependencies":{"react-scripts":"4.*"},"dependencies":{"cross-spawn":"^7.0.0","lodash":"^4.17.15","semver":"^7.3.2","webpack-merge":"^4.2.2"},"version":"6.1.2","gitHead":"a97ae874df578e9803268438d8c8272939ab7608","_id":"@craco/craco@6.1.2","_nodeVersion":"14.4.0","_npmVersion":"lerna/3.16.4/node@v14.4.0+x64 (win32)","dist":{"integrity":"sha512-GlQZn+g+yNlaDvIL5m6mcCoBGyFDwO4kkNx3fNFf98wuldkdWyBFoQbtOFOIb4gvkTh4VntOOxtJEoZfKs7XXw==","shasum":"30e45288e4609ac6b8cf828085b34acebdc60e69","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-6.1.2.tgz","fileCount":41,"unpackedSize":109563,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgiLL0CRA9TVsSAnZWagAAWAgP/RxHAYGga45Zf9+WNWZh\nAoMet1vg6hi3cm8g27ltEKp7gFqEF5zBwEN4dih1WkZdScG/2wuLb6AKacMv\nL/BoZfHQRFRJOhSiTpCFkTi0mKX2ewYtoktpQU5lrTgRuQ567Av8tg4YGK/b\nqVRhGDOf1GXeZzznvP36EnUhSHyjfUF7QUdTly+iaMA8ehB3+3OtUqPsEhgh\nnLICm6Zbh0giDF+ncreaNra4jGXUez0dqkC8vgzP+KKR9z1vjDL8lerfZpAX\n6Di0YPYMReMmgRDusPbju6IdG2uxGC7uHiddwx7tHrd7C9OHAFKq+BDWkMCD\npLpWoICBxs9uc3aK3494FSwcNiHfIalaiZ/IXeU/NDnbzJz3rnnFC3Hl0EC1\niSn/sxD8iMIMlH7W9SzNHatWXJk02zfdE5dZcl+EQlY1O3g1Go5rgO6BeqRY\n1FGJJoVHMyhO+3TESmodc+v8ZEK/8I96nqsHnujCAaAFkK1zHRUd4UkREUdO\nHyj4CQ2yCPuqj7av0Be6NIxanQiCw2EAZwkq7ZxB3xgyyHpkrmSZVYrqFYYH\niRiv8bjWkU9GrQ6Ef0WLPgsdz3fw6gqvN2RB5bcT/kPrT3/doKZjxGBiVMyy\nHw+XC9Hhsw8gpA2JBZu4bmV8Qq0/7SS38IDp2Ql+7oUJ71y6QSUiigalLkKj\nCDus\r\n=7Gn/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC2heALRWHyZeHjPDCAAXP4mHJR7egfOqF2cS+7dsxNlAIhAONmsmTFhWpxf5CWVqDDskUruoLQ2IPuYja8pyqj1fza"}]},"_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"directories":{},"maintainers":[{"name":"anonymous","email":"pa.lafrance@gmail.com"},{"name":"anonymous","email":"yohan.belval@gmail.com"},{"name":"anonymous","email":"dev@formapi.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_6.1.2_1619571444208_0.5823218644301538"},"_hasShrinkwrap":false},"6.2.0":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/gsoft-inc/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/gsoft-inc/craco/issues"},"homepage":"https://github.com/gsoft-inc/craco","engines":{"node":">=6"},"bin":{"craco":"bin/craco.js"},"peerDependencies":{"react-scripts":"^4.0.0"},"devDependencies":{"react-scripts":"4.*"},"dependencies":{"cross-spawn":"^7.0.0","lodash":"^4.17.15","semver":"^7.3.2","webpack-merge":"^4.2.2"},"version":"6.2.0","gitHead":"6909f73f7610916097752388d14ed0546538c945","_id":"@craco/craco@6.2.0","_nodeVersion":"14.4.0","_npmVersion":"lerna/3.16.4/node@v14.4.0+x64 (win32)","dist":{"integrity":"sha512-kLc4GSdgR9D5JiZmSxtzbvBKcUFSJqMXImRjjYf5pacwiyAs3XfQwai7T+pExfLQNUnytgkL8jRFUJeYrkVr7g==","shasum":"93847ae20899f5e810359443f2055bcf2b1a584e","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-6.2.0.tgz","fileCount":41,"unpackedSize":109875,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg4dnxCRA9TVsSAnZWagAAQpEP+QA9o/j+P2S0WD0Xj1Dh\nC1DqO1ivsKTtvKQ/LM6/pCVVzJKZWwHNP//4+KfnzwRJOKt1qMml88N5faSc\nZdwP9b218xppQmilA4c2O24Lc0KF0hR2RlmtEv9Y4a21IRvYYw3XSZHM7i4V\n2fOx4vSx6bkG/hYk4ArZJuu+s3/6lVvGXgzDORgR8tnzlxK2VcmW3EXFHSis\njIo9IiMZuBwJM8o3HZ8wa6QRBZ8xxnq9o5lYNPeQGFl1MNP1+dkmaVYtRoxN\nTpXvpDe9BNbHaS+PY+KEl0gjC29gle32s95GIWkB3aQgsiKXZ7jL+IcZr2jt\ngfj+mmwr6xEJYEBkaDU6EyXWmPR5F7iuS0IdtIKUdpMAa0aGKW9a1fRZowXj\nIYeL6hIsCvofotNyF65yPtKDt7IKYePw37qmBqE4r/bl8zRa1YbRcYwUF2yC\niBmLv/ZS8PM/8qel9hUgy9w2vN/hyxHttT4lhdWgbEBgfibeyU5w9xcTbMGx\nkidJEbAbGiOXlTJg0LNowjwgjchNgNIuPWSg9FTh5dP6IZ+ftHYq8JH461JL\nEI5C52mivgTi97UPn8weMURYs3z+RjB8OAqdwHJzqg3i5qscw5Bir9x7FWv9\ncTttuY3mDAz6ZTXelN2jDd500iLzcuV5JdG8S3k/3MI5x5JPXVd9Iko6gkXz\nlJ94\r\n=Ku7a\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICvk0ECwpT33K6QD5NMpj+c4jaSoXPhiUFkdDnTvx5xHAiBca2FdvUZ9WWQ9YRc1+/3w6cq2ymPu52mZcnDI5lJVMA=="}]},"_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"directories":{},"maintainers":[{"name":"anonymous","email":"pa.lafrance@gmail.com"},{"name":"anonymous","email":"yohan.belval@gmail.com"},{"name":"anonymous","email":"dev@formapi.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_6.2.0_1625414128713_0.5226295329198833"},"_hasShrinkwrap":false},"6.3.0":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/gsoft-inc/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/gsoft-inc/craco/issues"},"homepage":"https://github.com/gsoft-inc/craco","engines":{"node":">=6"},"bin":{"craco":"bin/craco.js"},"peerDependencies":{"react-scripts":"^4.0.0"},"devDependencies":{"react-scripts":"4.*"},"dependencies":{"cross-spawn":"^7.0.0","lodash":"^4.17.15","semver":"^7.3.2","webpack-merge":"^4.2.2"},"version":"6.3.0","gitHead":"b510d6920dc6a6d6bb908ea0cc9ba464d171c385","_id":"@craco/craco@6.3.0","_nodeVersion":"16.5.0","_npmVersion":"lerna/3.16.4/node@v16.5.0+x64 (win32)","dist":{"integrity":"sha512-SCnfEQxT/6NAbU/3sIWw7gQXtzjjiTp/EZFdJTd8inPURILIy0YajrC2p8qBG2KhFo5cwgOrEDyaGyAFvvuyuA==","shasum":"157ff6387dab526390b47b12e890542c7e7c6437","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-6.3.0.tgz","fileCount":41,"unpackedSize":110733,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhPAjWCRA9TVsSAnZWagAAv00P/1yl7aaMEVXdN8g9GAUn\nyRR22ySp4FT6cNQd/DTX6A0rKPViu3LmLEzaWnptaP55MmMmHwUXTyVR0hJi\nJtE2raqSltuj2hfFPVk55ATNv4aQAJXxzJNtMS+iiQgTfPr7fGDDgexaWvR4\n8LWcQG82DXe+3R/BbvuyKzQGRthWVcbhtc3p8jSQqsmNC5mRIHhlDHDbSUIm\nFy6//tPTkNKnEboebs87l2UIrQ0qRSQGRyyyBi3cdk7bsmJ/BA+h7Jt/V7TB\n55RkGTFHw9O6oCIeuASjEbf/JE3ccAB+g1gJHulrxg7tN5vsNnv7u8II0ROa\n+n+v+1rNZWylL863NGs5WJGgP4ONBgWk8UjtvxD8Qc6TPaBdYtFjIscuVlNt\nZLRCZHeHtrxPqhCAKn5caYw5d6xcSLcbrom+39Pjnba79+GPp/sx4EJPpYG/\n9Dev07iEqvE93z1Pv5QVq20V8LFDlwVDqyQTzkvbScQRS9RtbtlUbxaL8tZR\nRY4AVnhJhJKhOPMZDfwXQRsBXReXWZKCiY8yO5kcWy/jG2411vZzChE51EVO\ncAj7/fd/QPxMgh13jRRyOpZ6WPd3lk6I3qaxqza/LqTXwRgfPTEtVg/aa/N6\njDlw2rbnUhWStFTVyy6rP7qhG37+dyd2UMOflCaQebqQjGnhTZyJvsWnvUWB\notoE\r\n=KJf6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDxRD5xsPMUi6DOaYKWCmJMQN301VLmDdVAKiW1cStrUAiEA2rNlZ66DkPCkimkA9NV7rhNIeF6xm5i6UnePe82vlhM="}]},"_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"directories":{},"maintainers":[{"name":"anonymous","email":"pa.lafrance@gmail.com"},{"name":"anonymous","email":"yohan.belval@gmail.com"},{"name":"anonymous","email":"dev@formapi.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_6.3.0_1631324374676_0.4917839563417985"},"_hasShrinkwrap":false},"6.4.0":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/gsoft-inc/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/gsoft-inc/craco/issues"},"homepage":"https://github.com/gsoft-inc/craco","engines":{"node":">=6"},"bin":{"craco":"bin/craco.js"},"peerDependencies":{"react-scripts":"^4.0.0"},"devDependencies":{"react-scripts":"4.*"},"dependencies":{"@endemolshinegroup/cosmiconfig-typescript-loader":"^3.0.2","cosmiconfig":"^7.0.1","cross-spawn":"^7.0.0","lodash":"^4.17.15","semver":"^7.3.2","webpack-merge":"^4.2.2"},"version":"6.4.0","gitHead":"d3fc538c5cdde6ea13cab296785daa4870e47dcb","_id":"@craco/craco@6.4.0","_nodeVersion":"16.5.0","_npmVersion":"lerna/3.16.4/node@v16.5.0+x64 (win32)","dist":{"integrity":"sha512-puLp+pSL5B2tpoIPUYlWjKd0VDBPNF16BJIKEKrwg0x/9XC/4h8XPcVGNr6pd27pj8sahiH5QUdoBxB5AE9++g==","shasum":"449ca141c4af5751999e8c91764c0e1d3576b420","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-6.4.0.tgz","fileCount":41,"unpackedSize":111299,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCGzbD2DHBsFuw9jXdbda2j8Ff7xNXw8W64rAq09a6LQwIhAM5ksCsAYVsv3WmxX/Xgs3lZ/h/44V848ufKtd2omdQz"}]},"_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"directories":{},"maintainers":[{"name":"anonymous","email":"pa.lafrance@gmail.com"},{"name":"anonymous","email":"yohan.belval@gmail.com"},{"name":"anonymous","email":"dev@formapi.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_6.4.0_1635127177293_0.4318053277110092"},"_hasShrinkwrap":false},"6.4.1":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/gsoft-inc/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/gsoft-inc/craco/issues"},"homepage":"https://github.com/gsoft-inc/craco","engines":{"node":">=6"},"bin":{"craco":"bin/craco.js"},"peerDependencies":{"react-scripts":"^4.0.0"},"devDependencies":{"react-scripts":"4.*"},"dependencies":{"@endemolshinegroup/cosmiconfig-typescript-loader":"^3.0.2","cosmiconfig":"^7.0.1","cross-spawn":"^7.0.0","lodash":"^4.17.15","semver":"^7.3.2","webpack-merge":"^4.2.2"},"version":"6.4.1","gitHead":"b18037c6acffc7e74ad426095c628d1306bf03ce","_id":"@craco/craco@6.4.1","_nodeVersion":"16.5.0","_npmVersion":"lerna/3.16.4/node@v16.5.0+x64 (win32)","dist":{"integrity":"sha512-KZDbnHUwxoWrNPeSbfThnGFlG+K+0ZwnwYAj+JgtUCN5FRZ5QQOlc9hhMb44pN3CpWEOTyA0YE/rJeuAXFAErw==","shasum":"222b0cd95a955935c5564aa7788a6c626e4d9bc4","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-6.4.1.tgz","fileCount":41,"unpackedSize":111335,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhl9WmCRA9TVsSAnZWagAAM8kP+wRAWCMaZQZ9/gfaTzrK\nBDksEAaRSknEpaOQIiOwdHRAqNPu6zfDnyN1dfRl8z2sXNbBZCjqBWJRJvsA\nd+I/eobQj9hMwWPTO1Bx7EkG+6P48sANuNo8XUS4hqE5rMxUF4m4InRLcS5s\nUAskf33W+fvWbovIHBiYpMz4gm66cHun1/KfA+Y1ItAxYenvwSt0xy+lpoZO\nUInvtMHnxDLX/nBIsRnyBiefaysF8rg8fUqWCbGOwn3qqajRUezO0igdD/fH\n0zWFnArUkyiLV9rMoB4UTmmwo+8Dzimztsj4R1JcaYTUgwEAqMkTccxcJPT3\nMnaLkY8LNxVH+dlTzJxy831quHV76bNddehzCZv0HIF+ZZ8aAc7hIF7mqz0l\na8SGop8JBl7KNSSBJjZj8eIF6/7sD1ZZDwJLrdMiN7e0CCwEGQ5+6moBkKAM\nzWXx8CSMYnnVXA0X6yld60KIo/CZkY0oFeif5CC3han0Uxuq/j65hPO9RW/y\nbb1qXFrulGzLuLoCczxUjhzb5Ie8WC5nlXjtf+j+l090mtgZ1Rw5gHnrzxAP\nrUNNQm3xETEYRi+7Zfne9I4gsanJuJMPY6ejoyQrHFIoSKN0cS8K5oJd721V\naoZV4mAME0ywMCfZslp4amvXcNvSlTAVMm58TU+Syv5zI0UGS/DZO/39uy0j\nwa6m\r\n=Zw2j\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDbW4VeQ9cVaipp58gx0LpkTknsQE5o4P3AH7dnay1GzwIgLOuPCTF2QL0bsawfAR6OGyLslqd68OPbYVs2Fuyc8xE="}]},"_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"directories":{},"maintainers":[{"name":"anonymous","email":"pa.lafrance@gmail.com"},{"name":"anonymous","email":"yohan.belval@gmail.com"},{"name":"anonymous","email":"dev@formapi.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_6.4.1_1637340582626_0.9975979302595019"},"_hasShrinkwrap":false},"6.4.2":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app.","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/gsoft-inc/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/gsoft-inc/craco/issues"},"homepage":"https://github.com/gsoft-inc/craco","engines":{"node":">=6"},"bin":{"craco":"bin/craco.js"},"peerDependencies":{"react-scripts":"^4.0.0"},"devDependencies":{"react-scripts":"4.*"},"dependencies":{"cosmiconfig":"^7.0.1","cross-spawn":"^7.0.0","lodash":"^4.17.15","semver":"^7.3.2","webpack-merge":"^4.2.2"},"version":"6.4.2","gitHead":"e90069aa8c1d33be6b7f0c4a0e4e551e079de166","_id":"@craco/craco@6.4.2","_nodeVersion":"16.5.0","_npmVersion":"lerna/3.16.4/node@v16.5.0+x64 (win32)","dist":{"integrity":"sha512-egIooyvuzKM5dsvWe/U5ISyFpZwLnG9uuTF1fU4s/6b/hE8MvoxyaxKymQKgbtpfOZeH0ebtEP4cbH7xZ4XRbw==","shasum":"11cf0fce1d38be6599bf4bb09e340a9ed821f29c","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-6.4.2.tgz","fileCount":41,"unpackedSize":111363,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhnmddCRA9TVsSAnZWagAASoAP+wSUye7A9kQin2StXko9\n8QjkmxJdVpt/BlAmz4K5PbZNdkRdglQ13nAMiIvwYV+VdA/SA4gJliw8L23m\nGy1TiSFL87R6vo8seVTPZMLE0TpOEulb7jY1zoNeT3m9uemE9S6SmCVcO3Bu\nLCsaQSQ4KF3MKgM/2pSqYn2jDucQeOgTXXTy6HyPhwzSq6crtQKX6xOkNFY0\nuLvsxcBEOpeufiMPG8HeVunswLS7kGexfQpA15l+q/Mr6C1YfEU+7OsYgh0A\nep6u77gHs0nmS00wMzU9xcIoB1M4cjhDf+PX8EoJdVyq4g1Y4JuO9H8DyQdk\n6x/EsYeNefeXo2nVowtyPUtCM2sNgHewgk7Ey88BUE67DE4SyQzYpbKytkzM\nxozGL/ZYylInVhOu+I8A3zb1zn2HFtRPci8i3MjREq0jgGI13vvx3C3LJZKI\nvuXLMsK7U737FUKVcq11/keoT3eniHqwITTrjI1VW8lrgHraxoWAIwqmH2Wn\nrf74gaxQpo0KKytobLO+jRl264wQ+oXxh8j9OIZsTX7buV770ybwvkRLuVZf\nSggICgIcYeIdzKOM8yfokZ4EkAeyrGK+4diyoqlPz3ELvIyGti9lkGpvkbdo\nHUNPQ6o9KDCzAWV5JVZNizmxSOWt34YRPGtjs+aL3/paXLYGOPM4EzH1GEAf\nkONA\r\n=jGxH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA9Vg5ZG9bNBuXfaotCJarkg+xCKEF7cXrQ4QW64a0faAiBYdBqOeYCqi84HST/FC68Bf8kA2kAAv6x7KRXnGWouZw=="}]},"_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"directories":{},"maintainers":[{"name":"anonymous","email":"pa.lafrance@gmail.com"},{"name":"anonymous","email":"yohan.belval@gmail.com"},{"name":"anonymous","email":"dev@formapi.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_6.4.2_1637771101405_0.8152933502621302"},"_hasShrinkwrap":false},"6.4.3":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app.","version":"6.4.3","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/gsoft-inc/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/gsoft-inc/craco/issues"},"homepage":"https://github.com/gsoft-inc/craco","engines":{"node":">=6"},"bin":{"craco":"bin/craco.js"},"peerDependencies":{"react-scripts":"^4.0.0"},"devDependencies":{"react-scripts":"4.*"},"dependencies":{"cosmiconfig":"^7.0.1","cosmiconfig-typescript-loader":"^1.0.0","cross-spawn":"^7.0.0","lodash":"^4.17.15","semver":"^7.3.2","webpack-merge":"^4.2.2"},"gitHead":"8ab5cc92a963f1ed1c3c223ea46aea0cea5d6632","_id":"@craco/craco@6.4.3","_nodeVersion":"16.5.0","_npmVersion":"lerna/3.16.4/node@v16.5.0+x64 (win32)","dist":{"integrity":"sha512-RzkXYmNzRCGUyG7mM+IUMM+nvrpSfA34352sPSGQN76UivAmCAht3sI4v5JKgzO05oUK9Zwi6abCKD7iKXI8hQ==","shasum":"784395b6ebab764056550a2860494d24c3abd44e","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-6.4.3.tgz","fileCount":41,"unpackedSize":111299,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhsiEqCRA9TVsSAnZWagAA/8sP/16aF6Wdo5wXf2qUcOM2\nBecu/ebAR831U6QwSsX7/gINDmY+yveuuhE+5Ft3zPtrqdqEThldZ0WKoeYw\n/symG6sH/pBd5ztwUT6qWPJRs98a+lcZF9VKszJPW5NvUIhyuvPxqGuGmSgC\nTpo8tvP4h41bz4RBOX0B4Tf6rJy75F0Q1VsXVXpDi3Pxewr52hEWfpChC3hJ\nQdjI792ZPEiEGQN6yxP66+pGth89IzRWJYbAeYFiSmIsT7HhoYTrLFvjTfxr\n6ZO+mOQJZmZe8mSdEc4J09aG1uuS1YutqL3Lc7F8yMITaheGRsLboXTdXFBx\nZQDuF37lEQgq7/fH3uKhtu1ohWxvpeBHIt0vs9B9OuRhG4JftZYiLXOpPEqe\nE7pM136GZWuzIl3PwgAQKtj+Dgu87bbj5IYpKIdK5wfM4YPEQPd+mF1chs+q\n00h9l9gkZEY801s1kmRZo5KuC6rKJwL1VAfLpySi4xMrNWu9/I2SL+PJnJP7\niJbk5M/Wos4lSNs98nCNFdrgnkL+vHP76IIwDRO3FWHLFLtlF2zFdhUkEKAo\ntJL4dym/l2TR3/JURBYt7fa3+YN2H0vBFe7X5i+vI0jcP2M++Xgd7Hm3KG7z\nNzSgWnMTeoQJf+CdGfs3C3Ce9yi7ymsGnHVUL6rAWzgAOqQZPwrgfojEg6hW\nFbQo\r\n=LxKb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCOvH3GKAudJ0frehy5sRPGrajsqvz5mZAwi0djySQ2ywIhAL8A534+DPgtgEt897JrbRZkDiG2rvwbgLKXYFKLS9vK"}]},"_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"directories":{},"maintainers":[{"name":"anonymous","email":"pa.lafrance@gmail.com"},{"name":"anonymous","email":"yohan.belval@gmail.com"},{"name":"anonymous","email":"dev@formapi.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_6.4.3_1639063849779_0.12439119773137075"},"_hasShrinkwrap":false},"7.0.0-alpha.0":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app.","version":"7.0.0-alpha.0","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/gsoft-inc/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/gsoft-inc/craco/issues"},"homepage":"https://github.com/gsoft-inc/craco","engines":{"node":">=6"},"bin":{"craco":"./bin/craco.js"},"peerDependencies":{"react-scripts":"^5.0.0"},"devDependencies":{"react-scripts":"5.*"},"dependencies":{"cosmiconfig":"^7.0.1","cosmiconfig-typescript-loader":"^1.0.0","cross-spawn":"^7.0.0","lodash":"^4.17.15","semver":"^7.3.2","webpack-merge":"^4.2.2"},"gitHead":"4ea199b89b115fcb1306a725bf3edfc919d55404","readme":"# CRACO [![Build Status](https://travis-ci.org/sharegate/craco.svg?branch=master)](https://travis-ci.org/sharegate/craco) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-green.svg)](https://github.com/sharegate/craco/pulls)\n\n**C**reate **R**eact **A**pp **C**onfiguration **O**verride is an easy and comprehensible configuration layer for create-react-app.\n\nGet 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.\n\nAll you have to do is create your app using [create-react-app](https://github.com/facebook/create-react-app/) and customize the configuration file.\n\n## Support\n\n- Create React App (CRA) 5.*\n- Yarn\n- Yarn Workspace\n- NPM\n- Lerna (with or without hoisting)\n- Custom `react-scripts` version\n\n## Documentation\n\n- [Installation](#installation) - How to install and setup CRACO.\n- [Configuration](#configuration) - How to customize your CRA installation with CRACO.\n  - [Configuration File](#configuration-file)\n  - [Configuration Helpers](#configuration-helpers)\n  - [Exporting your Configuration](#exporting-your-configuration)\n  - [Setting a Custom Location for the configuration file](#setting-a-custom-location-for-cracoconfigjs)\n- [CRA toolchain for Beginners](#cra-toolchain-for-beginners)\n  - [Notes on CRA Configurations and Problem Solving](#notes-on-cra-configurations-and-problem-solving)\n  - [Ejecting CRA to Learn](#ejecting-cra-to-learn)\n  - [Direct Versus Functional Config Definitions](#direct-object-literal-versus-functional-config-definitions)\n- [API](#api) - CRACO APIs for Jest and Webpack.\n  - [Jest API](#jest-api)\n  - [Webpack API](#webpack-api)\n- [Recipes](https://github.com/sharegate/craco/tree/master/recipes) – Short recipes for common use cases.\n- [Available Plugins](https://github.com/sharegate/craco#community-maintained-plugins) - Plugins maintained by the community.\n- [Develop a Plugin](#develop-a-plugin) - How to develop a plugin for CRACO.\n- [Backward Compatibility](#backward-compatibility)\n- [Debugging](#debugging)\n- [License](#license)\n\n## Preface\n\n### Acknowledgements\n\nWe 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.\n\nThe configuration style of this plugin has been greatly influenced by [Vue CLI](https://cli.vuejs.org/guide/).\n\n### Fair Warning\n\nBy 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.\n\n## Installation\n\nInstall the plugin from **npm**:\n\n```bash\n$ yarn add @craco/craco\n\n# OR\n\n$ npm install @craco/craco --save\n```\n\nCreate a `craco.config.js` file in the root directory and [configure CRACO](#configuration):\n\n```\nmy-app\n├── node_modules\n├── craco.config.js\n└── package.json\n```\n\nUpdate the existing calls to `react-scripts` in the `scripts` section of your `package.json` file to use the `craco` CLI:\n\n```diff\n/* package.json */\n\n\"scripts\": {\n-   \"start\": \"react-scripts start\",\n+   \"start\": \"craco start\",\n-   \"build\": \"react-scripts build\",\n+   \"build\": \"craco build\"\n-   \"test\": \"react-scripts test\",\n+   \"test\": \"craco test\"\n}\n```\n\nStart your app for development:\n\n```bash\n$ npm start\n```\n\nOr build your app:\n\n```bash\n$ npm run build\n```\n\n## Configuration\n\nCRACO 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. \n\nIf there are multiple configuration files in the same directory, CRACO will only use one. The priority order is:\n\n1. `package.json`\n1. `craco.config.ts`\n1. `craco.config.js`\n1. `.cracorc.ts`\n1. `.cracorc.js`\n1. `.cracorc`\n\n### Configuration File \n\nBelow 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).\n\nSome sections have a `mode` property. When this is available there are 2 possible values:\n\n- `extends`: the provided configuration will extends the CRA settings (**default mode**)\n- `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.\n\n```javascript\nconst { when, whenDev, whenProd, whenTest, ESLINT_MODES, POSTCSS_MODES } = require(\"@craco/craco\");\n\nmodule.exports = {\n    reactScriptsVersion: \"react-scripts\" /* (default value) */,\n    style: {\n        modules: {\n            localIdentName: \"\"\n        },\n        css: {\n            loaderOptions: { /* Any css-loader configuration options: https://github.com/webpack-contrib/css-loader. */ },\n            loaderOptions: (cssLoaderOptions, { env, paths }) => { return cssLoaderOptions; }\n        },\n        sass: {\n            loaderOptions: { /* Any sass-loader configuration options: https://github.com/webpack-contrib/sass-loader. */ },\n            loaderOptions: (sassLoaderOptions, { env, paths }) => { return sassLoaderOptions; }\n        },\n        postcss: {\n            mode: \"extends\" /* (default value) */ || \"file\",\n            plugins: [require('plugin-to-append')], // Additional plugins given in an array are appended to existing config.\n            plugins: (plugins) => [require('plugin-to-prepend')].concat(plugins), // Or you may use the function variant.\n            env: {\n                autoprefixer: { /* Any autoprefixer options: https://github.com/postcss/autoprefixer#options */ },\n                stage: 3, /* Any valid stages: https://cssdb.org/#staging-process. */\n                features: { /* Any CSS features: https://preset-env.cssdb.org/features. */ }\n            },\n            loaderOptions: { /* Any postcss-loader configuration options: https://github.com/postcss/postcss-loader. */ },\n            loaderOptions: (postcssLoaderOptions, { env, paths }) => { return postcssLoaderOptions; }\n        }\n    },\n    eslint: {\n        enable: true /* (default value) */,\n        mode: \"extends\" /* (default value) */ || \"file\",\n        configure: { /* Any eslint configuration options: https://eslint.org/docs/user-guide/configuring */ },\n        configure: (eslintConfig, { env, paths }) => { return eslintConfig; },\n        pluginOptions: { /* Any eslint plugin configuration options: https://github.com/webpack-contrib/eslint-webpack-plugin#options. */ },\n        pluginOptions: (eslintOptions, { env, paths }) => { return eslintOptions; }\n    },\n    babel: {\n        presets: [],\n        plugins: [],\n        loaderOptions: { /* Any babel-loader configuration options: https://github.com/babel/babel-loader. */ },\n        loaderOptions: (babelLoaderOptions, { env, paths }) => { return babelLoaderOptions; }\n    },\n    typescript: {\n        enableTypeChecking: true /* (default value)  */\n    },\n    webpack: {\n        alias: {},\n        plugins: {\n            add: [], /* An array of plugins */\n            add: [\n                plugin1,\n                [plugin2, \"append\"],\n                [plugin3, \"prepend\"], /* Specify if plugin should be appended or prepended */\n            ], /* An array of plugins */\n            remove: [],  /* An array of plugin constructor's names (i.e. \"StyleLintPlugin\", \"ESLintWebpackPlugin\" ) */\n        },\n        configure: { /* Any webpack configuration options: https://webpack.js.org/configuration */ },\n        configure: (webpackConfig, { env, paths }) => { return webpackConfig; }\n    },\n    jest: {\n        babel: {\n            addPresets: true, /* (default value) */\n            addPlugins: true  /* (default value) */\n        },\n        configure: { /* Any Jest configuration options: https://jestjs.io/docs/en/configuration. */ },\n        configure: (jestConfig, { env, paths, resolve, rootDir }) => { return jestConfig; }\n    },\n    devServer: { /* Any devServer configuration options: https://webpack.js.org/configuration/dev-server/#devserver. */ },\n    devServer: (devServerConfig, { env, paths, proxy, allowedHost }) => { return devServerConfig; },\n    plugins: [\n        {\n            plugin: {\n                overrideCracoConfig: ({ cracoConfig, pluginOptions, context: { env, paths } }) => { return cracoConfig; },\n                overrideWebpackConfig: ({ webpackConfig, cracoConfig, pluginOptions, context: { env, paths } }) => { return webpackConfig; },\n                overrideDevServerConfig: ({ devServerConfig, cracoConfig, pluginOptions, context: { env, paths, proxy, allowedHost } }) => { return devServerConfig; },\n                overrideJestConfig: ({ jestConfig, cracoConfig, pluginOptions, context: { env, paths, resolve, rootDir } }) => { return jestConfig },\n            },\n            options: {}\n        }\n    ]\n};\n```\n\n### Configuration Helpers\n\nUsage for all \"when\" functions is the same, `whenDev, whenProd, whenTest` are shortcuts for `when`.\n\n`when(condition, fct, [unmetValue])`\n\nUsage:\n\n```javascript\nconst { when, whenDev } = require(\"@craco/craco\");\n\nmodule.exports = {\n    eslint: {\n        mode: ESLINT_MODES.file,\n        configure: {\n            formatter: when(process.env.NODE_ENV === \"CI\", require(\"eslint-formatter-vso\"))\n        }\n    },\n    webpack: {\n        plugins: [\n            new ConfigWebpackPlugin(),\n            ...whenDev(() => [new CircularDependencyPlugin()], [])\n        ]\n    }\n};\n```\n\n### Exporting your Configuration\n\nYou can export your configuration as an **object literal**:\n\n```javascript\n/* craco.config.js */\n\nmodule.exports = {\n    ...\n}\n```\n\na **function**:\n\n```javascript\n/* craco.config.js */\n\nmodule.exports = function({ env }) {\n    return {\n        ...\n    };\n}\n```\n\na **promise** or an **async function**:\n\n```javascript\n/* craco.config.js */\n\nmodule.exports = async function({ env }) {\n    await ...\n\n    return {\n        ...\n    };\n}\n```\n\n### Setting a Custom Location for craco.config.js\n\nBoth options support a **relative** or an **absolute** path.\n\n**1- package.json** _(Recommended)_\n\nYou can change the location of the `craco.config.js` file by specifying a value for `cracoConfig` in your `package.json` \nfile.\n\n```javascript\n/* package.json */\n\n{\n    \"cracoConfig\": \"config/craco-config-with-custom-name.js\"\n}\n```\n\n**2- CLI** _(For backward compatibility)_\n\nYou can also change the location of the `craco.config.js` file by specifying the `--config` CLI option. _This option \ndoesn't support Babel with Jest_\n\n```javascript\n/* package.json */\n\n{\n    \"scripts\": {\n        \"start\": \"craco start --config config/craco-config-with-custom-name.js\"\n    }\n}\n```\n\n## CRA Toolchain for Beginners\n\n### Introduction to CRACO\n\nCreate React App ([CRA](https://github.com/facebook/create-react-app)) is intended to allow people to get started with \nwriting React apps quickly. It does this by packaging several key components with a solid default configuration. \n\nAfter 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. \n\nCRACO allows you to enjoy the recognizable project structure of CRA while changing detailed configuration settings of \neach component. \n\n### Notes on CRA Configurations and Problem Solving  \n\nKeep in mind that there are _some_ configuration settings available to CRA without CRACO. \n\nGetting exactly what you want may involve a combination of making changes your CRACO configuration file and by using \nsome of the more limited _but still important_ settings available in Create React App. \n\nBefore jumping into customizing your _CRACO_ configuration, step back and think about each part of the problem you're \ntrying to solve. Be sure to review these resources on the CRA configuration, as it may save you time:\n\n - [Important Environment Variables that Configure CRA](https://create-react-app.dev/docs/advanced-configuration)\n - [Learn about using `postbuild` commands in `package.json`](https://stackoverflow.com/a/51818028/4028977)\n - [Proxying API or other Requests](https://create-react-app.dev/docs/proxying-api-requests-in-development/), or \"how \n to integrate CRA's dev server with a second backend\": \n [problem statement](https://github.com/facebook/create-react-app/issues/147)\n - [Search CRACO issues, for gotchas, hints and examples](https://github.com/gsoft-inc/craco/issues?q=is%3Aissue+sort%3Aupdated-desc)\n\n### Ejecting CRA to Learn\n\nAvoiding ejecting is a major goal for many CRACO users. However, if you're still learning toolchains and modern \nfrontend workflows, it may be helpful to create a sample ejected CRA project to see how the default CRA app configures \neach of the components. \n\nWhile CRACO's sample configuration file inherits directly from CRA's default settings, seeing the default CRA config in\nthe ejected CRA file structure may give you useful perspective. \n\nYou may even want to try testing a change in the ejected app to better understand how it would be done with your CRACO \nconfig-based project. \n\n### Direct (object literal) Versus Functional Config Definitions\n\nThe [sample CRACO config file]((#sample-craco-configuration-file)) is meant to show possibilities for configuring your CRA-based project. Each section \ncontains a primary configuration area, `loaderOptions` or `configure`. These config areas are where you will make most \nof your detailed changes.\n\nYou, (or perhaps your IDE) may have noticed that the sections have duplicate keys, i.e. loaderOptions is listed twice\nin the sample config file.\n\nThe reason for this is to allow you to choose between object literal or functionally defined configuration choices. \nThere are a few reasons for this:\n\n1. Sometimes it may be faster to test a minor change using keys. \n1. Other times a functional definition is necessary to get the right configuration.\n1. While not common, a setting may **only** work if you use one or the other! See, \n[devServer port example](https://github.com/gsoft-inc/craco/issues/172#issuecomment-651505730)\n\n#### A simple example of equivalent direct and functionally defined configuration settings:\n\n##### Direct configuration (object literal)\n\n```javascript\ndevServer: {\n    writeToDisk: true\n}\n```\n\n##### Functionally defined configuration\n\n```javascript\ndevServer: (devServerConfig, { env, paths, proxy, allowedHost }) => {\n    devServerConfig.writeToDisk = true; \n    return devServerConfig;\n}\n```\n\n## API\n\nTo integrate with other tools, it's usefull to have access to the configuration generated by CRACO.\n\nThat's what CRACO APIs are for. The current API support Jest and Webpack.\n\n### Jest API\n\nAccept a `cracoConfig`, a `context` object and `options`. The generated Jest config object is returned.\n\n> **Warning:** `createJestConfig` does NOT accept `cracoConfig` as a function. If your `craco.config.js` exposes a config \nfunction, you have to call it yourself before passing it to `createJestConfig`.\n\n`createJestConfig(cracoConfig, context = {}, options = { verbose: false, config: null })`\n\nUsage:\n\n```javascript\n/* jest.config.js */\n\nconst { createJestConfig } = require(\"@craco/craco\");\n\nconst cracoConfig = require(\"./craco.config.js\");\nconst jestConfig = createJestConfig(cracoConfig);\n\nmodule.exports = jestConfig;\n```\n\n#### Examples\n\n- [vscode-jest](https://github.com/sharegate/craco/tree/master/recipes/use-a-jest-config-file)\n\n### Webpack API\n\nYou can create Webpack DevServer and Production configurations using `createWebpackDevConfig` and `createWebpackProdConfig`. \n\nAccept a `cracoConfig`, a `context` object and `options`. The generated Webpack config object is returned.\n\n> **Warning:** Similar to `createJestConfig`, these functions do NOT accept `cracoConfig` as a function. If your \n`craco.config.js` exposes a config function, you have to call it yourself before passing it further.\n\n`createWebpackDevConfig(cracoConfig, context = {}, options = { verbose: false, config: null })`\n\n`createWebpackProdConfig(cracoConfig, context = {}, options = { verbose: false, config: null })`\n\nUsage:\n\n```javascript\n/* webpack.config.js */\n\nconst { createWebpackDevConfig } = require(\"@craco/craco\");\n\nconst cracoConfig = require(\"./craco.config.js\");\nconst webpackConfig = createWebpackDevConfig(cracoConfig);\n\nmodule.exports = webpackConfig;\n```\n\n## Develop a Plugin\n\n### Hooks\n\nThere are four hooks available to a plugin:\n\n- `overrideCracoConfig`: Let a plugin customize the config object before it's process by `craco`.\n- `overrideWebpackConfig`: Let a plugin customize the `webpack` config that will be used by CRA.\n- `overrideDevServerConfig`: Let a plugin customize the dev server config that will be used by CRA.\n- `overrideJestConfig`: Let a plugin customize the `Jest` config that will be used by CRA.\n\n**Important:**\n\nEvery function must return the updated config object.\n\n#### overrideCracoConfig\n\nThe function `overrideCracoConfig` let a plugin override the config object **before** it's process by `craco`.\n\nIf a plugin define the function, it will be called with the config object read from the `craco.config.js` file provided \nby the consumer.\n\n*The function must return a valid config object, otherwise `craco` will throw an error.*\n\nThe function will be called with a single object argument having the following structure:\n\n```javascript\n{\n    cracoConfig: \"The config object read from the craco.config.js file provided by the consumer\",\n    pluginOptions: \"The plugin options provided by the consumer\",\n    context: {\n        env: \"The current NODE_ENV (development, production, etc..)\",\n        paths: \"An object that contains all the paths used by CRA\"\n    }\n}\n```\n\n##### Example\n\nPlugin:\n\n```javascript\n/* craco-plugin-log-craco-config.js */\n\nmodule.exports = {\n    overrideCracoConfig: ({ cracoConfig, pluginOptions, context: { env, paths } }) => {\n        if (pluginOptions.preText) {\n            console.log(pluginOptions.preText);\n        }\n\n        console.log(JSON.stringify(cracoConfig, null, 4));\n\n        // Always return the config object.\n        return cracoConfig;\n    }\n};\n```\n\nRegistration (in a `craco.config.js` file):\n\n```javascript\nconst logCracoConfigPlugin = require(\"./craco-plugin-log-craco-config\");\n\nmodule.exports = {\n    ...\n    plugins: [\n        { plugin: logCracoConfigPlugin, options: { preText: \"Will log the craco config:\" } }\n    ]\n};\n```\n\n#### overrideWebpackConfig\n\nThe function `overrideWebpackConfig` let a plugin override the `webpack` config object **after** it's been customized \nby `craco`.\n\n*The function must return a valid config object, otherwise `craco` will throw an error.*\n\nThe function will be called with a single object argument having the following structure:\n\n```javascript\n{\n    webpackConfig: \"The webpack config object already customized by craco\",\n    cracoConfig: \"The configuration object read from the craco.config.js file provided by the consumer\",\n    pluginOptions: \"The plugin options provided by the consumer\",\n    context: {\n        env: \"The current NODE_ENV (development, production, etc..)\",\n        paths: \"An object that contains all the paths used by CRA\"\n    }\n}\n```\n\n##### Example\n\nPlugin:\n\n```javascript\n/* craco-plugin-log-webpack-config.js */\n\nmodule.exports = {\n    overrideWebpackConfig: ({ webpackConfig, cracoConfig, pluginOptions, context: { env, paths } }) => {\n        if (pluginOptions.preText) {\n            console.log(pluginOptions.preText);\n        }\n\n        console.log(JSON.stringify(webpackConfig, null, 4));\n\n        // Always return the config object.\n        return webpackConfig;\n    }\n};\n```\n\nRegistration (in a `craco.config.js` file):\n\n```javascript\nconst logWebpackConfigPlugin = require(\"./craco-plugin-log-webpack-config\");\n\nmodule.exports = {\n    ...\n    plugins: [\n        { plugin: logWebpackConfigPlugin, options: { preText: \"Will log the webpack config:\" } }\n    ]\n};\n```\n\n#### overrideDevServerConfig\n\nThe function `overrideDevServerConfig` let a plugin override the dev server config object **after** it's been customized\nby `craco`.\n\n*The function must return a valid config object, otherwise `craco` will throw an error.*\n\nThe function will be called with a single object argument having the following structure:\n\n```javascript\n{\n    devServerConfig: \"The dev server config object already customized by craco\",\n    cracoConfig: \"The configuration object read from the craco.config.js file provided by the consumer\",\n    pluginOptions: \"The plugin options provided by the consumer\",\n    context: {\n        env: \"The current NODE_ENV (development, production, etc..)\",\n        paths: \"An object that contains all the paths used by CRA\",\n        allowedHost: \"Provided by CRA\"\n    }\n}\n```\n\n##### Example\n\nPlugin:\n\n```javascript\n/* craco-plugin-log-dev-server-config.js */\n\nmodule.exports = {\n    overrideDevServerConfig: ({ devServerConfig, cracoConfig, pluginOptions, context: { env, paths, allowedHost } }) => {\n        if (pluginOptions.preText) {\n            console.log(pluginOptions.preText);\n        }\n\n        console.log(JSON.stringify(devServerConfig, null, 4));\n\n        // Always return the config object.\n        return devServerConfig;\n    }\n};\n```\n\nRegistration (in a `craco.config.js` file):\n\n```javascript\nconst logDevServerConfigPlugin = require(\"./craco-plugin-log-dev-server-config\");\n\nmodule.exports = {\n    ...\n    plugins: [\n        { plugin: logDevServerConfigPlugin, options: { preText: \"Will log the dev server config:\" } }\n    ]\n};\n```\n\n#### overrideJestConfig\n\nThe function `overrideJestConfig` let a plugin override the `Jest` config object **after** it's been customized by \n`craco`.\n\n*The function must return a valid config object, otherwise `craco` will throw an error.*\n\nThe function will be called with a single object argument having the following structure:\n\n```javascript\n{\n    jestConfig: \"The Jest config object already customized by craco\",\n    cracoConfig: \"The configuration object read from the craco.config.js file provided by the consumer\",\n    pluginOptions: \"The plugin options provided by the consumer\",\n    context: {\n        env: \"The current NODE_ENV (development, production, etc..)\",\n        paths: \"An object that contains all the paths used by CRA\",\n        resolve: \"Provided by CRA\",\n        rootDir: \"Provided by CRA\"\n    }\n}\n```\n\n##### Example\n\nPlugin:\n\n```javascript\n/* craco-plugin-log-jest-config.js */\n\nmodule.exports = {\n    overrideJestConfig: ({ jestConfig, cracoConfig, pluginOptions, context: { env, paths, resolve, rootDir } }) => {\n        if (pluginOptions.preText) {\n            console.log(pluginOptions.preText);\n        }\n\n        console.log(JSON.stringify(jestConfig, null, 4));\n\n        // Always return the config object.\n        return jestConfig;\n    }\n};\n```\n\nRegistration (in a `craco.config.js` file):\n\n```javascript\nconst logJestConfigPlugin = require(\"./craco-plugin-log-jest-config\");\n\nmodule.exports = {\n    ...\n    plugins: [\n        { plugin: logJestConfigPlugin, options: { preText: \"Will log the Jest config:\" } }\n    ]\n};\n```\n\n### Utility Functions\n\nA few utility functions are provided by CRACO to help you develop a plugin:\n - `getLoader`\n - `getLoaders`\n - `removeLoaders`\n - `addBeforeLoader`\n - `addBeforeLoaders`\n - `addAfterLoader`\n - `addAfterLoaders`\n - `getPlugin`\n - `removePlugins`\n - `addPlugins`\n - `throwUnexpectedConfigError`\n \n```javascript\nconst { getLoader, getLoaders, removeLoaders, loaderByName, getPlugin, removePlugins, addPlugins, pluginByName, throwUnexpectedConfigError } = require(\"@craco/craco\");\n```\n\n#### getLoader\n\nRetrieve the **first** loader that match the specified criteria from the webpack config.\n\nReturns:\n\n```javascript\n{\n    isFound: true | false,\n    match: {\n        loader,\n        parent,\n        index\n    }\n}\n```\n\nUsage:\n\n```javascript\nconst { getLoader, loaderByName } = require(\"@craco/craco\");\n\nconst { isFound, match } = getLoader(webpackConfig, loaderByName(\"eslint-loader\"));\n\nif (isFound) {\n    // do stuff...\n}\n```\n\n#### getLoaders\n\nRetrieve **all** the loaders that match the specified criteria from the webpack config.\n\nReturns:\n\n```javascript\n{\n    hasFoundAny: true | false,\n    matches: [\n        {\n            loader,\n            parent,\n            index\n        }\n    ]\n}\n```\n\nUsage:\n\n```javascript\nconst { getLoaders, loaderByName } = require(\"@craco/craco\");\n\nconst { hasFoundAny, matches } = getLoaders(webpackConfig, loaderByName(\"babel-loader\"));\n\nif (hasFoundAny) {\n    matches.forEach(x => {\n        // do stuff...\n    });\n}\n```\n\n#### removeLoaders\n\nRemove **all** the loaders that match the specified criteria from the webpack config.\n\nReturns:\n\n```javascript\n{\n    hasRemovedAny: true | false,\n    removedCount: int\n}\n```\n\nUsage:\n\n```javascript\nconst { removeLoaders, loaderByName } = require(\"@craco/craco\");\n\nremoveLoaders(webpackConfig, loaderByName(\"eslint-loader\"));\n```\n\n#### addBeforeLoader\n\nAdd a new *loader* **before** the loader that match specified criteria to the webpack config.\n\nReturns:\n\n```javascript\n{\n    isAdded: true | false\n}\n```\n\nUsage:\n\n```javascript\nconst { addBeforeLoader, loaderByName } = require(\"@craco/craco\");\n\nconst myNewWebpackLoader = {\n    loader: require.resolve(\"tslint-loader\")\n};\n\naddBeforeLoader(webpackConfig, loaderByName(\"eslint-loader\"), myNewWebpackLoader);\n```\n\n#### addBeforeLoaders\n\nAdd a new *loader* **before** all the loaders that match specified criteria to the webpack config.\n\nReturns:\n\n```javascript\n{\n    isAdded: true | false,\n    addedCount: int\n}\n```\n\nUsage:\n\n```javascript\nconst { addBeforeLoaders, loaderByName } = require(\"@craco/craco\");\n\nconst myNewWebpackLoader = {\n    loader: require.resolve(\"tslint-loader\")\n};\n\naddBeforeLoaders(webpackConfig, loaderByName(\"eslint-loader\"), myNewWebpackLoader);\n```\n\n#### addAfterLoader\n\nAdd a new *loader* **after** the loader that match specified criteria to the webpack config.\n\nReturns:\n\n```javascript\n{\n    isAdded: true | false\n}\n```\n\nUsage:\n\n```javascript\nconst { addAfterLoader, loaderByName } = require(\"@craco/craco\");\n\nconst myNewWebpackLoader = {\n    loader: require.resolve(\"tslint-loader\")\n};\n\naddAfterLoader(webpackConfig, loaderByName(\"eslint-loader\"), myNewWebpackLoader);\n```\n\n#### addAfterLoaders\n\nAdd a new *loader* **after** all the loaders that match specified criteria to the webpack config.\n\nReturns:\n\n```javascript\n{\n    isAdded: true | false,\n    addedCount: int\n}\n```\n\nUsage:\n\n```javascript\nconst { addAfterLoaders, loaderByName } = require(\"@craco/craco\");\n\nconst myNewWebpackLoader = {\n    loader: require.resolve(\"tslint-loader\")\n};\n\naddAfterLoaders(webpackConfig, loaderByName(\"eslint-loader\"), myNewWebpackLoader);\n```\n\n#### getPlugin\n\nRetrieve the **first** plugin that match the specified criteria from the webpack config.\n\nReturns:\n\n```javascript\n{\n    isFound: true | false,\n    match: {...} // the webpack plugin\n}\n```\n\nUsage:\n\n```javascript\nconst { getPlugin, pluginByName } = require(\"@craco/craco\");\n\nconst { isFound, match } = getPlugin(webpackConfig, pluginByName(\"ESLintWebpackPlugin\"));\n\nif (isFound) {\n    // do stuff...\n}\n```\n\n#### removePlugins\n\nRemove **all** the plugins that match the specified criteria from the webpack config.\n\nReturns:\n\n```javascript\n{\n    hasRemovedAny:: true | false,\n    removedCount:: int\n}\n```\n\nUsage:\n\n```javascript\nconst { removePlugins, pluginByName } = require(\"@craco/craco\");\n\nremovePlugins(webpackConfig, pluginByName(\"ESLintWebpackPlugin\"));\n```\n\n#### addPlugins\n\nAdd new *plugins* to the webpack config.\n\nUsage:\n\n```javascript\nconst { addPlugins } = require(\"@craco/craco\");\n\nconst myNewWebpackPlugin = require.resolve(\"ESLintWebpackPlugin\");\n\naddPlugins(webpackConfig, [myNewWebpackPlugin]);\naddPlugins(webpackConfig, [ [myNewWebpackPlugin, \"append\"] ]);\naddPlugins(webpackConfig, [ [myNewWebpackPlugin, \"prepend\"] ]);\n```\n\n\n#### throwUnexpectedConfigError\n\nThrow an error if the webpack configuration changes and does not match your expectations. (For example, `getLoader` \ncannot find a loader and `isFound` is `false`.) `create-react-app` might update the structure of their webpack config, \nso it is very important to show a helpful error message when something breaks.\n\nRaises an error and crashes Node.js:\n\n```bash\n$ yarn start\nyarn run v1.12.3\n$ craco start\n/path/to/your/app/craco.config.js:23\n            throw new Error(\n            ^\n\n    Error: Can't find eslint-loader in the webpack config!\n\n    This error probably occurred because you updated react-scripts or craco. Please try updating craco-less to the latest version:\n\n       $ yarn upgrade craco-less\n\n    Or:\n\n       $ npm update craco-less\n\n    If that doesn't work, craco-less needs to be fixed to support the latest version.\n    Please check to see if there's already an issue in the ndbroadbent/craco-less repo:\n\n       * https://github.com/ndbroadbent/craco-less/issues?q=is%3Aissue+webpack+eslint-loader\n\n    If not, please open an issue and we'll take a look. (Or you can send a PR!)\n\n    You might also want to look for related issues in the craco and create-react-app repos:\n\n       * https://github.com/sharegate/craco/issues?q=is%3Aissue+webpack+eslint-loader\n       * https://github.com/facebook/create-react-app/issues?q=is%3Aissue+webpack+eslint-loader\n\n    at throwUnexpectedConfigError (/path/to/your/app/craco.config.js:23:19)\n    ...\n```\n\nUsage:\n\n```javascript\nconst { getLoader, loaderByName, throwUnexpectedConfigError } = require(\"@craco/craco\");\n\n// Create a helper function if you need to call this multiple times\nconst throwError = (message, githubIssueQuery) =>\n    throwUnexpectedConfigError({\n        packageName: \"craco-less\",\n        githubRepo: \"ndbroadbent/craco-less\",\n        message,\n        githubIssueQuery,\n    });\n\nconst { isFound, match } = getLoader(webpackConfig, loaderByName(\"eslint-loader\"));\n\nif (!isFound) {\n    throwError(\"Can't find eslint-loader in the webpack config!\", \"webpack+eslint-loader\")\n}\n```\n\nOptions:\n\n```javascript\n{\n    message: \"An error message explaining what went wrong\",\n    packageName: \"NPM package name\",\n    githubRepo: \"GitHub repo where people can open an issue. Format: username/repo\",\n    githubIssueQuery: \"Search string to find related issues\"\n}\n```\n\n> Only `message` is required.\n\n## Backward Compatibility\n\nCRACO 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.\n\n| react-scripts Version |CRACO Version|\n| --------------------- | -----------:|\n| react-scripts < 4.0.0 |       5.8.0 |\n\n## Debugging\n\n### Verbose Logging\n\nTo activate **verbose** logging specify the CLI option `--verbose`\n\n```javascript\n/* package.json */\n\n{\n    \"scripts\": {\n        \"start\": \"craco start --verbose\"\n    }\n}\n```\n\n## License\n\nCopyright © 2020, Groupe Sharegate inc. This code is licensed under the Apache License, Version 2.0. You may obtain a \ncopy of this license at https://github.com/gsoft-inc/gsoft-license/blob/master/LICENSE.\n","readmeFilename":"README.md","_id":"@craco/craco@7.0.0-alpha.0","_nodeVersion":"16.13.1","_npmVersion":"lerna/3.16.4/node@v16.13.1+x64 (win32)","dist":{"integrity":"sha512-30XCp5dvHZ3eIeOhPZpBus8pYnYWQFCw42bNVhA5nSxogtLvwbR28rqqVb+v0jfAwd0FK7YQ69Vv4puXS5RfwQ==","shasum":"13ff34a8461b610031f111aa4b85e92a114e727c","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-7.0.0-alpha.0.tgz","fileCount":41,"unpackedSize":111498,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh8BZSCRA9TVsSAnZWagAAyd0P/0RRvON3Bn3HZvv6oee+\nsVa0F7X6+nUS7A7L/0mLk+8SZnu7GW379Y9QDJ1eXDOaXS/ZSqRZz+nMoQgZ\nx46ySYW7T3XbxbHUVW4tBxfOwj01u3wbcYNXfSYE9gOSAXMM3HS1AAfZTpzm\nenACevNdlAAmLV28GNRtvE97H0lMgUhCoFHTf0BWfg3imhzYbV5R6825oxNs\nBKcjaPqYpiJAkKRLjt7Z8ASGjmKg9cpoFXJJ+zgQKvFiH8siVuTvp4kTw72n\nu4jUz66OURbxuF1cPL7974nVq6PJofFeo5O94yLGxo0TVaXEFTL3m0gOdALL\nkASYaUVC7hIBxP5fwKA6hLUafXls51jyaRPoh+WYOM6RU/KXvoazQZoFmYcm\nUkblzrhq6jaGk3fMgXJGRjeuejf9Q5k/1O6UC/M9WUlDU9Fd/+ACBFbXbnbI\nmyYNxI6bl4HAtkP7ISm/EnSy5Cc5BCcRjwfc/x42LsPcJXdTXtYfFh6fAUPF\n/VYxMaVMyM0cAUCGQFYQM8dDBg6sWeYQKnaMyASRe/KlbeefY6mX6gNv6WTL\nM6EutUktEY7vrDw2cb3YLup9CFUXemU1TcmIBD1vrBTEBw1Tyeub2FbvIB+F\ntkJnFjukykMoQGWIP5v8dOEj2tKUaGy3jwoCQtJIJtgoljqNdaxvybuHQvzB\nFu1H\r\n=Dtsv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCyG4XrlLaNsGyU68oxrPRrIfKo1Amd2j3kEBX1HQ+/2wIhAJAheAB97Bm5SaGmOYzxGeIof95MeEgEYw6ND7M15dF+"}]},"_npmUser":{"name":"anonymous","email":"f.brobillard@gmail.com"},"directories":{},"maintainers":[{"name":"anonymous","email":"f.brobillard@gmail.com"},{"name":"anonymous","email":"pa.lafrance@gmail.com"},{"name":"anonymous","email":"yohan.belval@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_7.0.0-alpha.0_1643124306023_0.7104700072385417"},"_hasShrinkwrap":false},"7.0.0-alpha.1":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app.","version":"7.0.0-alpha.1","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/gsoft-inc/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/gsoft-inc/craco/issues"},"homepage":"https://github.com/gsoft-inc/craco","engines":{"node":">=6"},"bin":{"craco":"bin/craco.js"},"peerDependencies":{"react-scripts":"^5.0.0"},"devDependencies":{"react-scripts":"5.*"},"dependencies":{"cosmiconfig":"^7.0.1","cosmiconfig-typescript-loader":"^1.0.0","cross-spawn":"^7.0.0","lodash":"^4.17.15","semver":"^7.3.2","webpack-merge":"^4.2.2"},"gitHead":"fb3d13625dba9030bd345207ecbc54746d959e1c","readme":"# CRACO [![Build Status](https://travis-ci.org/sharegate/craco.svg?branch=master)](https://travis-ci.org/sharegate/craco) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-green.svg)](https://github.com/sharegate/craco/pulls)\n\n**C**reate **R**eact **A**pp **C**onfiguration **O**verride is an easy and comprehensible configuration layer for create-react-app.\n\nGet 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.\n\nAll you have to do is create your app using [create-react-app](https://github.com/facebook/create-react-app/) and customize the configuration file.\n\n## Support\n\n- Create React App (CRA) 5.*\n- Yarn\n- Yarn Workspace\n- NPM\n- Lerna (with or without hoisting)\n- Custom `react-scripts` version\n\n## Documentation\n\n- [Installation](#installation) - How to install and setup CRACO.\n- [Configuration](#configuration) - How to customize your CRA installation with CRACO.\n  - [Configuration File](#configuration-file)\n  - [Configuration Helpers](#configuration-helpers)\n  - [Exporting your Configuration](#exporting-your-configuration)\n  - [Setting a Custom Location for the configuration file](#setting-a-custom-location-for-cracoconfigjs)\n- [CRA toolchain for Beginners](#cra-toolchain-for-beginners)\n  - [Notes on CRA Configurations and Problem Solving](#notes-on-cra-configurations-and-problem-solving)\n  - [Ejecting CRA to Learn](#ejecting-cra-to-learn)\n  - [Direct Versus Functional Config Definitions](#direct-object-literal-versus-functional-config-definitions)\n- [API](#api) - CRACO APIs for Jest and Webpack.\n  - [Jest API](#jest-api)\n  - [Webpack API](#webpack-api)\n- [Recipes](https://github.com/sharegate/craco/tree/master/recipes) – Short recipes for common use cases.\n- [Available Plugins](https://github.com/sharegate/craco#community-maintained-plugins) - Plugins maintained by the community.\n- [Develop a Plugin](#develop-a-plugin) - How to develop a plugin for CRACO.\n- [Backward Compatibility](#backward-compatibility)\n- [Debugging](#debugging)\n- [License](#license)\n\n## Preface\n\n### Acknowledgements\n\nWe 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.\n\nThe configuration style of this plugin has been greatly influenced by [Vue CLI](https://cli.vuejs.org/guide/).\n\n### Fair Warning\n\nBy 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.\n\n## Installation\n\nInstall the plugin from **npm**:\n\n```bash\n$ yarn add @craco/craco\n\n# OR\n\n$ npm install @craco/craco --save\n```\n\nCreate a `craco.config.js` file in the root directory and [configure CRACO](#configuration):\n\n```\nmy-app\n├── node_modules\n├── craco.config.js\n└── package.json\n```\n\nUpdate the existing calls to `react-scripts` in the `scripts` section of your `package.json` file to use the `craco` CLI:\n\n```diff\n/* package.json */\n\n\"scripts\": {\n-   \"start\": \"react-scripts start\",\n+   \"start\": \"craco start\",\n-   \"build\": \"react-scripts build\",\n+   \"build\": \"craco build\"\n-   \"test\": \"react-scripts test\",\n+   \"test\": \"craco test\"\n}\n```\n\nStart your app for development:\n\n```bash\n$ npm start\n```\n\nOr build your app:\n\n```bash\n$ npm run build\n```\n\n## Configuration\n\nCRACO 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. \n\nIf there are multiple configuration files in the same directory, CRACO will only use one. The priority order is:\n\n1. `package.json`\n1. `craco.config.ts`\n1. `craco.config.js`\n1. `.cracorc.ts`\n1. `.cracorc.js`\n1. `.cracorc`\n\n### Configuration File \n\nBelow 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).\n\nSome sections have a `mode` property. When this is available there are 2 possible values:\n\n- `extends`: the provided configuration will extends the CRA settings (**default mode**)\n- `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.\n\n```javascript\nconst { when, whenDev, whenProd, whenTest, ESLINT_MODES, POSTCSS_MODES } = require(\"@craco/craco\");\n\nmodule.exports = {\n    reactScriptsVersion: \"react-scripts\" /* (default value) */,\n    style: {\n        modules: {\n            localIdentName: \"\"\n        },\n        css: {\n            loaderOptions: { /* Any css-loader configuration options: https://github.com/webpack-contrib/css-loader. */ },\n            loaderOptions: (cssLoaderOptions, { env, paths }) => { return cssLoaderOptions; }\n        },\n        sass: {\n            loaderOptions: { /* Any sass-loader configuration options: https://github.com/webpack-contrib/sass-loader. */ },\n            loaderOptions: (sassLoaderOptions, { env, paths }) => { return sassLoaderOptions; }\n        },\n        postcss: {\n            mode: \"extends\" /* (default value) */ || \"file\",\n            plugins: [require('plugin-to-append')], // Additional plugins given in an array are appended to existing config.\n            plugins: (plugins) => [require('plugin-to-prepend')].concat(plugins), // Or you may use the function variant.\n            env: {\n                autoprefixer: { /* Any autoprefixer options: https://github.com/postcss/autoprefixer#options */ },\n                stage: 3, /* Any valid stages: https://cssdb.org/#staging-process. */\n                features: { /* Any CSS features: https://preset-env.cssdb.org/features. */ }\n            },\n            loaderOptions: { /* Any postcss-loader configuration options: https://github.com/postcss/postcss-loader. */ },\n            loaderOptions: (postcssLoaderOptions, { env, paths }) => { return postcssLoaderOptions; }\n        }\n    },\n    eslint: {\n        enable: true /* (default value) */,\n        mode: \"extends\" /* (default value) */ || \"file\",\n        configure: { /* Any eslint configuration options: https://eslint.org/docs/user-guide/configuring */ },\n        configure: (eslintConfig, { env, paths }) => { return eslintConfig; },\n        pluginOptions: { /* Any eslint plugin configuration options: https://github.com/webpack-contrib/eslint-webpack-plugin#options. */ },\n        pluginOptions: (eslintOptions, { env, paths }) => { return eslintOptions; }\n    },\n    babel: {\n        presets: [],\n        plugins: [],\n        loaderOptions: { /* Any babel-loader configuration options: https://github.com/babel/babel-loader. */ },\n        loaderOptions: (babelLoaderOptions, { env, paths }) => { return babelLoaderOptions; }\n    },\n    typescript: {\n        enableTypeChecking: true /* (default value)  */\n    },\n    webpack: {\n        alias: {},\n        plugins: {\n            add: [], /* An array of plugins */\n            add: [\n                plugin1,\n                [plugin2, \"append\"],\n                [plugin3, \"prepend\"], /* Specify if plugin should be appended or prepended */\n            ], /* An array of plugins */\n            remove: [],  /* An array of plugin constructor's names (i.e. \"StyleLintPlugin\", \"ESLintWebpackPlugin\" ) */\n        },\n        configure: { /* Any webpack configuration options: https://webpack.js.org/configuration */ },\n        configure: (webpackConfig, { env, paths }) => { return webpackConfig; }\n    },\n    jest: {\n        babel: {\n            addPresets: true, /* (default value) */\n            addPlugins: true  /* (default value) */\n        },\n        configure: { /* Any Jest configuration options: https://jestjs.io/docs/en/configuration */ },\n        configure: (jestConfig, { env, paths, resolve, rootDir }) => { return jestConfig; }\n    },\n    devServer: { /* Any devServer configuration options: https://webpack.js.org/configuration/dev-server/#devserver */ },\n    devServer: (devServerConfig, { env, paths, proxy, allowedHost }) => { return devServerConfig; },\n    plugins: [\n        {\n            plugin: {\n                overrideCracoConfig: ({ cracoConfig, pluginOptions, context: { env, paths } }) => { return cracoConfig; },\n                overrideWebpackConfig: ({ webpackConfig, cracoConfig, pluginOptions, context: { env, paths } }) => { return webpackConfig; },\n                overrideDevServerConfig: ({ devServerConfig, cracoConfig, pluginOptions, context: { env, paths, proxy, allowedHost } }) => { return devServerConfig; },\n                overrideJestConfig: ({ jestConfig, cracoConfig, pluginOptions, context: { env, paths, resolve, rootDir } }) => { return jestConfig },\n            },\n            options: {}\n        }\n    ]\n};\n```\n\n### Configuration Helpers\n\nUsage for all \"when\" functions is the same, `whenDev, whenProd, whenTest` are shortcuts for `when`.\n\n`when(condition, fct, [unmetValue])`\n\nUsage:\n\n```javascript\nconst { when, whenDev } = require(\"@craco/craco\");\n\nmodule.exports = {\n    eslint: {\n        mode: ESLINT_MODES.file,\n        configure: {\n            formatter: when(process.env.NODE_ENV === \"CI\", require(\"eslint-formatter-vso\"))\n        }\n    },\n    webpack: {\n        plugins: [\n            new ConfigWebpackPlugin(),\n            ...whenDev(() => [new CircularDependencyPlugin()], [])\n        ]\n    }\n};\n```\n\n### Exporting your Configuration\n\nYou can export your configuration as an **object literal**:\n\n```javascript\n/* craco.config.js */\n\nmodule.exports = {\n    ...\n}\n```\n\na **function**:\n\n```javascript\n/* craco.config.js */\n\nmodule.exports = function({ env }) {\n    return {\n        ...\n    };\n}\n```\n\na **promise** or an **async function**:\n\n```javascript\n/* craco.config.js */\n\nmodule.exports = async function({ env }) {\n    await ...\n\n    return {\n        ...\n    };\n}\n```\n\n### Setting a Custom Location for craco.config.js\n\nBoth options support a **relative** or an **absolute** path.\n\n**1- package.json** _(Recommended)_\n\nYou can change the location of the `craco.config.js` file by specifying a value for `cracoConfig` in your `package.json` \nfile.\n\n```javascript\n/* package.json */\n\n{\n    \"cracoConfig\": \"config/craco-config-with-custom-name.js\"\n}\n```\n\n**2- CLI** _(For backward compatibility)_\n\nYou can also change the location of the `craco.config.js` file by specifying the `--config` CLI option. _This option \ndoesn't support Babel with Jest_\n\n```javascript\n/* package.json */\n\n{\n    \"scripts\": {\n        \"start\": \"craco start --config config/craco-config-with-custom-name.js\"\n    }\n}\n```\n\n## CRA Toolchain for Beginners\n\n### Introduction to CRACO\n\nCreate React App ([CRA](https://github.com/facebook/create-react-app)) is intended to allow people to get started with \nwriting React apps quickly. It does this by packaging several key components with a solid default configuration. \n\nAfter 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. \n\nCRACO allows you to enjoy the recognizable project structure of CRA while changing detailed configuration settings of \neach component. \n\n### Notes on CRA Configurations and Problem Solving  \n\nKeep in mind that there are _some_ configuration settings available to CRA without CRACO. \n\nGetting exactly what you want may involve a combination of making changes your CRACO configuration file and by using \nsome of the more limited _but still important_ settings available in Create React App. \n\nBefore jumping into customizing your _CRACO_ configuration, step back and think about each part of the problem you're \ntrying to solve. Be sure to review these resources on the CRA configuration, as it may save you time:\n\n - [Important Environment Variables that Configure CRA](https://create-react-app.dev/docs/advanced-configuration)\n - [Learn about using `postbuild` commands in `package.json`](https://stackoverflow.com/a/51818028/4028977)\n - [Proxying API or other Requests](https://create-react-app.dev/docs/proxying-api-requests-in-development/), or \"how \n to integrate CRA's dev server with a second backend\": \n [problem statement](https://github.com/facebook/create-react-app/issues/147)\n - [Search CRACO issues, for gotchas, hints and examples](https://github.com/gsoft-inc/craco/issues?q=is%3Aissue+sort%3Aupdated-desc)\n\n### Ejecting CRA to Learn\n\nAvoiding ejecting is a major goal for many CRACO users. However, if you're still learning toolchains and modern \nfrontend workflows, it may be helpful to create a sample ejected CRA project to see how the default CRA app configures \neach of the components. \n\nWhile CRACO's sample configuration file inherits directly from CRA's default settings, seeing the default CRA config in\nthe ejected CRA file structure may give you useful perspective. \n\nYou may even want to try testing a change in the ejected app to better understand how it would be done with your CRACO \nconfig-based project. \n\n### Direct (object literal) Versus Functional Config Definitions\n\nThe [sample CRACO config file]((#sample-craco-configuration-file)) is meant to show possibilities for configuring your CRA-based project. Each section \ncontains a primary configuration area, `loaderOptions` or `configure`. These config areas are where you will make most \nof your detailed changes.\n\nYou, (or perhaps your IDE) may have noticed that the sections have duplicate keys, i.e. loaderOptions is listed twice\nin the sample config file.\n\nThe reason for this is to allow you to choose between object literal or functionally defined configuration choices. \nThere are a few reasons for this:\n\n1. Sometimes it may be faster to test a minor change using keys. \n1. Other times a functional definition is necessary to get the right configuration.\n1. While not common, a setting may **only** work if you use one or the other! See, \n[devServer port example](https://github.com/gsoft-inc/craco/issues/172#issuecomment-651505730)\n\n#### A simple example of equivalent direct and functionally defined configuration settings:\n\n##### Direct configuration (object literal)\n\n```javascript\ndevServer: {\n    writeToDisk: true\n}\n```\n\n##### Functionally defined configuration\n\n```javascript\ndevServer: (devServerConfig, { env, paths, proxy, allowedHost }) => {\n    devServerConfig.writeToDisk = true; \n    return devServerConfig;\n}\n```\n\n## API\n\nTo integrate with other tools, it's usefull to have access to the configuration generated by CRACO.\n\nThat's what CRACO APIs are for. The current API support Jest and Webpack.\n\n### Jest API\n\nAccept a `cracoConfig`, a `context` object and `options`. The generated Jest config object is returned.\n\n> **Warning:** `createJestConfig` does NOT accept `cracoConfig` as a function. If your `craco.config.js` exposes a config \nfunction, you have to call it yourself before passing it to `createJestConfig`.\n\n`createJestConfig(cracoConfig, context = {}, options = { verbose: false, config: null })`\n\nUsage:\n\n```javascript\n/* jest.config.js */\n\nconst { createJestConfig } = require(\"@craco/craco\");\n\nconst cracoConfig = require(\"./craco.config.js\");\nconst jestConfig = createJestConfig(cracoConfig);\n\nmodule.exports = jestConfig;\n```\n\n#### Examples\n\n- [vscode-jest](https://github.com/sharegate/craco/tree/master/recipes/use-a-jest-config-file)\n\n### Webpack API\n\nYou can create Webpack DevServer and Production configurations using `createWebpackDevConfig` and `createWebpackProdConfig`. \n\nAccept a `cracoConfig`, a `context` object and `options`. The generated Webpack config object is returned.\n\n> **Warning:** Similar to `createJestConfig`, these functions do NOT accept `cracoConfig` as a function. If your \n`craco.config.js` exposes a config function, you have to call it yourself before passing it further.\n\n`createWebpackDevConfig(cracoConfig, context = {}, options = { verbose: false, config: null })`\n\n`createWebpackProdConfig(cracoConfig, context = {}, options = { verbose: false, config: null })`\n\nUsage:\n\n```javascript\n/* webpack.config.js */\n\nconst { createWebpackDevConfig } = require(\"@craco/craco\");\n\nconst cracoConfig = require(\"./craco.config.js\");\nconst webpackConfig = createWebpackDevConfig(cracoConfig);\n\nmodule.exports = webpackConfig;\n```\n\n## Develop a Plugin\n\n### Hooks\n\nThere are four hooks available to a plugin:\n\n- `overrideCracoConfig`: Let a plugin customize the config object before it's process by `craco`.\n- `overrideWebpackConfig`: Let a plugin customize the `webpack` config that will be used by CRA.\n- `overrideDevServerConfig`: Let a plugin customize the dev server config that will be used by CRA.\n- `overrideJestConfig`: Let a plugin customize the `Jest` config that will be used by CRA.\n\n**Important:**\n\nEvery function must return the updated config object.\n\n#### overrideCracoConfig\n\nThe function `overrideCracoConfig` let a plugin override the config object **before** it's process by `craco`.\n\nIf a plugin define the function, it will be called with the config object read from the `craco.config.js` file provided \nby the consumer.\n\n*The function must return a valid config object, otherwise `craco` will throw an error.*\n\nThe function will be called with a single object argument having the following structure:\n\n```javascript\n{\n    cracoConfig: \"The config object read from the craco.config.js file provided by the consumer\",\n    pluginOptions: \"The plugin options provided by the consumer\",\n    context: {\n        env: \"The current NODE_ENV (development, production, etc..)\",\n        paths: \"An object that contains all the paths used by CRA\"\n    }\n}\n```\n\n##### Example\n\nPlugin:\n\n```javascript\n/* craco-plugin-log-craco-config.js */\n\nmodule.exports = {\n    overrideCracoConfig: ({ cracoConfig, pluginOptions, context: { env, paths } }) => {\n        if (pluginOptions.preText) {\n            console.log(pluginOptions.preText);\n        }\n\n        console.log(JSON.stringify(cracoConfig, null, 4));\n\n        // Always return the config object.\n        return cracoConfig;\n    }\n};\n```\n\nRegistration (in a `craco.config.js` file):\n\n```javascript\nconst logCracoConfigPlugin = require(\"./craco-plugin-log-craco-config\");\n\nmodule.exports = {\n    ...\n    plugins: [\n        { plugin: logCracoConfigPlugin, options: { preText: \"Will log the craco config:\" } }\n    ]\n};\n```\n\n#### overrideWebpackConfig\n\nThe function `overrideWebpackConfig` let a plugin override the `webpack` config object **after** it's been customized \nby `craco`.\n\n*The function must return a valid config object, otherwise `craco` will throw an error.*\n\nThe function will be called with a single object argument having the following structure:\n\n```javascript\n{\n    webpackConfig: \"The webpack config object already customized by craco\",\n    cracoConfig: \"The configuration object read from the craco.config.js file provided by the consumer\",\n    pluginOptions: \"The plugin options provided by the consumer\",\n    context: {\n        env: \"The current NODE_ENV (development, production, etc..)\",\n        paths: \"An object that contains all the paths used by CRA\"\n    }\n}\n```\n\n##### Example\n\nPlugin:\n\n```javascript\n/* craco-plugin-log-webpack-config.js */\n\nmodule.exports = {\n    overrideWebpackConfig: ({ webpackConfig, cracoConfig, pluginOptions, context: { env, paths } }) => {\n        if (pluginOptions.preText) {\n            console.log(pluginOptions.preText);\n        }\n\n        console.log(JSON.stringify(webpackConfig, null, 4));\n\n        // Always return the config object.\n        return webpackConfig;\n    }\n};\n```\n\nRegistration (in a `craco.config.js` file):\n\n```javascript\nconst logWebpackConfigPlugin = require(\"./craco-plugin-log-webpack-config\");\n\nmodule.exports = {\n    ...\n    plugins: [\n        { plugin: logWebpackConfigPlugin, options: { preText: \"Will log the webpack config:\" } }\n    ]\n};\n```\n\n#### overrideDevServerConfig\n\nThe function `overrideDevServerConfig` let a plugin override the dev server config object **after** it's been customized\nby `craco`.\n\n*The function must return a valid config object, otherwise `craco` will throw an error.*\n\nThe function will be called with a single object argument having the following structure:\n\n```javascript\n{\n    devServerConfig: \"The dev server config object already customized by craco\",\n    cracoConfig: \"The configuration object read from the craco.config.js file provided by the consumer\",\n    pluginOptions: \"The plugin options provided by the consumer\",\n    context: {\n        env: \"The current NODE_ENV (development, production, etc..)\",\n        paths: \"An object that contains all the paths used by CRA\",\n        allowedHost: \"Provided by CRA\"\n    }\n}\n```\n\n##### Example\n\nPlugin:\n\n```javascript\n/* craco-plugin-log-dev-server-config.js */\n\nmodule.exports = {\n    overrideDevServerConfig: ({ devServerConfig, cracoConfig, pluginOptions, context: { env, paths, allowedHost } }) => {\n        if (pluginOptions.preText) {\n            console.log(pluginOptions.preText);\n        }\n\n        console.log(JSON.stringify(devServerConfig, null, 4));\n\n        // Always return the config object.\n        return devServerConfig;\n    }\n};\n```\n\nRegistration (in a `craco.config.js` file):\n\n```javascript\nconst logDevServerConfigPlugin = require(\"./craco-plugin-log-dev-server-config\");\n\nmodule.exports = {\n    ...\n    plugins: [\n        { plugin: logDevServerConfigPlugin, options: { preText: \"Will log the dev server config:\" } }\n    ]\n};\n```\n\n#### overrideJestConfig\n\nThe function `overrideJestConfig` let a plugin override the `Jest` config object **after** it's been customized by \n`craco`.\n\n*The function must return a valid config object, otherwise `craco` will throw an error.*\n\nThe function will be called with a single object argument having the following structure:\n\n```javascript\n{\n    jestConfig: \"The Jest config object already customized by craco\",\n    cracoConfig: \"The configuration object read from the craco.config.js file provided by the consumer\",\n    pluginOptions: \"The plugin options provided by the consumer\",\n    context: {\n        env: \"The current NODE_ENV (development, production, etc..)\",\n        paths: \"An object that contains all the paths used by CRA\",\n        resolve: \"Provided by CRA\",\n        rootDir: \"Provided by CRA\"\n    }\n}\n```\n\n##### Example\n\nPlugin:\n\n```javascript\n/* craco-plugin-log-jest-config.js */\n\nmodule.exports = {\n    overrideJestConfig: ({ jestConfig, cracoConfig, pluginOptions, context: { env, paths, resolve, rootDir } }) => {\n        if (pluginOptions.preText) {\n            console.log(pluginOptions.preText);\n        }\n\n        console.log(JSON.stringify(jestConfig, null, 4));\n\n        // Always return the config object.\n        return jestConfig;\n    }\n};\n```\n\nRegistration (in a `craco.config.js` file):\n\n```javascript\nconst logJestConfigPlugin = require(\"./craco-plugin-log-jest-config\");\n\nmodule.exports = {\n    ...\n    plugins: [\n        { plugin: logJestConfigPlugin, options: { preText: \"Will log the Jest config:\" } }\n    ]\n};\n```\n\n### Utility Functions\n\nA few utility functions are provided by CRACO to help you develop a plugin:\n - `getLoader`\n - `getLoaders`\n - `removeLoaders`\n - `addBeforeLoader`\n - `addBeforeLoaders`\n - `addAfterLoader`\n - `addAfterLoaders`\n - `getPlugin`\n - `removePlugins`\n - `addPlugins`\n - `throwUnexpectedConfigError`\n \n```javascript\nconst { getLoader, getLoaders, removeLoaders, loaderByName, getPlugin, removePlugins, addPlugins, pluginByName, throwUnexpectedConfigError } = require(\"@craco/craco\");\n```\n\n#### getLoader\n\nRetrieve the **first** loader that match the specified criteria from the webpack config.\n\nReturns:\n\n```javascript\n{\n    isFound: true | false,\n    match: {\n        loader,\n        parent,\n        index\n    }\n}\n```\n\nUsage:\n\n```javascript\nconst { getLoader, loaderByName } = require(\"@craco/craco\");\n\nconst { isFound, match } = getLoader(webpackConfig, loaderByName(\"eslint-loader\"));\n\nif (isFound) {\n    // do stuff...\n}\n```\n\n#### getLoaders\n\nRetrieve **all** the loaders that match the specified criteria from the webpack config.\n\nReturns:\n\n```javascript\n{\n    hasFoundAny: true | false,\n    matches: [\n        {\n            loader,\n            parent,\n            index\n        }\n    ]\n}\n```\n\nUsage:\n\n```javascript\nconst { getLoaders, loaderByName } = require(\"@craco/craco\");\n\nconst { hasFoundAny, matches } = getLoaders(webpackConfig, loaderByName(\"babel-loader\"));\n\nif (hasFoundAny) {\n    matches.forEach(x => {\n        // do stuff...\n    });\n}\n```\n\n#### removeLoaders\n\nRemove **all** the loaders that match the specified criteria from the webpack config.\n\nReturns:\n\n```javascript\n{\n    hasRemovedAny: true | false,\n    removedCount: int\n}\n```\n\nUsage:\n\n```javascript\nconst { removeLoaders, loaderByName } = require(\"@craco/craco\");\n\nremoveLoaders(webpackConfig, loaderByName(\"eslint-loader\"));\n```\n\n#### addBeforeLoader\n\nAdd a new *loader* **before** the loader that match specified criteria to the webpack config.\n\nReturns:\n\n```javascript\n{\n    isAdded: true | false\n}\n```\n\nUsage:\n\n```javascript\nconst { addBeforeLoader, loaderByName } = require(\"@craco/craco\");\n\nconst myNewWebpackLoader = {\n    loader: require.resolve(\"tslint-loader\")\n};\n\naddBeforeLoader(webpackConfig, loaderByName(\"eslint-loader\"), myNewWebpackLoader);\n```\n\n#### addBeforeLoaders\n\nAdd a new *loader* **before** all the loaders that match specified criteria to the webpack config.\n\nReturns:\n\n```javascript\n{\n    isAdded: true | false,\n    addedCount: int\n}\n```\n\nUsage:\n\n```javascript\nconst { addBeforeLoaders, loaderByName } = require(\"@craco/craco\");\n\nconst myNewWebpackLoader = {\n    loader: require.resolve(\"tslint-loader\")\n};\n\naddBeforeLoaders(webpackConfig, loaderByName(\"eslint-loader\"), myNewWebpackLoader);\n```\n\n#### addAfterLoader\n\nAdd a new *loader* **after** the loader that match specified criteria to the webpack config.\n\nReturns:\n\n```javascript\n{\n    isAdded: true | false\n}\n```\n\nUsage:\n\n```javascript\nconst { addAfterLoader, loaderByName } = require(\"@craco/craco\");\n\nconst myNewWebpackLoader = {\n    loader: require.resolve(\"tslint-loader\")\n};\n\naddAfterLoader(webpackConfig, loaderByName(\"eslint-loader\"), myNewWebpackLoader);\n```\n\n#### addAfterLoaders\n\nAdd a new *loader* **after** all the loaders that match specified criteria to the webpack config.\n\nReturns:\n\n```javascript\n{\n    isAdded: true | false,\n    addedCount: int\n}\n```\n\nUsage:\n\n```javascript\nconst { addAfterLoaders, loaderByName } = require(\"@craco/craco\");\n\nconst myNewWebpackLoader = {\n    loader: require.resolve(\"tslint-loader\")\n};\n\naddAfterLoaders(webpackConfig, loaderByName(\"eslint-loader\"), myNewWebpackLoader);\n```\n\n#### getPlugin\n\nRetrieve the **first** plugin that match the specified criteria from the webpack config.\n\nReturns:\n\n```javascript\n{\n    isFound: true | false,\n    match: {...} // the webpack plugin\n}\n```\n\nUsage:\n\n```javascript\nconst { getPlugin, pluginByName } = require(\"@craco/craco\");\n\nconst { isFound, match } = getPlugin(webpackConfig, pluginByName(\"ESLintWebpackPlugin\"));\n\nif (isFound) {\n    // do stuff...\n}\n```\n\n#### removePlugins\n\nRemove **all** the plugins that match the specified criteria from the webpack config.\n\nReturns:\n\n```javascript\n{\n    hasRemovedAny:: true | false,\n    removedCount:: int\n}\n```\n\nUsage:\n\n```javascript\nconst { removePlugins, pluginByName } = require(\"@craco/craco\");\n\nremovePlugins(webpackConfig, pluginByName(\"ESLintWebpackPlugin\"));\n```\n\n#### addPlugins\n\nAdd new *plugins* to the webpack config.\n\nUsage:\n\n```javascript\nconst { addPlugins } = require(\"@craco/craco\");\n\nconst myNewWebpackPlugin = require.resolve(\"ESLintWebpackPlugin\");\n\naddPlugins(webpackConfig, [myNewWebpackPlugin]);\naddPlugins(webpackConfig, [ [myNewWebpackPlugin, \"append\"] ]);\naddPlugins(webpackConfig, [ [myNewWebpackPlugin, \"prepend\"] ]);\n```\n\n\n#### throwUnexpectedConfigError\n\nThrow an error if the webpack configuration changes and does not match your expectations. (For example, `getLoader` \ncannot find a loader and `isFound` is `false`.) `create-react-app` might update the structure of their webpack config, \nso it is very important to show a helpful error message when something breaks.\n\nRaises an error and crashes Node.js:\n\n```bash\n$ yarn start\nyarn run v1.12.3\n$ craco start\n/path/to/your/app/craco.config.js:23\n            throw new Error(\n            ^\n\n    Error: Can't find eslint-loader in the webpack config!\n\n    This error probably occurred because you updated react-scripts or craco. Please try updating craco-less to the latest version:\n\n       $ yarn upgrade craco-less\n\n    Or:\n\n       $ npm update craco-less\n\n    If that doesn't work, craco-less needs to be fixed to support the latest version.\n    Please check to see if there's already an issue in the ndbroadbent/craco-less repo:\n\n       * https://github.com/ndbroadbent/craco-less/issues?q=is%3Aissue+webpack+eslint-loader\n\n    If not, please open an issue and we'll take a look. (Or you can send a PR!)\n\n    You might also want to look for related issues in the craco and create-react-app repos:\n\n       * https://github.com/sharegate/craco/issues?q=is%3Aissue+webpack+eslint-loader\n       * https://github.com/facebook/create-react-app/issues?q=is%3Aissue+webpack+eslint-loader\n\n    at throwUnexpectedConfigError (/path/to/your/app/craco.config.js:23:19)\n    ...\n```\n\nUsage:\n\n```javascript\nconst { getLoader, loaderByName, throwUnexpectedConfigError } = require(\"@craco/craco\");\n\n// Create a helper function if you need to call this multiple times\nconst throwError = (message, githubIssueQuery) =>\n    throwUnexpectedConfigError({\n        packageName: \"craco-less\",\n        githubRepo: \"ndbroadbent/craco-less\",\n        message,\n        githubIssueQuery,\n    });\n\nconst { isFound, match } = getLoader(webpackConfig, loaderByName(\"eslint-loader\"));\n\nif (!isFound) {\n    throwError(\"Can't find eslint-loader in the webpack config!\", \"webpack+eslint-loader\")\n}\n```\n\nOptions:\n\n```javascript\n{\n    message: \"An error message explaining what went wrong\",\n    packageName: \"NPM package name\",\n    githubRepo: \"GitHub repo where people can open an issue. Format: username/repo\",\n    githubIssueQuery: \"Search string to find related issues\"\n}\n```\n\n> Only `message` is required.\n\n## Backward Compatibility\n\nCRACO 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.\n\n| react-scripts Version |CRACO Version|\n| --------------------- | -----------:|\n| react-scripts < 4.0.0 |       5.8.0 |\n\n## Debugging\n\n### Verbose Logging\n\nTo activate **verbose** logging specify the CLI option `--verbose`\n\n```javascript\n/* package.json */\n\n{\n    \"scripts\": {\n        \"start\": \"craco start --verbose\"\n    }\n}\n```\n\n## License\n\nCopyright © 2020, Groupe Sharegate inc. This code is licensed under the Apache License, Version 2.0. You may obtain a \ncopy of this license at https://github.com/gsoft-inc/gsoft-license/blob/master/LICENSE.\n","readmeFilename":"README.md","_id":"@craco/craco@7.0.0-alpha.1","_nodeVersion":"16.5.0","_npmVersion":"lerna/3.16.4/node@v16.5.0+x64 (win32)","dist":{"integrity":"sha512-9umrN0vC19jf0bcIMGxSclBXgqGtDo5+eWrQaMPxMmaEVi/31DFslchmUNZefiaJ+ZF+lVWk87lsMaFgvs0wKg==","shasum":"3c578607132295d1ba160d26dfbad37f83a5642e","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-7.0.0-alpha.1.tgz","fileCount":41,"unpackedSize":112023,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiDqeKACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqIUw//TDv6WjXOzFTMOyzhiPkjQMB1EVXq3XG6g/uM4emi3Re/g0o3\r\nVXlvmByEQq2MwxiT/xTVSUtQfYLrXkGcP2q8Tn/sc/P0556GeMZ0Ozlbp/n/\r\nXpJYcDU7eGH/+OxHZABMLLqpzXL84CUDdFlhImXggFJucaeBrLwPyRHgFCLH\r\n5BHPlEi650s2X3+8coRc3z88v0BYyNv5uiVjBa29ASb2n0pBx8AgdL0a4jIO\r\nqszOZzzRAeoLZ7OVzYg3rqZG0Hjut3BnV9OtQ0zTkFDY1E8PJLT8KUg6rHno\r\niPcnWotOeRIKUMIawck3l9d57B4RrEjEaCeebCom7zlKnuXeo5Bf09SR8fl6\r\n5M2LqA73PQw+NXDl6Q3NYV/WFiotVMYoLhWlk3KjYLDc/ig+V1oofFP5+0+7\r\nyQp3brFDMFhqASw0ZciIYdT2G8P89UsERokZhNRg+oyuf0C9JdHR6lEAl9V7\r\n5mybChv0Hw5uXZhYqJEuf+BShFb4QICcolFwd5T3hrR1d6F8x3sVQebX2EuO\r\n+43wMInqmpRrjYFaZW1jsbw6kTbVKoO9BEICNTsuPC/9tV7dXhfrrm4nIU3s\r\niJzcgqDckmBZ83VH/nD19Z7EfE0RFUgRBaRkojfzcttLeJN1f4I3SC5Caoee\r\nM1t4lIzifVqpiAf3sW3O+WVWI+1E9ZTC3l0=\r\n=aA6L\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDba6OQOFV6kzUD60L6cXX6G1EfRePW36eZ948MAX45UAIhALKX3uYhfF7IqdC7KopzkPRVd7STi+v3wcoAO7UPgJ41"}]},"_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"directories":{},"maintainers":[{"name":"anonymous","email":"f.brobillard@gmail.com"},{"name":"anonymous","email":"pa.lafrance@gmail.com"},{"name":"anonymous","email":"yohan.belval@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_7.0.0-alpha.1_1645127562237_0.21558593549923555"},"_hasShrinkwrap":false},"7.0.0-7.0.0-alpha.2.0":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app.","version":"7.0.0-7.0.0-alpha.2.0","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/gsoft-inc/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/gsoft-inc/craco/issues"},"homepage":"https://github.com/gsoft-inc/craco","engines":{"node":">=6"},"bin":{"craco":"bin/craco.js"},"peerDependencies":{"react-scripts":"^5.0.0"},"devDependencies":{"react-scripts":"5.*"},"dependencies":{"cosmiconfig":"^7.0.1","cosmiconfig-typescript-loader":"^1.0.0","cross-spawn":"^7.0.0","lodash":"^4.17.15","semver":"^7.3.2","webpack-merge":"^4.2.2"},"gitHead":"99430f0b72473dfd93e50c4e42b475fb01abed0b","readme":"# CRACO [![Build Status](https://travis-ci.org/sharegate/craco.svg?branch=master)](https://travis-ci.org/sharegate/craco) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-green.svg)](https://github.com/sharegate/craco/pulls)\n\n**C**reate **R**eact **A**pp **C**onfiguration **O**verride is an easy and comprehensible configuration layer for create-react-app.\n\nGet 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.\n\nAll you have to do is create your app using [create-react-app](https://github.com/facebook/create-react-app/) and customize the configuration file.\n\n## Support\n\n- Create React App (CRA) 5.*\n- Yarn\n- Yarn Workspace\n- NPM\n- Lerna (with or without hoisting)\n- Custom `react-scripts` version\n\n## Documentation\n\n- [Installation](#installation) - How to install and setup CRACO.\n- [Configuration](#configuration) - How to customize your CRA installation with CRACO.\n  - [Configuration File](#configuration-file)\n  - [Configuration Helpers](#configuration-helpers)\n  - [Exporting your Configuration](#exporting-your-configuration)\n  - [Setting a Custom Location for the configuration file](#setting-a-custom-location-for-cracoconfigjs)\n- [CRA toolchain for Beginners](#cra-toolchain-for-beginners)\n  - [Notes on CRA Configurations and Problem Solving](#notes-on-cra-configurations-and-problem-solving)\n  - [Ejecting CRA to Learn](#ejecting-cra-to-learn)\n  - [Direct Versus Functional Config Definitions](#direct-object-literal-versus-functional-config-definitions)\n- [API](#api) - CRACO APIs for Jest and Webpack.\n  - [Jest API](#jest-api)\n  - [Webpack API](#webpack-api)\n- [Recipes](https://github.com/sharegate/craco/tree/master/recipes) – Short recipes for common use cases.\n- [Available Plugins](https://github.com/sharegate/craco#community-maintained-plugins) - Plugins maintained by the community.\n- [Develop a Plugin](#develop-a-plugin) - How to develop a plugin for CRACO.\n- [Backward Compatibility](#backward-compatibility)\n- [Debugging](#debugging)\n- [License](#license)\n\n## Preface\n\n### Acknowledgements\n\nWe 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.\n\nThe configuration style of this plugin has been greatly influenced by [Vue CLI](https://cli.vuejs.org/guide/).\n\n### Fair Warning\n\nBy 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.\n\n## Installation\n\nInstall the plugin from **npm**:\n\n```bash\n$ yarn add @craco/craco\n\n# OR\n\n$ npm install @craco/craco --save\n```\n\nCreate a `craco.config.js` file in the root directory and [configure CRACO](#configuration):\n\n```\nmy-app\n├── node_modules\n├── craco.config.js\n└── package.json\n```\n\nUpdate the existing calls to `react-scripts` in the `scripts` section of your `package.json` file to use the `craco` CLI:\n\n```diff\n/* package.json */\n\n\"scripts\": {\n-   \"start\": \"react-scripts start\",\n+   \"start\": \"craco start\",\n-   \"build\": \"react-scripts build\",\n+   \"build\": \"craco build\"\n-   \"test\": \"react-scripts test\",\n+   \"test\": \"craco test\"\n}\n```\n\nStart your app for development:\n\n```bash\n$ npm start\n```\n\nOr build your app:\n\n```bash\n$ npm run build\n```\n\n## Configuration\n\nCRACO 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. \n\nIf there are multiple configuration files in the same directory, CRACO will only use one. The priority order is:\n\n1. `package.json`\n1. `craco.config.ts`\n1. `craco.config.js`\n1. `.cracorc.ts`\n1. `.cracorc.js`\n1. `.cracorc`\n\n### Configuration File \n\nBelow 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).\n\nSome sections have a `mode` property. When this is available there are 2 possible values:\n\n- `extends`: the provided configuration will extends the CRA settings (**default mode**)\n- `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.\n\n```javascript\nconst { when, whenDev, whenProd, whenTest, ESLINT_MODES, POSTCSS_MODES } = require(\"@craco/craco\");\n\nmodule.exports = {\n    reactScriptsVersion: \"react-scripts\" /* (default value) */,\n    style: {\n        modules: {\n            localIdentName: \"\"\n        },\n        css: {\n            loaderOptions: { /* Any css-loader configuration options: https://github.com/webpack-contrib/css-loader. */ },\n            loaderOptions: (cssLoaderOptions, { env, paths }) => { return cssLoaderOptions; }\n        },\n        sass: {\n            loaderOptions: { /* Any sass-loader configuration options: https://github.com/webpack-contrib/sass-loader. */ },\n            loaderOptions: (sassLoaderOptions, { env, paths }) => { return sassLoaderOptions; }\n        },\n        postcss: {\n            mode: \"extends\" /* (default value) */ || \"file\",\n            plugins: [require('plugin-to-append')], // Additional plugins given in an array are appended to existing config.\n            plugins: (plugins) => [require('plugin-to-prepend')].concat(plugins), // Or you may use the function variant.\n            env: {\n                autoprefixer: { /* Any autoprefixer options: https://github.com/postcss/autoprefixer#options */ },\n                stage: 3, /* Any valid stages: https://cssdb.org/#staging-process. */\n                features: { /* Any CSS features: https://preset-env.cssdb.org/features. */ }\n            },\n            loaderOptions: { /* Any postcss-loader configuration options: https://github.com/postcss/postcss-loader. */ },\n            loaderOptions: (postcssLoaderOptions, { env, paths }) => { return postcssLoaderOptions; }\n        }\n    },\n    eslint: {\n        enable: true /* (default value) */,\n        mode: \"extends\" /* (default value) */ || \"file\",\n        configure: { /* Any eslint configuration options: https://eslint.org/docs/user-guide/configuring */ },\n        configure: (eslintConfig, { env, paths }) => { return eslintConfig; },\n        pluginOptions: { /* Any eslint plugin configuration options: https://github.com/webpack-contrib/eslint-webpack-plugin#options. */ },\n        pluginOptions: (eslintOptions, { env, paths }) => { return eslintOptions; }\n    },\n    babel: {\n        presets: [],\n        plugins: [],\n        loaderOptions: { /* Any babel-loader configuration options: https://github.com/babel/babel-loader. */ },\n        loaderOptions: (babelLoaderOptions, { env, paths }) => { return babelLoaderOptions; }\n    },\n    typescript: {\n        enableTypeChecking: true /* (default value)  */\n    },\n    webpack: {\n        alias: {},\n        plugins: {\n            add: [], /* An array of plugins */\n            add: [\n                plugin1,\n                [plugin2, \"append\"],\n                [plugin3, \"prepend\"], /* Specify if plugin should be appended or prepended */\n            ], /* An array of plugins */\n            remove: [],  /* An array of plugin constructor's names (i.e. \"StyleLintPlugin\", \"ESLintWebpackPlugin\" ) */\n        },\n        configure: { /* Any webpack configuration options: https://webpack.js.org/configuration */ },\n        configure: (webpackConfig, { env, paths }) => { return webpackConfig; }\n    },\n    jest: {\n        babel: {\n            addPresets: true, /* (default value) */\n            addPlugins: true  /* (default value) */\n        },\n        configure: { /* Any Jest configuration options: https://jestjs.io/docs/en/configuration */ },\n        configure: (jestConfig, { env, paths, resolve, rootDir }) => { return jestConfig; }\n    },\n    devServer: { /* Any devServer configuration options: https://webpack.js.org/configuration/dev-server/#devserver */ },\n    devServer: (devServerConfig, { env, paths, proxy, allowedHost }) => { return devServerConfig; },\n    plugins: [\n        {\n            plugin: {\n                overrideCracoConfig: ({ cracoConfig, pluginOptions, context: { env, paths } }) => { return cracoConfig; },\n                overrideWebpackConfig: ({ webpackConfig, cracoConfig, pluginOptions, context: { env, paths } }) => { return webpackConfig; },\n                overrideDevServerConfig: ({ devServerConfig, cracoConfig, pluginOptions, context: { env, paths, proxy, allowedHost } }) => { return devServerConfig; },\n                overrideJestConfig: ({ jestConfig, cracoConfig, pluginOptions, context: { env, paths, resolve, rootDir } }) => { return jestConfig },\n            },\n            options: {}\n        }\n    ]\n};\n```\n\n### Configuration Helpers\n\nUsage for all \"when\" functions is the same, `whenDev, whenProd, whenTest` are shortcuts for `when`.\n\n`when(condition, fct, [unmetValue])`\n\nUsage:\n\n```javascript\nconst { when, whenDev } = require(\"@craco/craco\");\n\nmodule.exports = {\n    eslint: {\n        mode: ESLINT_MODES.file,\n        configure: {\n            formatter: when(process.env.NODE_ENV === \"CI\", require(\"eslint-formatter-vso\"))\n        }\n    },\n    webpack: {\n        plugins: [\n            new ConfigWebpackPlugin(),\n            ...whenDev(() => [new CircularDependencyPlugin()], [])\n        ]\n    }\n};\n```\n\n### Exporting your Configuration\n\nYou can export your configuration as an **object literal**:\n\n```javascript\n/* craco.config.js */\n\nmodule.exports = {\n    ...\n}\n```\n\na **function**:\n\n```javascript\n/* craco.config.js */\n\nmodule.exports = function({ env }) {\n    return {\n        ...\n    };\n}\n```\n\na **promise** or an **async function**:\n\n```javascript\n/* craco.config.js */\n\nmodule.exports = async function({ env }) {\n    await ...\n\n    return {\n        ...\n    };\n}\n```\n\n### Setting a Custom Location for craco.config.js\n\nBoth options support a **relative** or an **absolute** path.\n\n**1- package.json** _(Recommended)_\n\nYou can change the location of the `craco.config.js` file by specifying a value for `cracoConfig` in your `package.json` \nfile.\n\n```javascript\n/* package.json */\n\n{\n    \"cracoConfig\": \"config/craco-config-with-custom-name.js\"\n}\n```\n\n**2- CLI** _(For backward compatibility)_\n\nYou can also change the location of the `craco.config.js` file by specifying the `--config` CLI option. _This option \ndoesn't support Babel with Jest_\n\n```javascript\n/* package.json */\n\n{\n    \"scripts\": {\n        \"start\": \"craco start --config config/craco-config-with-custom-name.js\"\n    }\n}\n```\n\n## CRA Toolchain for Beginners\n\n### Introduction to CRACO\n\nCreate React App ([CRA](https://github.com/facebook/create-react-app)) is intended to allow people to get started with \nwriting React apps quickly. It does this by packaging several key components with a solid default configuration. \n\nAfter 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. \n\nCRACO allows you to enjoy the recognizable project structure of CRA while changing detailed configuration settings of \neach component. \n\n### Notes on CRA Configurations and Problem Solving  \n\nKeep in mind that there are _some_ configuration settings available to CRA without CRACO. \n\nGetting exactly what you want may involve a combination of making changes your CRACO configuration file and by using \nsome of the more limited _but still important_ settings available in Create React App. \n\nBefore jumping into customizing your _CRACO_ configuration, step back and think about each part of the problem you're \ntrying to solve. Be sure to review these resources on the CRA configuration, as it may save you time:\n\n - [Important Environment Variables that Configure CRA](https://create-react-app.dev/docs/advanced-configuration)\n - [Learn about using `postbuild` commands in `package.json`](https://stackoverflow.com/a/51818028/4028977)\n - [Proxying API or other Requests](https://create-react-app.dev/docs/proxying-api-requests-in-development/), or \"how \n to integrate CRA's dev server with a second backend\": \n [problem statement](https://github.com/facebook/create-react-app/issues/147)\n - [Search CRACO issues, for gotchas, hints and examples](https://github.com/gsoft-inc/craco/issues?q=is%3Aissue+sort%3Aupdated-desc)\n\n### Ejecting CRA to Learn\n\nAvoiding ejecting is a major goal for many CRACO users. However, if you're still learning toolchains and modern \nfrontend workflows, it may be helpful to create a sample ejected CRA project to see how the default CRA app configures \neach of the components. \n\nWhile CRACO's sample configuration file inherits directly from CRA's default settings, seeing the default CRA config in\nthe ejected CRA file structure may give you useful perspective. \n\nYou may even want to try testing a change in the ejected app to better understand how it would be done with your CRACO \nconfig-based project. \n\n### Direct (object literal) Versus Functional Config Definitions\n\nThe [sample CRACO config file]((#sample-craco-configuration-file)) is meant to show possibilities for configuring your CRA-based project. Each section \ncontains a primary configuration area, `loaderOptions` or `configure`. These config areas are where you will make most \nof your detailed changes.\n\nYou, (or perhaps your IDE) may have noticed that the sections have duplicate keys, i.e. loaderOptions is listed twice\nin the sample config file.\n\nThe reason for this is to allow you to choose between object literal or functionally defined configuration choices. \nThere are a few reasons for this:\n\n1. Sometimes it may be faster to test a minor change using keys. \n1. Other times a functional definition is necessary to get the right configuration.\n1. While not common, a setting may **only** work if you use one or the other! See, \n[devServer port example](https://github.com/gsoft-inc/craco/issues/172#issuecomment-651505730)\n\n#### A simple example of equivalent direct and functionally defined configuration settings:\n\n##### Direct configuration (object literal)\n\n```javascript\ndevServer: {\n    writeToDisk: true\n}\n```\n\n##### Functionally defined configuration\n\n```javascript\ndevServer: (devServerConfig, { env, paths, proxy, allowedHost }) => {\n    devServerConfig.writeToDisk = true; \n    return devServerConfig;\n}\n```\n\n## API\n\nTo integrate with other tools, it's usefull to have access to the configuration generated by CRACO.\n\nThat's what CRACO APIs are for. The current API support Jest and Webpack.\n\n### Jest API\n\nAccept a `cracoConfig`, a `context` object and `options`. The generated Jest config object is returned.\n\n> **Warning:** `createJestConfig` does NOT accept `cracoConfig` as a function. If your `craco.config.js` exposes a config \nfunction, you have to call it yourself before passing it to `createJestConfig`.\n\n`createJestConfig(cracoConfig, context = {}, options = { verbose: false, config: null })`\n\nUsage:\n\n```javascript\n/* jest.config.js */\n\nconst { createJestConfig } = require(\"@craco/craco\");\n\nconst cracoConfig = require(\"./craco.config.js\");\nconst jestConfig = createJestConfig(cracoConfig);\n\nmodule.exports = jestConfig;\n```\n\n#### Examples\n\n- [vscode-jest](https://github.com/sharegate/craco/tree/master/recipes/use-a-jest-config-file)\n\n### Webpack API\n\nYou can create Webpack DevServer and Production configurations using `createWebpackDevConfig` and `createWebpackProdConfig`. \n\nAccept a `cracoConfig`, a `context` object and `options`. The generated Webpack config object is returned.\n\n> **Warning:** Similar to `createJestConfig`, these functions do NOT accept `cracoConfig` as a function. If your \n`craco.config.js` exposes a config function, you have to call it yourself before passing it further.\n\n`createWebpackDevConfig(cracoConfig, context = {}, options = { verbose: false, config: null })`\n\n`createWebpackProdConfig(cracoConfig, context = {}, options = { verbose: false, config: null })`\n\nUsage:\n\n```javascript\n/* webpack.config.js */\n\nconst { createWebpackDevConfig } = require(\"@craco/craco\");\n\nconst cracoConfig = require(\"./craco.config.js\");\nconst webpackConfig = createWebpackDevConfig(cracoConfig);\n\nmodule.exports = webpackConfig;\n```\n\n## Develop a Plugin\n\n### Hooks\n\nThere are four hooks available to a plugin:\n\n- `overrideCracoConfig`: Let a plugin customize the config object before it's process by `craco`.\n- `overrideWebpackConfig`: Let a plugin customize the `webpack` config that will be used by CRA.\n- `overrideDevServerConfig`: Let a plugin customize the dev server config that will be used by CRA.\n- `overrideJestConfig`: Let a plugin customize the `Jest` config that will be used by CRA.\n\n**Important:**\n\nEvery function must return the updated config object.\n\n#### overrideCracoConfig\n\nThe function `overrideCracoConfig` let a plugin override the config object **before** it's process by `craco`.\n\nIf a plugin define the function, it will be called with the config object read from the `craco.config.js` file provided \nby the consumer.\n\n*The function must return a valid config object, otherwise `craco` will throw an error.*\n\nThe function will be called with a single object argument having the following structure:\n\n```javascript\n{\n    cracoConfig: \"The config object read from the craco.config.js file provided by the consumer\",\n    pluginOptions: \"The plugin options provided by the consumer\",\n    context: {\n        env: \"The current NODE_ENV (development, production, etc..)\",\n        paths: \"An object that contains all the paths used by CRA\"\n    }\n}\n```\n\n##### Example\n\nPlugin:\n\n```javascript\n/* craco-plugin-log-craco-config.js */\n\nmodule.exports = {\n    overrideCracoConfig: ({ cracoConfig, pluginOptions, context: { env, paths } }) => {\n        if (pluginOptions.preText) {\n            console.log(pluginOptions.preText);\n        }\n\n        console.log(JSON.stringify(cracoConfig, null, 4));\n\n        // Always return the config object.\n        return cracoConfig;\n    }\n};\n```\n\nRegistration (in a `craco.config.js` file):\n\n```javascript\nconst logCracoConfigPlugin = require(\"./craco-plugin-log-craco-config\");\n\nmodule.exports = {\n    ...\n    plugins: [\n        { plugin: logCracoConfigPlugin, options: { preText: \"Will log the craco config:\" } }\n    ]\n};\n```\n\n#### overrideWebpackConfig\n\nThe function `overrideWebpackConfig` let a plugin override the `webpack` config object **after** it's been customized \nby `craco`.\n\n*The function must return a valid config object, otherwise `craco` will throw an error.*\n\nThe function will be called with a single object argument having the following structure:\n\n```javascript\n{\n    webpackConfig: \"The webpack config object already customized by craco\",\n    cracoConfig: \"The configuration object read from the craco.config.js file provided by the consumer\",\n    pluginOptions: \"The plugin options provided by the consumer\",\n    context: {\n        env: \"The current NODE_ENV (development, production, etc..)\",\n        paths: \"An object that contains all the paths used by CRA\"\n    }\n}\n```\n\n##### Example\n\nPlugin:\n\n```javascript\n/* craco-plugin-log-webpack-config.js */\n\nmodule.exports = {\n    overrideWebpackConfig: ({ webpackConfig, cracoConfig, pluginOptions, context: { env, paths } }) => {\n        if (pluginOptions.preText) {\n            console.log(pluginOptions.preText);\n        }\n\n        console.log(JSON.stringify(webpackConfig, null, 4));\n\n        // Always return the config object.\n        return webpackConfig;\n    }\n};\n```\n\nRegistration (in a `craco.config.js` file):\n\n```javascript\nconst logWebpackConfigPlugin = require(\"./craco-plugin-log-webpack-config\");\n\nmodule.exports = {\n    ...\n    plugins: [\n        { plugin: logWebpackConfigPlugin, options: { preText: \"Will log the webpack config:\" } }\n    ]\n};\n```\n\n#### overrideDevServerConfig\n\nThe function `overrideDevServerConfig` let a plugin override the dev server config object **after** it's been customized\nby `craco`.\n\n*The function must return a valid config object, otherwise `craco` will throw an error.*\n\nThe function will be called with a single object argument having the following structure:\n\n```javascript\n{\n    devServerConfig: \"The dev server config object already customized by craco\",\n    cracoConfig: \"The configuration object read from the craco.config.js file provided by the consumer\",\n    pluginOptions: \"The plugin options provided by the consumer\",\n    context: {\n        env: \"The current NODE_ENV (development, production, etc..)\",\n        paths: \"An object that contains all the paths used by CRA\",\n        allowedHost: \"Provided by CRA\"\n    }\n}\n```\n\n##### Example\n\nPlugin:\n\n```javascript\n/* craco-plugin-log-dev-server-config.js */\n\nmodule.exports = {\n    overrideDevServerConfig: ({ devServerConfig, cracoConfig, pluginOptions, context: { env, paths, allowedHost } }) => {\n        if (pluginOptions.preText) {\n            console.log(pluginOptions.preText);\n        }\n\n        console.log(JSON.stringify(devServerConfig, null, 4));\n\n        // Always return the config object.\n        return devServerConfig;\n    }\n};\n```\n\nRegistration (in a `craco.config.js` file):\n\n```javascript\nconst logDevServerConfigPlugin = require(\"./craco-plugin-log-dev-server-config\");\n\nmodule.exports = {\n    ...\n    plugins: [\n        { plugin: logDevServerConfigPlugin, options: { preText: \"Will log the dev server config:\" } }\n    ]\n};\n```\n\n#### overrideJestConfig\n\nThe function `overrideJestConfig` let a plugin override the `Jest` config object **after** it's been customized by \n`craco`.\n\n*The function must return a valid config object, otherwise `craco` will throw an error.*\n\nThe function will be called with a single object argument having the following structure:\n\n```javascript\n{\n    jestConfig: \"The Jest config object already customized by craco\",\n    cracoConfig: \"The configuration object read from the craco.config.js file provided by the consumer\",\n    pluginOptions: \"The plugin options provided by the consumer\",\n    context: {\n        env: \"The current NODE_ENV (development, production, etc..)\",\n        paths: \"An object that contains all the paths used by CRA\",\n        resolve: \"Provided by CRA\",\n        rootDir: \"Provided by CRA\"\n    }\n}\n```\n\n##### Example\n\nPlugin:\n\n```javascript\n/* craco-plugin-log-jest-config.js */\n\nmodule.exports = {\n    overrideJestConfig: ({ jestConfig, cracoConfig, pluginOptions, context: { env, paths, resolve, rootDir } }) => {\n        if (pluginOptions.preText) {\n            console.log(pluginOptions.preText);\n        }\n\n        console.log(JSON.stringify(jestConfig, null, 4));\n\n        // Always return the config object.\n        return jestConfig;\n    }\n};\n```\n\nRegistration (in a `craco.config.js` file):\n\n```javascript\nconst logJestConfigPlugin = require(\"./craco-plugin-log-jest-config\");\n\nmodule.exports = {\n    ...\n    plugins: [\n        { plugin: logJestConfigPlugin, options: { preText: \"Will log the Jest config:\" } }\n    ]\n};\n```\n\n### Utility Functions\n\nA few utility functions are provided by CRACO to help you develop a plugin:\n - `getLoader`\n - `getLoaders`\n - `removeLoaders`\n - `addBeforeLoader`\n - `addBeforeLoaders`\n - `addAfterLoader`\n - `addAfterLoaders`\n - `getPlugin`\n - `removePlugins`\n - `addPlugins`\n - `throwUnexpectedConfigError`\n \n```javascript\nconst { getLoader, getLoaders, removeLoaders, loaderByName, getPlugin, removePlugins, addPlugins, pluginByName, throwUnexpectedConfigError } = require(\"@craco/craco\");\n```\n\n#### getLoader\n\nRetrieve the **first** loader that match the specified criteria from the webpack config.\n\nReturns:\n\n```javascript\n{\n    isFound: true | false,\n    match: {\n        loader,\n        parent,\n        index\n    }\n}\n```\n\nUsage:\n\n```javascript\nconst { getLoader, loaderByName } = require(\"@craco/craco\");\n\nconst { isFound, match } = getLoader(webpackConfig, loaderByName(\"eslint-loader\"));\n\nif (isFound) {\n    // do stuff...\n}\n```\n\n#### getLoaders\n\nRetrieve **all** the loaders that match the specified criteria from the webpack config.\n\nReturns:\n\n```javascript\n{\n    hasFoundAny: true | false,\n    matches: [\n        {\n            loader,\n            parent,\n            index\n        }\n    ]\n}\n```\n\nUsage:\n\n```javascript\nconst { getLoaders, loaderByName } = require(\"@craco/craco\");\n\nconst { hasFoundAny, matches } = getLoaders(webpackConfig, loaderByName(\"babel-loader\"));\n\nif (hasFoundAny) {\n    matches.forEach(x => {\n        // do stuff...\n    });\n}\n```\n\n#### removeLoaders\n\nRemove **all** the loaders that match the specified criteria from the webpack config.\n\nReturns:\n\n```javascript\n{\n    hasRemovedAny: true | false,\n    removedCount: int\n}\n```\n\nUsage:\n\n```javascript\nconst { removeLoaders, loaderByName } = require(\"@craco/craco\");\n\nremoveLoaders(webpackConfig, loaderByName(\"eslint-loader\"));\n```\n\n#### addBeforeLoader\n\nAdd a new *loader* **before** the loader that match specified criteria to the webpack config.\n\nReturns:\n\n```javascript\n{\n    isAdded: true | false\n}\n```\n\nUsage:\n\n```javascript\nconst { addBeforeLoader, loaderByName } = require(\"@craco/craco\");\n\nconst myNewWebpackLoader = {\n    loader: require.resolve(\"tslint-loader\")\n};\n\naddBeforeLoader(webpackConfig, loaderByName(\"eslint-loader\"), myNewWebpackLoader);\n```\n\n#### addBeforeLoaders\n\nAdd a new *loader* **before** all the loaders that match specified criteria to the webpack config.\n\nReturns:\n\n```javascript\n{\n    isAdded: true | false,\n    addedCount: int\n}\n```\n\nUsage:\n\n```javascript\nconst { addBeforeLoaders, loaderByName } = require(\"@craco/craco\");\n\nconst myNewWebpackLoader = {\n    loader: require.resolve(\"tslint-loader\")\n};\n\naddBeforeLoaders(webpackConfig, loaderByName(\"eslint-loader\"), myNewWebpackLoader);\n```\n\n#### addAfterLoader\n\nAdd a new *loader* **after** the loader that match specified criteria to the webpack config.\n\nReturns:\n\n```javascript\n{\n    isAdded: true | false\n}\n```\n\nUsage:\n\n```javascript\nconst { addAfterLoader, loaderByName } = require(\"@craco/craco\");\n\nconst myNewWebpackLoader = {\n    loader: require.resolve(\"tslint-loader\")\n};\n\naddAfterLoader(webpackConfig, loaderByName(\"eslint-loader\"), myNewWebpackLoader);\n```\n\n#### addAfterLoaders\n\nAdd a new *loader* **after** all the loaders that match specified criteria to the webpack config.\n\nReturns:\n\n```javascript\n{\n    isAdded: true | false,\n    addedCount: int\n}\n```\n\nUsage:\n\n```javascript\nconst { addAfterLoaders, loaderByName } = require(\"@craco/craco\");\n\nconst myNewWebpackLoader = {\n    loader: require.resolve(\"tslint-loader\")\n};\n\naddAfterLoaders(webpackConfig, loaderByName(\"eslint-loader\"), myNewWebpackLoader);\n```\n\n#### getPlugin\n\nRetrieve the **first** plugin that match the specified criteria from the webpack config.\n\nReturns:\n\n```javascript\n{\n    isFound: true | false,\n    match: {...} // the webpack plugin\n}\n```\n\nUsage:\n\n```javascript\nconst { getPlugin, pluginByName } = require(\"@craco/craco\");\n\nconst { isFound, match } = getPlugin(webpackConfig, pluginByName(\"ESLintWebpackPlugin\"));\n\nif (isFound) {\n    // do stuff...\n}\n```\n\n#### removePlugins\n\nRemove **all** the plugins that match the specified criteria from the webpack config.\n\nReturns:\n\n```javascript\n{\n    hasRemovedAny:: true | false,\n    removedCount:: int\n}\n```\n\nUsage:\n\n```javascript\nconst { removePlugins, pluginByName } = require(\"@craco/craco\");\n\nremovePlugins(webpackConfig, pluginByName(\"ESLintWebpackPlugin\"));\n```\n\n#### addPlugins\n\nAdd new *plugins* to the webpack config.\n\nUsage:\n\n```javascript\nconst { addPlugins } = require(\"@craco/craco\");\n\nconst myNewWebpackPlugin = require.resolve(\"ESLintWebpackPlugin\");\n\naddPlugins(webpackConfig, [myNewWebpackPlugin]);\naddPlugins(webpackConfig, [ [myNewWebpackPlugin, \"append\"] ]);\naddPlugins(webpackConfig, [ [myNewWebpackPlugin, \"prepend\"] ]);\n```\n\n\n#### throwUnexpectedConfigError\n\nThrow an error if the webpack configuration changes and does not match your expectations. (For example, `getLoader` \ncannot find a loader and `isFound` is `false`.) `create-react-app` might update the structure of their webpack config, \nso it is very important to show a helpful error message when something breaks.\n\nRaises an error and crashes Node.js:\n\n```bash\n$ yarn start\nyarn run v1.12.3\n$ craco start\n/path/to/your/app/craco.config.js:23\n            throw new Error(\n            ^\n\n    Error: Can't find eslint-loader in the webpack config!\n\n    This error probably occurred because you updated react-scripts or craco. Please try updating craco-less to the latest version:\n\n       $ yarn upgrade craco-less\n\n    Or:\n\n       $ npm update craco-less\n\n    If that doesn't work, craco-less needs to be fixed to support the latest version.\n    Please check to see if there's already an issue in the ndbroadbent/craco-less repo:\n\n       * https://github.com/ndbroadbent/craco-less/issues?q=is%3Aissue+webpack+eslint-loader\n\n    If not, please open an issue and we'll take a look. (Or you can send a PR!)\n\n    You might also want to look for related issues in the craco and create-react-app repos:\n\n       * https://github.com/sharegate/craco/issues?q=is%3Aissue+webpack+eslint-loader\n       * https://github.com/facebook/create-react-app/issues?q=is%3Aissue+webpack+eslint-loader\n\n    at throwUnexpectedConfigError (/path/to/your/app/craco.config.js:23:19)\n    ...\n```\n\nUsage:\n\n```javascript\nconst { getLoader, loaderByName, throwUnexpectedConfigError } = require(\"@craco/craco\");\n\n// Create a helper function if you need to call this multiple times\nconst throwError = (message, githubIssueQuery) =>\n    throwUnexpectedConfigError({\n        packageName: \"craco-less\",\n        githubRepo: \"ndbroadbent/craco-less\",\n        message,\n        githubIssueQuery,\n    });\n\nconst { isFound, match } = getLoader(webpackConfig, loaderByName(\"eslint-loader\"));\n\nif (!isFound) {\n    throwError(\"Can't find eslint-loader in the webpack config!\", \"webpack+eslint-loader\")\n}\n```\n\nOptions:\n\n```javascript\n{\n    message: \"An error message explaining what went wrong\",\n    packageName: \"NPM package name\",\n    githubRepo: \"GitHub repo where people can open an issue. Format: username/repo\",\n    githubIssueQuery: \"Search string to find related issues\"\n}\n```\n\n> Only `message` is required.\n\n## Backward Compatibility\n\nCRACO 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.\n\n| react-scripts Version |CRACO Version|\n| --------------------- | -----------:|\n| react-scripts < 4.0.0 |       5.8.0 |\n\n## Debugging\n\n### Verbose Logging\n\nTo activate **verbose** logging specify the CLI option `--verbose`\n\n```javascript\n/* package.json */\n\n{\n    \"scripts\": {\n        \"start\": \"craco start --verbose\"\n    }\n}\n```\n\n## License\n\nCopyright © 2020, Groupe Sharegate inc. This code is licensed under the Apache License, Version 2.0. You may obtain a \ncopy of this license at https://github.com/gsoft-inc/gsoft-license/blob/master/LICENSE.\n","readmeFilename":"README.md","_id":"@craco/craco@7.0.0-7.0.0-alpha.2.0","_nodeVersion":"16.5.0","_npmVersion":"lerna/3.16.4/node@v16.5.0+x64 (win32)","dist":{"integrity":"sha512-sDmImryIacdlpOLzZovR/7DDhAhzanRalSYRE7OWwDtHoqRsNRcU8/PXWz0NLyMJ1+KaD/aDg65eYzLIwlSahg==","shasum":"626f45b6c8efc3dddf27c69dab5fe1e2687597d8","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-7.0.0-7.0.0-alpha.2.0.tgz","fileCount":41,"unpackedSize":112031,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiDqnWACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpevA/+OhdcSj4cibwn2cU6EcefeWJvvELlm9qxSOuaWjZOsX8j4aE3\r\nIL9B5MzdQVVSaaEan/HyXSqoHA1d02BkB5ONijqjIOg5y8M1ukc/+iW5DQ4/\r\nnUMMHsGbIR0ijouypYKuxb5LI9C5yU/dkJeZRLOeIOZ/bCb+XcDTtWF5VAaK\r\nIl9bHpeG9SqcEAVpDEGf7r6vYdjZkMb98WMPvnImZ2t5W1kLeOiT0brcZWax\r\nk6exe5wa9eLtzkrBhm5CYMFTT7fWJqdCbbJgjwOrqzQGNXHzsWwXKLnl/B4S\r\n1lOfuNxcOTasrw1UC/SKlN45ebTZhzQRtk//t/bX7bdThN2jWQr4X6Vmvzf8\r\n8OeVA+xUpGiwjoqF00e1bGWtvdjxv2fSVb6wuNpQ1/jIQi/BecxTZSPmTBFV\r\nNZtnZonM2h8xrwpNkdvUV3E1noEZokZMakGPJlszYGNAWVeaaIey9Nvo9i2R\r\ndPnSRb3YJcCnl+DrddW9qHOZXP2oeTEjUZCkLryJLt07OkB7llUgtWftAsZl\r\nU3nGzZmhblb8/KCb+iip2OtPR7h7SehocWUGNj6XmhKCjTLIDKWFJylXnCzx\r\nMx3l0xvccdrKc7CU0ZJmwkPmnCgZwlWU6vBZTS8XGBXqMXtCCTeAFTQt1GEt\r\nznRdZmt5QH2/HTqI++VM/5wIOmE0OsyuuaE=\r\n=ZYPN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDvYiKQLKkYEAWXaRSPaoLx17iePuEkVw2hzL1vfl4fbAIgYACcs8uiMbUZdlM0MaWpeDGRB2HpbWoqT0YFrGdYAww="}]},"_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"directories":{},"maintainers":[{"name":"anonymous","email":"f.brobillard@gmail.com"},{"name":"anonymous","email":"pa.lafrance@gmail.com"},{"name":"anonymous","email":"yohan.belval@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_7.0.0-7.0.0-alpha.2.0_1645128150031_0.36211823680271626"},"_hasShrinkwrap":false},"7.0.0-alpha.3":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app.","version":"7.0.0-alpha.3","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/gsoft-inc/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/gsoft-inc/craco/issues"},"homepage":"https://github.com/gsoft-inc/craco","engines":{"node":">=6"},"bin":{"craco":"bin/craco.js"},"peerDependencies":{"react-scripts":"^5.0.0"},"devDependencies":{"react-scripts":"5.*"},"dependencies":{"cosmiconfig":"^7.0.1","cosmiconfig-typescript-loader":"^1.0.0","cross-spawn":"^7.0.0","lodash":"^4.17.15","semver":"^7.3.2","webpack-merge":"^4.2.2"},"gitHead":"649e82e1e3809528db53d2462833aba73879094d","readme":"# CRACO [![Build Status](https://travis-ci.org/sharegate/craco.svg?branch=master)](https://travis-ci.org/sharegate/craco) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-green.svg)](https://github.com/sharegate/craco/pulls)\n\n**C**reate **R**eact **A**pp **C**onfiguration **O**verride is an easy and comprehensible configuration layer for create-react-app.\n\nGet 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.\n\nAll you have to do is create your app using [create-react-app](https://github.com/facebook/create-react-app/) and customize the configuration file.\n\n## Support\n\n- Create React App (CRA) 5.*\n- Yarn\n- Yarn Workspace\n- NPM\n- Lerna (with or without hoisting)\n- Custom `react-scripts` version\n\n## Documentation\n\n- [Installation](#installation) - How to install and setup CRACO.\n- [Configuration](#configuration) - How to customize your CRA installation with CRACO.\n  - [Configuration File](#configuration-file)\n  - [Configuration Helpers](#configuration-helpers)\n  - [Exporting your Configuration](#exporting-your-configuration)\n  - [Setting a Custom Location for the configuration file](#setting-a-custom-location-for-cracoconfigjs)\n- [CRA toolchain for Beginners](#cra-toolchain-for-beginners)\n  - [Notes on CRA Configurations and Problem Solving](#notes-on-cra-configurations-and-problem-solving)\n  - [Ejecting CRA to Learn](#ejecting-cra-to-learn)\n  - [Direct Versus Functional Config Definitions](#direct-object-literal-versus-functional-config-definitions)\n- [API](#api) - CRACO APIs for Jest and Webpack.\n  - [Jest API](#jest-api)\n  - [Webpack API](#webpack-api)\n- [Recipes](https://github.com/sharegate/craco/tree/master/recipes) – Short recipes for common use cases.\n- [Available Plugins](https://github.com/sharegate/craco#community-maintained-plugins) - Plugins maintained by the community.\n- [Develop a Plugin](#develop-a-plugin) - How to develop a plugin for CRACO.\n- [Backward Compatibility](#backward-compatibility)\n- [Debugging](#debugging)\n- [License](#license)\n\n## Preface\n\n### Acknowledgements\n\nWe 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.\n\nThe configuration style of this plugin has been greatly influenced by [Vue CLI](https://cli.vuejs.org/guide/).\n\n### Fair Warning\n\nBy 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.\n\n## Installation\n\nInstall the plugin from **npm**:\n\n```bash\n$ yarn add @craco/craco\n\n# OR\n\n$ npm install @craco/craco --save\n```\n\nCreate a `craco.config.js` file in the root directory and [configure CRACO](#configuration):\n\n```\nmy-app\n├── node_modules\n├── craco.config.js\n└── package.json\n```\n\nUpdate the existing calls to `react-scripts` in the `scripts` section of your `package.json` file to use the `craco` CLI:\n\n```diff\n/* package.json */\n\n\"scripts\": {\n-   \"start\": \"react-scripts start\",\n+   \"start\": \"craco start\",\n-   \"build\": \"react-scripts build\",\n+   \"build\": \"craco build\"\n-   \"test\": \"react-scripts test\",\n+   \"test\": \"craco test\"\n}\n```\n\nStart your app for development:\n\n```bash\n$ npm start\n```\n\nOr build your app:\n\n```bash\n$ npm run build\n```\n\n## Configuration\n\nCRACO 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. \n\nIf there are multiple configuration files in the same directory, CRACO will only use one. The priority order is:\n\n1. `package.json`\n1. `craco.config.ts`\n1. `craco.config.js`\n1. `.cracorc.ts`\n1. `.cracorc.js`\n1. `.cracorc`\n\n### Configuration File \n\nBelow 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).\n\nSome sections have a `mode` property. When this is available there are 2 possible values:\n\n- `extends`: the provided configuration will extends the CRA settings (**default mode**)\n- `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.\n\n```javascript\nconst { when, whenDev, whenProd, whenTest, ESLINT_MODES, POSTCSS_MODES } = require(\"@craco/craco\");\n\nmodule.exports = {\n    reactScriptsVersion: \"react-scripts\" /* (default value) */,\n    style: {\n        modules: {\n            localIdentName: \"\"\n        },\n        css: {\n            loaderOptions: { /* Any css-loader configuration options: https://github.com/webpack-contrib/css-loader. */ },\n            loaderOptions: (cssLoaderOptions, { env, paths }) => { return cssLoaderOptions; }\n        },\n        sass: {\n            loaderOptions: { /* Any sass-loader configuration options: https://github.com/webpack-contrib/sass-loader. */ },\n            loaderOptions: (sassLoaderOptions, { env, paths }) => { return sassLoaderOptions; }\n        },\n        postcss: {\n            mode: \"extends\" /* (default value) */ || \"file\",\n            plugins: [require('plugin-to-append')], // Additional plugins given in an array are appended to existing config.\n            plugins: (plugins) => [require('plugin-to-prepend')].concat(plugins), // Or you may use the function variant.\n            env: {\n                autoprefixer: { /* Any autoprefixer options: https://github.com/postcss/autoprefixer#options */ },\n                stage: 3, /* Any valid stages: https://cssdb.org/#staging-process. */\n                features: { /* Any CSS features: https://preset-env.cssdb.org/features. */ }\n            },\n            loaderOptions: { /* Any postcss-loader configuration options: https://github.com/postcss/postcss-loader. */ },\n            loaderOptions: (postcssLoaderOptions, { env, paths }) => { return postcssLoaderOptions; }\n        }\n    },\n    eslint: {\n        enable: true /* (default value) */,\n        mode: \"extends\" /* (default value) */ || \"file\",\n        configure: { /* Any eslint configuration options: https://eslint.org/docs/user-guide/configuring */ },\n        configure: (eslintConfig, { env, paths }) => { return eslintConfig; },\n        pluginOptions: { /* Any eslint plugin configuration options: https://github.com/webpack-contrib/eslint-webpack-plugin#options. */ },\n        pluginOptions: (eslintOptions, { env, paths }) => { return eslintOptions; }\n    },\n    babel: {\n        presets: [],\n        plugins: [],\n        loaderOptions: { /* Any babel-loader configuration options: https://github.com/babel/babel-loader. */ },\n        loaderOptions: (babelLoaderOptions, { env, paths }) => { return babelLoaderOptions; }\n    },\n    typescript: {\n        enableTypeChecking: true /* (default value)  */\n    },\n    webpack: {\n        alias: {},\n        plugins: {\n            add: [], /* An array of plugins */\n            add: [\n                plugin1,\n                [plugin2, \"append\"],\n                [plugin3, \"prepend\"], /* Specify if plugin should be appended or prepended */\n            ], /* An array of plugins */\n            remove: [],  /* An array of plugin constructor's names (i.e. \"StyleLintPlugin\", \"ESLintWebpackPlugin\" ) */\n        },\n        configure: { /* Any webpack configuration options: https://webpack.js.org/configuration */ },\n        configure: (webpackConfig, { env, paths }) => { return webpackConfig; }\n    },\n    jest: {\n        babel: {\n            addPresets: true, /* (default value) */\n            addPlugins: true  /* (default value) */\n        },\n        configure: { /* Any Jest configuration options: https://jestjs.io/docs/en/configuration */ },\n        configure: (jestConfig, { env, paths, resolve, rootDir }) => { return jestConfig; }\n    },\n    devServer: { /* Any devServer configuration options: https://webpack.js.org/configuration/dev-server/#devserver */ },\n    devServer: (devServerConfig, { env, paths, proxy, allowedHost }) => { return devServerConfig; },\n    plugins: [\n        {\n            plugin: {\n                overrideCracoConfig: ({ cracoConfig, pluginOptions, context: { env, paths } }) => { return cracoConfig; },\n                overrideWebpackConfig: ({ webpackConfig, cracoConfig, pluginOptions, context: { env, paths } }) => { return webpackConfig; },\n                overrideDevServerConfig: ({ devServerConfig, cracoConfig, pluginOptions, context: { env, paths, proxy, allowedHost } }) => { return devServerConfig; },\n                overrideJestConfig: ({ jestConfig, cracoConfig, pluginOptions, context: { env, paths, resolve, rootDir } }) => { return jestConfig },\n            },\n            options: {}\n        }\n    ]\n};\n```\n\n### Configuration Helpers\n\nUsage for all \"when\" functions is the same, `whenDev, whenProd, whenTest` are shortcuts for `when`.\n\n`when(condition, fct, [unmetValue])`\n\nUsage:\n\n```javascript\nconst { when, whenDev } = require(\"@craco/craco\");\n\nmodule.exports = {\n    eslint: {\n        mode: ESLINT_MODES.file,\n        configure: {\n            formatter: when(process.env.NODE_ENV === \"CI\", require(\"eslint-formatter-vso\"))\n        }\n    },\n    webpack: {\n        plugins: [\n            new ConfigWebpackPlugin(),\n            ...whenDev(() => [new CircularDependencyPlugin()], [])\n        ]\n    }\n};\n```\n\n### Exporting your Configuration\n\nYou can export your configuration as an **object literal**:\n\n```javascript\n/* craco.config.js */\n\nmodule.exports = {\n    ...\n}\n```\n\na **function**:\n\n```javascript\n/* craco.config.js */\n\nmodule.exports = function({ env }) {\n    return {\n        ...\n    };\n}\n```\n\na **promise** or an **async function**:\n\n```javascript\n/* craco.config.js */\n\nmodule.exports = async function({ env }) {\n    await ...\n\n    return {\n        ...\n    };\n}\n```\n\n### Setting a Custom Location for craco.config.js\n\nBoth options support a **relative** or an **absolute** path.\n\n**1- package.json** _(Recommended)_\n\nYou can change the location of the `craco.config.js` file by specifying a value for `cracoConfig` in your `package.json` \nfile.\n\n```javascript\n/* package.json */\n\n{\n    \"cracoConfig\": \"config/craco-config-with-custom-name.js\"\n}\n```\n\n**2- CLI** _(For backward compatibility)_\n\nYou can also change the location of the `craco.config.js` file by specifying the `--config` CLI option. _This option \ndoesn't support Babel with Jest_\n\n```javascript\n/* package.json */\n\n{\n    \"scripts\": {\n        \"start\": \"craco start --config config/craco-config-with-custom-name.js\"\n    }\n}\n```\n\n## CRA Toolchain for Beginners\n\n### Introduction to CRACO\n\nCreate React App ([CRA](https://github.com/facebook/create-react-app)) is intended to allow people to get started with \nwriting React apps quickly. It does this by packaging several key components with a solid default configuration. \n\nAfter 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. \n\nCRACO allows you to enjoy the recognizable project structure of CRA while changing detailed configuration settings of \neach component. \n\n### Notes on CRA Configurations and Problem Solving  \n\nKeep in mind that there are _some_ configuration settings available to CRA without CRACO. \n\nGetting exactly what you want may involve a combination of making changes your CRACO configuration file and by using \nsome of the more limited _but still important_ settings available in Create React App. \n\nBefore jumping into customizing your _CRACO_ configuration, step back and think about each part of the problem you're \ntrying to solve. Be sure to review these resources on the CRA configuration, as it may save you time:\n\n - [Important Environment Variables that Configure CRA](https://create-react-app.dev/docs/advanced-configuration)\n - [Learn about using `postbuild` commands in `package.json`](https://stackoverflow.com/a/51818028/4028977)\n - [Proxying API or other Requests](https://create-react-app.dev/docs/proxying-api-requests-in-development/), or \"how \n to integrate CRA's dev server with a second backend\": \n [problem statement](https://github.com/facebook/create-react-app/issues/147)\n - [Search CRACO issues, for gotchas, hints and examples](https://github.com/gsoft-inc/craco/issues?q=is%3Aissue+sort%3Aupdated-desc)\n\n### Ejecting CRA to Learn\n\nAvoiding ejecting is a major goal for many CRACO users. However, if you're still learning toolchains and modern \nfrontend workflows, it may be helpful to create a sample ejected CRA project to see how the default CRA app configures \neach of the components. \n\nWhile CRACO's sample configuration file inherits directly from CRA's default settings, seeing the default CRA config in\nthe ejected CRA file structure may give you useful perspective. \n\nYou may even want to try testing a change in the ejected app to better understand how it would be done with your CRACO \nconfig-based project. \n\n### Direct (object literal) Versus Functional Config Definitions\n\nThe [sample CRACO config file]((#sample-craco-configuration-file)) is meant to show possibilities for configuring your CRA-based project. Each section \ncontains a primary configuration area, `loaderOptions` or `configure`. These config areas are where you will make most \nof your detailed changes.\n\nYou, (or perhaps your IDE) may have noticed that the sections have duplicate keys, i.e. loaderOptions is listed twice\nin the sample config file.\n\nThe reason for this is to allow you to choose between object literal or functionally defined configuration choices. \nThere are a few reasons for this:\n\n1. Sometimes it may be faster to test a minor change using keys. \n1. Other times a functional definition is necessary to get the right configuration.\n1. While not common, a setting may **only** work if you use one or the other! See, \n[devServer port example](https://github.com/gsoft-inc/craco/issues/172#issuecomment-651505730)\n\n#### A simple example of equivalent direct and functionally defined configuration settings:\n\n##### Direct configuration (object literal)\n\n```javascript\ndevServer: {\n    writeToDisk: true\n}\n```\n\n##### Functionally defined configuration\n\n```javascript\ndevServer: (devServerConfig, { env, paths, proxy, allowedHost }) => {\n    devServerConfig.writeToDisk = true; \n    return devServerConfig;\n}\n```\n\n## API\n\nTo integrate with other tools, it's usefull to have access to the configuration generated by CRACO.\n\nThat's what CRACO APIs are for. The current API support Jest and Webpack.\n\n### Jest API\n\nAccept a `cracoConfig`, a `context` object and `options`. The generated Jest config object is returned.\n\n> **Warning:** `createJestConfig` does NOT accept `cracoConfig` as a function. If your `craco.config.js` exposes a config \nfunction, you have to call it yourself before passing it to `createJestConfig`.\n\n`createJestConfig(cracoConfig, context = {}, options = { verbose: false, config: null })`\n\nUsage:\n\n```javascript\n/* jest.config.js */\n\nconst { createJestConfig } = require(\"@craco/craco\");\n\nconst cracoConfig = require(\"./craco.config.js\");\nconst jestConfig = createJestConfig(cracoConfig);\n\nmodule.exports = jestConfig;\n```\n\n#### Examples\n\n- [vscode-jest](https://github.com/sharegate/craco/tree/master/recipes/use-a-jest-config-file)\n\n### Webpack API\n\nYou can create Webpack DevServer and Production configurations using `createWebpackDevConfig` and `createWebpackProdConfig`. \n\nAccept a `cracoConfig`, a `context` object and `options`. The generated Webpack config object is returned.\n\n> **Warning:** Similar to `createJestConfig`, these functions do NOT accept `cracoConfig` as a function. If your \n`craco.config.js` exposes a config function, you have to call it yourself before passing it further.\n\n`createWebpackDevConfig(cracoConfig, context = {}, options = { verbose: false, config: null })`\n\n`createWebpackProdConfig(cracoConfig, context = {}, options = { verbose: false, config: null })`\n\nUsage:\n\n```javascript\n/* webpack.config.js */\n\nconst { createWebpackDevConfig } = require(\"@craco/craco\");\n\nconst cracoConfig = require(\"./craco.config.js\");\nconst webpackConfig = createWebpackDevConfig(cracoConfig);\n\nmodule.exports = webpackConfig;\n```\n\n## Develop a Plugin\n\n### Hooks\n\nThere are four hooks available to a plugin:\n\n- `overrideCracoConfig`: Let a plugin customize the config object before it's process by `craco`.\n- `overrideWebpackConfig`: Let a plugin customize the `webpack` config that will be used by CRA.\n- `overrideDevServerConfig`: Let a plugin customize the dev server config that will be used by CRA.\n- `overrideJestConfig`: Let a plugin customize the `Jest` config that will be used by CRA.\n\n**Important:**\n\nEvery function must return the updated config object.\n\n#### overrideCracoConfig\n\nThe function `overrideCracoConfig` let a plugin override the config object **before** it's process by `craco`.\n\nIf a plugin define the function, it will be called with the config object read from the `craco.config.js` file provided \nby the consumer.\n\n*The function must return a valid config object, otherwise `craco` will throw an error.*\n\nThe function will be called with a single object argument having the following structure:\n\n```javascript\n{\n    cracoConfig: \"The config object read from the craco.config.js file provided by the consumer\",\n    pluginOptions: \"The plugin options provided by the consumer\",\n    context: {\n        env: \"The current NODE_ENV (development, production, etc..)\",\n        paths: \"An object that contains all the paths used by CRA\"\n    }\n}\n```\n\n##### Example\n\nPlugin:\n\n```javascript\n/* craco-plugin-log-craco-config.js */\n\nmodule.exports = {\n    overrideCracoConfig: ({ cracoConfig, pluginOptions, context: { env, paths } }) => {\n        if (pluginOptions.preText) {\n            console.log(pluginOptions.preText);\n        }\n\n        console.log(JSON.stringify(cracoConfig, null, 4));\n\n        // Always return the config object.\n        return cracoConfig;\n    }\n};\n```\n\nRegistration (in a `craco.config.js` file):\n\n```javascript\nconst logCracoConfigPlugin = require(\"./craco-plugin-log-craco-config\");\n\nmodule.exports = {\n    ...\n    plugins: [\n        { plugin: logCracoConfigPlugin, options: { preText: \"Will log the craco config:\" } }\n    ]\n};\n```\n\n#### overrideWebpackConfig\n\nThe function `overrideWebpackConfig` let a plugin override the `webpack` config object **after** it's been customized \nby `craco`.\n\n*The function must return a valid config object, otherwise `craco` will throw an error.*\n\nThe function will be called with a single object argument having the following structure:\n\n```javascript\n{\n    webpackConfig: \"The webpack config object already customized by craco\",\n    cracoConfig: \"The configuration object read from the craco.config.js file provided by the consumer\",\n    pluginOptions: \"The plugin options provided by the consumer\",\n    context: {\n        env: \"The current NODE_ENV (development, production, etc..)\",\n        paths: \"An object that contains all the paths used by CRA\"\n    }\n}\n```\n\n##### Example\n\nPlugin:\n\n```javascript\n/* craco-plugin-log-webpack-config.js */\n\nmodule.exports = {\n    overrideWebpackConfig: ({ webpackConfig, cracoConfig, pluginOptions, context: { env, paths } }) => {\n        if (pluginOptions.preText) {\n            console.log(pluginOptions.preText);\n        }\n\n        console.log(JSON.stringify(webpackConfig, null, 4));\n\n        // Always return the config object.\n        return webpackConfig;\n    }\n};\n```\n\nRegistration (in a `craco.config.js` file):\n\n```javascript\nconst logWebpackConfigPlugin = require(\"./craco-plugin-log-webpack-config\");\n\nmodule.exports = {\n    ...\n    plugins: [\n        { plugin: logWebpackConfigPlugin, options: { preText: \"Will log the webpack config:\" } }\n    ]\n};\n```\n\n#### overrideDevServerConfig\n\nThe function `overrideDevServerConfig` let a plugin override the dev server config object **after** it's been customized\nby `craco`.\n\n*The function must return a valid config object, otherwise `craco` will throw an error.*\n\nThe function will be called with a single object argument having the following structure:\n\n```javascript\n{\n    devServerConfig: \"The dev server config object already customized by craco\",\n    cracoConfig: \"The configuration object read from the craco.config.js file provided by the consumer\",\n    pluginOptions: \"The plugin options provided by the consumer\",\n    context: {\n        env: \"The current NODE_ENV (development, production, etc..)\",\n        paths: \"An object that contains all the paths used by CRA\",\n        allowedHost: \"Provided by CRA\"\n    }\n}\n```\n\n##### Example\n\nPlugin:\n\n```javascript\n/* craco-plugin-log-dev-server-config.js */\n\nmodule.exports = {\n    overrideDevServerConfig: ({ devServerConfig, cracoConfig, pluginOptions, context: { env, paths, allowedHost } }) => {\n        if (pluginOptions.preText) {\n            console.log(pluginOptions.preText);\n        }\n\n        console.log(JSON.stringify(devServerConfig, null, 4));\n\n        // Always return the config object.\n        return devServerConfig;\n    }\n};\n```\n\nRegistration (in a `craco.config.js` file):\n\n```javascript\nconst logDevServerConfigPlugin = require(\"./craco-plugin-log-dev-server-config\");\n\nmodule.exports = {\n    ...\n    plugins: [\n        { plugin: logDevServerConfigPlugin, options: { preText: \"Will log the dev server config:\" } }\n    ]\n};\n```\n\n#### overrideJestConfig\n\nThe function `overrideJestConfig` let a plugin override the `Jest` config object **after** it's been customized by \n`craco`.\n\n*The function must return a valid config object, otherwise `craco` will throw an error.*\n\nThe function will be called with a single object argument having the following structure:\n\n```javascript\n{\n    jestConfig: \"The Jest config object already customized by craco\",\n    cracoConfig: \"The configuration object read from the craco.config.js file provided by the consumer\",\n    pluginOptions: \"The plugin options provided by the consumer\",\n    context: {\n        env: \"The current NODE_ENV (development, production, etc..)\",\n        paths: \"An object that contains all the paths used by CRA\",\n        resolve: \"Provided by CRA\",\n        rootDir: \"Provided by CRA\"\n    }\n}\n```\n\n##### Example\n\nPlugin:\n\n```javascript\n/* craco-plugin-log-jest-config.js */\n\nmodule.exports = {\n    overrideJestConfig: ({ jestConfig, cracoConfig, pluginOptions, context: { env, paths, resolve, rootDir } }) => {\n        if (pluginOptions.preText) {\n            console.log(pluginOptions.preText);\n        }\n\n        console.log(JSON.stringify(jestConfig, null, 4));\n\n        // Always return the config object.\n        return jestConfig;\n    }\n};\n```\n\nRegistration (in a `craco.config.js` file):\n\n```javascript\nconst logJestConfigPlugin = require(\"./craco-plugin-log-jest-config\");\n\nmodule.exports = {\n    ...\n    plugins: [\n        { plugin: logJestConfigPlugin, options: { preText: \"Will log the Jest config:\" } }\n    ]\n};\n```\n\n### Utility Functions\n\nA few utility functions are provided by CRACO to help you develop a plugin:\n - `getLoader`\n - `getLoaders`\n - `removeLoaders`\n - `addBeforeLoader`\n - `addBeforeLoaders`\n - `addAfterLoader`\n - `addAfterLoaders`\n - `getPlugin`\n - `removePlugins`\n - `addPlugins`\n - `throwUnexpectedConfigError`\n \n```javascript\nconst { getLoader, getLoaders, removeLoaders, loaderByName, getPlugin, removePlugins, addPlugins, pluginByName, throwUnexpectedConfigError } = require(\"@craco/craco\");\n```\n\n#### getLoader\n\nRetrieve the **first** loader that match the specified criteria from the webpack config.\n\nReturns:\n\n```javascript\n{\n    isFound: true | false,\n    match: {\n        loader,\n        parent,\n        index\n    }\n}\n```\n\nUsage:\n\n```javascript\nconst { getLoader, loaderByName } = require(\"@craco/craco\");\n\nconst { isFound, match } = getLoader(webpackConfig, loaderByName(\"eslint-loader\"));\n\nif (isFound) {\n    // do stuff...\n}\n```\n\n#### getLoaders\n\nRetrieve **all** the loaders that match the specified criteria from the webpack config.\n\nReturns:\n\n```javascript\n{\n    hasFoundAny: true | false,\n    matches: [\n        {\n            loader,\n            parent,\n            index\n        }\n    ]\n}\n```\n\nUsage:\n\n```javascript\nconst { getLoaders, loaderByName } = require(\"@craco/craco\");\n\nconst { hasFoundAny, matches } = getLoaders(webpackConfig, loaderByName(\"babel-loader\"));\n\nif (hasFoundAny) {\n    matches.forEach(x => {\n        // do stuff...\n    });\n}\n```\n\n#### removeLoaders\n\nRemove **all** the loaders that match the specified criteria from the webpack config.\n\nReturns:\n\n```javascript\n{\n    hasRemovedAny: true | false,\n    removedCount: int\n}\n```\n\nUsage:\n\n```javascript\nconst { removeLoaders, loaderByName } = require(\"@craco/craco\");\n\nremoveLoaders(webpackConfig, loaderByName(\"eslint-loader\"));\n```\n\n#### addBeforeLoader\n\nAdd a new *loader* **before** the loader that match specified criteria to the webpack config.\n\nReturns:\n\n```javascript\n{\n    isAdded: true | false\n}\n```\n\nUsage:\n\n```javascript\nconst { addBeforeLoader, loaderByName } = require(\"@craco/craco\");\n\nconst myNewWebpackLoader = {\n    loader: require.resolve(\"tslint-loader\")\n};\n\naddBeforeLoader(webpackConfig, loaderByName(\"eslint-loader\"), myNewWebpackLoader);\n```\n\n#### addBeforeLoaders\n\nAdd a new *loader* **before** all the loaders that match specified criteria to the webpack config.\n\nReturns:\n\n```javascript\n{\n    isAdded: true | false,\n    addedCount: int\n}\n```\n\nUsage:\n\n```javascript\nconst { addBeforeLoaders, loaderByName } = require(\"@craco/craco\");\n\nconst myNewWebpackLoader = {\n    loader: require.resolve(\"tslint-loader\")\n};\n\naddBeforeLoaders(webpackConfig, loaderByName(\"eslint-loader\"), myNewWebpackLoader);\n```\n\n#### addAfterLoader\n\nAdd a new *loader* **after** the loader that match specified criteria to the webpack config.\n\nReturns:\n\n```javascript\n{\n    isAdded: true | false\n}\n```\n\nUsage:\n\n```javascript\nconst { addAfterLoader, loaderByName } = require(\"@craco/craco\");\n\nconst myNewWebpackLoader = {\n    loader: require.resolve(\"tslint-loader\")\n};\n\naddAfterLoader(webpackConfig, loaderByName(\"eslint-loader\"), myNewWebpackLoader);\n```\n\n#### addAfterLoaders\n\nAdd a new *loader* **after** all the loaders that match specified criteria to the webpack config.\n\nReturns:\n\n```javascript\n{\n    isAdded: true | false,\n    addedCount: int\n}\n```\n\nUsage:\n\n```javascript\nconst { addAfterLoaders, loaderByName } = require(\"@craco/craco\");\n\nconst myNewWebpackLoader = {\n    loader: require.resolve(\"tslint-loader\")\n};\n\naddAfterLoaders(webpackConfig, loaderByName(\"eslint-loader\"), myNewWebpackLoader);\n```\n\n#### getPlugin\n\nRetrieve the **first** plugin that match the specified criteria from the webpack config.\n\nReturns:\n\n```javascript\n{\n    isFound: true | false,\n    match: {...} // the webpack plugin\n}\n```\n\nUsage:\n\n```javascript\nconst { getPlugin, pluginByName } = require(\"@craco/craco\");\n\nconst { isFound, match } = getPlugin(webpackConfig, pluginByName(\"ESLintWebpackPlugin\"));\n\nif (isFound) {\n    // do stuff...\n}\n```\n\n#### removePlugins\n\nRemove **all** the plugins that match the specified criteria from the webpack config.\n\nReturns:\n\n```javascript\n{\n    hasRemovedAny:: true | false,\n    removedCount:: int\n}\n```\n\nUsage:\n\n```javascript\nconst { removePlugins, pluginByName } = require(\"@craco/craco\");\n\nremovePlugins(webpackConfig, pluginByName(\"ESLintWebpackPlugin\"));\n```\n\n#### addPlugins\n\nAdd new *plugins* to the webpack config.\n\nUsage:\n\n```javascript\nconst { addPlugins } = require(\"@craco/craco\");\n\nconst myNewWebpackPlugin = require.resolve(\"ESLintWebpackPlugin\");\n\naddPlugins(webpackConfig, [myNewWebpackPlugin]);\naddPlugins(webpackConfig, [ [myNewWebpackPlugin, \"append\"] ]);\naddPlugins(webpackConfig, [ [myNewWebpackPlugin, \"prepend\"] ]);\n```\n\n\n#### throwUnexpectedConfigError\n\nThrow an error if the webpack configuration changes and does not match your expectations. (For example, `getLoader` \ncannot find a loader and `isFound` is `false`.) `create-react-app` might update the structure of their webpack config, \nso it is very important to show a helpful error message when something breaks.\n\nRaises an error and crashes Node.js:\n\n```bash\n$ yarn start\nyarn run v1.12.3\n$ craco start\n/path/to/your/app/craco.config.js:23\n            throw new Error(\n            ^\n\n    Error: Can't find eslint-loader in the webpack config!\n\n    This error probably occurred because you updated react-scripts or craco. Please try updating craco-less to the latest version:\n\n       $ yarn upgrade craco-less\n\n    Or:\n\n       $ npm update craco-less\n\n    If that doesn't work, craco-less needs to be fixed to support the latest version.\n    Please check to see if there's already an issue in the ndbroadbent/craco-less repo:\n\n       * https://github.com/ndbroadbent/craco-less/issues?q=is%3Aissue+webpack+eslint-loader\n\n    If not, please open an issue and we'll take a look. (Or you can send a PR!)\n\n    You might also want to look for related issues in the craco and create-react-app repos:\n\n       * https://github.com/sharegate/craco/issues?q=is%3Aissue+webpack+eslint-loader\n       * https://github.com/facebook/create-react-app/issues?q=is%3Aissue+webpack+eslint-loader\n\n    at throwUnexpectedConfigError (/path/to/your/app/craco.config.js:23:19)\n    ...\n```\n\nUsage:\n\n```javascript\nconst { getLoader, loaderByName, throwUnexpectedConfigError } = require(\"@craco/craco\");\n\n// Create a helper function if you need to call this multiple times\nconst throwError = (message, githubIssueQuery) =>\n    throwUnexpectedConfigError({\n        packageName: \"craco-less\",\n        githubRepo: \"ndbroadbent/craco-less\",\n        message,\n        githubIssueQuery,\n    });\n\nconst { isFound, match } = getLoader(webpackConfig, loaderByName(\"eslint-loader\"));\n\nif (!isFound) {\n    throwError(\"Can't find eslint-loader in the webpack config!\", \"webpack+eslint-loader\")\n}\n```\n\nOptions:\n\n```javascript\n{\n    message: \"An error message explaining what went wrong\",\n    packageName: \"NPM package name\",\n    githubRepo: \"GitHub repo where people can open an issue. Format: username/repo\",\n    githubIssueQuery: \"Search string to find related issues\"\n}\n```\n\n> Only `message` is required.\n\n## Backward Compatibility\n\nCRACO 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.\n\n| react-scripts Version |CRACO Version|\n| --------------------- | -----------:|\n| react-scripts < 4.0.0 |       5.8.0 |\n\n## Debugging\n\n### Verbose Logging\n\nTo activate **verbose** logging specify the CLI option `--verbose`\n\n```javascript\n/* package.json */\n\n{\n    \"scripts\": {\n        \"start\": \"craco start --verbose\"\n    }\n}\n```\n\n## License\n\nCopyright © 2020, Groupe Sharegate inc. This code is licensed under the Apache License, Version 2.0. You may obtain a \ncopy of this license at https://github.com/gsoft-inc/gsoft-license/blob/master/LICENSE.\n","readmeFilename":"README.md","_id":"@craco/craco@7.0.0-alpha.3","_nodeVersion":"16.5.0","_npmVersion":"lerna/3.16.4/node@v16.5.0+x64 (win32)","dist":{"integrity":"sha512-ht3RsMMsg0xWaEbe1hh4DMM84njUzUXoBZ/lQXptPrQ0CR3w4dEXEn6kgw0rNwZbkbURxuB/dVRxroOQJ4F1YQ==","shasum":"158355141c9a007cf2ee04c8071b0ee44dfa4aae","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-7.0.0-alpha.3.tgz","fileCount":41,"unpackedSize":112023,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiDqqiACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqLCw//RzJa+WNfSQKB8VVfrWzZQM+InIRIM3DoIF9PolR9V/DvCgLj\r\nNLRfa3TWgf8ncI7ohxE4CVdzgTrIGVkKWRy5B1wat3mtEX04h8oIsKMhHcgv\r\nr356HbXo0nqEnMD9tHoRryX7w54hKtH06lKUFqEadTSNVDO0jIe+eoaytOmi\r\nt6HbNfkwgm0JAXz0F6yX3jS7txKa9cNKTOwlW2A6TQs2nUDo9q9RkFdnYtM6\r\nBHYliLsaxpWTWJzzPuyOXpAyjMTLq9PZyvdy880rDNWBbZH0PiENEf7ge5F9\r\nBv8Hg5dHkB2q/pvSSF+Cexzr3ZyH/iAxrBgP8Gi4N+R1wbo8Z87eEKexDsOB\r\nSAxoCAk5+ahTNTjduR+pGHW3dPayo8qmQyyZT4wyTZzACnNq0+EHB73r21J5\r\niRDqjowkHjfU4fJtSZDvHObpExRWsEBkY019rjp9+j+UZMuDB1dgTSsoFOYd\r\nywrzDxq00UCuOqiJ4CEsLoASyJaekDvLZVSpcoHCLQiDZnopldjU8sb0QZXi\r\nE2z/cEvhM4Fe4+fxbf56Km9anyby4sQO/fa+cspONsF7j18HYyG3OWgfWP1o\r\nQI279nLrFv/pAy7Upv3EJVhsKtnJRgB/x9b5wA5Ncfto2soGU/KLGFN+IbzY\r\ngyfV/eEf7U2LB2mqOh93Tt/ZiSyOuXElEUc=\r\n=5IIX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDix5j4ODexfUeg0w3juUENodpUGTFeVcFkmk0HdgGp3QIhAILW/5+7r1ZBOnxVUrMUKcVQiU5dIVBG5pm+nYpTBUu4"}]},"_npmUser":{"name":"anonymous","email":"pa.lafrance@gmail.com"},"directories":{},"maintainers":[{"name":"anonymous","email":"f.brobillard@gmail.com"},{"name":"anonymous","email":"pa.lafrance@gmail.com"},{"name":"anonymous","email":"yohan.belval@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_7.0.0-alpha.3_1645128353909_0.24433555525577755"},"_hasShrinkwrap":false},"7.0.0-alpha.4":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app.","version":"7.0.0-alpha.4","scripts":{"prepublish":"tsc"},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/gsoft-inc/craco.git"},"keywords":["react","create-react-app","cra"],"contributors":[{"name":"Groupe Sharegate inc."},{"name":"Dilan Nair","url":"https://www.dilanxd.com"}],"license":"Apache-2.0","bugs":{"url":"https://github.com/gsoft-inc/craco/issues"},"homepage":"https://github.com/gsoft-inc/craco","engines":{"node":">=6"},"main":"dist/index.js","types":"dist/index.d.ts","bin":{"craco":"dist/bin/craco.js"},"peerDependencies":{"react-scripts":"^5.0.0"},"devDependencies":{"@babel/types":"^7.18.4","@jest/types":"^28.1.1","@types/cross-spawn":"^6.0.2","@types/eslint":"^8.4.3","@types/lodash":"^4.14.182","@types/semver":"^7.3.10","@types/webpack":"^5.28.0","eslint-webpack-plugin":"^3.2.0","react-scripts":"5.*","typescript":"^4.7.4"},"dependencies":{"autoprefixer":"^10.4.7","cosmiconfig":"^7.0.1","cosmiconfig-typescript-loader":"^2.0.2","cross-spawn":"^7.0.3","lodash":"^4.17.21","semver":"^7.3.7","webpack-merge":"^5.8.0"},"readme":"# CRACO\n\n[![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)\n\n**C**reate **R**eact **A**pp **C**onfiguration **O**verride is an easy and comprehensible configuration layer for create-react-app.\n\nGet 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.\n\nAll you have to do is create your app using [create-react-app](https://github.com/facebook/create-react-app/) and customize the configuration file.\n\n## Support\n\n-   Create React App (CRA) 4.\\*\n-   Yarn\n-   Yarn Workspace\n-   NPM\n-   Lerna (with or without hoisting)\n-   Custom `react-scripts` version\n\n## Documentation\n\n-   [Installation](#installation) - How to install and setup CRACO.\n-   [Configuration](#configuration) - How to customize your CRA installation with CRACO.\n    -   [Configuration File](#configuration-file)\n    -   [Configuration Helpers](#configuration-helpers)\n    -   [Exporting your Configuration](#exporting-your-configuration)\n    -   [Setting a Custom Location for the configuration file](#setting-a-custom-location-for-cracoconfigjs)\n-   [CRA toolchain for Beginners](#cra-toolchain-for-beginners)\n    -   [Notes on CRA Configurations and Problem Solving](#notes-on-cra-configurations-and-problem-solving)\n    -   [Ejecting CRA to Learn](#ejecting-cra-to-learn)\n    -   [Direct Versus Functional Config Definitions](#direct-object-literal-versus-functional-config-definitions)\n-   [API](#api) - CRACO APIs for Jest and Webpack.\n    -   [Jest API](#jest-api)\n    -   [Webpack API](#webpack-api)\n-   [Recipes](https://github.com/sharegate/craco/tree/master/recipes) – Short recipes for common use cases.\n-   [Available Plugins](https://github.com/sharegate/craco#community-maintained-plugins) - Plugins maintained by the community.\n-   [Develop a Plugin](#develop-a-plugin) - How to develop a plugin for CRACO.\n-   [Backward Compatibility](#backward-compatibility)\n-   [Debugging](#debugging)\n-   [License](#license)\n\n## Preface\n\n### Acknowledgements\n\nWe 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.\n\nThe configuration style of this plugin has been greatly influenced by [Vue CLI](https://cli.vuejs.org/guide/).\n\n### Fair Warning\n\nBy 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.\n\n## Installation\n\nInstall the latest version of the package from npm:\n\n```bash\n$ npm i @craco/craco\n```\n\n> _Alternatively, you can install the latest alpha build:_\n>\n> ```bash\n> $ npm i @craco/craco@alpha\n> ```\n>\n> _However, you should be aware that these versions are experimental._\n\nCreate a `craco.config.js` file in the root directory and [configure CRACO](#configuration):\n\n```\nmy-app\n├── node_modules\n├── craco.config.js\n└── package.json\n```\n\nUpdate the existing calls to `react-scripts` in the `scripts` section of your `package.json` file to use the `craco` CLI:\n\n```diff\n/* package.json */\n\n\"scripts\": {\n-   \"start\": \"react-scripts start\",\n+   \"start\": \"craco start\",\n-   \"build\": \"react-scripts build\",\n+   \"build\": \"craco build\"\n-   \"test\": \"react-scripts test\",\n+   \"test\": \"craco test\"\n}\n```\n\nStart your app for development:\n\n```bash\n$ npm start\n```\n\nOr build your app:\n\n```bash\n$ npm run build\n```\n\n## Configuration\n\nCRACO 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.\n\nIf there are multiple configuration files in the same directory, CRACO will only use one. The priority order is:\n\n1. `package.json`\n1. `craco.config.ts`\n1. `craco.config.js`\n1. `.cracorc.ts`\n1. `.cracorc.js`\n1. `.cracorc`\n\n### Configuration File\n\nBelow 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).\n\nSome sections have a `mode` property. When this is available there are 2 possible values:\n\n-   `extends`: the provided configuration will extends the CRA settings (**default mode**)\n-   `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.\n\n```javascript\nconst { when, whenDev, whenProd, whenTest, ESLINT_MODES, POSTCSS_MODES } = require('@craco/craco');\n\nmodule.exports = {\n    reactScriptsVersion: 'react-scripts' /* (default value) */,\n    style: {\n        modules: {\n            localIdentName: '',\n        },\n        css: {\n            loaderOptions: {\n                /* Any css-loader configuration options: https://github.com/webpack-contrib/css-loader. */\n            },\n            loaderOptions: (cssLoaderOptions, { env, paths }) => {\n                return cssLoaderOptions;\n            },\n        },\n        sass: {\n            loaderOptions: {\n                /* Any sass-loader configuration options: https://github.com/webpack-contrib/sass-loader. */\n            },\n            loaderOptions: (sassLoaderOptions, { env, paths }) => {\n                return sassLoaderOptions;\n            },\n        },\n        postcss: {\n            mode: 'extends' /* (default value) */ || 'file',\n            plugins: [require('plugin-to-append')], // Additional plugins given in an array are appended to existing config.\n            plugins: (plugins) => [require('plugin-to-prepend')].concat(plugins), // Or you may use the function variant.\n            env: {\n                autoprefixer: {\n                    /* Any autoprefixer options: https://github.com/postcss/autoprefixer#options */\n                },\n                stage: 3 /* Any valid stages: https://cssdb.org/#staging-process. */,\n                features: {\n                    /* Any CSS features: https://preset-env.cssdb.org/features. */\n                },\n            },\n            loaderOptions: {\n                /* Any postcss-loader configuration options: https://github.com/postcss/postcss-loader. */\n            },\n            loaderOptions: (postcssLoaderOptions, { env, paths }) => {\n                return postcssLoaderOptions;\n            },\n        },\n    },\n    eslint: {\n        enable: true /* (default value) */,\n        mode: 'extends' /* (default value) */ || 'file',\n        configure: {\n            /* Any eslint configuration options: https://eslint.org/docs/user-guide/configuring */\n        },\n        configure: (eslintConfig, { env, paths }) => {\n            return eslintConfig;\n        },\n        pluginOptions: {\n            /* Any eslint plugin configuration options: https://github.com/webpack-contrib/eslint-webpack-plugin#options. */\n        },\n        pluginOptions: (eslintOptions, { env, paths }) => {\n            return eslintOptions;\n        },\n    },\n    babel: {\n        presets: [],\n        plugins: [],\n        loaderOptions: {\n            /* Any babel-loader configuration options: https://github.com/babel/babel-loader. */\n        },\n        loaderOptions: (babelLoaderOptions, { env, paths }) => {\n            return babelLoaderOptions;\n        },\n    },\n    typescript: {\n        enableTypeChecking: true /* (default value)  */,\n    },\n    webpack: {\n        alias: {},\n        plugins: {\n            add: [] /* An array of plugins */,\n            add: [\n                plugin1,\n                [plugin2, 'append'],\n                [plugin3, 'prepend'] /* Specify if plugin should be appended or prepended */,\n            ] /* An array of plugins */,\n            remove: [] /* An array of plugin constructor's names (i.e. \"StyleLintPlugin\", \"ESLintWebpackPlugin\" ) */,\n        },\n        configure: {\n            /* Any webpack configuration options: https://webpack.js.org/configuration */\n        },\n        configure: (webpackConfig, { env, paths }) => {\n            return webpackConfig;\n        },\n    },\n    jest: {\n        babel: {\n            addPresets: true /* (default value) */,\n            addPlugins: true /* (default value) */,\n        },\n        configure: {\n            /* Any Jest configuration options: https://jestjs.io/docs/en/configuration */\n        },\n        configure: (jestConfig, { env, paths, resolve, rootDir }) => {\n            return jestConfig;\n        },\n    },\n    devServer: {\n        /* Any devServer configuration options: https://webpack.js.org/configuration/dev-server/#devserver */\n    },\n    devServer: (devServerConfig, { env, paths, proxy, allowedHost }) => {\n        return devServerConfig;\n    },\n    plugins: [\n        {\n            plugin: {\n                overrideCracoConfig: ({ cracoConfig, pluginOptions, context: { env, paths } }) => {\n                    return cracoConfig;\n                },\n                overrideWebpackConfig: ({ webpackConfig, cracoConfig, pluginOptions, context: { env, paths } }) => {\n                    return webpackConfig;\n                },\n                overrideDevServerConfig: ({\n                    devServerConfig,\n                    cracoConfig,\n                    pluginOptions,\n                    context: { env, paths, proxy, allowedHost },\n                }) => {\n                    return devServerConfig;\n                },\n                overrideJestConfig: ({\n                    jestConfig,\n                    cracoConfig,\n                    pluginOptions,\n                    context: { env, paths, resolve, rootDir },\n                }) => {\n                    return jestConfig;\n                },\n            },\n            options: {},\n        },\n    ],\n};\n```\n\n### Configuration Helpers\n\nUsage for all \"when\" functions is the same, `whenDev, whenProd, whenTest` are shortcuts for `when`.\n\n`when(condition, fct, [unmetValue])`\n\nUsage:\n\n```javascript\nconst { when, whenDev } = require('@craco/craco');\n\nmodule.exports = {\n    eslint: {\n        mode: ESLINT_MODES.file,\n        configure: {\n            formatter: when(process.env.NODE_ENV === 'CI', require('eslint-formatter-vso')),\n        },\n    },\n    webpack: {\n        plugins: [new ConfigWebpackPlugin(), ...whenDev(() => [new CircularDependencyPlugin()], [])],\n    },\n};\n```\n\n### Exporting your Configuration\n\nYou can export your configuration as an **object literal**:\n\n```javascript\n/* craco.config.js */\n\nmodule.exports = {\n    ...\n}\n```\n\na **function**:\n\n```javascript\n/* craco.config.js */\n\nmodule.exports = function({ env }) {\n    return {\n        ...\n    };\n}\n```\n\na **promise** or an **async function**:\n\n```javascript\n/* craco.config.js */\n\nmodule.exports = async function({ env }) {\n    await ...\n\n    return {\n        ...\n    };\n}\n```\n\n### Setting a Custom Location for craco.config.js\n\nBoth options support a **relative** or an **absolute** path.\n\n**1- package.json** _(Recommended)_\n\nYou can change the location of the `craco.config.js` file by specifying a value for `cracoConfig` in your `package.json`\nfile.\n\n```javascript\n/* package.json */\n\n{\n    \"cracoConfig\": \"config/craco-config-with-custom-name.js\"\n}\n```\n\n**2- CLI** _(For backward compatibility)_\n\nYou can also change the location of the `craco.config.js` file by specifying the `--config` CLI option. _This option\ndoesn't support Babel with Jest_\n\n```javascript\n/* package.json */\n\n{\n    \"scripts\": {\n        \"start\": \"craco start --config config/craco-config-with-custom-name.js\"\n    }\n}\n```\n\n## CRA Toolchain for Beginners\n\n### Introduction to CRACO\n\nCreate React App ([CRA](https://github.com/facebook/create-react-app)) is intended to allow people to get started with\nwriting React apps quickly. It does this by packaging several key components with a solid default configuration.\n\nAfter 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.\n\nCRACO allows you to enjoy the recognizable project structure of CRA while changing detailed configuration settings of\neach component.\n\n### Notes on CRA Configurations and Problem Solving\n\nKeep in mind that there are _some_ configuration settings available to CRA without CRACO.\n\nGetting exactly what you want may involve a combination of making changes your CRACO configuration file and by using\nsome of the more limited _but still important_ settings available in Create React App.\n\nBefore jumping into customizing your _CRACO_ configuration, step back and think about each part of the problem you're\ntrying to solve. Be sure to review these resources on the CRA configuration, as it may save you time:\n\n-   [Important Environment Variables that Configure CRA](https://create-react-app.dev/docs/advanced-configuration)\n-   [Learn about using `postbuild` commands in `package.json`](https://stackoverflow.com/a/51818028/4028977)\n-   [Proxying API or other Requests](https://create-react-app.dev/docs/proxying-api-requests-in-development/), or \"how\n    to integrate CRA's dev server with a second backend\":\n    [problem statement](https://github.com/facebook/create-react-app/issues/147)\n-   [Search CRACO issues, for gotchas, hints and examples](https://github.com/gsoft-inc/craco/issues?q=is%3Aissue+sort%3Aupdated-desc)\n\n### Ejecting CRA to Learn\n\nAvoiding ejecting is a major goal for many CRACO users. However, if you're still learning toolchains and modern\nfrontend workflows, it may be helpful to create a sample ejected CRA project to see how the default CRA app configures\neach of the components.\n\nWhile [CRACO's sample configuration file](#configuration-file) inherits directly from CRA's default settings, seeing the default CRA config in\nthe ejected CRA file structure may give you useful perspective.\n\nYou may even want to try testing a change in the ejected app to better understand how it would be done with your CRACO\nconfig-based project.\n\n### Direct (object literal) Versus Functional Config Definitions\n\nThe [sample CRACO config file](#configuration-file) is meant to show possibilities for configuring your CRA-based project. Each section\ncontains a primary configuration area, `loaderOptions` or `configure`. These config areas are where you will make most\nof your detailed changes.\n\nYou, (or perhaps your IDE) may have noticed that the sections have duplicate keys, i.e. loaderOptions is listed twice\nin the sample config file.\n\nThe reason for this is to allow you to choose between object literal or functionally defined configuration choices.\nThere are a few reasons for this:\n\n1. Sometimes it may be faster to test a minor change using keys.\n1. Other times a functional definition is necessary to get the right configuration.\n1. While not common, a setting may **only** work if you use one or the other! See,\n   [devServer port example](https://github.com/gsoft-inc/craco/issues/172#issuecomment-651505730)\n\n#### A simple example of equivalent direct and functionally defined configuration settings:\n\n##### Direct configuration (object literal)\n\n```javascript\ndevServer: {\n    writeToDisk: true;\n}\n```\n\n##### Functionally defined configuration\n\n```javascript\ndevServer: (devServerConfig, { env, paths, proxy, allowedHost }) => {\n    devServerConfig.writeToDisk = true;\n    return devServerConfig;\n};\n```\n\n## API\n\nTo integrate with other tools, it's useful to have access to the configuration generated by CRACO.\n\nThat's what CRACO APIs are for. The current API support Jest and Webpack.\n\n### Jest API\n\nAccept a `cracoConfig`, a `context` object and `options`. The generated Jest config object is returned.\n\n> **Warning:** `createJestConfig` does NOT accept `cracoConfig` as a function. If your `craco.config.js` exposes a config\n> function, you have to call it yourself before passing it to `createJestConfig`.\n\n`createJestConfig(cracoConfig, context = {}, options = { verbose: false, config: null })`\n\nUsage:\n\n```javascript\n/* jest.config.js */\n\nconst { createJestConfig } = require('@craco/craco');\n\nconst cracoConfig = require('./craco.config.js');\nconst jestConfig = createJestConfig(cracoConfig);\n\nmodule.exports = jestConfig;\n```\n\n#### Examples\n\n-   [vscode-jest](https://github.com/sharegate/craco/tree/master/recipes/use-a-jest-config-file)\n\n### Webpack API\n\nYou can create Webpack DevServer and Production configurations using `createWebpackDevConfig` and `createWebpackProdConfig`.\n\nAccept a `cracoConfig`, a `context` object and `options`. The generated Webpack config object is returned.\n\n> **Warning:** Similar to `createJestConfig`, these functions do NOT accept `cracoConfig` as a function. If your\n> `craco.config.js` exposes a config function, you have to call it yourself before passing it further.\n\n`createWebpackDevConfig(cracoConfig, context = {}, options = { verbose: false, config: null })`\n\n`createWebpackProdConfig(cracoConfig, context = {}, options = { verbose: false, config: null })`\n\nUsage:\n\n```javascript\n/* webpack.config.js */\n\nconst { createWebpackDevConfig } = require('@craco/craco');\n\nconst cracoConfig = require('./craco.config.js');\nconst webpackConfig = createWebpackDevConfig(cracoConfig);\n\nmodule.exports = webpackConfig;\n```\n\n## Develop a Plugin\n\n### Hooks\n\nThere are four hooks available to a plugin:\n\n-   `overrideCracoConfig`: Let a plugin customize the config object before it's process by `craco`.\n-   `overrideWebpackConfig`: Let a plugin customize the `webpack` config that will be used by CRA.\n-   `overrideDevServerConfig`: Let a plugin customize the dev server config that will be used by CRA.\n-   `overrideJestConfig`: Let a plugin customize the `Jest` config that will be used by CRA.\n\n**Important:**\n\nEvery function must return the updated config object.\n\n#### overrideCracoConfig\n\nThe function `overrideCracoConfig` let a plugin override the config object **before** it's process by `craco`.\n\nIf a plugin define the function, it will be called with the config object read from the `craco.config.js` file provided\nby the consumer.\n\n_The function must return a valid config object, otherwise `craco` will throw an error._\n\nThe function will be called with a single object argument having the following structure:\n\n```javascript\n{\n    cracoConfig: \"The config object read from the craco.config.js file provided by the consumer\",\n    pluginOptions: \"The plugin options provided by the consumer\",\n    context: {\n        env: \"The current NODE_ENV (development, production, etc..)\",\n        paths: \"An object that contains all the paths used by CRA\"\n    }\n}\n```\n\n##### Example\n\nPlugin:\n\n```javascript\n/* craco-plugin-log-craco-config.js */\n\nmodule.exports = {\n    overrideCracoConfig: ({ cracoConfig, pluginOptions, context: { env, paths } }) => {\n        if (pluginOptions.preText) {\n            console.log(pluginOptions.preText);\n        }\n\n        console.log(JSON.stringify(cracoConfig, null, 4));\n\n        // Always return the config object.\n        return cracoConfig;\n    },\n};\n```\n\nRegistration (in a `craco.config.js` file):\n\n```javascript\nconst logCracoConfigPlugin = require(\"./craco-plugin-log-craco-config\");\n\nmodule.exports = {\n    ...\n    plugins: [\n        { plugin: logCracoConfigPlugin, options: { preText: \"Will log the craco config:\" } }\n    ]\n};\n```\n\n#### overrideWebpackConfig\n\nThe function `overrideWebpackConfig` let a plugin override the `webpack` config object **after** it's been customized\nby `craco`.\n\n_The function must return a valid config object, otherwise `craco` will throw an error._\n\nThe function will be called with a single object argument having the following structure:\n\n```javascript\n{\n    webpackConfig: \"The webpack config object already customized by craco\",\n    cracoConfig: \"The configuration object read from the craco.config.js file provided by the consumer\",\n    pluginOptions: \"The plugin options provided by the consumer\",\n    context: {\n        env: \"The current NODE_ENV (development, production, etc..)\",\n        paths: \"An object that contains all the paths used by CRA\"\n    }\n}\n```\n\n##### Example\n\nPlugin:\n\n```javascript\n/* craco-plugin-log-webpack-config.js */\n\nmodule.exports = {\n    overrideWebpackConfig: ({ webpackConfig, cracoConfig, pluginOptions, context: { env, paths } }) => {\n        if (pluginOptions.preText) {\n            console.log(pluginOptions.preText);\n        }\n\n        console.log(JSON.stringify(webpackConfig, null, 4));\n\n        // Always return the config object.\n        return webpackConfig;\n    },\n};\n```\n\nRegistration (in a `craco.config.js` file):\n\n```javascript\nconst logWebpackConfigPlugin = require(\"./craco-plugin-log-webpack-config\");\n\nmodule.exports = {\n    ...\n    plugins: [\n        { plugin: logWebpackConfigPlugin, options: { preText: \"Will log the webpack config:\" } }\n    ]\n};\n```\n\n#### overrideDevServerConfig\n\nThe function `overrideDevServerConfig` let a plugin override the dev server config object **after** it's been customized\nby `craco`.\n\n_The function must return a valid config object, otherwise `craco` will throw an error._\n\nThe function will be called with a single object argument having the following structure:\n\n```javascript\n{\n    devServerConfig: \"The dev server config object already customized by craco\",\n    cracoConfig: \"The configuration object read from the craco.config.js file provided by the consumer\",\n    pluginOptions: \"The plugin options provided by the consumer\",\n    context: {\n        env: \"The current NODE_ENV (development, production, etc..)\",\n        paths: \"An object that contains all the paths used by CRA\",\n        allowedHost: \"Provided by CRA\"\n    }\n}\n```\n\n##### Example\n\nPlugin:\n\n```javascript\n/* craco-plugin-log-dev-server-config.js */\n\nmodule.exports = {\n    overrideDevServerConfig: ({\n        devServerConfig,\n        cracoConfig,\n        pluginOptions,\n        context: { env, paths, allowedHost },\n    }) => {\n        if (pluginOptions.preText) {\n            console.log(pluginOptions.preText);\n        }\n\n        console.log(JSON.stringify(devServerConfig, null, 4));\n\n        // Always return the config object.\n        return devServerConfig;\n    },\n};\n```\n\nRegistration (in a `craco.config.js` file):\n\n```javascript\nconst logDevServerConfigPlugin = require(\"./craco-plugin-log-dev-server-config\");\n\nmodule.exports = {\n    ...\n    plugins: [\n        { plugin: logDevServerConfigPlugin, options: { preText: \"Will log the dev server config:\" } }\n    ]\n};\n```\n\n#### overrideJestConfig\n\nThe function `overrideJestConfig` let a plugin override the `Jest` config object **after** it's been customized by\n`craco`.\n\n_The function must return a valid config object, otherwise `craco` will throw an error._\n\nThe function will be called with a single object argument having the following structure:\n\n```javascript\n{\n    jestConfig: \"The Jest config object already customized by craco\",\n    cracoConfig: \"The configuration object read from the craco.config.js file provided by the consumer\",\n    pluginOptions: \"The plugin options provided by the consumer\",\n    context: {\n        env: \"The current NODE_ENV (development, production, etc..)\",\n        paths: \"An object that contains all the paths used by CRA\",\n        resolve: \"Provided by CRA\",\n        rootDir: \"Provided by CRA\"\n    }\n}\n```\n\n##### Example\n\nPlugin:\n\n```javascript\n/* craco-plugin-log-jest-config.js */\n\nmodule.exports = {\n    overrideJestConfig: ({ jestConfig, cracoConfig, pluginOptions, context: { env, paths, resolve, rootDir } }) => {\n        if (pluginOptions.preText) {\n            console.log(pluginOptions.preText);\n        }\n\n        console.log(JSON.stringify(jestConfig, null, 4));\n\n        // Always return the config object.\n        return jestConfig;\n    },\n};\n```\n\nRegistration (in a `craco.config.js` file):\n\n```javascript\nconst logJestConfigPlugin = require(\"./craco-plugin-log-jest-config\");\n\nmodule.exports = {\n    ...\n    plugins: [\n        { plugin: logJestConfigPlugin, options: { preText: \"Will log the Jest config:\" } }\n    ]\n};\n```\n\n### Utility Functions\n\nA few utility functions are provided by CRACO to help you develop a plugin:\n\n-   `getLoader`\n-   `getLoaders`\n-   `removeLoaders`\n-   `addBeforeLoader`\n-   `addBeforeLoaders`\n-   `addAfterLoader`\n-   `addAfterLoaders`\n-   `getPlugin`\n-   `removePlugins`\n-   `addPlugins`\n-   `throwUnexpectedConfigError`\n\n```javascript\nconst {\n    getLoader,\n    getLoaders,\n    removeLoaders,\n    loaderByName,\n    getPlugin,\n    removePlugins,\n    addPlugins,\n    pluginByName,\n    throwUnexpectedConfigError,\n} = require('@craco/craco');\n```\n\n#### getLoader\n\nRetrieve the **first** loader that match the specified criteria from the webpack config.\n\nReturns:\n\n```javascript\n{\n    isFound: true | false,\n    match: {\n        loader,\n        parent,\n        index\n    }\n}\n```\n\nUsage:\n\n```javascript\nconst { getLoader, loaderByName } = require('@craco/craco');\n\nconst { isFound, match } = getLoader(webpackConfig, loaderByName('eslint-loader'));\n\nif (isFound) {\n    // do stuff...\n}\n```\n\n#### getLoaders\n\nRetrieve **all** the loaders that match the specified criteria from the webpack config.\n\nReturns:\n\n```javascript\n{\n    hasFoundAny: true | false,\n    matches: [\n        {\n            loader,\n            parent,\n            index\n        }\n    ]\n}\n```\n\nUsage:\n\n```javascript\nconst { getLoaders, loaderByName } = require('@craco/craco');\n\nconst { hasFoundAny, matches } = getLoaders(webpackConfig, loaderByName('babel-loader'));\n\nif (hasFoundAny) {\n    matches.forEach((x) => {\n        // do stuff...\n    });\n}\n```\n\n#### removeLoaders\n\nRemove **all** the loaders that match the specified criteria from the webpack config.\n\nReturns:\n\n```javascript\n{\n    hasRemovedAny: true | false,\n    removedCount: int\n}\n```\n\nUsage:\n\n```javascript\nconst { removeLoaders, loaderByName } = require('@craco/craco');\n\nremoveLoaders(webpackConfig, loaderByName('eslint-loader'));\n```\n\n#### addBeforeLoader\n\nAdd a new _loader_ **before** the loader that match specified criteria to the webpack config.\n\nReturns:\n\n```javascript\n{\n    isAdded: true | false;\n}\n```\n\nUsage:\n\n```javascript\nconst { addBeforeLoader, loaderByName } = require('@craco/craco');\n\nconst myNewWebpackLoader = {\n    loader: require.resolve('tslint-loader'),\n};\n\naddBeforeLoader(webpackConfig, loaderByName('eslint-loader'), myNewWebpackLoader);\n```\n\n#### addBeforeLoaders\n\nAdd a new _loader_ **before** all the loaders that match specified criteria to the webpack config.\n\nReturns:\n\n```javascript\n{\n    isAdded: true | false,\n    addedCount: int\n}\n```\n\nUsage:\n\n```javascript\nconst { addBeforeLoaders, loaderByName } = require('@craco/craco');\n\nconst myNewWebpackLoader = {\n    loader: require.resolve('tslint-loader'),\n};\n\naddBeforeLoaders(webpackConfig, loaderByName('eslint-loader'), myNewWebpackLoader);\n```\n\n#### addAfterLoader\n\nAdd a new _loader_ **after** the loader that match specified criteria to the webpack config.\n\nReturns:\n\n```javascript\n{\n    isAdded: true | false;\n}\n```\n\nUsage:\n\n```javascript\nconst { addAfterLoader, loaderByName } = require('@craco/craco');\n\nconst myNewWebpackLoader = {\n    loader: require.resolve('tslint-loader'),\n};\n\naddAfterLoader(webpackConfig, loaderByName('eslint-loader'), myNewWebpackLoader);\n```\n\n#### addAfterLoaders\n\nAdd a new _loader_ **after** all the loaders that match specified criteria to the webpack config.\n\nReturns:\n\n```javascript\n{\n    isAdded: true | false,\n    addedCount: int\n}\n```\n\nUsage:\n\n```javascript\nconst { addAfterLoaders, loaderByName } = require('@craco/craco');\n\nconst myNewWebpackLoader = {\n    loader: require.resolve('tslint-loader'),\n};\n\naddAfterLoaders(webpackConfig, loaderByName('eslint-loader'), myNewWebpackLoader);\n```\n\n#### getPlugin\n\nRetrieve the **first** plugin that match the specified criteria from the webpack config.\n\nReturns:\n\n```javascript\n{\n    isFound: true | false,\n    match: {...} // the webpack plugin\n}\n```\n\nUsage:\n\n```javascript\nconst { getPlugin, pluginByName } = require('@craco/craco');\n\nconst { isFound, match } = getPlugin(webpackConfig, pluginByName('ESLintWebpackPlugin'));\n\nif (isFound) {\n    // do stuff...\n}\n```\n\n#### removePlugins\n\nRemove **all** the plugins that match the specified criteria from the webpack config.\n\nReturns:\n\n```javascript\n{\n    hasRemovedAny::true | false, removedCount::int;\n}\n```\n\nUsage:\n\n```javascript\nconst { removePlugins, pluginByName } = require('@craco/craco');\n\nremovePlugins(webpackConfig, pluginByName('ESLintWebpackPlugin'));\n```\n\n#### addPlugins\n\nAdd new _plugins_ to the webpack config.\n\nUsage:\n\n```javascript\nconst { addPlugins } = require('@craco/craco');\n\nconst myNewWebpackPlugin = require.resolve('ESLintWebpackPlugin');\n\naddPlugins(webpackConfig, [myNewWebpackPlugin]);\naddPlugins(webpackConfig, [[myNewWebpackPlugin, 'append']]);\naddPlugins(webpackConfig, [[myNewWebpackPlugin, 'prepend']]);\n```\n\n#### throwUnexpectedConfigError\n\nThrow an error if the webpack configuration changes and does not match your expectations. (For example, `getLoader`\ncannot find a loader and `isFound` is `false`.) `create-react-app` might update the structure of their webpack config,\nso it is very important to show a helpful error message when something breaks.\n\nRaises an error and crashes Node.js:\n\n```bash\n$ yarn start\nyarn run v1.12.3\n$ craco start\n/path/to/your/app/craco.config.js:23\n            throw new Error(\n            ^\n\n    Error: Can't find eslint-loader in the webpack config!\n\n    This error probably occurred because you updated react-scripts or craco. Please try updating craco-less to the latest version:\n\n       $ yarn upgrade craco-less\n\n    Or:\n\n       $ npm update craco-less\n\n    If that doesn't work, craco-less needs to be fixed to support the latest version.\n    Please check to see if there's already an issue in the ndbroadbent/craco-less repo:\n\n       * https://github.com/ndbroadbent/craco-less/issues?q=is%3Aissue+webpack+eslint-loader\n\n    If not, please open an issue and we'll take a look. (Or you can send a PR!)\n\n    You might also want to look for related issues in the craco and create-react-app repos:\n\n       * https://github.com/sharegate/craco/issues?q=is%3Aissue+webpack+eslint-loader\n       * https://github.com/facebook/create-react-app/issues?q=is%3Aissue+webpack+eslint-loader\n\n    at throwUnexpectedConfigError (/path/to/your/app/craco.config.js:23:19)\n    ...\n```\n\nUsage:\n\n```javascript\nconst { getLoader, loaderByName, throwUnexpectedConfigError } = require('@craco/craco');\n\n// Create a helper function if you need to call this multiple times\nconst throwError = (message, githubIssueQuery) =>\n    throwUnexpectedConfigError({\n        packageName: 'craco-less',\n        githubRepo: 'ndbroadbent/craco-less',\n        message,\n        githubIssueQuery,\n    });\n\nconst { isFound, match } = getLoader(webpackConfig, loaderByName('eslint-loader'));\n\nif (!isFound) {\n    throwError(\"Can't find eslint-loader in the webpack config!\", 'webpack+eslint-loader');\n}\n```\n\nOptions:\n\n```javascript\n{\n    message: \"An error message explaining what went wrong\",\n    packageName: \"NPM package name\",\n    githubRepo: \"GitHub repo where people can open an issue. Format: username/repo\",\n    githubIssueQuery: \"Search string to find related issues\"\n}\n```\n\n> Only `message` is required.\n\n## Backward Compatibility\n\nCRACO 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.\n\n| react-scripts Version | CRACO Version |\n| --------------------- | ------------: |\n| react-scripts < 4.0.0 |         5.8.0 |\n\n## Debugging\n\n### Verbose Logging\n\nTo activate **verbose** logging specify the CLI option `--verbose`\n\n```javascript\n/* package.json */\n\n{\n    \"scripts\": {\n        \"start\": \"craco start --verbose\"\n    }\n}\n```\n\n## License\n\nCopyright © 2020, Groupe Sharegate inc. This code is licensed under the Apache License, Version 2.0. You may obtain a\ncopy of this license at https://github.com/gsoft-inc/gsoft-license/blob/master/LICENSE.\n","readmeFilename":"README.md","gitHead":"60f930067d0cbf299e87685b244e1516558efa27","_id":"@craco/craco@7.0.0-alpha.4","_nodeVersion":"18.1.0","_npmVersion":"8.12.1","dist":{"integrity":"sha512-RwDbbQRNLzmyi5rIvJCDSt/4/lbStcSJYRKRvMRiqGMv2eGwX+BmLdEJBhnvxRDC/O7IejENooc0yHsi3xk35Q==","shasum":"7516a8c5bb81923564e50fd43c1115c91c4e2e87","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-7.0.0-alpha.4.tgz","fileCount":3,"unpackedSize":44777,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC3rn52Ne0PNrbCgfkotHLlFZT6VouttwAnswAbbJwtvgIhAPdGKc6hxuO3e+HUXov0c4zpPwHv4BmD8E9LOEbc8E4P"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiu9rmACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmotmw//VJGSp4w9LinYAg7RJ6mmNeiZWiMD7g+JS8EbKs69iYzNI1TR\r\nrBaV2f1/4aC0K2NUgo9n+9xjI9l58dnSIoPyAHJ19+v5k8s1OYeUgfKJH3uX\r\nas7il8L/zkB7Q0mavkGbziiJWdO/Lc9zxolqyE+2npRuebAidD8N7k56kaNx\r\nqzoCVBsQkiswVjc4Sfpakg21VacQxdS0bUc2zY+6TigTx6+aJxxYRVJHWMSx\r\nuYmtl8UNsYCK02VzTF5LoYMHdaRQ3bxoX/vQt2W62Akk9x3A0ZxJs1bkgfQH\r\nQ0harhn2jpsvNJWTBZIMMrqX0cNWLCIXNW6j3EQEybZDPlpe/8rqzvqZyQik\r\nFJNM4zJDY4ZJai2w1ZFxjj/O9vn5RE5JKSMZ0zbvct7/uBD0nNIm/uGvIyz0\r\nphmis5vSzK7VtBypzDDjTgEj9EOU9TytZ92LNsqyvwsjUGMi7wl1QQhyvtG6\r\nvKNfnIDcipEBZcTr6VYABD9Z7FcMUqijx0ES7Cqy6yLDWo75F+S3MBE+P4X6\r\n4/F9tznNZNUP3vNTWq30b/TzjcbTVC2SqkKLxUlStSbIateBJnQLZqOEe+Ql\r\n6vQZNyFeTUcAkFx4lG5aju3C2uxEivqCMHKYdBfDZM30AHYfW/jD94iqx/kC\r\n8rLa+cc1rXpoH6hSVmLpEFtj/WVTuLL0W8c=\r\n=3rS/\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"anonymous","email":"dilan@dilanxd.com"},"directories":{},"maintainers":[{"name":"anonymous","email":"dilan@dilanxd.com"},{"name":"anonymous","email":"pa.lafrance@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_7.0.0-alpha.4_1656478438157_0.39430738709471"},"_hasShrinkwrap":false},"7.0.0-alpha.5":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app.","version":"7.0.0-alpha.5","scripts":{"prepublishOnly":"tsc"},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/gsoft-inc/craco.git"},"keywords":["react","create-react-app","cra"],"contributors":[{"name":"Groupe Sharegate inc."},{"name":"Dilan Nair","url":"https://www.dilanxd.com"}],"license":"Apache-2.0","bugs":{"url":"https://github.com/gsoft-inc/craco/issues"},"homepage":"https://github.com/gsoft-inc/craco","engines":{"node":">=6"},"main":"dist/index.js","types":"dist/index.d.ts","bin":{"craco":"dist/bin/craco.js"},"peerDependencies":{"react-scripts":"^5.0.0"},"devDependencies":{"@babel/types":"^7.18.4","@jest/types":"^28.1.1","@types/cross-spawn":"^6.0.2","@types/eslint":"^8.4.3","@types/lodash":"^4.14.182","@types/semver":"^7.3.10","@types/webpack":"^5.28.0","eslint-webpack-plugin":"^3.2.0","react-scripts":"5.*","typescript":"^4.7.4"},"dependencies":{"autoprefixer":"^10.4.7","cosmiconfig":"^7.0.1","cosmiconfig-typescript-loader":"^2.0.2","cross-spawn":"^7.0.3","lodash":"^4.17.21","semver":"^7.3.7","webpack-merge":"^5.8.0"},"readme":"# CRACO\n\n[![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)\n\n**C**reate **R**eact **A**pp **C**onfiguration **O**verride is an easy and comprehensible configuration layer for create-react-app.\n\nGet 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.\n\nAll you have to do is create your app using [create-react-app](https://github.com/facebook/create-react-app/) and customize the configuration file.\n\n## Support\n\n-   Create React App (CRA) 4.\\*\n-   Yarn\n-   Yarn Workspace\n-   NPM\n-   Lerna (with or without hoisting)\n-   Custom `react-scripts` version\n\n## Documentation\n\n-   [Installation](#installation) - How to install and setup CRACO.\n-   [Configuration](#configuration) - How to customize your CRA installation with CRACO.\n    -   [Configuration File](#configuration-file)\n    -   [Configuration Helpers](#configuration-helpers)\n    -   [Exporting your Configuration](#exporting-your-configuration)\n    -   [Setting a Custom Location for the configuration file](#setting-a-custom-location-for-cracoconfigjs)\n-   [CRA toolchain for Beginners](#cra-toolchain-for-beginners)\n    -   [Notes on CRA Configurations and Problem Solving](#notes-on-cra-configurations-and-problem-solving)\n    -   [Ejecting CRA to Learn](#ejecting-cra-to-learn)\n    -   [Direct Versus Functional Config Definitions](#direct-object-literal-versus-functional-config-definitions)\n-   [API](#api) - CRACO APIs for Jest and Webpack.\n    -   [Jest API](#jest-api)\n    -   [Webpack API](#webpack-api)\n-   [Recipes](https://github.com/sharegate/craco/tree/master/recipes) – Short recipes for common use cases.\n-   [Available Plugins](https://github.com/sharegate/craco#community-maintained-plugins) - Plugins maintained by the community.\n-   [Develop a Plugin](#develop-a-plugin) - How to develop a plugin for CRACO.\n-   [Backward Compatibility](#backward-compatibility)\n-   [Debugging](#debugging)\n-   [License](#license)\n\n## Preface\n\n### Acknowledgements\n\nWe 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.\n\nThe configuration style of this plugin has been greatly influenced by [Vue CLI](https://cli.vuejs.org/guide/).\n\n### Fair Warning\n\nBy 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.\n\n## Installation\n\nInstall the latest version of the package from npm:\n\n```bash\n$ npm i @craco/craco\n```\n\n> _Alternatively, you can install the latest alpha build:_\n>\n> ```bash\n> $ npm i @craco/craco@alpha\n> ```\n>\n> _However, you should be aware that these versions are experimental._\n\nCreate a `craco.config.js` file in the root directory and [configure CRACO](#configuration):\n\n```\nmy-app\n├── node_modules\n├── craco.config.js\n└── package.json\n```\n\nUpdate the existing calls to `react-scripts` in the `scripts` section of your `package.json` file to use the `craco` CLI:\n\n```diff\n/* package.json */\n\n\"scripts\": {\n-   \"start\": \"react-scripts start\",\n+   \"start\": \"craco start\",\n-   \"build\": \"react-scripts build\",\n+   \"build\": \"craco build\"\n-   \"test\": \"react-scripts test\",\n+   \"test\": \"craco test\"\n}\n```\n\nStart your app for development:\n\n```bash\n$ npm start\n```\n\nOr build your app:\n\n```bash\n$ npm run build\n```\n\n## Configuration\n\nCRACO 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.\n\nIf there are multiple configuration files in the same directory, CRACO will only use one. The priority order is:\n\n1. `package.json`\n1. `craco.config.ts`\n1. `craco.config.js`\n1. `.cracorc.ts`\n1. `.cracorc.js`\n1. `.cracorc`\n\n### Configuration File\n\nBelow 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).\n\nSome sections have a `mode` property. When this is available there are 2 possible values:\n\n-   `extends`: the provided configuration will extends the CRA settings (**default mode**)\n-   `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.\n\n```javascript\nconst { when, whenDev, whenProd, whenTest, ESLINT_MODES, POSTCSS_MODES } = require('@craco/craco');\n\nmodule.exports = {\n    reactScriptsVersion: 'react-scripts' /* (default value) */,\n    style: {\n        modules: {\n            localIdentName: '',\n        },\n        css: {\n            loaderOptions: {\n                /* Any css-loader configuration options: https://github.com/webpack-contrib/css-loader. */\n            },\n            loaderOptions: (cssLoaderOptions, { env, paths }) => {\n                return cssLoaderOptions;\n            },\n        },\n        sass: {\n            loaderOptions: {\n                /* Any sass-loader configuration options: https://github.com/webpack-contrib/sass-loader. */\n            },\n            loaderOptions: (sassLoaderOptions, { env, paths }) => {\n                return sassLoaderOptions;\n            },\n        },\n        postcss: {\n            mode: 'extends' /* (default value) */ || 'file',\n            plugins: [require('plugin-to-append')], // Additional plugins given in an array are appended to existing config.\n            plugins: (plugins) => [require('plugin-to-prepend')].concat(plugins), // Or you may use the function variant.\n            env: {\n                autoprefixer: {\n                    /* Any autoprefixer options: https://github.com/postcss/autoprefixer#options */\n                },\n                stage: 3 /* Any valid stages: https://cssdb.org/#staging-process. */,\n                features: {\n                    /* Any CSS features: https://preset-env.cssdb.org/features. */\n                },\n            },\n            loaderOptions: {\n                /* Any postcss-loader configuration options: https://github.com/postcss/postcss-loader. */\n            },\n            loaderOptions: (postcssLoaderOptions, { env, paths }) => {\n                return postcssLoaderOptions;\n            },\n        },\n    },\n    eslint: {\n        enable: true /* (default value) */,\n        mode: 'extends' /* (default value) */ || 'file',\n        configure: {\n            /* Any eslint configuration options: https://eslint.org/docs/user-guide/configuring */\n        },\n        configure: (eslintConfig, { env, paths }) => {\n            return eslintConfig;\n        },\n        pluginOptions: {\n            /* Any eslint plugin configuration options: https://github.com/webpack-contrib/eslint-webpack-plugin#options. */\n        },\n        pluginOptions: (eslintOptions, { env, paths }) => {\n            return eslintOptions;\n        },\n    },\n    babel: {\n        presets: [],\n        plugins: [],\n        loaderOptions: {\n            /* Any babel-loader configuration options: https://github.com/babel/babel-loader. */\n        },\n        loaderOptions: (babelLoaderOptions, { env, paths }) => {\n            return babelLoaderOptions;\n        },\n    },\n    typescript: {\n        enableTypeChecking: true /* (default value)  */,\n    },\n    webpack: {\n        alias: {},\n        plugins: {\n            add: [] /* An array of plugins */,\n            add: [\n                plugin1,\n                [plugin2, 'append'],\n                [plugin3, 'prepend'] /* Specify if plugin should be appended or prepended */,\n            ] /* An array of plugins */,\n            remove: [] /* An array of plugin constructor's names (i.e. \"StyleLintPlugin\", \"ESLintWebpackPlugin\" ) */,\n        },\n        configure: {\n            /* Any webpack configuration options: https://webpack.js.org/configuration */\n        },\n        configure: (webpackConfig, { env, paths }) => {\n            return webpackConfig;\n        },\n    },\n    jest: {\n        babel: {\n            addPresets: true /* (default value) */,\n            addPlugins: true /* (default value) */,\n        },\n        configure: {\n            /* Any Jest configuration options: https://jestjs.io/docs/en/configuration */\n        },\n        configure: (jestConfig, { env, paths, resolve, rootDir }) => {\n            return jestConfig;\n        },\n    },\n    devServer: {\n        /* Any devServer configuration options: https://webpack.js.org/configuration/dev-server/#devserver */\n    },\n    devServer: (devServerConfig, { env, paths, proxy, allowedHost }) => {\n        return devServerConfig;\n    },\n    plugins: [\n        {\n            plugin: {\n                overrideCracoConfig: ({ cracoConfig, pluginOptions, context: { env, paths } }) => {\n                    return cracoConfig;\n                },\n                overrideWebpackConfig: ({ webpackConfig, cracoConfig, pluginOptions, context: { env, paths } }) => {\n                    return webpackConfig;\n                },\n                overrideDevServerConfig: ({\n                    devServerConfig,\n                    cracoConfig,\n                    pluginOptions,\n                    context: { env, paths, proxy, allowedHost },\n                }) => {\n                    return devServerConfig;\n                },\n                overrideJestConfig: ({\n                    jestConfig,\n                    cracoConfig,\n                    pluginOptions,\n                    context: { env, paths, resolve, rootDir },\n                }) => {\n                    return jestConfig;\n                },\n            },\n            options: {},\n        },\n    ],\n};\n```\n\n### Configuration Helpers\n\nUsage for all \"when\" functions is the same, `whenDev, whenProd, whenTest` are shortcuts for `when`.\n\n`when(condition, fct, [unmetValue])`\n\nUsage:\n\n```javascript\nconst { when, whenDev } = require('@craco/craco');\n\nmodule.exports = {\n    eslint: {\n        mode: ESLINT_MODES.file,\n        configure: {\n            formatter: when(process.env.NODE_ENV === 'CI', require('eslint-formatter-vso')),\n        },\n    },\n    webpack: {\n        plugins: [new ConfigWebpackPlugin(), ...whenDev(() => [new CircularDependencyPlugin()], [])],\n    },\n};\n```\n\n### Exporting your Configuration\n\nYou can export your configuration as an **object literal**:\n\n```javascript\n/* craco.config.js */\n\nmodule.exports = {\n    ...\n}\n```\n\na **function**:\n\n```javascript\n/* craco.config.js */\n\nmodule.exports = function({ env }) {\n    return {\n        ...\n    };\n}\n```\n\na **promise** or an **async function**:\n\n```javascript\n/* craco.config.js */\n\nmodule.exports = async function({ env }) {\n    await ...\n\n    return {\n        ...\n    };\n}\n```\n\n### Setting a Custom Location for craco.config.js\n\nBoth options support a **relative** or an **absolute** path.\n\n**1- package.json** _(Recommended)_\n\nYou can change the location of the `craco.config.js` file by specifying a value for `cracoConfig` in your `package.json`\nfile.\n\n```javascript\n/* package.json */\n\n{\n    \"cracoConfig\": \"config/craco-config-with-custom-name.js\"\n}\n```\n\n**2- CLI** _(For backward compatibility)_\n\nYou can also change the location of the `craco.config.js` file by specifying the `--config` CLI option. _This option\ndoesn't support Babel with Jest_\n\n```javascript\n/* package.json */\n\n{\n    \"scripts\": {\n        \"start\": \"craco start --config config/craco-config-with-custom-name.js\"\n    }\n}\n```\n\n## CRA Toolchain for Beginners\n\n### Introduction to CRACO\n\nCreate React App ([CRA](https://github.com/facebook/create-react-app)) is intended to allow people to get started with\nwriting React apps quickly. It does this by packaging several key components with a solid default configuration.\n\nAfter 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.\n\nCRACO allows you to enjoy the recognizable project structure of CRA while changing detailed configuration settings of\neach component.\n\n### Notes on CRA Configurations and Problem Solving\n\nKeep in mind that there are _some_ configuration settings available to CRA without CRACO.\n\nGetting exactly what you want may involve a combination of making changes your CRACO configuration file and by using\nsome of the more limited _but still important_ settings available in Create React App.\n\nBefore jumping into customizing your _CRACO_ configuration, step back and think about each part of the problem you're\ntrying to solve. Be sure to review these resources on the CRA configuration, as it may save you time:\n\n-   [Important Environment Variables that Configure CRA](https://create-react-app.dev/docs/advanced-configuration)\n-   [Learn about using `postbuild` commands in `package.json`](https://stackoverflow.com/a/51818028/4028977)\n-   [Proxying API or other Requests](https://create-react-app.dev/docs/proxying-api-requests-in-development/), or \"how\n    to integrate CRA's dev server with a second backend\":\n    [problem statement](https://github.com/facebook/create-react-app/issues/147)\n-   [Search CRACO issues, for gotchas, hints and examples](https://github.com/gsoft-inc/craco/issues?q=is%3Aissue+sort%3Aupdated-desc)\n\n### Ejecting CRA to Learn\n\nAvoiding ejecting is a major goal for many CRACO users. However, if you're still learning toolchains and modern\nfrontend workflows, it may be helpful to create a sample ejected CRA project to see how the default CRA app configures\neach of the components.\n\nWhile [CRACO's sample configuration file](#configuration-file) inherits directly from CRA's default settings, seeing the default CRA config in\nthe ejected CRA file structure may give you useful perspective.\n\nYou may even want to try testing a change in the ejected app to better understand how it would be done with your CRACO\nconfig-based project.\n\n### Direct (object literal) Versus Functional Config Definitions\n\nThe [sample CRACO config file](#configuration-file) is meant to show possibilities for configuring your CRA-based project. Each section\ncontains a primary configuration area, `loaderOptions` or `configure`. These config areas are where you will make most\nof your detailed changes.\n\nYou, (or perhaps your IDE) may have noticed that the sections have duplicate keys, i.e. loaderOptions is listed twice\nin the sample config file.\n\nThe reason for this is to allow you to choose between object literal or functionally defined configuration choices.\nThere are a few reasons for this:\n\n1. Sometimes it may be faster to test a minor change using keys.\n1. Other times a functional definition is necessary to get the right configuration.\n1. While not common, a setting may **only** work if you use one or the other! See,\n   [devServer port example](https://github.com/gsoft-inc/craco/issues/172#issuecomment-651505730)\n\n#### A simple example of equivalent direct and functionally defined configuration settings:\n\n##### Direct configuration (object literal)\n\n```javascript\ndevServer: {\n    writeToDisk: true;\n}\n```\n\n##### Functionally defined configuration\n\n```javascript\ndevServer: (devServerConfig, { env, paths, proxy, allowedHost }) => {\n    devServerConfig.writeToDisk = true;\n    return devServerConfig;\n};\n```\n\n## API\n\nTo integrate with other tools, it's useful to have access to the configuration generated by CRACO.\n\nThat's what CRACO APIs are for. The current API support Jest and Webpack.\n\n### Jest API\n\nAccept a `cracoConfig`, a `context` object and `options`. The generated Jest config object is returned.\n\n> **Warning:** `createJestConfig` does NOT accept `cracoConfig` as a function. If your `craco.config.js` exposes a config\n> function, you have to call it yourself before passing it to `createJestConfig`.\n\n`createJestConfig(cracoConfig, context = {}, options = { verbose: false, config: null })`\n\nUsage:\n\n```javascript\n/* jest.config.js */\n\nconst { createJestConfig } = require('@craco/craco');\n\nconst cracoConfig = require('./craco.config.js');\nconst jestConfig = createJestConfig(cracoConfig);\n\nmodule.exports = jestConfig;\n```\n\n#### Examples\n\n-   [vscode-jest](https://github.com/sharegate/craco/tree/master/recipes/use-a-jest-config-file)\n\n### Webpack API\n\nYou can create Webpack DevServer and Production configurations using `createWebpackDevConfig` and `createWebpackProdConfig`.\n\nAccept a `cracoConfig`, a `context` object and `options`. The generated Webpack config object is returned.\n\n> **Warning:** Similar to `createJestConfig`, these functions do NOT accept `cracoConfig` as a function. If your\n> `craco.config.js` exposes a config function, you have to call it yourself before passing it further.\n\n`createWebpackDevConfig(cracoConfig, context = {}, options = { verbose: false, config: null })`\n\n`createWebpackProdConfig(cracoConfig, context = {}, options = { verbose: false, config: null })`\n\nUsage:\n\n```javascript\n/* webpack.config.js */\n\nconst { createWebpackDevConfig } = require('@craco/craco');\n\nconst cracoConfig = require('./craco.config.js');\nconst webpackConfig = createWebpackDevConfig(cracoConfig);\n\nmodule.exports = webpackConfig;\n```\n\n## Develop a Plugin\n\n### Hooks\n\nThere are four hooks available to a plugin:\n\n-   `overrideCracoConfig`: Let a plugin customize the config object before it's process by `craco`.\n-   `overrideWebpackConfig`: Let a plugin customize the `webpack` config that will be used by CRA.\n-   `overrideDevServerConfig`: Let a plugin customize the dev server config that will be used by CRA.\n-   `overrideJestConfig`: Let a plugin customize the `Jest` config that will be used by CRA.\n\n**Important:**\n\nEvery function must return the updated config object.\n\n#### overrideCracoConfig\n\nThe function `overrideCracoConfig` let a plugin override the config object **before** it's process by `craco`.\n\nIf a plugin define the function, it will be called with the config object read from the `craco.config.js` file provided\nby the consumer.\n\n_The function must return a valid config object, otherwise `craco` will throw an error._\n\nThe function will be called with a single object argument having the following structure:\n\n```javascript\n{\n    cracoConfig: \"The config object read from the craco.config.js file provided by the consumer\",\n    pluginOptions: \"The plugin options provided by the consumer\",\n    context: {\n        env: \"The current NODE_ENV (development, production, etc..)\",\n        paths: \"An object that contains all the paths used by CRA\"\n    }\n}\n```\n\n##### Example\n\nPlugin:\n\n```javascript\n/* craco-plugin-log-craco-config.js */\n\nmodule.exports = {\n    overrideCracoConfig: ({ cracoConfig, pluginOptions, context: { env, paths } }) => {\n        if (pluginOptions.preText) {\n            console.log(pluginOptions.preText);\n        }\n\n        console.log(JSON.stringify(cracoConfig, null, 4));\n\n        // Always return the config object.\n        return cracoConfig;\n    },\n};\n```\n\nRegistration (in a `craco.config.js` file):\n\n```javascript\nconst logCracoConfigPlugin = require(\"./craco-plugin-log-craco-config\");\n\nmodule.exports = {\n    ...\n    plugins: [\n        { plugin: logCracoConfigPlugin, options: { preText: \"Will log the craco config:\" } }\n    ]\n};\n```\n\n#### overrideWebpackConfig\n\nThe function `overrideWebpackConfig` let a plugin override the `webpack` config object **after** it's been customized\nby `craco`.\n\n_The function must return a valid config object, otherwise `craco` will throw an error._\n\nThe function will be called with a single object argument having the following structure:\n\n```javascript\n{\n    webpackConfig: \"The webpack config object already customized by craco\",\n    cracoConfig: \"The configuration object read from the craco.config.js file provided by the consumer\",\n    pluginOptions: \"The plugin options provided by the consumer\",\n    context: {\n        env: \"The current NODE_ENV (development, production, etc..)\",\n        paths: \"An object that contains all the paths used by CRA\"\n    }\n}\n```\n\n##### Example\n\nPlugin:\n\n```javascript\n/* craco-plugin-log-webpack-config.js */\n\nmodule.exports = {\n    overrideWebpackConfig: ({ webpackConfig, cracoConfig, pluginOptions, context: { env, paths } }) => {\n        if (pluginOptions.preText) {\n            console.log(pluginOptions.preText);\n        }\n\n        console.log(JSON.stringify(webpackConfig, null, 4));\n\n        // Always return the config object.\n        return webpackConfig;\n    },\n};\n```\n\nRegistration (in a `craco.config.js` file):\n\n```javascript\nconst logWebpackConfigPlugin = require(\"./craco-plugin-log-webpack-config\");\n\nmodule.exports = {\n    ...\n    plugins: [\n        { plugin: logWebpackConfigPlugin, options: { preText: \"Will log the webpack config:\" } }\n    ]\n};\n```\n\n#### overrideDevServerConfig\n\nThe function `overrideDevServerConfig` let a plugin override the dev server config object **after** it's been customized\nby `craco`.\n\n_The function must return a valid config object, otherwise `craco` will throw an error._\n\nThe function will be called with a single object argument having the following structure:\n\n```javascript\n{\n    devServerConfig: \"The dev server config object already customized by craco\",\n    cracoConfig: \"The configuration object read from the craco.config.js file provided by the consumer\",\n    pluginOptions: \"The plugin options provided by the consumer\",\n    context: {\n        env: \"The current NODE_ENV (development, production, etc..)\",\n        paths: \"An object that contains all the paths used by CRA\",\n        allowedHost: \"Provided by CRA\"\n    }\n}\n```\n\n##### Example\n\nPlugin:\n\n```javascript\n/* craco-plugin-log-dev-server-config.js */\n\nmodule.exports = {\n    overrideDevServerConfig: ({\n        devServerConfig,\n        cracoConfig,\n        pluginOptions,\n        context: { env, paths, allowedHost },\n    }) => {\n        if (pluginOptions.preText) {\n            console.log(pluginOptions.preText);\n        }\n\n        console.log(JSON.stringify(devServerConfig, null, 4));\n\n        // Always return the config object.\n        return devServerConfig;\n    },\n};\n```\n\nRegistration (in a `craco.config.js` file):\n\n```javascript\nconst logDevServerConfigPlugin = require(\"./craco-plugin-log-dev-server-config\");\n\nmodule.exports = {\n    ...\n    plugins: [\n        { plugin: logDevServerConfigPlugin, options: { preText: \"Will log the dev server config:\" } }\n    ]\n};\n```\n\n#### overrideJestConfig\n\nThe function `overrideJestConfig` let a plugin override the `Jest` config object **after** it's been customized by\n`craco`.\n\n_The function must return a valid config object, otherwise `craco` will throw an error._\n\nThe function will be called with a single object argument having the following structure:\n\n```javascript\n{\n    jestConfig: \"The Jest config object already customized by craco\",\n    cracoConfig: \"The configuration object read from the craco.config.js file provided by the consumer\",\n    pluginOptions: \"The plugin options provided by the consumer\",\n    context: {\n        env: \"The current NODE_ENV (development, production, etc..)\",\n        paths: \"An object that contains all the paths used by CRA\",\n        resolve: \"Provided by CRA\",\n        rootDir: \"Provided by CRA\"\n    }\n}\n```\n\n##### Example\n\nPlugin:\n\n```javascript\n/* craco-plugin-log-jest-config.js */\n\nmodule.exports = {\n    overrideJestConfig: ({ jestConfig, cracoConfig, pluginOptions, context: { env, paths, resolve, rootDir } }) => {\n        if (pluginOptions.preText) {\n            console.log(pluginOptions.preText);\n        }\n\n        console.log(JSON.stringify(jestConfig, null, 4));\n\n        // Always return the config object.\n        return jestConfig;\n    },\n};\n```\n\nRegistration (in a `craco.config.js` file):\n\n```javascript\nconst logJestConfigPlugin = require(\"./craco-plugin-log-jest-config\");\n\nmodule.exports = {\n    ...\n    plugins: [\n        { plugin: logJestConfigPlugin, options: { preText: \"Will log the Jest config:\" } }\n    ]\n};\n```\n\n### Utility Functions\n\nA few utility functions are provided by CRACO to help you develop a plugin:\n\n-   `getLoader`\n-   `getLoaders`\n-   `removeLoaders`\n-   `addBeforeLoader`\n-   `addBeforeLoaders`\n-   `addAfterLoader`\n-   `addAfterLoaders`\n-   `getPlugin`\n-   `removePlugins`\n-   `addPlugins`\n-   `throwUnexpectedConfigError`\n\n```javascript\nconst {\n    getLoader,\n    getLoaders,\n    removeLoaders,\n    loaderByName,\n    getPlugin,\n    removePlugins,\n    addPlugins,\n    pluginByName,\n    throwUnexpectedConfigError,\n} = require('@craco/craco');\n```\n\n#### getLoader\n\nRetrieve the **first** loader that match the specified criteria from the webpack config.\n\nReturns:\n\n```javascript\n{\n    isFound: true | false,\n    match: {\n        loader,\n        parent,\n        index\n    }\n}\n```\n\nUsage:\n\n```javascript\nconst { getLoader, loaderByName } = require('@craco/craco');\n\nconst { isFound, match } = getLoader(webpackConfig, loaderByName('eslint-loader'));\n\nif (isFound) {\n    // do stuff...\n}\n```\n\n#### getLoaders\n\nRetrieve **all** the loaders that match the specified criteria from the webpack config.\n\nReturns:\n\n```javascript\n{\n    hasFoundAny: true | false,\n    matches: [\n        {\n            loader,\n            parent,\n            index\n        }\n    ]\n}\n```\n\nUsage:\n\n```javascript\nconst { getLoaders, loaderByName } = require('@craco/craco');\n\nconst { hasFoundAny, matches } = getLoaders(webpackConfig, loaderByName('babel-loader'));\n\nif (hasFoundAny) {\n    matches.forEach((x) => {\n        // do stuff...\n    });\n}\n```\n\n#### removeLoaders\n\nRemove **all** the loaders that match the specified criteria from the webpack config.\n\nReturns:\n\n```javascript\n{\n    hasRemovedAny: true | false,\n    removedCount: int\n}\n```\n\nUsage:\n\n```javascript\nconst { removeLoaders, loaderByName } = require('@craco/craco');\n\nremoveLoaders(webpackConfig, loaderByName('eslint-loader'));\n```\n\n#### addBeforeLoader\n\nAdd a new _loader_ **before** the loader that match specified criteria to the webpack config.\n\nReturns:\n\n```javascript\n{\n    isAdded: true | false;\n}\n```\n\nUsage:\n\n```javascript\nconst { addBeforeLoader, loaderByName } = require('@craco/craco');\n\nconst myNewWebpackLoader = {\n    loader: require.resolve('tslint-loader'),\n};\n\naddBeforeLoader(webpackConfig, loaderByName('eslint-loader'), myNewWebpackLoader);\n```\n\n#### addBeforeLoaders\n\nAdd a new _loader_ **before** all the loaders that match specified criteria to the webpack config.\n\nReturns:\n\n```javascript\n{\n    isAdded: true | false,\n    addedCount: int\n}\n```\n\nUsage:\n\n```javascript\nconst { addBeforeLoaders, loaderByName } = require('@craco/craco');\n\nconst myNewWebpackLoader = {\n    loader: require.resolve('tslint-loader'),\n};\n\naddBeforeLoaders(webpackConfig, loaderByName('eslint-loader'), myNewWebpackLoader);\n```\n\n#### addAfterLoader\n\nAdd a new _loader_ **after** the loader that match specified criteria to the webpack config.\n\nReturns:\n\n```javascript\n{\n    isAdded: true | false;\n}\n```\n\nUsage:\n\n```javascript\nconst { addAfterLoader, loaderByName } = require('@craco/craco');\n\nconst myNewWebpackLoader = {\n    loader: require.resolve('tslint-loader'),\n};\n\naddAfterLoader(webpackConfig, loaderByName('eslint-loader'), myNewWebpackLoader);\n```\n\n#### addAfterLoaders\n\nAdd a new _loader_ **after** all the loaders that match specified criteria to the webpack config.\n\nReturns:\n\n```javascript\n{\n    isAdded: true | false,\n    addedCount: int\n}\n```\n\nUsage:\n\n```javascript\nconst { addAfterLoaders, loaderByName } = require('@craco/craco');\n\nconst myNewWebpackLoader = {\n    loader: require.resolve('tslint-loader'),\n};\n\naddAfterLoaders(webpackConfig, loaderByName('eslint-loader'), myNewWebpackLoader);\n```\n\n#### getPlugin\n\nRetrieve the **first** plugin that match the specified criteria from the webpack config.\n\nReturns:\n\n```javascript\n{\n    isFound: true | false,\n    match: {...} // the webpack plugin\n}\n```\n\nUsage:\n\n```javascript\nconst { getPlugin, pluginByName } = require('@craco/craco');\n\nconst { isFound, match } = getPlugin(webpackConfig, pluginByName('ESLintWebpackPlugin'));\n\nif (isFound) {\n    // do stuff...\n}\n```\n\n#### removePlugins\n\nRemove **all** the plugins that match the specified criteria from the webpack config.\n\nReturns:\n\n```javascript\n{\n    hasRemovedAny::true | false, removedCount::int;\n}\n```\n\nUsage:\n\n```javascript\nconst { removePlugins, pluginByName } = require('@craco/craco');\n\nremovePlugins(webpackConfig, pluginByName('ESLintWebpackPlugin'));\n```\n\n#### addPlugins\n\nAdd new _plugins_ to the webpack config.\n\nUsage:\n\n```javascript\nconst { addPlugins } = require('@craco/craco');\n\nconst myNewWebpackPlugin = require.resolve('ESLintWebpackPlugin');\n\naddPlugins(webpackConfig, [myNewWebpackPlugin]);\naddPlugins(webpackConfig, [[myNewWebpackPlugin, 'append']]);\naddPlugins(webpackConfig, [[myNewWebpackPlugin, 'prepend']]);\n```\n\n#### throwUnexpectedConfigError\n\nThrow an error if the webpack configuration changes and does not match your expectations. (For example, `getLoader`\ncannot find a loader and `isFound` is `false`.) `create-react-app` might update the structure of their webpack config,\nso it is very important to show a helpful error message when something breaks.\n\nRaises an error and crashes Node.js:\n\n```bash\n$ yarn start\nyarn run v1.12.3\n$ craco start\n/path/to/your/app/craco.config.js:23\n            throw new Error(\n            ^\n\n    Error: Can't find eslint-loader in the webpack config!\n\n    This error probably occurred because you updated react-scripts or craco. Please try updating craco-less to the latest version:\n\n       $ yarn upgrade craco-less\n\n    Or:\n\n       $ npm update craco-less\n\n    If that doesn't work, craco-less needs to be fixed to support the latest version.\n    Please check to see if there's already an issue in the ndbroadbent/craco-less repo:\n\n       * https://github.com/ndbroadbent/craco-less/issues?q=is%3Aissue+webpack+eslint-loader\n\n    If not, please open an issue and we'll take a look. (Or you can send a PR!)\n\n    You might also want to look for related issues in the craco and create-react-app repos:\n\n       * https://github.com/sharegate/craco/issues?q=is%3Aissue+webpack+eslint-loader\n       * https://github.com/facebook/create-react-app/issues?q=is%3Aissue+webpack+eslint-loader\n\n    at throwUnexpectedConfigError (/path/to/your/app/craco.config.js:23:19)\n    ...\n```\n\nUsage:\n\n```javascript\nconst { getLoader, loaderByName, throwUnexpectedConfigError } = require('@craco/craco');\n\n// Create a helper function if you need to call this multiple times\nconst throwError = (message, githubIssueQuery) =>\n    throwUnexpectedConfigError({\n        packageName: 'craco-less',\n        githubRepo: 'ndbroadbent/craco-less',\n        message,\n        githubIssueQuery,\n    });\n\nconst { isFound, match } = getLoader(webpackConfig, loaderByName('eslint-loader'));\n\nif (!isFound) {\n    throwError(\"Can't find eslint-loader in the webpack config!\", 'webpack+eslint-loader');\n}\n```\n\nOptions:\n\n```javascript\n{\n    message: \"An error message explaining what went wrong\",\n    packageName: \"NPM package name\",\n    githubRepo: \"GitHub repo where people can open an issue. Format: username/repo\",\n    githubIssueQuery: \"Search string to find related issues\"\n}\n```\n\n> Only `message` is required.\n\n## Backward Compatibility\n\nCRACO 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.\n\n| react-scripts Version | CRACO Version |\n| --------------------- | ------------: |\n| react-scripts < 4.0.0 |         5.8.0 |\n\n## Debugging\n\n### Verbose Logging\n\nTo activate **verbose** logging specify the CLI option `--verbose`\n\n```javascript\n/* package.json */\n\n{\n    \"scripts\": {\n        \"start\": \"craco start --verbose\"\n    }\n}\n```\n\n## License\n\nCopyright © 2020, Groupe Sharegate inc. This code is licensed under the Apache License, Version 2.0. You may obtain a\ncopy of this license at https://github.com/gsoft-inc/gsoft-license/blob/master/LICENSE.\n","readmeFilename":"README.md","gitHead":"31fbbf23558c2c889211d2ce426fdcea3ba0ccea","_id":"@craco/craco@7.0.0-alpha.5","_nodeVersion":"18.1.0","_npmVersion":"8.12.1","dist":{"integrity":"sha512-nxpeACi9LefVbWXwOwDAo7kfc3JQQbFMXAeOa9ySBbONoM3hW3igg8fWO43uIBPr7FP1+1hSLGgVJJlUZZP1fw==","shasum":"029a81492ad62d5ea31957c0d31842f5e0c86b4f","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-7.0.0-alpha.5.tgz","fileCount":91,"unpackedSize":167428,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDzDbLWzK4e+3WyVIdanCKGgOje7nFdxAVnXk3kM6Mq0wIhALnhk7ryT4LybksVfaa+t0fokflscJdxki7DRWr3jAYe"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiu9w8ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmozbA/7BbGI/UbErXSxv4yG5IYV4RdbNIh69fWHQq9QvDvzB3zp675x\r\nnSqPXqOdcx82hAV7v6qN6u7BRJTi6WtTcQlf9rUXEDJiVO2g8cd5HJXagBk+\r\nteuv31S65FzR6YDyv6cDgtQba4pVuxUDqGTemy9+sVGdUKH8mSUHf3PqdeYn\r\nHTvdq9YPdAyEE90kqtElDmfrP7l96p/3Gm5he5z2XMLPGsw8IQNK+vkdnUU+\r\npgr2otpFeFOh0Is6NyYPlr+IFVk4ZeiSGkLhqppoevY0mwYD9Aox+5y4aT8g\r\nGsMz96iwPdorHJuHq3+ms/n6sfw8EohIsrhzzCEk+wzAwKmw7vQCR+gDaePt\r\nRpP+Y3htIqTarzHNyHjjd/RBKXOeCmqCF2IhQpgji6R/HNdelds+M2l4rJj2\r\nSMiKc65FqP66NelqMfBAs1Oy9HlD5v0PNf6cAw8RD3kG6pGDJ2nMj/v4rwh+\r\nLm+Vn0Ov57GCoE/l4Se4isL0GeIGnnzFOW5DI8rqJN+EHhOHoSIyjXE64d5h\r\n9z6kR5I67/XcgHWhsxV1IDWrN3s/08sumsqvisdB/ozY9BYpEpwnYfxCphXE\r\n1xPiJn5tsqLKuwqAx9ugOpox66a1toG9G7SvjbAxgnsEKmautxA8s3jsVrcD\r\nejgTKY49BTHLsN9w16expKa8GEH6QPkewng=\r\n=iJJd\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"anonymous","email":"dilan@dilanxd.com"},"directories":{},"maintainers":[{"name":"anonymous","email":"dilan@dilanxd.com"},{"name":"anonymous","email":"pa.lafrance@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_7.0.0-alpha.5_1656478780536_0.37633122566766564"},"_hasShrinkwrap":false},"7.0.0-alpha.6":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app.","version":"7.0.0-alpha.6","scripts":{"prepublishOnly":"tsc"},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/gsoft-inc/craco.git"},"keywords":["react","create-react-app","cra"],"contributors":[{"name":"Groupe Sharegate inc."},{"name":"Dilan Nair","url":"https://www.dilanxd.com"}],"license":"Apache-2.0","bugs":{"url":"https://github.com/gsoft-inc/craco/issues"},"homepage":"https://github.com/gsoft-inc/craco","engines":{"node":">=6"},"main":"dist/index.js","types":"dist/index.d.ts","bin":{"craco":"dist/bin/craco.js"},"peerDependencies":{"react-scripts":"^5.0.0"},"devDependencies":{"@babel/types":"^7.18.4","@jest/types":"^28.1.1","@types/cross-spawn":"^6.0.2","@types/eslint":"^8.4.3","@types/lodash":"^4.14.182","@types/semver":"^7.3.10","eslint-webpack-plugin":"^3.2.0","react-scripts":"5.*","typescript":"^4.7.4","webpack":"^5.73.0"},"dependencies":{"autoprefixer":"^10.4.7","cosmiconfig":"^7.0.1","cosmiconfig-typescript-loader":"^2.0.2","cross-spawn":"^7.0.3","lodash":"^4.17.21","semver":"^7.3.7","webpack-merge":"^5.8.0"},"readme":"# CRACO\n\n[![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)\n\n**C**reate **R**eact **A**pp **C**onfiguration **O**verride is an easy and comprehensible configuration layer for create-react-app.\n\nGet 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.\n\nAll you have to do is create your app using [create-react-app](https://github.com/facebook/create-react-app/) and customize the configuration file.\n\n## Support\n\n-   Create React App (CRA) 4.\\*\n-   Yarn\n-   Yarn Workspace\n-   NPM\n-   Lerna (with or without hoisting)\n-   Custom `react-scripts` version\n\n## Documentation\n\n-   [Installation](#installation) - How to install and setup CRACO.\n-   [Configuration](#configuration) - How to customize your CRA installation with CRACO.\n    -   [Configuration File](#configuration-file)\n    -   [Configuration Helpers](#configuration-helpers)\n    -   [Exporting your Configuration](#exporting-your-configuration)\n    -   [Setting a Custom Location for the configuration file](#setting-a-custom-location-for-cracoconfigjs)\n-   [CRA toolchain for Beginners](#cra-toolchain-for-beginners)\n    -   [Notes on CRA Configurations and Problem Solving](#notes-on-cra-configurations-and-problem-solving)\n    -   [Ejecting CRA to Learn](#ejecting-cra-to-learn)\n    -   [Direct Versus Functional Config Definitions](#direct-object-literal-versus-functional-config-definitions)\n-   [API](#api) - CRACO APIs for Jest and Webpack.\n    -   [Jest API](#jest-api)\n    -   [Webpack API](#webpack-api)\n-   [Recipes](https://github.com/sharegate/craco/tree/master/recipes) – Short recipes for common use cases.\n-   [Available Plugins](https://github.com/sharegate/craco#community-maintained-plugins) - Plugins maintained by the community.\n-   [Develop a Plugin](#develop-a-plugin) - How to develop a plugin for CRACO.\n-   [Backward Compatibility](#backward-compatibility)\n-   [Debugging](#debugging)\n-   [License](#license)\n\n## Preface\n\n### Acknowledgements\n\nWe 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.\n\nThe configuration style of this plugin has been greatly influenced by [Vue CLI](https://cli.vuejs.org/guide/).\n\n### Fair Warning\n\nBy 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.\n\n## Installation\n\nInstall the latest version of the package from npm:\n\n```bash\n$ npm i @craco/craco\n```\n\n> _Alternatively, you can install the latest alpha build:_\n>\n> ```bash\n> $ npm i @craco/craco@alpha\n> ```\n>\n> _However, you should be aware that these versions are experimental._\n\nCreate a `craco.config.js` file in the root directory and [configure CRACO](#configuration):\n\n```\nmy-app\n├── node_modules\n├── craco.config.js\n└── package.json\n```\n\nUpdate the existing calls to `react-scripts` in the `scripts` section of your `package.json` file to use the `craco` CLI:\n\n```diff\n/* package.json */\n\n\"scripts\": {\n-   \"start\": \"react-scripts start\",\n+   \"start\": \"craco start\",\n-   \"build\": \"react-scripts build\",\n+   \"build\": \"craco build\"\n-   \"test\": \"react-scripts test\",\n+   \"test\": \"craco test\"\n}\n```\n\nStart your app for development:\n\n```bash\n$ npm start\n```\n\nOr build your app:\n\n```bash\n$ npm run build\n```\n\n## Configuration\n\nCRACO 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.\n\nIf there are multiple configuration files in the same directory, CRACO will only use one. The priority order is:\n\n1. `package.json`\n1. `craco.config.ts`\n1. `craco.config.js`\n1. `.cracorc.ts`\n1. `.cracorc.js`\n1. `.cracorc`\n\n### Configuration File\n\nBelow 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).\n\nSome sections have a `mode` property. When this is available there are 2 possible values:\n\n-   `extends`: the provided configuration will extends the CRA settings (**default mode**)\n-   `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.\n\n```javascript\nconst { when, whenDev, whenProd, whenTest, ESLINT_MODES, POSTCSS_MODES } = require('@craco/craco');\n\nmodule.exports = {\n    reactScriptsVersion: 'react-scripts' /* (default value) */,\n    style: {\n        modules: {\n            localIdentName: '',\n        },\n        css: {\n            loaderOptions: {\n                /* Any css-loader configuration options: https://github.com/webpack-contrib/css-loader. */\n            },\n            loaderOptions: (cssLoaderOptions, { env, paths }) => {\n                return cssLoaderOptions;\n            },\n        },\n        sass: {\n            loaderOptions: {\n                /* Any sass-loader configuration options: https://github.com/webpack-contrib/sass-loader. */\n            },\n            loaderOptions: (sassLoaderOptions, { env, paths }) => {\n                return sassLoaderOptions;\n            },\n        },\n        postcss: {\n            mode: 'extends' /* (default value) */ || 'file',\n            plugins: [require('plugin-to-append')], // Additional plugins given in an array are appended to existing config.\n            plugins: (plugins) => [require('plugin-to-prepend')].concat(plugins), // Or you may use the function variant.\n            env: {\n                autoprefixer: {\n                    /* Any autoprefixer options: https://github.com/postcss/autoprefixer#options */\n                },\n                stage: 3 /* Any valid stages: https://cssdb.org/#staging-process. */,\n                features: {\n                    /* Any CSS features: https://preset-env.cssdb.org/features. */\n                },\n            },\n            loaderOptions: {\n                /* Any postcss-loader configuration options: https://github.com/postcss/postcss-loader. */\n            },\n            loaderOptions: (postcssLoaderOptions, { env, paths }) => {\n                return postcssLoaderOptions;\n            },\n        },\n    },\n    eslint: {\n        enable: true /* (default value) */,\n        mode: 'extends' /* (default value) */ || 'file',\n        configure: {\n            /* Any eslint configuration options: https://eslint.org/docs/user-guide/configuring */\n        },\n        configure: (eslintConfig, { env, paths }) => {\n            return eslintConfig;\n        },\n        pluginOptions: {\n            /* Any eslint plugin configuration options: https://github.com/webpack-contrib/eslint-webpack-plugin#options. */\n        },\n        pluginOptions: (eslintOptions, { env, paths }) => {\n            return eslintOptions;\n        },\n    },\n    babel: {\n        presets: [],\n        plugins: [],\n        loaderOptions: {\n            /* Any babel-loader configuration options: https://github.com/babel/babel-loader. */\n        },\n        loaderOptions: (babelLoaderOptions, { env, paths }) => {\n            return babelLoaderOptions;\n        },\n    },\n    typescript: {\n        enableTypeChecking: true /* (default value)  */,\n    },\n    webpack: {\n        alias: {},\n        plugins: {\n            add: [] /* An array of plugins */,\n            add: [\n                plugin1,\n                [plugin2, 'append'],\n                [plugin3, 'prepend'] /* Specify if plugin should be appended or prepended */,\n            ] /* An array of plugins */,\n            remove: [] /* An array of plugin constructor's names (i.e. \"StyleLintPlugin\", \"ESLintWebpackPlugin\" ) */,\n        },\n        configure: {\n            /* Any webpack configuration options: https://webpack.js.org/configuration */\n        },\n        configure: (webpackConfig, { env, paths }) => {\n            return webpackConfig;\n        },\n    },\n    jest: {\n        babel: {\n            addPresets: true /* (default value) */,\n            addPlugins: true /* (default value) */,\n        },\n        configure: {\n            /* Any Jest configuration options: https://jestjs.io/docs/en/configuration */\n        },\n        configure: (jestConfig, { env, paths, resolve, rootDir }) => {\n            return jestConfig;\n        },\n    },\n    devServer: {\n        /* Any devServer configuration options: https://webpack.js.org/configuration/dev-server/#devserver */\n    },\n    devServer: (devServerConfig, { env, paths, proxy, allowedHost }) => {\n        return devServerConfig;\n    },\n    plugins: [\n        {\n            plugin: {\n                overrideCracoConfig: ({ cracoConfig, pluginOptions, context: { env, paths } }) => {\n                    return cracoConfig;\n                },\n                overrideWebpackConfig: ({ webpackConfig, cracoConfig, pluginOptions, context: { env, paths } }) => {\n                    return webpackConfig;\n                },\n                overrideDevServerConfig: ({\n                    devServerConfig,\n                    cracoConfig,\n                    pluginOptions,\n                    context: { env, paths, proxy, allowedHost },\n                }) => {\n                    return devServerConfig;\n                },\n                overrideJestConfig: ({\n                    jestConfig,\n                    cracoConfig,\n                    pluginOptions,\n                    context: { env, paths, resolve, rootDir },\n                }) => {\n                    return jestConfig;\n                },\n            },\n            options: {},\n        },\n    ],\n};\n```\n\n### Configuration Helpers\n\nUsage for all \"when\" functions is the same, `whenDev, whenProd, whenTest` are shortcuts for `when`.\n\n`when(condition, fct, [unmetValue])`\n\nUsage:\n\n```javascript\nconst { when, whenDev } = require('@craco/craco');\n\nmodule.exports = {\n    eslint: {\n        mode: ESLINT_MODES.file,\n        configure: {\n            formatter: when(process.env.NODE_ENV === 'CI', require('eslint-formatter-vso')),\n        },\n    },\n    webpack: {\n        plugins: [new ConfigWebpackPlugin(), ...whenDev(() => [new CircularDependencyPlugin()], [])],\n    },\n};\n```\n\n### Exporting your Configuration\n\nYou can export your configuration as an **object literal**:\n\n```javascript\n/* craco.config.js */\n\nmodule.exports = {\n    ...\n}\n```\n\na **function**:\n\n```javascript\n/* craco.config.js */\n\nmodule.exports = function({ env }) {\n    return {\n        ...\n    };\n}\n```\n\na **promise** or an **async function**:\n\n```javascript\n/* craco.config.js */\n\nmodule.exports = async function({ env }) {\n    await ...\n\n    return {\n        ...\n    };\n}\n```\n\n### Setting a Custom Location for craco.config.js\n\nBoth options support a **relative** or an **absolute** path.\n\n**1- package.json** _(Recommended)_\n\nYou can change the location of the `craco.config.js` file by specifying a value for `cracoConfig` in your `package.json`\nfile.\n\n```javascript\n/* package.json */\n\n{\n    \"cracoConfig\": \"config/craco-config-with-custom-name.js\"\n}\n```\n\n**2- CLI** _(For backward compatibility)_\n\nYou can also change the location of the `craco.config.js` file by specifying the `--config` CLI option. _This option\ndoesn't support Babel with Jest_\n\n```javascript\n/* package.json */\n\n{\n    \"scripts\": {\n        \"start\": \"craco start --config config/craco-config-with-custom-name.js\"\n    }\n}\n```\n\n## CRA Toolchain for Beginners\n\n### Introduction to CRACO\n\nCreate React App ([CRA](https://github.com/facebook/create-react-app)) is intended to allow people to get started with\nwriting React apps quickly. It does this by packaging several key components with a solid default configuration.\n\nAfter 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.\n\nCRACO allows you to enjoy the recognizable project structure of CRA while changing detailed configuration settings of\neach component.\n\n### Notes on CRA Configurations and Problem Solving\n\nKeep in mind that there are _some_ configuration settings available to CRA without CRACO.\n\nGetting exactly what you want may involve a combination of making changes your CRACO configuration file and by using\nsome of the more limited _but still important_ settings available in Create React App.\n\nBefore jumping into customizing your _CRACO_ configuration, step back and think about each part of the problem you're\ntrying to solve. Be sure to review these resources on the CRA configuration, as it may save you time:\n\n-   [Important Environment Variables that Configure CRA](https://create-react-app.dev/docs/advanced-configuration)\n-   [Learn about using `postbuild` commands in `package.json`](https://stackoverflow.com/a/51818028/4028977)\n-   [Proxying API or other Requests](https://create-react-app.dev/docs/proxying-api-requests-in-development/), or \"how\n    to integrate CRA's dev server with a second backend\":\n    [problem statement](https://github.com/facebook/create-react-app/issues/147)\n-   [Search CRACO issues, for gotchas, hints and examples](https://github.com/gsoft-inc/craco/issues?q=is%3Aissue+sort%3Aupdated-desc)\n\n### Ejecting CRA to Learn\n\nAvoiding ejecting is a major goal for many CRACO users. However, if you're still learning toolchains and modern\nfrontend workflows, it may be helpful to create a sample ejected CRA project to see how the default CRA app configures\neach of the components.\n\nWhile [CRACO's sample configuration file](#configuration-file) inherits directly from CRA's default settings, seeing the default CRA config in\nthe ejected CRA file structure may give you useful perspective.\n\nYou may even want to try testing a change in the ejected app to better understand how it would be done with your CRACO\nconfig-based project.\n\n### Direct (object literal) Versus Functional Config Definitions\n\nThe [sample CRACO config file](#configuration-file) is meant to show possibilities for configuring your CRA-based project. Each section\ncontains a primary configuration area, `loaderOptions` or `configure`. These config areas are where you will make most\nof your detailed changes.\n\nYou, (or perhaps your IDE) may have noticed that the sections have duplicate keys, i.e. loaderOptions is listed twice\nin the sample config file.\n\nThe reason for this is to allow you to choose between object literal or functionally defined configuration choices.\nThere are a few reasons for this:\n\n1. Sometimes it may be faster to test a minor change using keys.\n1. Other times a functional definition is necessary to get the right configuration.\n1. While not common, a setting may **only** work if you use one or the other! See,\n   [devServer port example](https://github.com/gsoft-inc/craco/issues/172#issuecomment-651505730)\n\n#### A simple example of equivalent direct and functionally defined configuration settings:\n\n##### Direct configuration (object literal)\n\n```javascript\ndevServer: {\n    writeToDisk: true;\n}\n```\n\n##### Functionally defined configuration\n\n```javascript\ndevServer: (devServerConfig, { env, paths, proxy, allowedHost }) => {\n    devServerConfig.writeToDisk = true;\n    return devServerConfig;\n};\n```\n\n## API\n\nTo integrate with other tools, it's useful to have access to the configuration generated by CRACO.\n\nThat's what CRACO APIs are for. The current API support Jest and Webpack.\n\n### Jest API\n\nAccept a `cracoConfig`, a `context` object and `options`. The generated Jest config object is returned.\n\n> **Warning:** `createJestConfig` does NOT accept `cracoConfig` as a function. If your `craco.config.js` exposes a config\n> function, you have to call it yourself before passing it to `createJestConfig`.\n\n`createJestConfig(cracoConfig, context = {}, options = { verbose: false, config: null })`\n\nUsage:\n\n```javascript\n/* jest.config.js */\n\nconst { createJestConfig } = require('@craco/craco');\n\nconst cracoConfig = require('./craco.config.js');\nconst jestConfig = createJestConfig(cracoConfig);\n\nmodule.exports = jestConfig;\n```\n\n#### Examples\n\n-   [vscode-jest](https://github.com/sharegate/craco/tree/master/recipes/use-a-jest-config-file)\n\n### Webpack API\n\nYou can create Webpack DevServer and Production configurations using `createWebpackDevConfig` and `createWebpackProdConfig`.\n\nAccept a `cracoConfig`, a `context` object and `options`. The generated Webpack config object is returned.\n\n> **Warning:** Similar to `createJestConfig`, these functions do NOT accept `cracoConfig` as a function. If your\n> `craco.config.js` exposes a config function, you have to call it yourself before passing it further.\n\n`createWebpackDevConfig(cracoConfig, context = {}, options = { verbose: false, config: null })`\n\n`createWebpackProdConfig(cracoConfig, context = {}, options = { verbose: false, config: null })`\n\nUsage:\n\n```javascript\n/* webpack.config.js */\n\nconst { createWebpackDevConfig } = require('@craco/craco');\n\nconst cracoConfig = require('./craco.config.js');\nconst webpackConfig = createWebpackDevConfig(cracoConfig);\n\nmodule.exports = webpackConfig;\n```\n\n## Develop a Plugin\n\n### Hooks\n\nThere are four hooks available to a plugin:\n\n-   `overrideCracoConfig`: Let a plugin customize the config object before it's process by `craco`.\n-   `overrideWebpackConfig`: Let a plugin customize the `webpack` config that will be used by CRA.\n-   `overrideDevServerConfig`: Let a plugin customize the dev server config that will be used by CRA.\n-   `overrideJestConfig`: Let a plugin customize the `Jest` config that will be used by CRA.\n\n**Important:**\n\nEvery function must return the updated config object.\n\n#### overrideCracoConfig\n\nThe function `overrideCracoConfig` let a plugin override the config object **before** it's process by `craco`.\n\nIf a plugin define the function, it will be called with the config object read from the `craco.config.js` file provided\nby the consumer.\n\n_The function must return a valid config object, otherwise `craco` will throw an error._\n\nThe function will be called with a single object argument having the following structure:\n\n```javascript\n{\n    cracoConfig: \"The config object read from the craco.config.js file provided by the consumer\",\n    pluginOptions: \"The plugin options provided by the consumer\",\n    context: {\n        env: \"The current NODE_ENV (development, production, etc..)\",\n        paths: \"An object that contains all the paths used by CRA\"\n    }\n}\n```\n\n##### Example\n\nPlugin:\n\n```javascript\n/* craco-plugin-log-craco-config.js */\n\nmodule.exports = {\n    overrideCracoConfig: ({ cracoConfig, pluginOptions, context: { env, paths } }) => {\n        if (pluginOptions.preText) {\n            console.log(pluginOptions.preText);\n        }\n\n        console.log(JSON.stringify(cracoConfig, null, 4));\n\n        // Always return the config object.\n        return cracoConfig;\n    },\n};\n```\n\nRegistration (in a `craco.config.js` file):\n\n```javascript\nconst logCracoConfigPlugin = require(\"./craco-plugin-log-craco-config\");\n\nmodule.exports = {\n    ...\n    plugins: [\n        { plugin: logCracoConfigPlugin, options: { preText: \"Will log the craco config:\" } }\n    ]\n};\n```\n\n#### overrideWebpackConfig\n\nThe function `overrideWebpackConfig` let a plugin override the `webpack` config object **after** it's been customized\nby `craco`.\n\n_The function must return a valid config object, otherwise `craco` will throw an error._\n\nThe function will be called with a single object argument having the following structure:\n\n```javascript\n{\n    webpackConfig: \"The webpack config object already customized by craco\",\n    cracoConfig: \"The configuration object read from the craco.config.js file provided by the consumer\",\n    pluginOptions: \"The plugin options provided by the consumer\",\n    context: {\n        env: \"The current NODE_ENV (development, production, etc..)\",\n        paths: \"An object that contains all the paths used by CRA\"\n    }\n}\n```\n\n##### Example\n\nPlugin:\n\n```javascript\n/* craco-plugin-log-webpack-config.js */\n\nmodule.exports = {\n    overrideWebpackConfig: ({ webpackConfig, cracoConfig, pluginOptions, context: { env, paths } }) => {\n        if (pluginOptions.preText) {\n            console.log(pluginOptions.preText);\n        }\n\n        console.log(JSON.stringify(webpackConfig, null, 4));\n\n        // Always return the config object.\n        return webpackConfig;\n    },\n};\n```\n\nRegistration (in a `craco.config.js` file):\n\n```javascript\nconst logWebpackConfigPlugin = require(\"./craco-plugin-log-webpack-config\");\n\nmodule.exports = {\n    ...\n    plugins: [\n        { plugin: logWebpackConfigPlugin, options: { preText: \"Will log the webpack config:\" } }\n    ]\n};\n```\n\n#### overrideDevServerConfig\n\nThe function `overrideDevServerConfig` let a plugin override the dev server config object **after** it's been customized\nby `craco`.\n\n_The function must return a valid config object, otherwise `craco` will throw an error._\n\nThe function will be called with a single object argument having the following structure:\n\n```javascript\n{\n    devServerConfig: \"The dev server config object already customized by craco\",\n    cracoConfig: \"The configuration object read from the craco.config.js file provided by the consumer\",\n    pluginOptions: \"The plugin options provided by the consumer\",\n    context: {\n        env: \"The current NODE_ENV (development, production, etc..)\",\n        paths: \"An object that contains all the paths used by CRA\",\n        allowedHost: \"Provided by CRA\"\n    }\n}\n```\n\n##### Example\n\nPlugin:\n\n```javascript\n/* craco-plugin-log-dev-server-config.js */\n\nmodule.exports = {\n    overrideDevServerConfig: ({\n        devServerConfig,\n        cracoConfig,\n        pluginOptions,\n        context: { env, paths, allowedHost },\n    }) => {\n        if (pluginOptions.preText) {\n            console.log(pluginOptions.preText);\n        }\n\n        console.log(JSON.stringify(devServerConfig, null, 4));\n\n        // Always return the config object.\n        return devServerConfig;\n    },\n};\n```\n\nRegistration (in a `craco.config.js` file):\n\n```javascript\nconst logDevServerConfigPlugin = require(\"./craco-plugin-log-dev-server-config\");\n\nmodule.exports = {\n    ...\n    plugins: [\n        { plugin: logDevServerConfigPlugin, options: { preText: \"Will log the dev server config:\" } }\n    ]\n};\n```\n\n#### overrideJestConfig\n\nThe function `overrideJestConfig` let a plugin override the `Jest` config object **after** it's been customized by\n`craco`.\n\n_The function must return a valid config object, otherwise `craco` will throw an error._\n\nThe function will be called with a single object argument having the following structure:\n\n```javascript\n{\n    jestConfig: \"The Jest config object already customized by craco\",\n    cracoConfig: \"The configuration object read from the craco.config.js file provided by the consumer\",\n    pluginOptions: \"The plugin options provided by the consumer\",\n    context: {\n        env: \"The current NODE_ENV (development, production, etc..)\",\n        paths: \"An object that contains all the paths used by CRA\",\n        resolve: \"Provided by CRA\",\n        rootDir: \"Provided by CRA\"\n    }\n}\n```\n\n##### Example\n\nPlugin:\n\n```javascript\n/* craco-plugin-log-jest-config.js */\n\nmodule.exports = {\n    overrideJestConfig: ({ jestConfig, cracoConfig, pluginOptions, context: { env, paths, resolve, rootDir } }) => {\n        if (pluginOptions.preText) {\n            console.log(pluginOptions.preText);\n        }\n\n        console.log(JSON.stringify(jestConfig, null, 4));\n\n        // Always return the config object.\n        return jestConfig;\n    },\n};\n```\n\nRegistration (in a `craco.config.js` file):\n\n```javascript\nconst logJestConfigPlugin = require(\"./craco-plugin-log-jest-config\");\n\nmodule.exports = {\n    ...\n    plugins: [\n        { plugin: logJestConfigPlugin, options: { preText: \"Will log the Jest config:\" } }\n    ]\n};\n```\n\n### Utility Functions\n\nA few utility functions are provided by CRACO to help you develop a plugin:\n\n-   `getLoader`\n-   `getLoaders`\n-   `removeLoaders`\n-   `addBeforeLoader`\n-   `addBeforeLoaders`\n-   `addAfterLoader`\n-   `addAfterLoaders`\n-   `getPlugin`\n-   `removePlugins`\n-   `addPlugins`\n-   `throwUnexpectedConfigError`\n\n```javascript\nconst {\n    getLoader,\n    getLoaders,\n    removeLoaders,\n    loaderByName,\n    getPlugin,\n    removePlugins,\n    addPlugins,\n    pluginByName,\n    throwUnexpectedConfigError,\n} = require('@craco/craco');\n```\n\n#### getLoader\n\nRetrieve the **first** loader that match the specified criteria from the webpack config.\n\nReturns:\n\n```javascript\n{\n    isFound: true | false,\n    match: {\n        loader,\n        parent,\n        index\n    }\n}\n```\n\nUsage:\n\n```javascript\nconst { getLoader, loaderByName } = require('@craco/craco');\n\nconst { isFound, match } = getLoader(webpackConfig, loaderByName('eslint-loader'));\n\nif (isFound) {\n    // do stuff...\n}\n```\n\n#### getLoaders\n\nRetrieve **all** the loaders that match the specified criteria from the webpack config.\n\nReturns:\n\n```javascript\n{\n    hasFoundAny: true | false,\n    matches: [\n        {\n            loader,\n            parent,\n            index\n        }\n    ]\n}\n```\n\nUsage:\n\n```javascript\nconst { getLoaders, loaderByName } = require('@craco/craco');\n\nconst { hasFoundAny, matches } = getLoaders(webpackConfig, loaderByName('babel-loader'));\n\nif (hasFoundAny) {\n    matches.forEach((x) => {\n        // do stuff...\n    });\n}\n```\n\n#### removeLoaders\n\nRemove **all** the loaders that match the specified criteria from the webpack config.\n\nReturns:\n\n```javascript\n{\n    hasRemovedAny: true | false,\n    removedCount: int\n}\n```\n\nUsage:\n\n```javascript\nconst { removeLoaders, loaderByName } = require('@craco/craco');\n\nremoveLoaders(webpackConfig, loaderByName('eslint-loader'));\n```\n\n#### addBeforeLoader\n\nAdd a new _loader_ **before** the loader that match specified criteria to the webpack config.\n\nReturns:\n\n```javascript\n{\n    isAdded: true | false;\n}\n```\n\nUsage:\n\n```javascript\nconst { addBeforeLoader, loaderByName } = require('@craco/craco');\n\nconst myNewWebpackLoader = {\n    loader: require.resolve('tslint-loader'),\n};\n\naddBeforeLoader(webpackConfig, loaderByName('eslint-loader'), myNewWebpackLoader);\n```\n\n#### addBeforeLoaders\n\nAdd a new _loader_ **before** all the loaders that match specified criteria to the webpack config.\n\nReturns:\n\n```javascript\n{\n    isAdded: true | false,\n    addedCount: int\n}\n```\n\nUsage:\n\n```javascript\nconst { addBeforeLoaders, loaderByName } = require('@craco/craco');\n\nconst myNewWebpackLoader = {\n    loader: require.resolve('tslint-loader'),\n};\n\naddBeforeLoaders(webpackConfig, loaderByName('eslint-loader'), myNewWebpackLoader);\n```\n\n#### addAfterLoader\n\nAdd a new _loader_ **after** the loader that match specified criteria to the webpack config.\n\nReturns:\n\n```javascript\n{\n    isAdded: true | false;\n}\n```\n\nUsage:\n\n```javascript\nconst { addAfterLoader, loaderByName } = require('@craco/craco');\n\nconst myNewWebpackLoader = {\n    loader: require.resolve('tslint-loader'),\n};\n\naddAfterLoader(webpackConfig, loaderByName('eslint-loader'), myNewWebpackLoader);\n```\n\n#### addAfterLoaders\n\nAdd a new _loader_ **after** all the loaders that match specified criteria to the webpack config.\n\nReturns:\n\n```javascript\n{\n    isAdded: true | false,\n    addedCount: int\n}\n```\n\nUsage:\n\n```javascript\nconst { addAfterLoaders, loaderByName } = require('@craco/craco');\n\nconst myNewWebpackLoader = {\n    loader: require.resolve('tslint-loader'),\n};\n\naddAfterLoaders(webpackConfig, loaderByName('eslint-loader'), myNewWebpackLoader);\n```\n\n#### getPlugin\n\nRetrieve the **first** plugin that match the specified criteria from the webpack config.\n\nReturns:\n\n```javascript\n{\n    isFound: true | false,\n    match: {...} // the webpack plugin\n}\n```\n\nUsage:\n\n```javascript\nconst { getPlugin, pluginByName } = require('@craco/craco');\n\nconst { isFound, match } = getPlugin(webpackConfig, pluginByName('ESLintWebpackPlugin'));\n\nif (isFound) {\n    // do stuff...\n}\n```\n\n#### removePlugins\n\nRemove **all** the plugins that match the specified criteria from the webpack config.\n\nReturns:\n\n```javascript\n{\n    hasRemovedAny::true | false, removedCount::int;\n}\n```\n\nUsage:\n\n```javascript\nconst { removePlugins, pluginByName } = require('@craco/craco');\n\nremovePlugins(webpackConfig, pluginByName('ESLintWebpackPlugin'));\n```\n\n#### addPlugins\n\nAdd new _plugins_ to the webpack config.\n\nUsage:\n\n```javascript\nconst { addPlugins } = require('@craco/craco');\n\nconst myNewWebpackPlugin = require.resolve('ESLintWebpackPlugin');\n\naddPlugins(webpackConfig, [myNewWebpackPlugin]);\naddPlugins(webpackConfig, [[myNewWebpackPlugin, 'append']]);\naddPlugins(webpackConfig, [[myNewWebpackPlugin, 'prepend']]);\n```\n\n#### throwUnexpectedConfigError\n\nThrow an error if the webpack configuration changes and does not match your expectations. (For example, `getLoader`\ncannot find a loader and `isFound` is `false`.) `create-react-app` might update the structure of their webpack config,\nso it is very important to show a helpful error message when something breaks.\n\nRaises an error and crashes Node.js:\n\n```bash\n$ yarn start\nyarn run v1.12.3\n$ craco start\n/path/to/your/app/craco.config.js:23\n            throw new Error(\n            ^\n\n    Error: Can't find eslint-loader in the webpack config!\n\n    This error probably occurred because you updated react-scripts or craco. Please try updating craco-less to the latest version:\n\n       $ yarn upgrade craco-less\n\n    Or:\n\n       $ npm update craco-less\n\n    If that doesn't work, craco-less needs to be fixed to support the latest version.\n    Please check to see if there's already an issue in the ndbroadbent/craco-less repo:\n\n       * https://github.com/ndbroadbent/craco-less/issues?q=is%3Aissue+webpack+eslint-loader\n\n    If not, please open an issue and we'll take a look. (Or you can send a PR!)\n\n    You might also want to look for related issues in the craco and create-react-app repos:\n\n       * https://github.com/sharegate/craco/issues?q=is%3Aissue+webpack+eslint-loader\n       * https://github.com/facebook/create-react-app/issues?q=is%3Aissue+webpack+eslint-loader\n\n    at throwUnexpectedConfigError (/path/to/your/app/craco.config.js:23:19)\n    ...\n```\n\nUsage:\n\n```javascript\nconst { getLoader, loaderByName, throwUnexpectedConfigError } = require('@craco/craco');\n\n// Create a helper function if you need to call this multiple times\nconst throwError = (message, githubIssueQuery) =>\n    throwUnexpectedConfigError({\n        packageName: 'craco-less',\n        githubRepo: 'ndbroadbent/craco-less',\n        message,\n        githubIssueQuery,\n    });\n\nconst { isFound, match } = getLoader(webpackConfig, loaderByName('eslint-loader'));\n\nif (!isFound) {\n    throwError(\"Can't find eslint-loader in the webpack config!\", 'webpack+eslint-loader');\n}\n```\n\nOptions:\n\n```javascript\n{\n    message: \"An error message explaining what went wrong\",\n    packageName: \"NPM package name\",\n    githubRepo: \"GitHub repo where people can open an issue. Format: username/repo\",\n    githubIssueQuery: \"Search string to find related issues\"\n}\n```\n\n> Only `message` is required.\n\n## Backward Compatibility\n\nCRACO 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.\n\n| react-scripts Version | CRACO Version |\n| --------------------- | ------------: |\n| react-scripts < 4.0.0 |         5.8.0 |\n\n## Debugging\n\n### Verbose Logging\n\nTo activate **verbose** logging specify the CLI option `--verbose`\n\n```javascript\n/* package.json */\n\n{\n    \"scripts\": {\n        \"start\": \"craco start --verbose\"\n    }\n}\n```\n\n## License\n\nCopyright © 2020, Groupe Sharegate inc. This code is licensed under the Apache License, Version 2.0. You may obtain a\ncopy of this license at https://github.com/gsoft-inc/gsoft-license/blob/master/LICENSE.\n","readmeFilename":"README.md","gitHead":"c5ccbf9b377665ce44ebfdc4a25a2d0a90cafa26","_id":"@craco/craco@7.0.0-alpha.6","_nodeVersion":"18.1.0","_npmVersion":"8.12.1","dist":{"integrity":"sha512-CoMVoa9lo7TS/flgNUgoU3V6MqhZcGpd+Q62sNEYx0o1VlXemMdR4DENZKZqXZDk/eS09HUJzike5N5bjsDYvA==","shasum":"8ce090bf854c6d3fc3a31012c70363f415c574d9","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-7.0.0-alpha.6.tgz","fileCount":95,"unpackedSize":175428,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCBFSqFNdCuh1w8kr1jgCNbAFUEtborLY2c9aGWC+gpxQIhALHoWwNyxSoJJ8iDCEUzUtT1QbAqW7y9OMLrPq9bQXA/"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJivMeRACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpI8Q//VUJB+1CfCHWGtVWRO092m1AssbE1jz1cBIeLteEZPqLbkAp3\r\nC+OxPy3FFu87Z3FsNHbfAU7BT4BXHHDEj8MBGxlopf0zj31JgkPx/N2GwDW+\r\nwRzlboVgyJPf4B7Mg5Y7b4ob04Tpu3gQ4ubeifp5aPHckD0Zv7CFlYXDzhsL\r\nPZFdUcalqB0G07G1pKzTSYtxPmX2KiBkurDHcWjTb/9O5f4fIogS/VzDw8p0\r\ne0IGjdpNf9zrK5lrSYHGUxgnk+G9IVXkKPKddgq4tysPMFjBfR6fkJzGqArs\r\nliQHqJK7P8SBfJ1IGPXdJz9POY1ZLaOWRFCIwDw6AIxmIvu9ao0hWbgnaSCL\r\nYMHLu5O+7OYgQyTvVX18xF5qHJfw+ZrRaGPYid9w2A11fcnchOeM2ySr+Tis\r\nNVKQiic+CDvImB80bMonBCQ7uRb5dhOOKolSKjLTBVnheDtn4zEsc4kKQuB+\r\nAQ0hSZeSWOjIBQQKdnHzaLBfau+8eDm7m9FDRZF5HiL1HLgpLwI4T2wm3pOc\r\n3fryoZSh2BaUcl+IGVTXOxAxGRII8O3aMGNw4ABR7Y95gQQt65YsCTj7IZPy\r\nCzj4qCKNI7SLNm6GpJfkXqzFfBSqlhFkPUvTHLZcje1/2n7CpjJiWWAPOnwg\r\nWq+M3hDR7hVqvq3ue5Px4jM1rCG7DVryN+8=\r\n=Ld14\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"anonymous","email":"dilan@dilanxd.com"},"directories":{},"maintainers":[{"name":"anonymous","email":"dilan@dilanxd.com"},{"name":"anonymous","email":"pa.lafrance@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_7.0.0-alpha.6_1656539024777_0.8643028192673525"},"_hasShrinkwrap":false},"6.4.4":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app.","version":"6.4.4","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/gsoft-inc/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/gsoft-inc/craco/issues"},"homepage":"https://github.com/gsoft-inc/craco","engines":{"node":">=6"},"bin":{"craco":"bin/craco.js"},"peerDependencies":{"react-scripts":"^4.0.0"},"devDependencies":{"react-scripts":"4.*"},"dependencies":{"cosmiconfig":"^7.0.1","cosmiconfig-typescript-loader":"^1.0.0","cross-spawn":"^7.0.0","lodash":"^4.17.15","semver":"^7.3.2","webpack-merge":"^4.2.2"},"gitHead":"df837e0e0bc414378e8b4f137ec265ac14ba7173","_id":"@craco/craco@6.4.4","_nodeVersion":"18.1.0","_npmVersion":"8.12.1","dist":{"integrity":"sha512-KkgsN1wVQq+RsmZecm7MCQStNPwB1mrzaE6Z9v/NSJT92DAq7XPwxaEpo0ox83DZHSMvqVbk8jeTYNJdr57WzQ==","shasum":"dbd899c19a668ec3960c1893f5ae24b874911a8f","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-6.4.4.tgz","fileCount":41,"unpackedSize":111396,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAEvi++JzaoWnpFl40Yz7Y6BhQJtmNmRatCVl7tI2gP6AiAy1L5rfy55uJ+OfC1SByQeKV96oPFYh88dMR/m0nO6aA=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiv1T3ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmodhw/+PlAlux5Xi0JaukgqTVYY3o5LPOUa8lpTIcOkAiZMFOTtBHVN\r\n+kFPDqjw3I2uQY2HW9XaOealoK4EI5JNcRUdNmUByJ+6Iq+h1ku1rg2bbC/Z\r\niH7BfSa5Yjnlj/AKkQfBglvHVZ5W+DEEKZmor/GHAMcPN1NL7eIUVfypc1eG\r\nRykEUPFmNKozdYowqEukBS59334/9eIXv1gt8HBIXkPrez6i+26yPVpvqDeM\r\nPmyO26Y9NShaAz9gyNpiC/uI3y4+yfGTCf1LnhNDFqKaZN4lcPIPqvLm9qFh\r\nxhnm84LwGqPkQlGWh+c+PfLJOvNy4nuM3dyfkp1Ub9lTX7M26IVGggb1ikpv\r\noJZR1hKp+h6by7SijkaCJQTm9NiKM0jkJPB+5Ef4of/XLnqLSqbv/UjjMgth\r\nAp7TChiop8MK8N6BYcr8w5pfGRXrVdL+HkrxPxrplyKAVeEYh2sZT42MaQiq\r\nG34mdlrAv6u1RlGj6QQcsIG77OkgOvnrmgwSaIrpTK58KpgS0hOYX46YKGES\r\neC9tWRtZY12ksSRXW+5bBfJmrQvhS8Rjbc+01MA2wBeoNFMZ8gK3/jmorshR\r\nqceRZT+1eWK7yjAa671kPhaUz9epyeYuLoUcnJOXuDWL1bVHgJdoZuzNWNYh\r\nkOWTt5wv+VnE2BvQIfOnAoCkIwEYIshVF9M=\r\n=khOx\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"anonymous","email":"dilan@dilanxd.com"},"directories":{},"maintainers":[{"name":"anonymous","email":"dilan@dilanxd.com"},{"name":"anonymous","email":"pa.lafrance@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_6.4.4_1656706295649_0.5615800957769015"},"_hasShrinkwrap":false},"7.0.0-alpha.7":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app.","version":"7.0.0-alpha.7","scripts":{"prepublishOnly":"tsc","test":"jest"},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/gsoft-inc/craco.git"},"keywords":["react","create-react-app","cra"],"contributors":[{"name":"Groupe Sharegate inc."},{"name":"Dilan Nair","url":"https://www.dilanxd.com"}],"license":"Apache-2.0","bugs":{"url":"https://github.com/gsoft-inc/craco/issues"},"homepage":"https://github.com/gsoft-inc/craco","engines":{"node":">=6"},"main":"dist/index.js","types":"dist/index.d.ts","bin":{"craco":"dist/bin/craco.js"},"peerDependencies":{"react-scripts":"^5.0.0"},"devDependencies":{"@babel/types":"^7.18.4","@jest/types":"^28.1.1","@types/cross-spawn":"^6.0.2","@types/eslint":"^8.4.3","@types/jest":"^28.1.3","@types/lodash":"^4.14.182","@types/semver":"^7.3.10","eslint-webpack-plugin":"^3.2.0","jest":"^28.1.2","react-scripts":"5.*","ts-jest":"^28.0.5","typescript":"^4.7.4","webpack":"^5.73.0"},"dependencies":{"autoprefixer":"^10.4.7","cosmiconfig":"^7.0.1","cosmiconfig-typescript-loader":"^2.0.2","cross-spawn":"^7.0.3","lodash":"^4.17.21","semver":"^7.3.7","webpack-merge":"^5.8.0"},"readme":"# CRACO\n\n[![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)\n\n**C**reate **R**eact **A**pp **C**onfiguration **O**verride is an easy and comprehensible configuration layer for create-react-app.\n\nGet 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.\n\nAll you have to do is create your app using [create-react-app](https://github.com/facebook/create-react-app/) and customize the configuration file.\n\n## Support\n\n-   Create React App (CRA) 4.\\*\n-   Yarn\n-   Yarn Workspace\n-   NPM\n-   Lerna (with or without hoisting)\n-   Custom `react-scripts` version\n\n## Documentation\n\n-   [Installation](#installation) - How to install and setup CRACO.\n-   [Configuration](#configuration) - How to customize your CRA installation with CRACO.\n    -   [Configuration File](#configuration-file)\n    -   [Configuration Helpers](#configuration-helpers)\n    -   [Exporting your Configuration](#exporting-your-configuration)\n    -   [Setting a Custom Location for the configuration file](#setting-a-custom-location-for-cracoconfigjs)\n-   [CRA toolchain for Beginners](#cra-toolchain-for-beginners)\n    -   [Notes on CRA Configurations and Problem Solving](#notes-on-cra-configurations-and-problem-solving)\n    -   [Ejecting CRA to Learn](#ejecting-cra-to-learn)\n    -   [Direct Versus Functional Config Definitions](#direct-object-literal-versus-functional-config-definitions)\n-   [API](#api) - CRACO APIs for Jest and Webpack.\n    -   [Jest API](#jest-api)\n    -   [Webpack API](#webpack-api)\n-   [Recipes](https://github.com/sharegate/craco/tree/master/recipes) – Short recipes for common use cases.\n-   [Available Plugins](https://github.com/sharegate/craco#community-maintained-plugins) - Plugins maintained by the community.\n-   [Develop a Plugin](#develop-a-plugin) - How to develop a plugin for CRACO.\n-   [Backward Compatibility](#backward-compatibility)\n-   [Debugging](#debugging)\n-   [License](#license)\n\n## Preface\n\n### Acknowledgements\n\nWe 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.\n\nThe configuration style of this plugin has been greatly influenced by [Vue CLI](https://cli.vuejs.org/guide/).\n\n### Fair Warning\n\nBy 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.\n\n## Installation\n\nInstall the latest version of the package from npm:\n\n```bash\n$ npm i @craco/craco\n```\n\n> _Alternatively, you can install the latest alpha build:_\n>\n> ```bash\n> $ npm i @craco/craco@alpha\n> ```\n>\n> _However, you should be aware that these versions are experimental._\n\nCreate a `craco.config.js` file in the root directory and [configure CRACO](#configuration):\n\n```\nmy-app\n├── node_modules\n├── craco.config.js\n└── package.json\n```\n\nUpdate the existing calls to `react-scripts` in the `scripts` section of your `package.json` file to use the `craco` CLI:\n\n```diff\n/* package.json */\n\n\"scripts\": {\n-   \"start\": \"react-scripts start\",\n+   \"start\": \"craco start\",\n-   \"build\": \"react-scripts build\",\n+   \"build\": \"craco build\"\n-   \"test\": \"react-scripts test\",\n+   \"test\": \"craco test\"\n}\n```\n\nStart your app for development:\n\n```bash\n$ npm start\n```\n\nOr build your app:\n\n```bash\n$ npm run build\n```\n\n## Configuration\n\nCRACO 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.\n\nIf there are multiple configuration files in the same directory, CRACO will only use one. The priority order is:\n\n1. `package.json`\n1. `craco.config.ts`\n1. `craco.config.js`\n1. `.cracorc.ts`\n1. `.cracorc.js`\n1. `.cracorc`\n\n### Configuration File\n\nBelow 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).\n\nSome sections have a `mode` property. When this is available there are 2 possible values:\n\n-   `extends`: the provided configuration will extends the CRA settings (**default mode**)\n-   `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.\n\n```javascript\nconst { when, whenDev, whenProd, whenTest, ESLINT_MODES, POSTCSS_MODES } = require('@craco/craco');\n\nmodule.exports = {\n    reactScriptsVersion: 'react-scripts' /* (default value) */,\n    style: {\n        modules: {\n            localIdentName: '',\n        },\n        css: {\n            loaderOptions: {\n                /* Any css-loader configuration options: https://github.com/webpack-contrib/css-loader. */\n            },\n            loaderOptions: (cssLoaderOptions, { env, paths }) => {\n                return cssLoaderOptions;\n            },\n        },\n        sass: {\n            loaderOptions: {\n                /* Any sass-loader configuration options: https://github.com/webpack-contrib/sass-loader. */\n            },\n            loaderOptions: (sassLoaderOptions, { env, paths }) => {\n                return sassLoaderOptions;\n            },\n        },\n        postcss: {\n            mode: 'extends' /* (default value) */ || 'file',\n            plugins: [require('plugin-to-append')], // Additional plugins given in an array are appended to existing config.\n            plugins: (plugins) => [require('plugin-to-prepend')].concat(plugins), // Or you may use the function variant.\n            env: {\n                autoprefixer: {\n                    /* Any autoprefixer options: https://github.com/postcss/autoprefixer#options */\n                },\n                stage: 3 /* Any valid stages: https://cssdb.org/#staging-process. */,\n                features: {\n                    /* Any CSS features: https://preset-env.cssdb.org/features. */\n                },\n            },\n            loaderOptions: {\n                /* Any postcss-loader configuration options: https://github.com/postcss/postcss-loader. */\n            },\n            loaderOptions: (postcssLoaderOptions, { env, paths }) => {\n                return postcssLoaderOptions;\n            },\n        },\n    },\n    eslint: {\n        enable: true /* (default value) */,\n        mode: 'extends' /* (default value) */ || 'file',\n        configure: {\n            /* Any eslint configuration options: https://eslint.org/docs/user-guide/configuring */\n        },\n        configure: (eslintConfig, { env, paths }) => {\n            return eslintConfig;\n        },\n        pluginOptions: {\n            /* Any eslint plugin configuration options: https://github.com/webpack-contrib/eslint-webpack-plugin#options. */\n        },\n        pluginOptions: (eslintOptions, { env, paths }) => {\n            return eslintOptions;\n        },\n    },\n    babel: {\n        presets: [],\n        plugins: [],\n        loaderOptions: {\n            /* Any babel-loader configuration options: https://github.com/babel/babel-loader. */\n        },\n        loaderOptions: (babelLoaderOptions, { env, paths }) => {\n            return babelLoaderOptions;\n        },\n    },\n    typescript: {\n        enableTypeChecking: true /* (default value)  */,\n    },\n    webpack: {\n        alias: {},\n        plugins: {\n            add: [] /* An array of plugins */,\n            add: [\n                plugin1,\n                [plugin2, 'append'],\n                [plugin3, 'prepend'] /* Specify if plugin should be appended or prepended */,\n            ] /* An array of plugins */,\n            remove: [] /* An array of plugin constructor's names (i.e. \"StyleLintPlugin\", \"ESLintWebpackPlugin\" ) */,\n        },\n        configure: {\n            /* Any webpack configuration options: https://webpack.js.org/configuration */\n        },\n        configure: (webpackConfig, { env, paths }) => {\n            return webpackConfig;\n        },\n    },\n    jest: {\n        babel: {\n            addPresets: true /* (default value) */,\n            addPlugins: true /* (default value) */,\n        },\n        configure: {\n            /* Any Jest configuration options: https://jestjs.io/docs/en/configuration */\n        },\n        configure: (jestConfig, { env, paths, resolve, rootDir }) => {\n            return jestConfig;\n        },\n    },\n    devServer: {\n        /* Any devServer configuration options: https://webpack.js.org/configuration/dev-server/#devserver */\n    },\n    devServer: (devServerConfig, { env, paths, proxy, allowedHost }) => {\n        return devServerConfig;\n    },\n    plugins: [\n        {\n            plugin: {\n                overrideCracoConfig: ({ cracoConfig, pluginOptions, context: { env, paths } }) => {\n                    return cracoConfig;\n                },\n                overrideWebpackConfig: ({ webpackConfig, cracoConfig, pluginOptions, context: { env, paths } }) => {\n                    return webpackConfig;\n                },\n                overrideDevServerConfig: ({\n                    devServerConfig,\n                    cracoConfig,\n                    pluginOptions,\n                    context: { env, paths, proxy, allowedHost },\n                }) => {\n                    return devServerConfig;\n                },\n                overrideJestConfig: ({\n                    jestConfig,\n                    cracoConfig,\n                    pluginOptions,\n                    context: { env, paths, resolve, rootDir },\n                }) => {\n                    return jestConfig;\n                },\n            },\n            options: {},\n        },\n    ],\n};\n```\n\n### Configuration Helpers\n\nUsage for all \"when\" functions is the same, `whenDev, whenProd, whenTest` are shortcuts for `when`.\n\n`when(condition, fct, [unmetValue])`\n\nUsage:\n\n```javascript\nconst { when, whenDev } = require('@craco/craco');\n\nmodule.exports = {\n    eslint: {\n        mode: ESLINT_MODES.file,\n        configure: {\n            formatter: when(process.env.NODE_ENV === 'CI', require('eslint-formatter-vso')),\n        },\n    },\n    webpack: {\n        plugins: [new ConfigWebpackPlugin(), ...whenDev(() => [new CircularDependencyPlugin()], [])],\n    },\n};\n```\n\n### Exporting your Configuration\n\nYou can export your configuration as an **object literal**:\n\n```javascript\n/* craco.config.js */\n\nmodule.exports = {\n    ...\n}\n```\n\na **function**:\n\n```javascript\n/* craco.config.js */\n\nmodule.exports = function({ env }) {\n    return {\n        ...\n    };\n}\n```\n\na **promise** or an **async function**:\n\n```javascript\n/* craco.config.js */\n\nmodule.exports = async function({ env }) {\n    await ...\n\n    return {\n        ...\n    };\n}\n```\n\n### Setting a Custom Location for craco.config.js\n\nBoth options support a **relative** or an **absolute** path.\n\n**1- package.json** _(Recommended)_\n\nYou can change the location of the `craco.config.js` file by specifying a value for `cracoConfig` in your `package.json`\nfile.\n\n```javascript\n/* package.json */\n\n{\n    \"cracoConfig\": \"config/craco-config-with-custom-name.js\"\n}\n```\n\n**2- CLI** _(For backward compatibility)_\n\nYou can also change the location of the `craco.config.js` file by specifying the `--config` CLI option. _This option\ndoesn't support Babel with Jest_\n\n```javascript\n/* package.json */\n\n{\n    \"scripts\": {\n        \"start\": \"craco start --config config/craco-config-with-custom-name.js\"\n    }\n}\n```\n\n## CRA Toolchain for Beginners\n\n### Introduction to CRACO\n\nCreate React App ([CRA](https://github.com/facebook/create-react-app)) is intended to allow people to get started with\nwriting React apps quickly. It does this by packaging several key components with a solid default configuration.\n\nAfter 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.\n\nCRACO allows you to enjoy the recognizable project structure of CRA while changing detailed configuration settings of\neach component.\n\n### Notes on CRA Configurations and Problem Solving\n\nKeep in mind that there are _some_ configuration settings available to CRA without CRACO.\n\nGetting exactly what you want may involve a combination of making changes your CRACO configuration file and by using\nsome of the more limited _but still important_ settings available in Create React App.\n\nBefore jumping into customizing your _CRACO_ configuration, step back and think about each part of the problem you're\ntrying to solve. Be sure to review these resources on the CRA configuration, as it may save you time:\n\n-   [Important Environment Variables that Configure CRA](https://create-react-app.dev/docs/advanced-configuration)\n-   [Learn about using `postbuild` commands in `package.json`](https://stackoverflow.com/a/51818028/4028977)\n-   [Proxying API or other Requests](https://create-react-app.dev/docs/proxying-api-requests-in-development/), or \"how\n    to integrate CRA's dev server with a second backend\":\n    [problem statement](https://github.com/facebook/create-react-app/issues/147)\n-   [Search CRACO issues, for gotchas, hints and examples](https://github.com/gsoft-inc/craco/issues?q=is%3Aissue+sort%3Aupdated-desc)\n\n### Ejecting CRA to Learn\n\nAvoiding ejecting is a major goal for many CRACO users. However, if you're still learning toolchains and modern\nfrontend workflows, it may be helpful to create a sample ejected CRA project to see how the default CRA app configures\neach of the components.\n\nWhile [CRACO's sample configuration file](#configuration-file) inherits directly from CRA's default settings, seeing the default CRA config in\nthe ejected CRA file structure may give you useful perspective.\n\nYou may even want to try testing a change in the ejected app to better understand how it would be done with your CRACO\nconfig-based project.\n\n### Direct (object literal) Versus Functional Config Definitions\n\nThe [sample CRACO config file](#configuration-file) is meant to show possibilities for configuring your CRA-based project. Each section\ncontains a primary configuration area, `loaderOptions` or `configure`. These config areas are where you will make most\nof your detailed changes.\n\nYou, (or perhaps your IDE) may have noticed that the sections have duplicate keys, i.e. loaderOptions is listed twice\nin the sample config file.\n\nThe reason for this is to allow you to choose between object literal or functionally defined configuration choices.\nThere are a few reasons for this:\n\n1. Sometimes it may be faster to test a minor change using keys.\n1. Other times a functional definition is necessary to get the right configuration.\n1. While not common, a setting may **only** work if you use one or the other! See,\n   [devServer port example](https://github.com/gsoft-inc/craco/issues/172#issuecomment-651505730)\n\n#### A simple example of equivalent direct and functionally defined configuration settings:\n\n##### Direct configuration (object literal)\n\n```javascript\ndevServer: {\n    writeToDisk: true;\n}\n```\n\n##### Functionally defined configuration\n\n```javascript\ndevServer: (devServerConfig, { env, paths, proxy, allowedHost }) => {\n    devServerConfig.writeToDisk = true;\n    return devServerConfig;\n};\n```\n\n## API\n\nTo integrate with other tools, it's useful to have access to the configuration generated by CRACO.\n\nThat's what CRACO APIs are for. The current API support Jest and Webpack.\n\n### Jest API\n\nAccept a `cracoConfig`, a `context` object and `options`. The generated Jest config object is returned.\n\n> **Warning:** `createJestConfig` does NOT accept `cracoConfig` as a function. If your `craco.config.js` exposes a config\n> function, you have to call it yourself before passing it to `createJestConfig`.\n\n`createJestConfig(cracoConfig, context = {}, options = { verbose: false, config: null })`\n\nUsage:\n\n```javascript\n/* jest.config.js */\n\nconst { createJestConfig } = require('@craco/craco');\n\nconst cracoConfig = require('./craco.config.js');\nconst jestConfig = createJestConfig(cracoConfig);\n\nmodule.exports = jestConfig;\n```\n\n#### Examples\n\n-   [vscode-jest](https://github.com/sharegate/craco/tree/master/recipes/use-a-jest-config-file)\n\n### Webpack API\n\nYou can create Webpack DevServer and Production configurations using `createWebpackDevConfig` and `createWebpackProdConfig`.\n\nAccept a `cracoConfig`, a `context` object and `options`. The generated Webpack config object is returned.\n\n> **Warning:** Similar to `createJestConfig`, these functions do NOT accept `cracoConfig` as a function. If your\n> `craco.config.js` exposes a config function, you have to call it yourself before passing it further.\n\n`createWebpackDevConfig(cracoConfig, context = {}, options = { verbose: false, config: null })`\n\n`createWebpackProdConfig(cracoConfig, context = {}, options = { verbose: false, config: null })`\n\nUsage:\n\n```javascript\n/* webpack.config.js */\n\nconst { createWebpackDevConfig } = require('@craco/craco');\n\nconst cracoConfig = require('./craco.config.js');\nconst webpackConfig = createWebpackDevConfig(cracoConfig);\n\nmodule.exports = webpackConfig;\n```\n\n## Develop a Plugin\n\n### Hooks\n\nThere are four hooks available to a plugin:\n\n-   `overrideCracoConfig`: Let a plugin customize the config object before it's process by `craco`.\n-   `overrideWebpackConfig`: Let a plugin customize the `webpack` config that will be used by CRA.\n-   `overrideDevServerConfig`: Let a plugin customize the dev server config that will be used by CRA.\n-   `overrideJestConfig`: Let a plugin customize the `Jest` config that will be used by CRA.\n\n**Important:**\n\nEvery function must return the updated config object.\n\n#### overrideCracoConfig\n\nThe function `overrideCracoConfig` let a plugin override the config object **before** it's process by `craco`.\n\nIf a plugin define the function, it will be called with the config object read from the `craco.config.js` file provided\nby the consumer.\n\n_The function must return a valid config object, otherwise `craco` will throw an error._\n\nThe function will be called with a single object argument having the following structure:\n\n```javascript\n{\n    cracoConfig: \"The config object read from the craco.config.js file provided by the consumer\",\n    pluginOptions: \"The plugin options provided by the consumer\",\n    context: {\n        env: \"The current NODE_ENV (development, production, etc..)\",\n        paths: \"An object that contains all the paths used by CRA\"\n    }\n}\n```\n\n##### Example\n\nPlugin:\n\n```javascript\n/* craco-plugin-log-craco-config.js */\n\nmodule.exports = {\n    overrideCracoConfig: ({ cracoConfig, pluginOptions, context: { env, paths } }) => {\n        if (pluginOptions.preText) {\n            console.log(pluginOptions.preText);\n        }\n\n        console.log(JSON.stringify(cracoConfig, null, 4));\n\n        // Always return the config object.\n        return cracoConfig;\n    },\n};\n```\n\nRegistration (in a `craco.config.js` file):\n\n```javascript\nconst logCracoConfigPlugin = require(\"./craco-plugin-log-craco-config\");\n\nmodule.exports = {\n    ...\n    plugins: [\n        { plugin: logCracoConfigPlugin, options: { preText: \"Will log the craco config:\" } }\n    ]\n};\n```\n\n#### overrideWebpackConfig\n\nThe function `overrideWebpackConfig` let a plugin override the `webpack` config object **after** it's been customized\nby `craco`.\n\n_The function must return a valid config object, otherwise `craco` will throw an error._\n\nThe function will be called with a single object argument having the following structure:\n\n```javascript\n{\n    webpackConfig: \"The webpack config object already customized by craco\",\n    cracoConfig: \"The configuration object read from the craco.config.js file provided by the consumer\",\n    pluginOptions: \"The plugin options provided by the consumer\",\n    context: {\n        env: \"The current NODE_ENV (development, production, etc..)\",\n        paths: \"An object that contains all the paths used by CRA\"\n    }\n}\n```\n\n##### Example\n\nPlugin:\n\n```javascript\n/* craco-plugin-log-webpack-config.js */\n\nmodule.exports = {\n    overrideWebpackConfig: ({ webpackConfig, cracoConfig, pluginOptions, context: { env, paths } }) => {\n        if (pluginOptions.preText) {\n            console.log(pluginOptions.preText);\n        }\n\n        console.log(JSON.stringify(webpackConfig, null, 4));\n\n        // Always return the config object.\n        return webpackConfig;\n    },\n};\n```\n\nRegistration (in a `craco.config.js` file):\n\n```javascript\nconst logWebpackConfigPlugin = require(\"./craco-plugin-log-webpack-config\");\n\nmodule.exports = {\n    ...\n    plugins: [\n        { plugin: logWebpackConfigPlugin, options: { preText: \"Will log the webpack config:\" } }\n    ]\n};\n```\n\n#### overrideDevServerConfig\n\nThe function `overrideDevServerConfig` let a plugin override the dev server config object **after** it's been customized\nby `craco`.\n\n_The function must return a valid config object, otherwise `craco` will throw an error._\n\nThe function will be called with a single object argument having the following structure:\n\n```javascript\n{\n    devServerConfig: \"The dev server config object already customized by craco\",\n    cracoConfig: \"The configuration object read from the craco.config.js file provided by the consumer\",\n    pluginOptions: \"The plugin options provided by the consumer\",\n    context: {\n        env: \"The current NODE_ENV (development, production, etc..)\",\n        paths: \"An object that contains all the paths used by CRA\",\n        allowedHost: \"Provided by CRA\"\n    }\n}\n```\n\n##### Example\n\nPlugin:\n\n```javascript\n/* craco-plugin-log-dev-server-config.js */\n\nmodule.exports = {\n    overrideDevServerConfig: ({\n        devServerConfig,\n        cracoConfig,\n        pluginOptions,\n        context: { env, paths, allowedHost },\n    }) => {\n        if (pluginOptions.preText) {\n            console.log(pluginOptions.preText);\n        }\n\n        console.log(JSON.stringify(devServerConfig, null, 4));\n\n        // Always return the config object.\n        return devServerConfig;\n    },\n};\n```\n\nRegistration (in a `craco.config.js` file):\n\n```javascript\nconst logDevServerConfigPlugin = require(\"./craco-plugin-log-dev-server-config\");\n\nmodule.exports = {\n    ...\n    plugins: [\n        { plugin: logDevServerConfigPlugin, options: { preText: \"Will log the dev server config:\" } }\n    ]\n};\n```\n\n#### overrideJestConfig\n\nThe function `overrideJestConfig` let a plugin override the `Jest` config object **after** it's been customized by\n`craco`.\n\n_The function must return a valid config object, otherwise `craco` will throw an error._\n\nThe function will be called with a single object argument having the following structure:\n\n```javascript\n{\n    jestConfig: \"The Jest config object already customized by craco\",\n    cracoConfig: \"The configuration object read from the craco.config.js file provided by the consumer\",\n    pluginOptions: \"The plugin options provided by the consumer\",\n    context: {\n        env: \"The current NODE_ENV (development, production, etc..)\",\n        paths: \"An object that contains all the paths used by CRA\",\n        resolve: \"Provided by CRA\",\n        rootDir: \"Provided by CRA\"\n    }\n}\n```\n\n##### Example\n\nPlugin:\n\n```javascript\n/* craco-plugin-log-jest-config.js */\n\nmodule.exports = {\n    overrideJestConfig: ({ jestConfig, cracoConfig, pluginOptions, context: { env, paths, resolve, rootDir } }) => {\n        if (pluginOptions.preText) {\n            console.log(pluginOptions.preText);\n        }\n\n        console.log(JSON.stringify(jestConfig, null, 4));\n\n        // Always return the config object.\n        return jestConfig;\n    },\n};\n```\n\nRegistration (in a `craco.config.js` file):\n\n```javascript\nconst logJestConfigPlugin = require(\"./craco-plugin-log-jest-config\");\n\nmodule.exports = {\n    ...\n    plugins: [\n        { plugin: logJestConfigPlugin, options: { preText: \"Will log the Jest config:\" } }\n    ]\n};\n```\n\n### Utility Functions\n\nA few utility functions are provided by CRACO to help you develop a plugin:\n\n-   `getLoader`\n-   `getLoaders`\n-   `removeLoaders`\n-   `addBeforeLoader`\n-   `addBeforeLoaders`\n-   `addAfterLoader`\n-   `addAfterLoaders`\n-   `getPlugin`\n-   `removePlugins`\n-   `addPlugins`\n-   `throwUnexpectedConfigError`\n\n```javascript\nconst {\n    getLoader,\n    getLoaders,\n    removeLoaders,\n    loaderByName,\n    getPlugin,\n    removePlugins,\n    addPlugins,\n    pluginByName,\n    throwUnexpectedConfigError,\n} = require('@craco/craco');\n```\n\n#### getLoader\n\nRetrieve the **first** loader that match the specified criteria from the webpack config.\n\nReturns:\n\n```javascript\n{\n    isFound: true | false,\n    match: {\n        loader,\n        parent,\n        index\n    }\n}\n```\n\nUsage:\n\n```javascript\nconst { getLoader, loaderByName } = require('@craco/craco');\n\nconst { isFound, match } = getLoader(webpackConfig, loaderByName('eslint-loader'));\n\nif (isFound) {\n    // do stuff...\n}\n```\n\n#### getLoaders\n\nRetrieve **all** the loaders that match the specified criteria from the webpack config.\n\nReturns:\n\n```javascript\n{\n    hasFoundAny: true | false,\n    matches: [\n        {\n            loader,\n            parent,\n            index\n        }\n    ]\n}\n```\n\nUsage:\n\n```javascript\nconst { getLoaders, loaderByName } = require('@craco/craco');\n\nconst { hasFoundAny, matches } = getLoaders(webpackConfig, loaderByName('babel-loader'));\n\nif (hasFoundAny) {\n    matches.forEach((x) => {\n        // do stuff...\n    });\n}\n```\n\n#### removeLoaders\n\nRemove **all** the loaders that match the specified criteria from the webpack config.\n\nReturns:\n\n```javascript\n{\n    hasRemovedAny: true | false,\n    removedCount: int\n}\n```\n\nUsage:\n\n```javascript\nconst { removeLoaders, loaderByName } = require('@craco/craco');\n\nremoveLoaders(webpackConfig, loaderByName('eslint-loader'));\n```\n\n#### addBeforeLoader\n\nAdd a new _loader_ **before** the loader that match specified criteria to the webpack config.\n\nReturns:\n\n```javascript\n{\n    isAdded: true | false;\n}\n```\n\nUsage:\n\n```javascript\nconst { addBeforeLoader, loaderByName } = require('@craco/craco');\n\nconst myNewWebpackLoader = {\n    loader: require.resolve('tslint-loader'),\n};\n\naddBeforeLoader(webpackConfig, loaderByName('eslint-loader'), myNewWebpackLoader);\n```\n\n#### addBeforeLoaders\n\nAdd a new _loader_ **before** all the loaders that match specified criteria to the webpack config.\n\nReturns:\n\n```javascript\n{\n    isAdded: true | false,\n    addedCount: int\n}\n```\n\nUsage:\n\n```javascript\nconst { addBeforeLoaders, loaderByName } = require('@craco/craco');\n\nconst myNewWebpackLoader = {\n    loader: require.resolve('tslint-loader'),\n};\n\naddBeforeLoaders(webpackConfig, loaderByName('eslint-loader'), myNewWebpackLoader);\n```\n\n#### addAfterLoader\n\nAdd a new _loader_ **after** the loader that match specified criteria to the webpack config.\n\nReturns:\n\n```javascript\n{\n    isAdded: true | false;\n}\n```\n\nUsage:\n\n```javascript\nconst { addAfterLoader, loaderByName } = require('@craco/craco');\n\nconst myNewWebpackLoader = {\n    loader: require.resolve('tslint-loader'),\n};\n\naddAfterLoader(webpackConfig, loaderByName('eslint-loader'), myNewWebpackLoader);\n```\n\n#### addAfterLoaders\n\nAdd a new _loader_ **after** all the loaders that match specified criteria to the webpack config.\n\nReturns:\n\n```javascript\n{\n    isAdded: true | false,\n    addedCount: int\n}\n```\n\nUsage:\n\n```javascript\nconst { addAfterLoaders, loaderByName } = require('@craco/craco');\n\nconst myNewWebpackLoader = {\n    loader: require.resolve('tslint-loader'),\n};\n\naddAfterLoaders(webpackConfig, loaderByName('eslint-loader'), myNewWebpackLoader);\n```\n\n#### getPlugin\n\nRetrieve the **first** plugin that match the specified criteria from the webpack config.\n\nReturns:\n\n```javascript\n{\n    isFound: true | false,\n    match: {...} // the webpack plugin\n}\n```\n\nUsage:\n\n```javascript\nconst { getPlugin, pluginByName } = require('@craco/craco');\n\nconst { isFound, match } = getPlugin(webpackConfig, pluginByName('ESLintWebpackPlugin'));\n\nif (isFound) {\n    // do stuff...\n}\n```\n\n#### removePlugins\n\nRemove **all** the plugins that match the specified criteria from the webpack config.\n\nReturns:\n\n```javascript\n{\n    hasRemovedAny::true | false, removedCount::int;\n}\n```\n\nUsage:\n\n```javascript\nconst { removePlugins, pluginByName } = require('@craco/craco');\n\nremovePlugins(webpackConfig, pluginByName('ESLintWebpackPlugin'));\n```\n\n#### addPlugins\n\nAdd new _plugins_ to the webpack config.\n\nUsage:\n\n```javascript\nconst { addPlugins } = require('@craco/craco');\n\nconst myNewWebpackPlugin = require.resolve('ESLintWebpackPlugin');\n\naddPlugins(webpackConfig, [myNewWebpackPlugin]);\naddPlugins(webpackConfig, [[myNewWebpackPlugin, 'append']]);\naddPlugins(webpackConfig, [[myNewWebpackPlugin, 'prepend']]);\n```\n\n#### throwUnexpectedConfigError\n\nThrow an error if the webpack configuration changes and does not match your expectations. (For example, `getLoader`\ncannot find a loader and `isFound` is `false`.) `create-react-app` might update the structure of their webpack config,\nso it is very important to show a helpful error message when something breaks.\n\nRaises an error and crashes Node.js:\n\n```bash\n$ yarn start\nyarn run v1.12.3\n$ craco start\n/path/to/your/app/craco.config.js:23\n            throw new Error(\n            ^\n\n    Error: Can't find eslint-loader in the webpack config!\n\n    This error probably occurred because you updated react-scripts or craco. Please try updating craco-less to the latest version:\n\n       $ yarn upgrade craco-less\n\n    Or:\n\n       $ npm update craco-less\n\n    If that doesn't work, craco-less needs to be fixed to support the latest version.\n    Please check to see if there's already an issue in the ndbroadbent/craco-less repo:\n\n       * https://github.com/ndbroadbent/craco-less/issues?q=is%3Aissue+webpack+eslint-loader\n\n    If not, please open an issue and we'll take a look. (Or you can send a PR!)\n\n    You might also want to look for related issues in the craco and create-react-app repos:\n\n       * https://github.com/sharegate/craco/issues?q=is%3Aissue+webpack+eslint-loader\n       * https://github.com/facebook/create-react-app/issues?q=is%3Aissue+webpack+eslint-loader\n\n    at throwUnexpectedConfigError (/path/to/your/app/craco.config.js:23:19)\n    ...\n```\n\nUsage:\n\n```javascript\nconst { getLoader, loaderByName, throwUnexpectedConfigError } = require('@craco/craco');\n\n// Create a helper function if you need to call this multiple times\nconst throwError = (message, githubIssueQuery) =>\n    throwUnexpectedConfigError({\n        packageName: 'craco-less',\n        githubRepo: 'ndbroadbent/craco-less',\n        message,\n        githubIssueQuery,\n    });\n\nconst { isFound, match } = getLoader(webpackConfig, loaderByName('eslint-loader'));\n\nif (!isFound) {\n    throwError(\"Can't find eslint-loader in the webpack config!\", 'webpack+eslint-loader');\n}\n```\n\nOptions:\n\n```javascript\n{\n    message: \"An error message explaining what went wrong\",\n    packageName: \"NPM package name\",\n    githubRepo: \"GitHub repo where people can open an issue. Format: username/repo\",\n    githubIssueQuery: \"Search string to find related issues\"\n}\n```\n\n> Only `message` is required.\n\n## Backward Compatibility\n\nCRACO 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.\n\n| react-scripts Version | CRACO Version |\n| --------------------- | ------------: |\n| react-scripts < 4.0.0 |         5.8.0 |\n\n## Debugging\n\n### Verbose Logging\n\nTo activate **verbose** logging specify the CLI option `--verbose`\n\n```javascript\n/* package.json */\n\n{\n    \"scripts\": {\n        \"start\": \"craco start --verbose\"\n    }\n}\n```\n\n## License\n\nCopyright © 2020, Groupe Sharegate inc. This code is licensed under the Apache License, Version 2.0. You may obtain a\ncopy of this license at https://github.com/gsoft-inc/gsoft-license/blob/master/LICENSE.\n","readmeFilename":"README.md","gitHead":"29f9a957a0aa7a6426f031a40a0bfbf7124df0d4","_id":"@craco/craco@7.0.0-alpha.7","_nodeVersion":"18.1.0","_npmVersion":"8.12.1","dist":{"integrity":"sha512-3RU+Ur1GvBQKDBL1JhssSgazc8s3pMAgndyS+95UaXdMTuozpI9h4k4OokQRRjiLmr7i0y39l6fBZvknGj2i1w==","shasum":"518c58e0ae7bad80962f98f2bb7fcecab8552bd6","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-7.0.0-alpha.7.tgz","fileCount":95,"unpackedSize":175670,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCWvhx4MfK54G23w4pn0qB2ig7riZKYVeZf89kkoSEs9QIgB9HBXcjaYHQ5mw/Ts7PF4zD5n5lGeCB6FMU/2RLy3Eo="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiv2uwACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpsiA//TyWW5FMrYgwfsYyD+sW4asbOaJFEzXT977IRHH1uCbqBdEty\r\nGyaEThE4uW0MY3AZoSENtFxTK4fj+uVfS+bYA159VJ/Cf3Wo9hOcOjxRq0+o\r\ncyWz8dxdajFVY8oa/gK83Wq8Ptn3Fs3A68AsP5xTbIGT4vdzGBB7r8xtqta8\r\nEFhF5TXvdmZuXtZpP9j7auA/yFR4DOaCjCLuAmceOgQbs//3xvZGD9ZmzOWk\r\nGCqgtToCOD1C6AWjx1MAOdHVk/GFzdcYVcHUg58Cf5JNFoUUHCcVV7CjyZKy\r\n0F9XRPP5O8s4vFe0EZulhy3D36eszkdw+W+UyqJrSwCP5nJ8f+RqcSk9IwLu\r\nwjeyQ7nRn+k3P1sFzyYnzGGK1d02p73zTNKhIaMzu0kcUxEKUgmR3K1tRj20\r\nEvxoXiYuKFn+9auCve7UDHAA29V8GZFj+iAMGpfIs//ClUhhtQszbD6u2TOx\r\nffEHXktTpIBGWaZ2M3/YN8w1sZ/bV4nDzDSaqC+/6SLCSKVA5OJXU5HXywla\r\neyIZtO4wTEZCDSsv7X5X//mud/GDpJI1Ah8eggO5Xw9459561iwCdT4MRDvL\r\nIQsyMNsP4f0/EVNJBZ6ufg+K0JU45ihmDnR0kxpTWBEMs+G9eOPzPRA4Li7z\r\nGofXg1MnVdzOkme0wpigyFGwoN/hCcA9r+Q=\r\n=fFzO\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"anonymous","email":"dilan@dilanxd.com"},"directories":{},"maintainers":[{"name":"anonymous","email":"dilan@dilanxd.com"},{"name":"anonymous","email":"pa.lafrance@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_7.0.0-alpha.7_1656712112292_0.3244795300077832"},"_hasShrinkwrap":false},"6.4.5":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app.","version":"6.4.5","scripts":{},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/gsoft-inc/craco.git"},"keywords":["react","create-react-app","cra"],"author":{"name":"Groupe Sharegate inc."},"license":"Apache-2.0","bugs":{"url":"https://github.com/gsoft-inc/craco/issues"},"homepage":"https://github.com/gsoft-inc/craco","engines":{"node":">=6"},"bin":{"craco":"bin/craco.js"},"peerDependencies":{"react-scripts":"^4.0.0"},"devDependencies":{"react-scripts":"4.*"},"dependencies":{"cosmiconfig":"^7.0.1","cosmiconfig-typescript-loader":"^1.0.0","cross-spawn":"^7.0.0","lodash":"^4.17.15","semver":"^7.3.2","webpack-merge":"^4.2.2"},"gitHead":"5200879207b6491eaf5154c2cf95fc4b1f9f8456","_id":"@craco/craco@6.4.5","_nodeVersion":"18.4.0","_npmVersion":"8.12.1","dist":{"integrity":"sha512-8F2rIAao8sEh0FPP52ViEvDM9GjJ7acq0knu1c8UgI+EuZMD5/ZB270ol6jV4iNY7it9Umg/RoGBvNRUNr8U8w==","shasum":"471e67082a2ffd3edf73759b215bdc16250d27b3","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-6.4.5.tgz","fileCount":41,"unpackedSize":111396,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFhaej0kOaijHLKFmXB3LItD8wwLHpc9+b6Y1ATcMDFfAiA1kmCtrKQJrnaIsl3QpO6wJrMNr2KqRCujRdG71GT7iQ=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJix1EHACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrFpRAAip+MPLoR+ADm+ABJPvNlVOTzCwbIvt6A3nsFoY7TrN2pPszu\r\nxqX/ub1KFbk6h4HjV/79LkcesgFKrydLg3KIg+gL2BnRpSFN0H3DJ2547sBs\r\ng1JmtobhGv5W2B98utvn29dZbgEiRrvUVS9Yr2v8ac/Gy9nw8BiBx5wMjR1E\r\nlVs4V0Z1YxQLUUOzEvcjLOgAEyFK0DV6EfrIhJZm17XxebzSQ5EoP669P+VP\r\nbsuzyx+wp/Dhz4JHbbE+g8RFhrBz0VLeqeNlg02TgbD0DpaU2FZDR7daxfy7\r\nrd1yOi9zwVS61qXh0HF65hcfAy3I3Uh4KD94lBFd8jJuDDJK/Lwiift9MVzW\r\nPCYlVyyezN0XPMaC4K2j8Qt2WLsd0f+CbJh+A5xU1KP3t2wIRYa72N0zn/up\r\nsJ7Q7GOEimXsnD12NqI4aqxP6unvifPUCfgvzSL6DCOfQIQTeWeVLqYmdXf1\r\nbmL9fg9HliQviX26/UXVcCAhikksftwCT2/T3a86joDZczEnSk8TG4TKhmKC\r\nUAy7/oKseBnp7t77MtozcQV88fNKc2yojdYY6OzbBVWlwW8NUAD4/mAXR6BC\r\nZOyBDhMBW7wA8dhTKbgGydJqsQboL9i7yIN/NxQBUX74Zh1jP0M9Tc6QKt/S\r\nPF2/ug4ol5P0DoJJXCKej7FWu3he57yDi7s=\r\n=7jgO\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"anonymous","email":"dilan@dilanxd.com"},"directories":{},"maintainers":[{"name":"anonymous","email":"dilan@dilanxd.com"},{"name":"anonymous","email":"pa.lafrance@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_6.4.5_1657229575302_0.07218267192564576"},"_hasShrinkwrap":false},"7.0.0-alpha.8":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app.","version":"7.0.0-alpha.8","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","prepack":"npm run build"},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/dilanx/craco.git","directory":"packages/craco"},"keywords":["react","create-react-app","cra"],"author":{"name":"Dilan Nair","url":"https://www.dilanxd.com"},"contributors":[{"name":"Groupe Sharegate inc."}],"license":"Apache-2.0","bugs":{"url":"https://github.com/dilanx/craco/issues"},"homepage":"https://github.com/dilanx/craco#readme","engines":{"node":">=6"},"bin":{"craco":"dist/bin/craco.js"},"peerDependencies":{"react-scripts":"^5.0.0"},"devDependencies":{"@babel/types":"^7.19.3","@craco/types":"*","@jest/types":"^29.1.2","@types/cross-spawn":"^6.0.2","@types/eslint":"^8.4.6","@types/jest":"^29.1.1","@types/lodash":"^4.14.186","@types/semver":"^7.3.12","eslint-webpack-plugin":"^3.2.0","jest":"^29.1.2","react-scripts":"5.*","ts-jest":"^29.0.3","typescript":"^4.8.4","webpack":"^5.74.0"},"dependencies":{"autoprefixer":"^10.4.12","cosmiconfig":"^7.0.1","cosmiconfig-typescript-loader":"^4.1.1","cross-spawn":"^7.0.3","lodash":"^4.17.21","semver":"^7.3.7","webpack-merge":"^5.8.0"},"gitHead":"3b4293aa147404162ba02145fd7e105a39af9254","readme":"# @craco/craco\n\nCore craco package\n","readmeFilename":"README.md","_id":"@craco/craco@7.0.0-alpha.8","_nodeVersion":"18.1.0","_npmVersion":"lerna/5.5.4/node@v18.1.0+x64 (darwin)","dist":{"integrity":"sha512-IN3/ldPaktGflPu342cg7n8LYa2c3x9H2XzngUkDzTjro25ig1GyVcUdnG1U0X6wrRTF9K1AxZ5su9jLbdyFUw==","shasum":"40f19f44198ff2341b40654c8c6b4f54c2217972","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-7.0.0-alpha.8.tgz","fileCount":81,"unpackedSize":136107,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD2bTELi4YmkL6+Pl14XxaQ3hUD2QUhsIaw91tsKLxRWQIhAMKFavW8yQxg1oeAw/SMm9sRlz9/EvvL+TGAoLb7kUAo"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjOhaqACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmphqw/8CRA/Xuv/QfDFJ5vnWymv2vlvnriP9big45piXOnHIMZE888F\r\nSQR0/hIUwCOcn0Zf5xOZQ5zZVYwY8TtjG3QbQa9q/cAHnW47XvEvhIzkkZvH\r\no4JIZIIJBvtRagyqLw/EhqzDAAS4EpdzzFnUUMlB9HOK/t4DyFuRvmeNdoPV\r\n9sLMRMV0lEOlDJFRRY6VK2/zQWk2bTMKmVpQ81tJdZLWBb2SSnItB3Ig1I5L\r\n5AoZc0rtp7WayZfFDOb9A2JGzWhMVXICx2kKOld8X3Uz/+dsNaK++g5u/mCS\r\nTkBhY2xHfipAm6Z3j4fXtR3qu+kcQz47Tufly4GWhe6HY3dANjH3BK1mLiiw\r\njDlvaVjsXosnMpNE/953XS5rRbO7PMf3SGjRkmm15ZzZNEeWD1IQh86CXIZe\r\nAeVNIaeAI2QVx9t5BEasXgtx2HLNWADSy2HliQJLamEmZE+vvRqia0cvhbv0\r\npm2Fa3TGZ/NKopAy2syK1veGmPwDgB3vr/ke/KDeUm0sYOQrPpbBXybvZGqL\r\nty1Qgznn1lsMb0+PDI6m4zYH1H9yq5/3x8prhpOp2KJ6nwAengJjOuBUkB8S\r\nPnc6hcqqFvJwt0LNyp1O7BV0tpV/DbCXpyXeFRD8gEy9HBYL5ihGvh8jgemB\r\nWOEGygbRBXw18y6oInAplnKVHnbJ9Pk34DI=\r\n=OI3+\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"anonymous","email":"dilan@dilanxd.com"},"directories":{},"maintainers":[{"name":"anonymous","email":"dilan@dilanxd.com"},{"name":"anonymous","email":"pa.lafrance@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_7.0.0-alpha.8_1664751274369_0.6700090748724801"},"_hasShrinkwrap":false},"7.0.0-alpha.9":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app.","version":"7.0.0-alpha.9","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","prepack":"npm run build"},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/dilanx/craco.git","directory":"packages/craco"},"keywords":["react","create-react-app","cra"],"author":{"name":"Dilan Nair","url":"https://www.dilanxd.com"},"contributors":[{"name":"Groupe Sharegate inc."}],"license":"Apache-2.0","bugs":{"url":"https://github.com/dilanx/craco/issues"},"homepage":"https://github.com/dilanx/craco#readme","engines":{"node":">=6"},"bin":{"craco":"dist/bin/craco.js"},"peerDependencies":{"react-scripts":"^5.0.0"},"devDependencies":{"@babel/types":"^7.19.3","@craco/types":"*","@jest/types":"^29.1.2","@types/cross-spawn":"^6.0.2","@types/eslint":"^8.4.6","@types/jest":"^29.1.1","@types/lodash":"^4.14.186","@types/semver":"^7.3.12","eslint-webpack-plugin":"^3.2.0","jest":"^29.1.2","react-scripts":"5.*","ts-jest":"^29.0.3","typescript":"^4.8.4","webpack":"^5.74.0"},"dependencies":{"autoprefixer":"^10.4.12","cosmiconfig":"^7.0.1","cosmiconfig-typescript-loader":"^1.0.0","cross-spawn":"^7.0.3","lodash":"^4.17.21","semver":"^7.3.7","webpack-merge":"^5.8.0"},"gitHead":"da2052b43967a9ebbf742d4b9bc50cab7d74b010","readme":"# @craco/craco\n\nCore craco package\n","readmeFilename":"README.md","_id":"@craco/craco@7.0.0-alpha.9","_nodeVersion":"18.1.0","_npmVersion":"lerna/5.5.4/node@v18.1.0+x64 (darwin)","dist":{"integrity":"sha512-Yg3GlE7VrVsCJUs33CbBDjqmyMfXb1aVTrPkXIFNn1mg0b6xj8dl1jFcJDAYnzgU57nP3QYKOVD4pEU5AaZ18A==","shasum":"9a3b144a10152a96c3254265ae7210df0dde54ba","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-7.0.0-alpha.9.tgz","fileCount":81,"unpackedSize":136249,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICIo4WsazMMCzIP2KKO1hRAkn8f2IqWdziw5sBXfn/fmAiBM/wfL0tFGQn4CBhdLsIsGis5lpRLbdnnZ+tri69ooSA=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjWvoiACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpNyA/8DSkHHfURJcoDMUPSGq9jeLvIyKZ9WNe0RtQMkLfc4JuljQNV\r\nq8eygaacaEGxtaQ41Yy7cAWHx7hm2laPih5264zQ+ipvzgMtWFGpShF+2Hqv\r\nNADCDq1ka+yN8hJgDZykZ6dNni2hDqyPzzkr5DsYQPtMvgVP39/SrFR4c+xD\r\nU2zuA13wR/0CsCq0ZuPegNQhiLGyYrcuucHq80veQdIvyh/IIxa2T5UFY18S\r\n044oyLdvp6MJKcsUGTAZBCodmshKaFCXWl5v483RfjjPQ7Kb6Iu0/fCurFWj\r\nUlbmyiEbwCeZlDt5eJIbcBtyiNMLYlVxAr9XKvLQaV5LNGM0WlEexnnd6Rvy\r\nr1hZRn3pQg3ywWSvVATTW/4NdljeCBzYKws7acKg/YYFVd7Q06AbRd1GtaDS\r\nrrwAgwFbryJT25sXtHzxmcfrV9Jr2bv+byjCWA0jV8zsjXapYQ32NnrWhWjR\r\nAFgGd+IxBkm9BhGzCqZby+iwe2yJ9+Z2K/O3CZoqhiM3vFvYLW9dY4JOJBCp\r\ngfrzJGQDJrQ+HD6/5NeMEizsxV44XS2cw8ihQ9HD554j8WXxwInYatcrZ7WX\r\nmPIPRiY5uT6jOiMDwtPC7RGuu9rRooQFqtOo9uiJusQ0C89ayMH6tb74Jg8r\r\nQrve3zu3aRvDVUP6X7pV0FcQqcwr16OAkJw=\r\n=ScBp\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"anonymous","email":"dilan@dilanxd.com"},"directories":{},"maintainers":[{"name":"anonymous","email":"dilan@dilanxd.com"},{"name":"anonymous","email":"pa.lafrance@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_7.0.0-alpha.9_1666906658731_0.9165143102791189"},"_hasShrinkwrap":false},"7.0.0":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app.","version":"7.0.0","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","prepack":"npm run build"},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/dilanx/craco.git","directory":"packages/craco"},"keywords":["react","create-react-app","cra"],"author":{"name":"Dilan Nair","url":"https://www.dilanxd.com"},"contributors":[{"name":"Groupe Sharegate inc."}],"license":"Apache-2.0","bugs":{"url":"https://github.com/dilanx/craco/issues"},"homepage":"https://craco.js.org","engines":{"node":">=6"},"bin":{"craco":"dist/bin/craco.js"},"peerDependencies":{"react-scripts":"^5.0.0"},"devDependencies":{"@babel/types":"^7.19.3","@craco/types":"*","@jest/types":"^29.1.2","@types/cross-spawn":"^6.0.2","@types/eslint":"^8.4.6","@types/jest":"^29.1.1","@types/lodash":"^4.14.186","@types/semver":"^7.3.12","eslint-webpack-plugin":"^3.2.0","jest":"^29.1.2","react-scripts":"5.*","ts-jest":"^29.0.3","typescript":"^4.8.4","webpack":"^5.74.0"},"dependencies":{"autoprefixer":"^10.4.12","cosmiconfig":"^7.0.1","cosmiconfig-typescript-loader":"^1.0.0","cross-spawn":"^7.0.3","lodash":"^4.17.21","semver":"^7.3.7","webpack-merge":"^5.8.0"},"gitHead":"f3d8d4a1441d3ff7713439728ea39df001a3ee52","_id":"@craco/craco@7.0.0","_nodeVersion":"18.1.0","_npmVersion":"lerna/5.5.4/node@v18.1.0+x64 (darwin)","dist":{"integrity":"sha512-OyjL9zpURB6Ha1HO62Hlt27Xd7UYJ8DRiBNuE4DBB8Ue0iQ9q/xsv3ze7ROm6gCZqV6I2Gxjnq0EHCCye+4xDQ==","shasum":"4e9243e53fba6ed4d2bc08aa65aae9d1b63541ed","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-7.0.0.tgz","fileCount":81,"unpackedSize":138469,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCB7ru/moY7bab9DN3rPIiEa/7Gj1T0M/nbT0Vn00xM4AIhAOvaxA2RMTqE13B5lWC+twUCyWCcHjxXvfcfV7siwk22"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjaixKACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrkkxAAhIzMKhsl/uQvXurlXGdw3opz/MNU/Qd72X5FPba5FOGmuXC9\r\nNuIAy2cEaSdmpdOWpxT2Q/YQ5YBawkrqxqZDrC3rppnNLTSDbJrcKM9VYuRj\r\nFdx7/TVpTgB0v4tcW1X+sTNqBtpMcZiset/gH2tfwcAVbWdvoDqKZTDNJAV9\r\nENOMOyZMGgudi3PDSTO9FeVhDyuOyyg63iPSLx9sVOUuL/ko/H9QdR+E4wsU\r\n56Aj62pNzqKPCYHALTDwi//RAypBu6lMh8wP9ljuHNV/f9hhc/skcu4146yJ\r\ndEUkK+jK5NgyfXWTRVGGIGD7mygLsqnWPVK4ZZeTJTQt30z5W+OQgDStPtPP\r\n+Z1JTGNhsMdcr1JXl2IX/b4S+F/M1nqr4pw+TGt26bQeitaO0DZy90RDD0LO\r\nSg+efobxLaXNaLKIPyhhMs9XmJrFU/MZopwXrM8BznCVbojanPCKxtUO+hMC\r\nRg2mJ74Jl+4QjybeSz3wFWTkel+5QhhlsjSpEJz/Kghb513yJP/MvVgjyfAZ\r\npcGfZRf7UYeMML7oq8karoc1/KHGK+11Udtrtv0aKH0e4z30nwBPxIU9pVdR\r\n4Owlm3OvAEJPGjdNshR3H6JSQZtDVABeLtA4ocDFa8K3mnvWfdp1h6P7DhQZ\r\neqC2NQLKyJVpX7UWrMoEAEESnWScvjaCvdY=\r\n=TDdw\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"anonymous","email":"dilan@dilanxd.com"},"directories":{},"maintainers":[{"name":"anonymous","email":"dilan@dilanxd.com"},{"name":"anonymous","email":"pa.lafrance@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_7.0.0_1667902538434_0.8456208134966168"},"_hasShrinkwrap":false},"7.1.0":{"name":"@craco/craco","description":"Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app.","version":"7.1.0","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","prepack":"npm run build"},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/dilanx/craco.git","directory":"packages/craco"},"keywords":["react","create-react-app","cra"],"author":{"name":"Dilan Nair","url":"https://www.dilanxd.com"},"contributors":[{"name":"Groupe Sharegate inc."}],"license":"Apache-2.0","bugs":{"url":"https://github.com/dilanx/craco/issues"},"homepage":"https://craco.js.org","engines":{"node":">=6"},"bin":{"craco":"dist/bin/craco.js"},"peerDependencies":{"react-scripts":"^5.0.0"},"devDependencies":{"@babel/types":"^7.19.3","@craco/types":"^7.1.0","@jest/types":"^27.5.1","@types/cross-spawn":"^6.0.2","@types/eslint":"^8.4.6","@types/jest":"^27.5.2","@types/lodash":"^4.14.186","@types/semver":"^7.3.12","eslint-webpack-plugin":"^3.2.0","jest":"^27.5.1","react-scripts":"5.*","ts-jest":"^27.1.5","typescript":"^4.8.4","webpack":"^5.74.0"},"dependencies":{"autoprefixer":"^10.4.12","cosmiconfig":"^7.0.1","cosmiconfig-typescript-loader":"^1.0.0","cross-spawn":"^7.0.3","lodash":"^4.17.21","semver":"^7.3.7","webpack-merge":"^5.8.0"},"gitHead":"70a7a2a757c38dede4df80d33b498e753f313691","_id":"@craco/craco@7.1.0","_nodeVersion":"18.13.0","_npmVersion":"lerna/6.5.1/node@v18.13.0+x64 (darwin)","dist":{"integrity":"sha512-oRAcPIKYrfPXp9rSzlsDNeOaVtDiKhoyqSXUoqiK24jCkHr4T8m/a2f74yXIzCbIheoUWDOIfWZyRgFgT+cpqA==","shasum":"12bd394c7f0334e214302e4d35a1768f68042fbb","tarball":"http://repository.ncinga.com/nexus/content/repositories/npm-js-registry/@craco/craco/-/craco-7.1.0.tgz","fileCount":83,"unpackedSize":140243,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICqcyLgSafLkHoF0PHFMUaAGcA1cRaDo50bwSFi3JNWHAiBitxz3w1ujVYFpUtffjHMdVkNlS0WCg3er0KwabFFngA=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkDCQgACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmorOA/+IUOo9341CGEBLB2cpF8WRkbuKMX1m0C0ZGAbJEJNT228dC7F\r\nnEMfYiCrln5SZJeYFFjU9mzo88insMi+RemQsWWaBFIiqVJgUKKT9MHt26tP\r\nbf6gxttUuye3d03S3nGaHW+cpjPMVwN7zG9W/tRbcEY0alA61GUEro0/Kl2z\r\nRJlPYcxw1Bf2Wm3RJzcM6nXfQ7gXYsoIPUUJyECxrzuXLVSl9obnmdiRaG5x\r\nO7QP0JtTNxyM/oUwjgGhR3kvms9OlAuDGH+78nTrdOhfA02HPj6CKJgCOeEo\r\ncxvf6dcIPMTuJyF8CX7+EiorIy0a589xTd5EPzxdgkVuWr2vYal+HqF0FjJQ\r\nOfY3eJli0TLgJQ461TIs24sZNAwdFxRH2NmF+5FyVsEh9RHGHXgvyhfisJU3\r\ncroB3Jv626JSz6HknxeleTuIkegv1odqXYkgylRwdgctH2kkHKWlmU+I8nO2\r\njuWfQ1K3TcXbXqM07hIp1hw4LbSzZRMXvp3ncxOzMMvVH/CBkLe5DhyslBKV\r\nhGt7G89Gthmfe75Fl2FgEUzIyztQWB3LLbeTluaqbHobzw6xDLlAjWWBzxbl\r\nSSzIUoGM2lgV6cEif1khHgkhikn8F2xwkGei1kFtoeuZjO3fYL7dqUjHAkl1\r\nzENFGlahzCiE3WZ+Stg7wlHi+IUU9Yy1xC0=\r\n=WjyL\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"anonymous","email":"dilan@dilanxd.com"},"directories":{},"maintainers":[{"name":"anonymous","email":"dilan@dilanxd.com"},{"name":"anonymous","email":"pa.lafrance@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/craco_7.1.0_1678517280257_0.7452888526260781"},"_hasShrinkwrap":false}},"name":"@craco/craco","time":{"created":"2018-10-16T18:04:32.240Z","1.0.0-alpha.7":"2018-10-16T18:04:32.488Z","modified":"2023-07-10T01:28:57.676Z","1.0.0-alpha.8":"2018-10-16T18:19:17.209Z","1.0.0-alpha.9":"2018-10-16T18:44:59.480Z","1.0.0-alpha.10":"2018-10-18T20:57:15.155Z","1.0.0":"2018-10-18T21:26:29.873Z","1.1.0":"2018-10-19T16:12:55.090Z","2.0.0":"2018-10-23T00:38:07.119Z","2.0.1":"2018-10-23T00:52:13.995Z","2.0.2":"2018-10-23T17:31:37.755Z","2.1.0":"2018-11-07T04:14:54.374Z","2.2.0":"2018-11-07T13:35:35.300Z","2.2.1":"2018-11-08T14:23:21.887Z","2.2.3":"2018-11-09T16:52:21.905Z","2.4.0":"2018-11-15T01:46:54.827Z","2.5.0":"2018-11-16T03:08:27.088Z","3.0.0":"2018-11-16T19:50:35.748Z","3.0.1":"2018-11-16T21:28:56.314Z","3.1.0":"2018-11-20T00:55:55.984Z","3.1.1":"2018-11-23T14:17:54.098Z","3.2.0":"2018-12-05T02:55:10.789Z","3.2.1-alpha.0":"2018-12-06T18:35:03.383Z","3.2.2-alpha.0":"2018-12-07T02:02:02.172Z","3.2.2":"2018-12-11T02:44:37.865Z","3.2.3":"2018-12-11T22:31:30.253Z","3.3.1":"2019-01-17T03:20:26.042Z","3.4.0":"2019-01-17T21:38:28.159Z","3.4.1":"2019-01-29T14:01:30.239Z","3.5.0":"2019-02-26T21:48:36.044Z","3.6.0":"2019-03-13T02:33:45.658Z","4.0.0":"2019-04-03T01:06:13.821Z","4.0.1":"2019-04-04T21:07:04.487Z","4.1.0":"2019-04-05T01:01:14.676Z","5.0.0":"2019-04-23T02:55:42.004Z","5.0.1":"2019-04-23T03:00:07.315Z","5.0.2":"2019-04-23T12:19:14.996Z","5.1.0":"2019-05-15T16:44:21.538Z","5.2.0":"2019-05-21T01:45:09.529Z","5.2.1":"2019-05-21T21:31:30.093Z","5.2.2":"2019-06-19T21:00:43.905Z","5.2.3":"2019-06-20T02:14:09.685Z","5.2.4":"2019-07-11T12:42:32.369Z","5.3.0":"2019-08-12T18:55:47.941Z","5.4.0":"2019-08-27T22:24:59.353Z","5.5.0":"2019-09-15T15:20:59.073Z","5.6.0":"2019-10-25T16:57:35.343Z","5.6.1":"2019-10-28T17:02:14.857Z","5.6.2":"2019-11-15T17:16:09.122Z","5.6.3":"2020-01-03T15:00:23.948Z","5.6.4":"2020-03-22T15:56:16.295Z","5.7.0":"2020-09-27T22:16:02.095Z","5.8.0":"2020-11-06T15:17:21.453Z","5.9.0":"2020-11-30T15:07:07.274Z","6.0.0":"2020-12-08T15:53:52.168Z","6.1.0":"2021-01-27T22:17:13.170Z","6.1.1":"2021-02-06T16:15:53.143Z","6.1.2":"2021-04-28T00:57:24.361Z","6.2.0":"2021-07-04T15:55:28.857Z","6.3.0":"2021-09-11T01:39:34.840Z","6.4.0":"2021-10-25T01:59:37.431Z","6.4.1":"2021-11-19T16:49:42.823Z","6.4.2":"2021-11-24T16:25:01.589Z","6.4.3":"2021-12-09T15:30:49.999Z","7.0.0-alpha.0":"2022-01-25T15:25:06.183Z","7.0.0-alpha.1":"2022-02-17T19:52:42.369Z","7.0.0-7.0.0-alpha.2.0":"2022-02-17T20:02:30.162Z","7.0.0-alpha.3":"2022-02-17T20:05:54.049Z","7.0.0-alpha.4":"2022-06-29T04:53:58.279Z","7.0.0-alpha.5":"2022-06-29T04:59:40.704Z","7.0.0-alpha.6":"2022-06-29T21:43:44.969Z","6.4.4":"2022-07-01T20:11:35.820Z","7.0.0-alpha.7":"2022-07-01T21:48:32.457Z","6.4.5":"2022-07-07T21:32:55.458Z","7.0.0-alpha.8":"2022-10-02T22:54:34.579Z","7.0.0-alpha.9":"2022-10-27T21:37:38.915Z","7.0.0":"2022-11-08T10:15:38.616Z","7.1.0":"2023-03-11T06:48:00.452Z"},"readmeFilename":"README.md","contributors":[{"name":"Groupe Sharegate inc."}],"homepage":"https://craco.js.org"}