diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index c6898fd8da..31d1a2e4a1 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -6,7 +6,17 @@ body: - type: markdown attributes: value: | - Thanks for taking the time to fill out this bug report! + Thanks for taking the time to fill out this bug report! Using this template makes it a lot easier for us to diagnose your problem, so please fill in as many fields as possible. + + - type: textarea + id: description + attributes: + label: Summary + description: A short description of the problem + placeholder: | + Include what you expected to happen, and what actually happened. + validations: + required: true - type: textarea id: steps-to-reproduce attributes: @@ -59,7 +69,7 @@ body: - type: textarea id: netlify-toml attributes: - label: Your `netlify.toml` file + label: Your netlify.toml file description: (If you're using file-based config) Please provide a copy of your `netlify.toml` file. value: |
@@ -72,9 +82,39 @@ body:
- type: textarea - id: logs + id: redirects-file + attributes: + label: Your public/_redirects file + description: Please provide a copy of your `_redirects` file if you have one. + value: | +
+ `_redirects` + + ```toml + # Paste content of your `_redirects` file here + ``` + +
+ + - type: textarea + id: next-config + attributes: + label: Your `next.config.js` file + description: Please provide a copy of your `next.config.js` file. + value: | +
+ `next.config.js` + + ```toml + # Paste content of your `next.config.js` file here. Check there is no private info in there. + ``` + +
+ + - type: textarea + id: build-logs attributes: - label: Relevant log output (or link to your logs) + label: Builds logs (or link to your logs) value: |
Build logs @@ -84,3 +124,36 @@ body: ```
+ + - type: textarea + id: function-logs + attributes: + label: Function logs + description: If it is a runtime error, please provide a copy of the relevant function logs. + value: | +
+ Function logs + + ``` + # Paste logs here + ``` + +
+ + - type: textarea + + id: next-build + attributes: + label: .next JSON files + description: + (e.g. `.next/required-server-files.json`, `.next/routes-manifest.json` and `.next/prerender-manifest.json`). + value: | +
+ generated .next JSON files + + ``` + # Paste file contents here. Please check there isn't any private info in them + # You can either build locally, or download the deploy from Netlify by clicking the arrow next to the deploy time. + ``` + +
diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml index d49f8a897d..fb6dba4af6 100644 --- a/.github/workflows/release-please.yml +++ b/.github/workflows/release-please.yml @@ -27,6 +27,9 @@ jobs: check-latest: true registry-url: 'https://registry.npmjs.org' if: ${{ steps.release.outputs.release_created }} + - name: Install dependencies + run: npm ci + if: ${{ steps.release.outputs.releases_created }} - run: npm publish if: ${{ steps.release.outputs.release_created }} env: diff --git a/CHANGELOG.md b/CHANGELOG.md index fd33d2f7b9..0abe072377 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## [4.1.0](https://www.github.com/netlify/netlify-plugin-nextjs/compare/v4.0.0...v4.1.0) (2021-12-17) + + +### Features + +* add support for use with `next export` ([#1012](https://www.github.com/netlify/netlify-plugin-nextjs/issues/1012)) ([76edc53](https://www.github.com/netlify/netlify-plugin-nextjs/commit/76edc5324d89adfad8c43a654ecec7719861e2b4)) + + +### Bug Fixes + +* prevent infinite loop when `/` is ISR ([#1020](https://www.github.com/netlify/netlify-plugin-nextjs/issues/1020)) ([55b18e6](https://www.github.com/netlify/netlify-plugin-nextjs/commit/55b18e6e4ea9424e896b860502d645513112c4f3)) + ## [4.0.0](https://www.github.com/netlify/netlify-plugin-nextjs/compare/v4.0.0-rc.2...v4.0.0) (2021-12-14) This is a full rewrite of the Essential Next.js plugin, with a new architecture that gives greater compatibility and diff --git a/README.md b/README.md index 7be0dda210..97db72e69a 100644 --- a/README.md +++ b/README.md @@ -76,6 +76,15 @@ If you are using Nx, then you will need to point `publish` to the folder inside The Essential Next.js plugin now fully supports ISR on Netlify. For more details see [the ISR docs](https://github.com/netlify/netlify-plugin-nextjs/blob/main/docs/isr.md). +## Use with `next export` + +If you are using `next export` to generate a static site, you do not need most of the functionality of this plugin and +you can remove it. Alternatively you can +[set the environment variable](https://docs.netlify.com/configure-builds/environment-variables/) +`NETLIFY_NEXT_PLUGIN_SKIP` to `true` and the plugin will handle caching but won't generate any functions for SSR +support. See [`demos/next-export`](https://github.com/netlify/netlify-plugin-nextjs/tree/main/demos/next-export) for an +example. + ## Feedback If you think you have found a bug in the plugin, diff --git a/demos/next-export/.eslintrc b/demos/next-export/.eslintrc new file mode 100644 index 0000000000..abd5579b49 --- /dev/null +++ b/demos/next-export/.eslintrc @@ -0,0 +1,4 @@ +{ + "extends": "next", + "root": true +} diff --git a/demos/next-export/.gitignore b/demos/next-export/.gitignore new file mode 100644 index 0000000000..1437c53f70 --- /dev/null +++ b/demos/next-export/.gitignore @@ -0,0 +1,34 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# local env files +.env.local +.env.development.local +.env.test.local +.env.production.local + +# vercel +.vercel diff --git a/demos/next-export/README.md b/demos/next-export/README.md new file mode 100644 index 0000000000..5bf45f2878 --- /dev/null +++ b/demos/next-export/README.md @@ -0,0 +1,2 @@ +This is an example of a site that uses `next export`. It only uses the plugin for cache handling and sets +`NETLIFY_NEXT_PLUGIN_SKIP` to disable everything else. diff --git a/demos/next-export/local-plugin/index.js b/demos/next-export/local-plugin/index.js new file mode 100644 index 0000000000..9e852e382e --- /dev/null +++ b/demos/next-export/local-plugin/index.js @@ -0,0 +1 @@ +module.exports = require('../../../lib') diff --git a/demos/next-export/local-plugin/manifest.yml b/demos/next-export/local-plugin/manifest.yml new file mode 100644 index 0000000000..7091f91411 --- /dev/null +++ b/demos/next-export/local-plugin/manifest.yml @@ -0,0 +1 @@ +name: '@netlify/plugin-nextjs-local' diff --git a/demos/next-export/local-plugin/package-lock.json b/demos/next-export/local-plugin/package-lock.json new file mode 100644 index 0000000000..11a2e6611e --- /dev/null +++ b/demos/next-export/local-plugin/package-lock.json @@ -0,0 +1,5 @@ +{ + "name": "local-plugin", + "version": "1.0.0", + "lockfileVersion": 1 +} diff --git a/demos/next-export/local-plugin/package.json b/demos/next-export/local-plugin/package.json new file mode 100644 index 0000000000..d692119a5b --- /dev/null +++ b/demos/next-export/local-plugin/package.json @@ -0,0 +1,11 @@ +{ + "name": "local-plugin", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "preinstall": "cd ../../.. && npm i" + }, + "author": "", + "license": "ISC" +} diff --git a/demos/next-export/netlify.toml b/demos/next-export/netlify.toml new file mode 100644 index 0000000000..4983d3f911 --- /dev/null +++ b/demos/next-export/netlify.toml @@ -0,0 +1,16 @@ +[build] +command = "next build && next export" +publish = "out" +ignore = "git diff --quiet $CACHED_COMMIT_REF $COMMIT_REF ../../" + +[build.environment] +NETLIFY_NEXT_PLUGIN_SKIP = "true" + +[dev] +framework = "#static" + +[[plugins]] +package = "./local-plugin" + +[[plugins]] +package = "@netlify/plugin-local-install-core" diff --git a/demos/next-export/next.config.js b/demos/next-export/next.config.js new file mode 100644 index 0000000000..b6c5f701fc --- /dev/null +++ b/demos/next-export/next.config.js @@ -0,0 +1,5 @@ +module.exports = { + // Configurable site features we support: + // distDir: 'build', + generateBuildId: () => 'build-id', +} diff --git a/demos/next-export/pages/_app.js b/demos/next-export/pages/_app.js new file mode 100644 index 0000000000..1e1cec9242 --- /dev/null +++ b/demos/next-export/pages/_app.js @@ -0,0 +1,7 @@ +import '../styles/globals.css' + +function MyApp({ Component, pageProps }) { + return +} + +export default MyApp diff --git a/demos/next-export/pages/another.js b/demos/next-export/pages/another.js new file mode 100644 index 0000000000..e9cebb8bfd --- /dev/null +++ b/demos/next-export/pages/another.js @@ -0,0 +1,22 @@ +import Head from 'next/head' +import { useRouter } from 'next/router' +import styles from '../styles/Home.module.css' + +export default function Home() { + const { locale } = useRouter() + return ( +
+ + Create Next App + + + + +
+

Another page

+
+ + +
+ ) +} diff --git a/demos/next-export/pages/index.js b/demos/next-export/pages/index.js new file mode 100644 index 0000000000..e860ce871b --- /dev/null +++ b/demos/next-export/pages/index.js @@ -0,0 +1,45 @@ +import Head from 'next/head' +import { useRouter } from 'next/router' +import styles from '../styles/Home.module.css' + +export default function Home() { + const { locale } = useRouter() + return ( +
+ + Create Next App + + + + +
+

+ Welcome to Next.js! +

+ +

The current locale is {locale}

+ +

+ Get started by editing pages/index.js +

+ +
+ +

Documentation →

+

Find in-depth information about Next.js features and API.

+
+ + +

Learn →

+

Learn about Next.js in an interactive course with quizzes!

+
+ + +

Examples →

+

Discover and deploy boilerplate example Next.js projects.

+
+
+
+
+ ) +} diff --git a/demos/next-export/public/favicon.ico b/demos/next-export/public/favicon.ico new file mode 100644 index 0000000000..4965832f2c Binary files /dev/null and b/demos/next-export/public/favicon.ico differ diff --git a/demos/next-export/styles/Home.module.css b/demos/next-export/styles/Home.module.css new file mode 100644 index 0000000000..35454bb748 --- /dev/null +++ b/demos/next-export/styles/Home.module.css @@ -0,0 +1,121 @@ +.container { + min-height: 100vh; + padding: 0 0.5rem; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + height: 100vh; +} + +.main { + padding: 5rem 0; + flex: 1; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +.footer { + width: 100%; + height: 100px; + border-top: 1px solid #eaeaea; + display: flex; + justify-content: center; + align-items: center; +} + +.footer a { + display: flex; + justify-content: center; + align-items: center; + flex-grow: 1; +} + +.title a { + color: #0070f3; + text-decoration: none; +} + +.title a:hover, +.title a:focus, +.title a:active { + text-decoration: underline; +} + +.title { + margin: 0; + line-height: 1.15; + font-size: 4rem; +} + +.title, +.description { + text-align: center; +} + +.description { + line-height: 1.5; + font-size: 1.5rem; +} + +.code { + background: #fafafa; + border-radius: 5px; + padding: 0.75rem; + font-size: 1.1rem; + font-family: Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, + Bitstream Vera Sans Mono, Courier New, monospace; +} + +.grid { + display: flex; + align-items: center; + justify-content: center; + flex-wrap: wrap; + max-width: 800px; + margin-top: 3rem; +} + +.card { + margin: 1rem; + padding: 1.5rem; + text-align: left; + color: inherit; + text-decoration: none; + border: 1px solid #eaeaea; + border-radius: 10px; + transition: color 0.15s ease, border-color 0.15s ease; + width: 45%; +} + +.card:hover, +.card:focus, +.card:active { + color: #0070f3; + border-color: #0070f3; +} + +.card h2 { + margin: 0 0 1rem 0; + font-size: 1.5rem; +} + +.card p { + margin: 0; + font-size: 1.25rem; + line-height: 1.5; +} + +.logo { + height: 1em; + margin-left: 0.5rem; +} + +@media (max-width: 600px) { + .grid { + width: 100%; + flex-direction: column; + } +} diff --git a/demos/next-export/styles/globals.css b/demos/next-export/styles/globals.css new file mode 100644 index 0000000000..e5e2dcc23b --- /dev/null +++ b/demos/next-export/styles/globals.css @@ -0,0 +1,16 @@ +html, +body { + padding: 0; + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, + Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; +} + +a { + color: inherit; + text-decoration: none; +} + +* { + box-sizing: border-box; +} diff --git a/demos/nx-next-monorepo-demo/package-lock.json b/demos/nx-next-monorepo-demo/package-lock.json index d966f0f1db..18aaff47f8 100644 --- a/demos/nx-next-monorepo-demo/package-lock.json +++ b/demos/nx-next-monorepo-demo/package-lock.json @@ -333,9 +333,9 @@ } }, "@babel/parser": { - "version": "7.16.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.5.tgz", - "integrity": "sha512-+Ce7T5iPNWzfu9C1aB5tN3Lyafs5xb3Ic7vBWyZL2KXT3QSdD1dD3CvgOzPmQKoNNRt6uauc0XwNJTQtXC2/Mw==" + "version": "7.16.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.6.tgz", + "integrity": "sha512-Gr86ujcNuPDnNOY8mi383Hvi8IYrJVJYuf3XcuBM/Dgd+bINn/7tHqsj+tKkoreMbmGsFLsltI/JJd8fOFWGDQ==" }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.16.2", @@ -1253,23 +1253,13 @@ } }, "@cypress/webpack-preprocessor": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/@cypress/webpack-preprocessor/-/webpack-preprocessor-5.10.0.tgz", - "integrity": "sha512-KzcDBjos3rIw58imyvATYTNi9CB+Co0SFUhexmuH2c+Wk1ksSM3g4XmxUUIaJJvDwmIK4tcoBMYd9Lzle8bR7A==", + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/@cypress/webpack-preprocessor/-/webpack-preprocessor-5.11.0.tgz", + "integrity": "sha512-0VMEodVAOkYYhCGKQ2wilI28RtISc3rCre9wlFhishwtnT0B1onJJ8fwhWmcT3Y2/K88WP+cyVO2ZaQPcsEFQg==", "requires": { - "bluebird": "^3.7.1", - "debug": "4.3.2", + "bluebird": "3.7.1", + "debug": "^4.3.2", "lodash": "^4.17.20" - }, - "dependencies": { - "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "requires": { - "ms": "2.1.2" - } - } } }, "@cypress/xvfb": { @@ -1396,6 +1386,11 @@ "slash": "^3.0.0" }, "dependencies": { + "@types/node": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.0.tgz", + "integrity": "sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw==" + }, "jest-util": { "version": "27.4.2", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.4.2.tgz", @@ -1587,6 +1582,13 @@ "@jest/types": "^27.4.2", "@types/node": "*", "jest-mock": "^27.4.2" + }, + "dependencies": { + "@types/node": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.0.tgz", + "integrity": "sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw==" + } } }, "@jest/fake-timers": { @@ -1602,6 +1604,11 @@ "jest-util": "^27.4.2" }, "dependencies": { + "@types/node": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.0.tgz", + "integrity": "sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw==" + }, "jest-util": { "version": "27.4.2", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.4.2.tgz", @@ -1739,6 +1746,11 @@ "write-file-atomic": "^3.0.0" }, "dependencies": { + "@types/node": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.0.tgz", + "integrity": "sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw==" + }, "jest-util": { "version": "27.4.2", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.4.2.tgz", @@ -1769,6 +1781,13 @@ "@types/node": "*", "@types/yargs": "^16.0.0", "chalk": "^4.0.0" + }, + "dependencies": { + "@types/node": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.0.tgz", + "integrity": "sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw==" + } } }, "@napi-rs/triples": { @@ -2277,53 +2296,6 @@ "url-loader": "^4.1.1", "webpack": "^5.58.1", "webpack-merge": "^5.8.0" - }, - "dependencies": { - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "requires": { - "esutils": "^2.0.2" - } - }, - "eslint-plugin-react": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.27.1.tgz", - "integrity": "sha512-meyunDjMMYeWr/4EBLTV1op3iSG3mjT/pz5gti38UzfM4OPpNc2m0t2xvKCOMU5D6FSdd34BIMFOvQbW+i8GAA==", - "requires": { - "array-includes": "^3.1.4", - "array.prototype.flatmap": "^1.2.5", - "doctrine": "^2.1.0", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.0.4", - "object.entries": "^1.1.5", - "object.fromentries": "^2.0.5", - "object.hasown": "^1.1.0", - "object.values": "^1.1.5", - "prop-types": "^15.7.2", - "resolve": "^2.0.0-next.3", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.6" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "resolve": { - "version": "2.0.0-next.3", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", - "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - } } }, "@nrwl/storybook": { @@ -3167,9 +3139,9 @@ } }, "@types/eslint-scope": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.1.tgz", - "integrity": "sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g==", + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.2.tgz", + "integrity": "sha512-TzgYCWoPiTeRg6RQYgtuW7iODtVoKu3RVL72k3WohqhjfaOLK5Mg2T4Tg1o2bSfu0vPkoI48wdQFv5b/Xe04wQ==", "requires": { "@types/eslint": "*", "@types/estree": "*" @@ -3186,6 +3158,13 @@ "integrity": "sha512-SvSrYXfWSc7R4eqnOzbQF4TZmfpNSM9FrSWLU3EUnWBuyZqNBOrv1B1JA3byUDPUl9z4Ab3jeZG2eDdySlgNMg==", "requires": { "@types/node": "*" + }, + "dependencies": { + "@types/node": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.0.tgz", + "integrity": "sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw==" + } } }, "@types/glob": { @@ -3195,6 +3174,13 @@ "requires": { "@types/minimatch": "*", "@types/node": "*" + }, + "dependencies": { + "@types/node": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.0.tgz", + "integrity": "sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw==" + } } }, "@types/graceful-fs": { @@ -3203,14 +3189,28 @@ "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", "requires": { "@types/node": "*" + }, + "dependencies": { + "@types/node": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.0.tgz", + "integrity": "sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw==" + } } }, "@types/http-proxy": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.7.tgz", - "integrity": "sha512-9hdj6iXH64tHSLTY+Vt2eYOGzSogC+JQ2H7bdPWkuh7KXP5qLllWx++t+K9Wk556c3dkDdPws/SpMRi0sdCT1w==", + "version": "1.17.8", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.8.tgz", + "integrity": "sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA==", "requires": { "@types/node": "*" + }, + "dependencies": { + "@types/node": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.0.tgz", + "integrity": "sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw==" + } } }, "@types/istanbul-lib-coverage": { @@ -3262,7 +3262,8 @@ "@types/node": { "version": "16.11.12", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.12.tgz", - "integrity": "sha512-+2Iggwg7PxoO5Kyhvsq9VarmPbIelXP070HMImEpbtGCoyWNINQj4wzjbQCXzdHTRXnqufutJb5KAURZANNBAw==" + "integrity": "sha512-+2Iggwg7PxoO5Kyhvsq9VarmPbIelXP070HMImEpbtGCoyWNINQj4wzjbQCXzdHTRXnqufutJb5KAURZANNBAw==", + "dev": true }, "@types/npmlog": { "version": "4.1.3", @@ -3325,6 +3326,13 @@ "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", "requires": { "@types/node": "*" + }, + "dependencies": { + "@types/node": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.0.tgz", + "integrity": "sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw==" + } } }, "@types/retry": { @@ -3376,6 +3384,11 @@ "source-map": "^0.6.1" }, "dependencies": { + "@types/node": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.0.tgz", + "integrity": "sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw==" + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -4492,9 +4505,9 @@ "dev": true }, "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.1.tgz", + "integrity": "sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg==" }, "bn.js": { "version": "5.2.0", @@ -4502,27 +4515,22 @@ "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" }, "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.1.tgz", + "integrity": "sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA==", "requires": { - "bytes": "3.1.0", + "bytes": "3.1.1", "content-type": "~1.0.4", "debug": "2.6.9", "depd": "~1.1.2", - "http-errors": "1.7.2", + "http-errors": "1.8.1", "iconv-lite": "0.4.24", "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" + "qs": "6.9.6", + "raw-body": "2.4.2", + "type-is": "~1.6.18" }, "dependencies": { - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" - }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -4537,9 +4545,9 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + "version": "6.9.6", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz", + "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==" } } }, @@ -4663,9 +4671,9 @@ } }, "browserslist": { - "version": "4.19.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.0.tgz", - "integrity": "sha512-JGHzm73ei2OnAcobcQ61GXNnN6vDCg5Oz5MayudL+FyzjoLnCzUWnuLtDLMIYw8aXgQzzdCZMVky+fftD5jbtA==", + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", + "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", "requires": { "caniuse-lite": "^1.0.30001286", "electron-to-chromium": "^1.4.17", @@ -4773,9 +4781,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001286", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001286.tgz", - "integrity": "sha512-zaEMRH6xg8ESMi2eQ3R4eZ5qw/hJiVsO/HlLwniIwErij0JDr9P+8V4dtx1l+kLq6j3yy8l8W4fst1lBnat5wQ==" + "version": "1.0.30001287", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001287.tgz", + "integrity": "sha512-4udbs9bc0hfNrcje++AxBuc6PfLNHwh3PO9kbwnfCQWyqtlzg3py0YgFu8jyRTTo85VAz4U+VLxSlID09vNtWA==" }, "caseless": { "version": "0.12.0", @@ -5036,9 +5044,9 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "colord": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.1.tgz", - "integrity": "sha512-4LBMSt09vR0uLnPVkOUBnmxgoaeN4ewRbx801wY/bXcltXfpR/G46OdWn96XpYmCWuYvO46aBZP4NgX8HpNAcw==" + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", + "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==" }, "colorette": { "version": "1.4.0", @@ -5142,9 +5150,9 @@ } }, "confusing-browser-globals": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz", - "integrity": "sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", "dev": true }, "connect-history-api-fallback": { @@ -5163,11 +5171,18 @@ "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" }, "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "5.2.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } } }, "content-type": { @@ -5184,9 +5199,9 @@ } }, "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" }, "cookie-signature": { "version": "1.0.6", @@ -5227,16 +5242,16 @@ } }, "core-js": { - "version": "3.19.3", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.19.3.tgz", - "integrity": "sha512-LeLBMgEGSsG7giquSzvgBrTS7V5UL6ks3eQlUSbN8dJStlLFiRzUm5iqsRyzUB8carhfKjkJ2vzKqE6z1Vga9g==" + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.20.0.tgz", + "integrity": "sha512-KjbKU7UEfg4YPpskMtMXPhUKn7m/1OdTHTVjy09ScR2LVaoUXe8Jh0UdvN2EKUR6iKTJph52SJP95mAB0MnVLQ==" }, "core-js-compat": { - "version": "3.19.3", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.19.3.tgz", - "integrity": "sha512-59tYzuWgEEVU9r+SRgceIGXSSUn47JknoiXW6Oq7RW8QHjXWz3/vp8pa7dbtuVu40sewz3OP3JmQEcDdztrLhA==", + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.20.0.tgz", + "integrity": "sha512-relrah5h+sslXssTTOkvqcC/6RURifB0W5yhYBdBkaPYa5/2KBMiog3XiD+s3TwEHWxInWVv4Jx2/Lw0vng+IQ==", "requires": { - "browserslist": "^4.18.1", + "browserslist": "^4.19.1", "semver": "7.0.0" }, "dependencies": { @@ -5248,9 +5263,9 @@ } }, "core-js-pure": { - "version": "3.19.3", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.19.3.tgz", - "integrity": "sha512-N3JruInmCyt7EJj5mAq3csCgGYgiSqu7p7TQp2KOztr180/OAIxyIvL1FCjzgmQk/t3Yniua50Fsak7FShI9lA==" + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.20.0.tgz", + "integrity": "sha512-qsrbIwWSEEYOM7z616jAVgwhuDDtPLwZSpUsU3vyUkHYqKTf/uwOJBZg2V7lMurYWkpVlaVOxBrfX0Q3ppvjfg==" }, "core-util-is": { "version": "1.0.3", @@ -5404,9 +5419,9 @@ } }, "css-minimizer-webpack-plugin": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.2.0.tgz", - "integrity": "sha512-5q4myvkmm29jRlI73Fl8Mc008i6o6hCEKnV6/fOrzRVDWD6EFGwDRX+SM2qCVeZ7XiztRDKHpTGDUeUMAOOagg==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.3.0.tgz", + "integrity": "sha512-+SU5aHgGZkk2kxKsq/BZXnYee2cjHIiFARF2gGaG6gIFtLJ87330GeafqhxAemwi/WgQ40v0OQ7pBVljKAMoXg==", "requires": { "@types/cssnano": "^4.0.1", "cssnano": "^5.0.6", @@ -5475,15 +5490,15 @@ } }, "css-select": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", - "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.0.tgz", + "integrity": "sha512-6YVG6hsH9yIb/si3Th/is8Pex7qnVHO6t7q7U6TIUnkQASGbS8tnUDBftnPynLNnuUl/r2+PTd0ekiiq7R0zJw==", "requires": { "boolbase": "^1.0.0", - "css-what": "^5.0.0", - "domhandler": "^4.2.0", - "domutils": "^2.6.0", - "nth-check": "^2.0.0" + "css-what": "^5.1.0", + "domhandler": "^4.3.0", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" } }, "css-select-base-adapter": { @@ -5523,25 +5538,25 @@ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" }, "cssnano": { - "version": "5.0.12", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.12.tgz", - "integrity": "sha512-U38V4x2iJ3ijPdeWqUrEr4eKBB5PbEKsNP5T8xcik2Au3LeMtiMHX0i2Hu9k51FcKofNZumbrcdC6+a521IUHg==", + "version": "5.0.13", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.13.tgz", + "integrity": "sha512-cAmLruIF28a7vKIOieXCTrllaLwbouxV1PPi8Z4M+XloXbmeooWAu4KhJgASo4vQUwbs2pqDgAlnZ1ZKJZKtuw==", "requires": { - "cssnano-preset-default": "^5.1.8", + "cssnano-preset-default": "^5.1.9", "is-resolvable": "^1.1.0", "lilconfig": "^2.0.3", "yaml": "^1.10.2" } }, "cssnano-preset-default": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.8.tgz", - "integrity": "sha512-zWMlP0+AMPBVE852SqTrP0DnhTcTA2C1wAF92TKZ3Va+aUVqLIhkqKlnJIXXdqXD7RN+S1ujuWmNpvrJBiM/vg==", + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.9.tgz", + "integrity": "sha512-RhkEucqlQ+OxEi14K1p8gdXcMQy1mSpo7P1oC44oRls7BYIj8p+cht4IFBFV3W4iOjTP8EUB33XV1fX9KhDzyA==", "requires": { "css-declaration-sorter": "^6.0.3", "cssnano-utils": "^2.0.1", "postcss-calc": "^8.0.0", - "postcss-colormin": "^5.2.1", + "postcss-colormin": "^5.2.2", "postcss-convert-values": "^5.0.2", "postcss-discard-comments": "^5.0.1", "postcss-discard-duplicates": "^5.0.1", @@ -5560,7 +5575,7 @@ "postcss-normalize-string": "^5.0.1", "postcss-normalize-timing-functions": "^5.0.1", "postcss-normalize-unicode": "^5.0.1", - "postcss-normalize-url": "^5.0.3", + "postcss-normalize-url": "^5.0.4", "postcss-normalize-whitespace": "^5.0.1", "postcss-ordered-values": "^5.0.2", "postcss-reduce-initial": "^5.0.2", @@ -5675,9 +5690,15 @@ }, "dependencies": { "@types/node": { - "version": "14.18.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.0.tgz", - "integrity": "sha512-0GeIl2kmVMXEnx8tg1SlG6Gg8vkqirrW752KqolYo1PHevhhZN3bhJ67qHj+bQaINhX0Ra3TlWwRvMCd9iEfNQ==", + "version": "14.18.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.1.tgz", + "integrity": "sha512-fTFWOFrgAkj737w1o0HLTIgisgYHnsZfeiqhG1Ltrf/iJjudEbUwetQAsfrtVE49JGwvpEzQR+EbMkIqG4227g==", + "dev": true + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", "dev": true }, "commander": { @@ -6067,9 +6088,9 @@ } }, "electron-to-chromium": { - "version": "1.4.17", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.17.tgz", - "integrity": "sha512-zhk1MravPtq/KBhmGB7TLBILmXTgRG9TFSI3qS3DbgyfHzIl72iiTE37r/BHIbPCJJlWIo5rySyxiH4vWhu2ZA==" + "version": "1.4.22", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.22.tgz", + "integrity": "sha512-IiW8cV8eyjMhuWqk9wwHRPOVN+5Fa7NHOTjogrwg2H9TNiLVA8ywjOJnVKoywaqUHryDUOpK7Mg6P1FETisi0g==" }, "elliptic": { "version": "6.5.4", @@ -6504,49 +6525,6 @@ "@typescript-eslint/typescript-estree": "5.7.0", "debug": "^4.3.2" } - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "requires": { - "esutils": "^2.0.2" - } - }, - "eslint-plugin-react": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.27.1.tgz", - "integrity": "sha512-meyunDjMMYeWr/4EBLTV1op3iSG3mjT/pz5gti38UzfM4OPpNc2m0t2xvKCOMU5D6FSdd34BIMFOvQbW+i8GAA==", - "requires": { - "array-includes": "^3.1.4", - "array.prototype.flatmap": "^1.2.5", - "doctrine": "^2.1.0", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.0.4", - "object.entries": "^1.1.5", - "object.fromentries": "^2.0.5", - "object.hasown": "^1.1.0", - "object.values": "^1.1.5", - "prop-types": "^15.7.2", - "resolve": "^2.0.0-next.3", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.6" - } - }, - "resolve": { - "version": "2.0.0-next.3", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", - "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, @@ -6737,32 +6715,30 @@ } }, "eslint-plugin-react": { - "version": "7.26.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.26.1.tgz", - "integrity": "sha512-Lug0+NOFXeOE+ORZ5pbsh6mSKjBKXDXItUD2sQoT+5Yl0eoT82DqnXeTMfUare4QVCn9QwXbfzO/dBLjLXwVjQ==", - "dev": true, + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.27.1.tgz", + "integrity": "sha512-meyunDjMMYeWr/4EBLTV1op3iSG3mjT/pz5gti38UzfM4OPpNc2m0t2xvKCOMU5D6FSdd34BIMFOvQbW+i8GAA==", "requires": { - "array-includes": "^3.1.3", - "array.prototype.flatmap": "^1.2.4", + "array-includes": "^3.1.4", + "array.prototype.flatmap": "^1.2.5", "doctrine": "^2.1.0", - "estraverse": "^5.2.0", + "estraverse": "^5.3.0", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.0.4", - "object.entries": "^1.1.4", - "object.fromentries": "^2.0.4", - "object.hasown": "^1.0.0", - "object.values": "^1.1.4", + "object.entries": "^1.1.5", + "object.fromentries": "^2.0.5", + "object.hasown": "^1.1.0", + "object.values": "^1.1.5", "prop-types": "^15.7.2", "resolve": "^2.0.0-next.3", "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.5" + "string.prototype.matchall": "^4.0.6" }, "dependencies": { "doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, "requires": { "esutils": "^2.0.2" } @@ -6771,7 +6747,6 @@ "version": "2.0.0-next.3", "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", - "dev": true, "requires": { "is-core-module": "^2.2.0", "path-parse": "^1.0.6" @@ -6780,8 +6755,7 @@ "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, @@ -6973,16 +6947,16 @@ } }, "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.2.tgz", + "integrity": "sha512-oxlxJxcQlYwqPWKVJJtvQiwHgosH/LrLSPA+H4UxpyvSS6jC5aH+5MoHFM+KABgTOt0APue4w66Ha8jCUo9QGg==", "requires": { "accepts": "~1.3.7", "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", + "body-parser": "1.19.1", + "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.4.0", + "cookie": "0.4.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "~1.1.2", @@ -6996,13 +6970,13 @@ "on-finished": "~2.3.0", "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", + "proxy-addr": "~2.0.7", + "qs": "6.9.6", "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", + "safe-buffer": "5.2.1", + "send": "0.17.2", + "serve-static": "1.14.2", + "setprototypeof": "1.2.0", "statuses": "~1.5.0", "type-is": "~1.6.18", "utils-merge": "1.0.1", @@ -7028,9 +7002,14 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + "version": "6.9.6", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz", + "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==" + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" } } }, @@ -7729,22 +7708,15 @@ "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=" }, "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", "requires": { "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - } + "toidentifier": "1.0.1" } }, "http-parser-js": { @@ -7976,11 +7948,6 @@ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==" }, - "is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==" - }, "is-arguments": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", @@ -8618,6 +8585,11 @@ "collect-v8-coverage": "^1.0.0" } }, + "@types/node": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.0.tgz", + "integrity": "sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw==" + }, "jest-util": { "version": "27.4.2", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.4.2.tgz", @@ -8709,6 +8681,11 @@ "pretty-format": "^27.4.2" }, "dependencies": { + "@types/node": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.0.tgz", + "integrity": "sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw==" + }, "jest-util": { "version": "27.4.2", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.4.2.tgz", @@ -8738,6 +8715,11 @@ "jsdom": "^16.6.0" }, "dependencies": { + "@types/node": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.0.tgz", + "integrity": "sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw==" + }, "jest-util": { "version": "27.4.2", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.4.2.tgz", @@ -8766,6 +8748,11 @@ "jest-util": "^27.4.2" }, "dependencies": { + "@types/node": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.0.tgz", + "integrity": "sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw==" + }, "jest-util": { "version": "27.4.2", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.4.2.tgz", @@ -8806,6 +8793,11 @@ "walker": "^1.0.7" }, "dependencies": { + "@types/node": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.0.tgz", + "integrity": "sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw==" + }, "jest-util": { "version": "27.4.2", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.4.2.tgz", @@ -8857,6 +8849,11 @@ "collect-v8-coverage": "^1.0.0" } }, + "@types/node": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.0.tgz", + "integrity": "sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw==" + }, "jest-util": { "version": "27.4.2", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.4.2.tgz", @@ -8915,6 +8912,13 @@ "requires": { "@jest/types": "^27.4.2", "@types/node": "*" + }, + "dependencies": { + "@types/node": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.0.tgz", + "integrity": "sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw==" + } } }, "jest-pnp-resolver": { @@ -8995,6 +8999,11 @@ "collect-v8-coverage": "^1.0.0" } }, + "@types/node": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.0.tgz", + "integrity": "sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw==" + }, "jest-resolve": { "version": "27.4.5", "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.4.5.tgz", @@ -9071,6 +9080,11 @@ "collect-v8-coverage": "^1.0.0" } }, + "@types/node": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.0.tgz", + "integrity": "sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw==" + }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -9175,6 +9189,13 @@ "requires": { "@types/node": "*", "graceful-fs": "^4.2.4" + }, + "dependencies": { + "@types/node": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.0.tgz", + "integrity": "sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw==" + } } }, "jest-snapshot": { @@ -9208,6 +9229,11 @@ "semver": "^7.3.2" }, "dependencies": { + "@types/node": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.0.tgz", + "integrity": "sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw==" + }, "jest-resolve": { "version": "27.4.5", "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.4.5.tgz", @@ -9251,6 +9277,13 @@ "graceful-fs": "^4.2.4", "is-ci": "^3.0.0", "picomatch": "^2.2.3" + }, + "dependencies": { + "@types/node": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.0.tgz", + "integrity": "sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw==" + } } }, "jest-validate": { @@ -9326,6 +9359,11 @@ "supports-color": "^8.0.0" }, "dependencies": { + "@types/node": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.0.tgz", + "integrity": "sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw==" + }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -10181,6 +10219,11 @@ "regenerator-runtime": "^0.13.4" } }, + "@types/node": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.0.tgz", + "integrity": "sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw==" + }, "acorn": { "version": "8.5.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", @@ -10340,6 +10383,11 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -10353,6 +10401,11 @@ "safe-buffer": "~5.2.0" } }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, "watchpack": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.0.tgz", @@ -10557,11 +10610,11 @@ }, "dependencies": { "@nrwl/cli": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/@nrwl/cli/-/cli-13.3.2.tgz", - "integrity": "sha512-Vcvw8TIMPtY28IiM9wchrM1mxEtNIIrQkvgOrxx4NMfz28HkH4x+kEjyQ3UUZHnPbFDggpYX0KHn5mtFJSG4XA==", + "version": "13.3.8", + "resolved": "https://registry.npmjs.org/@nrwl/cli/-/cli-13.3.8.tgz", + "integrity": "sha512-6uRXGjqtObTnyzNCMRl51WRAFyREkWPrX5ipt7jMkRHkbyVhThBYfYK9BRdL2BZrofHM41c3tXXCmWCt/j4a6A==", "requires": { - "@nrwl/tao": "13.3.2", + "@nrwl/tao": "13.3.8", "chalk": "4.1.0", "enquirer": "~2.3.6", "v8-compile-cache": "2.3.0", @@ -10570,9 +10623,9 @@ } }, "@nrwl/tao": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-13.3.2.tgz", - "integrity": "sha512-MZfaWVG4+sjD1yahHEAHOeYph/YOmeuhsVPfkw5iGAMDZnOgMzI7pcxH4JqR50weTpwOIVWQxB/eugp1Icuaqg==", + "version": "13.3.8", + "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-13.3.8.tgz", + "integrity": "sha512-2YTOp1d1oOrzAMHsIMuOXJfbjORwsE/OVBIivcQCkTbrc7wiG+IRZWPgEc4di7bhsergCMxXlSFt1dmR8UZIZw==", "requires": { "chalk": "4.1.0", "enquirer": "~2.3.6", @@ -10580,7 +10633,7 @@ "fs-extra": "^9.1.0", "ignore": "^5.0.4", "jsonc-parser": "3.0.0", - "nx": "13.3.2", + "nx": "13.3.8", "rxjs": "^6.5.4", "rxjs-for-await": "0.0.2", "semver": "7.3.4", @@ -10590,11 +10643,11 @@ }, "dependencies": { "nx": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/nx/-/nx-13.3.2.tgz", - "integrity": "sha512-7zESkiQ5kmzKuT04k5X/osyCNrGYCGjn1KsreQhv2PeClc461U5dGwEHiiPZC80RqAsO6LL4jCx5MLVAE7arJg==", + "version": "13.3.8", + "resolved": "https://registry.npmjs.org/nx/-/nx-13.3.8.tgz", + "integrity": "sha512-cN3KNSpk+5xsRkh3nZoeggoAK2UnUNJr5ges62TggEclsWgdY7XADW5DL3un5+Cfk+DAseu6kTE7tKSpjd+aFA==", "requires": { - "@nrwl/cli": "13.3.2" + "@nrwl/cli": "13.3.8" } } } @@ -11026,14 +11079,14 @@ } }, "postcss-colormin": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.1.tgz", - "integrity": "sha512-VVwMrEYLcHYePUYV99Ymuoi7WhKrMGy/V9/kTS0DkCoJYmmjdOMneyhzYUxcNgteKDVbrewOkSM7Wje/MFwxzA==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.2.tgz", + "integrity": "sha512-tSEe3NpqWARUTidDlF0LntPkdlhXqfDFuA1yslqpvvGAfpZ7oBaw+/QXd935NKm2U9p4PED0HDZlzmMk7fVC6g==", "requires": { "browserslist": "^4.16.6", "caniuse-api": "^3.0.0", "colord": "^2.9.1", - "postcss-value-parser": "^4.1.0" + "postcss-value-parser": "^4.2.0" } }, "postcss-convert-values": { @@ -11294,13 +11347,12 @@ } }, "postcss-normalize-url": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.3.tgz", - "integrity": "sha512-qWiUMbvkRx3kc1Dp5opzUwc7MBWZcSDK2yofCmdvFBCpx+zFPkxBC1FASQ59Pt+flYfj/nTZSkmF56+XG5elSg==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.4.tgz", + "integrity": "sha512-cNj3RzK2pgQQyNp7dzq0dqpUpQ/wYtdDZM3DepPmFjCmYIfceuD9VIAcOdvrNetjIU65g1B4uwdP/Krf6AFdXg==", "requires": { - "is-absolute-url": "^3.0.3", "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.1.0" + "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-whitespace": { @@ -11590,21 +11642,14 @@ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" }, "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz", + "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==", "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", + "bytes": "3.1.1", + "http-errors": "1.8.1", "iconv-lite": "0.4.24", "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" - } } }, "raw-loader": { @@ -12248,9 +12293,9 @@ } }, "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", + "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", "requires": { "debug": "2.6.9", "depd": "~1.1.2", @@ -12259,9 +12304,9 @@ "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "~1.7.2", + "http-errors": "1.8.1", "mime": "1.6.0", - "ms": "2.1.1", + "ms": "2.1.3", "on-finished": "~2.3.0", "range-parser": "~1.2.1", "statuses": "~1.5.0" @@ -12283,9 +12328,9 @@ } }, "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" } } }, @@ -12348,14 +12393,14 @@ } }, "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", + "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", "requires": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.17.1" + "send": "0.17.2" } }, "set-blocking": { @@ -12369,9 +12414,9 @@ "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" }, "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, "sha.js": { "version": "2.4.11", @@ -13106,11 +13151,11 @@ } }, "terser-webpack-plugin": { - "version": "5.2.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.2.5.tgz", - "integrity": "sha512-3luOVHku5l0QBeYS8r4CdHYWEGMmIj3H1U64jgkdZzECcSOJAyJ9TjuqcQZvw1Y+4AOBN9SeYJPJmFn2cM4/2g==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.0.tgz", + "integrity": "sha512-LPIisi3Ol4chwAaPP8toUJ3L4qCM1G0wao7L3qNv57Drezxj6+VEyySpPw4B1HSO2Eg/hDY/MNF5XihCAoqnsQ==", "requires": { - "jest-worker": "^27.0.6", + "jest-worker": "^27.4.1", "schema-utils": "^3.1.1", "serialize-javascript": "^6.0.0", "source-map": "^0.6.1", @@ -13233,9 +13278,9 @@ } }, "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" }, "tough-cookie": { "version": "4.0.0", @@ -13761,9 +13806,9 @@ } }, "webpack-dev-middleware": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.2.2.tgz", - "integrity": "sha512-DjZyYrsHhkikAFNvSNKrpnziXukU1EChFAh9j4LAm6ndPLPW8cN0KhM7T+RAiOqsQ6ABfQ8hoKIs9IWMTjov+w==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.0.tgz", + "integrity": "sha512-MouJz+rXAm9B1OTOYaJnn6rtD/lWZPy2ufQCH3BPs8Rloh/Du6Jze4p7AeLYHkVi0giJnYLaSGDC7S+GM9arhg==", "requires": { "colorette": "^2.0.10", "memfs": "^3.2.2", diff --git a/demos/nx-next-monorepo-demo/package.json b/demos/nx-next-monorepo-demo/package.json index 29a9dbb9bc..a976cbc477 100644 --- a/demos/nx-next-monorepo-demo/package.json +++ b/demos/nx-next-monorepo-demo/package.json @@ -44,7 +44,7 @@ "eslint-plugin-cypress": "^2.10.3", "eslint-plugin-import": "2.25.3", "eslint-plugin-jsx-a11y": "6.5.1", - "eslint-plugin-react": "7.26.1", + "eslint-plugin-react": "7.27.1", "eslint-plugin-react-hooks": "4.3.0", "jest": "27.4.4", "prettier": "^2.3.1", diff --git a/package-lock.json b/package-lock.json index ca42a2a105..ede6ea8256 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@netlify/plugin-nextjs", - "version": "4.0.0", + "version": "4.1.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -413,9 +413,9 @@ } }, "@babel/parser": { - "version": "7.16.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.5.tgz", - "integrity": "sha512-+Ce7T5iPNWzfu9C1aB5tN3Lyafs5xb3Ic7vBWyZL2KXT3QSdD1dD3CvgOzPmQKoNNRt6uauc0XwNJTQtXC2/Mw==", + "version": "7.16.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.6.tgz", + "integrity": "sha512-Gr86ujcNuPDnNOY8mi383Hvi8IYrJVJYuf3XcuBM/Dgd+bINn/7tHqsj+tKkoreMbmGsFLsltI/JJd8fOFWGDQ==", "dev": true }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { @@ -2437,9 +2437,9 @@ } }, "@mapbox/node-pre-gyp": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.7.tgz", - "integrity": "sha512-PplSvl4pJ5N3BkVjAdDzpPhVUPdC73JgttkR+LnBx2OORC1GCQsBjUeEuipf9uOaAM1SbxcdZFfR3KDTKm2S0A==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.8.tgz", + "integrity": "sha512-CMGKi28CF+qlbXh26hDe6NxCd7amqeAzEqnS6IHeO6LoaKyM/n+Xw3HT1COdq8cuioOdlKdqn/hCmqPUOMOywg==", "dev": true, "requires": { "detect-libc": "^1.0.3", @@ -2447,7 +2447,7 @@ "make-dir": "^3.1.0", "node-fetch": "^2.6.5", "nopt": "^5.0.0", - "npmlog": "^6.0.0", + "npmlog": "^5.0.1", "rimraf": "^3.0.2", "semver": "^7.3.5", "tar": "^6.1.11" @@ -2470,16 +2470,16 @@ } }, "gauge": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.0.tgz", - "integrity": "sha512-F8sU45yQpjQjxKkm1UOAhf0U/O0aFt//Fl7hsrNVto+patMHjs7dPI9mFOGUKbhrgKm0S3EjW3scMFuQmWSROw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", "dev": true, "requires": { - "ansi-regex": "^5.0.1", "aproba": "^1.0.3 || ^2.0.0", "color-support": "^1.1.2", "console-control-strings": "^1.0.0", "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", "signal-exit": "^3.0.0", "string-width": "^4.2.3", "strip-ansi": "^6.0.1", @@ -2493,14 +2493,14 @@ "dev": true }, "npmlog": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.0.tgz", - "integrity": "sha512-03ppFRGlsyUaQFbGC2C8QWJN/C/K7PsfyD9aQdhVKAQIH4sQBc8WASqFBP7O+Ut4d2oo5LoeoboB3cGdBZSp6Q==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", "dev": true, "requires": { "are-we-there-yet": "^2.0.0", "console-control-strings": "^1.1.0", - "gauge": "^4.0.0", + "gauge": "^3.0.0", "set-blocking": "^2.0.0" } }, @@ -2554,19 +2554,19 @@ "dev": true }, "@netlify/build": { - "version": "20.3.0", - "resolved": "https://registry.npmjs.org/@netlify/build/-/build-20.3.0.tgz", - "integrity": "sha512-uq/WYYZfPTaXnGWwVnjvN6bb1u2PqpYLNbZmde7oIr0Tw6A8jVaGvbktR7frvwSEaP5tqI6pmzPStoDgOKMy5w==", + "version": "25.0.1", + "resolved": "https://registry.npmjs.org/@netlify/build/-/build-25.0.1.tgz", + "integrity": "sha512-3+uNN3zeC3dQd8wlFfogc3dCTPoYlIYH/TycnrcMCnSZ8jhT5FMa9DV0LCcxgwAoEPud8ucpUcvD+GiO3n+q9g==", "dev": true, "requires": { "@bugsnag/js": "^7.0.0", - "@netlify/cache-utils": "^3.0.0", - "@netlify/config": "^16.0.0", - "@netlify/functions-utils": "^3.0.0", - "@netlify/git-utils": "^3.0.0", + "@netlify/cache-utils": "^4.0.0", + "@netlify/config": "^17.0.0", + "@netlify/functions-utils": "^4.0.0", + "@netlify/git-utils": "^4.0.0", "@netlify/plugin-edge-handlers": "^3.0.0", - "@netlify/plugins-list": "^6.0.1", - "@netlify/run-utils": "^3.0.0", + "@netlify/plugins-list": "^6.2.0", + "@netlify/run-utils": "^4.0.0", "@netlify/zip-it-and-ship-it": "^5.2.0", "@sindresorhus/slugify": "^1.1.0", "ansi-escapes": "^4.3.2", @@ -2766,9 +2766,9 @@ } }, "@netlify/cache-utils": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@netlify/cache-utils/-/cache-utils-3.0.1.tgz", - "integrity": "sha512-AY8brDn2LQEg0Q81Hnun3zNNe/yV4SFHUGriJDuHetxpfEicAlHnuNJuOeuxSxkPjYCIBwhtVBYpR8qP+9Q/4A==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@netlify/cache-utils/-/cache-utils-4.0.0.tgz", + "integrity": "sha512-8BNDYMkkrkmlfwNaSeRqOhGu8lETc2ixM6bmvDAXuE5TcNNAActWcWurocwS419HNwyTw1kSEUKLp6Vx5/wiBg==", "dev": true, "requires": { "cpy": "^8.1.0", @@ -2792,9 +2792,9 @@ } }, "@netlify/config": { - "version": "16.0.7", - "resolved": "https://registry.npmjs.org/@netlify/config/-/config-16.0.7.tgz", - "integrity": "sha512-/t7/F9WcLqXbOmHynZYZ5iMD8XqDNWyVjAu0XiwNsf4/wLBPN9kfjsOm/fYNi3MncLO03WA70iT7BCUzw2tnYQ==", + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@netlify/config/-/config-17.0.0.tgz", + "integrity": "sha512-nm6Xls6Q4CGQlnckBNczdSY6jF/X7lCOZCfULyFE/mRivLqQ46eZOUXDIWYMWMrxNozjMiRfiSrMvlbm8ZV2LA==", "dev": true, "requires": { "chalk": "^4.1.2", @@ -2912,9 +2912,9 @@ "dev": true }, "@netlify/eslint-config-node": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@netlify/eslint-config-node/-/eslint-config-node-4.0.0.tgz", - "integrity": "sha512-KaUcfB4uEoTd+dUY4LvgiE3nMB2G2fE42ps03KdOwM96A8eOzvnQn+e9/c2j6yK1Sb9lxXohoqazl3XRr5PHBw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@netlify/eslint-config-node/-/eslint-config-node-4.0.1.tgz", + "integrity": "sha512-0n3HbUbZ62za4PCYrPxnmXwCpHYTAon2jRrsO8HSmphqfydOseqkhM/7IYgUL/kVlMcN2FkJFWXAXnneOqPlaw==", "dev": true, "requires": { "@babel/core": "^7.13.8", @@ -3054,20 +3054,20 @@ } }, "@netlify/functions-utils": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@netlify/functions-utils/-/functions-utils-3.0.1.tgz", - "integrity": "sha512-/DpiPus/i7H3hYHWgj2gLSay9HEXC+bhNKQxUyvfC0WozcpdW3YLpm8VI91hJ1usbsO4QjKkaV+X6SBdUhvXAw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@netlify/functions-utils/-/functions-utils-4.0.0.tgz", + "integrity": "sha512-jbIOsZYzPXY2L2SxiRTrgWCaOCUvtgcXVgDIE4RTAP37iurK2F78OB+FPcEnPlQniG/Lq4z5HbQvLfyB8f+wEA==", "dev": true, "requires": { - "@netlify/zip-it-and-ship-it": "^5.0.0", + "@netlify/zip-it-and-ship-it": "^5.2.0", "cpy": "^8.1.0", "path-exists": "^4.0.0" } }, "@netlify/git-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@netlify/git-utils/-/git-utils-3.0.0.tgz", - "integrity": "sha512-dfK8B3Lt/wHwdo8GL+gqGKesCYoiqZYQu3hIdQA0zPhIgRvm7W3fgfskSwlke8Zt3g11EesiGxrzUNIjsd7HpQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@netlify/git-utils/-/git-utils-4.0.0.tgz", + "integrity": "sha512-CZGyItsvmX9dBbzoxS6JUSKJzYKM/RfLQHeq18dombL1sk0jxsWcXdwKfZUGqw98T11uGz6JDPQUp/oUw2rNuA==", "dev": true, "requires": { "execa": "^5.1.1", @@ -3216,6 +3216,12 @@ "typescript": "^4.1.5" }, "dependencies": { + "@types/node": { + "version": "16.11.14", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.14.tgz", + "integrity": "sha512-mK6BKLpL0bG6v2CxHbm0ed6RcZrAtTHBTd/ZpnlVPVa3HkumsqLE4BC4u6TQ8D7pnrRbOU0am6epuALs+Ncnzw==", + "dev": true + }, "del": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", @@ -3259,15 +3265,15 @@ } }, "@netlify/plugins-list": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@netlify/plugins-list/-/plugins-list-6.1.0.tgz", - "integrity": "sha512-jzUWb3Xk3FBP/CFnOjVdgpC5LZJtJrh2Z84ZOTaWDmYm40JFkm3KMzVcA9iTIYyT+FfscFpPTiptxsuSljGJpg==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@netlify/plugins-list/-/plugins-list-6.2.0.tgz", + "integrity": "sha512-ZkrNrq1A/pVt32XsSLye9We0v+f0yqnOMD32Yu17KoMsL6AVF0KOyiAqjuJFNOZlusTkLgmZuMAbtmriybP0AQ==", "dev": true }, "@netlify/run-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@netlify/run-utils/-/run-utils-3.0.0.tgz", - "integrity": "sha512-CaHpFDHYe4sYjJ/KnbCKo2qx19PSHktFcRfafJU0de2YrJ3K/J0Q6s7ZIjSzRjKUb0PIEq2ivgMPi3jAHNy9kA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@netlify/run-utils/-/run-utils-4.0.0.tgz", + "integrity": "sha512-ZeQFp1VmSMfrKaV2A13HJ2b7UJBHf7DUvzAcNjjJdbugD8wCDs5l00rRZeLhyl48AIZl9ki+RpsATZ/j6qKn+g==", "dev": true, "requires": { "execa": "^5.1.1" @@ -3355,9 +3361,9 @@ } }, "@netlify/zip-it-and-ship-it": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@netlify/zip-it-and-ship-it/-/zip-it-and-ship-it-5.2.0.tgz", - "integrity": "sha512-YcLj5zcStVYPtPn1SNCjD5dXRpZ1HoAweywCOGNSAcOM6fn489IAaiXpkdmhA8oghBS5ukaP09lOZmJ9LD1m/A==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@netlify/zip-it-and-ship-it/-/zip-it-and-ship-it-5.3.0.tgz", + "integrity": "sha512-ZaHjN0wTtsmJr2NIquHr16T6A3wquKB7PFLodcjlinS57DatSr4exb3V02QrxuDbTD36VS2kiYfiZ8ueTXH/3Q==", "dev": true, "requires": { "@babel/parser": "^7.15.7", @@ -4345,9 +4351,9 @@ "dev": true }, "@types/node": { - "version": "16.11.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.12.tgz", - "integrity": "sha512-+2Iggwg7PxoO5Kyhvsq9VarmPbIelXP070HMImEpbtGCoyWNINQj4wzjbQCXzdHTRXnqufutJb5KAURZANNBAw==" + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.0.tgz", + "integrity": "sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw==" }, "@types/normalize-package-data": { "version": "2.4.1", @@ -5844,9 +5850,9 @@ } }, "browserslist": { - "version": "4.19.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.0.tgz", - "integrity": "sha512-JGHzm73ei2OnAcobcQ61GXNnN6vDCg5Oz5MayudL+FyzjoLnCzUWnuLtDLMIYw8aXgQzzdCZMVky+fftD5jbtA==", + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", + "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", "dev": true, "requires": { "caniuse-lite": "^1.0.30001286", @@ -6042,9 +6048,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001286", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001286.tgz", - "integrity": "sha512-zaEMRH6xg8ESMi2eQ3R4eZ5qw/hJiVsO/HlLwniIwErij0JDr9P+8V4dtx1l+kLq6j3yy8l8W4fst1lBnat5wQ==", + "version": "1.0.30001287", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001287.tgz", + "integrity": "sha512-4udbs9bc0hfNrcje++AxBuc6PfLNHwh3PO9kbwnfCQWyqtlzg3py0YgFu8jyRTTo85VAz4U+VLxSlID09vNtWA==", "dev": true }, "caseless": { @@ -6785,12 +6791,12 @@ "dev": true }, "core-js-compat": { - "version": "3.19.3", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.19.3.tgz", - "integrity": "sha512-59tYzuWgEEVU9r+SRgceIGXSSUn47JknoiXW6Oq7RW8QHjXWz3/vp8pa7dbtuVu40sewz3OP3JmQEcDdztrLhA==", + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.20.0.tgz", + "integrity": "sha512-relrah5h+sslXssTTOkvqcC/6RURifB0W5yhYBdBkaPYa5/2KBMiog3XiD+s3TwEHWxInWVv4Jx2/Lw0vng+IQ==", "dev": true, "requires": { - "browserslist": "^4.18.1", + "browserslist": "^4.19.1", "semver": "7.0.0" }, "dependencies": { @@ -6803,9 +6809,9 @@ } }, "core-js-pure": { - "version": "3.19.3", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.19.3.tgz", - "integrity": "sha512-N3JruInmCyt7EJj5mAq3csCgGYgiSqu7p7TQp2KOztr180/OAIxyIvL1FCjzgmQk/t3Yniua50Fsak7FShI9lA==", + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.20.0.tgz", + "integrity": "sha512-qsrbIwWSEEYOM7z616jAVgwhuDDtPLwZSpUsU3vyUkHYqKTf/uwOJBZg2V7lMurYWkpVlaVOxBrfX0Q3ppvjfg==", "dev": true }, "core-util-is": { @@ -7394,9 +7400,9 @@ }, "dependencies": { "@types/node": { - "version": "14.18.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.0.tgz", - "integrity": "sha512-0GeIl2kmVMXEnx8tg1SlG6Gg8vkqirrW752KqolYo1PHevhhZN3bhJ67qHj+bQaINhX0Ra3TlWwRvMCd9iEfNQ==", + "version": "14.18.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.1.tgz", + "integrity": "sha512-fTFWOFrgAkj737w1o0HLTIgisgYHnsZfeiqhG1Ltrf/iJjudEbUwetQAsfrtVE49JGwvpEzQR+EbMkIqG4227g==", "dev": true }, "ci-info": { @@ -8123,9 +8129,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.4.17", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.17.tgz", - "integrity": "sha512-zhk1MravPtq/KBhmGB7TLBILmXTgRG9TFSI3qS3DbgyfHzIl72iiTE37r/BHIbPCJJlWIo5rySyxiH4vWhu2ZA==", + "version": "1.4.22", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.22.tgz", + "integrity": "sha512-IiW8cV8eyjMhuWqk9wwHRPOVN+5Fa7NHOTjogrwg2H9TNiLVA8ywjOJnVKoywaqUHryDUOpK7Mg6P1FETisi0g==", "dev": true }, "elf-cam": { diff --git a/package.json b/package.json index 14eb1c5d24..91c794be7d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@netlify/plugin-nextjs", - "version": "4.0.0", + "version": "4.1.0", "description": "Run Next.js seamlessly on Netlify", "main": "lib/index.js", "files": [ @@ -74,8 +74,8 @@ "@babel/core": "^7.15.8", "@babel/preset-env": "^7.15.8", "@babel/preset-typescript": "^7.16.0", - "@netlify/build": "^20.3.0", - "@netlify/eslint-config-node": "^4.0.0", + "@netlify/build": "^25.0.1", + "@netlify/eslint-config-node": "^4.0.1", "@testing-library/cypress": "^8.0.1", "@types/fs-extra": "^9.0.13", "@types/jest": "^27.0.2", diff --git a/src/helpers/files.ts b/src/helpers/files.ts index d65560c664..3ace97daf5 100644 --- a/src/helpers/files.ts +++ b/src/helpers/files.ts @@ -111,7 +111,7 @@ export const moveStaticPages = async ({ Object.entries(prerenderManifest.routes).forEach(([route, { initialRevalidateSeconds }]) => { if (initialRevalidateSeconds) { // Find all files used by ISR routes - const trimmedPath = route.slice(1) + const trimmedPath = route === '/' ? 'index' : route.slice(1) isrFiles.add(`${trimmedPath}.html`) isrFiles.add(`${trimmedPath}.json`) if (initialRevalidateSeconds < MINIMUM_REVALIDATE_SECONDS) { diff --git a/src/helpers/redirects.ts b/src/helpers/redirects.ts index d261801ed8..70d6585f14 100644 --- a/src/helpers/redirects.ts +++ b/src/helpers/redirects.ts @@ -42,6 +42,21 @@ const generateLocaleRedirects = ({ return redirects } +export const generateStaticRedirects = ({ + netlifyConfig, + nextConfig: { i18n, basePath }, +}: { + netlifyConfig: NetlifyConfig + nextConfig: Pick +}) => { + // Static files are in `static` + netlifyConfig.redirects.push({ from: `${basePath}/_next/static/*`, to: `/static/:splat`, status: 200 }) + + if (i18n) { + netlifyConfig.redirects.push({ from: `${basePath}/:locale/_next/static/*`, to: `/static/:splat`, status: 200 }) + } +} + export const generateRedirects = async ({ netlifyConfig, nextConfig: { i18n, basePath, trailingSlash, appDir }, @@ -95,16 +110,10 @@ export const generateRedirects = async ({ dataRedirects.push(...netlifyRoutesForNextRoute(dataRoute)) }) - if (i18n) { - netlifyConfig.redirects.push({ from: `${basePath}/:locale/_next/static/*`, to: `/static/:splat`, status: 200 }) - } - const publicFiles = await globby('**/*', { cwd: join(appDir, 'public') }) // This is only used in prod, so dev uses `next dev` directly netlifyConfig.redirects.push( - // Static files are in `static` - { from: `${basePath}/_next/static/*`, to: `/static/:splat`, status: 200 }, // API routes always need to be served from the regular function { from: `${basePath}/api`, diff --git a/src/helpers/utils.ts b/src/helpers/utils.ts index e50ff9073e..37431c4f8d 100644 --- a/src/helpers/utils.ts +++ b/src/helpers/utils.ts @@ -33,3 +33,9 @@ export const netlifyRoutesForNextRoute = (nextRoute: string): Array => { .replace(DYNAMIC_PARAMETER_REGEX, '/:$1'), ) } + +export const shouldSkip = (): boolean => + process.env.NEXT_PLUGIN_FORCE_RUN === 'false' || + process.env.NEXT_PLUGIN_FORCE_RUN === '0' || + process.env.NETLIFY_NEXT_PLUGIN_SKIP === 'true' || + process.env.NETLIFY_NEXT_PLUGIN_SKIP === '1' diff --git a/src/helpers/verification.ts b/src/helpers/verification.ts index f7b87a170e..07d108ed3a 100644 --- a/src/helpers/verification.ts +++ b/src/helpers/verification.ts @@ -1,7 +1,8 @@ +/* eslint-disable max-lines */ import { existsSync, promises } from 'fs' import path, { relative } from 'path' -import { NetlifyPluginUtils } from '@netlify/build' +import { NetlifyConfig, NetlifyPluginUtils } from '@netlify/build' import { yellowBright, greenBright, blueBright, redBright, reset } from 'chalk' import { async as StreamZip } from 'node-stream-zip' import { outdent } from 'outdent' @@ -72,14 +73,13 @@ export const checkNextSiteHasBuilt = ({ publish, )}" does not contain a Next.js production build. Perhaps the build command was not run, or you specified the wrong publish directory. ${outWarning} - If you are using "next export" then the Essential Next.js plugin should be removed. See https://ntl.fyi/remove-plugin for details. + If you are using "next export" then you should set the environment variable NETLIFY_NEXT_PLUGIN_SKIP to "true". `) } if (existsSync(path.join(publish, 'export-detail.json'))) { failBuild(outdent` Detected that "next export" was run, but site is incorrectly publishing the ".next" directory. - This plugin is not needed for "next export" so should be removed, and publish directory set to "out". - See https://ntl.fyi/remove-plugin for more details on how to remove this plugin. + The publish directory should be set to "out", and you should set the environment variable NETLIFY_NEXT_PLUGIN_SKIP to "true". `) } } @@ -136,3 +136,55 @@ export const checkZipSize = async (file: string, maxSize: number = LAMBDA_MAX_SI greenBright`\n\nFor more information on fixing this, see ${blueBright`https://ntl.fyi/large-next-functions`}`, ) } + +export const getProblematicUserRewrites = ({ + redirects, + basePath, +}: { + redirects: NetlifyConfig['redirects'] + basePath: string +}) => { + const userRewrites: NetlifyConfig['redirects'] = [] + for (const redirect of redirects) { + // This is the first of the plugin-generated redirects so we can stop checking + if (redirect.from === `${basePath}/_next/static/*` && redirect.to === `/static/:splat` && redirect.status === 200) { + break + } + if ( + // Redirects are fine + (redirect.status === 200 || redirect.status === 404) && + // Rewriting to a function is also fine + !redirect.to.startsWith('/.netlify/') && + // ...so is proxying + !redirect.to.startsWith('http') + ) { + userRewrites.push(redirect) + } + } + return userRewrites +} + +export const warnForProblematicUserRewrites = ({ + redirects, + basePath, +}: { + redirects: NetlifyConfig['redirects'] + basePath: string +}) => { + const userRewrites = getProblematicUserRewrites({ redirects, basePath }) + if (userRewrites.length === 0) { + return + } + console.log( + yellowBright(outdent` + You have the following Netlify rewrite${ + userRewrites.length === 1 ? '' : 's' + } that might cause conflicts with the Next.js plugin: + + ${reset(userRewrites.map(({ from, to, status }) => `- ${from} ${to} ${status}`).join('\n'))} + + For more information, see https://ntl.fyi/next-rewrites + `), + ) +} +/* eslint-enable max-lines */ diff --git a/src/index.ts b/src/index.ts index 616a0b24c3..c14079e1f5 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,19 +1,22 @@ import { join, relative } from 'path' import { NetlifyPlugin } from '@netlify/build' +import { existsSync } from 'fs-extra' -import { ODB_FUNCTION_NAME } from './constants' +import { HANDLER_FUNCTION_NAME, ODB_FUNCTION_NAME } from './constants' import { restoreCache, saveCache } from './helpers/cache' import { getNextConfig, configureHandlerFunctions } from './helpers/config' import { moveStaticPages, movePublicFiles, patchNextFiles, unpatchNextFiles } from './helpers/files' import { generateFunctions, setupImageFunction, generatePagesResolver } from './helpers/functions' -import { generateRedirects } from './helpers/redirects' +import { generateRedirects, generateStaticRedirects } from './helpers/redirects' +import { shouldSkip } from './helpers/utils' import { verifyNetlifyBuildVersion, checkNextSiteHasBuilt, checkForRootPublish, checkZipSize, checkForOldFunctions, + warnForProblematicUserRewrites, } from './helpers/verification' const plugin: NetlifyPlugin = { @@ -26,6 +29,14 @@ const plugin: NetlifyPlugin = { }, }) { const { publish } = netlifyConfig.build + if (shouldSkip()) { + await restoreCache({ cache, publish }) + console.log('Not running Essential Next.js plugin') + if (existsSync(join(constants.INTERNAL_FUNCTIONS_SRC, HANDLER_FUNCTION_NAME))) { + console.log(`Please ensure you remove any generated functions from ${constants.INTERNAL_FUNCTIONS_SRC}`) + } + return + } checkForRootPublish({ publish, failBuild }) verifyNetlifyBuildVersion({ failBuild, ...constants }) @@ -43,6 +54,9 @@ const plugin: NetlifyPlugin = { build: { failBuild }, }, }) { + if (shouldSkip()) { + return + } const { publish } = netlifyConfig.build checkNextSiteHasBuilt({ publish, failBuild }) @@ -73,6 +87,11 @@ const plugin: NetlifyPlugin = { await moveStaticPages({ target, netlifyConfig, i18n }) } + await generateStaticRedirects({ + netlifyConfig, + nextConfig: { basePath, i18n }, + }) + await setupImageFunction({ constants, imageconfig: images, netlifyConfig, basePath }) await generateRedirects({ @@ -82,18 +101,36 @@ const plugin: NetlifyPlugin = { }, async onPostBuild({ - netlifyConfig, + netlifyConfig: { + build: { publish }, + redirects, + }, utils: { + status, cache, functions, build: { failBuild }, }, constants: { FUNCTIONS_DIST }, }) { - await saveCache({ cache, publish: netlifyConfig.build.publish }) + await saveCache({ cache, publish }) + + if (shouldSkip()) { + status.show({ + title: 'Essential Next.js plugin did not run', + summary: `Next cache was stored, but all other functions were skipped because ${ + process.env.NETLIFY_NEXT_PLUGIN_SKIP + ? `NETLIFY_NEXT_PLUGIN_SKIP is set` + : `NEXT_PLUGIN_FORCE_RUN is set to ${process.env.NEXT_PLUGIN_FORCE_RUN}` + }`, + }) + return + } + await checkForOldFunctions({ functions }) await checkZipSize(join(FUNCTIONS_DIST, `${ODB_FUNCTION_NAME}.zip`)) - const { basePath } = await getNextConfig({ publish: netlifyConfig.build.publish, failBuild }) + const { basePath } = await getNextConfig({ publish, failBuild }) + warnForProblematicUserRewrites({ basePath, redirects }) await unpatchNextFiles(basePath) }, } diff --git a/test/index.js b/test/index.js index 350690f356..d810daafdb 100644 --- a/test/index.js +++ b/test/index.js @@ -1,4 +1,4 @@ -const { writeJSON, unlink, existsSync, readFileSync, copy, ensureDir, readJson } = require('fs-extra') +const { writeJSON, unlink, existsSync, readFileSync, copy, ensureDir, readJson, writeFile } = require('fs-extra') const path = require('path') const process = require('process') const os = require('os') @@ -12,6 +12,8 @@ const { HANDLER_FUNCTION_NAME, ODB_FUNCTION_NAME } = require('../src/constants') const { join } = require('pathe') const { matchMiddleware, stripLocale, matchesRedirect, matchesRewrite } = require('../src/helpers/files') const { dirname } = require('path') +const { getProblematicUserRewrites } = require('../src/helpers/verification') +const { outdent } = require('outdent') const FIXTURES_DIR = `${__dirname}/fixtures` const SAMPLE_PROJECT_DIR = `${__dirname}/../demos/default` @@ -205,6 +207,24 @@ describe('onBuild()', () => { expect(onBuildHasRun(netlifyConfig)).toBe(true) }) + test('skips if NETLIFY_NEXT_PLUGIN_SKIP is set', async () => { + process.env.NETLIFY_NEXT_PLUGIN_SKIP = 'true' + await moveNextDist() + await plugin.onBuild(defaultArgs) + + expect(onBuildHasRun(netlifyConfig)).toBe(false) + delete process.env.NETLIFY_NEXT_PLUGIN_SKIP + }) + + test('skips if NEXT_PLUGIN_FORCE_RUN is "false"', async () => { + process.env.NEXT_PLUGIN_FORCE_RUN = 'false' + await moveNextDist() + await plugin.onBuild(defaultArgs) + + expect(onBuildHasRun(netlifyConfig)).toBe(false) + delete process.env.NEXT_PLUGIN_FORCE_RUN + }) + test("fails if BUILD_ID doesn't exist", async () => { await moveNextDist() await unlink(path.join(process.cwd(), '.next/BUILD_ID')) @@ -442,6 +462,62 @@ describe('onPostBuild', () => { console.log = oldLog }) + + test('warns if NETLIFY_NEXT_PLUGIN_SKIP is set', async () => { + await moveNextDist() + + process.env.NETLIFY_NEXT_PLUGIN_SKIP = 'true' + await moveNextDist() + const show = jest.fn() + await plugin.onPostBuild({ ...defaultArgs, utils: { ...defaultArgs.utils, status: { show } } }) + expect(show).toHaveBeenCalledWith({ + summary: 'Next cache was stored, but all other functions were skipped because NETLIFY_NEXT_PLUGIN_SKIP is set', + title: 'Essential Next.js plugin did not run', + }) + delete process.env.NETLIFY_NEXT_PLUGIN_SKIP + }) + + test('warns if NEXT_PLUGIN_FORCE_RUN is "false"', async () => { + await moveNextDist() + + process.env.NEXT_PLUGIN_FORCE_RUN = 'false' + await moveNextDist() + const show = jest.fn() + await plugin.onPostBuild({ ...defaultArgs, utils: { ...defaultArgs.utils, status: { show } } }) + expect(show).toHaveBeenCalledWith({ + summary: + 'Next cache was stored, but all other functions were skipped because NEXT_PLUGIN_FORCE_RUN is set to false', + title: 'Essential Next.js plugin did not run', + }) + delete process.env.NEXT_PLUGIN_FORCE_RUN + }) + + test('finds problematic user rewrites', async () => { + await moveNextDist() + const rewrites = getProblematicUserRewrites({ + redirects: [ + { from: '/previous', to: '/rewrites-are-a-problem', status: 200 }, + { from: '/api', to: '/.netlify/functions/are-ok', status: 200 }, + { from: '/remote', to: 'http://example.com/proxying/is/ok', status: 200 }, + { from: '/old', to: '/redirects-are-fine' }, + { from: '/*', to: '/404-is-a-problem', status: 404 }, + ...netlifyConfig.redirects, + ], + basePath: '', + }) + expect(rewrites).toEqual([ + { + from: '/previous', + status: 200, + to: '/rewrites-are-a-problem', + }, + { + from: '/*', + status: 404, + to: '/404-is-a-problem', + }, + ]) + }) }) describe('utility functions', () => {