diff --git a/.editorconfig b/.editorconfig index ae10a5cc..a090db43 100644 --- a/.editorconfig +++ b/.editorconfig @@ -8,3 +8,6 @@ indent_size = 2 indent_style = space insert_final_newline = true trim_trailing_whitespace = true + +[{*.diff,*.patch}] +trim_trailing_whitespace = false diff --git a/.eslintignore b/.eslintignore index bc126872..1ac2665e 100644 --- a/.eslintignore +++ b/.eslintignore @@ -4,3 +4,4 @@ public node_modules *.esm.js /drupal +/drupal-* diff --git a/.github/workflows/next-drupal.yml b/.github/workflows/next-drupal.yml index 7e2c2d62..0f1c132c 100644 --- a/.github/workflows/next-drupal.yml +++ b/.github/workflows/next-drupal.yml @@ -1,5 +1,8 @@ name: next-drupal on: + push: + branches: + - main pull_request_target: types: [opened, reopened, synchronize] diff --git a/.gitignore b/.gitignore index 798e6059..16411a16 100644 --- a/.gitignore +++ b/.gitignore @@ -1,97 +1,44 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# nyc test coverage -.nyc_output +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (http://nodejs.org/api/addons.html) -build/Release - -# Dependency directories +# dependencies node_modules/ -jspm_packages/ - -# Typescript v1 declaration files -typings/ - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# dotenv environment variables file -.env - -# gatsby files -.cache/ - -# Mac files -.DS_Store - -# Yarn -yarn-error.log +package-lock.json .pnp/ .pnp.js -# Yarn Integrity file -.yarn-integrity -.yarn +.yarn/install-state.gz -.netlify/ +# build/test artifacts +/.eslintcache +/packages/*/.turbo +/packages/*/coverage +/packages/*/dist -# Editors -.vscode/* -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json +# output of 'npm pack' +/packages/*/*.tgz -# phpstorm editor -.idea/ +# misc +.DS_Store +*.pem -# NPM lock files -package-lock.json +# IDE files +/.idea +/.vscode +!/.vscode/tasks.json +!/.vscode/launch.json +!/.vscode/extensions.json + +# debug +lerna-debug.log* +npm-debug.log* +yarn-debug.log* +yarn-error.log* -# Cypress -examples/**/cypress/screenshots -examples/**/cypress/videos +# environment variables file +.env +.envrc -# Other -*__clone* -dist -examples/certificates/* -drupal/web/sites/default/settings.local.php -.next -drupal/web/phpunit.xml -keys +# more misc +/*__clone__ +/drupal/web/phpunit.xml +/drupal/web/sites/default/settings.local.php +/drupal-* diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d413922e..424233dc 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -157,7 +157,7 @@ For example: The `` can be empty (e.g. if the change is a global or difficult to assign to a single component), in which case the parentheses are omitted and the first line just becomes: `: ` -The `` is optional. It must be used for a BREAKING CHANGE. For example, `fix(widgets)!: Fix incompatibility with widget v2` indicates the bugfix required a breaking change. +The `` is optional. It should be used for a BREAKING CHANGE. For example, `fix(widgets)!: Fix incompatibility with widget v2` indicates the bugfix required a breaking change. Note that the "BREAKING CHANGE:" FOOTER is REQUIRED (see below). ### Commit message `` diff --git a/MAINTAINING.md b/MAINTAINING.md new file mode 100644 index 00000000..d342fb96 --- /dev/null +++ b/MAINTAINING.md @@ -0,0 +1,213 @@ +# Maintenance guide + +This document is for maintainers to explain the various procedures for all the projects in this monorepo. + +## Making releases + +### `next` (Drupal Module) + +While maintaining releases for packages, starters and examples is done with Lerna, releases for Drupal modules are controlled by drupal.org’s infrastructure, so these steps don’t involve Lerna. + +1. Optionally, create a new branch on drupal.org. + + 1. Follow the “Release branches” rules described on the [“Release naming conventions” documentation](https://www.drupal.org/docs/develop/git/git-for-drupal-project-maintainers/release-naming-conventions). + 2. On Drupal.org’s GitLab, [create a new branch](https://git.drupalcode.org/project/next/-/tags/new). + 3. In the monorepo’s `package.json`, update the `sync:modules` script to use the new branch name. The monorepo’s `main` branch will then sync with this new drupal.org branch. + + For example, change: + + ``` + "sync:modules": "./scripts/sync-repo.sh 2.x git@git.drupal.org:project/ \"modules/*\"", + ``` + + to: + + ``` + "sync:modules": "./scripts/sync-repo.sh 3.x git@git.drupal.org:project/ \"modules/*\"", + ``` + +2. Run `yarn sync:modules` to sync the latest commit on `main` with the git repo on drupal.org. All recent changes will be squashed into a commit using the latest commit message. + +3. On Drupal.org’s GitLab, [tag a release](https://git.drupalcode.org/project/next/-/tags/new) following the [“Release tags naming conventions” docs](https://www.drupal.org/docs/develop/git/git-for-drupal-project-maintainers/release-naming-conventions#release-tags). + +4. On Drupal.org’s Next.js project page, [create a release](https://www.drupal.org/node/add/project-release/3192303) using the git tag you just created. + +### `next-drupal` (NPM package) + +Since we are using semantic commits, Lerna is able to read the git commits since the last release to auto-generate a CHANGELOG and to determine if the next release should be a: + +- major version bump (e.g. 1.0.0 to 2.0.0). This will happen when Lerna finds a `BREAKING CHANGE` commit message. +- minor version bump (e.g. 1.0.0 to 1.1.0). This will happen when Lerna finds a `feat` commit message. +- patch version bump (e.g. 1.0.0 to 1.0.1). This is the default version bump for bug fixes, etc. +- prerelease version bump (e.g. 1.0.0-alpha.0 to 1.0.0-alpha.1) + +We’ll be using Lerna’s `--no-push` flag so that Lerna does not push git tags and commits automatically. This allows us to delete any commits and tags locally if we make a mistake. + +1. **Tag a new release** + + - **to make the next logical semantic version**, run: + + ``` + npx lerna version --no-push + ``` + + - **to make a new alpha prerelease version:** + + If the current version is not a prerelease version, you’ll need to explicitly tell Lerna that the next version should be an alpha release with: + + ``` + npx lerna version --conventional-prerelease --no-push + ``` + + When creating a new prerelease version of `next-drupal`, Lerna will automatically determine if it needs to be a `premajor` (2.0.0-alpha.0), `preminor` (1.1.0-alpha.0), or `prepatch` (1.0.1-alpha.0) version. + + - **to make a new beta prerelease version:** + + If the current version is not a beta version, you’ll need to explicitly tell Lerna that the next version should be a beta release with: + + ``` + npx lerna version --conventional-prerelease --preid beta --no-push + ``` + + - **to make a new regular version from a prerelease version:** + + If the current version is a prerelease version, you’ll need to explicitly tell Lerna that the next version should no longer be a prerelease version with: + + ``` + npx lerna version --conventional-graduate --no-push + ``` + + **Confirm changes** + + When Lerna asks “Are you sure you want to create these versions?”, carefully check if the versions listed are the ones you expect. + +2. **Push git changes** with: + + ``` + git push + git push --tags + ``` + +3. **Publish the release** + + Ensure you have authenticated with npmjs.com using `npm login`. + + Then, while your local git working area is clean of changes and `HEAD` is pointing to the commit created in step 1, have Lerna build, prepare, package and publish your release. + + For a new prerelease version, specify the `canary` dist-tag with: + + ``` + npx lerna publish --dist-tag canary from-git + ``` + + Otherwise, use: + + ``` + npx lerna publish from-git + ``` + + Maintainers will need permission to publish to `next-drupal` on npmjs.com. http://npmjs.com/package/next-drupal + +4. **Confirm the release** + + Look at the “Current Tags” section of [next-drupal’s npmjs page](https://www.npmjs.com/package/next-drupal?activeTab=versions) and confirm that the newest release is listed and that the `latest` tag and the `canary` tag point at the expected versions. + +For more information, see Lerna’s [version docs](https://github.com/lerna/lerna/tree/main/libs/commands/version) and [publish docs](https://github.com/lerna/lerna/tree/main/libs/commands/publish). + +### Examples + +The code in the examples repos do not strictly require a versioned release since they simply contain an example usage of the latest `next-drupal` release. However, each example has its own separate git repo so developers can see previous versions of the latest example. + +1. Optionally, **create a tag** that is Lerna-compatible matching the format: `[project]@[version]`, e.g. `example-auth@1.1.2` + + ``` + git tag example-NAME@1.0.0 + git push --tags + ``` + +2. **Sync git repositories** with: + + ``` + yarn sync:examples + ``` + + All recent changes on `main` will be squashed into a commit on the target git repo using the latest commit message. + +### Starters + +1. **Update package.json** with the new release version for that starter, e.g. `2.0.0-alpha.0`. This is important so the developer knows which version of the starter they had when they first started their project. + +2. **Create a tag** that is Lerna-compatible matching the format: `[project]@[version]`, e.g. `basic-starter@2.0.0-alpha.0` + + ``` + git tag NAME-starter@2.0.0 + git push --tags + ``` + +3. **Sync git repositories** + + If the release is a prerelease, sync the monorepo with: + + ``` + yarn sync:starters + ``` + + If the release is not a prerelease, sync the monorepo with: + + ``` + yarn sync:starters:release + ``` + + All recent changes on `main` will be squashed into a commit on the target git repo using the latest commit message. + +4. **Create a GitHub release and tag** + + The git tag created in step 1 was for the monorepo; it doesn’t exist in the starters’ git repos. We’ll create a GitHub release to make it easier for developers to see the changes between different versions of the starter. + + To create a GitHub release, go to the releases page for: + + - [basic-starter](https://github.com/chapter-three/next-drupal-basic-starter/releases) + - [graphql-starter](https://github.com/chapter-three/next-drupal-graphql-starter/releases) + + And then: + + 1. Click the “Draft a new release” button. + 2. In the **“Target:” drop-down**, select the `main` branch if this is going to be a normal release or select the `canary` branch if this is going to be a prerelease. + 3. In the **“Choose a tag” widget**, type the new git tag, e.g. `2.0.0-alpha.0`, and hit `enter`. The help text will say “Excellent! This tag will be created from the target when you publish this release.” + 4. In the “Release title” text field, type the same tag as the previous step. + 5. Check either the “Set as a pre-release” checkbox or the “Set as the latest release” checkbox. + 6. Click the “Publish release” button. + +### Docs + +@TODO: Expand details the next time docs are deployed. + +Documentation is deployed to Vercel and controlled via the following Git branches: + +- `v1.6` +- `v1` +- `v0` + +## Tests + +The Jest tests currently rely on a Drupal 9.4 installation deployed to [tests.next-drupal.org](https://tests.next-drupal.org) on Pantheon. + +Developers will need a copy of the db, a copy of the installation files, and to set the following environment variables when running tests locally: + +```dotenv +export DRUPAL_BASE_URL='https://tests.next-drupal.org' +export DRUPAL_CLIENT_ID='example-xxxx' +export DRUPAL_CLIENT_SECRET='example-xxxx' +export DRUPAL_USERNAME='Umami' +export DRUPAL_PASSWORD='example-xxxx' +``` + +The files, db and environment variable values can be obtained from other Chapter Three developers. + +@TODO: Replace the live server with a way to install Drupal with the needed demo content and config. The updated docs should not be here, but instead in CONTRIBUTING.md. + +## Drupal (`/drupal` directory) + +This is probably a single Drupal install with the config for all the examples and is used for running Cypress tests. + +@TODO Confirm speculation by getting a copy of the database so `/drupal` can be run locally. diff --git a/drupal/.gitignore b/drupal/.gitignore index c14a5ce0..c47f6cf6 100644 --- a/drupal/.gitignore +++ b/drupal/.gitignore @@ -29,3 +29,6 @@ /oauth-keys/*.key /web/sites/default/settings.local.php /web/sites/default/services.local.yml + +# build/test artifacts +/.turbo diff --git a/examples/example-auth/.gitignore b/examples/example-auth/.gitignore index 3aa970bb..6686735a 100644 --- a/examples/example-auth/.gitignore +++ b/examples/example-auth/.gitignore @@ -4,14 +4,17 @@ /node_modules /.pnp .pnp.js +.yarn/install-state.gz -# testing +# build/test artifacts +/.turbo /coverage +/cypress/screenshots +/cypress/videos # next.js /.next/ /out/ -.next # production /build @@ -24,18 +27,13 @@ npm-debug.log* yarn-debug.log* yarn-error.log* -lerna-debug.log* # local env files -.env.local -.env.development.local -.env.test.local -.env.production.local +.env*.local # vercel .vercel -/certificates/* - -cypress/screenshots -cypress/videos \ No newline at end of file +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/examples/example-blog/.gitignore b/examples/example-blog/.gitignore index 3aa970bb..6686735a 100644 --- a/examples/example-blog/.gitignore +++ b/examples/example-blog/.gitignore @@ -4,14 +4,17 @@ /node_modules /.pnp .pnp.js +.yarn/install-state.gz -# testing +# build/test artifacts +/.turbo /coverage +/cypress/screenshots +/cypress/videos # next.js /.next/ /out/ -.next # production /build @@ -24,18 +27,13 @@ npm-debug.log* yarn-debug.log* yarn-error.log* -lerna-debug.log* # local env files -.env.local -.env.development.local -.env.test.local -.env.production.local +.env*.local # vercel .vercel -/certificates/* - -cypress/screenshots -cypress/videos \ No newline at end of file +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/examples/example-client/.gitignore b/examples/example-client/.gitignore index 3aa970bb..6686735a 100644 --- a/examples/example-client/.gitignore +++ b/examples/example-client/.gitignore @@ -4,14 +4,17 @@ /node_modules /.pnp .pnp.js +.yarn/install-state.gz -# testing +# build/test artifacts +/.turbo /coverage +/cypress/screenshots +/cypress/videos # next.js /.next/ /out/ -.next # production /build @@ -24,18 +27,13 @@ npm-debug.log* yarn-debug.log* yarn-error.log* -lerna-debug.log* # local env files -.env.local -.env.development.local -.env.test.local -.env.production.local +.env*.local # vercel .vercel -/certificates/* - -cypress/screenshots -cypress/videos \ No newline at end of file +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/examples/example-custom-auth/.gitignore b/examples/example-custom-auth/.gitignore index 3aa970bb..6686735a 100644 --- a/examples/example-custom-auth/.gitignore +++ b/examples/example-custom-auth/.gitignore @@ -4,14 +4,17 @@ /node_modules /.pnp .pnp.js +.yarn/install-state.gz -# testing +# build/test artifacts +/.turbo /coverage +/cypress/screenshots +/cypress/videos # next.js /.next/ /out/ -.next # production /build @@ -24,18 +27,13 @@ npm-debug.log* yarn-debug.log* yarn-error.log* -lerna-debug.log* # local env files -.env.local -.env.development.local -.env.test.local -.env.production.local +.env*.local # vercel .vercel -/certificates/* - -cypress/screenshots -cypress/videos \ No newline at end of file +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/examples/example-custom-cache/.gitignore b/examples/example-custom-cache/.gitignore index 3aa970bb..6686735a 100644 --- a/examples/example-custom-cache/.gitignore +++ b/examples/example-custom-cache/.gitignore @@ -4,14 +4,17 @@ /node_modules /.pnp .pnp.js +.yarn/install-state.gz -# testing +# build/test artifacts +/.turbo /coverage +/cypress/screenshots +/cypress/videos # next.js /.next/ /out/ -.next # production /build @@ -24,18 +27,13 @@ npm-debug.log* yarn-debug.log* yarn-error.log* -lerna-debug.log* # local env files -.env.local -.env.development.local -.env.test.local -.env.production.local +.env*.local # vercel .vercel -/certificates/* - -cypress/screenshots -cypress/videos \ No newline at end of file +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/examples/example-custom-fetcher/.gitignore b/examples/example-custom-fetcher/.gitignore index 3aa970bb..6686735a 100644 --- a/examples/example-custom-fetcher/.gitignore +++ b/examples/example-custom-fetcher/.gitignore @@ -4,14 +4,17 @@ /node_modules /.pnp .pnp.js +.yarn/install-state.gz -# testing +# build/test artifacts +/.turbo /coverage +/cypress/screenshots +/cypress/videos # next.js /.next/ /out/ -.next # production /build @@ -24,18 +27,13 @@ npm-debug.log* yarn-debug.log* yarn-error.log* -lerna-debug.log* # local env files -.env.local -.env.development.local -.env.test.local -.env.production.local +.env*.local # vercel .vercel -/certificates/* - -cypress/screenshots -cypress/videos \ No newline at end of file +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/examples/example-custom-serializer/.gitignore b/examples/example-custom-serializer/.gitignore index 3aa970bb..6686735a 100644 --- a/examples/example-custom-serializer/.gitignore +++ b/examples/example-custom-serializer/.gitignore @@ -4,14 +4,17 @@ /node_modules /.pnp .pnp.js +.yarn/install-state.gz -# testing +# build/test artifacts +/.turbo /coverage +/cypress/screenshots +/cypress/videos # next.js /.next/ /out/ -.next # production /build @@ -24,18 +27,13 @@ npm-debug.log* yarn-debug.log* yarn-error.log* -lerna-debug.log* # local env files -.env.local -.env.development.local -.env.test.local -.env.production.local +.env*.local # vercel .vercel -/certificates/* - -cypress/screenshots -cypress/videos \ No newline at end of file +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/examples/example-graphql/.gitignore b/examples/example-graphql/.gitignore index 78adc9ed..6686735a 100644 --- a/examples/example-graphql/.gitignore +++ b/examples/example-graphql/.gitignore @@ -4,14 +4,17 @@ /node_modules /.pnp .pnp.js +.yarn/install-state.gz -# testing +# build/test artifacts +/.turbo /coverage +/cypress/screenshots +/cypress/videos # next.js /.next/ /out/ -.next # production /build @@ -24,15 +27,13 @@ npm-debug.log* yarn-debug.log* yarn-error.log* -lerna-debug.log* # local env files -.env.local -.env.development.local -.env.test.local -.env.production.local +.env*.local # vercel .vercel -/certificates/* \ No newline at end of file +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/examples/example-graphql/lib/drupal.ts b/examples/example-graphql/lib/drupal.ts index fdae367d..f1c78d5b 100644 --- a/examples/example-graphql/lib/drupal.ts +++ b/examples/example-graphql/lib/drupal.ts @@ -8,7 +8,6 @@ export const drupal = new DrupalClient( clientSecret: process.env.DRUPAL_CLIENT_SECRET, }, previewSecret: process.env.DRUPAL_PREVIEW_SECRET, - forceIframeSameSiteCookie: true, } ) diff --git a/examples/example-marketing/.gitignore b/examples/example-marketing/.gitignore index 3aa970bb..6686735a 100644 --- a/examples/example-marketing/.gitignore +++ b/examples/example-marketing/.gitignore @@ -4,14 +4,17 @@ /node_modules /.pnp .pnp.js +.yarn/install-state.gz -# testing +# build/test artifacts +/.turbo /coverage +/cypress/screenshots +/cypress/videos # next.js /.next/ /out/ -.next # production /build @@ -24,18 +27,13 @@ npm-debug.log* yarn-debug.log* yarn-error.log* -lerna-debug.log* # local env files -.env.local -.env.development.local -.env.test.local -.env.production.local +.env*.local # vercel .vercel -/certificates/* - -cypress/screenshots -cypress/videos \ No newline at end of file +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/examples/example-query/.gitignore b/examples/example-query/.gitignore index 78adc9ed..6686735a 100644 --- a/examples/example-query/.gitignore +++ b/examples/example-query/.gitignore @@ -4,14 +4,17 @@ /node_modules /.pnp .pnp.js +.yarn/install-state.gz -# testing +# build/test artifacts +/.turbo /coverage +/cypress/screenshots +/cypress/videos # next.js /.next/ /out/ -.next # production /build @@ -24,15 +27,13 @@ npm-debug.log* yarn-debug.log* yarn-error.log* -lerna-debug.log* # local env files -.env.local -.env.development.local -.env.test.local -.env.production.local +.env*.local # vercel .vercel -/certificates/* \ No newline at end of file +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/examples/example-router-migration/.env.example b/examples/example-router-migration/.env.example new file mode 100644 index 00000000..951ea909 --- /dev/null +++ b/examples/example-router-migration/.env.example @@ -0,0 +1,12 @@ +# See https://next-drupal.org/docs/environment-variables + +# Required +NEXT_PUBLIC_DRUPAL_BASE_URL=https://site.example.com +NEXT_IMAGE_DOMAIN=site.example.com + +# Authentication +DRUPAL_CLIENT_ID=Retrieve this from /admin/config/services/consumer +DRUPAL_CLIENT_SECRET=Retrieve this from /admin/config/services/consumer + +# Required for On-demand Revalidation +DRUPAL_REVALIDATE_SECRET=Retrieve this from /admin/config/services/next diff --git a/examples/example-router-migration/.eslintrc.json b/examples/example-router-migration/.eslintrc.json new file mode 100644 index 00000000..7c1a3add --- /dev/null +++ b/examples/example-router-migration/.eslintrc.json @@ -0,0 +1,4 @@ +{ + "extends": "next/core-web-vitals", + "root": true +} diff --git a/examples/example-router-migration/.gitignore b/examples/example-router-migration/.gitignore new file mode 100644 index 00000000..081b7c17 --- /dev/null +++ b/examples/example-router-migration/.gitignore @@ -0,0 +1,40 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js +.yarn/install-state.gz + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# IDE files +/.idea +/.vscode + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# local env files +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/examples/example-router-migration/.nvmrc b/examples/example-router-migration/.nvmrc new file mode 100644 index 00000000..9a2a0e21 --- /dev/null +++ b/examples/example-router-migration/.nvmrc @@ -0,0 +1 @@ +v20 diff --git a/examples/example-router-migration/.prettierignore b/examples/example-router-migration/.prettierignore new file mode 100644 index 00000000..03c8a68b --- /dev/null +++ b/examples/example-router-migration/.prettierignore @@ -0,0 +1,18 @@ +# Ignore everything. +/* + +# Format most files in the root directory. +!/*.js +!/*.ts +!/*.md +!/*.json +# But ignore some. +/package.json +/package-lock.json +/CHANGELOG.md + +# Don't ignore these nested directories. +!/app +!/components +!/lib +!/pages diff --git a/examples/example-router-migration/.prettierrc.json b/examples/example-router-migration/.prettierrc.json new file mode 100644 index 00000000..3c60a7b5 --- /dev/null +++ b/examples/example-router-migration/.prettierrc.json @@ -0,0 +1,4 @@ +{ + "semi": false, + "trailingComma": "es5" +} diff --git a/examples/example-router-migration/CHANGELOG.md b/examples/example-router-migration/CHANGELOG.md new file mode 100644 index 00000000..e4d87c4d --- /dev/null +++ b/examples/example-router-migration/CHANGELOG.md @@ -0,0 +1,4 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. diff --git a/examples/example-router-migration/README.md b/examples/example-router-migration/README.md new file mode 100644 index 00000000..c694ee20 --- /dev/null +++ b/examples/example-router-migration/README.md @@ -0,0 +1,43 @@ +# example-router-migration + +Next.js recommends using their new App Router over the legacy Pages Router. The [full router migration guide](https://nextjs.org/docs/app/building-your-application/upgrading/app-router-migration) is available in the Next.js documentation. + +The new App Router is also designed to facilitate sites that need to migrate from the Pages Router in a piecemeal fashion rather than all at once. + +This codebase is an example of a `next-drupal` site that is in the middle of a Next.js Pages to App Router migration. + +## Piecemeal router migration steps + +### Initial migration + +1. Update the `next-drupal` package to the latest 2.x version. +2. Update the `next` module on your Drupal site to the latest 2.x version. + 1. The most recent version is available at https://www.drupal.org/project/next + 2. Run your Drupal site’s /update.php script. +3. Migrate from Preview Mode to Draft mode. Preview mode only works with the legacy Pages Router. Draft mode works with both routers. + 1. Update the `/pages/api/preview.ts` file to match the one in this Git repo. + 2. Update the `/pages/api/exit-preview.ts` file to match the one in this Git repo. + 3. Delete your `/pages/api/revalidate.ts` file. + 4. Create a `/app/api` directory and add all the files from this Git repo’s `/app/api` directory. + +### Piecemeal migration + +Follow [Next.js’ router migration guide](https://nextjs.org/docs/app/building-your-application/upgrading/app-router-migration). + +Over time, you will be moving all the files from `/pages` to `/app`. However, these JavaScript files should remain in the `/pages` directory to prevent Preview/Draft Mode from breaking: + +- `/pages/api/exit-preview.ts` +- `/pages/api/preview.ts` + +### Final migration steps + +1. Turn off the legacy Preview Mode. + 1. Go to the Next.js site configuration on your Drupal site at `/admin/config/services/next`. + 2. For each Next.js configuration, change the end of the URL in the “Draft URL (or Preview URL)” setting from `preview` to `draft`, e.g. `https://example.com/api/preview` to `https://example.com/api/draft`. +2. Delete the last files in your `/pages` directory: + - `/pages/api/exit-preview.ts` + - `/pages/api/preview.ts` + +## License + +Licensed under the [MIT license](https://github.com/chapter-three/next-drupal/blob/master/LICENSE). diff --git a/examples/example-router-migration/app/[...slug]/page.tsx b/examples/example-router-migration/app/[...slug]/page.tsx new file mode 100644 index 00000000..2a76ee5e --- /dev/null +++ b/examples/example-router-migration/app/[...slug]/page.tsx @@ -0,0 +1,115 @@ +import { draftMode } from "next/headers" +import { notFound } from "next/navigation" +import { getDraftData } from "next-drupal/draft" +import { Article } from "@/components/drupal/Article" +import { BasicPage } from "@/components/drupal/BasicPage" +import { drupal } from "@/lib/drupal" +import type { Metadata, ResolvingMetadata } from "next" +import type { DrupalNode, JsonApiParams } from "next-drupal" + +async function getNode(slug: string[]) { + const path = slug.join("/") + + const params: JsonApiParams = {} + + const draftData = getDraftData() + + if (draftData.slug === `/${path}`) { + params.resourceVersion = draftData.resourceVersion + } + + // Translating the path also allows us to discover the entity type. + const translatedPath = await drupal.translatePath(path) + + if (!translatedPath) { + throw new Error("Resource not found", { cause: "NotFound" }) + } + + const type = translatedPath.jsonapi?.resourceName! + const uuid = translatedPath.entity.uuid + + if (type === "node--article") { + params.include = "field_image,uid" + } + + const resource = await drupal.getResource(type, uuid, { + params, + }) + + if (!resource) { + throw new Error( + `Failed to fetch resource: ${translatedPath?.jsonapi?.individual}`, + { + cause: "DrupalError", + } + ) + } + + return resource +} + +type NodePageParams = { + slug: string[] +} +type NodePageProps = { + params: NodePageParams + searchParams: { [key: string]: string | string[] | undefined } +} + +export async function generateMetadata( + { params: { slug } }: NodePageProps, + parent: ResolvingMetadata +): Promise { + let node + try { + node = await getNode(slug) + } catch (e) { + // If we fail to fetch the node, don't return any metadata. + return {} + } + + return { + title: node.title, + } +} + +const RESOURCE_TYPES = ["node--page", "node--article"] + +export async function generateStaticParams(): Promise { + // TODO: Replace getStaticPathsFromContext() usage since there is no context. + const paths = await drupal.getStaticPathsFromContext(RESOURCE_TYPES, {}) + // console.log( + // "generateStaticParams", + // paths.map(({ params }) => params) + // ) + return paths.map((path: string | { params: NodePageParams }) => + typeof path === "string" ? { slug: [] } : path?.params + ) +} + +export default async function NodePage({ + params: { slug }, + searchParams, +}: NodePageProps) { + const isDraftMode = draftMode().isEnabled + + let node + try { + node = await getNode(slug) + } catch (error) { + // If getNode throws an error, tell Next.js the path is 404. + notFound() + } + + // If we're not in draft mode and the resource is not published, return a 404. + if (!isDraftMode && node?.status === false) { + notFound() + } + + return ( + <> + {node.type === "node--page" && } + {node.type === "node--article" &&
} + + ) +} diff --git a/examples/example-router-migration/app/api/disable-draft/route.ts b/examples/example-router-migration/app/api/disable-draft/route.ts new file mode 100644 index 00000000..81900948 --- /dev/null +++ b/examples/example-router-migration/app/api/disable-draft/route.ts @@ -0,0 +1,6 @@ +import { disableDraftMode } from "next-drupal/draft" +import type { NextRequest } from "next/server" + +export async function GET(request: NextRequest) { + return disableDraftMode() +} diff --git a/examples/example-router-migration/app/api/draft/route.ts b/examples/example-router-migration/app/api/draft/route.ts new file mode 100644 index 00000000..b8757e2a --- /dev/null +++ b/examples/example-router-migration/app/api/draft/route.ts @@ -0,0 +1,7 @@ +import { drupal } from "@/lib/drupal" +import { enableDraftMode } from "next-drupal/draft" +import type { NextRequest } from "next/server" + +export async function GET(request: NextRequest): Promise { + return enableDraftMode(request, drupal) +} diff --git a/examples/example-router-migration/app/api/revalidate/route.ts b/examples/example-router-migration/app/api/revalidate/route.ts new file mode 100644 index 00000000..d3722f7b --- /dev/null +++ b/examples/example-router-migration/app/api/revalidate/route.ts @@ -0,0 +1,28 @@ +import { revalidatePath } from "next/cache" +import type { NextRequest } from "next/server" + +async function handler(request: NextRequest) { + const searchParams = request.nextUrl.searchParams + const slug = searchParams.get("slug") + const secret = searchParams.get("secret") + + // Validate secret. + if (secret !== process.env.DRUPAL_REVALIDATE_SECRET) { + return new Response("Invalid secret.", { status: 401 }) + } + + // Validate slug. + if (!slug) { + return new Response("Invalid slug.", { status: 400 }) + } + + try { + revalidatePath(slug) + + return new Response("Revalidated.") + } catch (error) { + return new Response((error as Error).message, { status: 500 }) + } +} + +export { handler as GET, handler as POST } diff --git a/examples/example-router-migration/app/layout.tsx b/examples/example-router-migration/app/layout.tsx new file mode 100644 index 00000000..3b3c9652 --- /dev/null +++ b/examples/example-router-migration/app/layout.tsx @@ -0,0 +1,37 @@ +import { DraftAlert } from "@/components/misc/DraftAlert" +import { HeaderNav } from "@/components/navigation/HeaderNav" +import type { Metadata } from "next" +import type { ReactNode } from "react" + +import "@/styles/globals.css" + +export const metadata: Metadata = { + title: { + default: "Next.js for Drupal", + template: "%s | Next.js for Drupal", + }, + description: "A Next.js site powered by a Drupal backend.", + icons: { + icon: "/favicon.ico", + }, +} + +export default function RootLayout({ + // Layouts must accept a children prop. + // This will be populated with nested layouts or pages + children, +}: { + children: ReactNode +}) { + return ( + + + +
+ +
{children}
+
+ + + ) +} diff --git a/examples/example-router-migration/app/page.tsx b/examples/example-router-migration/app/page.tsx new file mode 100644 index 00000000..a7f1ec4d --- /dev/null +++ b/examples/example-router-migration/app/page.tsx @@ -0,0 +1,51 @@ +import { ArticleTeaser } from "@/components/drupal/ArticleTeaser" +import { Link } from "@/components/navigation/Link" +import { drupal } from "@/lib/drupal" +import type { Metadata } from "next" +import type { DrupalNode } from "next-drupal" + +export const metadata: Metadata = { + description: "A Next.js site powered by a Drupal backend.", +} + +export default async function Home() { + const nodes = await drupal.getResourceCollection( + "node--article", + { + params: { + "filter[status]": 1, + "fields[node--article]": "title,path,field_image,uid,created", + include: "field_image,uid", + sort: "-created", + }, + } + ) + + return ( + <> +

+ Latest Articles. +
+ + Using the App Router + +

+

+ Switch to{" "} + + Pages Router + +

+ {nodes?.length ? ( + nodes.map((node) => ( +
+ +
+
+ )) + ) : ( +

No nodes found

+ )} + + ) +} diff --git a/examples/example-router-migration/components/drupal/Article.tsx b/examples/example-router-migration/components/drupal/Article.tsx new file mode 100644 index 00000000..b4d3d234 --- /dev/null +++ b/examples/example-router-migration/components/drupal/Article.tsx @@ -0,0 +1,46 @@ +import Image from "next/image" +import { absoluteUrl, formatDate } from "@/lib/utils" +import type { DrupalNode } from "next-drupal" + +interface ArticleProps { + node: DrupalNode +} + +export function Article({ node, ...props }: ArticleProps) { + return ( +
+

{node.title}

+
+ {node.uid?.display_name ? ( + + Posted by{" "} + {node.uid?.display_name} + + ) : null} + - {formatDate(node.created)} +
+ {node.field_image && ( +
+ {node.field_image.resourceIdObjMeta.alt + {node.field_image.resourceIdObjMeta.title && ( +
+ {node.field_image.resourceIdObjMeta.title} +
+ )} +
+ )} + {node.body?.processed && ( +
+ )} +
+ ) +} diff --git a/examples/example-router-migration/components/drupal/ArticleTeaser.tsx b/examples/example-router-migration/components/drupal/ArticleTeaser.tsx new file mode 100644 index 00000000..8efeac62 --- /dev/null +++ b/examples/example-router-migration/components/drupal/ArticleTeaser.tsx @@ -0,0 +1,54 @@ +import Image from "next/image" +import { Link } from "@/components/navigation/Link" +import { absoluteUrl, formatDate } from "@/lib/utils" +import type { DrupalNode } from "next-drupal" + +interface ArticleTeaserProps { + node: DrupalNode +} + +export function ArticleTeaser({ node, ...props }: ArticleTeaserProps) { + return ( +
+ +

{node.title}

+ +
+ {node.uid?.display_name ? ( + + Posted by{" "} + {node.uid?.display_name} + + ) : null} + - {formatDate(node.created)} +
+ {node.field_image && ( +
+ {node.field_image.resourceIdObjMeta.alt} +
+ )} + + Read article + + + + +
+ ) +} diff --git a/examples/example-router-migration/components/drupal/BasicPage.tsx b/examples/example-router-migration/components/drupal/BasicPage.tsx new file mode 100644 index 00000000..88d7f00b --- /dev/null +++ b/examples/example-router-migration/components/drupal/BasicPage.tsx @@ -0,0 +1,19 @@ +import type { DrupalNode } from "next-drupal" + +interface BasicPageProps { + node: DrupalNode +} + +export function BasicPage({ node, ...props }: BasicPageProps) { + return ( +
+

{node.title}

+ {node.body?.processed && ( +
+ )} +
+ ) +} diff --git a/examples/example-router-migration/components/misc/DraftAlert/Client.tsx b/examples/example-router-migration/components/misc/DraftAlert/Client.tsx new file mode 100644 index 00000000..00932ae4 --- /dev/null +++ b/examples/example-router-migration/components/misc/DraftAlert/Client.tsx @@ -0,0 +1,38 @@ +"use client" + +import { useEffect, useState } from "react" + +export function DraftAlertClient({ + isDraftEnabled, +}: { + isDraftEnabled: boolean +}) { + const [showDraftAlert, setShowDraftAlert] = useState(false) + + useEffect(() => { + setShowDraftAlert(isDraftEnabled && window.top === window.self) + }, [isDraftEnabled]) + + if (!showDraftAlert) { + return null + } + + function buttonHandler() { + void fetch("/api/disable-draft") + setShowDraftAlert(false) + } + + return ( +
+

+ This page is a draft. + +

+
+ ) +} diff --git a/examples/example-router-migration/components/misc/DraftAlert/index.tsx b/examples/example-router-migration/components/misc/DraftAlert/index.tsx new file mode 100644 index 00000000..a07f0d67 --- /dev/null +++ b/examples/example-router-migration/components/misc/DraftAlert/index.tsx @@ -0,0 +1,13 @@ +import { Suspense } from "react" +import { draftMode } from "next/headers" +import { DraftAlertClient } from "./Client" + +export function DraftAlert() { + const isDraftEnabled = draftMode().isEnabled + + return ( + + + + ) +} diff --git a/examples/example-router-migration/components/navigation/HeaderNav.tsx b/examples/example-router-migration/components/navigation/HeaderNav.tsx new file mode 100644 index 00000000..bccb4e4c --- /dev/null +++ b/examples/example-router-migration/components/navigation/HeaderNav.tsx @@ -0,0 +1,21 @@ +import { Link } from "@/components/navigation/Link" + +export function HeaderNav() { + return ( +
+
+ + Next.js for Drupal + + + Read the docs + +
+
+ ) +} diff --git a/examples/example-router-migration/components/navigation/Link.tsx b/examples/example-router-migration/components/navigation/Link.tsx new file mode 100644 index 00000000..23dbc4c0 --- /dev/null +++ b/examples/example-router-migration/components/navigation/Link.tsx @@ -0,0 +1,23 @@ +import { forwardRef } from "react" +import NextLink from "next/link" +import type { AnchorHTMLAttributes, ReactNode } from "react" +import type { LinkProps as NextLinkProps } from "next/link" + +type LinkProps = NextLinkProps & + Omit, keyof NextLinkProps> & { + children?: ReactNode + } + +export const Link = forwardRef( + function LinkWithRef( + { + // Turn next/link prefetching off by default. + // @see https://github.com/vercel/next.js/discussions/24009 + prefetch = false, + ...rest + }, + ref + ) { + return + } +) diff --git a/examples/example-router-migration/components/pages-router/Layout.tsx b/examples/example-router-migration/components/pages-router/Layout.tsx new file mode 100644 index 00000000..16e08744 --- /dev/null +++ b/examples/example-router-migration/components/pages-router/Layout.tsx @@ -0,0 +1,15 @@ +import { HeaderNav } from "@/components/navigation/HeaderNav" +import { PreviewAlert } from "@/components/pages-router/PreviewAlert" +import type { ReactNode } from "react" + +export function Layout({ children }: { children: ReactNode }) { + return ( + <> + +
+ +
{children}
+
+ + ) +} diff --git a/examples/example-router-migration/components/pages-router/PreviewAlert.tsx b/examples/example-router-migration/components/pages-router/PreviewAlert.tsx new file mode 100644 index 00000000..abca6a68 --- /dev/null +++ b/examples/example-router-migration/components/pages-router/PreviewAlert.tsx @@ -0,0 +1,30 @@ +import { useEffect, useState } from "react" +import { useRouter } from "next/router" + +export function PreviewAlert() { + const router = useRouter() + const isPreview = router.isPreview + const [showPreviewAlert, setShowPreviewAlert] = useState(false) + + useEffect(() => { + setShowPreviewAlert(isPreview && window.top === window.self) + }, [isPreview]) + + if (!showPreviewAlert) { + return null + } + + return ( +
+

+ This page is a preview.{" "} + +

+
+ ) +} diff --git a/examples/example-router-migration/lib/drupal.ts b/examples/example-router-migration/lib/drupal.ts new file mode 100644 index 00000000..e390f347 --- /dev/null +++ b/examples/example-router-migration/lib/drupal.ts @@ -0,0 +1,13 @@ +import { DrupalClient } from "next-drupal" + +const baseUrl: string = process.env.NEXT_PUBLIC_DRUPAL_BASE_URL || "" +const clientId = process.env.DRUPAL_CLIENT_ID || "" +const clientSecret = process.env.DRUPAL_CLIENT_SECRET || "" + +export const drupal = new DrupalClient(baseUrl, { + auth: { + clientId, + clientSecret, + }, + debug: true, +}) diff --git a/examples/example-router-migration/lib/utils.ts b/examples/example-router-migration/lib/utils.ts new file mode 100644 index 00000000..d83a0d73 --- /dev/null +++ b/examples/example-router-migration/lib/utils.ts @@ -0,0 +1,12 @@ +export function formatDate(input: string): string { + const date = new Date(input) + return date.toLocaleDateString("en-US", { + month: "long", + day: "numeric", + year: "numeric", + }) +} + +export function absoluteUrl(input: string) { + return `${process.env.NEXT_PUBLIC_DRUPAL_BASE_URL}${input}` +} diff --git a/examples/example-router-migration/next.config.js b/examples/example-router-migration/next.config.js new file mode 100644 index 00000000..0a7fabac --- /dev/null +++ b/examples/example-router-migration/next.config.js @@ -0,0 +1,16 @@ +/** @type {import('next').NextConfig} */ +const nextConfig = { + reactStrictMode: true, + images: { + remotePatterns: [ + { + // protocol: 'https', + hostname: process.env.NEXT_IMAGE_DOMAIN, + // port: '', + // pathname: '/sites/default/files/**', + }, + ], + }, +} + +module.exports = nextConfig diff --git a/examples/example-router-migration/package.json b/examples/example-router-migration/package.json new file mode 100644 index 00000000..2783e4c6 --- /dev/null +++ b/examples/example-router-migration/package.json @@ -0,0 +1,34 @@ +{ + "name": "example-router-migration", + "version": "1.8.0", + "private": true, + "license": "MIT", + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "preview": "next build && next start", + "lint": "next lint", + "format": "prettier --write .", + "format:check": "prettier --check ." + }, + "dependencies": { + "next": "^14", + "next-drupal": "^2.0.0-alpha.0", + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "devDependencies": { + "@tailwindcss/typography": "^0.5.10", + "@types/node": "^20.10.0", + "@types/react": "^18.2.39", + "@types/react-dom": "^18.2.17", + "autoprefixer": "^10.4.16", + "eslint": "^8.54.0", + "eslint-config-next": "^14.0.3", + "postcss": "^8.4.31", + "prettier": "^3.1.0", + "tailwindcss": "^3.3.5", + "typescript": "^5.3.2" + } +} diff --git a/examples/example-router-migration/pages/_app.tsx b/examples/example-router-migration/pages/_app.tsx new file mode 100644 index 00000000..70739e9b --- /dev/null +++ b/examples/example-router-migration/pages/_app.tsx @@ -0,0 +1,6 @@ +import "@/styles/globals.css" +import type { AppProps } from "next/app" + +export default function App({ Component, pageProps }: AppProps) { + return +} diff --git a/examples/example-router-migration/pages/_document.tsx b/examples/example-router-migration/pages/_document.tsx new file mode 100644 index 00000000..097cb7ff --- /dev/null +++ b/examples/example-router-migration/pages/_document.tsx @@ -0,0 +1,13 @@ +import { Html, Head, Main, NextScript } from "next/document" + +export default function Document() { + return ( + + + +
+ + + + ) +} diff --git a/examples/example-router-migration/pages/api/exit-preview.ts b/examples/example-router-migration/pages/api/exit-preview.ts new file mode 100644 index 00000000..f8847b39 --- /dev/null +++ b/examples/example-router-migration/pages/api/exit-preview.ts @@ -0,0 +1,9 @@ +import { drupal } from "@/lib/drupal" +import type { NextApiRequest, NextApiResponse } from "next" + +export default async function exit( + request: NextApiRequest, + response: NextApiResponse +) { + await drupal.previewDisable(request, response) +} diff --git a/examples/example-router-migration/pages/api/preview-only.ts b/examples/example-router-migration/pages/api/preview-only.ts new file mode 100644 index 00000000..26c04ffc --- /dev/null +++ b/examples/example-router-migration/pages/api/preview-only.ts @@ -0,0 +1,9 @@ +import { drupal } from "@/lib/drupal" +import type { NextApiRequest, NextApiResponse } from "next" + +export default async function preview( + request: NextApiRequest, + response: NextApiResponse +) { + await drupal.preview(request, response) +} diff --git a/examples/example-router-migration/pages/api/preview.ts b/examples/example-router-migration/pages/api/preview.ts new file mode 100644 index 00000000..a0733440 --- /dev/null +++ b/examples/example-router-migration/pages/api/preview.ts @@ -0,0 +1,10 @@ +import { drupal } from "@/lib/drupal" +import type { NextApiRequest, NextApiResponse } from "next" + +export default async function draft( + request: NextApiRequest, + response: NextApiResponse +) { + // Enables Preview mode and Draft mode. + await drupal.preview(request, response, { enable: true }) +} diff --git a/examples/example-router-migration/pages/pages-router/[...slug].tsx b/examples/example-router-migration/pages/pages-router/[...slug].tsx new file mode 100644 index 00000000..02ad87be --- /dev/null +++ b/examples/example-router-migration/pages/pages-router/[...slug].tsx @@ -0,0 +1,92 @@ +import Head from "next/head" +import { Article } from "@/components/drupal/Article" +import { BasicPage } from "@/components/drupal/BasicPage" +import { Layout } from "@/components/pages-router/Layout" +import { drupal } from "@/lib/drupal" +import type { + GetStaticPaths, + GetStaticProps, + InferGetStaticPropsType, +} from "next" +import type { DrupalNode } from "next-drupal" + +const RESOURCE_TYPES = ["node--page", "node--article"] + +export const getStaticPaths = (async (context) => { + return { + paths: await drupal.getStaticPathsFromContext(RESOURCE_TYPES, context), + fallback: "blocking", + } +}) satisfies GetStaticPaths + +export const getStaticProps = (async (context) => { + const path = await drupal.translatePathFromContext(context) + + if (!path) { + return { + notFound: true, + } + } + + const type = path?.jsonapi?.resourceName + + let params = {} + if (type === "node--article") { + params = { + include: "field_image,uid", + } + } + + const resource = await drupal.getResourceFromContext( + path, + context, + { + params, + } + ) + + // At this point, we know the path exists and it points to a resource. + // If we receive an error, it means something went wrong on Drupal. + // We throw an error to tell revalidation to skip this for now. + // Revalidation can try again on next request. + if (!resource) { + throw new Error(`Failed to fetch resource: ${path?.jsonapi?.individual}`) + } + + // If we're not in preview mode and the resource is not published, + // Return page not found. + if (!context.preview && resource?.status === false) { + return { + notFound: true, + } + } + + return { + props: { + resource, + }, + } +}) satisfies GetStaticProps<{ + resource: DrupalNode +}> + +export default function NodePage({ + resource, +}: InferGetStaticPropsType) { + if (!resource) return null + + return ( + + + {resource.title} + + + {resource.type === "node--page" && } + {resource.type === "node--article" &&
} + + ) +} diff --git a/examples/example-router-migration/pages/pages-router/index.tsx b/examples/example-router-migration/pages/pages-router/index.tsx new file mode 100644 index 00000000..5015df32 --- /dev/null +++ b/examples/example-router-migration/pages/pages-router/index.tsx @@ -0,0 +1,78 @@ +import Head from "next/head" +import { ArticleTeaser } from "@/components/drupal/ArticleTeaser" +import { Link } from "@/components/navigation/Link" +import { Layout } from "@/components/pages-router/Layout" +import { drupal } from "@/lib/drupal" +import type { InferGetStaticPropsType, GetStaticProps } from "next" +import type { DrupalNode } from "next-drupal" + +export const getStaticProps = (async (context) => { + const nodes = await drupal.getResourceCollectionFromContext( + "node--article", + context, + { + params: { + "filter[status]": 1, + "fields[node--article]": "title,path,field_image,uid,created", + include: "field_image,uid", + sort: "-created", + }, + } + ) + + return { + props: { + nodes, + }, + } +}) satisfies GetStaticProps<{ + nodes: DrupalNode[] +}> + +export default function Home({ + nodes, +}: InferGetStaticPropsType) { + return ( + + + Next.js for Drupal + + +

+ Latest Articles. +
+ + Using the Pages Router + +

+

+ Switch to{" "} + + App Router + +

+ {nodes?.length ? ( + nodes.map((node) => ( +
+ +
+
+ )) + ) : ( +

No nodes found

+ )} +
+ ) +} diff --git a/examples/example-router-migration/postcss.config.js b/examples/example-router-migration/postcss.config.js new file mode 100644 index 00000000..3fa0a951 --- /dev/null +++ b/examples/example-router-migration/postcss.config.js @@ -0,0 +1,8 @@ +// If you want to use other PostCSS plugins, see the following: +// https://tailwindcss.com/docs/using-with-preprocessors +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/examples/example-router-migration/public/favicon.ico b/examples/example-router-migration/public/favicon.ico new file mode 100644 index 00000000..ea2f437d Binary files /dev/null and b/examples/example-router-migration/public/favicon.ico differ diff --git a/examples/example-router-migration/public/robots.txt b/examples/example-router-migration/public/robots.txt new file mode 100644 index 00000000..14267e90 --- /dev/null +++ b/examples/example-router-migration/public/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Allow: / \ No newline at end of file diff --git a/examples/example-router-migration/styles/globals.css b/examples/example-router-migration/styles/globals.css new file mode 100644 index 00000000..b5c61c95 --- /dev/null +++ b/examples/example-router-migration/styles/globals.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; diff --git a/examples/example-router-migration/tailwind.config.ts b/examples/example-router-migration/tailwind.config.ts new file mode 100644 index 00000000..c7f5c8a1 --- /dev/null +++ b/examples/example-router-migration/tailwind.config.ts @@ -0,0 +1,18 @@ +import type { Config } from "tailwindcss" + +const config: Config = { + content: [ + "./pages/**/*.{js,ts,jsx,tsx,mdx}", + "./components/**/*.{js,ts,jsx,tsx,mdx}", + "./app/**/*.{js,ts,jsx,tsx,mdx}", + ], + theme: { + extend: {}, + }, + variants: { + extend: {}, + }, + plugins: [require("@tailwindcss/typography")], +} + +export default config diff --git a/examples/example-router-migration/tsconfig.json b/examples/example-router-migration/tsconfig.json new file mode 100644 index 00000000..23ba4fd5 --- /dev/null +++ b/examples/example-router-migration/tsconfig.json @@ -0,0 +1,28 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true, + "plugins": [ + { + "name": "next" + } + ], + "paths": { + "@/*": ["./*"] + } + }, + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], + "exclude": ["node_modules"] +} diff --git a/examples/example-search-api/.gitignore b/examples/example-search-api/.gitignore index 3aa970bb..6686735a 100644 --- a/examples/example-search-api/.gitignore +++ b/examples/example-search-api/.gitignore @@ -4,14 +4,17 @@ /node_modules /.pnp .pnp.js +.yarn/install-state.gz -# testing +# build/test artifacts +/.turbo /coverage +/cypress/screenshots +/cypress/videos # next.js /.next/ /out/ -.next # production /build @@ -24,18 +27,13 @@ npm-debug.log* yarn-debug.log* yarn-error.log* -lerna-debug.log* # local env files -.env.local -.env.development.local -.env.test.local -.env.production.local +.env*.local # vercel .vercel -/certificates/* - -cypress/screenshots -cypress/videos \ No newline at end of file +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/examples/example-search-api/pages/advanced.tsx b/examples/example-search-api/pages/advanced.tsx index c8424837..a939ad6d 100644 --- a/examples/example-search-api/pages/advanced.tsx +++ b/examples/example-search-api/pages/advanced.tsx @@ -6,7 +6,7 @@ import { DrupalNode, getSearchIndexFromContext, deserialize, - JsonApiSearchApiResponse, + DrupalSearchApiJsonApiResponse, DrupalSearchApiFacet, } from "next-drupal" import { GetStaticPropsResult } from "next" @@ -209,14 +209,15 @@ export default function AdvancedPage({ export async function getStaticProps( context ): Promise> { - const results = await getSearchIndexFromContext( - "property", - context, - { - deserialize: false, - params, - } - ) + const results = + await getSearchIndexFromContext( + "property", + context, + { + deserialize: false, + params, + } + ) return { props: { diff --git a/examples/example-umami/.gitignore b/examples/example-umami/.gitignore index 78adc9ed..6686735a 100644 --- a/examples/example-umami/.gitignore +++ b/examples/example-umami/.gitignore @@ -4,14 +4,17 @@ /node_modules /.pnp .pnp.js +.yarn/install-state.gz -# testing +# build/test artifacts +/.turbo /coverage +/cypress/screenshots +/cypress/videos # next.js /.next/ /out/ -.next # production /build @@ -24,15 +27,13 @@ npm-debug.log* yarn-debug.log* yarn-error.log* -lerna-debug.log* # local env files -.env.local -.env.development.local -.env.test.local -.env.production.local +.env*.local # vercel .vercel -/certificates/* \ No newline at end of file +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/examples/example-webform/.gitignore b/examples/example-webform/.gitignore index 3aa970bb..6686735a 100644 --- a/examples/example-webform/.gitignore +++ b/examples/example-webform/.gitignore @@ -4,14 +4,17 @@ /node_modules /.pnp .pnp.js +.yarn/install-state.gz -# testing +# build/test artifacts +/.turbo /coverage +/cypress/screenshots +/cypress/videos # next.js /.next/ /out/ -.next # production /build @@ -24,18 +27,13 @@ npm-debug.log* yarn-debug.log* yarn-error.log* -lerna-debug.log* # local env files -.env.local -.env.development.local -.env.test.local -.env.production.local +.env*.local # vercel .vercel -/certificates/* - -cypress/screenshots -cypress/videos \ No newline at end of file +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/lerna.json b/lerna.json index 7d2586c4..4db5e70d 100644 --- a/lerna.json +++ b/lerna.json @@ -1,16 +1,9 @@ { + "$schema": "node_modules/lerna/schemas/lerna-schema.json", "version": "independent", - "packages": ["packages/*", "examples/*", "modules/*"], "npmClient": "yarn", - "useWorkspaces": true, - "loglevel": "success", - "registry": "https://registry.npmjs.org/", - "ignoreChanges": [ - "CHANGELOG.md", - "**/__tests__/**", - "**/__mocks__/**", - "drupal/**" - ], + "packages": ["packages/next-drupal"], + "ignoreChanges": ["CHANGELOG.md", "**/__tests__/**", "**/__mocks__/**"], "command": { "create": { "license": "MIT" diff --git a/modules/next/.gitlab-ci.yml b/modules/next/.gitlab-ci.yml index c81ebec4..68f90528 100644 --- a/modules/next/.gitlab-ci.yml +++ b/modules/next/.gitlab-ci.yml @@ -33,6 +33,11 @@ include: # View these include files at https://git.drupalcode.org/project/gitlab_templates/ ################ - project: $_GITLAB_TEMPLATES_REPO + # "ref" value can be: + # - Recommended (default) - `ref: $_GITLAB_TEMPLATES_REF` - The Drupal Association will update this value to the recommended tag for contrib. + # - Latest - `ref: main` - Get the latest additions and bug fixes as they are merged into the templates. + # - Minor or Major latests - `ref: 1.x-latest` or `ref: 1.0.x-latest` - Get the latest additions within a minor (mostly bugfixes) or major (bugs and new features). + # - Fixed tag - `ref: 1.0.1` - Set the value to a known tag. This will not get any updates. ref: $_GITLAB_TEMPLATES_REF file: - '/includes/include.drupalci.main.yml' diff --git a/modules/next/composer.json b/modules/next/composer.json index 05f49ac4..48cea01e 100644 --- a/modules/next/composer.json +++ b/modules/next/composer.json @@ -1,6 +1,6 @@ { "name": "drupal/next", - "description": "Next.js + Drupal for Incremental Static Regeneration and Preview mode.", + "description": "Next.js + Drupal for Incremental Static Regeneration and Draft mode.", "type": "drupal-module", "homepage": "http://drupal.org/project/next", "license": "GPL-2.0-or-later", diff --git a/modules/next/modules/next_jwt/src/Plugin/Next/PreviewUrlGenerator/Jwt.php b/modules/next/modules/next_jwt/src/Plugin/Next/PreviewUrlGenerator/Jwt.php index c5676e21..f09b2f59 100644 --- a/modules/next/modules/next_jwt/src/Plugin/Next/PreviewUrlGenerator/Jwt.php +++ b/modules/next/modules/next_jwt/src/Plugin/Next/PreviewUrlGenerator/Jwt.php @@ -103,8 +103,8 @@ public function defaultConfiguration() { */ public function buildConfigurationForm(array $form, FormStateInterface $form_state) { $form['secret_expiration'] = [ - '#title' => $this->t('Preview secret expiration time'), - '#description' => $this->t('The value, in seconds, to be used as expiration time for the preview secret. It is recommended to use short-lived secrets for increased security.'), + '#title' => $this->t('Secret expiration time'), + '#description' => $this->t('The value, in seconds, to be used as expiration time for the validation secret. It is recommended to use short-lived secrets for increased security.'), '#type' => 'number', '#required' => TRUE, '#default_value' => $this->configuration['secret_expiration'], diff --git a/modules/next/next.info.yml b/modules/next/next.info.yml index de7eaf0a..42872eb2 100644 --- a/modules/next/next.info.yml +++ b/modules/next/next.info.yml @@ -1,5 +1,5 @@ name: Next.js -description: Next.js + Drupal for Incremental Static Regeneration and Preview mode. +description: Next.js + Drupal for Incremental Static Regeneration and Draft mode. type: module core_version_requirement: ^9 || ^10 package: Web services diff --git a/modules/next/next.post_update.php b/modules/next/next.post_update.php new file mode 100644 index 00000000..b9fe007f --- /dev/null +++ b/modules/next/next.post_update.php @@ -0,0 +1,15 @@ +getPreviewSecret()) { $variables += [ - 'preview_variables' => '# Required for Preview Mode', + 'preview_variables' => '# Required for Draft Mode', 'DRUPAL_PREVIEW_SECRET' => $secret, ]; } diff --git a/modules/next/src/Form/NextEntityTypeConfigForm.php b/modules/next/src/Form/NextEntityTypeConfigForm.php index feb56514..37d2e65b 100644 --- a/modules/next/src/Form/NextEntityTypeConfigForm.php +++ b/modules/next/src/Form/NextEntityTypeConfigForm.php @@ -119,16 +119,16 @@ public function form(array $form, FormStateInterface $form_state) { '#title' => $this->t('Settings'), ]; - $form['preview_mode'] = [ - '#title' => $this->t('Preview Mode'), - '#description' => $this->t('Configure preview mode the entity type.'), + $form['draft_mode'] = [ + '#title' => $this->t('Draft Mode'), + '#description' => $this->t('Configure draft mode for this entity type.'), '#type' => 'details', '#group' => 'settings', ]; - $form['preview_mode']['site_resolver'] = [ + $form['draft_mode']['site_resolver'] = [ '#title' => $this->t('Plugin'), - '#description' => $this->t('Select a plugin to use for resolving the preview site for this entity type.'), + '#description' => $this->t('Select a plugin to use when validating the draft url for this entity type.'), '#type' => 'select', '#options' => array_merge(['' => $this->t('None')], array_column($this->siteResolverManager->getDefinitions(), 'label', 'id')), '#default_value' => $entity->getSiteResolver() ? $entity->getSiteResolver()->getId() : NULL, @@ -142,7 +142,7 @@ public function form(array $form, FormStateInterface $form_state) { ], ]; - $form['preview_mode']['site_resolver_settings_container'] = [ + $form['draft_mode']['site_resolver_settings_container'] = [ '#type' => 'container', '#prefix' => '
', '#suffix' => '
', @@ -152,7 +152,7 @@ public function form(array $form, FormStateInterface $form_state) { if ($site_resolver instanceof ConfigurableSiteResolverInterface) { $form['configuration'] = []; $subform_state = SubformState::createForSubform($form['configuration'], $form, $form_state); - $form['preview_mode']['site_resolver_settings_container']['configuration'] = $site_resolver->buildConfigurationForm($form['configuration'], $subform_state); + $form['draft_mode']['site_resolver_settings_container']['configuration'] = $site_resolver->buildConfigurationForm($form['configuration'], $subform_state); } $form['revalidation'] = [ @@ -223,7 +223,7 @@ public function submitSiteResolver(array $form, FormStateInterface $form_state) * Handles switching the site resolver selector. */ public function ajaxReplaceSiteResolverSettingsForm($form, FormStateInterface $form_state) { - return $form['preview_mode']['site_resolver_settings_container']; + return $form['draft_mode']['site_resolver_settings_container']; } /** diff --git a/modules/next/src/Form/NextSettingsForm.php b/modules/next/src/Form/NextSettingsForm.php index ac938209..9d1b4181 100644 --- a/modules/next/src/Form/NextSettingsForm.php +++ b/modules/next/src/Form/NextSettingsForm.php @@ -87,14 +87,14 @@ public function buildForm(array $form, FormStateInterface $form_state) { ]; $form['preview_url_generator_container'] = [ - '#title' => $this->t('Preview URL'), + '#title' => $this->t('Draft Mode'), '#type' => 'details', '#group' => 'settings', ]; $form['preview_url_generator_container']['preview_url_generator'] = [ '#title' => $this->t('Plugin'), - '#description' => $this->t('Select a plugin to use for the preview URL generator.'), + '#description' => $this->t('Select a plugin to use for the draft validation generator.'), '#type' => 'select', '#options' => array_column($this->previewUrlGeneratorManager->getDefinitions(), 'label', 'id'), '#default_value' => $config->get('preview_url_generator'), diff --git a/modules/next/src/Form/NextSiteForm.php b/modules/next/src/Form/NextSiteForm.php index 94aa6683..9ccfd0d2 100644 --- a/modules/next/src/Form/NextSiteForm.php +++ b/modules/next/src/Form/NextSiteForm.php @@ -51,9 +51,9 @@ public function form(array $form, FormStateInterface $form_state) { ]; $form['preview'] = [ - '#title' => $this->t('Preview Mode'), - '#description' => $this->t('Preview mode allows editors to preview content on the site. You can read more on the Next.js documentation.', [ - ':uri' => 'https://nextjs.org/docs/advanced-features/preview-mode', + '#title' => $this->t('Draft Mode'), + '#description' => $this->t('Draft mode (or the deprecated Preview mode) allows editors to preview content on the site. You can read more on the Next.js documentation.', [ + ':uri' => 'https://nextjs.org/docs/app/building-your-application/configuring/draft-mode', ]), '#type' => 'details', '#group' => 'settings', @@ -61,22 +61,22 @@ public function form(array $form, FormStateInterface $form_state) { $form['preview']['preview_url'] = [ '#type' => 'url', - '#title' => $this->t('Preview URL'), - '#description' => $this->t('Enter the preview URL. Example: https://example.com/api/preview.'), + '#title' => $this->t('Draft URL (or Preview URL)'), + '#description' => $this->t('Enter the draft URL or preview URL. Example: https://example.com/api/draft or https://example.com/api/preview.'), '#default_value' => $entity->getPreviewUrl(), ]; $form['preview']['preview_secret'] = [ '#type' => 'textfield', - '#title' => $this->t('Preview secret'), - '#description' => $this->t('Enter a secret for the site preview. This is the same value used for DRUPAL_PREVIEW_SECRET.'), + '#title' => $this->t('Secret key'), + '#description' => $this->t('Enter a secret for the site draft/preview. This must be unique for each Next.js site'), '#default_value' => $entity->getPreviewSecret(), ]; $form['revalidation'] = [ '#title' => $this->t('On-demand Revalidation'), '#description' => $this->t('On-demand revalidation updates your pages when content is updated on your Drupal site. You can read more on the Next.js documentation.', [ - ':uri' => 'https://nextjs.org/docs/advanced-features/preview-mode', + ':uri' => 'https://nextjs.org/docs/app/building-your-application/data-fetching/fetching-caching-and-revalidating#revalidating-data', ]), '#type' => 'details', '#group' => 'settings', diff --git a/modules/next/src/Plugin/Next/PreviewUrlGenerator/SimpleOauth.php b/modules/next/src/Plugin/Next/PreviewUrlGenerator/SimpleOauth.php index ec17960f..27144c53 100644 --- a/modules/next/src/Plugin/Next/PreviewUrlGenerator/SimpleOauth.php +++ b/modules/next/src/Plugin/Next/PreviewUrlGenerator/SimpleOauth.php @@ -66,7 +66,16 @@ public function __construct(array $configuration, $plugin_id, $plugin_definition * {@inheritdoc} */ public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { - return new static($configuration, $plugin_id, $plugin_definition, $container->get('current_user'), $container->get('datetime.time'), $container->get('next.preview_secret_generator'), $container->get('entity_type.manager'), $container->get('module_handler')); + return new static( + $configuration, + $plugin_id, + $plugin_definition, + $container->get('current_user'), + $container->get('datetime.time'), + $container->get('next.preview_secret_generator'), + $container->get('entity_type.manager'), + $container->get('module_handler') + ); } /** @@ -83,8 +92,8 @@ public function defaultConfiguration() { */ public function buildConfigurationForm(array $form, FormStateInterface $form_state) { $form['secret_expiration'] = [ - '#title' => $this->t('Preview secret expiration time'), - '#description' => $this->t('The value, in seconds, to be used as expiration time for the preview secret. It is recommended to use short-lived secrets for increased security.'), + '#title' => $this->t('Secret expiration time'), + '#description' => $this->t('The value, in seconds, to be used as expiration time for the validation secret. It is recommended to use short-lived secrets for increased security.'), '#type' => 'number', '#required' => TRUE, '#default_value' => $this->configuration['secret_expiration'], @@ -119,18 +128,9 @@ public function generate(NextSiteInterface $next_site, EntityInterface $entity, $query = []; $query['slug'] = $slug = $entity->toUrl()->toString(); - // Send the current user roles as scope. - $scopes = $this->getScopesForCurrentUser(); - - if (!count($scopes)) { - return NULL; - } - - $query['scope'] = $scope = implode(' ', $scopes); - // Create a secret based on the timestamp, slug, scope and resource version. $query['timestamp'] = $timestamp = $this->time->getRequestTime(); - $query['secret'] = $this->previewSecretGenerator->generate($timestamp . $slug . $scope . $resource_version); + $query['secret'] = $this->previewSecretGenerator->generate($timestamp . $slug . $resource_version); return Url::fromUri($next_site->getPreviewUrl(), [ 'query' => $query, @@ -159,66 +159,19 @@ public function validate(Request $request) { throw new InvalidPreviewUrlRequest("The provided secret has expired."); } - if (empty($body['scope'])) { - throw new InvalidPreviewUrlRequest("Field 'scope' is missing"); - } - // Validate the secret. if (empty($body['secret'])) { throw new InvalidPreviewUrlRequest("Field 'secret' is missing"); } - if ($body['secret'] !== $this->previewSecretGenerator->generate($body['timestamp'] . $body['slug'] . $body['scope'] . $body['resourceVersion'])) { + if ($body['secret'] !== $this->previewSecretGenerator->generate($body['timestamp'] . $body['slug'] . $body['resourceVersion'])) { throw new InvalidPreviewUrlRequest("The provided secret is invalid."); } return [ - 'scope' => $body['scope'], + 'path' => $body['slug'], + 'maxAge' => (int) $this->configuration['secret_expiration'], ]; } - /** - * Returns scope for the current user. - * - * @return array|mixed - * An array of roles as scopes. - * - * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException - * @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException - */ - protected function getScopesForCurrentUser(): array { - $roles = $this->currentUser->getRoles(TRUE); - $admin_role = $this->getAdminRole(); - - // Return the admin role for administrators. - if ((int) $this->currentUser->id() === 1 || in_array($admin_role, $roles)) { - return [$admin_role]; - } - - return $roles; - } - - /** - * Returns an array of admin roles. - * - * @return string|null - * The admin role. - * - * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException - * @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException - */ - protected function getAdminRole(): ?string { - $admin_roles = $this->entityTypeManager->getStorage('user_role') - ->getQuery() - ->accessCheck(FALSE) - ->condition('is_admin', TRUE) - ->execute(); - - if (!$admin_roles) { - return NULL; - } - - return reset($admin_roles); - } - } diff --git a/modules/next/tests/src/Kernel/Controller/NextPreviewUrlControllerTest.php b/modules/next/tests/src/Kernel/Controller/NextPreviewUrlControllerTest.php index da752d85..46d71ad3 100644 --- a/modules/next/tests/src/Kernel/Controller/NextPreviewUrlControllerTest.php +++ b/modules/next/tests/src/Kernel/Controller/NextPreviewUrlControllerTest.php @@ -71,7 +71,10 @@ public function testValidate() { $controller = NextPreviewUrlController::create($this->container); $response = $controller->validate($request); - $this->assertSame(['scope' => $user->getRoles(TRUE)[0]], Json::decode($response->getContent())); + $this->assertSame([ + 'path' => $page->toUrl()->toString(), + 'maxAge' => $this->config('next.settings')->get('preview_url_generator_configuration.secret_expiration'), + ], Json::decode($response->getContent())); } } diff --git a/modules/next/tests/src/Kernel/Plugin/SimpleOauthPreviewUrlGeneratorTest.php b/modules/next/tests/src/Kernel/Plugin/SimpleOauthPreviewUrlGeneratorTest.php index d5867f83..3ae17ad7 100644 --- a/modules/next/tests/src/Kernel/Plugin/SimpleOauthPreviewUrlGeneratorTest.php +++ b/modules/next/tests/src/Kernel/Plugin/SimpleOauthPreviewUrlGeneratorTest.php @@ -34,6 +34,13 @@ class SimpleOauthPreviewUrlGeneratorTest extends KernelTestBase { */ protected $nextSite; + /** + * The next settings manager. + * + * @var \Drupal\next\NextSettingsManagerInterface + */ + protected $nextSettingsManager; + /** * {@inheritdoc} */ @@ -46,6 +53,8 @@ protected function setUp(): void { $this->installSchema('system', ['sequences']); $this->installSchema('node', ['node_access']); + $this->nextSettingsManager = $this->container->get('next.settings.manager'); + // Create NextSite entities. $this->nextSite = NextSite::create([ 'label' => 'Blog', @@ -91,44 +100,11 @@ public function testGenerate() { $this->assertNotEmpty($query['timestamp']); $this->assertNotEmpty($query['secret']); $this->assertSame($query['plugin'], 'simple_oauth'); - $this->assertContains($query['scope'], $user->getRoles()); // Test the secret. /** @var \Drupal\next\PreviewSecretGeneratorInterface $secret_generator */ $secret_generator = \Drupal::service('next.preview_secret_generator'); - $this->assertSame($query['secret'], $secret_generator->generate($query['timestamp'] . $query['slug'] . $query['scope'] . $query['resourceVersion'])); - } - - /** - * @covers ::getScopesForCurrentUser - * @covers ::getAdminRole - */ - public function testCurrentUserScopes() { - /** @var \Drupal\next\NextSettingsManagerInterface $next_settings_manager */ - $next_settings_manager = $this->container->get('next.settings.manager'); - /** @var \Drupal\next\Plugin\Next\PreviewUrlGenerator\SimpleOauth $preview_url_generator */ - $preview_url_generator = $next_settings_manager->getPreviewUrlGenerator(); - - $page = $this->createNode(['type' => 'page']); - - // Log in as anonymous user. - $this->setCurrentUser(User::load(0)); - $url = $preview_url_generator->generate($this->nextSite, $page); - $this->assertNull($url); - - // Log in as user 1. - $admin_role = $this->createAdminRole(); - $this->setCurrentUser(User::load(1)); - $url = $preview_url_generator->generate($this->nextSite, $page); - $query = $url->getOption('query'); - $this->assertSame($query['scope'], $admin_role); - - // Log in as admin user. - $admin_user = $this->createUser([], NULL, TRUE); - $this->setCurrentUser($admin_user); - $url = $preview_url_generator->generate($this->nextSite, $page); - $query = $url->getOption('query'); - $this->assertSame($query['scope'], $admin_user->getRoles(TRUE)[0]); + $this->assertSame($query['secret'], $secret_generator->generate($query['timestamp'] . $query['slug'] . $query['resourceVersion'])); } /** @@ -137,10 +113,7 @@ public function testCurrentUserScopes() { */ public function testValidateForInvalidBody($body, $message, $is_valid = FALSE) { $request = Request::create('/', 'POST', [], [], [], [], Json::encode($body)); - - /** @var \Drupal\next\NextSettingsManagerInterface $next_settings_manager */ - $next_settings_manager = $this->container->get('next.settings.manager'); - $preview_url_generator = $next_settings_manager->getPreviewUrlGenerator(); + $preview_url_generator = $this->nextSettingsManager->getPreviewUrlGenerator(); if (!$is_valid) { $this->expectExceptionMessage($message); @@ -159,15 +132,9 @@ public function testValidateSecret() { $query = $preview_url->getOption('query'); $request = Request::create('/', 'POST', [], [], [], [], Json::encode($query)); + $preview_url_generator = $this->nextSettingsManager->getPreviewUrlGenerator(); - /** @var \Drupal\next\NextSettingsManagerInterface $next_settings_manager */ - $next_settings_manager = $this->container->get('next.settings.manager'); - $preview_url_generator = $next_settings_manager->getPreviewUrlGenerator(); - - $response = $preview_url_generator->validate($request); - $role = $user->getRoles(TRUE)[0]; - $this->assertSame(['scope' => $role], $response); - + $preview_url_generator->validate($request); $this->expectExceptionMessage('The provided secret is invalid.'); $query = $preview_url->getOption('query'); $query['timestamp'] = strtotime('+60seconds'); @@ -185,12 +152,6 @@ public function testValidateSecret() { $query['resourceVersion'] = 'rel:23'; $request = Request::create('/', 'POST', [], [], [], [], Json::encode($query)); $preview_url_generator->validate($request); - - $this->expectExceptionMessage('The provided secret is invalid.'); - $query = $preview_url->getOption('query'); - $query['scope'] = 'editor'; - $request = Request::create('/', 'POST', [], [], [], [], Json::encode($query)); - $preview_url_generator->validate($request); } /** @@ -203,15 +164,10 @@ public function providerValidateForInvalidBody() { return [ [[], "Field 'slug' is missing"], [['slug' => '/node/1'], "Field 'timestamp' is missing"], - [ - ['slug' => '/node/1', 'timestamp' => strtotime('now')], - "Field 'scope' is missing", - ], [ [ 'slug' => '/node/1', 'timestamp' => strtotime('now'), - 'scope' => 'llama', ], "Field 'secret' is missing", ], @@ -219,7 +175,6 @@ public function providerValidateForInvalidBody() { [ 'slug' => '/node/1', 'timestamp' => strtotime('-60 seconds'), - 'scope' => 'llama', 'secret' => 'secret', ], "The provided secret has expired.", @@ -228,7 +183,6 @@ public function providerValidateForInvalidBody() { [ 'slug' => '/node/1', 'timestamp' => strtotime('60 seconds'), - 'scope' => 'llama', 'secret' => 'secret', ], "", diff --git a/package.json b/package.json index 1825d36a..95b34c1e 100644 --- a/package.json +++ b/package.json @@ -20,9 +20,10 @@ "format:check": "prettier --check .", "phpcs": "./drupal/vendor/bin/phpcs -p -s --colors --standard=modules/next/phpcs.xml modules/next", "test:next": "SIMPLETEST_DB=sqlite://localhost/:memory: ./drupal/vendor/bin/phpunit -c ./drupal/web/core modules/next", - "sync:modules": "./scripts/sync-modules.sh \"modules/*\"", - "sync:examples": "./scripts/sync-examples.sh \"examples/example-*\"", - "sync:starters": "./scripts/sync-starters.sh \"starters/*\"", + "sync:modules": "./scripts/sync-repo.sh 2.x git@git.drupal.org:project/ \"modules/*\"", + "sync:examples": "./scripts/sync-repo.sh main git@github.com:chapter-three/next- \"examples/example-*\"", + "sync:starters": "./scripts/sync-repo.sh canary git@github.com:chapter-three/next-drupal- \"starters/*\"", + "sync:starters:release": "./scripts/sync-repo.sh canary,main git@github.com:chapter-three/next-drupal- \"starters/*\"", "seed": "NUM_NODES=200 node ./scripts/seed", "cy:open": "turbo run cy:open --parallel", "test": "yarn workspace next-drupal test && yarn workspace next-drupal-query test", @@ -31,46 +32,46 @@ "test:e2e:ci": "turbo run test:e2e:ci --parallel" }, "resolutions": { - "@types/react": "17.0.68", - "@types/react-dom": "17.0.21" + "@types/react": "17.0.75", + "@types/react-dom": "17.0.25" }, "devDependencies": { "@actions/core": "^1.10.1", - "@babel/core": "^7.23.2", - "@babel/eslint-parser": "^7.22.15", - "@babel/plugin-transform-runtime": "^7.23.2", - "@babel/preset-env": "^7.23.2", - "@babel/preset-react": "^7.22.15", - "@commitlint/cli": "^17.8.0", - "@commitlint/config-conventional": "^17.8.0", + "@babel/core": "^7.23.9", + "@babel/eslint-parser": "^7.23.10", + "@babel/plugin-transform-runtime": "^7.23.9", + "@babel/preset-env": "^7.23.9", + "@babel/preset-react": "^7.23.3", + "@commitlint/cli": "^18.6.1", + "@commitlint/config-conventional": "^18.6.2", "@next/eslint-plugin-next": "^12.3.4", "@testing-library/cypress": "^8.0.7", - "@types/jest": "^27.5.2", - "@types/node": "^17.0.45", - "@types/react": "^17.0.68", - "@types/react-dom": "^17.0.21", - "@typescript-eslint/eslint-plugin": "^5.62.0", - "@typescript-eslint/parser": "^5.62.0", + "@types/jest": "^29.5.12", + "@types/node": "^20.11.19", + "@types/react": "^17.0.75", + "@types/react-dom": "^17.0.25", + "@typescript-eslint/eslint-plugin": "^7.0.2", + "@typescript-eslint/parser": "^7.0.2", "cypress": "^9.7.0", - "eslint": "^8.51.0", - "eslint-config-prettier": "^9.0.0", + "eslint": "^8.56.0", + "eslint-config-prettier": "^9.1.0", "eslint-plugin-cypress": "^2.15.1", - "eslint-plugin-prettier": "^5.0.1", + "eslint-plugin-prettier": "^5.1.3", "eslint-plugin-react": "^7.33.2", "faker": "^6.6.6", - "husky": "^8.0.3", + "husky": "^9.0.11", "isomorphic-fetch": "^3.0.0", - "jest": "^27.5.1", - "lerna": "^4.0.0", - "lint-staged": "^15.0.2", - "prettier": "^3.0.3", + "jest": "^29.7.0", + "lerna": "^8.1.2", + "lint-staged": "^15.2.2", + "prettier": "^3.2.5", "start-server-and-test": "^1.15.5", - "ts-jest": "^27.1.5", - "ts-node": "^10.9.1", - "tsup": "^7.3.0", - "turbo": "^1.10.15", - "typescript": "^5.2.2", + "ts-jest": "^29.1.2", + "ts-node": "^10.9.2", + "tsup": "^8.0.2", + "turbo": "^1.12.4", + "typescript": "^5.3.3", "uuid": "^9.0.1", - "yaml": "^2.3.3" + "yaml": "^2.3.4" } } diff --git a/packages/next-drupal-query/CHANGELOG.md b/packages/next-drupal-query/CHANGELOG.md index c0d69d00..70de4df6 100644 --- a/packages/next-drupal-query/CHANGELOG.md +++ b/packages/next-drupal-query/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [0.5.0-alpha.0](https://github.com/chapter-three/next-drupal/compare/next-drupal-query@0.4.0...next-drupal-query@0.5.0-alpha.0) (2024-01-05) + + +### Features + +* **next-drupal:** add Next.js v14 support ([32a5a0a](https://github.com/chapter-three/next-drupal/commit/32a5a0a582c5faa93f8ac1a9633a89c60f5fd627)), closes [#578](https://github.com/chapter-three/next-drupal/issues/578) + + + + + # [0.4.0](https://github.com/chapter-three/next-drupal/compare/next-drupal-query@0.3.0...next-drupal-query@0.4.0) (2022-12-06) **Note:** Version bump only for package next-drupal-query diff --git a/packages/next-drupal-query/jest.config.cjs b/packages/next-drupal-query/jest.config.cjs index 54219611..24a2d4bb 100644 --- a/packages/next-drupal-query/jest.config.cjs +++ b/packages/next-drupal-query/jest.config.cjs @@ -1,25 +1,29 @@ -/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */ +/** @type {import('ts-jest').JestConfigWithTsJest} */ module.exports = { preset: "ts-jest/presets/js-with-ts", testEnvironment: "node", setupFiles: ["dotenv/config"], setupFilesAfterEnv: ["/jest.setup.ts"], testMatch: ["**/tests/**/*.test.{ts,tsx}"], - globals: { - "ts-jest": { - isolatedModules: true, - }, + transform: { + "^.+\\.tsx?$": [ + "ts-jest", + { + isolatedModules: true, + }, + ], }, + testLocationInResults: true, coverageProvider: "v8", collectCoverage: true, collectCoverageFrom: ["./src/**"], coverageReporters: ["lcov", "text", "text-summary"], coverageThreshold: { global: { - statements: 85.11, - branches: 58, + statements: 84.22, + branches: 64.1, functions: 70, - lines: 85.11, + lines: 84.22, }, }, } diff --git a/packages/next-drupal-query/package.json b/packages/next-drupal-query/package.json index cf2f4cf6..38307fab 100644 --- a/packages/next-drupal-query/package.json +++ b/packages/next-drupal-query/package.json @@ -1,7 +1,7 @@ { "name": "next-drupal-query", "description": "Query helpers for structuring large Next.js and Drupal projects.", - "version": "0.4.0", + "version": "0.5.0-alpha.0", "sideEffects": false, "source": "src/index.ts", "type": "module", diff --git a/packages/next-drupal-query/src/index.ts b/packages/next-drupal-query/src/index.ts index 1c72e3b0..9c27ee45 100644 --- a/packages/next-drupal-query/src/index.ts +++ b/packages/next-drupal-query/src/index.ts @@ -235,7 +235,7 @@ export function withPagination( } } - if (typeof opts.page !== undefined && typeof opts.limit !== undefined) { + if (typeof opts.page !== "undefined" && typeof opts.limit !== "undefined") { params.addPageLimit(opts.limit).addPageOffset(opts.page * opts.limit) } @@ -292,8 +292,8 @@ export function createQueries>>(queries: Q) { opts = massageRouteQuery(opts) if ( - typeof query["defaultOpts"] !== undefined && - typeof opts !== undefined + typeof query["defaultOpts"] !== "undefined" && + typeof opts !== "undefined" ) { // eslint-disable-next-line @typescript-eslint/no-explicit-any opts = deepmerge(query["defaultOpts"], opts as any) as any diff --git a/packages/next-drupal-query/tests/__snapshots__/index.test.ts.snap b/packages/next-drupal-query/tests/__snapshots__/index.test.ts.snap index 1abeff66..5aac1b87 100644 --- a/packages/next-drupal-query/tests/__snapshots__/index.test.ts.snap +++ b/packages/next-drupal-query/tests/__snapshots__/index.test.ts.snap @@ -1,13 +1,13 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`formatData it formats data 1`] = ` -Object { +{ "name": "First Last", } `; exports[`getData it accepts data options 1`] = ` -Object { +{ "author": "shadcn", "id": "ID", "title": "Title of Article", @@ -16,14 +16,14 @@ Object { `; exports[`getData it accepts placeholder options 1`] = ` -Object { +{ "email": "name@example.com", "name": "shadcn", } `; exports[`getData it returns data for a query 1`] = ` -Object { +{ "author": "shadcn", "id": "id", "title": "Title of Article", @@ -32,52 +32,52 @@ Object { `; exports[`getData it returns data when both data and placeholder is defined 1`] = ` -Object { +{ "email": "foo@example.com", } `; exports[`getData it returns formatted data if a formatter is defined 1`] = ` -Object { +{ "email": "foo@example.com", "name": "First Last", } `; exports[`getData it returns placeholder data if a query does not define data 1`] = ` -Object { +{ "name": "shadcn", } `; exports[`getParams it accepts params options 1`] = ` -Object { - "fields": Object { +{ + "fields": { "resource": "foo,bar", }, - "filter": Object {}, - "include": Array [], - "sort": Array [], + "filter": {}, + "include": [], + "sort": [], } `; exports[`getParams it allows params to be nested 1`] = ` -Object { - "fields": Object {}, - "filter": Object {}, +{ + "fields": {}, + "filter": {}, "include": "field_image,uid", - "page": Object { + "page": { "limit": 10, }, - "sort": Array [], + "sort": [], } `; exports[`getParams it returns params for a query 1`] = ` -Object { - "fields": Object {}, - "filter": Object {}, +{ + "fields": {}, + "filter": {}, "include": "field_image,uid", - "sort": Array [], + "sort": [], } `; diff --git a/packages/next-drupal/CHANGELOG.md b/packages/next-drupal/CHANGELOG.md index b044c68b..6b1642f4 100644 --- a/packages/next-drupal/CHANGELOG.md +++ b/packages/next-drupal/CHANGELOG.md @@ -3,6 +3,82 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-alpha.1](https://github.com/chapter-three/next-drupal/compare/next-drupal@2.0.0-alpha.0...next-drupal@2.0.0-alpha.1) (2024-02-21) + + +### Bug Fixes + +* **next-drupal:** update TypeScript definition for translatePath and translatePathFromContext ([9f6ae58](https://github.com/chapter-three/next-drupal/commit/9f6ae5816da2339e374b91fa7cc026b3ff0d4709)), closes [#359](https://github.com/chapter-three/next-drupal/issues/359) + + +* refactor(next-drupal)!: move non-DrupalClient code to src/deprecated ([f04c617](https://github.com/chapter-three/next-drupal/commit/f04c61776cbb7905577865639d1403a1a02428b9)) +* feat(next-drupal)!: drop forceIframeSameSiteCookie option ([083cebb](https://github.com/chapter-three/next-drupal/commit/083cebbf33da9bdf40ede4e6f75bc510af9dfa65)) +* feat(next-drupal)!: add draft mode to pages router ([a4f8d84](https://github.com/chapter-three/next-drupal/commit/a4f8d840038f2ab6f7a6e733b48240ecade55266)), closes [#502](https://github.com/chapter-three/next-drupal/issues/502) +* feat(next-drupal)!: add public debug() method to DrupalClient ([e0fc4bd](https://github.com/chapter-three/next-drupal/commit/e0fc4bd6697c11803539b5faef68a0e0e897d653)), closes [#668](https://github.com/chapter-three/next-drupal/issues/668) + + +### Features + +* **next-drupal:** add draft mode for app router pages ([7a62a39](https://github.com/chapter-three/next-drupal/commit/7a62a3921ca36291b5a5eeb7db942c006e0645e0)), closes [#502](https://github.com/chapter-three/next-drupal/issues/502) +* **next:** remove scope from preview URL generation and validation process ([dde673d](https://github.com/chapter-three/next-drupal/commit/dde673d1952da918e2fb5a2e05a49ddb2408356b)), closes [#635](https://github.com/chapter-three/next-drupal/issues/635) + + +### BREAKING CHANGES + +* The JsonApiWithAuthOptions type has been renamed to JsonApiWithAuthOption. The +JsonApiWithLocaleOptions type is now considered deprecated for DrupalClient +usage and can be replaced with the JsonApiOptions type. +* The forceIframeSameSiteCookie option to DrupalClient has been removed. The +DrupalClient now automatically makes this change when the Next.js website is +running in development mode (and the change is not needed for production sites). +* The options to the DrupalClient.preview() method were previously ignored. The +options are now passed to the NextApiResponse.setDraftMode() method and their +TypeScript definition have now changed to match the options parameter of the +setDraftMode method. +* DrupalClient previously had a debug property that indicated if debugging was +enabled. This property has been removed and replaced with a debug() method that +accepts a string and logs it as a debug message if debugging is enabled. + + + + + +# [2.0.0-alpha.0](https://github.com/chapter-three/next-drupal/compare/next-drupal@1.6.0...next-drupal@2.0.0-alpha.0) (2024-01-05) + + +### Bug Fixes + +* **next-drupal:** fix "403 forbidden" jest failures ([22d5742](https://github.com/chapter-three/next-drupal/commit/22d57420342b0573fdcf697c80f219f723adbc5e)), closes [#603](https://github.com/chapter-three/next-drupal/issues/603) +* **next-drupal:** fix broken build by using named Jsona export ([f2f398d](https://github.com/chapter-three/next-drupal/commit/f2f398de57366c17908b7b54301d5966f39e73bf)) + + +* feat(next-drupal)!: add App Router support for Server Components ([410a5df](https://github.com/chapter-three/next-drupal/commit/410a5dfec62df2c9de0adf37feaa615a1f35e98a)), closes [#442](https://github.com/chapter-three/next-drupal/issues/442) + + +### Features + +* **next-drupal:** add Next.js v14 support ([32a5a0a](https://github.com/chapter-three/next-drupal/commit/32a5a0a582c5faa93f8ac1a9633a89c60f5fd627)), closes [#578](https://github.com/chapter-three/next-drupal/issues/578) + + +### BREAKING CHANGES + +* The useMenu() client hook has moved out of the main entry point and into its own +entry point. Any import or require of that function needs to be updated: + +Old usage: +```js +import { useMenu } from "next-drupal" +``` + +New usage: +```js +import { useMenu } from "next-drupal/navigation" +``` + + + + + # [1.6.0](https://github.com/chapter-three/next-drupal/compare/next-drupal@1.5.1...next-drupal@1.6.0) (2022-12-06) **Note:** Version bump only for package next-drupal diff --git a/packages/next-drupal/jest.config.cjs b/packages/next-drupal/jest.config.cjs index ea08002a..a7ccdfe7 100644 --- a/packages/next-drupal/jest.config.cjs +++ b/packages/next-drupal/jest.config.cjs @@ -1,27 +1,35 @@ -/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */ +/** @type {import('ts-jest').JestConfigWithTsJest} */ module.exports = { preset: "ts-jest", testEnvironment: "node", setupFiles: ["dotenv/config"], setupFilesAfterEnv: ["/jest.setup.ts"], testMatch: ["**/tests/**/*.test.{ts,tsx}"], - globals: { - "ts-jest": { - isolatedModules: true, - }, + transform: { + "^.+\\.tsx?$": [ + "ts-jest", + { + isolatedModules: true, + }, + ], }, + testLocationInResults: true, coverageProvider: "v8", collectCoverage: true, collectCoverageFrom: ["./src/**"], - coveragePathIgnorePatterns: ["./src/get-*"], + coveragePathIgnorePatterns: [ + "./src/deprecated/*", + "./src/deprecated.ts", + "./src/navigation.ts", + "./src/types/*", + ], coverageReporters: ["lcov", "text", "text-summary"], coverageThreshold: { global: { - // @TODO Make these thresholds strict once #608 is completed. - statements: 55, // 57.38, - branches: 80, // 83.85, - functions: 75, // 76.36, - lines: 55, // 57.38, + statements: 100, + branches: 100, + functions: 100, + lines: 100, }, }, } diff --git a/packages/next-drupal/package.json b/packages/next-drupal/package.json index 40282cd0..d5234d6f 100644 --- a/packages/next-drupal/package.json +++ b/packages/next-drupal/package.json @@ -1,7 +1,7 @@ { "name": "next-drupal", "description": "Helpers for Next.js + Drupal.", - "version": "1.6.0", + "version": "2.0.0-alpha.1", "sideEffects": false, "source": [ "src/index.ts", @@ -22,6 +22,16 @@ "default": "./dist/index.cjs" } }, + "./draft": { + "import": { + "types": "./dist/draft.d.ts", + "default": "./dist/draft.js" + }, + "require": { + "types": "./dist/draft.d.cts", + "default": "./dist/draft.cjs" + } + }, "./navigation": { "import": { "types": "./dist/navigation.d.ts", @@ -62,11 +72,11 @@ "directory": "packages/next-drupal" }, "devDependencies": { - "typescript": "^5.2.2" + "typescript": "^5.3.3" }, "dependencies": { "jsona": "^1.12.1", - "next": "^12.2.0 || ^13 || ^14", + "next": "^13.4 || ^14", "node-cache": "^5.1.2", "qs": "^6.11.2", "react": "^17.0.2 || ^18", diff --git a/packages/next-drupal/src/client.ts b/packages/next-drupal/src/client.ts index 4cc4e4c9..0e51bc01 100644 --- a/packages/next-drupal/src/client.ts +++ b/packages/next-drupal/src/client.ts @@ -23,23 +23,25 @@ import type { FetchOptions, JsonApiCreateFileResourceBody, JsonApiCreateResourceBody, + JsonApiOptions, JsonApiParams, JsonApiResource, JsonApiResourceWithPath, JsonApiResponse, JsonApiUpdateResourceBody, - JsonApiWithAuthOptions, + JsonApiWithAuthOption, JsonApiWithCacheOptions, - JsonApiWithLocaleOptions, Locale, PathAlias, PathPrefix, - PreviewOptions, } from "./types" const DEFAULT_API_PREFIX = "/jsonapi" const DEFAULT_FRONT_PAGE = "/home" const DEFAULT_WITH_AUTH = false +export const DRAFT_DATA_COOKIE_NAME = "draftData" +// See https://vercel.com/docs/workflow-collaboration/draft-mode +export const DRAFT_MODE_COOKIE_NAME = "__prerender_bypass" // From simple_oauth. const DEFAULT_AUTH_URL = "/oauth/token" @@ -77,10 +79,10 @@ function isClientIdSecretAuth( export class DrupalClient { baseUrl: BaseUrl - debug: DrupalClientOptions["debug"] - frontPage: DrupalClientOptions["frontPage"] + private isDebugEnabled: DrupalClientOptions["debug"] + private serializer: DrupalClientOptions["serializer"] private cache: DrupalClientOptions["cache"] @@ -111,8 +113,6 @@ export class DrupalClient { private previewSecret?: DrupalClientOptions["previewSecret"] - private forceIframeSameSiteCookie?: DrupalClientOptions["forceIframeSameSiteCookie"] - /** * Instantiates a new DrupalClient. * @@ -140,7 +140,6 @@ export class DrupalClient { auth, previewSecret, accessToken, - forceIframeSameSiteCookie = false, throwJsonApiErrors = true, } = options @@ -148,7 +147,7 @@ export class DrupalClient { this.apiPrefix = apiPrefix this.serializer = serializer this.frontPage = frontPage - this.debug = debug + this.isDebugEnabled = !!debug this.useDefaultResourceTypeEntry = useDefaultResourceTypeEntry this.fetcher = fetcher this.auth = auth @@ -158,7 +157,6 @@ export class DrupalClient { this.previewSecret = previewSecret this.cache = cache this.accessToken = accessToken - this.forceIframeSameSiteCookie = forceIframeSameSiteCookie this.throwJsonApiErrors = throwJsonApiErrors // Do not throw errors in production. @@ -166,7 +164,7 @@ export class DrupalClient { this.throwJsonApiErrors = false } - this._debug("Debug mode is on.") + this.debug("Debug mode is on.") } set apiPrefix(apiPrefix: DrupalClientOptions["apiPrefix"]) { @@ -215,7 +213,6 @@ export class DrupalClient { this.tokenExpiresOn = Date.now() + token.expires_in * 1000 } - /* eslint-disable @typescript-eslint/no-explicit-any */ async fetch(input: RequestInfo, init?: FetchOptions): Promise { init = { ...init, @@ -229,7 +226,7 @@ export class DrupalClient { // Using the auth set on the client. // TODO: Abstract this to a re-usable. if (init?.withAuth) { - this._debug(`Using authenticated request.`) + this.debug(`Using authenticated request.`) if (init.withAuth === true) { if (typeof this._auth === "undefined") { @@ -241,15 +238,15 @@ export class DrupalClient { // By default, if withAuth is set to true, we use the auth configured // in the client constructor. if (typeof this._auth === "function") { - this._debug(`Using custom auth callback.`) + this.debug(`Using custom auth callback.`) init["headers"]["Authorization"] = this._auth() } else if (typeof this._auth === "string") { - this._debug(`Using custom authorization header.`) + this.debug(`Using custom authorization header.`) init["headers"]["Authorization"] = this._auth } else if (typeof this._auth === "object") { - this._debug(`Using custom auth credentials.`) + this.debug(`Using custom auth credentials.`) if (isBasicAuth(this._auth)) { const basic = Buffer.from( @@ -259,7 +256,7 @@ export class DrupalClient { init["headers"]["Authorization"] = `Basic ${basic}` } else if (isClientIdSecretAuth(this._auth)) { // Use the built-in client_credentials grant. - this._debug(`Using default auth (client_credentials).`) + this.debug(`Using default auth (client_credentials).`) // Fetch an access token and add it to the request. // Access token can be fetched from cache or using a custom auth method. @@ -267,22 +264,21 @@ export class DrupalClient { if (token) { init["headers"]["Authorization"] = `Bearer ${token.access_token}` } - } else if (isAccessTokenAuth(this._auth)) { - init["headers"][ - "Authorization" - ] = `${this._auth.token_type} ${this._auth.access_token}` + } /* c8 ignore next 4 */ else if (isAccessTokenAuth(this._auth)) { + init["headers"]["Authorization"] = + `${this._auth.token_type} ${this._auth.access_token}` } } } else if (typeof init.withAuth === "string") { - this._debug(`Using custom authorization header.`) + this.debug(`Using custom authorization header.`) init["headers"]["Authorization"] = init.withAuth - } else if (typeof init.withAuth === "function") { - this._debug(`Using custom authorization callback.`) + } /* c8 ignore next 4 */ else if (typeof init.withAuth === "function") { + this.debug(`Using custom authorization callback.`) init["headers"]["Authorization"] = init.withAuth() } else if (isBasicAuth(init.withAuth)) { - this._debug(`Using basic authorization header`) + this.debug(`Using basic authorization header.`) const basic = Buffer.from( `${init.withAuth.username}:${init.withAuth.password}` @@ -296,20 +292,19 @@ export class DrupalClient { if (token) { init["headers"]["Authorization"] = `Bearer ${token.access_token}` } - } else if (isAccessTokenAuth(init.withAuth)) { - init["headers"][ - "Authorization" - ] = `${init.withAuth.token_type} ${init.withAuth.access_token}` + } /* c8 ignore next 4 */ else if (isAccessTokenAuth(init.withAuth)) { + init["headers"]["Authorization"] = + `${init.withAuth.token_type} ${init.withAuth.access_token}` } } if (this.fetcher) { - this._debug(`Using custom fetcher.`) + this.debug(`Using custom fetcher, fetching: ${input}`) return await this.fetcher(input, init) } - this._debug(`Using default fetch (polyfilled by Next.js).`) + this.debug(`Using default fetch, fetching: ${input}`) return await fetch(input, init) } @@ -317,7 +312,7 @@ export class DrupalClient { async createResource( type: string, body: JsonApiCreateResourceBody, - options?: JsonApiWithLocaleOptions & JsonApiWithAuthOptions + options?: JsonApiOptions ): Promise { options = { deserialize: true, @@ -327,13 +322,14 @@ export class DrupalClient { const apiPath = await this.getEntryForResourceType( type, - options?.locale !== options?.defaultLocale ? options.locale : undefined + options?.locale !== options?.defaultLocale + ? /* c8 ignore next */ options.locale + : undefined ) const url = this.buildUrl(apiPath, options?.params) - this._debug(`Creating resource of type ${type}.`) - this._debug(url.toString()) + this.debug(`Creating resource of type ${type}.`) // Add type to body. body.data.type = type @@ -344,19 +340,19 @@ export class DrupalClient { withAuth: options.withAuth, }) - if (!response?.ok) { - await this.handleJsonApiErrors(response) - } + await this.throwIfJsonApiErrors(response) const json = await response.json() - return options.deserialize ? this.deserialize(json) : json + return options.deserialize + ? this.deserialize(json) + : /* c8 ignore next */ json } async createFileResource( type: string, body: JsonApiCreateFileResourceBody, - options?: JsonApiWithLocaleOptions & JsonApiWithAuthOptions + options?: JsonApiOptions ): Promise { options = { deserialize: true, @@ -376,8 +372,7 @@ export class DrupalClient { options?.params ) - this._debug(`Creating file resource for media of type ${type}.`) - this._debug(url.toString()) + this.debug(`Creating file resource for media of type ${type}.`) const response = await this.fetch(url.toString(), { method: "POST", @@ -390,9 +385,7 @@ export class DrupalClient { withAuth: options.withAuth, }) - if (!response?.ok) { - await this.handleJsonApiErrors(response) - } + await this.throwIfJsonApiErrors(response) const json = await response.json() @@ -403,7 +396,7 @@ export class DrupalClient { type: string, uuid: string, body: JsonApiUpdateResourceBody, - options?: JsonApiWithLocaleOptions & JsonApiWithAuthOptions + options?: JsonApiOptions ): Promise { options = { deserialize: true, @@ -413,13 +406,14 @@ export class DrupalClient { const apiPath = await this.getEntryForResourceType( type, - options?.locale !== options?.defaultLocale ? options.locale : undefined + options?.locale !== options?.defaultLocale + ? /* c8 ignore next */ options.locale + : undefined ) const url = this.buildUrl(`${apiPath}/${uuid}`, options?.params) - this._debug(`Updating resource of type ${type} with id ${uuid}.`) - this._debug(url.toString()) + this.debug(`Updating resource of type ${type} with id ${uuid}.`) // Update body. body.data.type = type @@ -431,19 +425,19 @@ export class DrupalClient { withAuth: options.withAuth, }) - if (!response?.ok) { - await this.handleJsonApiErrors(response) - } + await this.throwIfJsonApiErrors(response) const json = await response.json() - return options.deserialize ? this.deserialize(json) : json + return options.deserialize + ? this.deserialize(json) + : /* c8 ignore next */ json } async deleteResource( type: string, uuid: string, - options?: JsonApiWithLocaleOptions & JsonApiWithAuthOptions + options?: JsonApiOptions ): Promise { options = { withAuth: true, @@ -453,22 +447,21 @@ export class DrupalClient { const apiPath = await this.getEntryForResourceType( type, - options?.locale !== options?.defaultLocale ? options.locale : undefined + options?.locale !== options?.defaultLocale + ? /* c8 ignore next */ options.locale + : undefined ) const url = this.buildUrl(`${apiPath}/${uuid}`, options?.params) - this._debug(`Deleting resource of type ${type} with id ${uuid}.`) - this._debug(url.toString()) + this.debug(`Deleting resource of type ${type} with id ${uuid}.`) const response = await this.fetch(url.toString(), { method: "DELETE", withAuth: options.withAuth, }) - if (!response?.ok) { - await this.handleJsonApiErrors(response) - } + await this.throwIfJsonApiErrors(response) return response.status === 204 } @@ -476,9 +469,7 @@ export class DrupalClient { async getResource( type: string, uuid: string, - options?: JsonApiWithLocaleOptions & - JsonApiWithAuthOptions & - JsonApiWithCacheOptions + options?: JsonApiOptions & JsonApiWithCacheOptions ): Promise { options = { deserialize: true, @@ -488,11 +479,12 @@ export class DrupalClient { ...options, } + /* c8 ignore next 11 */ if (options.withCache) { const cached = (await this.cache.get(options.cacheKey)) as string if (cached) { - this._debug(`Returning cached resource ${type} with id ${uuid}`) + this.debug(`Returning cached resource ${type} with id ${uuid}.`) const json = JSON.parse(cached) @@ -507,19 +499,17 @@ export class DrupalClient { const url = this.buildUrl(`${apiPath}/${uuid}`, options?.params) - this._debug(`Fetching resource ${type} with id ${uuid}.`) - this._debug(url.toString()) + this.debug(`Fetching resource ${type} with id ${uuid}.`) const response = await this.fetch(url.toString(), { withAuth: options.withAuth, }) - if (!response?.ok) { - await this.handleJsonApiErrors(response) - } + await this.throwIfJsonApiErrors(response) const json = await response.json() + /* c8 ignore next 3 */ if (options.withCache) { await this.cache.set(options.cacheKey, JSON.stringify(json)) } @@ -533,8 +523,7 @@ export class DrupalClient { options?: { pathPrefix?: PathPrefix isVersionable?: boolean - } & JsonApiWithLocaleOptions & - JsonApiWithAuthOptions + } & JsonApiOptions ): Promise { const type = typeof input === "string" ? input : input.jsonapi.resourceName @@ -581,6 +570,7 @@ export class DrupalClient { // When we try to translate /es/example, decoupled router will properly // translate to the untranslated version and set the locale to es. // However a subrequests to /es/subrequests for decoupled router will fail. + /* c8 ignore next 3 */ if (context.locale && input.entity.langcode !== context.locale) { context.locale = input.entity.langcode } @@ -615,8 +605,7 @@ export class DrupalClient { path: string, options?: { isVersionable?: boolean - } & JsonApiWithLocaleOptions & - JsonApiWithAuthOptions + } & JsonApiOptions ): Promise { options = { deserialize: true, @@ -635,7 +624,7 @@ export class DrupalClient { options.defaultLocale && path.indexOf(options.locale) !== 1 ) { - path = path === "/" ? path : path.replace(/^\/+/, "") + path = path === "/" ? /* c8 ignore next */ path : path.replace(/^\/+/, "") path = this.getPathFromContext({ params: { slug: [path] }, locale: options.locale, @@ -690,6 +679,8 @@ export class DrupalClient { _format: "json", }) + this.debug(`Fetching resource by path, ${path}.`) + const response = await this.fetch(url.toString(), { method: "POST", credentials: "include", @@ -724,8 +715,7 @@ export class DrupalClient { type: string, options?: { deserialize?: boolean - } & JsonApiWithLocaleOptions & - JsonApiWithAuthOptions + } & JsonApiOptions ): Promise { options = { withAuth: this.withAuth, @@ -742,16 +732,13 @@ export class DrupalClient { ...options?.params, }) - this._debug(`Fetching resource collection of type ${type}`) - this._debug(url.toString()) + this.debug(`Fetching resource collection of type ${type}.`) const response = await this.fetch(url.toString(), { withAuth: options.withAuth, }) - if (!response?.ok) { - await this.handleJsonApiErrors(response) - } + await this.throwIfJsonApiErrors(response) const json = await response.json() @@ -763,8 +750,7 @@ export class DrupalClient { context: GetStaticPropsContext, options?: { deserialize?: boolean - } & JsonApiWithLocaleOptions & - JsonApiWithAuthOptions + } & JsonApiOptions ): Promise { options = { deserialize: true, @@ -787,7 +773,7 @@ export class DrupalClient { options?: { params?: JsonApiParams pathPrefix?: PathPrefix - } & JsonApiWithAuthOptions + } & JsonApiWithAuthOption ): Promise["paths"]> { options = { withAuth: this.withAuth, @@ -902,8 +888,8 @@ export class DrupalClient { async translatePath( path: string, - options?: JsonApiWithAuthOptions - ): Promise { + options?: JsonApiWithAuthOption + ): Promise { options = { withAuth: this.withAuth, ...options, @@ -913,6 +899,8 @@ export class DrupalClient { path, }) + this.debug(`Fetching translated path, ${path}.`) + const response = await this.fetch(url.toString(), { withAuth: options.withAuth, }) @@ -933,8 +921,8 @@ export class DrupalClient { context: GetStaticPropsContext, options?: { pathPrefix?: PathPrefix - } & JsonApiWithAuthOptions - ): Promise { + } & JsonApiWithAuthOption + ): Promise { options = { pathPrefix: "/", ...options, @@ -993,6 +981,8 @@ export class DrupalClient { ) try { + this.debug(`Fetching JSON:API index.`) + const response = await this.fetch(url.toString(), { // As per https://www.drupal.org/node/2984034 /jsonapi is public. withAuth: false, @@ -1039,6 +1029,7 @@ export class DrupalClient { const pattern = `^\\/${locale}\\/` const path = href.replace(this.baseUrl, "") + /* c8 ignore next 3 */ if (!new RegExp(pattern, "i").test(path)) { return `${this.baseUrl}/${locale}${path}` } @@ -1047,69 +1038,126 @@ export class DrupalClient { return href } - async preview( - request?: NextApiRequest, - response?: NextApiResponse, - options?: PreviewOptions - ) { - const { slug, resourceVersion, plugin } = request.query + async validateDraftUrl(searchParams: URLSearchParams): Promise { + const slug = searchParams.get("slug") - try { - // Always clear preview data to handle different scopes. - response.clearPreviewData() + this.debug(`Fetching draft url validation for ${slug}.`) - // Validate the preview url. - const validateUrl = this.buildUrl("/next/preview-url") - const result = await this.fetch(validateUrl.toString(), { + // Fetch the headless CMS to check if the provided `slug` exists + let response: Response + try { + // Validate the draft url. + const validateUrl = this.buildUrl("/next/draft-url").toString() + response = await this.fetch(validateUrl, { method: "POST", headers: { "Content-Type": "application/json", }, - body: JSON.stringify(request.query), + body: JSON.stringify(Object.fromEntries(searchParams.entries())), }) + } catch (error) { + response = new Response(JSON.stringify({ message: error.message }), { + status: 401, + }) + } - if (!result.ok) { - response.statusCode = result.status + this.debug( + response.status !== 200 + ? `Could not validate slug, ${slug}` + : `Validated slug, ${slug}` + ) - return response.json(await result.json()) - } + return response + } - const validationPayload = await result.json() + async preview( + request: NextApiRequest, + response: NextApiResponse, + options?: Parameters[0] + ) { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const { slug, resourceVersion, plugin, secret, scope, ...draftData } = + request.query + const useDraftMode = options?.enable + + try { + // Always clear preview data to handle different scopes. + response.clearPreviewData() - response.setPreviewData({ + // Validate the preview url. + const result = await this.validateDraftUrl( + new URL(request.url, `http://${request.headers.host}`).searchParams + ) + + const validationPayload = await result.json() + const previewData = { resourceVersion, plugin, ...validationPayload, - }) + } + + if (!result.ok) { + this.debug(`Draft url validation error: ${validationPayload.message}`) + response.statusCode = result.status + return response.json(validationPayload) + } + + // Optionally turn on draft mode. + if (useDraftMode) { + response.setDraftMode(options) + } + + // Turns on preview mode and adds preview data to Next.js' static context. + response.setPreviewData(previewData) // Fix issue with cookie. // See https://github.com/vercel/next.js/discussions/32238. // See https://github.com/vercel/next.js/blob/d895a50abbc8f91726daa2d7ebc22c58f58aabbb/packages/next/server/api-utils/node.ts#L504. - if (this.forceIframeSameSiteCookie) { - const previous = response.getHeader("Set-Cookie") as string[] - previous.forEach((cookie, index) => { - previous[index] = cookie.replace( - "SameSite=Lax", - "SameSite=None;Secure" - ) - }) - response.setHeader(`Set-Cookie`, previous) + const cookies = (response.getHeader("Set-Cookie") as string[]).map( + (cookie) => cookie.replace("SameSite=Lax", "SameSite=None; Secure") + ) + if (useDraftMode) { + // Adds preview data for use in app router pages. + cookies.push( + `${DRAFT_DATA_COOKIE_NAME}=${encodeURIComponent( + JSON.stringify({ slug, resourceVersion, ...draftData }) + )}; Path=/; HttpOnly; SameSite=None; Secure` + ) } + response.setHeader("Set-Cookie", cookies) - // We can safely redirect to the slug since this has been validated on the server. + // We can safely redirect to the slug since this has been validated on the + // server. response.writeHead(307, { Location: slug }) + this.debug(`${useDraftMode ? "Draft" : "Preview"} mode enabled.`) + return response.end() } catch (error) { + this.debug(`Preview failed: ${error.message}`) return response.status(422).end() } } + async previewDisable(request: NextApiRequest, response: NextApiResponse) { + // Disable both preview and draft modes. + response.clearPreviewData() + response.setDraftMode({ enable: false }) + + // Delete the draft data cookie. + const cookies = response.getHeader("Set-Cookie") as string[] + cookies.push( + `${DRAFT_DATA_COOKIE_NAME}=; Path=/; Expires=Thu, 01 Jan 1970 00:00:00 GMT; HttpOnly; SameSite=None; Secure` + ) + response.setHeader("Set-Cookie", cookies) + + response.writeHead(307, { Location: "/" }) + response.end() + } + async getMenu( name: string, - options?: JsonApiWithLocaleOptions & - JsonApiWithAuthOptions & - JsonApiWithCacheOptions + options?: JsonApiOptions & JsonApiWithCacheOptions ): Promise<{ items: T[] tree: T[] @@ -1122,11 +1170,12 @@ export class DrupalClient { ...options, } + /* c8 ignore next 9 */ if (options.withCache) { const cached = (await this.cache.get(options.cacheKey)) as string if (cached) { - this._debug(`Returning cached menu items for ${name}`) + this.debug(`Returning cached menu items for ${name}.`) return JSON.parse(cached) } } @@ -1141,20 +1190,19 @@ export class DrupalClient { options.params ) - this._debug(`Fetching menu items for ${name}.`) - this._debug(url.toString()) + this.debug(`Fetching menu items for ${name}.`) const response = await this.fetch(url.toString(), { withAuth: options.withAuth, }) - if (!response?.ok) { - await this.handleJsonApiErrors(response) - } + await this.throwIfJsonApiErrors(response) const data = await response.json() - const items = options.deserialize ? this.deserialize(data) : data + const items = options.deserialize + ? this.deserialize(data) + : /* c8 ignore next */ data const { items: tree } = this.buildMenuTree(items) @@ -1163,6 +1211,7 @@ export class DrupalClient { tree, } + /* c8 ignore next 3 */ if (options.withCache) { await this.cache.set(options.cacheKey, JSON.stringify(menu)) } @@ -1194,7 +1243,7 @@ export class DrupalClient { async getView( name: string, - options?: JsonApiWithLocaleOptions & JsonApiWithAuthOptions + options?: JsonApiOptions ): Promise> { options = { withAuth: this.withAuth, @@ -1215,13 +1264,13 @@ export class DrupalClient { options.params ) + this.debug(`Fetching view, ${viewId}.${displayId}.`) + const response = await this.fetch(url.toString(), { withAuth: options.withAuth, }) - if (!response?.ok) { - await this.handleJsonApiErrors(response) - } + await this.throwIfJsonApiErrors(response) const data = await response.json() @@ -1237,7 +1286,7 @@ export class DrupalClient { async getSearchIndex( name: string, - options?: JsonApiWithLocaleOptions & JsonApiWithAuthOptions + options?: JsonApiOptions ): Promise { options = { withAuth: this.withAuth, @@ -1255,13 +1304,13 @@ export class DrupalClient { options.params ) + this.debug(`Fetching search index, ${name}.`) + const response = await this.fetch(url.toString(), { withAuth: options.withAuth, }) - if (!response?.ok) { - await this.handleJsonApiErrors(response) - } + await this.throwIfJsonApiErrors(response) const json = await response.json() @@ -1271,7 +1320,7 @@ export class DrupalClient { async getSearchIndexFromContext( name: string, context: GetStaticPropsContext, - options?: JsonApiWithLocaleOptions & JsonApiWithAuthOptions + options?: JsonApiOptions ): Promise { return await this.getSearchIndex(name, { ...options, @@ -1326,18 +1375,18 @@ export class DrupalClient { const clientId = opts?.clientId || this._auth.clientId const clientSecret = opts?.clientSecret || this._auth.clientSecret - const url = this.buildUrl(opts?.url || this._auth.url || DEFAULT_AUTH_URL) + const url = this.buildUrl(opts?.url || this._auth.url) if ( this.accessTokenScope === opts?.scope && this._token && Date.now() < this.tokenExpiresOn ) { - this._debug(`Using existing access token.`) + this.debug(`Using existing access token.`) return this._token } - this._debug(`Fetching new access token.`) + this.debug(`Fetching new access token.`) const basic = Buffer.from(`${clientId}:${clientSecret}`).toString("base64") @@ -1346,7 +1395,7 @@ export class DrupalClient { if (opts?.scope) { body = `${body}&scope=${opts.scope}` - this._debug(`Using scope: ${opts.scope}`) + this.debug(`Using scope: ${opts.scope}`) } const response = await this.fetch(url.toString(), { @@ -1359,14 +1408,10 @@ export class DrupalClient { body, }) - if (!response?.ok) { - await this.handleJsonApiErrors(response) - } + await this.throwIfJsonApiErrors(response) const result: AccessToken = await response.json() - this._debug(result) - this.token = result this.accessTokenScope = opts?.scope @@ -1414,13 +1459,13 @@ export class DrupalClient { return message } - private _debug(message) { - !!this.debug && this.logger.debug(message) + debug(message) { + this.isDebugEnabled && this.logger.debug(message) } // Error handling. - // If throwErrors is enable, we show errors in the Next.js overlay. - // Otherwise we log the errors even if debugging is turned off. + // If throwErrors is enabled, we show errors in the Next.js overlay. + // Otherwise, we log the errors even if debugging is turned off. // In production, errors are always logged never thrown. private throwError(error: Error) { if (!this.throwJsonApiErrors) { @@ -1430,7 +1475,7 @@ export class DrupalClient { throw error } - private async handleJsonApiErrors(response: Response) { + private async throwIfJsonApiErrors(response: Response) { if (!response?.ok) { const errors = await this.getErrorsFromResponse(response) throw new JsonApiErrors(errors, response.status) @@ -1439,7 +1484,7 @@ export class DrupalClient { private getAuthFromContextAndOptions( context: GetStaticPropsContext, - options: JsonApiWithAuthOptions + options: JsonApiWithAuthOption ) { // If not in preview or withAuth is provided, use that. if (!context.preview) { diff --git a/packages/next-drupal/src/deprecated.ts b/packages/next-drupal/src/deprecated.ts new file mode 100644 index 00000000..8693c514 --- /dev/null +++ b/packages/next-drupal/src/deprecated.ts @@ -0,0 +1,19 @@ +export * from "./deprecated/get-access-token" +export * from "./deprecated/get-menu" +export * from "./deprecated/get-paths" +export * from "./deprecated/get-resource-collection" +export * from "./deprecated/preview" +export * from "./deprecated/get-resource-type" +export * from "./deprecated/get-resource" +export * from "./deprecated/get-search-index" +export * from "./deprecated/get-view" +export * from "./deprecated/translate-path" +export { + deserialize, + buildUrl, + getJsonApiIndex, + getJsonApiPathForResourceType, + syncDrupalPreviewRoutes, +} from "./deprecated/utils" + +export type * from "./types/deprecated" diff --git a/packages/next-drupal/src/get-access-token.ts b/packages/next-drupal/src/deprecated/get-access-token.ts similarity index 95% rename from packages/next-drupal/src/get-access-token.ts rename to packages/next-drupal/src/deprecated/get-access-token.ts index 6e718b00..017a6660 100644 --- a/packages/next-drupal/src/get-access-token.ts +++ b/packages/next-drupal/src/deprecated/get-access-token.ts @@ -1,5 +1,5 @@ import { cache } from "./get-cache" -import type { AccessToken } from "./types" +import type { AccessToken } from "../types" const CACHE_KEY = "NEXT_DRUPAL_ACCESS_TOKEN" diff --git a/packages/next-drupal/src/get-cache.ts b/packages/next-drupal/src/deprecated/get-cache.ts similarity index 100% rename from packages/next-drupal/src/get-cache.ts rename to packages/next-drupal/src/deprecated/get-cache.ts diff --git a/packages/next-drupal/src/get-menu.ts b/packages/next-drupal/src/deprecated/get-menu.ts similarity index 90% rename from packages/next-drupal/src/get-menu.ts rename to packages/next-drupal/src/deprecated/get-menu.ts index bee99b21..17262968 100644 --- a/packages/next-drupal/src/get-menu.ts +++ b/packages/next-drupal/src/deprecated/get-menu.ts @@ -1,9 +1,6 @@ import { buildHeaders, buildUrl, deserialize } from "./utils" -import type { - AccessToken, - DrupalMenuLinkContent, - JsonApiWithLocaleOptions, -} from "./types" +import type { AccessToken, DrupalMenuLinkContent } from "../types" +import type { JsonApiWithLocaleOptions } from "../types/deprecated" export async function getMenu( name: string, diff --git a/packages/next-drupal/src/get-paths.ts b/packages/next-drupal/src/deprecated/get-paths.ts similarity index 97% rename from packages/next-drupal/src/get-paths.ts rename to packages/next-drupal/src/deprecated/get-paths.ts index 62f4b341..a2bbfe01 100644 --- a/packages/next-drupal/src/get-paths.ts +++ b/packages/next-drupal/src/deprecated/get-paths.ts @@ -1,6 +1,6 @@ import { getResourceCollection } from "./get-resource-collection" import type { GetStaticPathsContext, GetStaticPathsResult } from "next" -import type { AccessToken, JsonApiParams, Locale } from "./types" +import type { AccessToken, JsonApiParams, Locale } from "../types" export async function getPathsFromContext( types: string | string[], diff --git a/packages/next-drupal/src/get-resource-collection.ts b/packages/next-drupal/src/deprecated/get-resource-collection.ts similarity index 91% rename from packages/next-drupal/src/get-resource-collection.ts rename to packages/next-drupal/src/deprecated/get-resource-collection.ts index 9c182351..209cd3da 100644 --- a/packages/next-drupal/src/get-resource-collection.ts +++ b/packages/next-drupal/src/deprecated/get-resource-collection.ts @@ -5,12 +5,8 @@ import { getJsonApiPathForResourceType, } from "./utils" import type { GetStaticPropsContext } from "next" -import type { - AccessToken, - JsonApiParams, - JsonApiResource, - JsonApiWithLocaleOptions, -} from "./types" +import type { AccessToken, JsonApiParams, JsonApiResource } from "../types" +import type { JsonApiWithLocaleOptions } from "../types/deprecated" export async function getResourceCollection( type: string, diff --git a/packages/next-drupal/src/get-resource-type.ts b/packages/next-drupal/src/deprecated/get-resource-type.ts similarity index 91% rename from packages/next-drupal/src/get-resource-type.ts rename to packages/next-drupal/src/deprecated/get-resource-type.ts index fb3ee9d4..85f52044 100644 --- a/packages/next-drupal/src/get-resource-type.ts +++ b/packages/next-drupal/src/deprecated/get-resource-type.ts @@ -1,6 +1,6 @@ import { translatePathFromContext } from "./translate-path" import type { GetStaticPropsContext } from "next" -import type { AccessToken } from "./types" +import type { AccessToken } from "../types" export async function getResourceTypeFromContext( context: GetStaticPropsContext, diff --git a/packages/next-drupal/src/get-resource.ts b/packages/next-drupal/src/deprecated/get-resource.ts similarity index 97% rename from packages/next-drupal/src/get-resource.ts rename to packages/next-drupal/src/deprecated/get-resource.ts index cc6e28f9..7da11f90 100644 --- a/packages/next-drupal/src/get-resource.ts +++ b/packages/next-drupal/src/deprecated/get-resource.ts @@ -7,12 +7,8 @@ import { getPathFromContext, } from "./utils" import type { GetStaticPropsContext } from "next" -import type { - AccessToken, - JsonApiParams, - JsonApiResource, - JsonApiWithLocaleOptions, -} from "./types" +import type { AccessToken, JsonApiParams, JsonApiResource } from "../types" +import type { JsonApiWithLocaleOptions } from "../types/deprecated" export async function getResourceFromContext( type: string, diff --git a/packages/next-drupal/src/get-search-index.ts b/packages/next-drupal/src/deprecated/get-search-index.ts similarity index 90% rename from packages/next-drupal/src/get-search-index.ts rename to packages/next-drupal/src/deprecated/get-search-index.ts index a40a5433..f97d2faf 100644 --- a/packages/next-drupal/src/get-search-index.ts +++ b/packages/next-drupal/src/deprecated/get-search-index.ts @@ -1,10 +1,7 @@ import { buildHeaders, buildUrl, deserialize } from "./utils" import type { GetStaticPropsContext } from "next" -import type { - AccessToken, - JsonApiResource, - JsonApiWithLocaleOptions, -} from "./types" +import type { AccessToken, JsonApiResource } from "../types" +import type { JsonApiWithLocaleOptions } from "../types/deprecated" export async function getSearchIndex( name: string, diff --git a/packages/next-drupal/src/get-view.ts b/packages/next-drupal/src/deprecated/get-view.ts similarity index 90% rename from packages/next-drupal/src/get-view.ts rename to packages/next-drupal/src/deprecated/get-view.ts index 8241b0c6..2b7cb0ca 100644 --- a/packages/next-drupal/src/get-view.ts +++ b/packages/next-drupal/src/deprecated/get-view.ts @@ -1,5 +1,6 @@ import { buildHeaders, buildUrl, deserialize } from "./utils" -import type { AccessToken, JsonApiWithLocaleOptions } from "./types" +import type { AccessToken } from "../types" +import type { JsonApiWithLocaleOptions } from "../types/deprecated" export async function getView( name: string, diff --git a/packages/next-drupal/src/preview.ts b/packages/next-drupal/src/deprecated/preview.ts similarity index 96% rename from packages/next-drupal/src/preview.ts rename to packages/next-drupal/src/deprecated/preview.ts index 224077b0..7e4d096f 100644 --- a/packages/next-drupal/src/preview.ts +++ b/packages/next-drupal/src/deprecated/preview.ts @@ -1,6 +1,6 @@ import { getResourceByPath } from "./get-resource" import type { NextApiRequest, NextApiResponse } from "next" -import type { JsonApiWithLocaleOptions } from "./types" +import type { JsonApiWithLocaleOptions } from "../types/deprecated" interface PreviewOptions { errorMessages?: { diff --git a/packages/next-drupal/src/translate-path.ts b/packages/next-drupal/src/deprecated/translate-path.ts similarity index 93% rename from packages/next-drupal/src/translate-path.ts rename to packages/next-drupal/src/deprecated/translate-path.ts index ace83fc0..0651957d 100644 --- a/packages/next-drupal/src/translate-path.ts +++ b/packages/next-drupal/src/deprecated/translate-path.ts @@ -1,6 +1,6 @@ import { buildHeaders, buildUrl, getPathFromContext } from "./utils" import type { GetStaticPropsContext } from "next" -import type { AccessToken, DrupalTranslatedPath } from "./types" +import type { AccessToken, DrupalTranslatedPath } from "../types" export async function translatePath( path: string, diff --git a/packages/next-drupal/src/navigation/use-menu.ts b/packages/next-drupal/src/deprecated/use-menu.ts similarity index 96% rename from packages/next-drupal/src/navigation/use-menu.ts rename to packages/next-drupal/src/deprecated/use-menu.ts index cbc4b3f6..25c82c2d 100644 --- a/packages/next-drupal/src/navigation/use-menu.ts +++ b/packages/next-drupal/src/deprecated/use-menu.ts @@ -1,6 +1,6 @@ import { useRouter } from "next/router" import { useEffect, useState } from "react" -import { getMenu } from "../get-menu" +import { getMenu } from "./get-menu" import type { DrupalMenuLinkContent } from "../types" export function useMenu( diff --git a/packages/next-drupal/src/utils.ts b/packages/next-drupal/src/deprecated/utils.ts similarity index 94% rename from packages/next-drupal/src/utils.ts rename to packages/next-drupal/src/deprecated/utils.ts index 996f94e6..8e86f6b9 100644 --- a/packages/next-drupal/src/utils.ts +++ b/packages/next-drupal/src/deprecated/utils.ts @@ -2,7 +2,7 @@ import { Jsona } from "jsona" import { stringify } from "qs" import { getAccessToken } from "./get-access-token" import type { GetStaticPropsContext } from "next" -import type { AccessToken, Locale } from "./types" +import type { AccessToken, Locale } from "../types" const JSONAPI_PREFIX = process.env.DRUPAL_JSONAPI_PREFIX || "/jsonapi" @@ -89,9 +89,8 @@ export async function buildHeaders({ // This reduces the number of OAuth call to the Drupal server. // Intentionally marked as unstable for now. if (process.env.UNSTABLE_DRUPAL_ACCESS_TOKEN) { - headers[ - "Authorization" - ] = `Bearer ${process.env.UNSTABLE_DRUPAL_ACCESS_TOKEN}` + headers["Authorization"] = + `Bearer ${process.env.UNSTABLE_DRUPAL_ACCESS_TOKEN}` return headers } @@ -122,8 +121,8 @@ export function getPathFromContext( return !slug ? process.env.DRUPAL_FRONT_PAGE : prefix - ? `${prefix}/${slug}` - : slug + ? `${prefix}/${slug}` + : slug } export function syncDrupalPreviewRoutes(path) { diff --git a/packages/next-drupal/src/draft.ts b/packages/next-drupal/src/draft.ts new file mode 100644 index 00000000..a598db72 --- /dev/null +++ b/packages/next-drupal/src/draft.ts @@ -0,0 +1,74 @@ +import { cookies, draftMode } from "next/headers" +import { redirect } from "next/navigation" +import { DRAFT_DATA_COOKIE_NAME, DRAFT_MODE_COOKIE_NAME } from "./client" +import type { NextRequest } from "next/server" +import type { DrupalClient } from "./client" + +export async function enableDraftMode( + request: NextRequest, + drupal: DrupalClient +): Promise { + // Validate the draft request. + const response = await drupal.validateDraftUrl(request.nextUrl.searchParams) + + // If validation fails, don't enable draft mode. + if (!response.ok) { + return response + } + + const searchParams = request.nextUrl.searchParams + const slug = searchParams.get("slug") + + // Enable Draft Mode by setting the cookie + draftMode().enable() + + // Override the default SameSite=lax. + // See https://github.com/vercel/next.js/issues/49927 + const draftModeCookie = cookies().get(DRAFT_MODE_COOKIE_NAME) + if (draftModeCookie) { + cookies().set({ + ...draftModeCookie, + sameSite: "none", + secure: true, + }) + } + + // Send Drupal's data to the draft-mode page. + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const { secret, scope, plugin, ...draftData } = Object.fromEntries( + searchParams.entries() + ) + cookies().set({ + ...draftModeCookie, + name: DRAFT_DATA_COOKIE_NAME, + sameSite: "none", + secure: true, + value: JSON.stringify(draftData), + }) + + // Redirect to the path from the fetched post. We can safely redirect to the + // slug since this has been validated on the server. + redirect(slug) +} + +export function disableDraftMode() { + cookies().delete(DRAFT_DATA_COOKIE_NAME) + draftMode().disable() + + return new Response("Draft mode is disabled") +} + +export interface DraftData { + slug?: string + resourceVersion?: string +} + +export function getDraftData() { + let data: DraftData = {} + + if (draftMode().isEnabled && cookies().has(DRAFT_DATA_COOKIE_NAME)) { + data = JSON.parse(cookies().get(DRAFT_DATA_COOKIE_NAME)?.value || "{}") + } + + return data +} diff --git a/packages/next-drupal/src/index.ts b/packages/next-drupal/src/index.ts index fb7c2513..860e0b0e 100644 --- a/packages/next-drupal/src/index.ts +++ b/packages/next-drupal/src/index.ts @@ -1,21 +1,6 @@ -export * from "./get-access-token" -export * from "./get-menu" -export * from "./get-paths" -export * from "./get-resource-collection" -export * from "./preview" -export * from "./get-resource-type" -export * from "./get-resource" -export * from "./get-search-index" -export * from "./get-view" -export * from "./types" -export * from "./translate-path" -export { - deserialize, - buildUrl, - getJsonApiIndex, - getJsonApiPathForResourceType, - syncDrupalPreviewRoutes, -} from "./utils" - export * from "./client" export * from "./jsonapi-errors" + +export type * from "./types" + +export * from "./deprecated" diff --git a/packages/next-drupal/src/jsonapi-errors.ts b/packages/next-drupal/src/jsonapi-errors.ts index d26f6f9c..e2c4c322 100644 --- a/packages/next-drupal/src/jsonapi-errors.ts +++ b/packages/next-drupal/src/jsonapi-errors.ts @@ -1,4 +1,17 @@ -import type { JsonApiError } from "./types" +// https://jsonapi.org/format/#error-objects +export interface JsonApiError { + id?: string + status?: string + code?: string + title?: string + detail?: string + links?: JsonApiLinks +} + +// https://jsonapi.org/format/#document-links +export interface JsonApiLinks { + [key: string]: string | Record +} export class JsonApiErrors extends Error { errors: JsonApiError[] | string diff --git a/packages/next-drupal/src/logger.ts b/packages/next-drupal/src/logger.ts index e1b207e8..c8dc2edd 100644 --- a/packages/next-drupal/src/logger.ts +++ b/packages/next-drupal/src/logger.ts @@ -1,17 +1,22 @@ import type { Logger } from "./types" +export const LOG_MESSAGE_PREFIX = "[next-drupal][log]:" +export const DEBUG_MESSAGE_PREFIX = "[next-drupal][debug]:" +export const WARN_MESSAGE_PREFIX = "[next-drupal][warn]:" +export const ERROR_MESSAGE_PREFIX = "[next-drupal][error]:" + // Default logger. Uses console. export const logger: Logger = { log(message) { - console.log(`[next-drupal][log]:`, message) + console.log(LOG_MESSAGE_PREFIX, message) }, debug(message) { - console.debug(`[next-drupal][debug]:`, message) + console.debug(DEBUG_MESSAGE_PREFIX, message) }, warn(message) { - console.warn(`[next-drupal][debug]:`, message) + console.warn(WARN_MESSAGE_PREFIX, message) }, error(message) { - console.error(`[next-drupal][error]:`, message) + console.error(ERROR_MESSAGE_PREFIX, message) }, } diff --git a/packages/next-drupal/src/navigation.ts b/packages/next-drupal/src/navigation.ts index 33d5f232..33b89724 100644 --- a/packages/next-drupal/src/navigation.ts +++ b/packages/next-drupal/src/navigation.ts @@ -1 +1 @@ -export { useMenu } from "./navigation/use-menu" +export { useMenu } from "./deprecated/use-menu" diff --git a/packages/next-drupal/src/types.ts b/packages/next-drupal/src/types.ts deleted file mode 100644 index ebd5cb62..00000000 --- a/packages/next-drupal/src/types.ts +++ /dev/null @@ -1,495 +0,0 @@ -export type DrupalClientOptions = { - /** - * Set the JSON:API prefix. - * - * * **Default value**: `/jsonapi` - * * **Required**: *No* - * - * [Documentation](https://next-drupal.org/docs/client/configuration#apiprefix) - */ - apiPrefix?: string - - /** - * Set debug to true to enable debug messages. - * - * * **Default value**: `false` - * * **Required**: *No* - * - * [Documentation](https://next-drupal.org/docs/client/configuration#debug) - */ - debug?: boolean - - /** - * Set the default frontPage. - * - * * **Default value**: `/home` - * * **Required**: *No* - * - * [Documentation](https://next-drupal.org/docs/client/configuration#frontpage) - */ - frontPage?: string - - /** - * Set custom headers for the fetcher. - * - * * **Default value**: { "Content-Type": "application/vnd.api+json", Accept: "application/vnd.api+json" } - * * **Required**: *No* - * - * [Documentation](https://next-drupal.org/docs/client/configuration#headers) - */ - headers?: HeadersInit - - /** - * Override the default data serializer. You can use this to add your own JSON:API data deserializer. - * - * * **Default value**: `jsona` - * * **Required**: *No* - * - * [Documentation](https://next-drupal.org/docs/client/configuration#serializer) - */ - serializer?: Serializer - /** - * Override the default fetcher. Use this to add your own fetcher ex. axios. - * - * * **Default value**: `fetch` - * * **Required**: *No* - * - * [Documentation](https://next-drupal.org/docs/client/configuration#fetcher) - */ - fetcher?: Fetcher - - /** - * Override the default cache. - * - * * **Default value**: `node-cache` - * * **Required**: *No* - * - * [Documentation](https://next-drupal.org/docs/client/configuration#cache) - */ - cache?: DataCache - - /** - * If set to true, JSON:API errors are thrown in non-production environments. The errors are shown in the Next.js overlay. - * - * **Default value**: `true` - * **Required**: *No* - * - * [Documentation](https://next-drupal.org/docs/client/configuration#throwjsonapierrors) - */ - throwJsonApiErrors?: boolean - - /** - * Override the default logger. You can use this to send logs to a third-party service. - * - * * **Default value**: `console` - * * **Required**: *No* - * - * [Documentation](https://next-drupal.org/docs/client/configuration#logger) - */ - logger?: Logger - - /** - * Override the default auth. You can use this to implement your own authentication mechanism. - * - * [Documentation](https://next-drupal.org/docs/client/configuration#auth) - */ - auth?: DrupalClientAuth - - /** - * Set whether the client should use authenticated requests by default. - * - * * **Default value**: `true` - * * **Required**: **No* - * - * [Documentation](https://next-drupal.org/docs/client/configuration#withauth) - */ - withAuth?: boolean - - /** - * By default, the client will make a request to JSON:API to retrieve the index. You can turn this off and use the default entry point from the resource name. - * - * * **Default value**: `false` - * * **Required**: *No* - * - * [Documentation](https://next-drupal.org/docs/client/configuration#auth) - */ - useDefaultResourceTypeEntry?: boolean - - /** - * The secret to use for preview mode. - * - * * **Default value**: `null` - * * **Required**: *No* - * - * [Documentation](https://next-drupal.org/docs/client/configuration#previewsecret) - */ - previewSecret?: string - - /** - * A long-lived access token you can set for the client. - * - * * **Default value**: `null` - * * **Required**: *No* - * - * [Documentation](https://next-drupal.org/docs/client/configuration#accesstoken) - */ - accessToken?: AccessToken - - /** - * The scope used for the current access token. - */ - accessTokenScope?: string - - /** - * If set to true, the preview cookie will be set with SameSite=None,Secure. - * - * * **Default value**: `false` - * * **Required**: *No* - * - * [Documentation](https://next-drupal.org/docs/client/configuration#forceiframesamesitecookie) - */ - forceIframeSameSiteCookie?: boolean -} - -export type DrupalClientAuth = - | DrupalClientAuthClientIdSecret - | DrupalClientAuthUsernamePassword - | DrupalClientAuthAccessToken - | (() => string) - | string - -export interface DrupalClientAuthUsernamePassword { - username: string - password: string -} - -export interface DrupalClientAuthClientIdSecret { - clientId: string - clientSecret: string - url?: string - scope?: string -} - -export type DrupalClientAuthAccessToken = AccessToken - -export interface Logger { - log(message): void - - debug(message): void - - warn(message): void - - error(message): void -} - -/** - * The baseUrl of your Drupal site. Do not add the /jsonapi suffix. - * - * **Required**: *yes* - * - * @example - * - * https://example.com - */ -export type BaseUrl = string - -export type Locale = string - -export type PathPrefix = string - -export type JsonApiOptions = { - deserialize?: boolean - params?: JsonApiParams -} - -export type JsonApiWithLocaleOptions = JsonApiOptions & - ( - | { - locale: Locale - defaultLocale: Locale - } - | { - locale?: undefined - defaultLocale?: never - } - ) - -export type JsonApiWithAuthOptions = { - withAuth?: boolean | DrupalClientAuth -} - -export type JsonApiWithCacheOptions = { - withCache?: boolean - cacheKey?: string -} - -// TODO: Properly type this. -/* eslint-disable @typescript-eslint/no-explicit-any */ -export type JsonApiParams = Record - -// https://jsonapi.org/format/#error-objects -export interface JsonApiError { - id?: string - status?: string - code?: string - title?: string - detail?: string - links?: JsonApiLinks -} - -// https://jsonapi.org/format/#document-links -export interface JsonApiLinks { - [key: string]: string | Record -} - -// TODO: any...ugh. -export interface JsonApiResponse extends Record { - jsonapi?: { - version: string - meta: Record[] - } - data: Record[] - errors: JsonApiError[] - meta: { - count: number - [key: string]: any - } - links?: JsonApiLinks - included?: Record[] -} - -export interface JsonApiResourceBodyRelationship { - data: { - type: string - id: string - } -} - -export interface JsonApiCreateResourceBody { - data: { - type?: string - attributes?: Record - relationships?: Record - } -} - -export interface JsonApiCreateFileResourceBody { - data: { - type?: string - attributes: { - type: string - field: string - filename: string - file: Buffer - } - } -} - -export interface JsonApiUpdateResourceBody { - data: { - type?: string - id?: string - attributes?: Record - relationships?: Record - } -} - -export interface JsonApiSearchApiResponse extends JsonApiResponse { - meta: JsonApiResponse["meta"] & { - facets?: DrupalSearchApiFacet[] - } -} - -export interface Serializer { - deserialize( - body: Record, - options?: Record - ): unknown -} - -export type Fetcher = WindowOrWorkerGlobalScope["fetch"] - -export interface DataCache { - get(key): Promise - - set(key, value, ttl?: number): Promise - - del?(keys): Promise -} - -export interface FetchOptions extends RequestInit { - withAuth?: boolean | DrupalClientAuth -} - -export interface DrupalSearchApiFacet { - id: string - label?: string - path?: string - terms?: { - url: string - values: { - value: string - label: string - active?: boolean - count?: number - } - }[] -} - -export interface DrupalTranslatedPath { - resolved: string - isHomePath: boolean - entity: { - canonical: string - type: string - bundle: string - id: string - uuid: string - langcode?: string - path?: string - } - label?: string - jsonapi?: { - individual: string - resourceName: string - pathPrefix: string - basePath: string - entryPoint: string - } - meta?: Record - redirect?: { - from: string - to: string - status: string - }[] -} - -export interface DrupalMenuLinkContent { - description: string - enabled: boolean - expanded: boolean - id: string - menu_name: string - meta: Record - options: Record - parent: string - provider: string - route: { - name: string - parameters: Record - } - title: string - type: string - url: string - weight: string - items?: DrupalMenuLinkContent[] -} - -export type AccessToken = { - token_type: string - expires_in: number - access_token: string - refresh_token?: string -} - -export type PathAlias = { - alias: string - pid: number - langcode: string -} - -/* eslint-disable @typescript-eslint/no-explicit-any */ -export interface JsonApiResource extends Record { - id: string - type: string - langcode: string - status: boolean -} - -export interface JsonApiResourceWithPath extends JsonApiResource { - path: PathAlias -} - -export interface PreviewOptions { - errorMessages?: { - secret?: string - slug?: string - } -} - -export type GetResourcePreviewUrlOptions = JsonApiWithLocaleOptions & { - isVersionable?: boolean -} - -export interface DrupalNode extends JsonApiResourceWithPath { - drupal_internal__nid: number - drupal_internal__vid: number - changed: string - created: string - title: string - default_langcode: boolean - sticky: boolean -} - -export interface DrupalParagraph extends JsonApiResource { - drupal_internal__id: number - drupal_internal__revision_id: number -} - -export interface DrupalBlock extends JsonApiResource { - info: string -} - -export interface DrupalMedia extends JsonApiResource { - drupal_internal__mid: string - drupal_internal__vid: string - changed: string - created: string - name: string -} - -export interface DrupalFile extends JsonApiResource { - drupal_internal__fid: string - changed: string - created: string - filename: string - uri: { - value: string - url: string - } - filesize: number - filemime: string - resourceIdObjMeta?: DrupalFileMeta -} - -export interface DrupalFileMeta { - alt?: string - title?: string - width: number - height: number -} - -export interface DrupalTaxonomyTerm extends JsonApiResourceWithPath { - drupal_internal__tid: string - changed: string - default_langcode: boolean - name: string - description: string - weight: number -} - -export interface DrupalUser extends JsonApiResourceWithPath { - drupal_internal__uid: string - changed: string - created: string - default_langcode: boolean - name: string -} - -/* eslint-disable @typescript-eslint/no-explicit-any */ -export interface DrupalView[]> { - id: string - results: T - meta: JsonApiResponse["meta"] - links: JsonApiResponse["links"] -} diff --git a/packages/next-drupal/src/types/client.ts b/packages/next-drupal/src/types/client.ts new file mode 100644 index 00000000..924caa53 --- /dev/null +++ b/packages/next-drupal/src/types/client.ts @@ -0,0 +1,197 @@ +export type DrupalClientOptions = { + /** + * Set the JSON:API prefix. + * + * * **Default value**: `/jsonapi` + * * **Required**: *No* + * + * [Documentation](https://next-drupal.org/docs/client/configuration#apiprefix) + */ + apiPrefix?: string + + /** + * Set debug to true to enable debug messages. + * + * * **Default value**: `false` + * * **Required**: *No* + * + * [Documentation](https://next-drupal.org/docs/client/configuration#debug) + */ + debug?: boolean + + /** + * Set the default frontPage. + * + * * **Default value**: `/home` + * * **Required**: *No* + * + * [Documentation](https://next-drupal.org/docs/client/configuration#frontpage) + */ + frontPage?: string + + /** + * Set custom headers for the fetcher. + * + * * **Default value**: { "Content-Type": "application/vnd.api+json", Accept: "application/vnd.api+json" } + * * **Required**: *No* + * + * [Documentation](https://next-drupal.org/docs/client/configuration#headers) + */ + headers?: HeadersInit + + /** + * Override the default data serializer. You can use this to add your own JSON:API data deserializer. + * + * * **Default value**: `jsona` + * * **Required**: *No* + * + * [Documentation](https://next-drupal.org/docs/client/configuration#serializer) + */ + serializer?: Serializer + /** + * Override the default fetcher. Use this to add your own fetcher ex. axios. + * + * * **Default value**: `fetch` + * * **Required**: *No* + * + * [Documentation](https://next-drupal.org/docs/client/configuration#fetcher) + */ + fetcher?: Fetcher + + /** + * Override the default cache. + * + * * **Default value**: `node-cache` + * * **Required**: *No* + * + * [Documentation](https://next-drupal.org/docs/client/configuration#cache) + */ + cache?: DataCache + + /** + * If set to true, JSON:API errors are thrown in non-production environments. The errors are shown in the Next.js overlay. + * + * **Default value**: `true` + * **Required**: *No* + * + * [Documentation](https://next-drupal.org/docs/client/configuration#throwjsonapierrors) + */ + throwJsonApiErrors?: boolean + + /** + * Override the default logger. You can use this to send logs to a third-party service. + * + * * **Default value**: `console` + * * **Required**: *No* + * + * [Documentation](https://next-drupal.org/docs/client/configuration#logger) + */ + logger?: Logger + + /** + * Override the default auth. You can use this to implement your own authentication mechanism. + * + * [Documentation](https://next-drupal.org/docs/client/configuration#auth) + */ + auth?: DrupalClientAuth + + /** + * Set whether the client should use authenticated requests by default. + * + * * **Default value**: `true` + * * **Required**: **No* + * + * [Documentation](https://next-drupal.org/docs/client/configuration#withauth) + */ + withAuth?: boolean + + /** + * By default, the client will make a request to JSON:API to retrieve the index. You can turn this off and use the default entry point from the resource name. + * + * * **Default value**: `false` + * * **Required**: *No* + * + * [Documentation](https://next-drupal.org/docs/client/configuration#auth) + */ + useDefaultResourceTypeEntry?: boolean + + /** + * The secret to use for preview mode. + * + * * **Default value**: `null` + * * **Required**: *No* + * + * [Documentation](https://next-drupal.org/docs/client/configuration#previewsecret) + */ + previewSecret?: string + + /** + * A long-lived access token you can set for the client. + * + * * **Default value**: `null` + * * **Required**: *No* + * + * [Documentation](https://next-drupal.org/docs/client/configuration#accesstoken) + */ + accessToken?: AccessToken + + /** + * The scope used for the current access token. + */ + accessTokenScope?: string +} + +export type DrupalClientAuth = + | DrupalClientAuthClientIdSecret + | DrupalClientAuthUsernamePassword + | DrupalClientAuthAccessToken + | (() => string) + | string + +export interface DrupalClientAuthUsernamePassword { + username: string + password: string +} + +export interface DrupalClientAuthClientIdSecret { + clientId: string + clientSecret: string + url?: string + scope?: string +} + +export type DrupalClientAuthAccessToken = AccessToken + +export type AccessToken = { + token_type: string + expires_in: number + access_token: string + refresh_token?: string +} + +export interface DataCache { + get(key): Promise + + set(key, value, ttl?: number): Promise + + del?(keys): Promise +} + +export type Fetcher = WindowOrWorkerGlobalScope["fetch"] + +export interface Logger { + log(message): void + + debug(message): void + + warn(message): void + + error(message): void +} + +export interface Serializer { + deserialize( + body: Record, + options?: Record + ): unknown +} diff --git a/packages/next-drupal/src/types/deprecated.ts b/packages/next-drupal/src/types/deprecated.ts new file mode 100644 index 00000000..e79c20c2 --- /dev/null +++ b/packages/next-drupal/src/types/deprecated.ts @@ -0,0 +1,3 @@ +import type { JsonApiOptions } from "./index" + +export type JsonApiWithLocaleOptions = Omit diff --git a/packages/next-drupal/src/types/drupal.ts b/packages/next-drupal/src/types/drupal.ts new file mode 100644 index 00000000..b2a77c93 --- /dev/null +++ b/packages/next-drupal/src/types/drupal.ts @@ -0,0 +1,154 @@ +import type { + JsonApiResource, + JsonApiResourceWithPath, + JsonApiResponse, +} from "./resource" + +export interface DrupalBlock extends JsonApiResource { + info: string +} + +export interface DrupalFile extends JsonApiResource { + drupal_internal__fid: string + changed: string + created: string + filename: string + uri: { + value: string + url: string + } + filesize: number + filemime: string + resourceIdObjMeta?: DrupalFileMeta +} + +export interface DrupalFileMeta { + alt?: string + title?: string + width: number + height: number +} + +export interface DrupalMedia extends JsonApiResource { + drupal_internal__mid: string + drupal_internal__vid: string + changed: string + created: string + name: string +} + +export interface DrupalMenuLinkContent { + description: string + enabled: boolean + expanded: boolean + id: string + menu_name: string + meta: Record + options: Record + parent: string + provider: string + route: { + name: string + parameters: Record + } + title: string + type: string + url: string + weight: string + items?: DrupalMenuLinkContent[] +} + +export interface DrupalNode extends JsonApiResourceWithPath { + drupal_internal__nid: number + drupal_internal__vid: number + changed: string + created: string + title: string + default_langcode: boolean + sticky: boolean +} + +export interface DrupalParagraph extends JsonApiResource { + drupal_internal__id: number + drupal_internal__revision_id: number +} + +export interface DrupalSearchApiJsonApiResponse extends JsonApiResponse { + meta: JsonApiResponse["meta"] & { + facets?: DrupalSearchApiFacet[] + } +} + +export interface DrupalSearchApiFacet { + id: string + label?: string + path?: string + terms?: { + url: string + values: { + value: string + label: string + active?: boolean + count?: number + } + }[] +} + +export interface DrupalTaxonomyTerm extends JsonApiResourceWithPath { + drupal_internal__tid: string + changed: string + default_langcode: boolean + name: string + description: string + weight: number +} + +export interface DrupalTranslatedPath { + resolved: string + isHomePath: boolean + entity: { + canonical: string + type: string + bundle: string + id: string + uuid: string + langcode?: string + path?: string + } + label?: string + jsonapi?: { + individual: string + resourceName: string + pathPrefix: string + basePath: string + entryPoint: string + } + meta?: Record + redirect?: { + from: string + to: string + status: string + }[] +} + +export interface DrupalUser extends JsonApiResourceWithPath { + drupal_internal__uid: string + changed: string + created: string + default_langcode: boolean + name: string +} + +/* eslint-disable @typescript-eslint/no-explicit-any */ +export interface DrupalView[]> { + id: string + results: T + meta: JsonApiResponse["meta"] + links: JsonApiResponse["links"] +} + +export type PathAlias = { + alias: string + pid: number + langcode: string +} diff --git a/packages/next-drupal/src/types/index.ts b/packages/next-drupal/src/types/index.ts new file mode 100644 index 00000000..f8194aaf --- /dev/null +++ b/packages/next-drupal/src/types/index.ts @@ -0,0 +1,4 @@ +export type * from "./client" +export type * from "./drupal" +export type * from "./options" +export type * from "./resource" diff --git a/packages/next-drupal/src/types/options.ts b/packages/next-drupal/src/types/options.ts new file mode 100644 index 00000000..c03e0d72 --- /dev/null +++ b/packages/next-drupal/src/types/options.ts @@ -0,0 +1,39 @@ +import type { DrupalClientAuth } from "./client" + +export type BaseUrl = string + +export type Locale = string + +export type PathPrefix = string + +export interface FetchOptions extends RequestInit { + withAuth?: boolean | DrupalClientAuth +} + +export type JsonApiOptions = { + deserialize?: boolean + params?: JsonApiParams +} & JsonApiWithAuthOption & + ( + | { + locale: Locale + defaultLocale: Locale + } + | { + locale?: undefined + defaultLocale?: never + } + ) + +export type JsonApiWithAuthOption = { + withAuth?: boolean | DrupalClientAuth +} + +export type JsonApiWithCacheOptions = { + withCache?: boolean + cacheKey?: string +} + +// TODO: Properly type this. +/* eslint-disable @typescript-eslint/no-explicit-any */ +export type JsonApiParams = Record diff --git a/packages/next-drupal/src/types/resource.ts b/packages/next-drupal/src/types/resource.ts new file mode 100644 index 00000000..99e5f28b --- /dev/null +++ b/packages/next-drupal/src/types/resource.ts @@ -0,0 +1,67 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ + +import type { JsonApiError, JsonApiLinks } from "../jsonapi-errors" +import type { PathAlias } from "./drupal" + +// TODO: any...ugh. +export interface JsonApiResponse extends Record { + jsonapi?: { + version: string + meta: Record[] + } + data: Record[] + errors: JsonApiError[] + meta: { + count: number + [key: string]: any + } + links?: JsonApiLinks + included?: Record[] +} + +export interface JsonApiResourceBodyRelationship { + data: { + type: string + id: string + } +} + +export interface JsonApiCreateResourceBody { + data: { + type?: string + attributes?: Record + relationships?: Record + } +} + +export interface JsonApiCreateFileResourceBody { + data: { + type?: string + attributes: { + type: string + field: string + filename: string + file: Buffer + } + } +} + +export interface JsonApiUpdateResourceBody { + data: { + type?: string + id?: string + attributes?: Record + relationships?: Record + } +} + +export interface JsonApiResource extends Record { + id: string + type: string + langcode: string + status: boolean +} + +export interface JsonApiResourceWithPath extends JsonApiResource { + path: PathAlias +} diff --git a/packages/next-drupal/tests/.eslintrc.json b/packages/next-drupal/tests/.eslintrc.json new file mode 100644 index 00000000..6da4ba50 --- /dev/null +++ b/packages/next-drupal/tests/.eslintrc.json @@ -0,0 +1,11 @@ +{ + "extends": ["../../../.eslintrc.json"], + "overrides": [ + { + "files": ["*.test.ts"], + "rules": { + "@typescript-eslint/ban-ts-comment": "off" + } + } + ] +} diff --git a/packages/next-drupal/tests/DrupalClient/__snapshots__/basic-methods.test.ts.snap b/packages/next-drupal/tests/DrupalClient/__snapshots__/basic-methods.test.ts.snap new file mode 100644 index 00000000..c1cac65e --- /dev/null +++ b/packages/next-drupal/tests/DrupalClient/__snapshots__/basic-methods.test.ts.snap @@ -0,0 +1,406 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`deserialize() allows for custom data serializer 1`] = ` +{ + "id": "52837ad0-f218-46bd-a106-5710336b7053", + "title": "TITLE: Give it a go and grow your own herbs", +} +`; + +exports[`deserialize() deserializes JSON:API collection 1`] = ` +[ + { + "id": "52837ad0-f218-46bd-a106-5710336b7053", + "links": { + "self": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/article/52837ad0-f218-46bd-a106-5710336b7053?resourceVersion=id%3A20", + }, + }, + "title": "Give it a go and grow your own herbs", + "type": "node--article", + }, + { + "id": "3d5a7bca-5b4a-49ee-87d2-cbe313562903", + "links": { + "self": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/article/3d5a7bca-5b4a-49ee-87d2-cbe313562903?resourceVersion=id%3A22", + }, + }, + "title": "Dairy-free and delicious milk chocolate", + "type": "node--article", + }, + { + "id": "a1ef61c9-ed15-4b6d-bba2-bf6e5141f961", + "links": { + "self": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/article/a1ef61c9-ed15-4b6d-bba2-bf6e5141f961?resourceVersion=id%3A24", + }, + }, + "title": "The real deal for supermarket savvy shopping", + "type": "node--article", + }, + { + "id": "ac0b8b56-db8d-4322-9b1e-224f22083f0d", + "links": { + "self": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/article/ac0b8b56-db8d-4322-9b1e-224f22083f0d?resourceVersion=id%3A26", + }, + }, + "title": "The Umami guide to our favorite mushrooms", + "type": "node--article", + }, + { + "id": "22874ecc-0443-441b-a3c9-3aa94d85b800", + "links": { + "self": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/article/22874ecc-0443-441b-a3c9-3aa94d85b800?resourceVersion=id%3A28", + }, + }, + "title": "Let's hear it for carrots", + "type": "node--article", + }, + { + "id": "ec51b1de-f51e-4761-b061-aa2624e58b4a", + "links": { + "self": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/article/ec51b1de-f51e-4761-b061-aa2624e58b4a?resourceVersion=id%3A30", + }, + }, + "title": "Baking mishaps - our troubleshooting tips", + "type": "node--article", + }, + { + "id": "d5b9ef80-c0aa-45ca-88e7-79c28abe5d50", + "links": { + "self": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/article/d5b9ef80-c0aa-45ca-88e7-79c28abe5d50?resourceVersion=id%3A32", + }, + }, + "title": "Skip the spirits with delicious mocktails", + "type": "node--article", + }, + { + "id": "6c7c249f-cd1a-41d5-944b-b3bfce68b325", + "links": { + "self": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/article/6c7c249f-cd1a-41d5-944b-b3bfce68b325?resourceVersion=id%3A34", + }, + }, + "title": "Give your oatmeal the ultimate makeover", + "type": "node--article", + }, +] +`; + +exports[`deserialize() deserializes JSON:API resource 1`] = ` +{ + "body": { + "format": "basic_html", + "processed": "

There's nothing like having your own supply of fresh herbs, readily available and close at hand to use while cooking. Whether you have a large garden or a small kitchen window sill, there's always enough room for something home grown.

+

Outdoors

+

Mint

+

Mint is a great plant to grow as it's hardy and can grow in almost any soil. Mint can grow wild, so keep it contained in a pot or it might spread and take over your whole garden.

+

Sage

+

Like mint, sage is another prolific growing plant and will take over your garden if you let it. Highly aromatic, the sage plant can be planted in a pot or flower bed in well drained soil. The best way to store the herb is to sun dry the leaves and store in a cool, dark cupboard in a sealed container.

+

Rosemary

+

Rosemary plants grow into lovely shrubs. Easily grown from cuttings, rosemary plants do not like freezing temperatures so keep pots or planted bushes near the home to shelter them from the cold. It grows well in pots as it likes dry soil, but can survive well in the ground too. If pruning rosemary to encourage it into a better shape, save the branches and hang them upside down to preserve the flavor and use in food.

+

Indoors

+

Basil

+

Perfect in sunny spot on a kitchen window sill. Basil is an annual plant, so will die off in the autumn, so it's a good idea to harvest it in the summer if you have an abundance and dry it. Picked basil stays fresh longer if it is placed in water (like fresh flowers). A great way to store basil is to make it into pesto!

+

Chives

+

A versatile herb, chives can grow well indoors. Ensure the plant is watered well, and gets plenty of light. Remember to regularly trim the chives. This prevents the flowers from developing and encourages new growth.

+

Coriander (Cilantro)

+

Coriander can grow indoors, but unlike the other herbs, it doesn't like full sun. If you have a south facing kitchen window, this isn't the place for it. Although not as thirsty as basil, coriander doesn't like dry soil so don't forget to water it! Cut coriander is best stored in the fridge.

+", + "summary": null, + "value": "

There's nothing like having your own supply of fresh herbs, readily available and close at hand to use while cooking. Whether you have a large garden or a small kitchen window sill, there's always enough room for something home grown.

+

Outdoors

+

Mint

+

Mint is a great plant to grow as it's hardy and can grow in almost any soil. Mint can grow wild, so keep it contained in a pot or it might spread and take over your whole garden.

+

Sage

+

Like mint, sage is another prolific growing plant and will take over your garden if you let it. Highly aromatic, the sage plant can be planted in a pot or flower bed in well drained soil. The best way to store the herb is to sun dry the leaves and store in a cool, dark cupboard in a sealed container.

+

Rosemary

+

Rosemary plants grow into lovely shrubs. Easily grown from cuttings, rosemary plants do not like freezing temperatures so keep pots or planted bushes near the home to shelter them from the cold. It grows well in pots as it likes dry soil, but can survive well in the ground too. If pruning rosemary to encourage it into a better shape, save the branches and hang them upside down to preserve the flavor and use in food.

+

Indoors

+

Basil

+

Perfect in sunny spot on a kitchen window sill. Basil is an annual plant, so will die off in the autumn, so it's a good idea to harvest it in the summer if you have an abundance and dry it. Picked basil stays fresh longer if it is placed in water (like fresh flowers). A great way to store basil is to make it into pesto!

+

Chives

+

A versatile herb, chives can grow well indoors. Ensure the plant is watered well, and gets plenty of light. Remember to regularly trim the chives. This prevents the flowers from developing and encourages new growth.

+

Coriander (Cilantro)

+

Coriander can grow indoors, but unlike the other herbs, it doesn't like full sun. If you have a south facing kitchen window, this isn't the place for it. Although not as thirsty as basil, coriander doesn't like dry soil so don't forget to water it! Cut coriander is best stored in the fridge.

+", + }, + "changed": "2022-03-21T10:52:42+00:00", + "content_translation_outdated": false, + "content_translation_source": "und", + "created": "2022-03-21T10:52:42+00:00", + "default_langcode": true, + "drupal_internal__nid": 10, + "drupal_internal__vid": 20, + "field_media_image": { + "id": "e5091a16-134e-400d-8393-cfe4eccbcaa2", + "resourceIdObjMeta": { + "drupal_internal__target_id": 10, + }, + "type": "media--image", + }, + "field_tags": [ + { + "changed": "2022-03-21T10:52:42+00:00", + "content_translation_created": "2022-03-21T10:52:42+00:00", + "content_translation_outdated": false, + "content_translation_source": "und", + "content_translation_uid": { + "id": "256a133b-0bd7-4426-a823-b8ce81e0d778", + "resourceIdObjMeta": { + "drupal_internal__target_id": 0, + }, + "type": "user--user", + }, + "default_langcode": true, + "description": null, + "drupal_internal__revision_id": 14, + "drupal_internal__tid": 14, + "id": "dcd81647-71b7-48cb-b555-e20322bcb7a7", + "langcode": "en", + "links": { + "self": { + "href": "https://tests.next-drupal.org/en/jsonapi/taxonomy_term/tags/dcd81647-71b7-48cb-b555-e20322bcb7a7?resourceVersion=id%3A14", + }, + }, + "name": "Grow your own", + "parent": [ + { + "id": "virtual", + "resourceIdObjMeta": { + "links": { + "help": { + "href": "https://www.drupal.org/docs/8/modules/json-api/core-concepts#virtual", + "meta": { + "about": "Usage and meaning of the 'virtual' resource identifier.", + }, + }, + }, + }, + "type": "taxonomy_term--tags", + }, + ], + "path": { + "alias": "/tags/grow-your-own", + "langcode": "en", + "pid": 27, + }, + "relationshipNames": [ + "vid", + "revision_user", + "parent", + "content_translation_uid", + ], + "resourceIdObjMeta": { + "drupal_internal__target_id": 14, + }, + "revision_created": "2022-03-21T10:52:42+00:00", + "revision_log_message": null, + "revision_translation_affected": true, + "revision_user": null, + "status": true, + "type": "taxonomy_term--tags", + "vid": { + "id": "b0442737-e5ff-4c7c-8c2b-c977886d6e73", + "resourceIdObjMeta": { + "drupal_internal__target_id": "tags", + }, + "type": "taxonomy_vocabulary--taxonomy_vocabulary", + }, + "weight": 0, + }, + { + "changed": "2022-03-21T10:52:42+00:00", + "content_translation_created": "2022-03-21T10:52:42+00:00", + "content_translation_outdated": false, + "content_translation_source": "und", + "content_translation_uid": { + "id": "256a133b-0bd7-4426-a823-b8ce81e0d778", + "resourceIdObjMeta": { + "drupal_internal__target_id": 0, + }, + "type": "user--user", + }, + "default_langcode": true, + "description": null, + "drupal_internal__revision_id": 23, + "drupal_internal__tid": 23, + "id": "60d20a4c-9d42-4b25-b717-3af3cba6abe8", + "langcode": "en", + "links": { + "self": { + "href": "https://tests.next-drupal.org/en/jsonapi/taxonomy_term/tags/60d20a4c-9d42-4b25-b717-3af3cba6abe8?resourceVersion=id%3A23", + }, + }, + "name": "Seasonal", + "parent": [ + { + "id": "virtual", + "resourceIdObjMeta": { + "links": { + "help": { + "href": "https://www.drupal.org/docs/8/modules/json-api/core-concepts#virtual", + "meta": { + "about": "Usage and meaning of the 'virtual' resource identifier.", + }, + }, + }, + }, + "type": "taxonomy_term--tags", + }, + ], + "path": { + "alias": "/tags/seasonal", + "langcode": "en", + "pid": 45, + }, + "relationshipNames": [ + "vid", + "revision_user", + "parent", + "content_translation_uid", + ], + "resourceIdObjMeta": { + "drupal_internal__target_id": 23, + }, + "revision_created": "2022-03-21T10:52:42+00:00", + "revision_log_message": null, + "revision_translation_affected": true, + "revision_user": null, + "status": true, + "type": "taxonomy_term--tags", + "vid": { + "id": "b0442737-e5ff-4c7c-8c2b-c977886d6e73", + "resourceIdObjMeta": { + "drupal_internal__target_id": "tags", + }, + "type": "taxonomy_vocabulary--taxonomy_vocabulary", + }, + "weight": 0, + }, + { + "changed": "2022-03-21T10:52:42+00:00", + "content_translation_created": "2022-03-21T10:52:42+00:00", + "content_translation_outdated": false, + "content_translation_source": "und", + "content_translation_uid": { + "id": "256a133b-0bd7-4426-a823-b8ce81e0d778", + "resourceIdObjMeta": { + "drupal_internal__target_id": 0, + }, + "type": "user--user", + }, + "default_langcode": true, + "description": null, + "drupal_internal__revision_id": 16, + "drupal_internal__tid": 16, + "id": "57a1d9f6-23a6-4215-a8a9-582202cd938d", + "langcode": "en", + "links": { + "self": { + "href": "https://tests.next-drupal.org/en/jsonapi/taxonomy_term/tags/57a1d9f6-23a6-4215-a8a9-582202cd938d?resourceVersion=id%3A16", + }, + }, + "name": "Herbs", + "parent": [ + { + "id": "virtual", + "resourceIdObjMeta": { + "links": { + "help": { + "href": "https://www.drupal.org/docs/8/modules/json-api/core-concepts#virtual", + "meta": { + "about": "Usage and meaning of the 'virtual' resource identifier.", + }, + }, + }, + }, + "type": "taxonomy_term--tags", + }, + ], + "path": { + "alias": "/tags/herbs", + "langcode": "en", + "pid": 31, + }, + "relationshipNames": [ + "vid", + "revision_user", + "parent", + "content_translation_uid", + ], + "resourceIdObjMeta": { + "drupal_internal__target_id": 16, + }, + "revision_created": "2022-03-21T10:52:42+00:00", + "revision_log_message": null, + "revision_translation_affected": true, + "revision_user": null, + "status": true, + "type": "taxonomy_term--tags", + "vid": { + "id": "b0442737-e5ff-4c7c-8c2b-c977886d6e73", + "resourceIdObjMeta": { + "drupal_internal__target_id": "tags", + }, + "type": "taxonomy_vocabulary--taxonomy_vocabulary", + }, + "weight": 0, + }, + ], + "id": "52837ad0-f218-46bd-a106-5710336b7053", + "langcode": "en", + "links": { + "self": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/article/52837ad0-f218-46bd-a106-5710336b7053?resourceVersion=id%3A20", + }, + }, + "moderation_state": "published", + "node_type": { + "id": "a145b65a-e660-4f5d-ac0d-bd2ff9e3f0b0", + "resourceIdObjMeta": { + "drupal_internal__target_id": "article", + }, + "type": "node_type--node_type", + }, + "path": { + "alias": "/articles/give-it-a-go-and-grow-your-own-herbs", + "langcode": "en", + "pid": 85, + }, + "promote": true, + "relationshipNames": [ + "node_type", + "revision_uid", + "uid", + "field_media_image", + "field_tags", + ], + "revision_log": null, + "revision_timestamp": "2022-03-21T10:52:42+00:00", + "revision_translation_affected": null, + "revision_uid": { + "id": "dd9c916d-4d66-4bff-a851-eeba0cf7673a", + "resourceIdObjMeta": { + "drupal_internal__target_id": 5, + }, + "type": "user--user", + }, + "status": true, + "sticky": false, + "title": "Give it a go and grow your own herbs", + "type": "node--article", + "uid": { + "id": "dd9c916d-4d66-4bff-a851-eeba0cf7673a", + "resourceIdObjMeta": { + "drupal_internal__target_id": 5, + }, + "type": "user--user", + }, +} +`; diff --git a/packages/next-drupal/tests/__snapshots__/client.test.ts.snap b/packages/next-drupal/tests/DrupalClient/__snapshots__/fetch-related-methods.test.ts.snap similarity index 66% rename from packages/next-drupal/tests/__snapshots__/client.test.ts.snap rename to packages/next-drupal/tests/DrupalClient/__snapshots__/fetch-related-methods.test.ts.snap index 31b9e41f..120346a7 100644 --- a/packages/next-drupal/tests/__snapshots__/client.test.ts.snap +++ b/packages/next-drupal/tests/DrupalClient/__snapshots__/fetch-related-methods.test.ts.snap @@ -1,600 +1,10 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`buildStaticPathsFromResources it builds static paths from resources 1`] = ` -Array [ - Object { - "params": Object { - "slug": Array [ - "blog", - "post", - "one", - ], - }, - }, - Object { - "params": Object { - "slug": Array [ - "blog", - "post", - "two", - ], - }, - }, -] -`; - -exports[`buildStaticPathsFromResources it builds static paths from resources 2`] = ` -Array [ - Object { - "locale": "es", - "params": Object { - "slug": Array [ - "blog", - "post", - "one", - ], - }, - }, - Object { - "locale": "es", - "params": Object { - "slug": Array [ - "blog", - "post", - "two", - ], - }, - }, -] -`; - -exports[`buildStaticPathsFromResources it builds static paths from resources with pathPrefix 1`] = ` -Array [ - Object { - "params": Object { - "slug": Array [ - "post", - "one", - ], - }, - }, - Object { - "params": Object { - "slug": Array [ - "post", - "two", - ], - }, - }, -] -`; - -exports[`buildStaticPathsFromResources it builds static paths from resources with pathPrefix 2`] = ` -Array [ - Object { - "locale": "es", - "params": Object { - "slug": Array [ - "one", - ], - }, - }, - Object { - "locale": "es", - "params": Object { - "slug": Array [ - "two", - ], - }, - }, -] -`; - -exports[`buildStaticPathsParamsFromPaths it builds static paths from paths 1`] = ` -Array [ - Object { - "params": Object { - "slug": Array [ - "blog", - "post", - "one", - ], - }, - }, - Object { - "params": Object { - "slug": Array [ - "blog", - "post", - "two", - ], - }, - }, - Object { - "params": Object { - "slug": Array [ - "blog", - "post", - "three", - ], - }, - }, -] -`; - -exports[`buildStaticPathsParamsFromPaths it builds static paths from paths 2`] = ` -Array [ - Object { - "locale": "en", - "params": Object { - "slug": Array [ - "blog", - "post", - "one", - ], - }, - }, - Object { - "locale": "en", - "params": Object { - "slug": Array [ - "blog", - "post", - "two", - ], - }, - }, - Object { - "locale": "en", - "params": Object { - "slug": Array [ - "blog", - "post", - "three", - ], - }, - }, -] -`; - -exports[`buildStaticPathsParamsFromPaths it builds static paths from paths with pathPrefix 1`] = ` -Array [ - Object { - "params": Object { - "slug": Array [ - "post", - "one", - ], - }, - }, - Object { - "params": Object { - "slug": Array [ - "post", - "two", - ], - }, - }, - Object { - "params": Object { - "slug": Array [ - "post", - ], - }, - }, -] -`; - -exports[`deserialize it allows for custom data serializer 1`] = ` -Object { - "id": "52837ad0-f218-46bd-a106-5710336b7053", - "title": "TITLE: Give it a go and grow your own herbs", -} -`; - -exports[`deserialize it deserializes JSON:API collection 1`] = ` -Array [ - Object { - "id": "52837ad0-f218-46bd-a106-5710336b7053", - "links": Object { - "self": Object { - "href": "https://tests.next-drupal.org/en/jsonapi/node/article/52837ad0-f218-46bd-a106-5710336b7053?resourceVersion=id%3A20", - }, - }, - "title": "Give it a go and grow your own herbs", - "type": "node--article", - }, - Object { - "id": "3d5a7bca-5b4a-49ee-87d2-cbe313562903", - "links": Object { - "self": Object { - "href": "https://tests.next-drupal.org/en/jsonapi/node/article/3d5a7bca-5b4a-49ee-87d2-cbe313562903?resourceVersion=id%3A22", - }, - }, - "title": "Dairy-free and delicious milk chocolate", - "type": "node--article", - }, - Object { - "id": "a1ef61c9-ed15-4b6d-bba2-bf6e5141f961", - "links": Object { - "self": Object { - "href": "https://tests.next-drupal.org/en/jsonapi/node/article/a1ef61c9-ed15-4b6d-bba2-bf6e5141f961?resourceVersion=id%3A24", - }, - }, - "title": "The real deal for supermarket savvy shopping", - "type": "node--article", - }, - Object { - "id": "ac0b8b56-db8d-4322-9b1e-224f22083f0d", - "links": Object { - "self": Object { - "href": "https://tests.next-drupal.org/en/jsonapi/node/article/ac0b8b56-db8d-4322-9b1e-224f22083f0d?resourceVersion=id%3A26", - }, - }, - "title": "The Umami guide to our favorite mushrooms", - "type": "node--article", - }, - Object { - "id": "22874ecc-0443-441b-a3c9-3aa94d85b800", - "links": Object { - "self": Object { - "href": "https://tests.next-drupal.org/en/jsonapi/node/article/22874ecc-0443-441b-a3c9-3aa94d85b800?resourceVersion=id%3A28", - }, - }, - "title": "Let's hear it for carrots", - "type": "node--article", - }, - Object { - "id": "ec51b1de-f51e-4761-b061-aa2624e58b4a", - "links": Object { - "self": Object { - "href": "https://tests.next-drupal.org/en/jsonapi/node/article/ec51b1de-f51e-4761-b061-aa2624e58b4a?resourceVersion=id%3A30", - }, - }, - "title": "Baking mishaps - our troubleshooting tips", - "type": "node--article", - }, - Object { - "id": "d5b9ef80-c0aa-45ca-88e7-79c28abe5d50", - "links": Object { - "self": Object { - "href": "https://tests.next-drupal.org/en/jsonapi/node/article/d5b9ef80-c0aa-45ca-88e7-79c28abe5d50?resourceVersion=id%3A32", - }, - }, - "title": "Skip the spirits with delicious mocktails", - "type": "node--article", - }, - Object { - "id": "6c7c249f-cd1a-41d5-944b-b3bfce68b325", - "links": Object { - "self": Object { - "href": "https://tests.next-drupal.org/en/jsonapi/node/article/6c7c249f-cd1a-41d5-944b-b3bfce68b325?resourceVersion=id%3A34", - }, - }, - "title": "Give your oatmeal the ultimate makeover", - "type": "node--article", - }, -] -`; - -exports[`deserialize it deserializes JSON:API resource 1`] = ` -Object { - "body": Object { - "format": "basic_html", - "processed": "

There's nothing like having your own supply of fresh herbs, readily available and close at hand to use while cooking. Whether you have a large garden or a small kitchen window sill, there's always enough room for something home grown.

-

Outdoors

-

Mint

-

Mint is a great plant to grow as it's hardy and can grow in almost any soil. Mint can grow wild, so keep it contained in a pot or it might spread and take over your whole garden.

-

Sage

-

Like mint, sage is another prolific growing plant and will take over your garden if you let it. Highly aromatic, the sage plant can be planted in a pot or flower bed in well drained soil. The best way to store the herb is to sun dry the leaves and store in a cool, dark cupboard in a sealed container.

-

Rosemary

-

Rosemary plants grow into lovely shrubs. Easily grown from cuttings, rosemary plants do not like freezing temperatures so keep pots or planted bushes near the home to shelter them from the cold. It grows well in pots as it likes dry soil, but can survive well in the ground too. If pruning rosemary to encourage it into a better shape, save the branches and hang them upside down to preserve the flavor and use in food.

-

Indoors

-

Basil

-

Perfect in sunny spot on a kitchen window sill. Basil is an annual plant, so will die off in the autumn, so it's a good idea to harvest it in the summer if you have an abundance and dry it. Picked basil stays fresh longer if it is placed in water (like fresh flowers). A great way to store basil is to make it into pesto!

-

Chives

-

A versatile herb, chives can grow well indoors. Ensure the plant is watered well, and gets plenty of light. Remember to regularly trim the chives. This prevents the flowers from developing and encourages new growth.

-

Coriander (Cilantro)

-

Coriander can grow indoors, but unlike the other herbs, it doesn't like full sun. If you have a south facing kitchen window, this isn't the place for it. Although not as thirsty as basil, coriander doesn't like dry soil so don't forget to water it! Cut coriander is best stored in the fridge.

-", - "summary": null, - "value": "

There's nothing like having your own supply of fresh herbs, readily available and close at hand to use while cooking. Whether you have a large garden or a small kitchen window sill, there's always enough room for something home grown.

-

Outdoors

-

Mint

-

Mint is a great plant to grow as it's hardy and can grow in almost any soil. Mint can grow wild, so keep it contained in a pot or it might spread and take over your whole garden.

-

Sage

-

Like mint, sage is another prolific growing plant and will take over your garden if you let it. Highly aromatic, the sage plant can be planted in a pot or flower bed in well drained soil. The best way to store the herb is to sun dry the leaves and store in a cool, dark cupboard in a sealed container.

-

Rosemary

-

Rosemary plants grow into lovely shrubs. Easily grown from cuttings, rosemary plants do not like freezing temperatures so keep pots or planted bushes near the home to shelter them from the cold. It grows well in pots as it likes dry soil, but can survive well in the ground too. If pruning rosemary to encourage it into a better shape, save the branches and hang them upside down to preserve the flavor and use in food.

-

Indoors

-

Basil

-

Perfect in sunny spot on a kitchen window sill. Basil is an annual plant, so will die off in the autumn, so it's a good idea to harvest it in the summer if you have an abundance and dry it. Picked basil stays fresh longer if it is placed in water (like fresh flowers). A great way to store basil is to make it into pesto!

-

Chives

-

A versatile herb, chives can grow well indoors. Ensure the plant is watered well, and gets plenty of light. Remember to regularly trim the chives. This prevents the flowers from developing and encourages new growth.

-

Coriander (Cilantro)

-

Coriander can grow indoors, but unlike the other herbs, it doesn't like full sun. If you have a south facing kitchen window, this isn't the place for it. Although not as thirsty as basil, coriander doesn't like dry soil so don't forget to water it! Cut coriander is best stored in the fridge.

-", - }, - "changed": "2022-03-21T10:52:42+00:00", - "content_translation_outdated": false, - "content_translation_source": "und", - "created": "2022-03-21T10:52:42+00:00", - "default_langcode": true, - "drupal_internal__nid": 10, - "drupal_internal__vid": 20, - "field_media_image": Object { - "id": "e5091a16-134e-400d-8393-cfe4eccbcaa2", - "resourceIdObjMeta": Object { - "drupal_internal__target_id": 10, - }, - "type": "media--image", - }, - "field_tags": Array [ - Object { - "changed": "2022-03-21T10:52:42+00:00", - "content_translation_created": "2022-03-21T10:52:42+00:00", - "content_translation_outdated": false, - "content_translation_source": "und", - "content_translation_uid": Object { - "id": "256a133b-0bd7-4426-a823-b8ce81e0d778", - "resourceIdObjMeta": Object { - "drupal_internal__target_id": 0, - }, - "type": "user--user", - }, - "default_langcode": true, - "description": null, - "drupal_internal__revision_id": 14, - "drupal_internal__tid": 14, - "id": "dcd81647-71b7-48cb-b555-e20322bcb7a7", - "langcode": "en", - "links": Object { - "self": Object { - "href": "https://tests.next-drupal.org/en/jsonapi/taxonomy_term/tags/dcd81647-71b7-48cb-b555-e20322bcb7a7?resourceVersion=id%3A14", - }, - }, - "name": "Grow your own", - "parent": Array [ - Object { - "id": "virtual", - "resourceIdObjMeta": Object { - "links": Object { - "help": Object { - "href": "https://www.drupal.org/docs/8/modules/json-api/core-concepts#virtual", - "meta": Object { - "about": "Usage and meaning of the 'virtual' resource identifier.", - }, - }, - }, - }, - "type": "taxonomy_term--tags", - }, - ], - "path": Object { - "alias": "/tags/grow-your-own", - "langcode": "en", - "pid": 27, - }, - "relationshipNames": Array [ - "vid", - "revision_user", - "parent", - "content_translation_uid", - ], - "resourceIdObjMeta": Object { - "drupal_internal__target_id": 14, - }, - "revision_created": "2022-03-21T10:52:42+00:00", - "revision_log_message": null, - "revision_translation_affected": true, - "revision_user": null, - "status": true, - "type": "taxonomy_term--tags", - "vid": Object { - "id": "b0442737-e5ff-4c7c-8c2b-c977886d6e73", - "resourceIdObjMeta": Object { - "drupal_internal__target_id": "tags", - }, - "type": "taxonomy_vocabulary--taxonomy_vocabulary", - }, - "weight": 0, - }, - Object { - "changed": "2022-03-21T10:52:42+00:00", - "content_translation_created": "2022-03-21T10:52:42+00:00", - "content_translation_outdated": false, - "content_translation_source": "und", - "content_translation_uid": Object { - "id": "256a133b-0bd7-4426-a823-b8ce81e0d778", - "resourceIdObjMeta": Object { - "drupal_internal__target_id": 0, - }, - "type": "user--user", - }, - "default_langcode": true, - "description": null, - "drupal_internal__revision_id": 23, - "drupal_internal__tid": 23, - "id": "60d20a4c-9d42-4b25-b717-3af3cba6abe8", - "langcode": "en", - "links": Object { - "self": Object { - "href": "https://tests.next-drupal.org/en/jsonapi/taxonomy_term/tags/60d20a4c-9d42-4b25-b717-3af3cba6abe8?resourceVersion=id%3A23", - }, - }, - "name": "Seasonal", - "parent": Array [ - Object { - "id": "virtual", - "resourceIdObjMeta": Object { - "links": Object { - "help": Object { - "href": "https://www.drupal.org/docs/8/modules/json-api/core-concepts#virtual", - "meta": Object { - "about": "Usage and meaning of the 'virtual' resource identifier.", - }, - }, - }, - }, - "type": "taxonomy_term--tags", - }, - ], - "path": Object { - "alias": "/tags/seasonal", - "langcode": "en", - "pid": 45, - }, - "relationshipNames": Array [ - "vid", - "revision_user", - "parent", - "content_translation_uid", - ], - "resourceIdObjMeta": Object { - "drupal_internal__target_id": 23, - }, - "revision_created": "2022-03-21T10:52:42+00:00", - "revision_log_message": null, - "revision_translation_affected": true, - "revision_user": null, - "status": true, - "type": "taxonomy_term--tags", - "vid": Object { - "id": "b0442737-e5ff-4c7c-8c2b-c977886d6e73", - "resourceIdObjMeta": Object { - "drupal_internal__target_id": "tags", - }, - "type": "taxonomy_vocabulary--taxonomy_vocabulary", - }, - "weight": 0, - }, - Object { - "changed": "2022-03-21T10:52:42+00:00", - "content_translation_created": "2022-03-21T10:52:42+00:00", - "content_translation_outdated": false, - "content_translation_source": "und", - "content_translation_uid": Object { - "id": "256a133b-0bd7-4426-a823-b8ce81e0d778", - "resourceIdObjMeta": Object { - "drupal_internal__target_id": 0, - }, - "type": "user--user", - }, - "default_langcode": true, - "description": null, - "drupal_internal__revision_id": 16, - "drupal_internal__tid": 16, - "id": "57a1d9f6-23a6-4215-a8a9-582202cd938d", - "langcode": "en", - "links": Object { - "self": Object { - "href": "https://tests.next-drupal.org/en/jsonapi/taxonomy_term/tags/57a1d9f6-23a6-4215-a8a9-582202cd938d?resourceVersion=id%3A16", - }, - }, - "name": "Herbs", - "parent": Array [ - Object { - "id": "virtual", - "resourceIdObjMeta": Object { - "links": Object { - "help": Object { - "href": "https://www.drupal.org/docs/8/modules/json-api/core-concepts#virtual", - "meta": Object { - "about": "Usage and meaning of the 'virtual' resource identifier.", - }, - }, - }, - }, - "type": "taxonomy_term--tags", - }, - ], - "path": Object { - "alias": "/tags/herbs", - "langcode": "en", - "pid": 31, - }, - "relationshipNames": Array [ - "vid", - "revision_user", - "parent", - "content_translation_uid", - ], - "resourceIdObjMeta": Object { - "drupal_internal__target_id": 16, - }, - "revision_created": "2022-03-21T10:52:42+00:00", - "revision_log_message": null, - "revision_translation_affected": true, - "revision_user": null, - "status": true, - "type": "taxonomy_term--tags", - "vid": Object { - "id": "b0442737-e5ff-4c7c-8c2b-c977886d6e73", - "resourceIdObjMeta": Object { - "drupal_internal__target_id": "tags", - }, - "type": "taxonomy_vocabulary--taxonomy_vocabulary", - }, - "weight": 0, - }, - ], - "id": "52837ad0-f218-46bd-a106-5710336b7053", - "langcode": "en", - "links": Object { - "self": Object { - "href": "https://tests.next-drupal.org/en/jsonapi/node/article/52837ad0-f218-46bd-a106-5710336b7053?resourceVersion=id%3A20", - }, - }, - "moderation_state": "published", - "node_type": Object { - "id": "a145b65a-e660-4f5d-ac0d-bd2ff9e3f0b0", - "resourceIdObjMeta": Object { - "drupal_internal__target_id": "article", - }, - "type": "node_type--node_type", - }, - "path": Object { - "alias": "/articles/give-it-a-go-and-grow-your-own-herbs", - "langcode": "en", - "pid": 85, - }, - "promote": true, - "relationshipNames": Array [ - "node_type", - "revision_uid", - "uid", - "field_media_image", - "field_tags", - ], - "revision_log": null, - "revision_timestamp": "2022-03-21T10:52:42+00:00", - "revision_translation_affected": null, - "revision_uid": Object { - "id": "dd9c916d-4d66-4bff-a851-eeba0cf7673a", - "resourceIdObjMeta": Object { - "drupal_internal__target_id": 5, - }, - "type": "user--user", - }, - "status": true, - "sticky": false, - "title": "Give it a go and grow your own herbs", - "type": "node--article", - "uid": Object { - "id": "dd9c916d-4d66-4bff-a851-eeba0cf7673a", - "resourceIdObjMeta": Object { - "drupal_internal__target_id": 5, - }, - "type": "user--user", - }, -} -`; - -exports[`fetch it allows fetching custom url 1`] = ` -Object { - "data": Object { - "attributes": Object { - "body": Object { +exports[`fetch() allows fetching custom url 1`] = ` +{ + "data": { + "attributes": { + "body": { "format": "basic_html", "processed": "

There's nothing like having your own supply of fresh herbs, readily available and close at hand to use while cooking. Whether you have a large garden or a small kitchen window sill, there's always enough room for something home grown.

Outdoors

@@ -639,7 +49,7 @@ Object { "drupal_internal__vid": 20, "langcode": "en", "moderation_state": "published", - "path": Object { + "path": { "alias": "/articles/give-it-a-go-and-grow-your-own-herbs", "langcode": "en", "pid": 85, @@ -653,109 +63,109 @@ Object { "title": "Give it a go and grow your own herbs", }, "id": "52837ad0-f218-46bd-a106-5710336b7053", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/article/52837ad0-f218-46bd-a106-5710336b7053?resourceVersion=id%3A20", }, }, - "relationships": Object { - "field_media_image": Object { - "data": Object { + "relationships": { + "field_media_image": { + "data": { "id": "e5091a16-134e-400d-8393-cfe4eccbcaa2", - "meta": Object { + "meta": { "drupal_internal__target_id": 10, }, "type": "media--image", }, - "links": Object { - "related": Object { + "links": { + "related": { "href": "https://tests.next-drupal.org/en/jsonapi/node/article/52837ad0-f218-46bd-a106-5710336b7053/field_media_image?resourceVersion=id%3A20", }, - "self": Object { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/article/52837ad0-f218-46bd-a106-5710336b7053/relationships/field_media_image?resourceVersion=id%3A20", }, }, }, - "field_tags": Object { - "data": Array [ - Object { + "field_tags": { + "data": [ + { "id": "dcd81647-71b7-48cb-b555-e20322bcb7a7", - "meta": Object { + "meta": { "drupal_internal__target_id": 14, }, "type": "taxonomy_term--tags", }, - Object { + { "id": "60d20a4c-9d42-4b25-b717-3af3cba6abe8", - "meta": Object { + "meta": { "drupal_internal__target_id": 23, }, "type": "taxonomy_term--tags", }, - Object { + { "id": "57a1d9f6-23a6-4215-a8a9-582202cd938d", - "meta": Object { + "meta": { "drupal_internal__target_id": 16, }, "type": "taxonomy_term--tags", }, ], - "links": Object { - "related": Object { + "links": { + "related": { "href": "https://tests.next-drupal.org/en/jsonapi/node/article/52837ad0-f218-46bd-a106-5710336b7053/field_tags?resourceVersion=id%3A20", }, - "self": Object { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/article/52837ad0-f218-46bd-a106-5710336b7053/relationships/field_tags?resourceVersion=id%3A20", }, }, }, - "node_type": Object { - "data": Object { + "node_type": { + "data": { "id": "a145b65a-e660-4f5d-ac0d-bd2ff9e3f0b0", - "meta": Object { + "meta": { "drupal_internal__target_id": "article", }, "type": "node_type--node_type", }, - "links": Object { - "related": Object { + "links": { + "related": { "href": "https://tests.next-drupal.org/en/jsonapi/node/article/52837ad0-f218-46bd-a106-5710336b7053/node_type?resourceVersion=id%3A20", }, - "self": Object { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/article/52837ad0-f218-46bd-a106-5710336b7053/relationships/node_type?resourceVersion=id%3A20", }, }, }, - "revision_uid": Object { - "data": Object { + "revision_uid": { + "data": { "id": "dd9c916d-4d66-4bff-a851-eeba0cf7673a", - "meta": Object { + "meta": { "drupal_internal__target_id": 5, }, "type": "user--user", }, - "links": Object { - "related": Object { + "links": { + "related": { "href": "https://tests.next-drupal.org/en/jsonapi/node/article/52837ad0-f218-46bd-a106-5710336b7053/revision_uid?resourceVersion=id%3A20", }, - "self": Object { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/article/52837ad0-f218-46bd-a106-5710336b7053/relationships/revision_uid?resourceVersion=id%3A20", }, }, }, - "uid": Object { - "data": Object { + "uid": { + "data": { "id": "dd9c916d-4d66-4bff-a851-eeba0cf7673a", - "meta": Object { + "meta": { "drupal_internal__target_id": 5, }, "type": "user--user", }, - "links": Object { - "related": Object { + "links": { + "related": { "href": "https://tests.next-drupal.org/en/jsonapi/node/article/52837ad0-f218-46bd-a106-5710336b7053/uid?resourceVersion=id%3A20", }, - "self": Object { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/article/52837ad0-f218-46bd-a106-5710336b7053/relationships/uid?resourceVersion=id%3A20", }, }, @@ -763,504 +173,504 @@ Object { }, "type": "node--article", }, - "jsonapi": Object { - "meta": Object { - "links": Object { - "self": Object { + "jsonapi": { + "meta": { + "links": { + "self": { "href": "http://jsonapi.org/format/1.0/", }, }, }, "version": "1.0", }, - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/jsonapi/node/article/52837ad0-f218-46bd-a106-5710336b7053", }, }, } `; -exports[`getIndex it fetches the JSON:API index 1`] = ` -Object { - "data": Array [], - "jsonapi": Object { - "meta": Object { - "links": Object { - "self": Object { +exports[`getIndex() fetches the JSON:API index 1`] = ` +{ + "data": [], + "jsonapi": { + "meta": { + "links": { + "self": { "href": "http://jsonapi.org/format/1.0/", }, }, }, "version": "1.0", }, - "links": Object { - "action--action": Object { + "links": { + "action--action": { "href": "https://tests.next-drupal.org/en/jsonapi/action/action", }, - "base_field_override--base_field_override": Object { + "base_field_override--base_field_override": { "href": "https://tests.next-drupal.org/en/jsonapi/base_field_override/base_field_override", }, - "block--block": Object { + "block--block": { "href": "https://tests.next-drupal.org/en/jsonapi/block/block", }, - "block_content--banner_block": Object { + "block_content--banner_block": { "href": "https://tests.next-drupal.org/en/jsonapi/block_content/banner_block", }, - "block_content--basic": Object { + "block_content--basic": { "href": "https://tests.next-drupal.org/en/jsonapi/block_content/basic", }, - "block_content--disclaimer_block": Object { + "block_content--disclaimer_block": { "href": "https://tests.next-drupal.org/en/jsonapi/block_content/disclaimer_block", }, - "block_content--footer_promo_block": Object { + "block_content--footer_promo_block": { "href": "https://tests.next-drupal.org/en/jsonapi/block_content/footer_promo_block", }, - "block_content_type--block_content_type": Object { + "block_content_type--block_content_type": { "href": "https://tests.next-drupal.org/en/jsonapi/block_content_type/block_content_type", }, - "configurable_language--configurable_language": Object { + "configurable_language--configurable_language": { "href": "https://tests.next-drupal.org/en/jsonapi/configurable_language/configurable_language", }, - "consumer--consumer": Object { + "consumer--consumer": { "href": "https://tests.next-drupal.org/en/jsonapi/consumer/consumer", }, - "contact_form--contact_form": Object { + "contact_form--contact_form": { "href": "https://tests.next-drupal.org/en/jsonapi/contact_form/contact_form", }, - "contact_message--feedback": Object { + "contact_message--feedback": { "href": "https://tests.next-drupal.org/en/jsonapi/contact_message/feedback", }, - "contact_message--personal": Object { + "contact_message--personal": { "href": "https://tests.next-drupal.org/en/jsonapi/contact_message/personal", }, - "date_format--date_format": Object { + "date_format--date_format": { "href": "https://tests.next-drupal.org/en/jsonapi/date_format/date_format", }, - "editor--editor": Object { + "editor--editor": { "href": "https://tests.next-drupal.org/en/jsonapi/editor/editor", }, - "entity_form_display--entity_form_display": Object { + "entity_form_display--entity_form_display": { "href": "https://tests.next-drupal.org/en/jsonapi/entity_form_display/entity_form_display", }, - "entity_form_mode--entity_form_mode": Object { + "entity_form_mode--entity_form_mode": { "href": "https://tests.next-drupal.org/en/jsonapi/entity_form_mode/entity_form_mode", }, - "entity_view_display--entity_view_display": Object { + "entity_view_display--entity_view_display": { "href": "https://tests.next-drupal.org/en/jsonapi/entity_view_display/entity_view_display", }, - "entity_view_mode--entity_view_mode": Object { + "entity_view_mode--entity_view_mode": { "href": "https://tests.next-drupal.org/en/jsonapi/entity_view_mode/entity_view_mode", }, - "facets_facet--facets_facet": Object { + "facets_facet--facets_facet": { "href": "https://tests.next-drupal.org/en/jsonapi/facets_facet/facets_facet", }, - "facets_facet_source--facets_facet_source": Object { + "facets_facet_source--facets_facet_source": { "href": "https://tests.next-drupal.org/en/jsonapi/facets_facet_source/facets_facet_source", }, - "field_config--field_config": Object { + "field_config--field_config": { "href": "https://tests.next-drupal.org/en/jsonapi/field_config/field_config", }, - "field_storage_config--field_storage_config": Object { + "field_storage_config--field_storage_config": { "href": "https://tests.next-drupal.org/en/jsonapi/field_storage_config/field_storage_config", }, - "file--file": Object { + "file--file": { "href": "https://tests.next-drupal.org/en/jsonapi/file/file", }, - "filter_format--filter_format": Object { + "filter_format--filter_format": { "href": "https://tests.next-drupal.org/en/jsonapi/filter_format/filter_format", }, - "image_style--image_style": Object { + "image_style--image_style": { "href": "https://tests.next-drupal.org/en/jsonapi/image_style/image_style", }, - "language_content_settings--language_content_settings": Object { + "language_content_settings--language_content_settings": { "href": "https://tests.next-drupal.org/en/jsonapi/language_content_settings/language_content_settings", }, - "media--audio": Object { + "media--audio": { "href": "https://tests.next-drupal.org/en/jsonapi/media/audio", }, - "media--document": Object { + "media--document": { "href": "https://tests.next-drupal.org/en/jsonapi/media/document", }, - "media--image": Object { + "media--image": { "href": "https://tests.next-drupal.org/en/jsonapi/media/image", }, - "media--remote_video": Object { + "media--remote_video": { "href": "https://tests.next-drupal.org/en/jsonapi/media/remote_video", }, - "media--video": Object { + "media--video": { "href": "https://tests.next-drupal.org/en/jsonapi/media/video", }, - "media_type--media_type": Object { + "media_type--media_type": { "href": "https://tests.next-drupal.org/en/jsonapi/media_type/media_type", }, - "menu--menu": Object { + "menu--menu": { "href": "https://tests.next-drupal.org/en/jsonapi/menu/menu", }, - "menu_link_content--menu_link_content": Object { + "menu_link_content--menu_link_content": { "href": "https://tests.next-drupal.org/en/jsonapi/menu_link_content/menu_link_content", }, - "next_entity_type_config--next_entity_type_config": Object { + "next_entity_type_config--next_entity_type_config": { "href": "https://tests.next-drupal.org/en/jsonapi/next_entity_type_config/next_entity_type_config", }, - "next_site--next_site": Object { + "next_site--next_site": { "href": "https://tests.next-drupal.org/en/jsonapi/next_site/next_site", }, - "node--article": Object { + "node--article": { "href": "https://tests.next-drupal.org/en/jsonapi/node/article", }, - "node--page": Object { + "node--page": { "href": "https://tests.next-drupal.org/en/jsonapi/node/page", }, - "node--recipe": Object { + "node--recipe": { "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe", }, - "node_type--node_type": Object { + "node_type--node_type": { "href": "https://tests.next-drupal.org/en/jsonapi/node_type/node_type", }, - "oauth2_token--access_token": Object { + "oauth2_token--access_token": { "href": "https://tests.next-drupal.org/en/jsonapi/oauth2_token/access_token", }, - "oauth2_token--auth_code": Object { + "oauth2_token--auth_code": { "href": "https://tests.next-drupal.org/en/jsonapi/oauth2_token/auth_code", }, - "oauth2_token--refresh_token": Object { + "oauth2_token--refresh_token": { "href": "https://tests.next-drupal.org/en/jsonapi/oauth2_token/refresh_token", }, - "oauth2_token_type--oauth2_token_type": Object { + "oauth2_token_type--oauth2_token_type": { "href": "https://tests.next-drupal.org/en/jsonapi/oauth2_token_type/oauth2_token_type", }, - "path_alias--path_alias": Object { + "path_alias--path_alias": { "href": "https://tests.next-drupal.org/en/jsonapi/path_alias/path_alias", }, - "pathauto_pattern--pathauto_pattern": Object { + "pathauto_pattern--pathauto_pattern": { "href": "https://tests.next-drupal.org/en/jsonapi/pathauto_pattern/pathauto_pattern", }, - "rdf_mapping--rdf_mapping": Object { + "rdf_mapping--rdf_mapping": { "href": "https://tests.next-drupal.org/en/jsonapi/rdf_mapping/rdf_mapping", }, - "responsive_image_style--responsive_image_style": Object { + "responsive_image_style--responsive_image_style": { "href": "https://tests.next-drupal.org/en/jsonapi/responsive_image_style/responsive_image_style", }, - "search_api_index--search_api_index": Object { + "search_api_index--search_api_index": { "href": "https://tests.next-drupal.org/en/jsonapi/search_api_index/search_api_index", }, - "search_api_server--search_api_server": Object { + "search_api_server--search_api_server": { "href": "https://tests.next-drupal.org/en/jsonapi/search_api_server/search_api_server", }, - "search_api_task--search_api_task": Object { + "search_api_task--search_api_task": { "href": "https://tests.next-drupal.org/en/jsonapi/search_api_task/search_api_task", }, - "search_page--search_page": Object { + "search_page--search_page": { "href": "https://tests.next-drupal.org/en/jsonapi/search_page/search_page", }, - "self": Object { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi", }, - "shortcut--default": Object { + "shortcut--default": { "href": "https://tests.next-drupal.org/en/jsonapi/shortcut/default", }, - "shortcut_set--shortcut_set": Object { + "shortcut_set--shortcut_set": { "href": "https://tests.next-drupal.org/en/jsonapi/shortcut_set/shortcut_set", }, - "taxonomy_term--recipe_category": Object { + "taxonomy_term--recipe_category": { "href": "https://tests.next-drupal.org/en/jsonapi/taxonomy_term/recipe_category", }, - "taxonomy_term--tags": Object { + "taxonomy_term--tags": { "href": "https://tests.next-drupal.org/en/jsonapi/taxonomy_term/tags", }, - "taxonomy_vocabulary--taxonomy_vocabulary": Object { + "taxonomy_vocabulary--taxonomy_vocabulary": { "href": "https://tests.next-drupal.org/en/jsonapi/taxonomy_vocabulary/taxonomy_vocabulary", }, - "tour--tour": Object { + "tour--tour": { "href": "https://tests.next-drupal.org/en/jsonapi/tour/tour", }, - "user--user": Object { + "user--user": { "href": "https://tests.next-drupal.org/en/jsonapi/user/user", }, - "user_role--user_role": Object { + "user_role--user_role": { "href": "https://tests.next-drupal.org/en/jsonapi/user_role/user_role", }, - "view--view": Object { + "view--view": { "href": "https://tests.next-drupal.org/en/jsonapi/view/view", }, - "workflow--workflow": Object { + "workflow--workflow": { "href": "https://tests.next-drupal.org/en/jsonapi/workflow/workflow", }, }, } `; -exports[`getIndex it fetches the JSON:API index with locale 1`] = ` -Object { - "data": Array [], - "jsonapi": Object { - "meta": Object { - "links": Object { - "self": Object { +exports[`getIndex() fetches the JSON:API index with locale 1`] = ` +{ + "data": [], + "jsonapi": { + "meta": { + "links": { + "self": { "href": "http://jsonapi.org/format/1.0/", }, }, }, "version": "1.0", }, - "links": Object { - "action--action": Object { + "links": { + "action--action": { "href": "https://tests.next-drupal.org/es/jsonapi/action/action", }, - "base_field_override--base_field_override": Object { + "base_field_override--base_field_override": { "href": "https://tests.next-drupal.org/es/jsonapi/base_field_override/base_field_override", }, - "block--block": Object { + "block--block": { "href": "https://tests.next-drupal.org/es/jsonapi/block/block", }, - "block_content--banner_block": Object { + "block_content--banner_block": { "href": "https://tests.next-drupal.org/es/jsonapi/block_content/banner_block", }, - "block_content--basic": Object { + "block_content--basic": { "href": "https://tests.next-drupal.org/es/jsonapi/block_content/basic", }, - "block_content--disclaimer_block": Object { + "block_content--disclaimer_block": { "href": "https://tests.next-drupal.org/es/jsonapi/block_content/disclaimer_block", }, - "block_content--footer_promo_block": Object { + "block_content--footer_promo_block": { "href": "https://tests.next-drupal.org/es/jsonapi/block_content/footer_promo_block", }, - "block_content_type--block_content_type": Object { + "block_content_type--block_content_type": { "href": "https://tests.next-drupal.org/es/jsonapi/block_content_type/block_content_type", }, - "configurable_language--configurable_language": Object { + "configurable_language--configurable_language": { "href": "https://tests.next-drupal.org/es/jsonapi/configurable_language/configurable_language", }, - "consumer--consumer": Object { + "consumer--consumer": { "href": "https://tests.next-drupal.org/es/jsonapi/consumer/consumer", }, - "contact_form--contact_form": Object { + "contact_form--contact_form": { "href": "https://tests.next-drupal.org/es/jsonapi/contact_form/contact_form", }, - "contact_message--feedback": Object { + "contact_message--feedback": { "href": "https://tests.next-drupal.org/es/jsonapi/contact_message/feedback", }, - "contact_message--personal": Object { + "contact_message--personal": { "href": "https://tests.next-drupal.org/es/jsonapi/contact_message/personal", }, - "date_format--date_format": Object { + "date_format--date_format": { "href": "https://tests.next-drupal.org/es/jsonapi/date_format/date_format", }, - "editor--editor": Object { + "editor--editor": { "href": "https://tests.next-drupal.org/es/jsonapi/editor/editor", }, - "entity_form_display--entity_form_display": Object { + "entity_form_display--entity_form_display": { "href": "https://tests.next-drupal.org/es/jsonapi/entity_form_display/entity_form_display", }, - "entity_form_mode--entity_form_mode": Object { + "entity_form_mode--entity_form_mode": { "href": "https://tests.next-drupal.org/es/jsonapi/entity_form_mode/entity_form_mode", }, - "entity_view_display--entity_view_display": Object { + "entity_view_display--entity_view_display": { "href": "https://tests.next-drupal.org/es/jsonapi/entity_view_display/entity_view_display", }, - "entity_view_mode--entity_view_mode": Object { + "entity_view_mode--entity_view_mode": { "href": "https://tests.next-drupal.org/es/jsonapi/entity_view_mode/entity_view_mode", }, - "facets_facet--facets_facet": Object { + "facets_facet--facets_facet": { "href": "https://tests.next-drupal.org/es/jsonapi/facets_facet/facets_facet", }, - "facets_facet_source--facets_facet_source": Object { + "facets_facet_source--facets_facet_source": { "href": "https://tests.next-drupal.org/es/jsonapi/facets_facet_source/facets_facet_source", }, - "field_config--field_config": Object { + "field_config--field_config": { "href": "https://tests.next-drupal.org/es/jsonapi/field_config/field_config", }, - "field_storage_config--field_storage_config": Object { + "field_storage_config--field_storage_config": { "href": "https://tests.next-drupal.org/es/jsonapi/field_storage_config/field_storage_config", }, - "file--file": Object { + "file--file": { "href": "https://tests.next-drupal.org/es/jsonapi/file/file", }, - "filter_format--filter_format": Object { + "filter_format--filter_format": { "href": "https://tests.next-drupal.org/es/jsonapi/filter_format/filter_format", }, - "image_style--image_style": Object { + "image_style--image_style": { "href": "https://tests.next-drupal.org/es/jsonapi/image_style/image_style", }, - "language_content_settings--language_content_settings": Object { + "language_content_settings--language_content_settings": { "href": "https://tests.next-drupal.org/es/jsonapi/language_content_settings/language_content_settings", }, - "media--audio": Object { + "media--audio": { "href": "https://tests.next-drupal.org/es/jsonapi/media/audio", }, - "media--document": Object { + "media--document": { "href": "https://tests.next-drupal.org/es/jsonapi/media/document", }, - "media--image": Object { + "media--image": { "href": "https://tests.next-drupal.org/es/jsonapi/media/image", }, - "media--remote_video": Object { + "media--remote_video": { "href": "https://tests.next-drupal.org/es/jsonapi/media/remote_video", }, - "media--video": Object { + "media--video": { "href": "https://tests.next-drupal.org/es/jsonapi/media/video", }, - "media_type--media_type": Object { + "media_type--media_type": { "href": "https://tests.next-drupal.org/es/jsonapi/media_type/media_type", }, - "menu--menu": Object { + "menu--menu": { "href": "https://tests.next-drupal.org/es/jsonapi/menu/menu", }, - "menu_link_content--menu_link_content": Object { + "menu_link_content--menu_link_content": { "href": "https://tests.next-drupal.org/es/jsonapi/menu_link_content/menu_link_content", }, - "next_entity_type_config--next_entity_type_config": Object { + "next_entity_type_config--next_entity_type_config": { "href": "https://tests.next-drupal.org/es/jsonapi/next_entity_type_config/next_entity_type_config", }, - "next_site--next_site": Object { + "next_site--next_site": { "href": "https://tests.next-drupal.org/es/jsonapi/next_site/next_site", }, - "node--article": Object { + "node--article": { "href": "https://tests.next-drupal.org/es/jsonapi/node/article", }, - "node--page": Object { + "node--page": { "href": "https://tests.next-drupal.org/es/jsonapi/node/page", }, - "node--recipe": Object { + "node--recipe": { "href": "https://tests.next-drupal.org/es/jsonapi/node/recipe", }, - "node_type--node_type": Object { + "node_type--node_type": { "href": "https://tests.next-drupal.org/es/jsonapi/node_type/node_type", }, - "oauth2_token--access_token": Object { + "oauth2_token--access_token": { "href": "https://tests.next-drupal.org/es/jsonapi/oauth2_token/access_token", }, - "oauth2_token--auth_code": Object { + "oauth2_token--auth_code": { "href": "https://tests.next-drupal.org/es/jsonapi/oauth2_token/auth_code", }, - "oauth2_token--refresh_token": Object { + "oauth2_token--refresh_token": { "href": "https://tests.next-drupal.org/es/jsonapi/oauth2_token/refresh_token", }, - "oauth2_token_type--oauth2_token_type": Object { + "oauth2_token_type--oauth2_token_type": { "href": "https://tests.next-drupal.org/es/jsonapi/oauth2_token_type/oauth2_token_type", }, - "path_alias--path_alias": Object { + "path_alias--path_alias": { "href": "https://tests.next-drupal.org/es/jsonapi/path_alias/path_alias", }, - "pathauto_pattern--pathauto_pattern": Object { + "pathauto_pattern--pathauto_pattern": { "href": "https://tests.next-drupal.org/es/jsonapi/pathauto_pattern/pathauto_pattern", }, - "rdf_mapping--rdf_mapping": Object { + "rdf_mapping--rdf_mapping": { "href": "https://tests.next-drupal.org/es/jsonapi/rdf_mapping/rdf_mapping", }, - "responsive_image_style--responsive_image_style": Object { + "responsive_image_style--responsive_image_style": { "href": "https://tests.next-drupal.org/es/jsonapi/responsive_image_style/responsive_image_style", }, - "search_api_index--search_api_index": Object { + "search_api_index--search_api_index": { "href": "https://tests.next-drupal.org/es/jsonapi/search_api_index/search_api_index", }, - "search_api_server--search_api_server": Object { + "search_api_server--search_api_server": { "href": "https://tests.next-drupal.org/es/jsonapi/search_api_server/search_api_server", }, - "search_api_task--search_api_task": Object { + "search_api_task--search_api_task": { "href": "https://tests.next-drupal.org/es/jsonapi/search_api_task/search_api_task", }, - "search_page--search_page": Object { + "search_page--search_page": { "href": "https://tests.next-drupal.org/es/jsonapi/search_page/search_page", }, - "self": Object { + "self": { "href": "https://tests.next-drupal.org/es/jsonapi", }, - "shortcut--default": Object { + "shortcut--default": { "href": "https://tests.next-drupal.org/es/jsonapi/shortcut/default", }, - "shortcut_set--shortcut_set": Object { + "shortcut_set--shortcut_set": { "href": "https://tests.next-drupal.org/es/jsonapi/shortcut_set/shortcut_set", }, - "taxonomy_term--recipe_category": Object { + "taxonomy_term--recipe_category": { "href": "https://tests.next-drupal.org/es/jsonapi/taxonomy_term/recipe_category", }, - "taxonomy_term--tags": Object { + "taxonomy_term--tags": { "href": "https://tests.next-drupal.org/es/jsonapi/taxonomy_term/tags", }, - "taxonomy_vocabulary--taxonomy_vocabulary": Object { + "taxonomy_vocabulary--taxonomy_vocabulary": { "href": "https://tests.next-drupal.org/es/jsonapi/taxonomy_vocabulary/taxonomy_vocabulary", }, - "tour--tour": Object { + "tour--tour": { "href": "https://tests.next-drupal.org/es/jsonapi/tour/tour", }, - "user--user": Object { + "user--user": { "href": "https://tests.next-drupal.org/es/jsonapi/user/user", }, - "user_role--user_role": Object { + "user_role--user_role": { "href": "https://tests.next-drupal.org/es/jsonapi/user_role/user_role", }, - "view--view": Object { + "view--view": { "href": "https://tests.next-drupal.org/es/jsonapi/view/view", }, - "workflow--workflow": Object { + "workflow--workflow": { "href": "https://tests.next-drupal.org/es/jsonapi/workflow/workflow", }, }, } `; -exports[`getMenu it fetches menu items for a menu 1`] = ` -Object { - "items": Array [ - Object { +exports[`getMenu() fetches menu items for a menu 1`] = ` +{ + "items": [ + { "description": "", "enabled": true, "expanded": false, "id": "standard.front_page", "menu_name": "main", - "meta": Array [], - "options": Array [], + "meta": [], + "options": [], "parent": "", "provider": "demo_umami", - "route": Object { + "route": { "name": "", - "parameters": Array [], + "parameters": [], }, "title": "Home", "type": "menu_link_content--menu_link_content", "url": "/en", "weight": "0", }, - Object { + { "description": "", "enabled": true, "expanded": false, "id": "views_view:views.featured_articles.page_1", "menu_name": "main", - "meta": Object { + "meta": { "display_id": "page_1", "view_id": "featured_articles", }, - "options": Array [], + "options": [], "parent": "", "provider": "views", - "route": Object { + "route": { "name": "view.featured_articles.page_1", - "parameters": Array [], + "parameters": [], }, "title": "Articles", "type": "menu_link_content--menu_link_content", "url": "/en/articles", "weight": "20", }, - Object { + { "description": "", "enabled": true, "expanded": false, "id": "views_view:views.recipes.page_1", "menu_name": "main", - "meta": Object { + "meta": { "display_id": "page_1", "view_id": "recipes", }, - "options": Array [], + "options": [], "parent": "", "provider": "views", - "route": Object { + "route": { "name": "view.recipes.page_1", - "parameters": Array [], + "parameters": [], }, "title": "Recipes", "type": "menu_link_content--menu_link_content", @@ -1268,64 +678,64 @@ Object { "weight": "30", }, ], - "tree": Array [ - Object { + "tree": [ + { "description": "", "enabled": true, "expanded": false, "id": "standard.front_page", "menu_name": "main", - "meta": Array [], - "options": Array [], + "meta": [], + "options": [], "parent": "", "provider": "demo_umami", - "route": Object { + "route": { "name": "", - "parameters": Array [], + "parameters": [], }, "title": "Home", "type": "menu_link_content--menu_link_content", "url": "/en", "weight": "0", }, - Object { + { "description": "", "enabled": true, "expanded": false, "id": "views_view:views.featured_articles.page_1", "menu_name": "main", - "meta": Object { + "meta": { "display_id": "page_1", "view_id": "featured_articles", }, - "options": Array [], + "options": [], "parent": "", "provider": "views", - "route": Object { + "route": { "name": "view.featured_articles.page_1", - "parameters": Array [], + "parameters": [], }, "title": "Articles", "type": "menu_link_content--menu_link_content", "url": "/en/articles", "weight": "20", }, - Object { + { "description": "", "enabled": true, "expanded": false, "id": "views_view:views.recipes.page_1", "menu_name": "main", - "meta": Object { + "meta": { "display_id": "page_1", "view_id": "recipes", }, - "options": Array [], + "options": [], "parent": "", "provider": "views", - "route": Object { + "route": { "name": "view.recipes.page_1", - "parameters": Array [], + "parameters": [], }, "title": "Recipes", "type": "menu_link_content--menu_link_content", @@ -1336,66 +746,66 @@ Object { } `; -exports[`getMenu it fetches menu items for a menu with locale 1`] = ` -Object { - "items": Array [ - Object { +exports[`getMenu() fetches menu items for a menu with locale 1`] = ` +{ + "items": [ + { "description": "", "enabled": true, "expanded": false, "id": "standard.front_page", "menu_name": "main", - "meta": Array [], - "options": Array [], + "meta": [], + "options": [], "parent": "", "provider": "demo_umami", - "route": Object { + "route": { "name": "", - "parameters": Array [], + "parameters": [], }, "title": "Inicio", "type": "menu_link_content--menu_link_content", "url": "/es", "weight": "0", }, - Object { + { "description": "", "enabled": true, "expanded": false, "id": "views_view:views.featured_articles.page_1", "menu_name": "main", - "meta": Object { + "meta": { "display_id": "page_1", "view_id": "featured_articles", }, - "options": Array [], + "options": [], "parent": "", "provider": "views", - "route": Object { + "route": { "name": "view.featured_articles.page_1", - "parameters": Array [], + "parameters": [], }, "title": "Artículos", "type": "menu_link_content--menu_link_content", "url": "/es/articles", "weight": "20", }, - Object { + { "description": "", "enabled": true, "expanded": false, "id": "views_view:views.recipes.page_1", "menu_name": "main", - "meta": Object { + "meta": { "display_id": "page_1", "view_id": "recipes", }, - "options": Array [], + "options": [], "parent": "", "provider": "views", - "route": Object { + "route": { "name": "view.recipes.page_1", - "parameters": Array [], + "parameters": [], }, "title": "Recetas", "type": "menu_link_content--menu_link_content", @@ -1403,64 +813,64 @@ Object { "weight": "30", }, ], - "tree": Array [ - Object { + "tree": [ + { "description": "", "enabled": true, "expanded": false, "id": "standard.front_page", "menu_name": "main", - "meta": Array [], - "options": Array [], + "meta": [], + "options": [], "parent": "", "provider": "demo_umami", - "route": Object { + "route": { "name": "", - "parameters": Array [], + "parameters": [], }, "title": "Inicio", "type": "menu_link_content--menu_link_content", "url": "/es", "weight": "0", }, - Object { + { "description": "", "enabled": true, "expanded": false, "id": "views_view:views.featured_articles.page_1", "menu_name": "main", - "meta": Object { + "meta": { "display_id": "page_1", "view_id": "featured_articles", }, - "options": Array [], + "options": [], "parent": "", "provider": "views", - "route": Object { + "route": { "name": "view.featured_articles.page_1", - "parameters": Array [], + "parameters": [], }, "title": "Artículos", "type": "menu_link_content--menu_link_content", "url": "/es/articles", "weight": "20", }, - Object { + { "description": "", "enabled": true, "expanded": false, "id": "views_view:views.recipes.page_1", "menu_name": "main", - "meta": Object { + "meta": { "display_id": "page_1", "view_id": "recipes", }, - "options": Array [], + "options": [], "parent": "", "provider": "views", - "route": Object { + "route": { "name": "view.recipes.page_1", - "parameters": Array [], + "parameters": [], }, "title": "Recetas", "type": "menu_link_content--menu_link_content", @@ -1471,20 +881,20 @@ Object { } `; -exports[`getMenu it fetches menu items for a menu with params 1`] = ` -Object { - "items": Array [ - Object { +exports[`getMenu() fetches menu items for a menu with params 1`] = ` +{ + "items": [ + { "id": "standard.front_page", "title": "Home", "type": "menu_link_content--menu_link_content", }, - Object { + { "id": "views_view:views.featured_articles.page_1", "title": "Articles", "type": "menu_link_content--menu_link_content", }, - Object { + { "id": "views_view:views.recipes.page_1", "title": "Recipes", "type": "menu_link_content--menu_link_content", @@ -1494,37 +904,8 @@ Object { } `; -exports[`getPathFromContext it encodes path with punctuation 1`] = ` -Object { - "entity": Object { - "bundle": "page", - "canonical": "https://tests.next-drupal.org/en/path%26with%5Epunc%26in%24path", - "id": "20", - "langcode": "en", - "path": "/en/path%26with%5Epunc%26in%24path", - "type": "node", - "uuid": "e4bbe727-14ee-44bc-a34a-14ce5c86a82e", - }, - "isHomePath": false, - "jsonapi": Object { - "basePath": "/en/jsonapi", - "entryPoint": "https://tests.next-drupal.org/en/jsonapi", - "individual": "https://tests.next-drupal.org/en/jsonapi/node/page/e4bbe727-14ee-44bc-a34a-14ce5c86a82e", - "pathPrefix": "en/jsonapi", - "resourceName": "node--page", - }, - "label": "Page with characters in path", - "meta": Object { - "deprecated": Object { - "jsonapi.pathPrefix": "This property has been deprecated and will be removed in the next version of Decoupled Router. Use basePath instead.", - }, - }, - "resolved": "https://tests.next-drupal.org/en/path%26with%5Epunc%26in%24path", -} -`; - -exports[`getResource it fetches a resource by uuid 1`] = ` -Object { +exports[`getResource() fetches a resource by uuid 1`] = ` +{ "changed": "2022-03-25T08:02:17+00:00", "content_translation_outdated": false, "content_translation_source": "und", @@ -1534,7 +915,7 @@ Object { "drupal_internal__vid": 37, "field_cooking_time": 30, "field_difficulty": "medium", - "field_ingredients": Array [ + "field_ingredients": [ "For the pastry:", "280g plain flour", "140g butter", @@ -1549,25 +930,25 @@ Object { "200g sun dried tomatoes", "100g feta", ], - "field_media_image": Object { + "field_media_image": { "id": "bbfe9d97-2da2-432b-a22c-0396c08e06ca", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 1, }, "type": "media--image", }, "field_number_of_servings": 8, "field_preparation_time": 40, - "field_recipe_category": Array [ - Object { + "field_recipe_category": [ + { "id": "a6c02fe4-67bf-462c-90cb-32281a07efe4", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 31, }, "type": "taxonomy_term--recipe_category", }, ], - "field_recipe_instruction": Object { + "field_recipe_instruction": { "format": "basic_html", "processed": "
  1. Preheat the oven to 400°F/200°C. Starting with the pastry; rub the flour and butter together in a bowl until crumbling like breadcrumbs. Add water, a little at a time, until it forms a dough.
  2. Roll out the pastry on a floured board and gently spread over your tin. Place in the fridge for 20 minutes before blind baking for a further 10.
  3. @@ -1584,24 +965,24 @@ Object {
", }, - "field_summary": Object { + "field_summary": { "format": "basic_html", "processed": "

An Italian inspired quiche with sun dried tomatoes and courgette. A perfect light meal for a summer's day.

", "value": "

An Italian inspired quiche with sun dried tomatoes and courgette. A perfect light meal for a summer's day.

", }, - "field_tags": Array [ - Object { + "field_tags": [ + { "id": "46258827-cfad-4813-99dc-287c4cb41117", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 22, }, "type": "taxonomy_term--tags", }, - Object { + { "id": "f32a4d84-0568-4bfd-8be3-8217d36efb6d", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 13, }, "type": "taxonomy_term--tags", @@ -1609,26 +990,26 @@ Object { ], "id": "71e04ead-4cc7-416c-b9ca-60b635fdc50f", "langcode": "en", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f?resourceVersion=id%3A37", }, }, "moderation_state": "published", - "node_type": Object { + "node_type": { "id": "9b70a287-cade-454f-be8b-dea7b9a37c7a", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": "recipe", }, "type": "node_type--node_type", }, - "path": Object { + "path": { "alias": "/recipes/deep-mediterranean-quiche", "langcode": "en", "pid": 67, }, "promote": true, - "relationshipNames": Array [ + "relationshipNames": [ "node_type", "revision_uid", "uid", @@ -1639,9 +1020,9 @@ Object { "revision_log": null, "revision_timestamp": "2022-03-25T08:02:17+00:00", "revision_translation_affected": true, - "revision_uid": Object { + "revision_uid": { "id": "365cc7b5-ddc4-4b3b-939e-1494400aab4a", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 1, }, "type": "user--user", @@ -1650,9 +1031,9 @@ Object { "sticky": false, "title": "Deep mediterranean quiche - edited", "type": "node--recipe", - "uid": Object { + "uid": { "id": "9e4944e8-dd77-407a-8610-83e823b48b56", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 4, }, "type": "user--user", @@ -1660,12 +1041,12 @@ Object { } `; -exports[`getResource it fetches a resource by uuid with params 1`] = ` -Object { +exports[`getResource() fetches a resource by uuid with params 1`] = ` +{ "field_cooking_time": 30, "id": "71e04ead-4cc7-416c-b9ca-60b635fdc50f", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f?resourceVersion=id%3A37", }, }, @@ -1674,12 +1055,12 @@ Object { } `; -exports[`getResource it fetches a resource using locale 1`] = ` -Object { +exports[`getResource() fetches a resource using locale 1`] = ` +{ "field_cooking_time": 30, "id": "71e04ead-4cc7-416c-b9ca-60b635fdc50f", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/es/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f?resourceVersion=id%3A37", }, }, @@ -1688,10 +1069,10 @@ Object { } `; -exports[`getResource it fetches raw data 1`] = ` -Object { - "data": Object { - "attributes": Object { +exports[`getResource() fetches raw data 1`] = ` +{ + "data": { + "attributes": { "changed": "2022-03-25T08:02:17+00:00", "content_translation_outdated": false, "content_translation_source": "und", @@ -1701,7 +1082,7 @@ Object { "drupal_internal__vid": 37, "field_cooking_time": 30, "field_difficulty": "medium", - "field_ingredients": Array [ + "field_ingredients": [ "For the pastry:", "280g plain flour", "140g butter", @@ -1718,7 +1099,7 @@ Object { ], "field_number_of_servings": 8, "field_preparation_time": 40, - "field_recipe_instruction": Object { + "field_recipe_instruction": { "format": "basic_html", "processed": "
  1. Preheat the oven to 400°F/200°C. Starting with the pastry; rub the flour and butter together in a bowl until crumbling like breadcrumbs. Add water, a little at a time, until it forms a dough.
  2. Roll out the pastry on a floured board and gently spread over your tin. Place in the fridge for 20 minutes before blind baking for a further 10.
  3. @@ -1735,7 +1116,7 @@ Object {
", }, - "field_summary": Object { + "field_summary": { "format": "basic_html", "processed": "

An Italian inspired quiche with sun dried tomatoes and courgette. A perfect light meal for a summer's day.

", @@ -1744,7 +1125,7 @@ Object { }, "langcode": "en", "moderation_state": "published", - "path": Object { + "path": { "alias": "/recipes/deep-mediterranean-quiche", "langcode": "en", "pid": 67, @@ -1758,121 +1139,121 @@ Object { "title": "Deep mediterranean quiche - edited", }, "id": "71e04ead-4cc7-416c-b9ca-60b635fdc50f", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f?resourceVersion=id%3A37", }, }, - "relationships": Object { - "field_media_image": Object { - "data": Object { + "relationships": { + "field_media_image": { + "data": { "id": "bbfe9d97-2da2-432b-a22c-0396c08e06ca", - "meta": Object { + "meta": { "drupal_internal__target_id": 1, }, "type": "media--image", }, - "links": Object { - "related": Object { + "links": { + "related": { "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f/field_media_image?resourceVersion=id%3A37", }, - "self": Object { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f/relationships/field_media_image?resourceVersion=id%3A37", }, }, }, - "field_recipe_category": Object { - "data": Array [ - Object { + "field_recipe_category": { + "data": [ + { "id": "a6c02fe4-67bf-462c-90cb-32281a07efe4", - "meta": Object { + "meta": { "drupal_internal__target_id": 31, }, "type": "taxonomy_term--recipe_category", }, ], - "links": Object { - "related": Object { + "links": { + "related": { "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f/field_recipe_category?resourceVersion=id%3A37", }, - "self": Object { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f/relationships/field_recipe_category?resourceVersion=id%3A37", }, }, }, - "field_tags": Object { - "data": Array [ - Object { + "field_tags": { + "data": [ + { "id": "46258827-cfad-4813-99dc-287c4cb41117", - "meta": Object { + "meta": { "drupal_internal__target_id": 22, }, "type": "taxonomy_term--tags", }, - Object { + { "id": "f32a4d84-0568-4bfd-8be3-8217d36efb6d", - "meta": Object { + "meta": { "drupal_internal__target_id": 13, }, "type": "taxonomy_term--tags", }, ], - "links": Object { - "related": Object { + "links": { + "related": { "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f/field_tags?resourceVersion=id%3A37", }, - "self": Object { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f/relationships/field_tags?resourceVersion=id%3A37", }, }, }, - "node_type": Object { - "data": Object { + "node_type": { + "data": { "id": "9b70a287-cade-454f-be8b-dea7b9a37c7a", - "meta": Object { + "meta": { "drupal_internal__target_id": "recipe", }, "type": "node_type--node_type", }, - "links": Object { - "related": Object { + "links": { + "related": { "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f/node_type?resourceVersion=id%3A37", }, - "self": Object { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f/relationships/node_type?resourceVersion=id%3A37", }, }, }, - "revision_uid": Object { - "data": Object { + "revision_uid": { + "data": { "id": "365cc7b5-ddc4-4b3b-939e-1494400aab4a", - "meta": Object { + "meta": { "drupal_internal__target_id": 1, }, "type": "user--user", }, - "links": Object { - "related": Object { + "links": { + "related": { "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f/revision_uid?resourceVersion=id%3A37", }, - "self": Object { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f/relationships/revision_uid?resourceVersion=id%3A37", }, }, }, - "uid": Object { - "data": Object { + "uid": { + "data": { "id": "9e4944e8-dd77-407a-8610-83e823b48b56", - "meta": Object { + "meta": { "drupal_internal__target_id": 4, }, "type": "user--user", }, - "links": Object { - "related": Object { + "links": { + "related": { "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f/uid?resourceVersion=id%3A37", }, - "self": Object { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f/relationships/uid?resourceVersion=id%3A37", }, }, @@ -1880,26 +1261,26 @@ Object { }, "type": "node--recipe", }, - "jsonapi": Object { - "meta": Object { - "links": Object { - "self": Object { + "jsonapi": { + "meta": { + "links": { + "self": { "href": "http://jsonapi.org/format/1.0/", }, }, }, "version": "1.0", }, - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f", }, }, } `; -exports[`getResourceByPath it fetches a resource by path 1`] = ` -Object { +exports[`getResourceByPath() fetches a resource by path 1`] = ` +{ "changed": "2022-03-25T08:02:17+00:00", "content_translation_outdated": false, "content_translation_source": "und", @@ -1909,7 +1290,7 @@ Object { "drupal_internal__vid": 37, "field_cooking_time": 30, "field_difficulty": "medium", - "field_ingredients": Array [ + "field_ingredients": [ "For the pastry:", "280g plain flour", "140g butter", @@ -1924,25 +1305,25 @@ Object { "200g sun dried tomatoes", "100g feta", ], - "field_media_image": Object { + "field_media_image": { "id": "bbfe9d97-2da2-432b-a22c-0396c08e06ca", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 1, }, "type": "media--image", }, "field_number_of_servings": 8, "field_preparation_time": 40, - "field_recipe_category": Array [ - Object { + "field_recipe_category": [ + { "id": "a6c02fe4-67bf-462c-90cb-32281a07efe4", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 31, }, "type": "taxonomy_term--recipe_category", }, ], - "field_recipe_instruction": Object { + "field_recipe_instruction": { "format": "basic_html", "processed": "
  1. Preheat the oven to 400°F/200°C. Starting with the pastry; rub the flour and butter together in a bowl until crumbling like breadcrumbs. Add water, a little at a time, until it forms a dough.
  2. Roll out the pastry on a floured board and gently spread over your tin. Place in the fridge for 20 minutes before blind baking for a further 10.
  3. @@ -1959,24 +1340,24 @@ Object {
", }, - "field_summary": Object { + "field_summary": { "format": "basic_html", "processed": "

An Italian inspired quiche with sun dried tomatoes and courgette. A perfect light meal for a summer's day.

", "value": "

An Italian inspired quiche with sun dried tomatoes and courgette. A perfect light meal for a summer's day.

", }, - "field_tags": Array [ - Object { + "field_tags": [ + { "id": "46258827-cfad-4813-99dc-287c4cb41117", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 22, }, "type": "taxonomy_term--tags", }, - Object { + { "id": "f32a4d84-0568-4bfd-8be3-8217d36efb6d", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 13, }, "type": "taxonomy_term--tags", @@ -1984,26 +1365,26 @@ Object { ], "id": "71e04ead-4cc7-416c-b9ca-60b635fdc50f", "langcode": "en", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f?resourceVersion=id%3A37", }, }, "moderation_state": "published", - "node_type": Object { + "node_type": { "id": "9b70a287-cade-454f-be8b-dea7b9a37c7a", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": "recipe", }, "type": "node_type--node_type", }, - "path": Object { + "path": { "alias": "/recipes/deep-mediterranean-quiche", "langcode": "en", "pid": 67, }, "promote": true, - "relationshipNames": Array [ + "relationshipNames": [ "node_type", "revision_uid", "uid", @@ -2014,9 +1395,9 @@ Object { "revision_log": null, "revision_timestamp": "2022-03-25T08:02:17+00:00", "revision_translation_affected": true, - "revision_uid": Object { + "revision_uid": { "id": "365cc7b5-ddc4-4b3b-939e-1494400aab4a", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 1, }, "type": "user--user", @@ -2025,9 +1406,9 @@ Object { "sticky": false, "title": "Deep mediterranean quiche - edited", "type": "node--recipe", - "uid": Object { + "uid": { "id": "9e4944e8-dd77-407a-8610-83e823b48b56", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 4, }, "type": "user--user", @@ -2035,12 +1416,12 @@ Object { } `; -exports[`getResourceByPath it fetches a resource by path using locale 1`] = ` -Object { +exports[`getResourceByPath() fetches a resource by path using locale 1`] = ` +{ "field_cooking_time": 30, "id": "71e04ead-4cc7-416c-b9ca-60b635fdc50f", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/es/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f?resourceVersion=id%3A37", }, }, @@ -2049,12 +1430,12 @@ Object { } `; -exports[`getResourceByPath it fetches a resource by path with params 1`] = ` -Object { +exports[`getResourceByPath() fetches a resource by path with params 1`] = ` +{ "field_cooking_time": 30, "id": "71e04ead-4cc7-416c-b9ca-60b635fdc50f", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f?resourceVersion=id%3A37", }, }, @@ -2063,10 +1444,10 @@ Object { } `; -exports[`getResourceByPath it fetches raw data 1`] = ` -Object { - "data": Object { - "attributes": Object { +exports[`getResourceByPath() fetches raw data 1`] = ` +{ + "data": { + "attributes": { "changed": "2022-03-25T08:02:17+00:00", "content_translation_outdated": false, "content_translation_source": "und", @@ -2076,7 +1457,7 @@ Object { "drupal_internal__vid": 37, "field_cooking_time": 30, "field_difficulty": "medium", - "field_ingredients": Array [ + "field_ingredients": [ "For the pastry:", "280g plain flour", "140g butter", @@ -2093,7 +1474,7 @@ Object { ], "field_number_of_servings": 8, "field_preparation_time": 40, - "field_recipe_instruction": Object { + "field_recipe_instruction": { "format": "basic_html", "processed": "
  1. Preheat the oven to 400°F/200°C. Starting with the pastry; rub the flour and butter together in a bowl until crumbling like breadcrumbs. Add water, a little at a time, until it forms a dough.
  2. Roll out the pastry on a floured board and gently spread over your tin. Place in the fridge for 20 minutes before blind baking for a further 10.
  3. @@ -2110,7 +1491,7 @@ Object {
", }, - "field_summary": Object { + "field_summary": { "format": "basic_html", "processed": "

An Italian inspired quiche with sun dried tomatoes and courgette. A perfect light meal for a summer's day.

", @@ -2119,7 +1500,7 @@ Object { }, "langcode": "en", "moderation_state": "published", - "path": Object { + "path": { "alias": "/recipes/deep-mediterranean-quiche", "langcode": "en", "pid": 67, @@ -2131,451 +1512,224 @@ Object { "status": true, "sticky": false, "title": "Deep mediterranean quiche - edited", - }, - "id": "71e04ead-4cc7-416c-b9ca-60b635fdc50f", - "links": Object { - "self": Object { - "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f?resourceVersion=id%3A37", - }, - }, - "relationships": Object { - "field_media_image": Object { - "data": Object { - "id": "bbfe9d97-2da2-432b-a22c-0396c08e06ca", - "meta": Object { - "drupal_internal__target_id": 1, - }, - "type": "media--image", - }, - "links": Object { - "related": Object { - "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f/field_media_image?resourceVersion=id%3A37", - }, - "self": Object { - "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f/relationships/field_media_image?resourceVersion=id%3A37", - }, - }, - }, - "field_recipe_category": Object { - "data": Array [ - Object { - "id": "a6c02fe4-67bf-462c-90cb-32281a07efe4", - "meta": Object { - "drupal_internal__target_id": 31, - }, - "type": "taxonomy_term--recipe_category", - }, - ], - "links": Object { - "related": Object { - "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f/field_recipe_category?resourceVersion=id%3A37", - }, - "self": Object { - "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f/relationships/field_recipe_category?resourceVersion=id%3A37", - }, - }, - }, - "field_tags": Object { - "data": Array [ - Object { - "id": "46258827-cfad-4813-99dc-287c4cb41117", - "meta": Object { - "drupal_internal__target_id": 22, - }, - "type": "taxonomy_term--tags", - }, - Object { - "id": "f32a4d84-0568-4bfd-8be3-8217d36efb6d", - "meta": Object { - "drupal_internal__target_id": 13, - }, - "type": "taxonomy_term--tags", - }, - ], - "links": Object { - "related": Object { - "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f/field_tags?resourceVersion=id%3A37", - }, - "self": Object { - "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f/relationships/field_tags?resourceVersion=id%3A37", - }, - }, - }, - "node_type": Object { - "data": Object { - "id": "9b70a287-cade-454f-be8b-dea7b9a37c7a", - "meta": Object { - "drupal_internal__target_id": "recipe", - }, - "type": "node_type--node_type", - }, - "links": Object { - "related": Object { - "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f/node_type?resourceVersion=id%3A37", - }, - "self": Object { - "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f/relationships/node_type?resourceVersion=id%3A37", - }, - }, - }, - "revision_uid": Object { - "data": Object { - "id": "365cc7b5-ddc4-4b3b-939e-1494400aab4a", - "meta": Object { - "drupal_internal__target_id": 1, - }, - "type": "user--user", - }, - "links": Object { - "related": Object { - "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f/revision_uid?resourceVersion=id%3A37", - }, - "self": Object { - "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f/relationships/revision_uid?resourceVersion=id%3A37", - }, - }, - }, - "uid": Object { - "data": Object { - "id": "9e4944e8-dd77-407a-8610-83e823b48b56", - "meta": Object { - "drupal_internal__target_id": 4, - }, - "type": "user--user", - }, - "links": Object { - "related": Object { - "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f/uid?resourceVersion=id%3A37", - }, - "self": Object { - "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f/relationships/uid?resourceVersion=id%3A37", - }, - }, - }, - }, - "type": "node--recipe", - }, - "jsonapi": Object { - "meta": Object { - "links": Object { - "self": Object { - "href": "http://jsonapi.org/format/1.0/", - }, - }, - }, - "version": "1.0", - }, - "links": Object { - "self": Object { - "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f", - }, - }, -} -`; - -exports[`getResourceCollection it fetches a resource collection 1`] = ` -Array [ - Object { - "id": "52837ad0-f218-46bd-a106-5710336b7053", - "links": Object { - "self": Object { - "href": "https://tests.next-drupal.org/en/jsonapi/node/article/52837ad0-f218-46bd-a106-5710336b7053?resourceVersion=id%3A20", - }, - }, - "title": "Give it a go and grow your own herbs", - "type": "node--article", - }, - Object { - "id": "3d5a7bca-5b4a-49ee-87d2-cbe313562903", - "links": Object { - "self": Object { - "href": "https://tests.next-drupal.org/en/jsonapi/node/article/3d5a7bca-5b4a-49ee-87d2-cbe313562903?resourceVersion=id%3A22", - }, - }, - "title": "Dairy-free and delicious milk chocolate", - "type": "node--article", - }, - Object { - "id": "a1ef61c9-ed15-4b6d-bba2-bf6e5141f961", - "links": Object { - "self": Object { - "href": "https://tests.next-drupal.org/en/jsonapi/node/article/a1ef61c9-ed15-4b6d-bba2-bf6e5141f961?resourceVersion=id%3A24", - }, - }, - "title": "The real deal for supermarket savvy shopping", - "type": "node--article", - }, - Object { - "id": "ac0b8b56-db8d-4322-9b1e-224f22083f0d", - "links": Object { - "self": Object { - "href": "https://tests.next-drupal.org/en/jsonapi/node/article/ac0b8b56-db8d-4322-9b1e-224f22083f0d?resourceVersion=id%3A26", - }, - }, - "title": "The Umami guide to our favorite mushrooms", - "type": "node--article", - }, - Object { - "id": "22874ecc-0443-441b-a3c9-3aa94d85b800", - "links": Object { - "self": Object { - "href": "https://tests.next-drupal.org/en/jsonapi/node/article/22874ecc-0443-441b-a3c9-3aa94d85b800?resourceVersion=id%3A28", - }, - }, - "title": "Let's hear it for carrots", - "type": "node--article", - }, - Object { - "id": "ec51b1de-f51e-4761-b061-aa2624e58b4a", - "links": Object { - "self": Object { - "href": "https://tests.next-drupal.org/en/jsonapi/node/article/ec51b1de-f51e-4761-b061-aa2624e58b4a?resourceVersion=id%3A30", - }, - }, - "title": "Baking mishaps - our troubleshooting tips", - "type": "node--article", - }, - Object { - "id": "d5b9ef80-c0aa-45ca-88e7-79c28abe5d50", - "links": Object { - "self": Object { - "href": "https://tests.next-drupal.org/en/jsonapi/node/article/d5b9ef80-c0aa-45ca-88e7-79c28abe5d50?resourceVersion=id%3A32", - }, - }, - "title": "Skip the spirits with delicious mocktails", - "type": "node--article", - }, - Object { - "id": "6c7c249f-cd1a-41d5-944b-b3bfce68b325", - "links": Object { - "self": Object { - "href": "https://tests.next-drupal.org/en/jsonapi/node/article/6c7c249f-cd1a-41d5-944b-b3bfce68b325?resourceVersion=id%3A34", - }, - }, - "title": "Give your oatmeal the ultimate makeover", - "type": "node--article", - }, -] -`; - -exports[`getResourceCollection it fetches a resource collection using locale 1`] = ` -Array [ - Object { - "id": "52837ad0-f218-46bd-a106-5710336b7053", - "langcode": "es", - "links": Object { - "self": Object { - "href": "https://tests.next-drupal.org/es/jsonapi/node/article/52837ad0-f218-46bd-a106-5710336b7053?resourceVersion=id%3A20", - }, - }, - "title": "Prueba y cultiva tus propias hierbas", - "type": "node--article", - }, - Object { - "id": "3d5a7bca-5b4a-49ee-87d2-cbe313562903", - "langcode": "es", - "links": Object { - "self": Object { - "href": "https://tests.next-drupal.org/es/jsonapi/node/article/3d5a7bca-5b4a-49ee-87d2-cbe313562903?resourceVersion=id%3A22", - }, - }, - "title": "Delicioso chocolate sin lactosa", - "type": "node--article", - }, - Object { - "id": "a1ef61c9-ed15-4b6d-bba2-bf6e5141f961", - "langcode": "es", - "links": Object { - "self": Object { - "href": "https://tests.next-drupal.org/es/jsonapi/node/article/a1ef61c9-ed15-4b6d-bba2-bf6e5141f961?resourceVersion=id%3A24", - }, - }, - "title": "El verdadero negocio para comprar en el supermercado", - "type": "node--article", - }, - Object { - "id": "ac0b8b56-db8d-4322-9b1e-224f22083f0d", - "langcode": "es", - "links": Object { - "self": Object { - "href": "https://tests.next-drupal.org/es/jsonapi/node/article/ac0b8b56-db8d-4322-9b1e-224f22083f0d?resourceVersion=id%3A26", - }, - }, - "title": "Guía Umami de nuestras setas preferidas", - "type": "node--article", - }, - Object { - "id": "22874ecc-0443-441b-a3c9-3aa94d85b800", - "langcode": "es", - "links": Object { - "self": Object { - "href": "https://tests.next-drupal.org/es/jsonapi/node/article/22874ecc-0443-441b-a3c9-3aa94d85b800?resourceVersion=id%3A28", - }, - }, - "title": "Un aplauso para las zanahorias", - "type": "node--article", - }, - Object { - "id": "ec51b1de-f51e-4761-b061-aa2624e58b4a", - "langcode": "es", - "links": Object { - "self": Object { - "href": "https://tests.next-drupal.org/es/jsonapi/node/article/ec51b1de-f51e-4761-b061-aa2624e58b4a?resourceVersion=id%3A30", - }, - }, - "title": "Percances al hornear - nuestros consejos para solucionar los problemas", - "type": "node--article", - }, - Object { - "id": "d5b9ef80-c0aa-45ca-88e7-79c28abe5d50", - "langcode": "es", - "links": Object { - "self": Object { - "href": "https://tests.next-drupal.org/es/jsonapi/node/article/d5b9ef80-c0aa-45ca-88e7-79c28abe5d50?resourceVersion=id%3A32", - }, - }, - "title": "Salta los espíritus con deliciosos cócteles sin alcohol", - "type": "node--article", - }, - Object { - "id": "6c7c249f-cd1a-41d5-944b-b3bfce68b325", - "langcode": "es", - "links": Object { - "self": Object { - "href": "https://tests.next-drupal.org/es/jsonapi/node/article/6c7c249f-cd1a-41d5-944b-b3bfce68b325?resourceVersion=id%3A34", + }, + "id": "71e04ead-4cc7-416c-b9ca-60b635fdc50f", + "links": { + "self": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f?resourceVersion=id%3A37", }, }, - "title": "Dale a tu avena el cambio de imagen definitivo", - "type": "node--article", - }, -] -`; - -exports[`getResourceCollection it fetches raw data 1`] = ` -Object { - "data": Array [ - Object { - "attributes": Object { - "title": "Vegan chocolate and nut brownies", + "relationships": { + "field_media_image": { + "data": { + "id": "bbfe9d97-2da2-432b-a22c-0396c08e06ca", + "meta": { + "drupal_internal__target_id": 1, + }, + "type": "media--image", + }, + "links": { + "related": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f/field_media_image?resourceVersion=id%3A37", + }, + "self": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f/relationships/field_media_image?resourceVersion=id%3A37", + }, + }, }, - "id": "7862d283-ece2-4ae1-8bef-865259f72315", - "links": Object { - "self": Object { - "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/7862d283-ece2-4ae1-8bef-865259f72315?resourceVersion=id%3A4", + "field_recipe_category": { + "data": [ + { + "id": "a6c02fe4-67bf-462c-90cb-32281a07efe4", + "meta": { + "drupal_internal__target_id": 31, + }, + "type": "taxonomy_term--recipe_category", + }, + ], + "links": { + "related": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f/field_recipe_category?resourceVersion=id%3A37", + }, + "self": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f/relationships/field_recipe_category?resourceVersion=id%3A37", + }, }, }, - "type": "node--recipe", - }, - Object { - "attributes": Object { - "title": "Super easy vegetarian pasta bake", + "field_tags": { + "data": [ + { + "id": "46258827-cfad-4813-99dc-287c4cb41117", + "meta": { + "drupal_internal__target_id": 22, + }, + "type": "taxonomy_term--tags", + }, + { + "id": "f32a4d84-0568-4bfd-8be3-8217d36efb6d", + "meta": { + "drupal_internal__target_id": 13, + }, + "type": "taxonomy_term--tags", + }, + ], + "links": { + "related": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f/field_tags?resourceVersion=id%3A37", + }, + "self": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f/relationships/field_tags?resourceVersion=id%3A37", + }, + }, }, - "id": "8d4b237f-f6fe-4bb1-95ef-f9e3b3f9d6b7", - "links": Object { - "self": Object { - "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/8d4b237f-f6fe-4bb1-95ef-f9e3b3f9d6b7?resourceVersion=id%3A6", + "node_type": { + "data": { + "id": "9b70a287-cade-454f-be8b-dea7b9a37c7a", + "meta": { + "drupal_internal__target_id": "recipe", + }, + "type": "node_type--node_type", + }, + "links": { + "related": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f/node_type?resourceVersion=id%3A37", + }, + "self": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f/relationships/node_type?resourceVersion=id%3A37", + }, + }, + }, + "revision_uid": { + "data": { + "id": "365cc7b5-ddc4-4b3b-939e-1494400aab4a", + "meta": { + "drupal_internal__target_id": 1, + }, + "type": "user--user", + }, + "links": { + "related": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f/revision_uid?resourceVersion=id%3A37", + }, + "self": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f/relationships/revision_uid?resourceVersion=id%3A37", + }, + }, + }, + "uid": { + "data": { + "id": "9e4944e8-dd77-407a-8610-83e823b48b56", + "meta": { + "drupal_internal__target_id": 4, + }, + "type": "user--user", + }, + "links": { + "related": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f/uid?resourceVersion=id%3A37", + }, + "self": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f/relationships/uid?resourceVersion=id%3A37", + }, }, }, - "type": "node--recipe", }, - ], - "jsonapi": Object { - "meta": Object { - "links": Object { - "self": Object { + "type": "node--recipe", + }, + "jsonapi": { + "meta": { + "links": { + "self": { "href": "http://jsonapi.org/format/1.0/", }, }, }, "version": "1.0", }, - "links": Object { - "next": Object { - "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe?fields%5Bnode--recipe%5D=title&page%5Boffset%5D=2&page%5Blimit%5D=2", - }, - "self": Object { - "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe?fields%5Bnode--recipe%5D=title&page%5Blimit%5D=2", + "links": { + "self": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f", }, }, } `; -exports[`getResourceCollectionFromContext it fetches a resource collection 1`] = ` -Array [ - Object { +exports[`getResourceCollection() fetches a resource collection 1`] = ` +[ + { "id": "52837ad0-f218-46bd-a106-5710336b7053", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/article/52837ad0-f218-46bd-a106-5710336b7053?resourceVersion=id%3A20", }, }, "title": "Give it a go and grow your own herbs", "type": "node--article", }, - Object { + { "id": "3d5a7bca-5b4a-49ee-87d2-cbe313562903", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/article/3d5a7bca-5b4a-49ee-87d2-cbe313562903?resourceVersion=id%3A22", }, }, "title": "Dairy-free and delicious milk chocolate", "type": "node--article", }, - Object { + { "id": "a1ef61c9-ed15-4b6d-bba2-bf6e5141f961", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/article/a1ef61c9-ed15-4b6d-bba2-bf6e5141f961?resourceVersion=id%3A24", }, }, "title": "The real deal for supermarket savvy shopping", "type": "node--article", }, - Object { + { "id": "ac0b8b56-db8d-4322-9b1e-224f22083f0d", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/article/ac0b8b56-db8d-4322-9b1e-224f22083f0d?resourceVersion=id%3A26", }, }, "title": "The Umami guide to our favorite mushrooms", "type": "node--article", }, - Object { + { "id": "22874ecc-0443-441b-a3c9-3aa94d85b800", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/article/22874ecc-0443-441b-a3c9-3aa94d85b800?resourceVersion=id%3A28", }, }, "title": "Let's hear it for carrots", "type": "node--article", }, - Object { + { "id": "ec51b1de-f51e-4761-b061-aa2624e58b4a", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/article/ec51b1de-f51e-4761-b061-aa2624e58b4a?resourceVersion=id%3A30", }, }, "title": "Baking mishaps - our troubleshooting tips", "type": "node--article", }, - Object { + { "id": "d5b9ef80-c0aa-45ca-88e7-79c28abe5d50", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/article/d5b9ef80-c0aa-45ca-88e7-79c28abe5d50?resourceVersion=id%3A32", }, }, "title": "Skip the spirits with delicious mocktails", "type": "node--article", }, - Object { + { "id": "6c7c249f-cd1a-41d5-944b-b3bfce68b325", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/article/6c7c249f-cd1a-41d5-944b-b3bfce68b325?resourceVersion=id%3A34", }, }, @@ -2585,90 +1739,90 @@ Array [ ] `; -exports[`getResourceCollectionFromContext it fetches a resource collection using locale 1`] = ` -Array [ - Object { +exports[`getResourceCollection() fetches a resource collection using locale 1`] = ` +[ + { "id": "52837ad0-f218-46bd-a106-5710336b7053", "langcode": "es", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/es/jsonapi/node/article/52837ad0-f218-46bd-a106-5710336b7053?resourceVersion=id%3A20", }, }, "title": "Prueba y cultiva tus propias hierbas", "type": "node--article", }, - Object { + { "id": "3d5a7bca-5b4a-49ee-87d2-cbe313562903", "langcode": "es", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/es/jsonapi/node/article/3d5a7bca-5b4a-49ee-87d2-cbe313562903?resourceVersion=id%3A22", }, }, "title": "Delicioso chocolate sin lactosa", "type": "node--article", }, - Object { + { "id": "a1ef61c9-ed15-4b6d-bba2-bf6e5141f961", "langcode": "es", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/es/jsonapi/node/article/a1ef61c9-ed15-4b6d-bba2-bf6e5141f961?resourceVersion=id%3A24", }, }, "title": "El verdadero negocio para comprar en el supermercado", "type": "node--article", }, - Object { + { "id": "ac0b8b56-db8d-4322-9b1e-224f22083f0d", "langcode": "es", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/es/jsonapi/node/article/ac0b8b56-db8d-4322-9b1e-224f22083f0d?resourceVersion=id%3A26", }, }, "title": "Guía Umami de nuestras setas preferidas", "type": "node--article", }, - Object { + { "id": "22874ecc-0443-441b-a3c9-3aa94d85b800", "langcode": "es", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/es/jsonapi/node/article/22874ecc-0443-441b-a3c9-3aa94d85b800?resourceVersion=id%3A28", }, }, "title": "Un aplauso para las zanahorias", "type": "node--article", }, - Object { + { "id": "ec51b1de-f51e-4761-b061-aa2624e58b4a", "langcode": "es", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/es/jsonapi/node/article/ec51b1de-f51e-4761-b061-aa2624e58b4a?resourceVersion=id%3A30", }, }, "title": "Percances al hornear - nuestros consejos para solucionar los problemas", "type": "node--article", }, - Object { + { "id": "d5b9ef80-c0aa-45ca-88e7-79c28abe5d50", "langcode": "es", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/es/jsonapi/node/article/d5b9ef80-c0aa-45ca-88e7-79c28abe5d50?resourceVersion=id%3A32", }, }, "title": "Salta los espíritus con deliciosos cócteles sin alcohol", "type": "node--article", }, - Object { + { "id": "6c7c249f-cd1a-41d5-944b-b3bfce68b325", "langcode": "es", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/es/jsonapi/node/article/6c7c249f-cd1a-41d5-944b-b3bfce68b325?resourceVersion=id%3A34", }, }, @@ -2678,356 +1832,141 @@ Array [ ] `; -exports[`getResourceCollectionFromContext it fetches raw data 1`] = ` -Object { - "data": Array [ - Object { - "attributes": Object { +exports[`getResourceCollection() fetches raw data 1`] = ` +{ + "data": [ + { + "attributes": { "title": "Vegan chocolate and nut brownies", }, "id": "7862d283-ece2-4ae1-8bef-865259f72315", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/7862d283-ece2-4ae1-8bef-865259f72315?resourceVersion=id%3A4", }, }, "type": "node--recipe", }, - Object { - "attributes": Object { + { + "attributes": { "title": "Super easy vegetarian pasta bake", }, "id": "8d4b237f-f6fe-4bb1-95ef-f9e3b3f9d6b7", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/8d4b237f-f6fe-4bb1-95ef-f9e3b3f9d6b7?resourceVersion=id%3A6", }, }, "type": "node--recipe", }, ], - "jsonapi": Object { - "meta": Object { - "links": Object { - "self": Object { + "jsonapi": { + "meta": { + "links": { + "self": { "href": "http://jsonapi.org/format/1.0/", }, }, }, "version": "1.0", }, - "links": Object { - "next": Object { + "links": { + "next": { "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe?fields%5Bnode--recipe%5D=title&page%5Boffset%5D=2&page%5Blimit%5D=2", }, - "self": Object { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe?fields%5Bnode--recipe%5D=title&page%5Blimit%5D=2", }, }, } `; -exports[`getResourceFromContext it accepts a translated path 1`] = ` -Object { - "id": "71e04ead-4cc7-416c-b9ca-60b635fdc50f", - "links": Object { - "self": Object { - "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f?resourceVersion=id%3A37", - }, - }, - "path": Object { - "alias": "/recipes/deep-mediterranean-quiche", - "langcode": "en", - "pid": 67, - }, - "status": true, - "title": "Deep mediterranean quiche - edited", - "type": "node--recipe", -} -`; - -exports[`getResourceFromContext it fetches a resource from context 1`] = ` -Object { - "changed": "2022-03-25T08:02:17+00:00", - "content_translation_outdated": false, - "content_translation_source": "und", - "created": "2022-03-21T10:52:42+00:00", - "default_langcode": true, - "drupal_internal__nid": 1, - "drupal_internal__vid": 37, - "field_cooking_time": 30, - "field_difficulty": "medium", - "field_ingredients": Array [ - "For the pastry:", - "280g plain flour", - "140g butter", - "Cold water", - "For the filling:", - "1 onion", - "2 garlic cloves", - "Half a courgette", - "450ml soya milk", - "500g grated parmesan", - "2 eggs", - "200g sun dried tomatoes", - "100g feta", - ], - "field_media_image": Object { - "id": "bbfe9d97-2da2-432b-a22c-0396c08e06ca", - "resourceIdObjMeta": Object { - "drupal_internal__target_id": 1, - }, - "type": "media--image", - }, - "field_number_of_servings": 8, - "field_preparation_time": 40, - "field_recipe_category": Array [ - Object { - "id": "a6c02fe4-67bf-462c-90cb-32281a07efe4", - "resourceIdObjMeta": Object { - "drupal_internal__target_id": 31, - }, - "type": "taxonomy_term--recipe_category", - }, - ], - "field_recipe_instruction": Object { - "format": "basic_html", - "processed": "
  1. Preheat the oven to 400°F/200°C. Starting with the pastry; rub the flour and butter together in a bowl until crumbling like breadcrumbs. Add water, a little at a time, until it forms a dough.
  2. -
  3. Roll out the pastry on a floured board and gently spread over your tin. Place in the fridge for 20 minutes before blind baking for a further 10.
  4. -
  5. Whilst the pastry is cooling, chop and gently cook the onions, garlic and courgette.
  6. -
  7. In a large bowl, add the soya milk, half the parmesan, and the eggs. Gently mix.
  8. -
  9. Once the pastry is cooked, spread the onions, garlic and sun dried tomatoes over the base and pour the eggs mix over. Sprinkle the remaining parmesan and careful lay the feta over the top. Bake for 30 minutes or until golden brown.
  10. -
", - "value": "
    -
  1. Preheat the oven to 400°F/200°C. Starting with the pastry; rub the flour and butter together in a bowl until crumbling like breadcrumbs. Add water, a little at a time, until it forms a dough.
  2. -
  3. Roll out the pastry on a floured board and gently spread over your tin. Place in the fridge for 20 minutes before blind baking for a further 10.
  4. -
  5. Whilst the pastry is cooling, chop and gently cook the onions, garlic and courgette.
  6. -
  7. In a large bowl, add the soya milk, half the parmesan, and the eggs. Gently mix.
  8. -
  9. Once the pastry is cooked, spread the onions, garlic and sun dried tomatoes over the base and pour the eggs mix over. Sprinkle the remaining parmesan and careful lay the feta over the top. Bake for 30 minutes or until golden brown.
  10. -
-", - }, - "field_summary": Object { - "format": "basic_html", - "processed": "

An Italian inspired quiche with sun dried tomatoes and courgette. A perfect light meal for a summer's day.

-", - "value": "

An Italian inspired quiche with sun dried tomatoes and courgette. A perfect light meal for a summer's day.

-", - }, - "field_tags": Array [ - Object { - "id": "46258827-cfad-4813-99dc-287c4cb41117", - "resourceIdObjMeta": Object { - "drupal_internal__target_id": 22, - }, - "type": "taxonomy_term--tags", - }, - Object { - "id": "f32a4d84-0568-4bfd-8be3-8217d36efb6d", - "resourceIdObjMeta": Object { - "drupal_internal__target_id": 13, - }, - "type": "taxonomy_term--tags", - }, - ], - "id": "71e04ead-4cc7-416c-b9ca-60b635fdc50f", - "langcode": "en", - "links": Object { - "self": Object { - "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f?resourceVersion=id%3A37", - }, - }, - "moderation_state": "published", - "node_type": Object { - "id": "9b70a287-cade-454f-be8b-dea7b9a37c7a", - "resourceIdObjMeta": Object { - "drupal_internal__target_id": "recipe", - }, - "type": "node_type--node_type", - }, - "path": Object { - "alias": "/recipes/deep-mediterranean-quiche", - "langcode": "en", - "pid": 67, - }, - "promote": true, - "relationshipNames": Array [ - "node_type", - "revision_uid", - "uid", - "field_media_image", - "field_recipe_category", - "field_tags", - ], - "revision_log": null, - "revision_timestamp": "2022-03-25T08:02:17+00:00", - "revision_translation_affected": true, - "revision_uid": Object { - "id": "365cc7b5-ddc4-4b3b-939e-1494400aab4a", - "resourceIdObjMeta": Object { - "drupal_internal__target_id": 1, - }, - "type": "user--user", - }, - "status": true, - "sticky": false, - "title": "Deep mediterranean quiche - edited", - "type": "node--recipe", - "uid": Object { - "id": "9e4944e8-dd77-407a-8610-83e823b48b56", - "resourceIdObjMeta": Object { - "drupal_internal__target_id": 4, - }, - "type": "user--user", - }, -} -`; - -exports[`getResourceFromContext it fetches a resource from context using locale 1`] = ` -Object { - "field_cooking_time": 30, - "id": "71e04ead-4cc7-416c-b9ca-60b635fdc50f", - "links": Object { - "self": Object { - "href": "https://tests.next-drupal.org/es/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f?resourceVersion=id%3A37", - }, - }, - "title": "Quiche mediterráneo profundo", - "type": "node--recipe", -} -`; - -exports[`getResourceFromContext it fetches a resource from context with params 1`] = ` -Object { - "id": "71e04ead-4cc7-416c-b9ca-60b635fdc50f", - "links": Object { - "self": Object { - "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f?resourceVersion=id%3A37", - }, - }, - "title": "Deep mediterranean quiche - edited", - "type": "node--recipe", -} -`; - -exports[`getResourceFromContext it fetches raw data 1`] = ` -Object { - "data": Object { - "attributes": Object { - "title": "Deep mediterranean quiche - edited", - }, - "id": "71e04ead-4cc7-416c-b9ca-60b635fdc50f", - "links": Object { - "self": Object { - "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f?resourceVersion=id%3A37", - }, - }, - "type": "node--recipe", - }, - "jsonapi": Object { - "meta": Object { - "links": Object { - "self": Object { - "href": "http://jsonapi.org/format/1.0/", - }, - }, - }, - "version": "1.0", - }, - "links": Object { - "self": Object { - "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f?fields%5Bnode--recipe%5D=title&resourceVersion=rel%3Alatest-version", - }, - }, -} -`; - -exports[`getSearchIndex it fetches a search index 1`] = ` -Array [ - Object { +exports[`getSearchIndex() fetches a search index 1`] = ` +[ + { "id": "3873f7b4-790c-4f93-ac7a-b4ca71272128", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/3873f7b4-790c-4f93-ac7a-b4ca71272128?resourceVersion=id%3A18", }, }, "title": "Fiery chili sauce", "type": "node--recipe", }, - Object { + { "id": "f4fff2df-1a2a-4762-be23-6b7d5755eba1", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/f4fff2df-1a2a-4762-be23-6b7d5755eba1?resourceVersion=id%3A10", }, }, "title": "Victoria sponge cake", "type": "node--recipe", }, - Object { + { "id": "20b576d2-2343-4b94-bd46-445ecc526e48", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/20b576d2-2343-4b94-bd46-445ecc526e48?resourceVersion=id%3A16", }, }, "title": "Crema catalana", "type": "node--recipe", }, - Object { + { "id": "71e04ead-4cc7-416c-b9ca-60b635fdc50f", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f?resourceVersion=id%3A37", }, }, "title": "Deep mediterranean quiche - edited", "type": "node--recipe", }, - Object { + { "id": "8d4b237f-f6fe-4bb1-95ef-f9e3b3f9d6b7", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/8d4b237f-f6fe-4bb1-95ef-f9e3b3f9d6b7?resourceVersion=id%3A6", }, }, "title": "Super easy vegetarian pasta bake", "type": "node--recipe", }, - Object { + { "id": "84e09cbf-e33e-46bd-b40c-4dda4e00937a", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/84e09cbf-e33e-46bd-b40c-4dda4e00937a?resourceVersion=id%3A12", }, }, "title": "Gluten free pizza", "type": "node--recipe", }, - Object { + { "id": "194f2647-1fbb-42b1-9ea5-3a3eb0494e04", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/194f2647-1fbb-42b1-9ea5-3a3eb0494e04?resourceVersion=id%3A14", }, }, "title": "Thai green curry", "type": "node--recipe", }, - Object { + { "id": "7862d283-ece2-4ae1-8bef-865259f72315", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/7862d283-ece2-4ae1-8bef-865259f72315?resourceVersion=id%3A4", }, }, "title": "Vegan chocolate and nut brownies", "type": "node--recipe", }, - Object { + { "id": "0bf47bce-51c9-480e-9c24-cd0a457a4f9b", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/0bf47bce-51c9-480e-9c24-cd0a457a4f9b?resourceVersion=id%3A8", }, }, @@ -3037,110 +1976,110 @@ Array [ ] `; -exports[`getSearchIndex it fetches a search index with facets filters 1`] = ` -Object { - "data": Array [ - Object { - "attributes": Object { +exports[`getSearchIndex() fetches a search index with facets filters 1`] = ` +{ + "data": [ + { + "attributes": { "field_difficulty": "easy", "title": "Super easy vegetarian pasta bake", }, "id": "8d4b237f-f6fe-4bb1-95ef-f9e3b3f9d6b7", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/8d4b237f-f6fe-4bb1-95ef-f9e3b3f9d6b7?resourceVersion=id%3A6", }, }, "type": "node--recipe", }, - Object { - "attributes": Object { + { + "attributes": { "field_difficulty": "easy", "title": "Watercress soup", }, "id": "0bf47bce-51c9-480e-9c24-cd0a457a4f9b", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/0bf47bce-51c9-480e-9c24-cd0a457a4f9b?resourceVersion=id%3A8", }, }, "type": "node--recipe", }, - Object { - "attributes": Object { + { + "attributes": { "field_difficulty": "easy", "title": "Victoria sponge cake", }, "id": "f4fff2df-1a2a-4762-be23-6b7d5755eba1", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/f4fff2df-1a2a-4762-be23-6b7d5755eba1?resourceVersion=id%3A10", }, }, "type": "node--recipe", }, - Object { - "attributes": Object { + { + "attributes": { "field_difficulty": "easy", "title": "Fiery chili sauce", }, "id": "3873f7b4-790c-4f93-ac7a-b4ca71272128", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/3873f7b4-790c-4f93-ac7a-b4ca71272128?resourceVersion=id%3A18", }, }, "type": "node--recipe", }, ], - "jsonapi": Object { - "meta": Object { - "links": Object { - "self": Object { + "jsonapi": { + "meta": { + "links": { + "self": { "href": "http://jsonapi.org/format/1.0/", }, }, }, "version": "1.0", }, - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/jsonapi/index/recipes?fields%5Bnode--recipe%5D=title%2Cfield_difficulty&filter%5Bdifficulty%5D=easy", }, }, - "meta": Object { + "meta": { "count": 8, - "facets": Array [ - Object { - "#attached": Object { - "library": Array [ + "facets": [ + { + "#attached": { + "library": [ "facets/drupal.facets.link-widget", ], }, - "#attributes": Object { - "class": Array [ + "#attributes": { + "class": [ "facet-active", "js-facets-links", ], "data-drupal-facet-alias": "difficulty", "data-drupal-facet-id": "difficulty", }, - "#context": Object { + "#context": { "list_style": "links", }, - "#facet": Object { + "#facet": { "show_title": null, }, - "#items": Array [ - Object { - "#attributes": Object { + "#items": [ + { + "#attributes": { "data-drupal-facet-item-count": 10, "data-drupal-facet-item-id": "difficulty-medium", "data-drupal-facet-item-value": "medium", }, - "#title": Object { + "#title": { "#count": 10, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -3150,25 +2089,25 @@ Object { "#value": "medium", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - Object { - "#attributes": Object { - "class": Array [ + { + "#attributes": { + "class": [ "is-active", ], "data-drupal-facet-item-count": 8, "data-drupal-facet-item-id": "difficulty-easy", "data-drupal-facet-item-value": "easy", }, - "#title": Object { + "#title": { "#count": 8, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": true, @@ -3178,9 +2117,9 @@ Object { "#value": "easy", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, @@ -3188,36 +2127,36 @@ Object { ], "#theme": "facets_item_list__links__difficulty", }, - Object { - "#attached": Object { - "library": Array [ + { + "#attached": { + "library": [ "facets/drupal.facets.link-widget", ], }, - "#attributes": Object { - "class": Array [ + "#attributes": { + "class": [ "facet-inactive", "js-facets-links", ], "data-drupal-facet-alias": "recipe_category", "data-drupal-facet-id": "recipe_category", }, - "#context": Object { + "#context": { "list_style": "links", }, - "#facet": Object { + "#facet": { "show_title": null, }, - "#items": Array [ - Object { - "#attributes": Object { + "#items": [ + { + "#attributes": { "data-drupal-facet-item-count": 2, "data-drupal-facet-item-id": "recipe-category-29", "data-drupal-facet-item-value": "29", }, - "#title": Object { + "#title": { "#count": 2, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -3227,22 +2166,22 @@ Object { "#value": "29", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - Object { - "#attributes": Object { + { + "#attributes": { "data-drupal-facet-item-count": 2, "data-drupal-facet-item-id": "recipe-category-30", "data-drupal-facet-item-value": "30", }, - "#title": Object { + "#title": { "#count": 2, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -3252,22 +2191,22 @@ Object { "#value": "30", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - Object { - "#attributes": Object { + { + "#attributes": { "data-drupal-facet-item-count": 2, "data-drupal-facet-item-id": "recipe-category-31", "data-drupal-facet-item-value": "31", }, - "#title": Object { + "#title": { "#count": 2, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -3277,22 +2216,22 @@ Object { "#value": "31", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - Object { - "#attributes": Object { + { + "#attributes": { "data-drupal-facet-item-count": 2, "data-drupal-facet-item-id": "recipe-category-33", "data-drupal-facet-item-value": "33", }, - "#title": Object { + "#title": { "#count": 2, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -3302,9 +2241,9 @@ Object { "#value": "33", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, @@ -3312,36 +2251,36 @@ Object { ], "#theme": "facets_item_list__links__recipe_category", }, - Object { - "#attached": Object { - "library": Array [ + { + "#attached": { + "library": [ "facets/drupal.facets.link-widget", ], }, - "#attributes": Object { - "class": Array [ + "#attributes": { + "class": [ "facet-inactive", "js-facets-links", ], "data-drupal-facet-alias": "title", "data-drupal-facet-id": "title", }, - "#context": Object { + "#context": { "list_style": "links", }, - "#facet": Object { + "#facet": { "show_title": null, }, - "#items": Object { - "0": Object { - "#attributes": Object { + "#items": { + "0": { + "#attributes": { "data-drupal-facet-item-count": 2, "data-drupal-facet-item-id": "title-de", "data-drupal-facet-item-value": "de", }, - "#title": Object { + "#title": { "#count": 2, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -3351,22 +2290,22 @@ Object { "#value": "de", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - "1": Object { - "#attributes": Object { + "1": { + "#attributes": { "data-drupal-facet-item-count": 2, "data-drupal-facet-item-id": "title-pasta", "data-drupal-facet-item-value": "pasta", }, - "#title": Object { + "#title": { "#count": 2, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -3376,22 +2315,22 @@ Object { "#value": "pasta", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - "10": Object { - "#attributes": Object { + "10": { + "#attributes": { "data-drupal-facet-item-count": 1, "data-drupal-facet-item-id": "title-easy", "data-drupal-facet-item-value": "easy", }, - "#title": Object { + "#title": { "#count": 1, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -3401,22 +2340,22 @@ Object { "#value": "easy", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - "11": Object { - "#attributes": Object { + "11": { + "#attributes": { "data-drupal-facet-item-count": 1, "data-drupal-facet-item-id": "title-fiery", "data-drupal-facet-item-value": "fiery", }, - "#title": Object { + "#title": { "#count": 1, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -3426,22 +2365,22 @@ Object { "#value": "fiery", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - "12": Object { - "#attributes": Object { + "12": { + "#attributes": { "data-drupal-facet-item-count": 1, "data-drupal-facet-item-id": "title-fácil", "data-drupal-facet-item-value": "fácil", }, - "#title": Object { + "#title": { "#count": 1, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -3451,22 +2390,22 @@ Object { "#value": "fácil", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - "13": Object { - "#attributes": Object { + "13": { + "#attributes": { "data-drupal-facet-item-count": 1, "data-drupal-facet-item-id": "title-horno", "data-drupal-facet-item-value": "horno", }, - "#title": Object { + "#title": { "#count": 1, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -3476,22 +2415,22 @@ Object { "#value": "horno", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - "14": Object { - "#attributes": Object { + "14": { + "#attributes": { "data-drupal-facet-item-count": 1, "data-drupal-facet-item-id": "title-pastel", "data-drupal-facet-item-value": "pastel", }, - "#title": Object { + "#title": { "#count": 1, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -3501,22 +2440,22 @@ Object { "#value": "pastel", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - "15": Object { - "#attributes": Object { + "15": { + "#attributes": { "data-drupal-facet-item-count": 1, "data-drupal-facet-item-id": "title-salsa", "data-drupal-facet-item-value": "salsa", }, - "#title": Object { + "#title": { "#count": 1, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -3526,22 +2465,22 @@ Object { "#value": "salsa", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - "16": Object { - "#attributes": Object { + "16": { + "#attributes": { "data-drupal-facet-item-count": 1, "data-drupal-facet-item-id": "title-sauce", "data-drupal-facet-item-value": "sauce", }, - "#title": Object { + "#title": { "#count": 1, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -3551,22 +2490,22 @@ Object { "#value": "sauce", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - "17": Object { - "#attributes": Object { + "17": { + "#attributes": { "data-drupal-facet-item-count": 1, "data-drupal-facet-item-id": "title-sopa", "data-drupal-facet-item-value": "sopa", }, - "#title": Object { + "#title": { "#count": 1, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -3576,22 +2515,22 @@ Object { "#value": "sopa", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - "18": Object { - "#attributes": Object { + "18": { + "#attributes": { "data-drupal-facet-item-count": 1, "data-drupal-facet-item-id": "title-soup", "data-drupal-facet-item-value": "soup", }, - "#title": Object { + "#title": { "#count": 1, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -3601,22 +2540,22 @@ Object { "#value": "soup", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - "19": Object { - "#attributes": Object { + "19": { + "#attributes": { "data-drupal-facet-item-count": 1, "data-drupal-facet-item-id": "title-sponge", "data-drupal-facet-item-value": "sponge", }, - "#title": Object { + "#title": { "#count": 1, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -3626,22 +2565,22 @@ Object { "#value": "sponge", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - "2": Object { - "#attributes": Object { + "2": { + "#attributes": { "data-drupal-facet-item-count": 2, "data-drupal-facet-item-id": "title-victoria", "data-drupal-facet-item-value": "victoria", }, - "#title": Object { + "#title": { "#count": 2, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -3651,22 +2590,22 @@ Object { "#value": "victoria", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - "20": Object { - "#attributes": Object { + "20": { + "#attributes": { "data-drupal-facet-item-count": 1, "data-drupal-facet-item-id": "title-super", "data-drupal-facet-item-value": "super", }, - "#title": Object { + "#title": { "#count": 1, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -3676,22 +2615,22 @@ Object { "#value": "super", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - "21": Object { - "#attributes": Object { + "21": { + "#attributes": { "data-drupal-facet-item-count": 1, "data-drupal-facet-item-id": "title-súper", "data-drupal-facet-item-value": "súper", }, - "#title": Object { + "#title": { "#count": 1, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -3701,22 +2640,22 @@ Object { "#value": "súper", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - "22": Object { - "#attributes": Object { + "22": { + "#attributes": { "data-drupal-facet-item-count": 1, "data-drupal-facet-item-id": "title-vegetarian", "data-drupal-facet-item-value": "vegetarian", }, - "#title": Object { + "#title": { "#count": 1, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -3726,22 +2665,22 @@ Object { "#value": "vegetarian", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - "23": Object { - "#attributes": Object { + "23": { + "#attributes": { "data-drupal-facet-item-count": 1, "data-drupal-facet-item-id": "title-vegetariana", "data-drupal-facet-item-value": "vegetariana", }, - "#title": Object { + "#title": { "#count": 1, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -3751,22 +2690,22 @@ Object { "#value": "vegetariana", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - "24": Object { - "#attributes": Object { + "24": { + "#attributes": { "data-drupal-facet-item-count": 1, "data-drupal-facet-item-id": "title-watercress", "data-drupal-facet-item-value": "watercress", }, - "#title": Object { + "#title": { "#count": 1, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -3776,22 +2715,22 @@ Object { "#value": "watercress", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - "3": Object { - "#attributes": Object { + "3": { + "#attributes": { "data-drupal-facet-item-count": 1, "data-drupal-facet-item-id": "title-al", "data-drupal-facet-item-value": "al", }, - "#title": Object { + "#title": { "#count": 1, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -3801,22 +2740,22 @@ Object { "#value": "al", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - "4": Object { - "#attributes": Object { + "4": { + "#attributes": { "data-drupal-facet-item-count": 1, "data-drupal-facet-item-id": "title-ardiente", "data-drupal-facet-item-value": "ardiente", }, - "#title": Object { + "#title": { "#count": 1, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -3826,22 +2765,22 @@ Object { "#value": "ardiente", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - "5": Object { - "#attributes": Object { + "5": { + "#attributes": { "data-drupal-facet-item-count": 1, "data-drupal-facet-item-id": "title-bake", "data-drupal-facet-item-value": "bake", }, - "#title": Object { + "#title": { "#count": 1, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -3851,22 +2790,22 @@ Object { "#value": "bake", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - "6": Object { - "#attributes": Object { + "6": { + "#attributes": { "data-drupal-facet-item-count": 1, "data-drupal-facet-item-id": "title-berro", "data-drupal-facet-item-value": "berro", }, - "#title": Object { + "#title": { "#count": 1, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -3876,22 +2815,22 @@ Object { "#value": "berro", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - "7": Object { - "#attributes": Object { + "7": { + "#attributes": { "data-drupal-facet-item-count": 1, "data-drupal-facet-item-id": "title-cake", "data-drupal-facet-item-value": "cake", }, - "#title": Object { + "#title": { "#count": 1, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -3901,22 +2840,22 @@ Object { "#value": "cake", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - "8": Object { - "#attributes": Object { + "8": { + "#attributes": { "data-drupal-facet-item-count": 1, "data-drupal-facet-item-id": "title-chile", "data-drupal-facet-item-value": "chile", }, - "#title": Object { + "#title": { "#count": 1, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -3926,22 +2865,22 @@ Object { "#value": "chile", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - "9": Object { - "#attributes": Object { + "9": { + "#attributes": { "data-drupal-facet-item-count": 1, "data-drupal-facet-item-id": "title-chili", "data-drupal-facet-item-value": "chili", }, - "#title": Object { + "#title": { "#count": 1, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -3951,9 +2890,9 @@ Object { "#value": "chili", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, @@ -3966,92 +2905,92 @@ Object { } `; -exports[`getSearchIndex it fetches a search index with locale 1`] = ` -Array [ - Object { +exports[`getSearchIndex() fetches a search index with locale 1`] = ` +[ + { "id": "3873f7b4-790c-4f93-ac7a-b4ca71272128", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/es/jsonapi/node/recipe/3873f7b4-790c-4f93-ac7a-b4ca71272128?resourceVersion=id%3A18", }, }, "title": "Salsa de chile ardiente", "type": "node--recipe", }, - Object { + { "id": "f4fff2df-1a2a-4762-be23-6b7d5755eba1", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/es/jsonapi/node/recipe/f4fff2df-1a2a-4762-be23-6b7d5755eba1?resourceVersion=id%3A10", }, }, "title": "Pastel Victoria", "type": "node--recipe", }, - Object { + { "id": "20b576d2-2343-4b94-bd46-445ecc526e48", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/es/jsonapi/node/recipe/20b576d2-2343-4b94-bd46-445ecc526e48?resourceVersion=id%3A16", }, }, "title": "Crema catalana", "type": "node--recipe", }, - Object { + { "id": "71e04ead-4cc7-416c-b9ca-60b635fdc50f", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/es/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f?resourceVersion=id%3A37", }, }, "title": "Quiche mediterráneo profundo", "type": "node--recipe", }, - Object { + { "id": "8d4b237f-f6fe-4bb1-95ef-f9e3b3f9d6b7", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/es/jsonapi/node/recipe/8d4b237f-f6fe-4bb1-95ef-f9e3b3f9d6b7?resourceVersion=id%3A6", }, }, "title": "Pasta vegetariana al horno súper fácil", "type": "node--recipe", }, - Object { + { "id": "84e09cbf-e33e-46bd-b40c-4dda4e00937a", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/es/jsonapi/node/recipe/84e09cbf-e33e-46bd-b40c-4dda4e00937a?resourceVersion=id%3A12", }, }, "title": "Pizza sin gluten", "type": "node--recipe", }, - Object { + { "id": "194f2647-1fbb-42b1-9ea5-3a3eb0494e04", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/es/jsonapi/node/recipe/194f2647-1fbb-42b1-9ea5-3a3eb0494e04?resourceVersion=id%3A14", }, }, "title": "Curry verde tailandés", "type": "node--recipe", }, - Object { + { "id": "7862d283-ece2-4ae1-8bef-865259f72315", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/es/jsonapi/node/recipe/7862d283-ece2-4ae1-8bef-865259f72315?resourceVersion=id%3A4", }, }, "title": "Bizcochos veganos de chocolate y nueces", "type": "node--recipe", }, - Object { + { "id": "0bf47bce-51c9-480e-9c24-cd0a457a4f9b", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/es/jsonapi/node/recipe/0bf47bce-51c9-480e-9c24-cd0a457a4f9b?resourceVersion=id%3A8", }, }, @@ -4061,110 +3000,110 @@ Array [ ] `; -exports[`getSearchIndex it fetches raw data from search index 1`] = ` -Object { - "data": Array [ - Object { - "attributes": Object { +exports[`getSearchIndex() fetches raw data from search index 1`] = ` +{ + "data": [ + { + "attributes": { "field_difficulty": "easy", "title": "Super easy vegetarian pasta bake", }, "id": "8d4b237f-f6fe-4bb1-95ef-f9e3b3f9d6b7", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/8d4b237f-f6fe-4bb1-95ef-f9e3b3f9d6b7?resourceVersion=id%3A6", }, }, "type": "node--recipe", }, - Object { - "attributes": Object { + { + "attributes": { "field_difficulty": "easy", "title": "Watercress soup", }, "id": "0bf47bce-51c9-480e-9c24-cd0a457a4f9b", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/0bf47bce-51c9-480e-9c24-cd0a457a4f9b?resourceVersion=id%3A8", }, }, "type": "node--recipe", }, - Object { - "attributes": Object { + { + "attributes": { "field_difficulty": "easy", "title": "Victoria sponge cake", }, "id": "f4fff2df-1a2a-4762-be23-6b7d5755eba1", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/f4fff2df-1a2a-4762-be23-6b7d5755eba1?resourceVersion=id%3A10", }, }, "type": "node--recipe", }, - Object { - "attributes": Object { + { + "attributes": { "field_difficulty": "easy", "title": "Fiery chili sauce", }, "id": "3873f7b4-790c-4f93-ac7a-b4ca71272128", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/3873f7b4-790c-4f93-ac7a-b4ca71272128?resourceVersion=id%3A18", }, }, "type": "node--recipe", }, ], - "jsonapi": Object { - "meta": Object { - "links": Object { - "self": Object { + "jsonapi": { + "meta": { + "links": { + "self": { "href": "http://jsonapi.org/format/1.0/", }, }, }, "version": "1.0", }, - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/jsonapi/index/recipes?fields%5Bnode--recipe%5D=title%2Cfield_difficulty&filter%5Bdifficulty%5D=easy", }, }, - "meta": Object { + "meta": { "count": 8, - "facets": Array [ - Object { - "#attached": Object { - "library": Array [ + "facets": [ + { + "#attached": { + "library": [ "facets/drupal.facets.link-widget", ], }, - "#attributes": Object { - "class": Array [ + "#attributes": { + "class": [ "facet-active", "js-facets-links", ], "data-drupal-facet-alias": "difficulty", "data-drupal-facet-id": "difficulty", }, - "#context": Object { + "#context": { "list_style": "links", }, - "#facet": Object { + "#facet": { "show_title": null, }, - "#items": Array [ - Object { - "#attributes": Object { + "#items": [ + { + "#attributes": { "data-drupal-facet-item-count": 10, "data-drupal-facet-item-id": "difficulty-medium", "data-drupal-facet-item-value": "medium", }, - "#title": Object { + "#title": { "#count": 10, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -4174,25 +3113,25 @@ Object { "#value": "medium", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - Object { - "#attributes": Object { - "class": Array [ + { + "#attributes": { + "class": [ "is-active", ], "data-drupal-facet-item-count": 8, "data-drupal-facet-item-id": "difficulty-easy", "data-drupal-facet-item-value": "easy", }, - "#title": Object { + "#title": { "#count": 8, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": true, @@ -4202,9 +3141,9 @@ Object { "#value": "easy", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, @@ -4212,36 +3151,36 @@ Object { ], "#theme": "facets_item_list__links__difficulty", }, - Object { - "#attached": Object { - "library": Array [ + { + "#attached": { + "library": [ "facets/drupal.facets.link-widget", ], }, - "#attributes": Object { - "class": Array [ + "#attributes": { + "class": [ "facet-inactive", "js-facets-links", ], "data-drupal-facet-alias": "recipe_category", "data-drupal-facet-id": "recipe_category", }, - "#context": Object { + "#context": { "list_style": "links", }, - "#facet": Object { + "#facet": { "show_title": null, }, - "#items": Array [ - Object { - "#attributes": Object { + "#items": [ + { + "#attributes": { "data-drupal-facet-item-count": 2, "data-drupal-facet-item-id": "recipe-category-29", "data-drupal-facet-item-value": "29", }, - "#title": Object { + "#title": { "#count": 2, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -4251,22 +3190,22 @@ Object { "#value": "29", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - Object { - "#attributes": Object { + { + "#attributes": { "data-drupal-facet-item-count": 2, "data-drupal-facet-item-id": "recipe-category-30", "data-drupal-facet-item-value": "30", }, - "#title": Object { + "#title": { "#count": 2, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -4276,22 +3215,22 @@ Object { "#value": "30", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - Object { - "#attributes": Object { + { + "#attributes": { "data-drupal-facet-item-count": 2, "data-drupal-facet-item-id": "recipe-category-31", "data-drupal-facet-item-value": "31", }, - "#title": Object { + "#title": { "#count": 2, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -4301,22 +3240,22 @@ Object { "#value": "31", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - Object { - "#attributes": Object { + { + "#attributes": { "data-drupal-facet-item-count": 2, "data-drupal-facet-item-id": "recipe-category-33", "data-drupal-facet-item-value": "33", }, - "#title": Object { + "#title": { "#count": 2, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -4326,9 +3265,9 @@ Object { "#value": "33", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, @@ -4336,36 +3275,36 @@ Object { ], "#theme": "facets_item_list__links__recipe_category", }, - Object { - "#attached": Object { - "library": Array [ + { + "#attached": { + "library": [ "facets/drupal.facets.link-widget", ], }, - "#attributes": Object { - "class": Array [ + "#attributes": { + "class": [ "facet-inactive", "js-facets-links", ], "data-drupal-facet-alias": "title", "data-drupal-facet-id": "title", }, - "#context": Object { + "#context": { "list_style": "links", }, - "#facet": Object { + "#facet": { "show_title": null, }, - "#items": Object { - "0": Object { - "#attributes": Object { + "#items": { + "0": { + "#attributes": { "data-drupal-facet-item-count": 2, "data-drupal-facet-item-id": "title-de", "data-drupal-facet-item-value": "de", }, - "#title": Object { + "#title": { "#count": 2, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -4375,22 +3314,22 @@ Object { "#value": "de", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - "1": Object { - "#attributes": Object { + "1": { + "#attributes": { "data-drupal-facet-item-count": 2, "data-drupal-facet-item-id": "title-pasta", "data-drupal-facet-item-value": "pasta", }, - "#title": Object { + "#title": { "#count": 2, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -4400,22 +3339,22 @@ Object { "#value": "pasta", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - "10": Object { - "#attributes": Object { + "10": { + "#attributes": { "data-drupal-facet-item-count": 1, "data-drupal-facet-item-id": "title-easy", "data-drupal-facet-item-value": "easy", }, - "#title": Object { + "#title": { "#count": 1, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -4425,22 +3364,22 @@ Object { "#value": "easy", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - "11": Object { - "#attributes": Object { + "11": { + "#attributes": { "data-drupal-facet-item-count": 1, "data-drupal-facet-item-id": "title-fiery", "data-drupal-facet-item-value": "fiery", }, - "#title": Object { + "#title": { "#count": 1, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -4450,22 +3389,22 @@ Object { "#value": "fiery", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - "12": Object { - "#attributes": Object { + "12": { + "#attributes": { "data-drupal-facet-item-count": 1, "data-drupal-facet-item-id": "title-fácil", "data-drupal-facet-item-value": "fácil", }, - "#title": Object { + "#title": { "#count": 1, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -4475,22 +3414,22 @@ Object { "#value": "fácil", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - "13": Object { - "#attributes": Object { + "13": { + "#attributes": { "data-drupal-facet-item-count": 1, "data-drupal-facet-item-id": "title-horno", "data-drupal-facet-item-value": "horno", }, - "#title": Object { + "#title": { "#count": 1, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -4500,22 +3439,22 @@ Object { "#value": "horno", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - "14": Object { - "#attributes": Object { + "14": { + "#attributes": { "data-drupal-facet-item-count": 1, "data-drupal-facet-item-id": "title-pastel", "data-drupal-facet-item-value": "pastel", }, - "#title": Object { + "#title": { "#count": 1, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -4525,22 +3464,22 @@ Object { "#value": "pastel", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - "15": Object { - "#attributes": Object { + "15": { + "#attributes": { "data-drupal-facet-item-count": 1, "data-drupal-facet-item-id": "title-salsa", "data-drupal-facet-item-value": "salsa", }, - "#title": Object { + "#title": { "#count": 1, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -4550,22 +3489,22 @@ Object { "#value": "salsa", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - "16": Object { - "#attributes": Object { + "16": { + "#attributes": { "data-drupal-facet-item-count": 1, "data-drupal-facet-item-id": "title-sauce", "data-drupal-facet-item-value": "sauce", }, - "#title": Object { + "#title": { "#count": 1, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -4575,22 +3514,22 @@ Object { "#value": "sauce", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - "17": Object { - "#attributes": Object { + "17": { + "#attributes": { "data-drupal-facet-item-count": 1, "data-drupal-facet-item-id": "title-sopa", "data-drupal-facet-item-value": "sopa", }, - "#title": Object { + "#title": { "#count": 1, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -4600,22 +3539,22 @@ Object { "#value": "sopa", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - "18": Object { - "#attributes": Object { + "18": { + "#attributes": { "data-drupal-facet-item-count": 1, "data-drupal-facet-item-id": "title-soup", "data-drupal-facet-item-value": "soup", }, - "#title": Object { + "#title": { "#count": 1, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -4625,22 +3564,22 @@ Object { "#value": "soup", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - "19": Object { - "#attributes": Object { + "19": { + "#attributes": { "data-drupal-facet-item-count": 1, "data-drupal-facet-item-id": "title-sponge", "data-drupal-facet-item-value": "sponge", }, - "#title": Object { + "#title": { "#count": 1, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -4650,22 +3589,22 @@ Object { "#value": "sponge", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - "2": Object { - "#attributes": Object { + "2": { + "#attributes": { "data-drupal-facet-item-count": 2, "data-drupal-facet-item-id": "title-victoria", "data-drupal-facet-item-value": "victoria", }, - "#title": Object { + "#title": { "#count": 2, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -4675,22 +3614,22 @@ Object { "#value": "victoria", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - "20": Object { - "#attributes": Object { + "20": { + "#attributes": { "data-drupal-facet-item-count": 1, "data-drupal-facet-item-id": "title-super", "data-drupal-facet-item-value": "super", }, - "#title": Object { + "#title": { "#count": 1, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -4700,22 +3639,22 @@ Object { "#value": "super", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - "21": Object { - "#attributes": Object { + "21": { + "#attributes": { "data-drupal-facet-item-count": 1, "data-drupal-facet-item-id": "title-súper", "data-drupal-facet-item-value": "súper", }, - "#title": Object { + "#title": { "#count": 1, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -4725,22 +3664,22 @@ Object { "#value": "súper", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - "22": Object { - "#attributes": Object { + "22": { + "#attributes": { "data-drupal-facet-item-count": 1, "data-drupal-facet-item-id": "title-vegetarian", "data-drupal-facet-item-value": "vegetarian", }, - "#title": Object { + "#title": { "#count": 1, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -4750,22 +3689,22 @@ Object { "#value": "vegetarian", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - "23": Object { - "#attributes": Object { + "23": { + "#attributes": { "data-drupal-facet-item-count": 1, "data-drupal-facet-item-id": "title-vegetariana", "data-drupal-facet-item-value": "vegetariana", }, - "#title": Object { + "#title": { "#count": 1, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -4775,22 +3714,22 @@ Object { "#value": "vegetariana", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - "24": Object { - "#attributes": Object { + "24": { + "#attributes": { "data-drupal-facet-item-count": 1, "data-drupal-facet-item-id": "title-watercress", "data-drupal-facet-item-value": "watercress", }, - "#title": Object { + "#title": { "#count": 1, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -4800,22 +3739,22 @@ Object { "#value": "watercress", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - "3": Object { - "#attributes": Object { + "3": { + "#attributes": { "data-drupal-facet-item-count": 1, "data-drupal-facet-item-id": "title-al", "data-drupal-facet-item-value": "al", }, - "#title": Object { + "#title": { "#count": 1, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -4825,22 +3764,22 @@ Object { "#value": "al", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - "4": Object { - "#attributes": Object { + "4": { + "#attributes": { "data-drupal-facet-item-count": 1, "data-drupal-facet-item-id": "title-ardiente", "data-drupal-facet-item-value": "ardiente", }, - "#title": Object { + "#title": { "#count": 1, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -4850,22 +3789,22 @@ Object { "#value": "ardiente", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - "5": Object { - "#attributes": Object { + "5": { + "#attributes": { "data-drupal-facet-item-count": 1, "data-drupal-facet-item-id": "title-bake", "data-drupal-facet-item-value": "bake", }, - "#title": Object { + "#title": { "#count": 1, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -4875,22 +3814,22 @@ Object { "#value": "bake", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - "6": Object { - "#attributes": Object { + "6": { + "#attributes": { "data-drupal-facet-item-count": 1, "data-drupal-facet-item-id": "title-berro", "data-drupal-facet-item-value": "berro", }, - "#title": Object { + "#title": { "#count": 1, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -4900,22 +3839,22 @@ Object { "#value": "berro", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - "7": Object { - "#attributes": Object { + "7": { + "#attributes": { "data-drupal-facet-item-count": 1, "data-drupal-facet-item-id": "title-cake", "data-drupal-facet-item-value": "cake", }, - "#title": Object { + "#title": { "#count": 1, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -4925,22 +3864,22 @@ Object { "#value": "cake", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - "8": Object { - "#attributes": Object { + "8": { + "#attributes": { "data-drupal-facet-item-count": 1, "data-drupal-facet-item-id": "title-chile", "data-drupal-facet-item-value": "chile", }, - "#title": Object { + "#title": { "#count": 1, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -4950,22 +3889,22 @@ Object { "#value": "chile", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, }, - "9": Object { - "#attributes": Object { + "9": { + "#attributes": { "data-drupal-facet-item-count": 1, "data-drupal-facet-item-id": "title-chili", "data-drupal-facet-item-value": "chili", }, - "#title": Object { + "#title": { "#count": 1, - "#facet": Object { + "#facet": { "show_title": null, }, "#is_active": false, @@ -4975,9 +3914,9 @@ Object { "#value": "chili", }, "#type": "link", - "#url": Object {}, - "#wrapper_attributes": Object { - "class": Array [ + "#url": {}, + "#wrapper_attributes": { + "class": [ "facet-item", ], }, @@ -4990,618 +3929,20 @@ Object { } `; -exports[`getStaticPathsFromContext it returns static paths for multiple resource types from context 1`] = ` -Array [ - Object { - "locale": "en", - "params": Object { - "slug": Array [ - "articles", - "give-it-a-go-and-grow-your-own-herbs", - ], - }, - }, - Object { - "locale": "en", - "params": Object { - "slug": Array [ - "articles", - "dairy-free-and-delicious-milk-chocolate", - ], - }, - }, - Object { - "locale": "en", - "params": Object { - "slug": Array [ - "articles", - "the-real-deal-for-supermarket-savvy-shopping", - ], - }, - }, - Object { - "locale": "en", - "params": Object { - "slug": Array [ - "articles", - "the-umami-guide-to-our-favourite-mushrooms", - ], - }, - }, - Object { - "locale": "en", - "params": Object { - "slug": Array [ - "articles", - "lets-hear-it-for-carrots", - ], - }, - }, - Object { - "locale": "en", - "params": Object { - "slug": Array [ - "articles", - "baking-mishaps-our-troubleshooting-tips", - ], - }, - }, - Object { - "locale": "en", - "params": Object { - "slug": Array [ - "articles", - "skip-the-spirits-with-delicious-mocktails", - ], - }, - }, - Object { - "locale": "en", - "params": Object { - "slug": Array [ - "articles", - "give-your-oatmeal-the-ultimate-makeover", - ], - }, - }, - Object { - "locale": "es", - "params": Object { - "slug": Array [ - "articles", - "prueba-y-cultiva-tus-propias-hierbas", - ], - }, - }, - Object { - "locale": "es", - "params": Object { - "slug": Array [ - "articles", - "delicioso-chocolate-sin-lactosa", - ], - }, - }, - Object { - "locale": "es", - "params": Object { - "slug": Array [ - "articles", - "el-verdadeo-negocio-para-comprar-en-el-supermercado", - ], - }, - }, - Object { - "locale": "es", - "params": Object { - "slug": Array [ - "articles", - "guia-umami-de-nuestras-setas-preferidas", - ], - }, - }, - Object { - "locale": "es", - "params": Object { - "slug": Array [ - "articles", - "un-aplauso-para-las-zanahorias", - ], - }, - }, - Object { - "locale": "es", - "params": Object { - "slug": Array [ - "articles", - "percances-al-hornear-nuestros-consejos-para-solucionar-problemas", - ], - }, - }, - Object { - "locale": "es", - "params": Object { - "slug": Array [ - "articles", - "salta-los-espiritus-con-deliciosos-cocteles-sin-alcohol", - ], - }, - }, - Object { - "locale": "es", - "params": Object { - "slug": Array [ - "articles", - "dale-a-tu-avena-el-cambio-de-imagen-definitivo", - ], - }, - }, - Object { - "locale": "en", - "params": Object { - "slug": Array [ - "recipes", - "vegan-chocolate-and-nut-brownies", - ], - }, - }, - Object { - "locale": "en", - "params": Object { - "slug": Array [ - "recipes", - "super-easy-vegetarian-pasta-bake", - ], - }, - }, - Object { - "locale": "en", - "params": Object { - "slug": Array [ - "recipes", - "watercress-soup", - ], - }, - }, - Object { - "locale": "en", - "params": Object { - "slug": Array [ - "recipes", - "victoria-sponge-cake", - ], - }, - }, - Object { - "locale": "en", - "params": Object { - "slug": Array [ - "recipes", - "gluten-free-pizza", - ], - }, - }, - Object { - "locale": "en", - "params": Object { - "slug": Array [ - "recipes", - "thai-green-curry", - ], - }, - }, - Object { - "locale": "en", - "params": Object { - "slug": Array [ - "recipes", - "crema-catalana", - ], - }, - }, - Object { - "locale": "en", - "params": Object { - "slug": Array [ - "recipes", - "fiery-chili-sauce", - ], - }, - }, - Object { - "locale": "en", - "params": Object { - "slug": Array [ - "recipes", - "deep-mediterranean-quiche", - ], - }, - }, - Object { - "locale": "es", - "params": Object { - "slug": Array [ - "recipes", - "bizcochos-veganos-de-chocolate-y-nueces", - ], - }, - }, - Object { - "locale": "es", - "params": Object { - "slug": Array [ - "recipes", - "pasta-vegetariana-horno-super-facil", - ], - }, - }, - Object { - "locale": "es", - "params": Object { - "slug": Array [ - "recipes", - "sopa-de-berro", - ], - }, - }, - Object { - "locale": "es", - "params": Object { - "slug": Array [ - "recipes", - "pastel-victoria", - ], - }, - }, - Object { - "locale": "es", - "params": Object { - "slug": Array [ - "recipes", - "pizza-sin-gluten", - ], - }, - }, - Object { - "locale": "es", - "params": Object { - "slug": Array [ - "recipes", - "curry-verde-tailandes", - ], - }, - }, - Object { - "locale": "es", - "params": Object { - "slug": Array [ - "recipes", - "crema-catalana", - ], - }, - }, - Object { - "locale": "es", - "params": Object { - "slug": Array [ - "recipes", - "salsa-de-chile-ardiente", - ], - }, - }, - Object { - "locale": "es", - "params": Object { - "slug": Array [ - "recipes", - "quiche-mediterráneo-profundo", - ], - }, - }, -] -`; - -exports[`getStaticPathsFromContext it returns static paths from context 1`] = ` -Array [ - Object { - "params": Object { - "slug": Array [ - "articles", - "give-it-a-go-and-grow-your-own-herbs", - ], - }, - }, - Object { - "params": Object { - "slug": Array [ - "articles", - "dairy-free-and-delicious-milk-chocolate", - ], - }, - }, - Object { - "params": Object { - "slug": Array [ - "articles", - "the-real-deal-for-supermarket-savvy-shopping", - ], - }, - }, - Object { - "params": Object { - "slug": Array [ - "articles", - "the-umami-guide-to-our-favourite-mushrooms", - ], - }, - }, - Object { - "params": Object { - "slug": Array [ - "articles", - "lets-hear-it-for-carrots", - ], - }, - }, - Object { - "params": Object { - "slug": Array [ - "articles", - "baking-mishaps-our-troubleshooting-tips", - ], - }, - }, - Object { - "params": Object { - "slug": Array [ - "articles", - "skip-the-spirits-with-delicious-mocktails", - ], - }, - }, - Object { - "params": Object { - "slug": Array [ - "articles", - "give-your-oatmeal-the-ultimate-makeover", - ], - }, - }, -] -`; - -exports[`getStaticPathsFromContext it returns static paths from context with locale 1`] = ` -Array [ - Object { - "locale": "en", - "params": Object { - "slug": Array [ - "articles", - "give-it-a-go-and-grow-your-own-herbs", - ], - }, - }, - Object { - "locale": "en", - "params": Object { - "slug": Array [ - "articles", - "dairy-free-and-delicious-milk-chocolate", - ], - }, - }, - Object { - "locale": "en", - "params": Object { - "slug": Array [ - "articles", - "the-real-deal-for-supermarket-savvy-shopping", - ], - }, - }, - Object { - "locale": "en", - "params": Object { - "slug": Array [ - "articles", - "the-umami-guide-to-our-favourite-mushrooms", - ], - }, - }, - Object { - "locale": "en", - "params": Object { - "slug": Array [ - "articles", - "lets-hear-it-for-carrots", - ], - }, - }, - Object { - "locale": "en", - "params": Object { - "slug": Array [ - "articles", - "baking-mishaps-our-troubleshooting-tips", - ], - }, - }, - Object { - "locale": "en", - "params": Object { - "slug": Array [ - "articles", - "skip-the-spirits-with-delicious-mocktails", - ], - }, - }, - Object { - "locale": "en", - "params": Object { - "slug": Array [ - "articles", - "give-your-oatmeal-the-ultimate-makeover", - ], - }, - }, - Object { - "locale": "es", - "params": Object { - "slug": Array [ - "articles", - "prueba-y-cultiva-tus-propias-hierbas", - ], - }, - }, - Object { - "locale": "es", - "params": Object { - "slug": Array [ - "articles", - "delicioso-chocolate-sin-lactosa", - ], - }, - }, - Object { - "locale": "es", - "params": Object { - "slug": Array [ - "articles", - "el-verdadeo-negocio-para-comprar-en-el-supermercado", - ], - }, - }, - Object { - "locale": "es", - "params": Object { - "slug": Array [ - "articles", - "guia-umami-de-nuestras-setas-preferidas", - ], - }, - }, - Object { - "locale": "es", - "params": Object { - "slug": Array [ - "articles", - "un-aplauso-para-las-zanahorias", - ], - }, - }, - Object { - "locale": "es", - "params": Object { - "slug": Array [ - "articles", - "percances-al-hornear-nuestros-consejos-para-solucionar-problemas", - ], - }, - }, - Object { - "locale": "es", - "params": Object { - "slug": Array [ - "articles", - "salta-los-espiritus-con-deliciosos-cocteles-sin-alcohol", - ], - }, - }, - Object { - "locale": "es", - "params": Object { - "slug": Array [ - "articles", - "dale-a-tu-avena-el-cambio-de-imagen-definitivo", - ], - }, - }, -] -`; - -exports[`getStaticPathsFromContext it returns static paths from context with params 1`] = ` -Array [ - Object { - "params": Object { - "slug": Array [ - "articles", - "give-it-a-go-and-grow-your-own-herbs", - ], - }, - }, - Object { - "params": Object { - "slug": Array [ - "articles", - "dairy-free-and-delicious-milk-chocolate", - ], - }, - }, - Object { - "params": Object { - "slug": Array [ - "articles", - "the-real-deal-for-supermarket-savvy-shopping", - ], - }, - }, - Object { - "params": Object { - "slug": Array [ - "articles", - "the-umami-guide-to-our-favourite-mushrooms", - ], - }, - }, - Object { - "params": Object { - "slug": Array [ - "articles", - "lets-hear-it-for-carrots", - ], - }, - }, - Object { - "params": Object { - "slug": Array [ - "articles", - "baking-mishaps-our-troubleshooting-tips", - ], - }, - }, - Object { - "params": Object { - "slug": Array [ - "articles", - "skip-the-spirits-with-delicious-mocktails", - ], - }, - }, - Object { - "params": Object { - "slug": Array [ - "articles", - "give-your-oatmeal-the-ultimate-makeover", - ], - }, - }, -] -`; - -exports[`getView it fetches a view 1`] = ` -Object { +exports[`getView() fetches a view 1`] = ` +{ "id": "featured_articles--page_1", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/jsonapi/views/featured_articles/page_1", }, }, - "meta": Object { + "meta": { "count": 8, }, - "results": Array [ - Object { - "body": Object { + "results": [ + { + "body": { "format": "basic_html", "processed": "

There's nothing like having your own supply of fresh herbs, readily available and close at hand to use while cooking. Whether you have a large garden or a small kitchen window sill, there's always enough room for something home grown.

Outdoors

@@ -5644,31 +3985,31 @@ Object { "default_langcode": true, "drupal_internal__nid": 10, "drupal_internal__vid": 20, - "field_media_image": Object { + "field_media_image": { "id": "e5091a16-134e-400d-8393-cfe4eccbcaa2", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 10, }, "type": "media--image", }, - "field_tags": Array [ - Object { + "field_tags": [ + { "id": "dcd81647-71b7-48cb-b555-e20322bcb7a7", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 14, }, "type": "taxonomy_term--tags", }, - Object { + { "id": "60d20a4c-9d42-4b25-b717-3af3cba6abe8", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 23, }, "type": "taxonomy_term--tags", }, - Object { + { "id": "57a1d9f6-23a6-4215-a8a9-582202cd938d", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 16, }, "type": "taxonomy_term--tags", @@ -5676,26 +4017,26 @@ Object { ], "id": "52837ad0-f218-46bd-a106-5710336b7053", "langcode": "en", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/article/52837ad0-f218-46bd-a106-5710336b7053?resourceVersion=id%3A20", }, }, "moderation_state": "published", - "node_type": Object { + "node_type": { "id": "a145b65a-e660-4f5d-ac0d-bd2ff9e3f0b0", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": "article", }, "type": "node_type--node_type", }, - "path": Object { + "path": { "alias": "/articles/give-it-a-go-and-grow-your-own-herbs", "langcode": "en", "pid": 85, }, "promote": true, - "relationshipNames": Array [ + "relationshipNames": [ "node_type", "revision_uid", "uid", @@ -5705,9 +4046,9 @@ Object { "revision_log": null, "revision_timestamp": "2022-03-21T10:52:42+00:00", "revision_translation_affected": null, - "revision_uid": Object { + "revision_uid": { "id": "dd9c916d-4d66-4bff-a851-eeba0cf7673a", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 5, }, "type": "user--user", @@ -5716,16 +4057,16 @@ Object { "sticky": false, "title": "Give it a go and grow your own herbs", "type": "node--article", - "uid": Object { + "uid": { "id": "dd9c916d-4d66-4bff-a851-eeba0cf7673a", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 5, }, "type": "user--user", }, }, - Object { - "body": Object { + { + "body": { "format": "basic_html", "processed": "

The calendar is full of excuses for chocolate-lovers to indulge, from religious festivals to birthdays - and even World Chocolate Day on the 7th July. But for those who are vegan, or on dairy-free diets, there is no need to miss out, because there are plenty of delicious vegan chocolate varieties on offer.

Dairy-free milk chocolate is made in largely the same way as regular chocolate, until the point when the milk is added. Cacao beans are roasted for a couple of hours until they develop a rich flavor. The outer shells are removed, and the interior nibs are ground to make a paste that can be mixed with cocoa butter to produce the desired percentage of chocolate. Flavorings, sugar and milk are added in different quantities to get the type of chocolate being produced. The chocolate is grainy at this point and needs to be mashed until it is smooth - this can take days! Finally, it is tempered through a process of heating and cooling until it is ready to eat.

@@ -5762,24 +4103,24 @@ Object { "default_langcode": true, "drupal_internal__nid": 11, "drupal_internal__vid": 22, - "field_media_image": Object { + "field_media_image": { "id": "8427a15e-771b-405c-b887-3f712973c006", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 11, }, "type": "media--image", }, - "field_tags": Array [ - Object { + "field_tags": [ + { "id": "a47d1f3a-cc76-4d32-bffe-baf1ed2ee8a3", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 27, }, "type": "taxonomy_term--tags", }, - Object { + { "id": "7b732cc1-c963-498f-91ae-c429059a3cdc", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 7, }, "type": "taxonomy_term--tags", @@ -5787,26 +4128,26 @@ Object { ], "id": "3d5a7bca-5b4a-49ee-87d2-cbe313562903", "langcode": "en", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/article/3d5a7bca-5b4a-49ee-87d2-cbe313562903?resourceVersion=id%3A22", }, }, "moderation_state": "published", - "node_type": Object { + "node_type": { "id": "a145b65a-e660-4f5d-ac0d-bd2ff9e3f0b0", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": "article", }, "type": "node_type--node_type", }, - "path": Object { + "path": { "alias": "/articles/dairy-free-and-delicious-milk-chocolate", "langcode": "en", "pid": 87, }, "promote": true, - "relationshipNames": Array [ + "relationshipNames": [ "node_type", "revision_uid", "uid", @@ -5816,9 +4157,9 @@ Object { "revision_log": null, "revision_timestamp": "2022-03-21T10:52:42+00:00", "revision_translation_affected": null, - "revision_uid": Object { + "revision_uid": { "id": "9e4944e8-dd77-407a-8610-83e823b48b56", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 4, }, "type": "user--user", @@ -5827,16 +4168,16 @@ Object { "sticky": false, "title": "Dairy-free and delicious milk chocolate", "type": "node--article", - "uid": Object { + "uid": { "id": "9e4944e8-dd77-407a-8610-83e823b48b56", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 4, }, "type": "user--user", }, }, - Object { - "body": Object { + { + "body": { "format": "basic_html", "processed": "

This may not surprise you - but your supermarket is a hot bed of marketing mayhem, designed to improve their profit and to encourage the consumer to spend more than they intended. The tricks that all supermarkets employ are sometimes sensible ploys that any retailer should do to improve sales - but some may be more subtle and less obvious than you might think.

With consumer awareness articles and documentaries frequently picking up on this topic, it's likely the case that retailers find it harder to get away with the more obvious ploys. We are becoming ever more savvy consumers and there's probably not a great deal that gets past us. But here's a few retail tricks to keep in mind when you are rushing around the weekly supermarket stock-up.

@@ -5880,24 +4221,24 @@ Our tip: Make your shopping list before leaving the house, checking what you nee "default_langcode": true, "drupal_internal__nid": 12, "drupal_internal__vid": 24, - "field_media_image": Object { + "field_media_image": { "id": "2c9a045b-ee1a-4664-86de-4328d891a444", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 12, }, "type": "media--image", }, - "field_tags": Array [ - Object { + "field_tags": [ + { "id": "3dd82cec-a0ad-44ae-b5aa-b22b29ca9e9c", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 26, }, "type": "taxonomy_term--tags", }, - Object { + { "id": "4b1d0dcc-3fc7-4946-8702-00c04688b790", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 24, }, "type": "taxonomy_term--tags", @@ -5905,26 +4246,26 @@ Our tip: Make your shopping list before leaving the house, checking what you nee ], "id": "a1ef61c9-ed15-4b6d-bba2-bf6e5141f961", "langcode": "en", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/article/a1ef61c9-ed15-4b6d-bba2-bf6e5141f961?resourceVersion=id%3A24", }, }, "moderation_state": "published", - "node_type": Object { + "node_type": { "id": "a145b65a-e660-4f5d-ac0d-bd2ff9e3f0b0", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": "article", }, "type": "node_type--node_type", }, - "path": Object { + "path": { "alias": "/articles/the-real-deal-for-supermarket-savvy-shopping", "langcode": "en", "pid": 89, }, "promote": true, - "relationshipNames": Array [ + "relationshipNames": [ "node_type", "revision_uid", "uid", @@ -5934,9 +4275,9 @@ Our tip: Make your shopping list before leaving the house, checking what you nee "revision_log": null, "revision_timestamp": "2022-03-21T10:52:42+00:00", "revision_translation_affected": null, - "revision_uid": Object { + "revision_uid": { "id": "cddd2eed-95b6-4261-8de1-d09958a079e7", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 6, }, "type": "user--user", @@ -5945,16 +4286,16 @@ Our tip: Make your shopping list before leaving the house, checking what you nee "sticky": false, "title": "The real deal for supermarket savvy shopping", "type": "node--article", - "uid": Object { + "uid": { "id": "cddd2eed-95b6-4261-8de1-d09958a079e7", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 6, }, "type": "user--user", }, }, - Object { - "body": Object { + { + "body": { "format": "basic_html", "processed": "

We think mushrooms are one of the most enjoyable ingredients to cook with. There are plenty of edible varieties to try, each with their own distinctive shape, size, and taste. And with curious names such as chanterelle, the gypsy, horn of plenty, or hen of the woods, who wouldn't want to know more about cooking with the mighty mushroom?

One of the best things about mushrooms is their versatility. They can be fried, roasted, grilled, steamed, or even cooked in the microwave. And they can be served as the main ingredient for a dish, or simply added as part of the mix. This makes mushrooms an ideal choice for creating absolutely delicious vegetarian dishes.

@@ -5981,24 +4322,24 @@ Our tip: Make your shopping list before leaving the house, checking what you nee "default_langcode": true, "drupal_internal__nid": 13, "drupal_internal__vid": 26, - "field_media_image": Object { + "field_media_image": { "id": "cea9398a-a669-4465-92c4-546fd43f7eb3", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 13, }, "type": "media--image", }, - "field_tags": Array [ - Object { + "field_tags": [ + { "id": "c8baa7f8-245e-45c6-b26c-8456c5c87190", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 18, }, "type": "taxonomy_term--tags", }, - Object { + { "id": "f19c842c-17ec-47e8-9079-44afda5ed90d", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 28, }, "type": "taxonomy_term--tags", @@ -6006,26 +4347,26 @@ Our tip: Make your shopping list before leaving the house, checking what you nee ], "id": "ac0b8b56-db8d-4322-9b1e-224f22083f0d", "langcode": "en", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/article/ac0b8b56-db8d-4322-9b1e-224f22083f0d?resourceVersion=id%3A26", }, }, "moderation_state": "published", - "node_type": Object { + "node_type": { "id": "a145b65a-e660-4f5d-ac0d-bd2ff9e3f0b0", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": "article", }, "type": "node_type--node_type", }, - "path": Object { + "path": { "alias": "/articles/the-umami-guide-to-our-favourite-mushrooms", "langcode": "en", "pid": 91, }, "promote": true, - "relationshipNames": Array [ + "relationshipNames": [ "node_type", "revision_uid", "uid", @@ -6035,9 +4376,9 @@ Our tip: Make your shopping list before leaving the house, checking what you nee "revision_log": null, "revision_timestamp": "2022-03-21T10:52:42+00:00", "revision_translation_affected": null, - "revision_uid": Object { + "revision_uid": { "id": "9e4944e8-dd77-407a-8610-83e823b48b56", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 4, }, "type": "user--user", @@ -6046,16 +4387,16 @@ Our tip: Make your shopping list before leaving the house, checking what you nee "sticky": false, "title": "The Umami guide to our favorite mushrooms", "type": "node--article", - "uid": Object { + "uid": { "id": "9e4944e8-dd77-407a-8610-83e823b48b56", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 4, }, "type": "user--user", }, }, - Object { - "body": Object { + { + "body": { "format": "basic_html", "processed": "

Let's hear it for the humble carrot! This sweet and healthy ‘everyday’ veg packs it all in. Great flavor, fantastic color, and if you're one for believing the old story, they can even help you to see better in the dark.

Who doesn't love cooking with this super versatile root veg? We roast them, boil them, blend them into soups, and grate them into salads. The humble carrot has to be one of our favorite veg choices and it's been grown for thousands of years. But back then you were more likely to find a purple, red, yellow or white carrot and not the orange one we are all so familiar with today.

@@ -6090,31 +4431,31 @@ Our tip: Make your shopping list before leaving the house, checking what you nee "default_langcode": true, "drupal_internal__nid": 14, "drupal_internal__vid": 28, - "field_media_image": Object { + "field_media_image": { "id": "f40adf47-e201-421a-968f-65221d09d4ce", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 14, }, "type": "media--image", }, - "field_tags": Array [ - Object { + "field_tags": [ + { "id": "83a40a0b-b420-40d5-9a30-aedd15a87cde", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 6, }, "type": "taxonomy_term--tags", }, - Object { + { "id": "f19c842c-17ec-47e8-9079-44afda5ed90d", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 28, }, "type": "taxonomy_term--tags", }, - Object { + { "id": "359d7eee-03f0-420f-8c65-30dcc51cdafe", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 15, }, "type": "taxonomy_term--tags", @@ -6122,26 +4463,26 @@ Our tip: Make your shopping list before leaving the house, checking what you nee ], "id": "22874ecc-0443-441b-a3c9-3aa94d85b800", "langcode": "en", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/article/22874ecc-0443-441b-a3c9-3aa94d85b800?resourceVersion=id%3A28", }, }, "moderation_state": "published", - "node_type": Object { + "node_type": { "id": "a145b65a-e660-4f5d-ac0d-bd2ff9e3f0b0", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": "article", }, "type": "node_type--node_type", }, - "path": Object { + "path": { "alias": "/articles/lets-hear-it-for-carrots", "langcode": "en", "pid": 93, }, "promote": true, - "relationshipNames": Array [ + "relationshipNames": [ "node_type", "revision_uid", "uid", @@ -6151,9 +4492,9 @@ Our tip: Make your shopping list before leaving the house, checking what you nee "revision_log": null, "revision_timestamp": "2022-03-21T10:52:42+00:00", "revision_translation_affected": null, - "revision_uid": Object { + "revision_uid": { "id": "9e4944e8-dd77-407a-8610-83e823b48b56", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 4, }, "type": "user--user", @@ -6162,16 +4503,16 @@ Our tip: Make your shopping list before leaving the house, checking what you nee "sticky": false, "title": "Let's hear it for carrots", "type": "node--article", - "uid": Object { + "uid": { "id": "9e4944e8-dd77-407a-8610-83e823b48b56", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 4, }, "type": "user--user", }, }, - Object { - "body": Object { + { + "body": { "format": "basic_html", "processed": "

You follow the recipe, you weigh all your ingredients, you use the right oven temperature and you take your time and yet still, your baking comes out with a soggy bottom, fails to rise or just tastes plain horrible. We have come up with a list of the most frustrating baking problems and the techniques you can use to try and avoid them.

Your cake failed to rise

@@ -6210,24 +4551,24 @@ Our tip: Make your shopping list before leaving the house, checking what you nee "default_langcode": true, "drupal_internal__nid": 15, "drupal_internal__vid": 30, - "field_media_image": Object { + "field_media_image": { "id": "73b0659f-323b-4391-bf53-f650ab1ec9d3", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 15, }, "type": "media--image", }, - "field_tags": Array [ - Object { + "field_tags": [ + { "id": "c504fd5e-2422-452f-9f89-d001079329fa", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 3, }, "type": "taxonomy_term--tags", }, - Object { + { "id": "500189ad-65ee-4b9b-93f0-748a297c0134", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 17, }, "type": "taxonomy_term--tags", @@ -6235,26 +4576,26 @@ Our tip: Make your shopping list before leaving the house, checking what you nee ], "id": "ec51b1de-f51e-4761-b061-aa2624e58b4a", "langcode": "en", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/article/ec51b1de-f51e-4761-b061-aa2624e58b4a?resourceVersion=id%3A30", }, }, "moderation_state": "published", - "node_type": Object { + "node_type": { "id": "a145b65a-e660-4f5d-ac0d-bd2ff9e3f0b0", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": "article", }, "type": "node_type--node_type", }, - "path": Object { + "path": { "alias": "/articles/baking-mishaps-our-troubleshooting-tips", "langcode": "en", "pid": 95, }, "promote": true, - "relationshipNames": Array [ + "relationshipNames": [ "node_type", "revision_uid", "uid", @@ -6264,9 +4605,9 @@ Our tip: Make your shopping list before leaving the house, checking what you nee "revision_log": null, "revision_timestamp": "2022-03-21T10:52:42+00:00", "revision_translation_affected": null, - "revision_uid": Object { + "revision_uid": { "id": "9e4944e8-dd77-407a-8610-83e823b48b56", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 4, }, "type": "user--user", @@ -6275,16 +4616,16 @@ Our tip: Make your shopping list before leaving the house, checking what you nee "sticky": false, "title": "Baking mishaps - our troubleshooting tips", "type": "node--article", - "uid": Object { + "uid": { "id": "9e4944e8-dd77-407a-8610-83e823b48b56", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 4, }, "type": "user--user", }, }, - Object { - "body": Object { + { + "body": { "format": "basic_html", "processed": "

Having a cocktail party? Then why not serve up something just as special for those who don't drink alcohol but do want to join in on all the fun? After all, what cocktail party is complete without those incredible looking glasses of mixed fruits, bright colors and of course, the little umbrellas? Do your bit for the environment by ditching the plastic straws and get hold of some great looking alternatives made out of glass, metal, or even bamboo. Don't forget the classic cocktail glasses and cool tumblers to really bring these recipes to life.

@@ -6339,45 +4680,45 @@ So, grab the cocktail mixer, skip the spirits, and shake up these deliciously re "default_langcode": true, "drupal_internal__nid": 16, "drupal_internal__vid": 32, - "field_media_image": Object { + "field_media_image": { "id": "e1950c46-ec1a-4a93-a761-6705342c0e04", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 16, }, "type": "media--image", }, - "field_tags": Array [ - Object { + "field_tags": [ + { "id": "77c4a26a-ce8d-44be-a098-e0bedd11f9f0", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 1, }, "type": "taxonomy_term--tags", }, - Object { + { "id": "d2ceae46-6cc5-4891-b67f-b896d1055bcf", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 12, }, "type": "taxonomy_term--tags", }, - Object { + { "id": "606fa8a9-b565-45d2-bd18-6ffb256459c3", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 20, }, "type": "taxonomy_term--tags", }, - Object { + { "id": "14edf86c-8dfb-4da8-9632-2d72b36f622f", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 8, }, "type": "taxonomy_term--tags", }, - Object { + { "id": "a1bd5b9e-ba25-4a37-a44d-a6ab51f70334", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 11, }, "type": "taxonomy_term--tags", @@ -6385,26 +4726,26 @@ So, grab the cocktail mixer, skip the spirits, and shake up these deliciously re ], "id": "d5b9ef80-c0aa-45ca-88e7-79c28abe5d50", "langcode": "en", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/article/d5b9ef80-c0aa-45ca-88e7-79c28abe5d50?resourceVersion=id%3A32", }, }, "moderation_state": "published", - "node_type": Object { + "node_type": { "id": "a145b65a-e660-4f5d-ac0d-bd2ff9e3f0b0", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": "article", }, "type": "node_type--node_type", }, - "path": Object { + "path": { "alias": "/articles/skip-the-spirits-with-delicious-mocktails", "langcode": "en", "pid": 97, }, "promote": true, - "relationshipNames": Array [ + "relationshipNames": [ "node_type", "revision_uid", "uid", @@ -6414,9 +4755,9 @@ So, grab the cocktail mixer, skip the spirits, and shake up these deliciously re "revision_log": null, "revision_timestamp": "2022-03-21T10:52:42+00:00", "revision_translation_affected": null, - "revision_uid": Object { + "revision_uid": { "id": "cddd2eed-95b6-4261-8de1-d09958a079e7", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 6, }, "type": "user--user", @@ -6425,16 +4766,16 @@ So, grab the cocktail mixer, skip the spirits, and shake up these deliciously re "sticky": false, "title": "Skip the spirits with delicious mocktails", "type": "node--article", - "uid": Object { + "uid": { "id": "cddd2eed-95b6-4261-8de1-d09958a079e7", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 6, }, "type": "user--user", }, }, - Object { - "body": Object { + { + "body": { "format": "basic_html", "processed": "

It is vegan, gluten-free, low in fat, high in fiber, and can even lower cholesterol - but oatmeal is boring, right? Well, before you write off that boring jar of oats, you might want to take inspiration from our topping ideas that will take your oatmeal from bland to creatively delicious in just a few minutes. @@ -6519,45 +4860,45 @@ This low-sugar delight will meet all of those chocolate cravings and is the perf "default_langcode": true, "drupal_internal__nid": 17, "drupal_internal__vid": 34, - "field_media_image": Object { + "field_media_image": { "id": "fef8de9e-7e41-4fa7-a58f-7f54db52ffe3", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 17, }, "type": "media--image", }, - "field_tags": Array [ - Object { + "field_tags": [ + { "id": "a47d1f3a-cc76-4d32-bffe-baf1ed2ee8a3", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 27, }, "type": "taxonomy_term--tags", }, - Object { + { "id": "f19c842c-17ec-47e8-9079-44afda5ed90d", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 28, }, "type": "taxonomy_term--tags", }, - Object { + { "id": "f775118a-6c20-482e-9117-20314c76f2a3", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 19, }, "type": "taxonomy_term--tags", }, - Object { + { "id": "0a31fa5c-3b1d-40b0-9841-2f607fe35272", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 4, }, "type": "taxonomy_term--tags", }, - Object { + { "id": "eaf76dc5-7988-48cc-8c5b-d240f86d0acc", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 10, }, "type": "taxonomy_term--tags", @@ -6565,26 +4906,26 @@ This low-sugar delight will meet all of those chocolate cravings and is the perf ], "id": "6c7c249f-cd1a-41d5-944b-b3bfce68b325", "langcode": "en", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/article/6c7c249f-cd1a-41d5-944b-b3bfce68b325?resourceVersion=id%3A34", }, }, "moderation_state": "published", - "node_type": Object { + "node_type": { "id": "a145b65a-e660-4f5d-ac0d-bd2ff9e3f0b0", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": "article", }, "type": "node_type--node_type", }, - "path": Object { + "path": { "alias": "/articles/give-your-oatmeal-the-ultimate-makeover", "langcode": "en", "pid": 99, }, "promote": true, - "relationshipNames": Array [ + "relationshipNames": [ "node_type", "revision_uid", "uid", @@ -6594,9 +4935,9 @@ This low-sugar delight will meet all of those chocolate cravings and is the perf "revision_log": null, "revision_timestamp": "2022-03-21T10:52:42+00:00", "revision_translation_affected": null, - "revision_uid": Object { + "revision_uid": { "id": "9e4944e8-dd77-407a-8610-83e823b48b56", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 4, }, "type": "user--user", @@ -6605,9 +4946,9 @@ This low-sugar delight will meet all of those chocolate cravings and is the perf "sticky": false, "title": "Give your oatmeal the ultimate makeover", "type": "node--article", - "uid": Object { + "uid": { "id": "9e4944e8-dd77-407a-8610-83e823b48b56", - "resourceIdObjMeta": Object { + "resourceIdObjMeta": { "drupal_internal__target_id": 4, }, "type": "user--user", @@ -6617,92 +4958,92 @@ This low-sugar delight will meet all of those chocolate cravings and is the perf } `; -exports[`getView it fetches a view with locale 1`] = ` -Object { +exports[`getView() fetches a view with locale 1`] = ` +{ "id": "featured_articles--page_1", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/es/jsonapi/views/featured_articles/page_1?fields%5Bnode--article%5D=title", }, }, - "meta": Object { + "meta": { "count": 8, }, - "results": Array [ - Object { + "results": [ + { "id": "52837ad0-f218-46bd-a106-5710336b7053", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/es/jsonapi/node/article/52837ad0-f218-46bd-a106-5710336b7053?resourceVersion=id%3A20", }, }, "title": "Prueba y cultiva tus propias hierbas", "type": "node--article", }, - Object { + { "id": "3d5a7bca-5b4a-49ee-87d2-cbe313562903", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/es/jsonapi/node/article/3d5a7bca-5b4a-49ee-87d2-cbe313562903?resourceVersion=id%3A22", }, }, "title": "Delicioso chocolate sin lactosa", "type": "node--article", }, - Object { + { "id": "a1ef61c9-ed15-4b6d-bba2-bf6e5141f961", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/es/jsonapi/node/article/a1ef61c9-ed15-4b6d-bba2-bf6e5141f961?resourceVersion=id%3A24", }, }, "title": "El verdadero negocio para comprar en el supermercado", "type": "node--article", }, - Object { + { "id": "ac0b8b56-db8d-4322-9b1e-224f22083f0d", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/es/jsonapi/node/article/ac0b8b56-db8d-4322-9b1e-224f22083f0d?resourceVersion=id%3A26", }, }, "title": "Guía Umami de nuestras setas preferidas", "type": "node--article", }, - Object { + { "id": "22874ecc-0443-441b-a3c9-3aa94d85b800", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/es/jsonapi/node/article/22874ecc-0443-441b-a3c9-3aa94d85b800?resourceVersion=id%3A28", }, }, "title": "Un aplauso para las zanahorias", "type": "node--article", }, - Object { + { "id": "ec51b1de-f51e-4761-b061-aa2624e58b4a", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/es/jsonapi/node/article/ec51b1de-f51e-4761-b061-aa2624e58b4a?resourceVersion=id%3A30", }, }, "title": "Percances al hornear - nuestros consejos para solucionar los problemas", "type": "node--article", }, - Object { + { "id": "d5b9ef80-c0aa-45ca-88e7-79c28abe5d50", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/es/jsonapi/node/article/d5b9ef80-c0aa-45ca-88e7-79c28abe5d50?resourceVersion=id%3A32", }, }, "title": "Salta los espíritus con deliciosos cócteles sin alcohol", "type": "node--article", }, - Object { + { "id": "6c7c249f-cd1a-41d5-944b-b3bfce68b325", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/es/jsonapi/node/article/6c7c249f-cd1a-41d5-944b-b3bfce68b325?resourceVersion=id%3A34", }, }, @@ -6713,92 +5054,92 @@ Object { } `; -exports[`getView it fetches a view with params 1`] = ` -Object { +exports[`getView() fetches a view with params 1`] = ` +{ "id": "featured_articles--page_1", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/jsonapi/views/featured_articles/page_1?fields%5Bnode--article%5D=title", }, }, - "meta": Object { + "meta": { "count": 8, }, - "results": Array [ - Object { + "results": [ + { "id": "52837ad0-f218-46bd-a106-5710336b7053", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/article/52837ad0-f218-46bd-a106-5710336b7053?resourceVersion=id%3A20", }, }, "title": "Give it a go and grow your own herbs", "type": "node--article", }, - Object { + { "id": "3d5a7bca-5b4a-49ee-87d2-cbe313562903", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/article/3d5a7bca-5b4a-49ee-87d2-cbe313562903?resourceVersion=id%3A22", }, }, "title": "Dairy-free and delicious milk chocolate", "type": "node--article", }, - Object { + { "id": "a1ef61c9-ed15-4b6d-bba2-bf6e5141f961", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/article/a1ef61c9-ed15-4b6d-bba2-bf6e5141f961?resourceVersion=id%3A24", }, }, "title": "The real deal for supermarket savvy shopping", "type": "node--article", }, - Object { + { "id": "ac0b8b56-db8d-4322-9b1e-224f22083f0d", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/article/ac0b8b56-db8d-4322-9b1e-224f22083f0d?resourceVersion=id%3A26", }, }, "title": "The Umami guide to our favorite mushrooms", "type": "node--article", }, - Object { + { "id": "22874ecc-0443-441b-a3c9-3aa94d85b800", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/article/22874ecc-0443-441b-a3c9-3aa94d85b800?resourceVersion=id%3A28", }, }, "title": "Let's hear it for carrots", "type": "node--article", }, - Object { + { "id": "ec51b1de-f51e-4761-b061-aa2624e58b4a", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/article/ec51b1de-f51e-4761-b061-aa2624e58b4a?resourceVersion=id%3A30", }, }, "title": "Baking mishaps - our troubleshooting tips", "type": "node--article", }, - Object { + { "id": "d5b9ef80-c0aa-45ca-88e7-79c28abe5d50", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/article/d5b9ef80-c0aa-45ca-88e7-79c28abe5d50?resourceVersion=id%3A32", }, }, "title": "Skip the spirits with delicious mocktails", "type": "node--article", }, - Object { + { "id": "6c7c249f-cd1a-41d5-944b-b3bfce68b325", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/en/jsonapi/node/article/6c7c249f-cd1a-41d5-944b-b3bfce68b325?resourceVersion=id%3A34", }, }, @@ -6809,199 +5150,141 @@ Object { } `; -exports[`getView it fetches raw data 1`] = ` -Object { +exports[`getView() fetches raw data 1`] = ` +{ "id": "featured_articles--page_1", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/es/jsonapi/views/featured_articles/page_1?fields%5Bnode--article%5D=title", }, }, - "meta": Object { + "meta": { "count": 8, }, - "results": Object { - "data": Array [ - Object { - "attributes": Object { + "results": { + "data": [ + { + "attributes": { "title": "Prueba y cultiva tus propias hierbas", }, "id": "52837ad0-f218-46bd-a106-5710336b7053", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/es/jsonapi/node/article/52837ad0-f218-46bd-a106-5710336b7053?resourceVersion=id%3A20", }, }, "type": "node--article", }, - Object { - "attributes": Object { + { + "attributes": { "title": "Delicioso chocolate sin lactosa", }, "id": "3d5a7bca-5b4a-49ee-87d2-cbe313562903", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/es/jsonapi/node/article/3d5a7bca-5b4a-49ee-87d2-cbe313562903?resourceVersion=id%3A22", }, }, "type": "node--article", }, - Object { - "attributes": Object { + { + "attributes": { "title": "El verdadero negocio para comprar en el supermercado", }, "id": "a1ef61c9-ed15-4b6d-bba2-bf6e5141f961", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/es/jsonapi/node/article/a1ef61c9-ed15-4b6d-bba2-bf6e5141f961?resourceVersion=id%3A24", }, }, "type": "node--article", }, - Object { - "attributes": Object { + { + "attributes": { "title": "Guía Umami de nuestras setas preferidas", }, "id": "ac0b8b56-db8d-4322-9b1e-224f22083f0d", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/es/jsonapi/node/article/ac0b8b56-db8d-4322-9b1e-224f22083f0d?resourceVersion=id%3A26", }, }, "type": "node--article", }, - Object { - "attributes": Object { + { + "attributes": { "title": "Un aplauso para las zanahorias", }, "id": "22874ecc-0443-441b-a3c9-3aa94d85b800", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/es/jsonapi/node/article/22874ecc-0443-441b-a3c9-3aa94d85b800?resourceVersion=id%3A28", }, }, "type": "node--article", }, - Object { - "attributes": Object { + { + "attributes": { "title": "Percances al hornear - nuestros consejos para solucionar los problemas", }, "id": "ec51b1de-f51e-4761-b061-aa2624e58b4a", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/es/jsonapi/node/article/ec51b1de-f51e-4761-b061-aa2624e58b4a?resourceVersion=id%3A30", }, }, "type": "node--article", }, - Object { - "attributes": Object { + { + "attributes": { "title": "Salta los espíritus con deliciosos cócteles sin alcohol", }, "id": "d5b9ef80-c0aa-45ca-88e7-79c28abe5d50", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/es/jsonapi/node/article/d5b9ef80-c0aa-45ca-88e7-79c28abe5d50?resourceVersion=id%3A32", }, }, "type": "node--article", }, - Object { - "attributes": Object { + { + "attributes": { "title": "Dale a tu avena el cambio de imagen definitivo", }, "id": "6c7c249f-cd1a-41d5-944b-b3bfce68b325", - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/es/jsonapi/node/article/6c7c249f-cd1a-41d5-944b-b3bfce68b325?resourceVersion=id%3A34", }, }, "type": "node--article", }, ], - "jsonapi": Object { - "meta": Object { - "links": Object { - "self": Object { + "jsonapi": { + "meta": { + "links": { + "self": { "href": "http://jsonapi.org/format/1.0/", }, }, }, "version": "1.0", }, - "links": Object { - "self": Object { + "links": { + "self": { "href": "https://tests.next-drupal.org/es/jsonapi/views/featured_articles/page_1?fields%5Bnode--article%5D=title", }, }, - "meta": Object { + "meta": { "count": 8, }, }, } `; -exports[`translatePath it translates a path 1`] = ` -Object { - "entity": Object { - "bundle": "recipe", - "canonical": "https://tests.next-drupal.org/en/recipes/deep-mediterranean-quiche", - "id": "1", - "langcode": "en", - "path": "/en/recipes/deep-mediterranean-quiche", - "type": "node", - "uuid": "71e04ead-4cc7-416c-b9ca-60b635fdc50f", - }, - "isHomePath": false, - "jsonapi": Object { - "basePath": "/en/jsonapi", - "entryPoint": "https://tests.next-drupal.org/en/jsonapi", - "individual": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f", - "pathPrefix": "en/jsonapi", - "resourceName": "node--recipe", - }, - "label": "Deep mediterranean quiche - edited", - "meta": Object { - "deprecated": Object { - "jsonapi.pathPrefix": "This property has been deprecated and will be removed in the next version of Decoupled Router. Use basePath instead.", - }, - }, - "resolved": "https://tests.next-drupal.org/en/recipes/deep-mediterranean-quiche", -} -`; - -exports[`translatePathFromContext it translates a path 1`] = ` -Object { - "entity": Object { - "bundle": "recipe", - "canonical": "https://tests.next-drupal.org/en/recipes/deep-mediterranean-quiche", - "id": "1", - "langcode": "en", - "path": "/en/recipes/deep-mediterranean-quiche", - "type": "node", - "uuid": "71e04ead-4cc7-416c-b9ca-60b635fdc50f", - }, - "isHomePath": false, - "jsonapi": Object { - "basePath": "/en/jsonapi", - "entryPoint": "https://tests.next-drupal.org/en/jsonapi", - "individual": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f", - "pathPrefix": "en/jsonapi", - "resourceName": "node--recipe", - }, - "label": "Deep mediterranean quiche - edited", - "meta": Object { - "deprecated": Object { - "jsonapi.pathPrefix": "This property has been deprecated and will be removed in the next version of Decoupled Router. Use basePath instead.", - }, - }, - "resolved": "https://tests.next-drupal.org/en/recipes/deep-mediterranean-quiche", -} -`; - -exports[`translatePathFromContext it translates a path with pathPrefix 1`] = ` -Object { - "entity": Object { +exports[`translatePath() translates a path 1`] = ` +{ + "entity": { "bundle": "recipe", "canonical": "https://tests.next-drupal.org/en/recipes/deep-mediterranean-quiche", "id": "1", @@ -7011,7 +5294,7 @@ Object { "uuid": "71e04ead-4cc7-416c-b9ca-60b635fdc50f", }, "isHomePath": false, - "jsonapi": Object { + "jsonapi": { "basePath": "/en/jsonapi", "entryPoint": "https://tests.next-drupal.org/en/jsonapi", "individual": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f", @@ -7019,8 +5302,8 @@ Object { "resourceName": "node--recipe", }, "label": "Deep mediterranean quiche - edited", - "meta": Object { - "deprecated": Object { + "meta": { + "deprecated": { "jsonapi.pathPrefix": "This property has been deprecated and will be removed in the next version of Decoupled Router. Use basePath instead.", }, }, diff --git a/packages/next-drupal/tests/DrupalClient/__snapshots__/pages-router-methods.test.ts.snap b/packages/next-drupal/tests/DrupalClient/__snapshots__/pages-router-methods.test.ts.snap new file mode 100644 index 00000000..03312b32 --- /dev/null +++ b/packages/next-drupal/tests/DrupalClient/__snapshots__/pages-router-methods.test.ts.snap @@ -0,0 +1,2255 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`getPathFromContext() encodes path with punctuation 1`] = ` +{ + "entity": { + "bundle": "page", + "canonical": "https://tests.next-drupal.org/en/path%26with%5Epunc%26in%24path", + "id": "20", + "langcode": "en", + "path": "/en/path%26with%5Epunc%26in%24path", + "type": "node", + "uuid": "e4bbe727-14ee-44bc-a34a-14ce5c86a82e", + }, + "isHomePath": false, + "jsonapi": { + "basePath": "/en/jsonapi", + "entryPoint": "https://tests.next-drupal.org/en/jsonapi", + "individual": "https://tests.next-drupal.org/en/jsonapi/node/page/e4bbe727-14ee-44bc-a34a-14ce5c86a82e", + "pathPrefix": "en/jsonapi", + "resourceName": "node--page", + }, + "label": "Page with characters in path", + "meta": { + "deprecated": { + "jsonapi.pathPrefix": "This property has been deprecated and will be removed in the next version of Decoupled Router. Use basePath instead.", + }, + }, + "resolved": "https://tests.next-drupal.org/en/path%26with%5Epunc%26in%24path", +} +`; + +exports[`getResourceCollectionFromContext() fetches a resource collection 1`] = ` +[ + { + "id": "52837ad0-f218-46bd-a106-5710336b7053", + "links": { + "self": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/article/52837ad0-f218-46bd-a106-5710336b7053?resourceVersion=id%3A20", + }, + }, + "title": "Give it a go and grow your own herbs", + "type": "node--article", + }, + { + "id": "3d5a7bca-5b4a-49ee-87d2-cbe313562903", + "links": { + "self": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/article/3d5a7bca-5b4a-49ee-87d2-cbe313562903?resourceVersion=id%3A22", + }, + }, + "title": "Dairy-free and delicious milk chocolate", + "type": "node--article", + }, + { + "id": "a1ef61c9-ed15-4b6d-bba2-bf6e5141f961", + "links": { + "self": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/article/a1ef61c9-ed15-4b6d-bba2-bf6e5141f961?resourceVersion=id%3A24", + }, + }, + "title": "The real deal for supermarket savvy shopping", + "type": "node--article", + }, + { + "id": "ac0b8b56-db8d-4322-9b1e-224f22083f0d", + "links": { + "self": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/article/ac0b8b56-db8d-4322-9b1e-224f22083f0d?resourceVersion=id%3A26", + }, + }, + "title": "The Umami guide to our favorite mushrooms", + "type": "node--article", + }, + { + "id": "22874ecc-0443-441b-a3c9-3aa94d85b800", + "links": { + "self": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/article/22874ecc-0443-441b-a3c9-3aa94d85b800?resourceVersion=id%3A28", + }, + }, + "title": "Let's hear it for carrots", + "type": "node--article", + }, + { + "id": "ec51b1de-f51e-4761-b061-aa2624e58b4a", + "links": { + "self": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/article/ec51b1de-f51e-4761-b061-aa2624e58b4a?resourceVersion=id%3A30", + }, + }, + "title": "Baking mishaps - our troubleshooting tips", + "type": "node--article", + }, + { + "id": "d5b9ef80-c0aa-45ca-88e7-79c28abe5d50", + "links": { + "self": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/article/d5b9ef80-c0aa-45ca-88e7-79c28abe5d50?resourceVersion=id%3A32", + }, + }, + "title": "Skip the spirits with delicious mocktails", + "type": "node--article", + }, + { + "id": "6c7c249f-cd1a-41d5-944b-b3bfce68b325", + "links": { + "self": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/article/6c7c249f-cd1a-41d5-944b-b3bfce68b325?resourceVersion=id%3A34", + }, + }, + "title": "Give your oatmeal the ultimate makeover", + "type": "node--article", + }, +] +`; + +exports[`getResourceCollectionFromContext() fetches a resource collection using locale 1`] = ` +[ + { + "id": "52837ad0-f218-46bd-a106-5710336b7053", + "langcode": "es", + "links": { + "self": { + "href": "https://tests.next-drupal.org/es/jsonapi/node/article/52837ad0-f218-46bd-a106-5710336b7053?resourceVersion=id%3A20", + }, + }, + "title": "Prueba y cultiva tus propias hierbas", + "type": "node--article", + }, + { + "id": "3d5a7bca-5b4a-49ee-87d2-cbe313562903", + "langcode": "es", + "links": { + "self": { + "href": "https://tests.next-drupal.org/es/jsonapi/node/article/3d5a7bca-5b4a-49ee-87d2-cbe313562903?resourceVersion=id%3A22", + }, + }, + "title": "Delicioso chocolate sin lactosa", + "type": "node--article", + }, + { + "id": "a1ef61c9-ed15-4b6d-bba2-bf6e5141f961", + "langcode": "es", + "links": { + "self": { + "href": "https://tests.next-drupal.org/es/jsonapi/node/article/a1ef61c9-ed15-4b6d-bba2-bf6e5141f961?resourceVersion=id%3A24", + }, + }, + "title": "El verdadero negocio para comprar en el supermercado", + "type": "node--article", + }, + { + "id": "ac0b8b56-db8d-4322-9b1e-224f22083f0d", + "langcode": "es", + "links": { + "self": { + "href": "https://tests.next-drupal.org/es/jsonapi/node/article/ac0b8b56-db8d-4322-9b1e-224f22083f0d?resourceVersion=id%3A26", + }, + }, + "title": "Guía Umami de nuestras setas preferidas", + "type": "node--article", + }, + { + "id": "22874ecc-0443-441b-a3c9-3aa94d85b800", + "langcode": "es", + "links": { + "self": { + "href": "https://tests.next-drupal.org/es/jsonapi/node/article/22874ecc-0443-441b-a3c9-3aa94d85b800?resourceVersion=id%3A28", + }, + }, + "title": "Un aplauso para las zanahorias", + "type": "node--article", + }, + { + "id": "ec51b1de-f51e-4761-b061-aa2624e58b4a", + "langcode": "es", + "links": { + "self": { + "href": "https://tests.next-drupal.org/es/jsonapi/node/article/ec51b1de-f51e-4761-b061-aa2624e58b4a?resourceVersion=id%3A30", + }, + }, + "title": "Percances al hornear - nuestros consejos para solucionar los problemas", + "type": "node--article", + }, + { + "id": "d5b9ef80-c0aa-45ca-88e7-79c28abe5d50", + "langcode": "es", + "links": { + "self": { + "href": "https://tests.next-drupal.org/es/jsonapi/node/article/d5b9ef80-c0aa-45ca-88e7-79c28abe5d50?resourceVersion=id%3A32", + }, + }, + "title": "Salta los espíritus con deliciosos cócteles sin alcohol", + "type": "node--article", + }, + { + "id": "6c7c249f-cd1a-41d5-944b-b3bfce68b325", + "langcode": "es", + "links": { + "self": { + "href": "https://tests.next-drupal.org/es/jsonapi/node/article/6c7c249f-cd1a-41d5-944b-b3bfce68b325?resourceVersion=id%3A34", + }, + }, + "title": "Dale a tu avena el cambio de imagen definitivo", + "type": "node--article", + }, +] +`; + +exports[`getResourceCollectionFromContext() fetches raw data 1`] = ` +{ + "data": [ + { + "attributes": { + "title": "Vegan chocolate and nut brownies", + }, + "id": "7862d283-ece2-4ae1-8bef-865259f72315", + "links": { + "self": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/7862d283-ece2-4ae1-8bef-865259f72315?resourceVersion=id%3A4", + }, + }, + "type": "node--recipe", + }, + { + "attributes": { + "title": "Super easy vegetarian pasta bake", + }, + "id": "8d4b237f-f6fe-4bb1-95ef-f9e3b3f9d6b7", + "links": { + "self": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/8d4b237f-f6fe-4bb1-95ef-f9e3b3f9d6b7?resourceVersion=id%3A6", + }, + }, + "type": "node--recipe", + }, + ], + "jsonapi": { + "meta": { + "links": { + "self": { + "href": "http://jsonapi.org/format/1.0/", + }, + }, + }, + "version": "1.0", + }, + "links": { + "next": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe?fields%5Bnode--recipe%5D=title&page%5Boffset%5D=2&page%5Blimit%5D=2", + }, + "self": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe?fields%5Bnode--recipe%5D=title&page%5Blimit%5D=2", + }, + }, +} +`; + +exports[`getResourceFromContext() accepts a translated path 1`] = ` +{ + "id": "71e04ead-4cc7-416c-b9ca-60b635fdc50f", + "links": { + "self": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f?resourceVersion=id%3A37", + }, + }, + "path": { + "alias": "/recipes/deep-mediterranean-quiche", + "langcode": "en", + "pid": 67, + }, + "status": true, + "title": "Deep mediterranean quiche - edited", + "type": "node--recipe", +} +`; + +exports[`getResourceFromContext() fetches a resource from context 1`] = ` +{ + "changed": "2022-03-25T08:02:17+00:00", + "content_translation_outdated": false, + "content_translation_source": "und", + "created": "2022-03-21T10:52:42+00:00", + "default_langcode": true, + "drupal_internal__nid": 1, + "drupal_internal__vid": 37, + "field_cooking_time": 30, + "field_difficulty": "medium", + "field_ingredients": [ + "For the pastry:", + "280g plain flour", + "140g butter", + "Cold water", + "For the filling:", + "1 onion", + "2 garlic cloves", + "Half a courgette", + "450ml soya milk", + "500g grated parmesan", + "2 eggs", + "200g sun dried tomatoes", + "100g feta", + ], + "field_media_image": { + "id": "bbfe9d97-2da2-432b-a22c-0396c08e06ca", + "resourceIdObjMeta": { + "drupal_internal__target_id": 1, + }, + "type": "media--image", + }, + "field_number_of_servings": 8, + "field_preparation_time": 40, + "field_recipe_category": [ + { + "id": "a6c02fe4-67bf-462c-90cb-32281a07efe4", + "resourceIdObjMeta": { + "drupal_internal__target_id": 31, + }, + "type": "taxonomy_term--recipe_category", + }, + ], + "field_recipe_instruction": { + "format": "basic_html", + "processed": "

  1. Preheat the oven to 400°F/200°C. Starting with the pastry; rub the flour and butter together in a bowl until crumbling like breadcrumbs. Add water, a little at a time, until it forms a dough.
  2. +
  3. Roll out the pastry on a floured board and gently spread over your tin. Place in the fridge for 20 minutes before blind baking for a further 10.
  4. +
  5. Whilst the pastry is cooling, chop and gently cook the onions, garlic and courgette.
  6. +
  7. In a large bowl, add the soya milk, half the parmesan, and the eggs. Gently mix.
  8. +
  9. Once the pastry is cooked, spread the onions, garlic and sun dried tomatoes over the base and pour the eggs mix over. Sprinkle the remaining parmesan and careful lay the feta over the top. Bake for 30 minutes or until golden brown.
  10. +
", + "value": "
    +
  1. Preheat the oven to 400°F/200°C. Starting with the pastry; rub the flour and butter together in a bowl until crumbling like breadcrumbs. Add water, a little at a time, until it forms a dough.
  2. +
  3. Roll out the pastry on a floured board and gently spread over your tin. Place in the fridge for 20 minutes before blind baking for a further 10.
  4. +
  5. Whilst the pastry is cooling, chop and gently cook the onions, garlic and courgette.
  6. +
  7. In a large bowl, add the soya milk, half the parmesan, and the eggs. Gently mix.
  8. +
  9. Once the pastry is cooked, spread the onions, garlic and sun dried tomatoes over the base and pour the eggs mix over. Sprinkle the remaining parmesan and careful lay the feta over the top. Bake for 30 minutes or until golden brown.
  10. +
+", + }, + "field_summary": { + "format": "basic_html", + "processed": "

An Italian inspired quiche with sun dried tomatoes and courgette. A perfect light meal for a summer's day.

+", + "value": "

An Italian inspired quiche with sun dried tomatoes and courgette. A perfect light meal for a summer's day.

+", + }, + "field_tags": [ + { + "id": "46258827-cfad-4813-99dc-287c4cb41117", + "resourceIdObjMeta": { + "drupal_internal__target_id": 22, + }, + "type": "taxonomy_term--tags", + }, + { + "id": "f32a4d84-0568-4bfd-8be3-8217d36efb6d", + "resourceIdObjMeta": { + "drupal_internal__target_id": 13, + }, + "type": "taxonomy_term--tags", + }, + ], + "id": "71e04ead-4cc7-416c-b9ca-60b635fdc50f", + "langcode": "en", + "links": { + "self": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f?resourceVersion=id%3A37", + }, + }, + "moderation_state": "published", + "node_type": { + "id": "9b70a287-cade-454f-be8b-dea7b9a37c7a", + "resourceIdObjMeta": { + "drupal_internal__target_id": "recipe", + }, + "type": "node_type--node_type", + }, + "path": { + "alias": "/recipes/deep-mediterranean-quiche", + "langcode": "en", + "pid": 67, + }, + "promote": true, + "relationshipNames": [ + "node_type", + "revision_uid", + "uid", + "field_media_image", + "field_recipe_category", + "field_tags", + ], + "revision_log": null, + "revision_timestamp": "2022-03-25T08:02:17+00:00", + "revision_translation_affected": true, + "revision_uid": { + "id": "365cc7b5-ddc4-4b3b-939e-1494400aab4a", + "resourceIdObjMeta": { + "drupal_internal__target_id": 1, + }, + "type": "user--user", + }, + "status": true, + "sticky": false, + "title": "Deep mediterranean quiche - edited", + "type": "node--recipe", + "uid": { + "id": "9e4944e8-dd77-407a-8610-83e823b48b56", + "resourceIdObjMeta": { + "drupal_internal__target_id": 4, + }, + "type": "user--user", + }, +} +`; + +exports[`getResourceFromContext() fetches a resource from context using locale 1`] = ` +{ + "field_cooking_time": 30, + "id": "71e04ead-4cc7-416c-b9ca-60b635fdc50f", + "links": { + "self": { + "href": "https://tests.next-drupal.org/es/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f?resourceVersion=id%3A37", + }, + }, + "title": "Quiche mediterráneo profundo", + "type": "node--recipe", +} +`; + +exports[`getResourceFromContext() fetches a resource from context with params 1`] = ` +{ + "id": "71e04ead-4cc7-416c-b9ca-60b635fdc50f", + "links": { + "self": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f?resourceVersion=id%3A37", + }, + }, + "title": "Deep mediterranean quiche - edited", + "type": "node--recipe", +} +`; + +exports[`getResourceFromContext() fetches raw data 1`] = ` +{ + "data": { + "attributes": { + "title": "Deep mediterranean quiche - edited", + }, + "id": "71e04ead-4cc7-416c-b9ca-60b635fdc50f", + "links": { + "self": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f?resourceVersion=id%3A37", + }, + }, + "type": "node--recipe", + }, + "jsonapi": { + "meta": { + "links": { + "self": { + "href": "http://jsonapi.org/format/1.0/", + }, + }, + }, + "version": "1.0", + }, + "links": { + "self": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f?fields%5Bnode--recipe%5D=title&resourceVersion=rel%3Alatest-version", + }, + }, +} +`; + +exports[`getStaticPathsFromContext() returns static paths for multiple resource types from context 1`] = ` +[ + { + "locale": "en", + "params": { + "slug": [ + "articles", + "give-it-a-go-and-grow-your-own-herbs", + ], + }, + }, + { + "locale": "en", + "params": { + "slug": [ + "articles", + "dairy-free-and-delicious-milk-chocolate", + ], + }, + }, + { + "locale": "en", + "params": { + "slug": [ + "articles", + "the-real-deal-for-supermarket-savvy-shopping", + ], + }, + }, + { + "locale": "en", + "params": { + "slug": [ + "articles", + "the-umami-guide-to-our-favourite-mushrooms", + ], + }, + }, + { + "locale": "en", + "params": { + "slug": [ + "articles", + "lets-hear-it-for-carrots", + ], + }, + }, + { + "locale": "en", + "params": { + "slug": [ + "articles", + "baking-mishaps-our-troubleshooting-tips", + ], + }, + }, + { + "locale": "en", + "params": { + "slug": [ + "articles", + "skip-the-spirits-with-delicious-mocktails", + ], + }, + }, + { + "locale": "en", + "params": { + "slug": [ + "articles", + "give-your-oatmeal-the-ultimate-makeover", + ], + }, + }, + { + "locale": "es", + "params": { + "slug": [ + "articles", + "prueba-y-cultiva-tus-propias-hierbas", + ], + }, + }, + { + "locale": "es", + "params": { + "slug": [ + "articles", + "delicioso-chocolate-sin-lactosa", + ], + }, + }, + { + "locale": "es", + "params": { + "slug": [ + "articles", + "el-verdadeo-negocio-para-comprar-en-el-supermercado", + ], + }, + }, + { + "locale": "es", + "params": { + "slug": [ + "articles", + "guia-umami-de-nuestras-setas-preferidas", + ], + }, + }, + { + "locale": "es", + "params": { + "slug": [ + "articles", + "un-aplauso-para-las-zanahorias", + ], + }, + }, + { + "locale": "es", + "params": { + "slug": [ + "articles", + "percances-al-hornear-nuestros-consejos-para-solucionar-problemas", + ], + }, + }, + { + "locale": "es", + "params": { + "slug": [ + "articles", + "salta-los-espiritus-con-deliciosos-cocteles-sin-alcohol", + ], + }, + }, + { + "locale": "es", + "params": { + "slug": [ + "articles", + "dale-a-tu-avena-el-cambio-de-imagen-definitivo", + ], + }, + }, + { + "locale": "en", + "params": { + "slug": [ + "recipes", + "vegan-chocolate-and-nut-brownies", + ], + }, + }, + { + "locale": "en", + "params": { + "slug": [ + "recipes", + "super-easy-vegetarian-pasta-bake", + ], + }, + }, + { + "locale": "en", + "params": { + "slug": [ + "recipes", + "watercress-soup", + ], + }, + }, + { + "locale": "en", + "params": { + "slug": [ + "recipes", + "victoria-sponge-cake", + ], + }, + }, + { + "locale": "en", + "params": { + "slug": [ + "recipes", + "gluten-free-pizza", + ], + }, + }, + { + "locale": "en", + "params": { + "slug": [ + "recipes", + "thai-green-curry", + ], + }, + }, + { + "locale": "en", + "params": { + "slug": [ + "recipes", + "crema-catalana", + ], + }, + }, + { + "locale": "en", + "params": { + "slug": [ + "recipes", + "fiery-chili-sauce", + ], + }, + }, + { + "locale": "en", + "params": { + "slug": [ + "recipes", + "deep-mediterranean-quiche", + ], + }, + }, + { + "locale": "es", + "params": { + "slug": [ + "recipes", + "bizcochos-veganos-de-chocolate-y-nueces", + ], + }, + }, + { + "locale": "es", + "params": { + "slug": [ + "recipes", + "pasta-vegetariana-horno-super-facil", + ], + }, + }, + { + "locale": "es", + "params": { + "slug": [ + "recipes", + "sopa-de-berro", + ], + }, + }, + { + "locale": "es", + "params": { + "slug": [ + "recipes", + "pastel-victoria", + ], + }, + }, + { + "locale": "es", + "params": { + "slug": [ + "recipes", + "pizza-sin-gluten", + ], + }, + }, + { + "locale": "es", + "params": { + "slug": [ + "recipes", + "curry-verde-tailandes", + ], + }, + }, + { + "locale": "es", + "params": { + "slug": [ + "recipes", + "crema-catalana", + ], + }, + }, + { + "locale": "es", + "params": { + "slug": [ + "recipes", + "salsa-de-chile-ardiente", + ], + }, + }, + { + "locale": "es", + "params": { + "slug": [ + "recipes", + "quiche-mediterráneo-profundo", + ], + }, + }, +] +`; + +exports[`getStaticPathsFromContext() returns static paths from context 1`] = ` +[ + { + "params": { + "slug": [ + "articles", + "give-it-a-go-and-grow-your-own-herbs", + ], + }, + }, + { + "params": { + "slug": [ + "articles", + "dairy-free-and-delicious-milk-chocolate", + ], + }, + }, + { + "params": { + "slug": [ + "articles", + "the-real-deal-for-supermarket-savvy-shopping", + ], + }, + }, + { + "params": { + "slug": [ + "articles", + "the-umami-guide-to-our-favourite-mushrooms", + ], + }, + }, + { + "params": { + "slug": [ + "articles", + "lets-hear-it-for-carrots", + ], + }, + }, + { + "params": { + "slug": [ + "articles", + "baking-mishaps-our-troubleshooting-tips", + ], + }, + }, + { + "params": { + "slug": [ + "articles", + "skip-the-spirits-with-delicious-mocktails", + ], + }, + }, + { + "params": { + "slug": [ + "articles", + "give-your-oatmeal-the-ultimate-makeover", + ], + }, + }, +] +`; + +exports[`getStaticPathsFromContext() returns static paths from context with locale 1`] = ` +[ + { + "locale": "en", + "params": { + "slug": [ + "articles", + "give-it-a-go-and-grow-your-own-herbs", + ], + }, + }, + { + "locale": "en", + "params": { + "slug": [ + "articles", + "dairy-free-and-delicious-milk-chocolate", + ], + }, + }, + { + "locale": "en", + "params": { + "slug": [ + "articles", + "the-real-deal-for-supermarket-savvy-shopping", + ], + }, + }, + { + "locale": "en", + "params": { + "slug": [ + "articles", + "the-umami-guide-to-our-favourite-mushrooms", + ], + }, + }, + { + "locale": "en", + "params": { + "slug": [ + "articles", + "lets-hear-it-for-carrots", + ], + }, + }, + { + "locale": "en", + "params": { + "slug": [ + "articles", + "baking-mishaps-our-troubleshooting-tips", + ], + }, + }, + { + "locale": "en", + "params": { + "slug": [ + "articles", + "skip-the-spirits-with-delicious-mocktails", + ], + }, + }, + { + "locale": "en", + "params": { + "slug": [ + "articles", + "give-your-oatmeal-the-ultimate-makeover", + ], + }, + }, + { + "locale": "es", + "params": { + "slug": [ + "articles", + "prueba-y-cultiva-tus-propias-hierbas", + ], + }, + }, + { + "locale": "es", + "params": { + "slug": [ + "articles", + "delicioso-chocolate-sin-lactosa", + ], + }, + }, + { + "locale": "es", + "params": { + "slug": [ + "articles", + "el-verdadeo-negocio-para-comprar-en-el-supermercado", + ], + }, + }, + { + "locale": "es", + "params": { + "slug": [ + "articles", + "guia-umami-de-nuestras-setas-preferidas", + ], + }, + }, + { + "locale": "es", + "params": { + "slug": [ + "articles", + "un-aplauso-para-las-zanahorias", + ], + }, + }, + { + "locale": "es", + "params": { + "slug": [ + "articles", + "percances-al-hornear-nuestros-consejos-para-solucionar-problemas", + ], + }, + }, + { + "locale": "es", + "params": { + "slug": [ + "articles", + "salta-los-espiritus-con-deliciosos-cocteles-sin-alcohol", + ], + }, + }, + { + "locale": "es", + "params": { + "slug": [ + "articles", + "dale-a-tu-avena-el-cambio-de-imagen-definitivo", + ], + }, + }, +] +`; + +exports[`getStaticPathsFromContext() returns static paths from context with params 1`] = ` +[ + { + "params": { + "slug": [ + "articles", + "give-it-a-go-and-grow-your-own-herbs", + ], + }, + }, + { + "params": { + "slug": [ + "articles", + "dairy-free-and-delicious-milk-chocolate", + ], + }, + }, + { + "params": { + "slug": [ + "articles", + "the-real-deal-for-supermarket-savvy-shopping", + ], + }, + }, + { + "params": { + "slug": [ + "articles", + "the-umami-guide-to-our-favourite-mushrooms", + ], + }, + }, + { + "params": { + "slug": [ + "articles", + "lets-hear-it-for-carrots", + ], + }, + }, + { + "params": { + "slug": [ + "articles", + "baking-mishaps-our-troubleshooting-tips", + ], + }, + }, + { + "params": { + "slug": [ + "articles", + "skip-the-spirits-with-delicious-mocktails", + ], + }, + }, + { + "params": { + "slug": [ + "articles", + "give-your-oatmeal-the-ultimate-makeover", + ], + }, + }, +] +`; + +exports[`translatePathFromContext() translates a path 1`] = ` +{ + "entity": { + "bundle": "recipe", + "canonical": "https://tests.next-drupal.org/en/recipes/deep-mediterranean-quiche", + "id": "1", + "langcode": "en", + "path": "/en/recipes/deep-mediterranean-quiche", + "type": "node", + "uuid": "71e04ead-4cc7-416c-b9ca-60b635fdc50f", + }, + "isHomePath": false, + "jsonapi": { + "basePath": "/en/jsonapi", + "entryPoint": "https://tests.next-drupal.org/en/jsonapi", + "individual": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f", + "pathPrefix": "en/jsonapi", + "resourceName": "node--recipe", + }, + "label": "Deep mediterranean quiche - edited", + "meta": { + "deprecated": { + "jsonapi.pathPrefix": "This property has been deprecated and will be removed in the next version of Decoupled Router. Use basePath instead.", + }, + }, + "resolved": "https://tests.next-drupal.org/en/recipes/deep-mediterranean-quiche", +} +`; + +exports[`translatePathFromContext() translates a path with pathPrefix 1`] = ` +{ + "entity": { + "bundle": "recipe", + "canonical": "https://tests.next-drupal.org/en/recipes/deep-mediterranean-quiche", + "id": "1", + "langcode": "en", + "path": "/en/recipes/deep-mediterranean-quiche", + "type": "node", + "uuid": "71e04ead-4cc7-416c-b9ca-60b635fdc50f", + }, + "isHomePath": false, + "jsonapi": { + "basePath": "/en/jsonapi", + "entryPoint": "https://tests.next-drupal.org/en/jsonapi", + "individual": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f", + "pathPrefix": "en/jsonapi", + "resourceName": "node--recipe", + }, + "label": "Deep mediterranean quiche - edited", + "meta": { + "deprecated": { + "jsonapi.pathPrefix": "This property has been deprecated and will be removed in the next version of Decoupled Router. Use basePath instead.", + }, + }, + "resolved": "https://tests.next-drupal.org/en/recipes/deep-mediterranean-quiche", +} +`; + +exports[`getPathFromContext() encodes path with punctuation 1`] = ` +{ + "entity": { + "bundle": "page", + "canonical": "https://tests.next-drupal.org/en/path%26with%5Epunc%26in%24path", + "id": "20", + "langcode": "en", + "path": "/en/path%26with%5Epunc%26in%24path", + "type": "node", + "uuid": "e4bbe727-14ee-44bc-a34a-14ce5c86a82e", + }, + "isHomePath": false, + "jsonapi": { + "basePath": "/en/jsonapi", + "entryPoint": "https://tests.next-drupal.org/en/jsonapi", + "individual": "https://tests.next-drupal.org/en/jsonapi/node/page/e4bbe727-14ee-44bc-a34a-14ce5c86a82e", + "pathPrefix": "en/jsonapi", + "resourceName": "node--page", + }, + "label": "Page with characters in path", + "meta": { + "deprecated": { + "jsonapi.pathPrefix": "This property has been deprecated and will be removed in the next version of Decoupled Router. Use basePath instead.", + }, + }, + "resolved": "https://tests.next-drupal.org/en/path%26with%5Epunc%26in%24path", +} +`; + +exports[`getResourceCollectionFromContext() fetches a resource collection 1`] = ` +[ + { + "id": "52837ad0-f218-46bd-a106-5710336b7053", + "links": { + "self": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/article/52837ad0-f218-46bd-a106-5710336b7053?resourceVersion=id%3A20", + }, + }, + "title": "Give it a go and grow your own herbs", + "type": "node--article", + }, + { + "id": "3d5a7bca-5b4a-49ee-87d2-cbe313562903", + "links": { + "self": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/article/3d5a7bca-5b4a-49ee-87d2-cbe313562903?resourceVersion=id%3A22", + }, + }, + "title": "Dairy-free and delicious milk chocolate", + "type": "node--article", + }, + { + "id": "a1ef61c9-ed15-4b6d-bba2-bf6e5141f961", + "links": { + "self": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/article/a1ef61c9-ed15-4b6d-bba2-bf6e5141f961?resourceVersion=id%3A24", + }, + }, + "title": "The real deal for supermarket savvy shopping", + "type": "node--article", + }, + { + "id": "ac0b8b56-db8d-4322-9b1e-224f22083f0d", + "links": { + "self": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/article/ac0b8b56-db8d-4322-9b1e-224f22083f0d?resourceVersion=id%3A26", + }, + }, + "title": "The Umami guide to our favorite mushrooms", + "type": "node--article", + }, + { + "id": "22874ecc-0443-441b-a3c9-3aa94d85b800", + "links": { + "self": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/article/22874ecc-0443-441b-a3c9-3aa94d85b800?resourceVersion=id%3A28", + }, + }, + "title": "Let's hear it for carrots", + "type": "node--article", + }, + { + "id": "ec51b1de-f51e-4761-b061-aa2624e58b4a", + "links": { + "self": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/article/ec51b1de-f51e-4761-b061-aa2624e58b4a?resourceVersion=id%3A30", + }, + }, + "title": "Baking mishaps - our troubleshooting tips", + "type": "node--article", + }, + { + "id": "d5b9ef80-c0aa-45ca-88e7-79c28abe5d50", + "links": { + "self": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/article/d5b9ef80-c0aa-45ca-88e7-79c28abe5d50?resourceVersion=id%3A32", + }, + }, + "title": "Skip the spirits with delicious mocktails", + "type": "node--article", + }, + { + "id": "6c7c249f-cd1a-41d5-944b-b3bfce68b325", + "links": { + "self": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/article/6c7c249f-cd1a-41d5-944b-b3bfce68b325?resourceVersion=id%3A34", + }, + }, + "title": "Give your oatmeal the ultimate makeover", + "type": "node--article", + }, +] +`; + +exports[`getResourceCollectionFromContext() fetches a resource collection using locale 1`] = ` +[ + { + "id": "52837ad0-f218-46bd-a106-5710336b7053", + "langcode": "es", + "links": { + "self": { + "href": "https://tests.next-drupal.org/es/jsonapi/node/article/52837ad0-f218-46bd-a106-5710336b7053?resourceVersion=id%3A20", + }, + }, + "title": "Prueba y cultiva tus propias hierbas", + "type": "node--article", + }, + { + "id": "3d5a7bca-5b4a-49ee-87d2-cbe313562903", + "langcode": "es", + "links": { + "self": { + "href": "https://tests.next-drupal.org/es/jsonapi/node/article/3d5a7bca-5b4a-49ee-87d2-cbe313562903?resourceVersion=id%3A22", + }, + }, + "title": "Delicioso chocolate sin lactosa", + "type": "node--article", + }, + { + "id": "a1ef61c9-ed15-4b6d-bba2-bf6e5141f961", + "langcode": "es", + "links": { + "self": { + "href": "https://tests.next-drupal.org/es/jsonapi/node/article/a1ef61c9-ed15-4b6d-bba2-bf6e5141f961?resourceVersion=id%3A24", + }, + }, + "title": "El verdadero negocio para comprar en el supermercado", + "type": "node--article", + }, + { + "id": "ac0b8b56-db8d-4322-9b1e-224f22083f0d", + "langcode": "es", + "links": { + "self": { + "href": "https://tests.next-drupal.org/es/jsonapi/node/article/ac0b8b56-db8d-4322-9b1e-224f22083f0d?resourceVersion=id%3A26", + }, + }, + "title": "Guía Umami de nuestras setas preferidas", + "type": "node--article", + }, + { + "id": "22874ecc-0443-441b-a3c9-3aa94d85b800", + "langcode": "es", + "links": { + "self": { + "href": "https://tests.next-drupal.org/es/jsonapi/node/article/22874ecc-0443-441b-a3c9-3aa94d85b800?resourceVersion=id%3A28", + }, + }, + "title": "Un aplauso para las zanahorias", + "type": "node--article", + }, + { + "id": "ec51b1de-f51e-4761-b061-aa2624e58b4a", + "langcode": "es", + "links": { + "self": { + "href": "https://tests.next-drupal.org/es/jsonapi/node/article/ec51b1de-f51e-4761-b061-aa2624e58b4a?resourceVersion=id%3A30", + }, + }, + "title": "Percances al hornear - nuestros consejos para solucionar los problemas", + "type": "node--article", + }, + { + "id": "d5b9ef80-c0aa-45ca-88e7-79c28abe5d50", + "langcode": "es", + "links": { + "self": { + "href": "https://tests.next-drupal.org/es/jsonapi/node/article/d5b9ef80-c0aa-45ca-88e7-79c28abe5d50?resourceVersion=id%3A32", + }, + }, + "title": "Salta los espíritus con deliciosos cócteles sin alcohol", + "type": "node--article", + }, + { + "id": "6c7c249f-cd1a-41d5-944b-b3bfce68b325", + "langcode": "es", + "links": { + "self": { + "href": "https://tests.next-drupal.org/es/jsonapi/node/article/6c7c249f-cd1a-41d5-944b-b3bfce68b325?resourceVersion=id%3A34", + }, + }, + "title": "Dale a tu avena el cambio de imagen definitivo", + "type": "node--article", + }, +] +`; + +exports[`getResourceCollectionFromContext() fetches raw data 1`] = ` +{ + "data": [ + { + "attributes": { + "title": "Vegan chocolate and nut brownies", + }, + "id": "7862d283-ece2-4ae1-8bef-865259f72315", + "links": { + "self": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/7862d283-ece2-4ae1-8bef-865259f72315?resourceVersion=id%3A4", + }, + }, + "type": "node--recipe", + }, + { + "attributes": { + "title": "Super easy vegetarian pasta bake", + }, + "id": "8d4b237f-f6fe-4bb1-95ef-f9e3b3f9d6b7", + "links": { + "self": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/8d4b237f-f6fe-4bb1-95ef-f9e3b3f9d6b7?resourceVersion=id%3A6", + }, + }, + "type": "node--recipe", + }, + ], + "jsonapi": { + "meta": { + "links": { + "self": { + "href": "http://jsonapi.org/format/1.0/", + }, + }, + }, + "version": "1.0", + }, + "links": { + "next": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe?fields%5Bnode--recipe%5D=title&page%5Boffset%5D=2&page%5Blimit%5D=2", + }, + "self": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe?fields%5Bnode--recipe%5D=title&page%5Blimit%5D=2", + }, + }, +} +`; + +exports[`getResourceFromContext() accepts a translated path 1`] = ` +{ + "id": "71e04ead-4cc7-416c-b9ca-60b635fdc50f", + "links": { + "self": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f?resourceVersion=id%3A37", + }, + }, + "path": { + "alias": "/recipes/deep-mediterranean-quiche", + "langcode": "en", + "pid": 67, + }, + "status": true, + "title": "Deep mediterranean quiche - edited", + "type": "node--recipe", +} +`; + +exports[`getResourceFromContext() fetches a resource from context 1`] = ` +{ + "changed": "2022-03-25T08:02:17+00:00", + "content_translation_outdated": false, + "content_translation_source": "und", + "created": "2022-03-21T10:52:42+00:00", + "default_langcode": true, + "drupal_internal__nid": 1, + "drupal_internal__vid": 37, + "field_cooking_time": 30, + "field_difficulty": "medium", + "field_ingredients": [ + "For the pastry:", + "280g plain flour", + "140g butter", + "Cold water", + "For the filling:", + "1 onion", + "2 garlic cloves", + "Half a courgette", + "450ml soya milk", + "500g grated parmesan", + "2 eggs", + "200g sun dried tomatoes", + "100g feta", + ], + "field_media_image": { + "id": "bbfe9d97-2da2-432b-a22c-0396c08e06ca", + "resourceIdObjMeta": { + "drupal_internal__target_id": 1, + }, + "type": "media--image", + }, + "field_number_of_servings": 8, + "field_preparation_time": 40, + "field_recipe_category": [ + { + "id": "a6c02fe4-67bf-462c-90cb-32281a07efe4", + "resourceIdObjMeta": { + "drupal_internal__target_id": 31, + }, + "type": "taxonomy_term--recipe_category", + }, + ], + "field_recipe_instruction": { + "format": "basic_html", + "processed": "
  1. Preheat the oven to 400°F/200°C. Starting with the pastry; rub the flour and butter together in a bowl until crumbling like breadcrumbs. Add water, a little at a time, until it forms a dough.
  2. +
  3. Roll out the pastry on a floured board and gently spread over your tin. Place in the fridge for 20 minutes before blind baking for a further 10.
  4. +
  5. Whilst the pastry is cooling, chop and gently cook the onions, garlic and courgette.
  6. +
  7. In a large bowl, add the soya milk, half the parmesan, and the eggs. Gently mix.
  8. +
  9. Once the pastry is cooked, spread the onions, garlic and sun dried tomatoes over the base and pour the eggs mix over. Sprinkle the remaining parmesan and careful lay the feta over the top. Bake for 30 minutes or until golden brown.
  10. +
", + "value": "
    +
  1. Preheat the oven to 400°F/200°C. Starting with the pastry; rub the flour and butter together in a bowl until crumbling like breadcrumbs. Add water, a little at a time, until it forms a dough.
  2. +
  3. Roll out the pastry on a floured board and gently spread over your tin. Place in the fridge for 20 minutes before blind baking for a further 10.
  4. +
  5. Whilst the pastry is cooling, chop and gently cook the onions, garlic and courgette.
  6. +
  7. In a large bowl, add the soya milk, half the parmesan, and the eggs. Gently mix.
  8. +
  9. Once the pastry is cooked, spread the onions, garlic and sun dried tomatoes over the base and pour the eggs mix over. Sprinkle the remaining parmesan and careful lay the feta over the top. Bake for 30 minutes or until golden brown.
  10. +
+", + }, + "field_summary": { + "format": "basic_html", + "processed": "

An Italian inspired quiche with sun dried tomatoes and courgette. A perfect light meal for a summer's day.

+", + "value": "

An Italian inspired quiche with sun dried tomatoes and courgette. A perfect light meal for a summer's day.

+", + }, + "field_tags": [ + { + "id": "46258827-cfad-4813-99dc-287c4cb41117", + "resourceIdObjMeta": { + "drupal_internal__target_id": 22, + }, + "type": "taxonomy_term--tags", + }, + { + "id": "f32a4d84-0568-4bfd-8be3-8217d36efb6d", + "resourceIdObjMeta": { + "drupal_internal__target_id": 13, + }, + "type": "taxonomy_term--tags", + }, + ], + "id": "71e04ead-4cc7-416c-b9ca-60b635fdc50f", + "langcode": "en", + "links": { + "self": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f?resourceVersion=id%3A37", + }, + }, + "moderation_state": "published", + "node_type": { + "id": "9b70a287-cade-454f-be8b-dea7b9a37c7a", + "resourceIdObjMeta": { + "drupal_internal__target_id": "recipe", + }, + "type": "node_type--node_type", + }, + "path": { + "alias": "/recipes/deep-mediterranean-quiche", + "langcode": "en", + "pid": 67, + }, + "promote": true, + "relationshipNames": [ + "node_type", + "revision_uid", + "uid", + "field_media_image", + "field_recipe_category", + "field_tags", + ], + "revision_log": null, + "revision_timestamp": "2022-03-25T08:02:17+00:00", + "revision_translation_affected": true, + "revision_uid": { + "id": "365cc7b5-ddc4-4b3b-939e-1494400aab4a", + "resourceIdObjMeta": { + "drupal_internal__target_id": 1, + }, + "type": "user--user", + }, + "status": true, + "sticky": false, + "title": "Deep mediterranean quiche - edited", + "type": "node--recipe", + "uid": { + "id": "9e4944e8-dd77-407a-8610-83e823b48b56", + "resourceIdObjMeta": { + "drupal_internal__target_id": 4, + }, + "type": "user--user", + }, +} +`; + +exports[`getResourceFromContext() fetches a resource from context using locale 1`] = ` +{ + "field_cooking_time": 30, + "id": "71e04ead-4cc7-416c-b9ca-60b635fdc50f", + "links": { + "self": { + "href": "https://tests.next-drupal.org/es/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f?resourceVersion=id%3A37", + }, + }, + "title": "Quiche mediterráneo profundo", + "type": "node--recipe", +} +`; + +exports[`getResourceFromContext() fetches a resource from context with params 1`] = ` +{ + "id": "71e04ead-4cc7-416c-b9ca-60b635fdc50f", + "links": { + "self": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f?resourceVersion=id%3A37", + }, + }, + "title": "Deep mediterranean quiche - edited", + "type": "node--recipe", +} +`; + +exports[`getResourceFromContext() fetches raw data 1`] = ` +{ + "data": { + "attributes": { + "title": "Deep mediterranean quiche - edited", + }, + "id": "71e04ead-4cc7-416c-b9ca-60b635fdc50f", + "links": { + "self": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f?resourceVersion=id%3A37", + }, + }, + "type": "node--recipe", + }, + "jsonapi": { + "meta": { + "links": { + "self": { + "href": "http://jsonapi.org/format/1.0/", + }, + }, + }, + "version": "1.0", + }, + "links": { + "self": { + "href": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f?fields%5Bnode--recipe%5D=title&resourceVersion=rel%3Alatest-version", + }, + }, +} +`; + +exports[`getStaticPathsFromContext() returns static paths for multiple resource types from context 1`] = ` +[ + { + "locale": "en", + "params": { + "slug": [ + "articles", + "give-it-a-go-and-grow-your-own-herbs", + ], + }, + }, + { + "locale": "en", + "params": { + "slug": [ + "articles", + "dairy-free-and-delicious-milk-chocolate", + ], + }, + }, + { + "locale": "en", + "params": { + "slug": [ + "articles", + "the-real-deal-for-supermarket-savvy-shopping", + ], + }, + }, + { + "locale": "en", + "params": { + "slug": [ + "articles", + "the-umami-guide-to-our-favourite-mushrooms", + ], + }, + }, + { + "locale": "en", + "params": { + "slug": [ + "articles", + "lets-hear-it-for-carrots", + ], + }, + }, + { + "locale": "en", + "params": { + "slug": [ + "articles", + "baking-mishaps-our-troubleshooting-tips", + ], + }, + }, + { + "locale": "en", + "params": { + "slug": [ + "articles", + "skip-the-spirits-with-delicious-mocktails", + ], + }, + }, + { + "locale": "en", + "params": { + "slug": [ + "articles", + "give-your-oatmeal-the-ultimate-makeover", + ], + }, + }, + { + "locale": "es", + "params": { + "slug": [ + "articles", + "prueba-y-cultiva-tus-propias-hierbas", + ], + }, + }, + { + "locale": "es", + "params": { + "slug": [ + "articles", + "delicioso-chocolate-sin-lactosa", + ], + }, + }, + { + "locale": "es", + "params": { + "slug": [ + "articles", + "el-verdadeo-negocio-para-comprar-en-el-supermercado", + ], + }, + }, + { + "locale": "es", + "params": { + "slug": [ + "articles", + "guia-umami-de-nuestras-setas-preferidas", + ], + }, + }, + { + "locale": "es", + "params": { + "slug": [ + "articles", + "un-aplauso-para-las-zanahorias", + ], + }, + }, + { + "locale": "es", + "params": { + "slug": [ + "articles", + "percances-al-hornear-nuestros-consejos-para-solucionar-problemas", + ], + }, + }, + { + "locale": "es", + "params": { + "slug": [ + "articles", + "salta-los-espiritus-con-deliciosos-cocteles-sin-alcohol", + ], + }, + }, + { + "locale": "es", + "params": { + "slug": [ + "articles", + "dale-a-tu-avena-el-cambio-de-imagen-definitivo", + ], + }, + }, + { + "locale": "en", + "params": { + "slug": [ + "recipes", + "vegan-chocolate-and-nut-brownies", + ], + }, + }, + { + "locale": "en", + "params": { + "slug": [ + "recipes", + "super-easy-vegetarian-pasta-bake", + ], + }, + }, + { + "locale": "en", + "params": { + "slug": [ + "recipes", + "watercress-soup", + ], + }, + }, + { + "locale": "en", + "params": { + "slug": [ + "recipes", + "victoria-sponge-cake", + ], + }, + }, + { + "locale": "en", + "params": { + "slug": [ + "recipes", + "gluten-free-pizza", + ], + }, + }, + { + "locale": "en", + "params": { + "slug": [ + "recipes", + "thai-green-curry", + ], + }, + }, + { + "locale": "en", + "params": { + "slug": [ + "recipes", + "crema-catalana", + ], + }, + }, + { + "locale": "en", + "params": { + "slug": [ + "recipes", + "fiery-chili-sauce", + ], + }, + }, + { + "locale": "en", + "params": { + "slug": [ + "recipes", + "deep-mediterranean-quiche", + ], + }, + }, + { + "locale": "es", + "params": { + "slug": [ + "recipes", + "bizcochos-veganos-de-chocolate-y-nueces", + ], + }, + }, + { + "locale": "es", + "params": { + "slug": [ + "recipes", + "pasta-vegetariana-horno-super-facil", + ], + }, + }, + { + "locale": "es", + "params": { + "slug": [ + "recipes", + "sopa-de-berro", + ], + }, + }, + { + "locale": "es", + "params": { + "slug": [ + "recipes", + "pastel-victoria", + ], + }, + }, + { + "locale": "es", + "params": { + "slug": [ + "recipes", + "pizza-sin-gluten", + ], + }, + }, + { + "locale": "es", + "params": { + "slug": [ + "recipes", + "curry-verde-tailandes", + ], + }, + }, + { + "locale": "es", + "params": { + "slug": [ + "recipes", + "crema-catalana", + ], + }, + }, + { + "locale": "es", + "params": { + "slug": [ + "recipes", + "salsa-de-chile-ardiente", + ], + }, + }, + { + "locale": "es", + "params": { + "slug": [ + "recipes", + "quiche-mediterráneo-profundo", + ], + }, + }, +] +`; + +exports[`getStaticPathsFromContext() returns static paths from context 1`] = ` +[ + { + "params": { + "slug": [ + "articles", + "give-it-a-go-and-grow-your-own-herbs", + ], + }, + }, + { + "params": { + "slug": [ + "articles", + "dairy-free-and-delicious-milk-chocolate", + ], + }, + }, + { + "params": { + "slug": [ + "articles", + "the-real-deal-for-supermarket-savvy-shopping", + ], + }, + }, + { + "params": { + "slug": [ + "articles", + "the-umami-guide-to-our-favourite-mushrooms", + ], + }, + }, + { + "params": { + "slug": [ + "articles", + "lets-hear-it-for-carrots", + ], + }, + }, + { + "params": { + "slug": [ + "articles", + "baking-mishaps-our-troubleshooting-tips", + ], + }, + }, + { + "params": { + "slug": [ + "articles", + "skip-the-spirits-with-delicious-mocktails", + ], + }, + }, + { + "params": { + "slug": [ + "articles", + "give-your-oatmeal-the-ultimate-makeover", + ], + }, + }, +] +`; + +exports[`getStaticPathsFromContext() returns static paths from context with locale 1`] = ` +[ + { + "locale": "en", + "params": { + "slug": [ + "articles", + "give-it-a-go-and-grow-your-own-herbs", + ], + }, + }, + { + "locale": "en", + "params": { + "slug": [ + "articles", + "dairy-free-and-delicious-milk-chocolate", + ], + }, + }, + { + "locale": "en", + "params": { + "slug": [ + "articles", + "the-real-deal-for-supermarket-savvy-shopping", + ], + }, + }, + { + "locale": "en", + "params": { + "slug": [ + "articles", + "the-umami-guide-to-our-favourite-mushrooms", + ], + }, + }, + { + "locale": "en", + "params": { + "slug": [ + "articles", + "lets-hear-it-for-carrots", + ], + }, + }, + { + "locale": "en", + "params": { + "slug": [ + "articles", + "baking-mishaps-our-troubleshooting-tips", + ], + }, + }, + { + "locale": "en", + "params": { + "slug": [ + "articles", + "skip-the-spirits-with-delicious-mocktails", + ], + }, + }, + { + "locale": "en", + "params": { + "slug": [ + "articles", + "give-your-oatmeal-the-ultimate-makeover", + ], + }, + }, + { + "locale": "es", + "params": { + "slug": [ + "articles", + "prueba-y-cultiva-tus-propias-hierbas", + ], + }, + }, + { + "locale": "es", + "params": { + "slug": [ + "articles", + "delicioso-chocolate-sin-lactosa", + ], + }, + }, + { + "locale": "es", + "params": { + "slug": [ + "articles", + "el-verdadeo-negocio-para-comprar-en-el-supermercado", + ], + }, + }, + { + "locale": "es", + "params": { + "slug": [ + "articles", + "guia-umami-de-nuestras-setas-preferidas", + ], + }, + }, + { + "locale": "es", + "params": { + "slug": [ + "articles", + "un-aplauso-para-las-zanahorias", + ], + }, + }, + { + "locale": "es", + "params": { + "slug": [ + "articles", + "percances-al-hornear-nuestros-consejos-para-solucionar-problemas", + ], + }, + }, + { + "locale": "es", + "params": { + "slug": [ + "articles", + "salta-los-espiritus-con-deliciosos-cocteles-sin-alcohol", + ], + }, + }, + { + "locale": "es", + "params": { + "slug": [ + "articles", + "dale-a-tu-avena-el-cambio-de-imagen-definitivo", + ], + }, + }, +] +`; + +exports[`getStaticPathsFromContext() returns static paths from context with params 1`] = ` +[ + { + "params": { + "slug": [ + "articles", + "give-it-a-go-and-grow-your-own-herbs", + ], + }, + }, + { + "params": { + "slug": [ + "articles", + "dairy-free-and-delicious-milk-chocolate", + ], + }, + }, + { + "params": { + "slug": [ + "articles", + "the-real-deal-for-supermarket-savvy-shopping", + ], + }, + }, + { + "params": { + "slug": [ + "articles", + "the-umami-guide-to-our-favourite-mushrooms", + ], + }, + }, + { + "params": { + "slug": [ + "articles", + "lets-hear-it-for-carrots", + ], + }, + }, + { + "params": { + "slug": [ + "articles", + "baking-mishaps-our-troubleshooting-tips", + ], + }, + }, + { + "params": { + "slug": [ + "articles", + "skip-the-spirits-with-delicious-mocktails", + ], + }, + }, + { + "params": { + "slug": [ + "articles", + "give-your-oatmeal-the-ultimate-makeover", + ], + }, + }, +] +`; + +exports[`translatePathFromContext() translates a path 1`] = ` +{ + "entity": { + "bundle": "recipe", + "canonical": "https://tests.next-drupal.org/en/recipes/deep-mediterranean-quiche", + "id": "1", + "langcode": "en", + "path": "/en/recipes/deep-mediterranean-quiche", + "type": "node", + "uuid": "71e04ead-4cc7-416c-b9ca-60b635fdc50f", + }, + "isHomePath": false, + "jsonapi": { + "basePath": "/en/jsonapi", + "entryPoint": "https://tests.next-drupal.org/en/jsonapi", + "individual": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f", + "pathPrefix": "en/jsonapi", + "resourceName": "node--recipe", + }, + "label": "Deep mediterranean quiche - edited", + "meta": { + "deprecated": { + "jsonapi.pathPrefix": "This property has been deprecated and will be removed in the next version of Decoupled Router. Use basePath instead.", + }, + }, + "resolved": "https://tests.next-drupal.org/en/recipes/deep-mediterranean-quiche", +} +`; + +exports[`translatePathFromContext() translates a path with pathPrefix 1`] = ` +{ + "entity": { + "bundle": "recipe", + "canonical": "https://tests.next-drupal.org/en/recipes/deep-mediterranean-quiche", + "id": "1", + "langcode": "en", + "path": "/en/recipes/deep-mediterranean-quiche", + "type": "node", + "uuid": "71e04ead-4cc7-416c-b9ca-60b635fdc50f", + }, + "isHomePath": false, + "jsonapi": { + "basePath": "/en/jsonapi", + "entryPoint": "https://tests.next-drupal.org/en/jsonapi", + "individual": "https://tests.next-drupal.org/en/jsonapi/node/recipe/71e04ead-4cc7-416c-b9ca-60b635fdc50f", + "pathPrefix": "en/jsonapi", + "resourceName": "node--recipe", + }, + "label": "Deep mediterranean quiche - edited", + "meta": { + "deprecated": { + "jsonapi.pathPrefix": "This property has been deprecated and will be removed in the next version of Decoupled Router. Use basePath instead.", + }, + }, + "resolved": "https://tests.next-drupal.org/en/recipes/deep-mediterranean-quiche", +} +`; diff --git a/packages/next-drupal/tests/DrupalClient/basic-methods.test.ts b/packages/next-drupal/tests/DrupalClient/basic-methods.test.ts new file mode 100644 index 00000000..c8684a47 --- /dev/null +++ b/packages/next-drupal/tests/DrupalClient/basic-methods.test.ts @@ -0,0 +1,597 @@ +import { afterEach, describe, expect, jest, test } from "@jest/globals" +import { NextApiRequest, NextApiResponse } from "next" +import { DRAFT_DATA_COOKIE_NAME, DrupalClient, JsonApiErrors } from "../../src" +import { BASE_URL, mockLogger, spyOnFetch, spyOnFetchOnce } from "../utils" +import type { DrupalNode, JsonApiError, Serializer } from "../../src" + +afterEach(() => { + jest.restoreAllMocks() +}) + +describe("buildMenuTree()", () => { + test.todo("add tests") +}) + +describe("buildUrl()", () => { + const client = new DrupalClient(BASE_URL) + + test("builds a url", () => { + expect(client.buildUrl("http://example.com").toString()).toEqual( + "http://example.com/" + ) + }) + + test("builds a relative url", () => { + expect(client.buildUrl("/foo").toString()).toEqual(`${BASE_URL}/foo`) + }) + + test("builds a url with params", () => { + expect(client.buildUrl("/foo", { bar: "baz" }).toString()).toEqual( + `${BASE_URL}/foo?bar=baz` + ) + + expect( + client + .buildUrl("/jsonapi/node/article", { + sort: "-created", + "fields[node--article]": "title,path", + }) + .toString() + ).toEqual( + `${BASE_URL}/jsonapi/node/article?sort=-created&fields%5Bnode--article%5D=title%2Cpath` + ) + }) + + test("builds a url from object (DrupalJsonApiParams)", () => { + const params = { + getQueryObject: () => ({ + sort: "-created", + "fields[node--article]": "title,path", + }), + } + + expect(client.buildUrl("/jsonapi/node/article", params).toString()).toEqual( + `${BASE_URL}/jsonapi/node/article?sort=-created&fields%5Bnode--article%5D=title%2Cpath` + ) + }) +}) + +describe("debug()", () => { + test("does not print messages by default", () => { + const logger = mockLogger() + const client = new DrupalClient(BASE_URL, { logger }) + const message = "Example message" + client.debug(message) + expect(logger.debug).not.toHaveBeenCalled() + }) + + test("prints messages when debugging on", () => { + const logger = mockLogger() + const client = new DrupalClient(BASE_URL, { logger, debug: true }) + const message = "Example message" + client.debug(message) + expect(logger.debug).toHaveBeenCalledWith("Debug mode is on.") + expect(logger.debug).toHaveBeenCalledWith(message) + }) +}) + +describe("deserialize()", () => { + test("deserializes JSON:API resource", async () => { + const client = new DrupalClient(BASE_URL) + const url = client.buildUrl( + "/jsonapi/node/article/52837ad0-f218-46bd-a106-5710336b7053", + { + include: "field_tags", + } + ) + + const response = await client.fetch(url.toString()) + const json = await response.json() + const article = client.deserialize(json) as DrupalNode + + expect(article).toMatchSnapshot() + expect(article.id).toEqual("52837ad0-f218-46bd-a106-5710336b7053") + expect(article.field_tags).toHaveLength(3) + }) + + test("deserializes JSON:API collection", async () => { + const client = new DrupalClient(BASE_URL) + const url = client.buildUrl("/jsonapi/node/article", { + getQueryObject: () => ({ + "fields[node--article]": "title", + }), + }) + + const response = await client.fetch(url.toString()) + const json = await response.json() + const articles = client.deserialize(json) as DrupalNode[] + + expect(articles).toMatchSnapshot() + }) + + test("allows for custom data serializer", async () => { + const serializer: Serializer = { + deserialize: ( + body: { data: { id: string; attributes: { title: string } } }, + options: { pathPrefix: string } + ) => { + return { + id: body.data.id, + title: `${options.pathPrefix}: ${body.data.attributes.title}`, + } + }, + } + const client = new DrupalClient(BASE_URL, { + serializer, + }) + const url = client.buildUrl( + "/jsonapi/node/article/52837ad0-f218-46bd-a106-5710336b7053" + ) + + const response = await client.fetch(url.toString()) + const json = await response.json() + const article = client.deserialize(json, { + pathPrefix: "TITLE", + }) as DrupalNode + + expect(article).toMatchSnapshot() + expect(article.id).toEqual("52837ad0-f218-46bd-a106-5710336b7053") + expect(article.title).toEqual(`TITLE: ${json.data.attributes.title}`) + }) + + test("returns null if no body", () => { + const client = new DrupalClient(BASE_URL) + expect(client.deserialize("")).toBe(null) + }) +}) + +describe("formatJsonApiErrors()", () => { + const errors: JsonApiError[] = [ + { + status: "404", + title: "First error", + }, + { + status: "500", + title: "Second error", + detail: "is ignored", + }, + ] + const client = new DrupalClient(BASE_URL) + + test("formats the first error in the array", () => { + expect(client.formatJsonApiErrors(errors)).toBe("404 First error") + }) + + test("includes the optional error detail", () => { + expect( + client.formatJsonApiErrors([ + { + ...errors[0], + detail: "Detail is included.", + }, + errors[1], + ]) + ).toBe("404 First error\nDetail is included.") + }) +}) + +describe("getErrorsFromResponse()", () => { + const client = new DrupalClient(BASE_URL) + + test("returns application/json error message", async () => { + const message = "An error occurred." + const response = new Response(JSON.stringify({ message }), { + status: 403, + headers: { + "content-type": "application/json", + }, + }) + + expect(await client.getErrorsFromResponse(response)).toBe(message) + }) + + test("returns application/vnd.api+json errors", async () => { + const payload = { + errors: [ + { + status: "404", + title: "Not found", + detail: "Oops.", + }, + { + status: "418", + title: "I am a teapot", + detail: "Even RFCs have easter eggs.", + }, + ] as JsonApiError[], + } + const response = new Response(JSON.stringify(payload), { + status: 403, + headers: { + "content-type": "application/vnd.api+json", + }, + }) + + expect(await client.getErrorsFromResponse(response)).toMatchObject( + payload.errors + ) + }) + + test("returns the response status text if the application/vnd.api+json errors cannot be found", async () => { + const payload = { + contains: 'no "errors" entry', + } + const response = new Response(JSON.stringify(payload), { + status: 418, + statusText: "I'm a Teapot", + headers: { + "content-type": "application/vnd.api+json", + }, + }) + + expect(await client.getErrorsFromResponse(response)).toBe("I'm a Teapot") + }) + + test("returns the response status text if no errors can be found", async () => { + const response = new Response(JSON.stringify({}), { + status: 403, + statusText: "Forbidden", + }) + + expect(await client.getErrorsFromResponse(response)).toBe("Forbidden") + }) +}) + +describe("preview()", () => { + // Get values from our mocked request. + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const { slug, resourceVersion, plugin, secret, ...draftData } = + new NextApiRequest().query + const dataCookie = `${DRAFT_DATA_COOKIE_NAME}=${encodeURIComponent( + JSON.stringify({ slug, resourceVersion, ...draftData }) + )}; Path=/; HttpOnly; SameSite=None; Secure` + const validationPayload = { + slug, + maxAge: 30, + } + + test("turns on preview mode and clears preview data", async () => { + const request = new NextApiRequest() + const response = new NextApiResponse() + const client = new DrupalClient(BASE_URL) + spyOnFetch({ responseBody: validationPayload }) + + await client.preview(request, response) + + expect(response.clearPreviewData).toBeCalledTimes(1) + expect(response.setPreviewData).toBeCalledWith({ + resourceVersion, + plugin, + ...validationPayload, + }) + }) + + test("does not enable preview mode if validation fails", async () => { + const logger = mockLogger() + const request = new NextApiRequest() + const response = new NextApiResponse() + const client = new DrupalClient(BASE_URL, { debug: true, logger }) + const status = 403 + const message = "mock fail" + spyOnFetch({ + responseBody: { message }, + status, + headers: { + "Content-Type": "application/json", + }, + }) + + await client.preview(request, response) + + expect(logger.debug).toBeCalledWith( + `Draft url validation error: ${message}` + ) + expect(response.setPreviewData).toBeCalledTimes(0) + expect(response.statusCode).toBe(status) + expect(response.json).toBeCalledWith({ message }) + }) + + test("does not turn on draft mode by default", async () => { + const request = new NextApiRequest() + const response = new NextApiResponse() + const client = new DrupalClient(BASE_URL) + spyOnFetch({ responseBody: validationPayload }) + + await client.preview(request, response) + + expect(response.setDraftMode).toBeCalledTimes(0) + + // Also check for no draft data cookie. + const cookies = response.getHeader("Set-Cookie") + expect(cookies[cookies.length - 1]).not.toBe(dataCookie) + }) + + test("optionally turns on draft mode", async () => { + const request = new NextApiRequest() + const response = new NextApiResponse() + const logger = mockLogger() + const client = new DrupalClient(BASE_URL, { + debug: true, + logger, + }) + spyOnFetch({ responseBody: validationPayload }) + + const options = { enable: true } + await client.preview(request, response, options) + + expect(response.setDraftMode).toBeCalledWith(options) + + // Also check for draft data cookie. + const cookies = response.getHeader("Set-Cookie") + expect(cookies[cookies.length - 1]).toBe(dataCookie) + + expect(logger.debug).toHaveBeenLastCalledWith("Draft mode enabled.") + }) + + test("updates preview mode cookie’s sameSite flag", async () => { + const request = new NextApiRequest() + const response = new NextApiResponse() + const client = new DrupalClient(BASE_URL) + spyOnFetch({ responseBody: validationPayload }) + + // Our mock response.setPreviewData() does not set a cookie, so we set one. + const previewCookie = + "__next_preview_data=secret-data; Path=/; HttpOnly; SameSite=Lax" + response.setHeader("Set-Cookie", [ + previewCookie, + ...response.getHeader("Set-Cookie"), + ]) + + const cookies = response.getHeader("Set-Cookie") + cookies[0] = cookies[0].replace("SameSite=Lax", "SameSite=None; Secure") + + await client.preview(request, response) + + expect(response.getHeader).toHaveBeenLastCalledWith("Set-Cookie") + expect(response.setHeader).toHaveBeenLastCalledWith("Set-Cookie", cookies) + expect(response.getHeader("Set-Cookie")).toStrictEqual(cookies) + }) + + test("redirects to the slug path", async () => { + const request = new NextApiRequest() + const response = new NextApiResponse() + const logger = mockLogger() + const client = new DrupalClient(BASE_URL, { debug: true, logger }) + spyOnFetch({ responseBody: validationPayload }) + + await client.preview(request, response) + + expect(response.setPreviewData).toBeCalledWith({ + resourceVersion, + plugin, + ...validationPayload, + }) + expect(response.writeHead).toBeCalledWith(307, { Location: slug }) + expect(logger.debug).toHaveBeenLastCalledWith("Preview mode enabled.") + }) + + test("returns a 422 response on error", async () => { + const request = new NextApiRequest() + const response = new NextApiResponse() + const logger = mockLogger() + const client = new DrupalClient(BASE_URL, { debug: true, logger }) + const message = "mock internal error" + response.clearPreviewData = jest.fn(() => { + throw new Error(message) + }) + + await client.preview(request, response) + + expect(logger.debug).toHaveBeenLastCalledWith(`Preview failed: ${message}`) + expect(response.status).toBeCalledWith(422) + expect(response.end).toHaveBeenCalled() + }) +}) + +describe("previewDisable()", () => { + test("clears preview data", async () => { + const request = new NextApiRequest() + const response = new NextApiResponse() + const client = new DrupalClient(BASE_URL) + + await client.previewDisable(request, response) + expect(response.clearPreviewData).toBeCalledTimes(1) + }) + + test("disables draft mode", async () => { + const request = new NextApiRequest() + const response = new NextApiResponse() + const client = new DrupalClient(BASE_URL) + + await client.previewDisable(request, response) + expect(response.setDraftMode).toBeCalledWith({ enable: false }) + }) + + test("deletes the draft cookie", async () => { + const request = new NextApiRequest() + const response = new NextApiResponse() + const client = new DrupalClient(BASE_URL) + + await client.previewDisable(request, response) + const cookies = response.getHeader("Set-Cookie") + expect(cookies[cookies.length - 1]).toBe( + `${DRAFT_DATA_COOKIE_NAME}=; Path=/; Expires=Thu, 01 Jan 1970 00:00:00 GMT; HttpOnly; SameSite=None; Secure` + ) + }) + + test('redirects to "/"', async () => { + const request = new NextApiRequest() + const response = new NextApiResponse() + const client = new DrupalClient(BASE_URL) + + await client.previewDisable(request, response) + expect(response.writeHead).toBeCalledWith(307, { Location: "/" }) + expect(response.end).toBeCalled() + }) +}) + +describe("throwError()", () => { + test("throws the error", () => { + const client = new DrupalClient(BASE_URL) + expect(() => { + client.throwError(new Error("Example error")) + }).toThrow("Example error") + }) + + test("logs the error when throwJsonApiErrors is false", () => { + const logger = mockLogger() + const client = new DrupalClient(BASE_URL, { + throwJsonApiErrors: false, + logger, + }) + expect(() => { + client.throwError(new Error("Example error")) + }).not.toThrow() + expect(logger.error).toHaveBeenCalledWith(new Error("Example error")) + }) +}) + +describe("throwIfJsonApiErrors()", () => { + const client = new DrupalClient(BASE_URL) + + test("does not throw if response is ok", async () => { + expect.assertions(1) + + const response = new Response(JSON.stringify({})) + + await expect(client.throwIfJsonApiErrors(response)).resolves.toBe(undefined) + }) + + test("throws a JsonApiErrors object", async () => { + expect.assertions(1) + + const payload = { + errors: [ + { + status: "404", + title: "Not found", + detail: "Oops.", + }, + { + status: "418", + title: "I am a teapot", + detail: "Even RFCs have easter eggs.", + }, + ] as JsonApiError[], + } + const status = 403 + const response = new Response(JSON.stringify(payload), { + status, + headers: { + "content-type": "application/vnd.api+json", + }, + }) + + const expectedError = new JsonApiErrors(payload.errors, status) + await expect(client.throwIfJsonApiErrors(response)).rejects.toEqual( + expectedError + ) + }) +}) + +describe("validateDraftUrl()", () => { + test("outputs debug messages", async () => { + const logger = mockLogger() + const client = new DrupalClient(BASE_URL, { + debug: true, + logger, + }) + const slug = "/example" + const searchParams = new URLSearchParams({ + slug, + }) + + const testPayload = { test: "resolved" } + spyOnFetchOnce({ + responseBody: testPayload, + }) + spyOnFetchOnce({ + responseBody: { + message: "fail", + }, + status: 404, + }) + + let response = await client.validateDraftUrl(searchParams) + expect(response.status).toBe(200) + expect(logger.debug).toHaveBeenCalledWith("Debug mode is on.") + expect(logger.debug).toHaveBeenCalledWith( + `Fetching draft url validation for ${slug}.` + ) + expect(logger.debug).toHaveBeenCalledWith(`Validated slug, ${slug}`) + + response = await client.validateDraftUrl(searchParams) + expect(response.status).toBe(404) + expect(logger.debug).toHaveBeenCalledWith( + `Could not validate slug, ${slug}` + ) + }) + + test("calls draft-url endpoint", async () => { + const client = new DrupalClient(BASE_URL) + const searchParams = new URLSearchParams({ + slug: "/example", + }) + + const testPayload = { test: "resolved" } + const fetchSpy = spyOnFetch({ responseBody: testPayload }) + + await client.validateDraftUrl(searchParams) + + expect(fetchSpy).toHaveBeenNthCalledWith( + 1, + `${BASE_URL}/next/draft-url`, + expect.objectContaining({ + method: "POST", + headers: { + Accept: "application/vnd.api+json", + "Content-Type": "application/json", + }, + body: JSON.stringify(Object.fromEntries(searchParams.entries())), + }) + ) + }) + + test("returns a response object on success", async () => { + const client = new DrupalClient(BASE_URL) + const searchParams = new URLSearchParams({ + slug: "/example", + }) + + const testPayload = { test: "resolved" } + spyOnFetch({ responseBody: testPayload }) + + const response = await client.validateDraftUrl(searchParams) + + expect(response.ok).toBe(true) + expect(response.status).toBe(200) + expect(await response.json()).toMatchObject(testPayload) + }) + + test("returns a response if fetch throws", async () => { + const client = new DrupalClient(BASE_URL) + const searchParams = new URLSearchParams({ + slug: "/example", + }) + + const message = "random fetch error" + spyOnFetch({ throwErrorMessage: message }) + + const response = await client.validateDraftUrl(searchParams) + + expect(response.ok).toBe(false) + expect(response.status).toBe(401) + expect(await response.json()).toMatchObject({ message }) + }) +}) diff --git a/packages/next-drupal/tests/DrupalClient/constructor.test.ts b/packages/next-drupal/tests/DrupalClient/constructor.test.ts new file mode 100644 index 00000000..b31dba4e --- /dev/null +++ b/packages/next-drupal/tests/DrupalClient/constructor.test.ts @@ -0,0 +1,333 @@ +import { afterEach, describe, expect, jest, test } from "@jest/globals" +import { Jsona } from "jsona" +import { DrupalClient } from "../../src" +import { DEBUG_MESSAGE_PREFIX, logger as defaultLogger } from "../../src/logger" +import { BASE_URL } from "../utils" +import type { Logger } from "../../src" + +afterEach(() => { + jest.restoreAllMocks() +}) + +describe("baseUrl parameter", () => { + const env = process.env + + beforeEach(() => { + jest.resetModules() + process.env = { ...env } + }) + + afterEach(() => { + process.env = env + }) + + test("throws error given an invalid baseUrl", () => { + // @ts-ignore + expect(() => new DrupalClient()).toThrow("The 'baseUrl' param is required.") + + // @ts-ignore + expect(() => new DrupalClient({})).toThrow( + "The 'baseUrl' param is required." + ) + }) + + test("turns throwJsonApiErrors off in production", () => { + process.env = { + ...process.env, + NODE_ENV: "production", + } + + const client = new DrupalClient(BASE_URL) + expect(client.throwJsonApiErrors).toBe(false) + }) + + test("announces debug mode when turned on", () => { + const consoleSpy = jest.spyOn(console, "debug").mockImplementation(() => { + // + }) + + new DrupalClient(BASE_URL, { + debug: true, + }) + + expect(consoleSpy).toHaveBeenCalledWith( + DEBUG_MESSAGE_PREFIX, + "Debug mode is on." + ) + }) + + test("returns a DrupalClient", () => { + expect(new DrupalClient(BASE_URL)).toBeInstanceOf(DrupalClient) + }) +}) + +describe("options parameter", () => { + describe("accessToken", () => { + test("defaults to `undefined`", () => { + const client = new DrupalClient(BASE_URL) + expect(client.accessToken).toBe(undefined) + }) + + test("sets the accessToken", async () => { + const accessToken = { + token_type: "Bearer", + expires_in: 300, + access_token: + "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6ImVlNDkyOTI4ZTZjNj", + } + + const client = new DrupalClient(BASE_URL, { + accessToken, + }) + + expect(client.accessToken).toEqual(accessToken) + }) + }) + + describe("apiPrefix", () => { + test('defaults to "/jsonapi"', () => { + const client = new DrupalClient(BASE_URL) + expect(client.apiPrefix).toBe("/jsonapi") + }) + + test("sets the apiPrefix", () => { + const customEndPoint = "/customapi" + const client = new DrupalClient(BASE_URL, { + apiPrefix: customEndPoint, + }) + expect(client.apiPrefix).toBe(customEndPoint) + }) + }) + + describe("auth", () => { + test("defaults to `undefined`", () => { + const client = new DrupalClient(BASE_URL) + expect(client.auth).toBe(undefined) + }) + + test("sets the auth credentials", () => { + const auth: DrupalClient["auth"] = { + username: "example", + password: "pw", + } + const client = new DrupalClient(BASE_URL, { + auth, + }) + expect(client._auth).toMatchObject({ + ...auth, + url: "/oauth/token", + }) + }) + }) + + describe("cache", () => { + test("defaults to `null`", () => { + const client = new DrupalClient(BASE_URL) + expect(client.cache).toBe(null) + }) + + test("sets the cache storage", () => { + const customCache: DrupalClient["cache"] = { + async get(key) { + // + }, + async set(key, value, ttl?: number) { + // + }, + } + const client = new DrupalClient(BASE_URL, { + cache: customCache, + }) + expect(client.cache).toBe(customCache) + }) + }) + + describe("debug", () => { + test("defaults to `false`", () => { + const consoleSpy = jest.spyOn(console, "debug").mockImplementation(() => { + // + }) + + new DrupalClient(BASE_URL) + + expect(consoleSpy).toBeCalledTimes(0) + }) + + test("turns on debug mode", () => { + const consoleSpy = jest.spyOn(console, "debug").mockImplementation(() => { + // + }) + + new DrupalClient(BASE_URL, { debug: true }) + + expect(consoleSpy).toBeCalledTimes(1) + }) + }) + + describe("fetcher", () => { + test("defaults to `undefined`", () => { + const client = new DrupalClient(BASE_URL) + expect(client.fetcher).toBe(undefined) + }) + + test("sets up a custom fetcher", () => { + const customFetcher: DrupalClient["fetcher"] = async () => { + // + } + const client = new DrupalClient(BASE_URL, { + fetcher: customFetcher, + }) + expect(client.fetcher).toBe(customFetcher) + }) + }) + + describe("frontPage", () => { + test('defaults to "/home"', () => { + const client = new DrupalClient(BASE_URL) + expect(client.frontPage).toBe("/home") + }) + + test("sets up a custom frontPage", () => { + const customFrontPage = "/front" + + const client = new DrupalClient(BASE_URL, { + frontPage: customFrontPage, + }) + expect(client.frontPage).toBe(customFrontPage) + }) + }) + + describe("headers", () => { + test("defaults to `Content-Type`/`Accept`", () => { + const client = new DrupalClient(BASE_URL) + expect(client._headers).toMatchObject({ + "Content-Type": "application/vnd.api+json", + Accept: "application/vnd.api+json", + }) + }) + + test("sets custom headers", () => { + const customHeaders = { + CustomContentType: "application/json", + CustomAccept: "application/json", + } + + const client = new DrupalClient(BASE_URL, { + headers: customHeaders, + }) + expect(client._headers).toMatchObject(customHeaders) + }) + }) + + describe("logger", () => { + test("defaults to `console`-based `Logger`", () => { + const client = new DrupalClient(BASE_URL) + expect(client.logger).toBe(defaultLogger) + }) + + test("sets up a custom logger", () => { + const customLogger: Logger = { + log: () => { + // + }, + debug: () => { + // + }, + warn: () => { + // + }, + error: () => { + // + }, + } + + const client = new DrupalClient(BASE_URL, { + logger: customLogger, + }) + expect(client.logger).toBe(customLogger) + }) + }) + + describe("previewSecret", () => { + test("defaults to `undefined`", () => { + const client = new DrupalClient(BASE_URL) + expect(client.previewSecret).toBe(undefined) + }) + + test("sets up a custom previewSecret", () => { + const customPreviewSecret = "custom-secret-value" + + const client = new DrupalClient(BASE_URL, { + previewSecret: customPreviewSecret, + }) + expect(client.previewSecret).toBe(customPreviewSecret) + }) + }) + + describe("serializer", () => { + test("defaults to `new Jsona()`", () => { + const client = new DrupalClient(BASE_URL) + expect(client.serializer).toBeInstanceOf(Jsona) + }) + + test("sets up a custom serializer", () => { + const customSerializer: DrupalClient["serializer"] = { + deserialize( + body: Record, + options?: Record + ): unknown { + return { + deserialized: true, + } + }, + } + + const client = new DrupalClient(BASE_URL, { + serializer: customSerializer, + }) + expect(client.serializer).toBe(customSerializer) + }) + }) + + describe("throwJsonApiErrors", () => { + test("defaults to `true`", () => { + const client = new DrupalClient(BASE_URL) + expect(client.throwJsonApiErrors).toBe(true) + }) + + test("can be set to `false`", () => { + const client = new DrupalClient(BASE_URL, { + throwJsonApiErrors: false, + }) + expect(client.throwJsonApiErrors).toBe(false) + }) + }) + + describe("useDefaultResourceTypeEntry", () => { + test("defaults to `false`", () => { + const client = new DrupalClient(BASE_URL) + expect(client.useDefaultResourceTypeEntry).toBe(false) + }) + + test("can be set to `true`", () => { + const client = new DrupalClient(BASE_URL, { + useDefaultResourceTypeEntry: true, + }) + expect(client.useDefaultResourceTypeEntry).toBe(true) + }) + }) + + describe("withAuth", () => { + test("defaults to `false`", () => { + const client = new DrupalClient(BASE_URL) + expect(client.withAuth).toBe(false) + }) + + test("can be set to `true`", () => { + const client = new DrupalClient(BASE_URL, { + withAuth: true, + }) + expect(client.withAuth).toBe(true) + }) + }) +}) diff --git a/packages/next-drupal/tests/crud.test.ts b/packages/next-drupal/tests/DrupalClient/crud-methods.test.ts similarity index 67% rename from packages/next-drupal/tests/crud.test.ts rename to packages/next-drupal/tests/DrupalClient/crud-methods.test.ts index ed9a00b2..cb8e4015 100644 --- a/packages/next-drupal/tests/crud.test.ts +++ b/packages/next-drupal/tests/DrupalClient/crud-methods.test.ts @@ -1,10 +1,25 @@ -import { expect } from "@jest/globals" -import { DrupalClient } from "../src/client" -import type { DrupalNode } from "../src/types" -import { BASE_URL, deleteTestNodes, toggleDrupalModule } from "./utils" +import { + afterAll, + afterEach, + beforeAll, + describe, + expect, + jest, + test, +} from "@jest/globals" +import { DrupalClient } from "../../src" +import { + BASE_URL, + deleteTestNodes, + toggleDrupalModule, + mocks, + mockLogger, + spyOnFetch, +} from "../utils" +import type { DrupalNode, JsonApiCreateFileResourceBody } from "../../src" // Enabling and disabling modules takes longer. -// So we increase the time out to handle this. +// So we increase the timeout to 10 seconds to handle this. jest.setTimeout(10000) beforeAll(async () => { @@ -21,8 +36,8 @@ afterAll(async () => { await deleteTestNodes() }) -describe("createResource", () => { - test("it creates a resource", async () => { +describe("createResource()", () => { + test("creates a resource", async () => { const client = new DrupalClient(BASE_URL) const article = await client.createResource( @@ -46,7 +61,7 @@ describe("createResource", () => { expect(article.title).toEqual("TEST New article") }) - test("it creates a resource with a relationship", async () => { + test("creates a resource with a relationship", async () => { const client = new DrupalClient(BASE_URL, { auth: { username: process.env.DRUPAL_USERNAME, @@ -92,7 +107,7 @@ describe("createResource", () => { expect(article.field_media_image.name).toEqual(mediaImage.name) }) - test("it creates a localized resource", async () => { + test("creates a localized resource", async () => { const client = new DrupalClient(BASE_URL, { auth: { username: process.env.DRUPAL_USERNAME, @@ -112,7 +127,7 @@ describe("createResource", () => { expect(article.langcode).toEqual("es") }) - test("it throws an error for missing required attributes", async () => { + test("throws an error for missing required attributes", async () => { const client = new DrupalClient(BASE_URL, { auth: { username: process.env.DRUPAL_USERNAME, @@ -131,7 +146,7 @@ describe("createResource", () => { ) }) - test("it throws an error for invalid attributes", async () => { + test("throws an error for invalid attributes", async () => { const client = new DrupalClient(BASE_URL, { auth: { username: process.env.DRUPAL_USERNAME, @@ -172,8 +187,115 @@ describe("createResource", () => { }) }) -describe("updateResource", () => { - test("it updates a resource", async () => { +describe("createFileResource()", () => { + const mockBody: JsonApiCreateFileResourceBody = { + data: { + attributes: { + type: "file--file", + field: "field_media_image", + filename: "mediterranean-quiche-umami.jpg", + file: Buffer.from("mock-file-data"), + }, + }, + } + const mockResponseData = mocks.resources.file + + test("constructs the API path from body and options", async () => { + const logger = mockLogger() + const client = new DrupalClient("https://example.com", { + useDefaultResourceTypeEntry: true, + debug: true, + logger, + }) + const type = "type--from-first-argument" + const fetchSpy = spyOnFetch({ responseBody: mockResponseData }) + + await client.createFileResource(type, mockBody, { + withAuth: false, + params: { include: "extra_field" }, + }) + + expect(logger.debug).toBeCalledWith( + `Creating file resource for media of type ${type}.` + ) + expect(fetchSpy.mock.lastCall[0]).toBe( + "https://example.com/jsonapi/file/file/field_media_image?include=extra_field" + ) + }) + + test("constructs the API path using non-default locale", async () => { + const client = new DrupalClient("https://example.com", { + useDefaultResourceTypeEntry: true, + }) + const type = "type--from-first-argument" + const fetchSpy = spyOnFetch({ responseBody: mockResponseData }) + + await client.createFileResource(type, mockBody, { + withAuth: false, + params: { include: "extra_field" }, + locale: "es", + defaultLocale: "en", + }) + + expect(fetchSpy.mock.lastCall[0]).toBe( + "https://example.com/es/jsonapi/file/file/field_media_image?include=extra_field" + ) + }) + + test("returns the deserialized data", async () => { + const client = new DrupalClient(BASE_URL, { + useDefaultResourceTypeEntry: true, + }) + spyOnFetch({ responseBody: mockResponseData }) + + const result = await client.createFileResource("ignored", mockBody, { + withAuth: false, + }) + + expect(result?.filename).toBe(mockResponseData.data.attributes.filename) + expect(result?.data?.attributes?.filename).toBe(undefined) + }) + + test("optionally returns the raw data", async () => { + const client = new DrupalClient(BASE_URL, { + useDefaultResourceTypeEntry: true, + }) + spyOnFetch({ responseBody: mockResponseData }) + + const result = await client.createFileResource("ignored", mockBody, { + withAuth: false, + deserialize: false, + }) + + expect(result?.filename).toBe(undefined) + expect(result?.data?.attributes?.filename).toBe( + mockResponseData.data.attributes.filename + ) + }) + + test("throws error if response is not ok", async () => { + const client = new DrupalClient(BASE_URL, { + useDefaultResourceTypeEntry: true, + }) + const message = "mock error" + spyOnFetch({ + responseBody: { message }, + status: 403, + headers: { + "content-type": "application/json", + }, + }) + + await expect( + client.createFileResource("ignored", mockBody, { + withAuth: false, + }) + ).rejects.toThrow(message) + }) +}) + +describe("updateResource()", () => { + test("updates a resource", async () => { const client = new DrupalClient(BASE_URL) const basic = Buffer.from( @@ -213,7 +335,7 @@ describe("updateResource", () => { expect(updatedArticle.title).toEqual("TEST New article updated") }) - test("it updates a resource with a relationship", async () => { + test("updates a resource with a relationship", async () => { const basic = Buffer.from( `${process.env.DRUPAL_USERNAME}:${process.env.DRUPAL_PASSWORD}` ).toString("base64") @@ -273,7 +395,7 @@ describe("updateResource", () => { expect(updatedArticle.field_media_image.name).toEqual(mediaImage.name) }) - test("it throws an error for missing required attributes", async () => { + test("throws an error for missing required attributes", async () => { const client = new DrupalClient(BASE_URL, { auth: { username: process.env.DRUPAL_USERNAME, @@ -302,7 +424,7 @@ describe("updateResource", () => { ) }) - test("it throws an error for invalid attributes", async () => { + test("throws an error for invalid attributes", async () => { const client = new DrupalClient(BASE_URL, { auth: { username: process.env.DRUPAL_USERNAME, @@ -349,8 +471,8 @@ describe("updateResource", () => { }) }) -describe("deleteResource", () => { - test("it deletes a resource", async () => { +describe("deleteResource()", () => { + test("deletes a resource", async () => { const client = new DrupalClient(BASE_URL, { auth: { username: process.env.DRUPAL_USERNAME, @@ -377,7 +499,7 @@ describe("deleteResource", () => { ) }) - test("it throws an error for invalid resource", async () => { + test("throws an error for invalid resource", async () => { const client = new DrupalClient(BASE_URL, { auth: { username: process.env.DRUPAL_USERNAME, diff --git a/packages/next-drupal/tests/DrupalClient/fetch-related-methods.test.ts b/packages/next-drupal/tests/DrupalClient/fetch-related-methods.test.ts new file mode 100644 index 00000000..1bdfe463 --- /dev/null +++ b/packages/next-drupal/tests/DrupalClient/fetch-related-methods.test.ts @@ -0,0 +1,1186 @@ +import { afterEach, describe, expect, jest, test } from "@jest/globals" +import { DrupalClient } from "../../src" +import { + BASE_URL, + mockLogger, + mocks, + spyOnFetch, + spyOnFetchOnce, +} from "../utils" +import type { + AccessToken, + DrupalClientAuth, + DrupalNode, + DrupalSearchApiJsonApiResponse, +} from "../../src" + +afterEach(() => { + jest.restoreAllMocks() +}) + +describe("fetch()", () => { + test("allows fetching custom url", async () => { + const client = new DrupalClient(BASE_URL) + const url = client.buildUrl( + "/jsonapi/node/article/52837ad0-f218-46bd-a106-5710336b7053" + ) + + const response = await client.fetch(url.toString()) + expect(response.headers.get("content-type")).toEqual( + "application/vnd.api+json" + ) + const json = await response.json() + expect(json).toMatchSnapshot() + }) + + test("allows for custom fetcher", async () => { + const customFetch = jest.fn() + + const client = new DrupalClient(BASE_URL, { + fetcher: customFetch, + }) + const url = client.buildUrl("/jsonapi").toString() + + await client.fetch(url) + expect(customFetch).toHaveBeenCalledWith( + url, + expect.objectContaining({ + headers: { + "Content-Type": "application/vnd.api+json", + Accept: "application/vnd.api+json", + }, + }) + ) + + await client.fetch(url, { + headers: { + foo: "bar", + }, + }) + expect(customFetch).toHaveBeenLastCalledWith( + url, + expect.objectContaining({ + headers: { + Accept: "application/vnd.api+json", + "Content-Type": "application/vnd.api+json", + foo: "bar", + }, + }) + ) + }) + + describe("authentication", () => { + const clientIdSecret = mocks.auth.clientIdSecret + + test("throws an error if withAuth is called when auth is not configured", async () => { + const client = new DrupalClient(BASE_URL) + + const url = client.buildUrl("/jsonapi") + + await expect( + client.fetch(url.toString(), { + withAuth: true, + }) + ).rejects.toThrow("auth is not configured.") + }) + + test("accepts username and password", async () => { + const customFetch = jest.fn() + + const client = new DrupalClient(BASE_URL, { + auth: { + username: "admin", + password: "password", + }, + fetcher: customFetch, + }) + const url = client.buildUrl("/jsonapi").toString() + + await client.fetch(url, { withAuth: true }) + expect(customFetch).toHaveBeenCalledWith( + url, + expect.objectContaining({ + headers: { + "Content-Type": "application/vnd.api+json", + Accept: "application/vnd.api+json", + Authorization: "Basic YWRtaW46cGFzc3dvcmQ=", + }, + withAuth: true, + }) + ) + }) + + test("accepts callback", async () => { + const customAuth = jest + .fn() + .mockReturnValue( + "Basic YXJzaGFkQG5leHQtZHJ1cGFsLm9yZzphYmMxMjM=" + ) as DrupalClientAuth + const customFetch = jest.fn() + + const client = new DrupalClient(BASE_URL, { + auth: customAuth, + fetcher: customFetch, + }) + const url = client.buildUrl("/jsonapi").toString() + + await client.fetch(url, { withAuth: true }) + expect(customFetch).toHaveBeenCalledWith( + url, + expect.objectContaining({ + headers: { + "Content-Type": "application/vnd.api+json", + Accept: "application/vnd.api+json", + Authorization: "Basic YXJzaGFkQG5leHQtZHJ1cGFsLm9yZzphYmMxMjM=", + }, + withAuth: true, + }) + ) + }) + + test("accepts clientId and clientSecret", async () => { + const client = new DrupalClient(BASE_URL, { + auth: clientIdSecret, + }) + const fetchSpy = spyOnFetch() + + const basic = Buffer.from( + `${clientIdSecret.clientId}:${clientIdSecret.clientSecret}` + ).toString("base64") + + await client.fetch("http://example.com", { withAuth: true }) + expect(fetchSpy).toHaveBeenNthCalledWith( + 1, + `${BASE_URL}/oauth/token`, + expect.objectContaining({ + headers: { + Accept: "application/json", + Authorization: `Basic ${basic}`, + "Content-Type": "application/x-www-form-urlencoded", + }, + }) + ) + }) + + test("accepts custom auth url", async () => { + const client = new DrupalClient(BASE_URL, { + auth: { + ...clientIdSecret, + url: "/custom/oauth", + }, + }) + const fetchSpy = spyOnFetch() + + await client.fetch("http://example.com", { withAuth: true }) + expect(fetchSpy).toHaveBeenNthCalledWith( + 1, + `${BASE_URL}/custom/oauth`, + expect.anything() + ) + }) + }) + + describe("headers", () => { + // TODO: Are these duplicates of getters-setters/headers tests? + test("allows setting custom headers", async () => { + const customFetch = jest.fn() + const client = new DrupalClient(BASE_URL, { + fetcher: customFetch, + }) + client.headers = { + foo: "bar", + } + + const url = "http://example.com" + + await client.fetch(url) + expect(customFetch).toHaveBeenCalledWith( + url, + expect.objectContaining({ + headers: { foo: "bar" }, + }) + ) + }) + + test("allows setting custom headers with custom auth", async () => { + const customFetch = jest.fn() + const client = new DrupalClient(BASE_URL, { + fetcher: customFetch, + headers: { + foo: "bar", + }, + auth: jest + .fn() + .mockReturnValue( + "Basic YXJzaGFkQG5leHQtZHJ1cGFsLm9yZzphYmMxMjM=" + ) as DrupalClientAuth, + }) + + const url = "http://example.com" + + await client.fetch(url, { withAuth: true }) + + expect(customFetch).toHaveBeenCalledWith( + url, + expect.objectContaining({ + headers: { + foo: "bar", + Authorization: "Basic YXJzaGFkQG5leHQtZHJ1cGFsLm9yZzphYmMxMjM=", + }, + withAuth: true, + }) + ) + }) + }) +}) + +describe("getAccessToken()", () => { + const accessToken = mocks.auth.accessToken + const clientIdSecret = mocks.auth.clientIdSecret + + test("uses the long-lived access token from constructor", async () => { + const longLivedAccessToken: AccessToken = { + ...accessToken, + expires_in: 360000, + } + const client = new DrupalClient(BASE_URL, { + accessToken: longLivedAccessToken, + }) + const fetchSpy = spyOnFetch({ + responseBody: { + ...accessToken, + access_token: "not-used", + }, + }) + + const token = await client.getAccessToken({ + clientId: "", + clientSecret: "", + scope: undefined, + }) + expect(fetchSpy).toHaveBeenCalledTimes(0) + expect(token).toBe(longLivedAccessToken) + }) + + test("throws if auth is not configured", async () => { + const fetchSpy = spyOnFetch({ + responseBody: accessToken, + }) + + const client = new DrupalClient(BASE_URL) + + await expect( + // @ts-ignore + client.getAccessToken({ clientId: clientIdSecret.clientId }) + ).rejects.toThrow( + "auth is not configured. See https://next-drupal.org/docs/client/auth" + ) + expect(fetchSpy).toHaveBeenCalledTimes(0) + }) + + test("BUG: throws if auth is ClientIdSecret and not given as opts", async () => { + const fetchSpy = spyOnFetch({ + responseBody: accessToken, + }) + + const client = new DrupalClient(BASE_URL, { + auth: clientIdSecret, + withAuth: true, + }) + + await expect( + // @ts-ignore + client.getAccessToken({ scope: "irrelevant" }) + ).rejects.toThrow( + "'clientId' and 'clientSecret' required. See https://next-drupal.org/docs/client/auth" + ) + expect(fetchSpy).toHaveBeenCalledTimes(0) + }) + + test("fetches an access token", async () => { + spyOnFetch({ + responseBody: accessToken, + }) + + const logger = mockLogger() + const client = new DrupalClient(BASE_URL, { + auth: clientIdSecret, + debug: true, + logger, + }) + + const token = await client.getAccessToken() + expect(token).toEqual(accessToken) + expect(logger.debug).toHaveBeenCalledWith("Fetching new access token.") + }) + + test("re-uses access token", async () => { + spyOnFetchOnce({ + responseBody: accessToken, + }) + const fetchSpy = spyOnFetchOnce({ + responseBody: { + ...accessToken, + access_token: "differentAccessToken", + expires_in: 1800, + }, + }) + + const logger = mockLogger() + const client = new DrupalClient(BASE_URL, { + auth: clientIdSecret, + debug: true, + logger, + }) + + const token1 = await client.getAccessToken() + const token2 = await client.getAccessToken() + expect(token1).toEqual(token2) + expect(logger.debug).toHaveBeenLastCalledWith( + "Using existing access token." + ) + expect(fetchSpy).toHaveBeenCalledTimes(1) + }) +}) + +describe("getEntryForResourceType()", () => { + test("returns the JSON:API entry for a resource type", async () => { + const client = new DrupalClient(BASE_URL) + const getIndexSpy = jest.spyOn(client, "getIndex") + + const recipeEntry = await client.getEntryForResourceType("node--recipe") + expect(recipeEntry).toMatch(`${BASE_URL}/en/jsonapi/node/recipe`) + expect(getIndexSpy).toHaveBeenCalledTimes(1) + + const articleEntry = await client.getEntryForResourceType("node--article") + expect(articleEntry).toMatch(`${BASE_URL}/en/jsonapi/node/article`) + expect(getIndexSpy).toHaveBeenCalledTimes(2) + }) + + test("assembles JSON:API entry without fetching index", async () => { + const client = new DrupalClient(BASE_URL, { + useDefaultResourceTypeEntry: true, + }) + const getIndexSpy = jest.spyOn(client, "getIndex") + + const recipeEntry = await client.getEntryForResourceType("node--article") + expect(recipeEntry).toMatch(`${BASE_URL}/jsonapi/node/article`) + expect(getIndexSpy).toHaveBeenCalledTimes(0) + }) + + test("throws an error if resource type does not exist", async () => { + const client = new DrupalClient(BASE_URL) + + await expect( + client.getEntryForResourceType("RESOURCE-DOES-NOT-EXIST") + ).rejects.toThrow("Resource of type 'RESOURCE-DOES-NOT-EXIST' not found.") + }) +}) + +describe("getIndex()", () => { + test("fetches the JSON:API index", async () => { + const client = new DrupalClient(BASE_URL) + const index = await client.getIndex() + + expect(index).toMatchSnapshot() + }) + + test("fetches the JSON:API index with locale", async () => { + const client = new DrupalClient(BASE_URL) + const index = await client.getIndex("es") + + expect(index).toMatchSnapshot() + }) + + test("throws error for invalid base url", async () => { + const client = new DrupalClient("https://example.com") + + await expect(client.getIndex()).rejects.toThrow( + "Failed to fetch JSON:API index at https://example.com/jsonapi" + ) + }) +}) + +describe("getMenu()", () => { + test("fetches menu items for a menu", async () => { + const client = new DrupalClient(BASE_URL) + + const menu = await client.getMenu("main") + + expect(menu).toMatchSnapshot() + }) + + test("fetches menu items for a menu with locale", async () => { + const client = new DrupalClient(BASE_URL) + + const menu = await client.getMenu("main", { + locale: "es", + defaultLocale: "en", + }) + + expect(menu).toMatchSnapshot() + }) + + test("fetches menu items for a menu with params", async () => { + const client = new DrupalClient(BASE_URL) + + const menu = await client.getMenu("main", { + params: { + "fields[menu_link_content--menu_link_content]": "title", + }, + }) + + expect(menu).toMatchSnapshot() + }) + + test("throws an error for invalid menu name", async () => { + const client = new DrupalClient(BASE_URL) + + await expect(client.getMenu("INVALID")).rejects.toThrow( + '404 Not Found\nThe "menu" parameter was not converted for the path "/jsonapi/menu_items/{menu}" (route name: "jsonapi_menu_items.menu")' + ) + }) + + test("makes un-authenticated requests by default", async () => { + const client = new DrupalClient(BASE_URL) + const fetchSpy = jest.spyOn(client, "fetch") + + await client.getMenu("main") + expect(fetchSpy).toHaveBeenCalledWith(expect.anything(), { + withAuth: false, + }) + }) + + test("makes authenticated requests with withAuth option", async () => { + const client = new DrupalClient(BASE_URL, { + useDefaultResourceTypeEntry: true, + auth: `Bearer sample-token`, + }) + const fetchSpy = spyOnFetch() + jest.spyOn(client, "getAccessToken") + + await client.getMenu("main", { withAuth: true }) + + expect(fetchSpy).toHaveBeenCalledWith( + expect.anything(), + expect.objectContaining({ + withAuth: true, + }) + ) + }) +}) + +describe("getResource()", () => { + test("fetches a resource by uuid", async () => { + const client = new DrupalClient(BASE_URL) + const recipe = await client.getResource( + "node--recipe", + "71e04ead-4cc7-416c-b9ca-60b635fdc50f" + ) + + expect(recipe).toMatchSnapshot() + }) + + test("fetches a resource by uuid with params", async () => { + const client = new DrupalClient(BASE_URL) + const recipe = await client.getResource( + "node--recipe", + "71e04ead-4cc7-416c-b9ca-60b635fdc50f", + { + params: { + "fields[node--recipe]": "title,field_cooking_time", + }, + } + ) + + expect(recipe).toMatchSnapshot() + }) + + test("fetches a resource using locale", async () => { + const client = new DrupalClient(BASE_URL) + const recipe = await client.getResource( + "node--recipe", + "71e04ead-4cc7-416c-b9ca-60b635fdc50f", + { + locale: "es", + defaultLocale: "en", + params: { + "fields[node--recipe]": "title,field_cooking_time", + }, + } + ) + + expect(recipe).toMatchSnapshot() + }) + + test("fetches raw data", async () => { + const client = new DrupalClient(BASE_URL) + + await expect( + client.getResource( + "node--recipe", + "71e04ead-4cc7-416c-b9ca-60b635fdc50f", + { + deserialize: false, + } + ) + ).resolves.toMatchSnapshot() + }) + + test("fetches a resource by revision", async () => { + const client = new DrupalClient(BASE_URL) + const recipe = await client.getResource( + "node--recipe", + "71e04ead-4cc7-416c-b9ca-60b635fdc50f", + { + params: { + "fields[node--recipe]": "drupal_internal__vid", + }, + } + ) + const latestRevision = await client.getResource( + "node--recipe", + "71e04ead-4cc7-416c-b9ca-60b635fdc50f", + { + params: { + resourceVersion: "rel:latest-version", + "fields[node--recipe]": "drupal_internal__vid", + }, + } + ) + + expect(recipe.drupal_internal__vid).toEqual( + latestRevision.drupal_internal__vid + ) + }) + + test("throws an error for invalid revision", async () => { + const client = new DrupalClient(BASE_URL) + + await expect( + client.getResource( + "node--recipe", + "71e04ead-4cc7-416c-b9ca-60b635fdc50f", + { + params: { + resourceVersion: "id:-11", + "fields[node--recipe]": "title", + }, + } + ) + ).rejects.toThrow( + "404 Not Found\nThe requested version, identified by `id:-11`, could not be found." + ) + }) + + test("throws an error if revision access is forbidden", async () => { + const client = new DrupalClient(BASE_URL) + + await expect( + client.getResource( + "node--recipe", + "71e04ead-4cc7-416c-b9ca-60b635fdc50f", + { + params: { + resourceVersion: "id:1", + "fields[node--recipe]": "title", + }, + } + ) + ).rejects.toThrow( + "403 Forbidden\nThe current user is not allowed to GET the selected resource. The user does not have access to the requested version." + ) + }) + + test("throws an error for invalid resource type", async () => { + const client = new DrupalClient(BASE_URL) + + await expect( + client.getResource( + "RESOURCE-DOES-NOT-EXIST", + "71e04ead-4cc7-416c-b9ca-60b635fdc50f" + ) + ).rejects.toThrow("Resource of type 'RESOURCE-DOES-NOT-EXIST' not found.") + }) + + test("throws an error for invalid params", async () => { + const client = new DrupalClient(BASE_URL) + + await expect( + client.getResource( + "node--recipe", + "71e04ead-4cc7-416c-b9ca-60b635fdc50f", + { + params: { + include: "invalid_relationship", + }, + } + ) + ).rejects.toThrow( + "400 Bad Request\n`invalid_relationship` is not a valid relationship field name. Possible values: node_type, revision_uid, uid, menu_link, field_media_image, field_recipe_category, field_tags." + ) + }) + + test("makes un-authenticated requests by default", async () => { + const client = new DrupalClient(BASE_URL) + const fetchSpy = jest.spyOn(client, "fetch") + + await client.getResource( + "node--recipe", + "71e04ead-4cc7-416c-b9ca-60b635fdc50f" + ) + expect(fetchSpy).toHaveBeenCalledWith(expect.anything(), { + withAuth: false, + }) + }) + + test("makes authenticated requests with withAuth option", async () => { + const client = new DrupalClient(BASE_URL, { + useDefaultResourceTypeEntry: true, + auth: `Bearer sample-token`, + }) + const fetchSpy = spyOnFetch() + jest.spyOn(client, "getAccessToken") + + await client.getResource( + "node--recipe", + "71e04ead-4cc7-416c-b9ca-60b635fdc50f", + { + withAuth: true, + } + ) + + expect(fetchSpy).toHaveBeenCalledWith( + expect.anything(), + expect.objectContaining({ + withAuth: true, + }) + ) + }) +}) + +describe("getResourceByPath()", () => { + test("fetches a resource by path", async () => { + const client = new DrupalClient(BASE_URL) + + await expect( + client.getResourceByPath("/recipes/deep-mediterranean-quiche") + ).resolves.toMatchSnapshot() + }) + + test("fetches a resource by path with params", async () => { + const client = new DrupalClient(BASE_URL) + + await expect( + client.getResourceByPath("/recipes/deep-mediterranean-quiche", { + params: { + "fields[node--recipe]": "title,field_cooking_time", + }, + }) + ).resolves.toMatchSnapshot() + }) + + test("fetches a resource by path using locale", async () => { + const client = new DrupalClient(BASE_URL) + const recipe = await client.getResourceByPath( + "/recipes/quiche-mediterráneo-profundo", + { + locale: "es", + defaultLocale: "en", + params: { + "fields[node--recipe]": "title,field_cooking_time", + }, + } + ) + + expect(recipe).toMatchSnapshot() + }) + + test("fetches raw data", async () => { + const client = new DrupalClient(BASE_URL) + + await expect( + client.getResourceByPath("/recipes/deep-mediterranean-quiche", { + deserialize: false, + }) + ).resolves.toMatchSnapshot() + }) + + test("fetches a resource by revision", async () => { + const client = new DrupalClient(BASE_URL) + const recipe = await client.getResourceByPath( + "/recipes/deep-mediterranean-quiche", + { + params: { + "fields[node--recipe]": "drupal_internal__vid", + }, + } + ) + const latestRevision = await client.getResourceByPath( + "/recipes/deep-mediterranean-quiche", + { + params: { + resourceVersion: "rel:latest-version", + "fields[node--recipe]": "drupal_internal__vid", + }, + } + ) + + expect(recipe.drupal_internal__vid).toEqual( + latestRevision.drupal_internal__vid + ) + }) + + test("throws an error for invalid revision", async () => { + const client = new DrupalClient(BASE_URL) + + await expect( + client.getResourceByPath( + "/recipes/deep-mediterranean-quiche", + { + params: { + resourceVersion: "id:-11", + "fields[node--recipe]": "title", + }, + } + ) + ).rejects.toThrow( + "404 Not Found\nThe requested version, identified by `id:-11`, could not be found." + ) + }) + + test("throws an error if revision access is forbidden", async () => { + const client = new DrupalClient(BASE_URL) + + await expect( + client.getResourceByPath( + "/recipes/deep-mediterranean-quiche", + { + params: { + resourceVersion: "id:1", + "fields[node--recipe]": "title", + }, + } + ) + ).rejects.toThrow( + "403 Forbidden\nThe current user is not allowed to GET the selected resource. The user does not have access to the requested version." + ) + }) + + test("returns null for path not found", async () => { + const client = new DrupalClient(BASE_URL) + + await expect( + client.getResourceByPath("/path-do-not-exist") + ).rejects.toThrow("Unable to resolve path /path-do-not-exist.") + }) + + test("throws an error for invalid params", async () => { + const client = new DrupalClient(BASE_URL) + + await expect( + client.getResourceByPath( + "/recipes/deep-mediterranean-quiche", + { + params: { + include: "invalid_relationship", + }, + } + ) + ).rejects.toThrow( + "400 Bad Request\n`invalid_relationship` is not a valid relationship field name. Possible values: node_type, revision_uid, uid, menu_link, field_media_image, field_recipe_category, field_tags." + ) + }) + + test("makes un-authenticated requests by default", async () => { + const client = new DrupalClient(BASE_URL) + const fetchSpy = jest.spyOn(client, "fetch") + const getAccessTokenSpy = jest.spyOn(client, "getAccessToken") + + await client.getResourceByPath( + "/recipes/deep-mediterranean-quiche" + ) + expect(fetchSpy).toHaveBeenCalledWith( + expect.anything(), + expect.not.objectContaining({ + withAuth: true, + }) + ) + expect(getAccessTokenSpy).not.toHaveBeenCalled() + }) + + test("makes authenticated requests with withAuth", async () => { + const client = new DrupalClient(BASE_URL, { + auth: mocks.auth.clientIdSecret, + }) + const fetchSpy = spyOnFetch() + const getAccessTokenSpy = jest.spyOn(client, "getAccessToken") + + await client.getResourceByPath( + "/recipes/deep-mediterranean-quiche", + { + withAuth: true, + } + ) + + expect(fetchSpy).toHaveBeenCalledWith( + expect.anything(), + expect.objectContaining({ + withAuth: true, + }) + ) + expect(getAccessTokenSpy).toHaveBeenCalled() + }) + + test("returns null if path is falsey", async () => { + const client = new DrupalClient(BASE_URL) + + const resource = await client.getResourceByPath("") + expect(resource).toBe(null) + }) +}) + +describe("getResourceCollection()", () => { + test("fetches a resource collection", async () => { + const client = new DrupalClient(BASE_URL) + + const articles = await client.getResourceCollection("node--article", { + params: { + "fields[node--article]": "title", + }, + }) + + expect(articles).toMatchSnapshot() + }) + + test("fetches a resource collection using locale", async () => { + const client = new DrupalClient(BASE_URL) + + const articles = await client.getResourceCollection("node--article", { + locale: "es", + defaultLocale: "en", + params: { + "fields[node--article]": "title,langcode", + }, + }) + + expect(articles[0].langcode).toEqual("es") + + expect(articles).toMatchSnapshot() + }) + + test("fetches raw data", async () => { + const client = new DrupalClient(BASE_URL) + + const recipes = await client.getResourceCollection("node--recipe", { + deserialize: false, + params: { + "fields[node--recipe]": "title", + "page[limit]": 2, + }, + }) + + expect(recipes).toMatchSnapshot() + }) + + test("throws an error for invalid resource type", async () => { + const client = new DrupalClient(BASE_URL) + + await expect( + client.getResourceCollection("RESOURCE-DOES-NOT-EXIST") + ).rejects.toThrow("Resource of type 'RESOURCE-DOES-NOT-EXIST' not found.") + }) + + test("throws an error for invalid params", async () => { + const client = new DrupalClient(BASE_URL) + + await expect( + client.getResourceCollection("node--recipe", { + params: { + include: "invalid_relationship", + }, + }) + ).rejects.toThrow( + "400 Bad Request\n`invalid_relationship` is not a valid relationship field name. Possible values: node_type, revision_uid, uid, menu_link, field_media_image, field_recipe_category, field_tags." + ) + }) + + test("makes un-authenticated requests by default", async () => { + const client = new DrupalClient(BASE_URL) + const fetchSpy = jest.spyOn(client, "fetch") + + await client.getResourceCollection("node--recipe") + expect(fetchSpy).toHaveBeenCalledWith(expect.anything(), { + withAuth: false, + }) + }) + + test("makes authenticated requests with withAuth option", async () => { + const client = new DrupalClient(BASE_URL, { + useDefaultResourceTypeEntry: true, + auth: `Bearer sample-token`, + }) + const fetchSpy = spyOnFetch() + jest.spyOn(client, "getAccessToken") + + await client.getResourceCollection("node--recipe", { + withAuth: true, + }) + + expect(fetchSpy).toHaveBeenCalledWith( + expect.anything(), + expect.objectContaining({ + withAuth: true, + }) + ) + }) +}) + +describe("getSearchIndex()", () => { + test("fetches a search index", async () => { + const client = new DrupalClient(BASE_URL) + + const search = await client.getSearchIndex("recipes", { + params: { + "fields[node--recipe]": "title", + }, + }) + + expect(search).toMatchSnapshot() + }) + + test("fetches a search index with locale", async () => { + const client = new DrupalClient(BASE_URL) + + const search = await client.getSearchIndex("recipes", { + locale: "es", + defaultLocale: "en", + params: { + "fields[node--recipe]": "title", + }, + }) + + expect(search).toMatchSnapshot() + }) + + test("fetches a search index with facets filters", async () => { + const client = new DrupalClient(BASE_URL) + + const search = await client.getSearchIndex( + "recipes", + { + deserialize: false, + params: { + "filter[difficulty]": "easy", + "fields[node--recipe]": "title,field_difficulty", + }, + } + ) + + expect(search).toMatchSnapshot() + expect(search.meta.facets).not.toBeNull() + }) + + test("fetches raw data from search index", async () => { + const client = new DrupalClient(BASE_URL) + + const search = await client.getSearchIndex("recipes", { + deserialize: false, + params: { + "filter[difficulty]": "easy", + "fields[node--recipe]": "title,field_difficulty", + }, + }) + + expect(search).toMatchSnapshot() + }) + + test("makes un-authenticated requests by default", async () => { + const client = new DrupalClient(BASE_URL) + const fetchSpy = jest.spyOn(client, "fetch") + + await client.getSearchIndex("recipes") + + expect(fetchSpy).toHaveBeenCalledWith(expect.anything(), { + withAuth: false, + }) + }) + + test("throws an error for invalid index", async () => { + const client = new DrupalClient(BASE_URL) + + await expect(client.getSearchIndex("INVALID-INDEX")).rejects.toThrow( + "Not Found" + ) + }) + + test("makes authenticated requests with withAuth option", async () => { + const client = new DrupalClient(BASE_URL, { + useDefaultResourceTypeEntry: true, + auth: `Bearer sample-token`, + }) + const fetchSpy = spyOnFetch() + jest.spyOn(client, "getAccessToken") + + await client.getSearchIndex("recipes", { + withAuth: true, + }) + + expect(fetchSpy).toHaveBeenCalledWith( + expect.anything(), + expect.objectContaining({ + withAuth: true, + }) + ) + }) +}) + +describe("getView()", () => { + test("fetches a view", async () => { + const client = new DrupalClient(BASE_URL) + + const view = await client.getView("featured_articles--page_1") + + expect(view).toMatchSnapshot() + }) + + test("fetches a view with params", async () => { + const client = new DrupalClient(BASE_URL) + + const view = await client.getView("featured_articles--page_1", { + params: { + "fields[node--article]": "title", + }, + }) + + expect(view).toMatchSnapshot() + }) + + test("fetches a view with locale", async () => { + const client = new DrupalClient(BASE_URL) + + const view = await client.getView("featured_articles--page_1", { + locale: "es", + defaultLocale: "en", + params: { + "fields[node--article]": "title", + }, + }) + + expect(view).toMatchSnapshot() + }) + + test("fetches raw data", async () => { + const client = new DrupalClient(BASE_URL) + + const view = await client.getView("featured_articles--page_1", { + locale: "es", + defaultLocale: "en", + deserialize: false, + params: { + "fields[node--article]": "title", + }, + }) + + expect(view).toMatchSnapshot() + }) + + test("throws an error for invalid view name", async () => { + const client = new DrupalClient(BASE_URL) + + await expect(client.getView("INVALID")).rejects.toThrow("Not Found") + }) + + test("makes un-authenticated requests by default", async () => { + const client = new DrupalClient(BASE_URL) + const fetchSpy = jest.spyOn(client, "fetch") + + await client.getView("featured_articles--page_1") + expect(fetchSpy).toHaveBeenCalledWith(expect.anything(), { + withAuth: false, + }) + }) + + test("makes authenticated requests with withAuth option", async () => { + const client = new DrupalClient(BASE_URL, { + useDefaultResourceTypeEntry: true, + auth: `Bearer sample-token`, + }) + const fetchSpy = spyOnFetch() + jest.spyOn(client, "getAccessToken") + + await client.getView("featured_articles--page_1", { withAuth: true }) + + expect(fetchSpy).toHaveBeenCalledWith( + expect.anything(), + expect.objectContaining({ + withAuth: true, + }) + ) + }) + + test("fetches a view with links for pagination", async () => { + const client = new DrupalClient(BASE_URL) + const view = await client.getView("recipes--page_1") + + expect(view.links).toHaveProperty("next") + }) +}) + +describe("translatePath()", () => { + test("translates a path", async () => { + const client = new DrupalClient(BASE_URL) + + const path = await client.translatePath("recipes/deep-mediterranean-quiche") + + expect(path).toMatchSnapshot() + + const path2 = await client.translatePath( + "/recipes/deep-mediterranean-quiche" + ) + + expect(path).toEqual(path2) + }) + + test("returns null for path not found", async () => { + const client = new DrupalClient(BASE_URL) + + const path = await client.translatePath("/path-not-found") + + expect(path).toBeNull() + }) + + test("makes un-authenticated requests by default", async () => { + const client = new DrupalClient(BASE_URL) + const fetchSpy = jest.spyOn(client, "fetch") + + await client.translatePath("recipes/deep-mediterranean-quiche") + + expect(fetchSpy).toHaveBeenCalledWith( + expect.anything(), + expect.objectContaining({ + withAuth: false, + }) + ) + }) + + test("makes authenticated requests with withAuth option", async () => { + const client = new DrupalClient(BASE_URL, { + useDefaultResourceTypeEntry: true, + auth: `Bearer sample-token`, + }) + const fetchSpy = spyOnFetch() + jest.spyOn(client, "getAccessToken") + + await client.translatePath("recipes/deep-mediterranean-quiche", { + withAuth: true, + }) + + expect(fetchSpy).toHaveBeenCalledWith( + expect.anything(), + expect.objectContaining({ + withAuth: true, + }) + ) + }) +}) diff --git a/packages/next-drupal/tests/DrupalClient/getters-setters.test.ts b/packages/next-drupal/tests/DrupalClient/getters-setters.test.ts new file mode 100644 index 00000000..ce224196 --- /dev/null +++ b/packages/next-drupal/tests/DrupalClient/getters-setters.test.ts @@ -0,0 +1,224 @@ +import { afterEach, describe, expect, jest, test } from "@jest/globals" +import { + AccessToken, + DrupalClient, + DrupalClientAuthAccessToken, + DrupalClientAuthUsernamePassword, + DrupalClientOptions, +} from "../../src" +import { BASE_URL, mocks } from "../utils" + +afterEach(() => { + jest.restoreAllMocks() +}) + +describe("apiPrefix", () => { + test("get apiPrefix", () => { + const client = new DrupalClient(BASE_URL) + expect(client.apiPrefix).toBe("/jsonapi") + }) + test("set apiPrefix", () => { + const client = new DrupalClient(BASE_URL) + client.apiPrefix = "/api" + expect(client.apiPrefix).toBe("/api") + }) + test('set apiPrefix and prefixes with "/"', () => { + const client = new DrupalClient(BASE_URL) + client.apiPrefix = "api" + expect(client.apiPrefix).toBe("/api") + }) +}) + +describe("auth", () => { + describe("throws an error if invalid Basic Auth", () => { + test("missing username", () => { + expect(() => { + const client = new DrupalClient(BASE_URL) + // @ts-ignore + client.auth = { + password: "password", + } + }).toThrow( + "'username' and 'password' are required for auth. See https://next-drupal.org/docs/client/auth" + ) + }) + + test("missing password", () => { + expect(() => { + const client = new DrupalClient(BASE_URL) + // @ts-ignore + client.auth = { + username: "admin", + } + }).toThrow( + "'username' and 'password' are required for auth. See https://next-drupal.org/docs/client/auth" + ) + }) + }) + + describe("throws an error if invalid Access Token", () => { + // TODO: The wrong error is thrown. + test.skip("missing access_token", () => { + expect(() => { + const client = new DrupalClient(BASE_URL) + // @ts-ignore + client.auth = { + token_type: "bearer", + } + }).toThrow( + "'access_token' and 'token_type' are required for auth. See https://next-drupal.org/docs/client/auth" + ) + }) + + test("missing token_type", () => { + expect(() => { + const client = new DrupalClient(BASE_URL) + // @ts-ignore + client.auth = { + access_token: mocks.auth.accessToken.access_token, + } + }).toThrow( + "'access_token' and 'token_type' are required for auth. See https://next-drupal.org/docs/client/auth" + ) + }) + }) + + describe("throws an error if invalid Client ID/Secret", () => { + test("missing clientId", () => { + expect(() => { + const client = new DrupalClient(BASE_URL) + // @ts-ignore + client.auth = { + clientSecret: mocks.auth.clientIdSecret.clientSecret, + } + }).toThrow( + "'clientId' and 'clientSecret' are required for auth. See https://next-drupal.org/docs/client/auth" + ) + }) + + test("missing clientSecret", () => { + expect(() => { + const client = new DrupalClient(BASE_URL) + // @ts-ignore + client.auth = { + clientId: mocks.auth.clientIdSecret.clientId, + } + }).toThrow( + "'clientId' and 'clientSecret' are required for auth. See https://next-drupal.org/docs/client/auth" + ) + }) + }) + + test("sets Basic Auth", () => { + const basicAuth: DrupalClientAuthUsernamePassword = { + ...mocks.auth.basicAuth, + } + const client = new DrupalClient(BASE_URL) + client.auth = basicAuth + expect(client._auth).toMatchObject({ ...basicAuth }) + }) + + test("sets Access Token", () => { + const accessToken = { + ...mocks.auth.accessToken, + } + const client = new DrupalClient(BASE_URL) + client.auth = accessToken + expect(client._auth).toMatchObject({ ...accessToken }) + }) + + test("sets Client ID/Secret", () => { + const clientIdSecret = { + ...mocks.auth.clientIdSecret, + } + const client = new DrupalClient(BASE_URL) + client.auth = clientIdSecret + expect(client._auth).toMatchObject({ ...clientIdSecret }) + }) + + test("sets auth function", () => { + const authFunction = mocks.auth.function + const client = new DrupalClient(BASE_URL) + client.auth = authFunction + expect(client._auth).toBe(authFunction) + }) + + test("sets custom Authorization string", () => { + const authString = `${mocks.auth.customAuthenticationHeader}` + const client = new DrupalClient(BASE_URL) + client.auth = authString + expect(client._auth).toBe(authString) + }) + + test("sets a default access token url", () => { + const accessToken = { + ...mocks.auth.accessToken, + } + const client = new DrupalClient(BASE_URL) + client.auth = accessToken + expect(client._auth.url).toBe("/oauth/token") + }) + + test("can override the default access token url", () => { + const accessToken = { + ...mocks.auth.accessToken, + url: "/custom/oauth/token", + } + const client = new DrupalClient(BASE_URL) + client.auth = accessToken + expect(client._auth.url).toBe("/custom/oauth/token") + }) +}) + +describe("headers", () => { + describe("set headers", () => { + test("using key-value pairs", () => { + const headers = [ + ["Content-Type", "application/x-www-form-urlencoded"], + ["Accept", "application/json"], + ] as DrupalClientOptions["headers"] + const client = new DrupalClient(BASE_URL) + client.headers = headers + expect(client._headers).toBe(headers) + }) + + test("using object literal", () => { + const headers = { + "Content-Type": "application/x-www-form-urlencoded", + Accept: "application/json", + } as DrupalClientOptions["headers"] + const client = new DrupalClient(BASE_URL) + client.headers = headers + expect(client._headers).toBe(headers) + }) + + test("using Headers object", () => { + const headers = new Headers() + headers.append("Content-Type", "application/x-www-form-urlencoded") + headers.append("Accept", "application/json") + + const client = new DrupalClient(BASE_URL) + client.headers = headers + expect(client._headers).toBe(headers) + }) + }) +}) + +describe("token", () => { + test("set token", () => { + function getExpiresOn(token: AccessToken): number { + return Date.now() + token.expires_in * 1000 + } + + const accessToken = { + ...mocks.auth.accessToken, + } as DrupalClientAuthAccessToken + const before = getExpiresOn(accessToken) + + const client = new DrupalClient(BASE_URL) + client.token = accessToken + expect(client._token).toBe(accessToken) + expect(client.tokenExpiresOn).toBeGreaterThanOrEqual(before) + expect(client.tokenExpiresOn).toBeLessThanOrEqual(getExpiresOn(accessToken)) + }) +}) diff --git a/packages/next-drupal/tests/DrupalClient/pages-router-methods.test.ts b/packages/next-drupal/tests/DrupalClient/pages-router-methods.test.ts new file mode 100644 index 00000000..fa4679b5 --- /dev/null +++ b/packages/next-drupal/tests/DrupalClient/pages-router-methods.test.ts @@ -0,0 +1,1252 @@ +import { afterEach, describe, expect, jest, test } from "@jest/globals" +import { GetStaticPropsContext } from "next" +import { DrupalClient } from "../../src" +import { BASE_URL, mocks, spyOnFetch } from "../utils" +import type { DrupalNode, JsonApiResourceWithPath } from "../../src" + +afterEach(() => { + jest.restoreAllMocks() +}) + +describe("buildStaticPathsFromResources()", () => { + const resources: Pick[] = [ + { + path: { + alias: "/blog/post/one", + pid: 1, + langcode: "en", + }, + }, + { + path: { + alias: "/blog/post/two", + pid: 2, + langcode: "en", + }, + }, + ] + + test("builds static paths from resources", () => { + const client = new DrupalClient(BASE_URL) + + expect(client.buildStaticPathsFromResources(resources)).toMatchObject([ + { + params: { + slug: ["blog", "post", "one"], + }, + }, + { + params: { + slug: ["blog", "post", "two"], + }, + }, + ]) + + expect( + client.buildStaticPathsFromResources(resources, { locale: "es" }) + ).toMatchObject([ + { + locale: "es", + params: { + slug: ["blog", "post", "one"], + }, + }, + { + locale: "es", + params: { + slug: ["blog", "post", "two"], + }, + }, + ]) + }) + + test("builds static paths from resources with pathPrefix", () => { + const client = new DrupalClient(BASE_URL) + + const paths = client.buildStaticPathsFromResources(resources, { + pathPrefix: "blog", + }) + + const paths2 = client.buildStaticPathsFromResources(resources, { + pathPrefix: "/blog", + }) + + const paths3 = client.buildStaticPathsFromResources(resources, { + pathPrefix: "/blog/post", + locale: "es", + }) + + const paths4 = client.buildStaticPathsFromResources(resources, { + pathPrefix: "blog/post", + locale: "es", + }) + + expect(paths).toMatchObject([ + { + params: { + slug: ["post", "one"], + }, + }, + { + params: { + slug: ["post", "two"], + }, + }, + ]) + expect(paths3).toMatchObject([ + { + locale: "es", + params: { + slug: ["one"], + }, + }, + { + locale: "es", + params: { + slug: ["two"], + }, + }, + ]) + + expect(paths).toEqual(paths2) + expect(paths3).toEqual(paths4) + }) + + test('converts frontPage path to "/"', () => { + const client = new DrupalClient(BASE_URL) + + const resources: Pick[] = [ + { + path: { + alias: "/home", + pid: 1, + langcode: "en", + }, + }, + ] + + expect(client.buildStaticPathsFromResources(resources)).toMatchObject([ + { + params: { + slug: [""], + }, + }, + ]) + }) +}) + +describe("buildStaticPathsParamsFromPaths()", () => { + test("builds static paths from paths", () => { + const client = new DrupalClient(BASE_URL) + + const paths = ["/blog/post/one", "/blog/post/two", "/blog/post/three"] + + expect(client.buildStaticPathsParamsFromPaths(paths)).toMatchObject([ + { + params: { + slug: ["blog", "post", "one"], + }, + }, + { + params: { + slug: ["blog", "post", "two"], + }, + }, + { + params: { + slug: ["blog", "post", "three"], + }, + }, + ]) + + expect( + client.buildStaticPathsParamsFromPaths(paths, { locale: "en" }) + ).toMatchObject([ + { + locale: "en", + params: { + slug: ["blog", "post", "one"], + }, + }, + { + locale: "en", + params: { + slug: ["blog", "post", "two"], + }, + }, + { + locale: "en", + params: { + slug: ["blog", "post", "three"], + }, + }, + ]) + }) + + test("builds static paths from paths with pathPrefix", () => { + const client = new DrupalClient(BASE_URL) + + const paths = client.buildStaticPathsParamsFromPaths( + ["/blog/post/one", "/blog/post/two", "/blog/post"], + { pathPrefix: "blog" } + ) + + const paths2 = client.buildStaticPathsParamsFromPaths( + ["/blog/post/one", "/blog/post/two", "/blog/post"], + { pathPrefix: "/blog" } + ) + + const paths3 = client.buildStaticPathsParamsFromPaths( + ["blog/post/one", "blog/post/two", "blog/post"], + { pathPrefix: "/blog" } + ) + + const paths4 = client.buildStaticPathsParamsFromPaths( + ["blog/post/one", "blog/post/two", "blog/post"], + { pathPrefix: "blog" } + ) + + expect(paths).toMatchObject([ + { + params: { + slug: ["post", "one"], + }, + }, + { + params: { + slug: ["post", "two"], + }, + }, + { + params: { + slug: ["post"], + }, + }, + ]) + + expect(paths).toEqual(paths2) + expect(paths).toEqual(paths3) + expect(paths).toEqual(paths4) + }) +}) + +describe("getAuthFromContextAndOptions()", () => { + const clientIdSecret = mocks.auth.clientIdSecret + + test("should use the withAuth option if provided and NOT in preview", async () => { + const client = new DrupalClient(BASE_URL, { + auth: clientIdSecret, + }) + const fetchSpy = spyOnFetch() + jest.spyOn(client, "getAccessToken") + + await client.getResourceFromContext( + "node--article", + { + preview: false, + }, + { + withAuth: true, + } + ) + + expect(fetchSpy).toHaveBeenCalledWith( + expect.anything(), + expect.objectContaining({ + withAuth: true, + }) + ) + + await client.getResourceFromContext( + "node--article", + { + preview: false, + }, + { + withAuth: { + clientId: "foo", + clientSecret: "bar", + scope: "baz", + }, + } + ) + + expect(fetchSpy).toHaveBeenLastCalledWith( + expect.anything(), + expect.objectContaining({ + withAuth: { + clientId: "foo", + clientSecret: "bar", + scope: "baz", + }, + }) + ) + }) + + test("should fallback to the global auth if NOT in preview and no withAuth option provided", async () => { + const client = new DrupalClient(BASE_URL, { + auth: clientIdSecret, + }) + const fetchSpy = spyOnFetch() + + await client.getResourceFromContext("node--article", { + preview: false, + }) + + expect(fetchSpy).toHaveBeenCalledWith( + expect.anything(), + expect.objectContaining({ + withAuth: false, + }) + ) + + const client2 = new DrupalClient(BASE_URL, { + auth: clientIdSecret, + withAuth: true, + }) + jest.spyOn(client2, "getAccessToken").mockImplementation(async () => ({ + token_type: "", + expires_in: 0, + access_token: "", + })) + + await client2.getResourceFromContext("node--article", { + preview: false, + }) + + expect(fetchSpy).toHaveBeenLastCalledWith( + expect.anything(), + expect.objectContaining({ + withAuth: true, + }) + ) + }) + + test("should NOT use the global auth if in preview", async () => { + const client = new DrupalClient(BASE_URL, { + auth: clientIdSecret, + withAuth: true, + }) + const fetchSpy = spyOnFetch() + + await client.getResourceFromContext("node--article", { + preview: true, + }) + + expect(fetchSpy).toHaveBeenCalledWith( + expect.anything(), + expect.objectContaining({ + withAuth: null, + }) + ) + }) + + test("should use the scope from context if in preview and using the simple_oauth plugin", async () => { + const client = new DrupalClient(BASE_URL, { + auth: clientIdSecret, + }) + const fetchSpy = spyOnFetch() + + await client.getResourceFromContext("node--article", { + preview: true, + previewData: { + plugin: "simple_oauth", + scope: "editor", + }, + }) + + expect(fetchSpy).toHaveBeenCalledWith( + expect.anything(), + expect.objectContaining({ + withAuth: { + ...clientIdSecret, + scope: "editor", + url: "/oauth/token", + }, + }) + ) + }) + + test("should use the scope from context even with global withAuth if in preview and using the simple_oauth plugin", async () => { + const client = new DrupalClient(BASE_URL, { + auth: { + ...clientIdSecret, + scope: "administrator", + }, + withAuth: true, + }) + const fetchSpy = spyOnFetch() + + await client.getResourceFromContext("node--article", { + preview: true, + previewData: { + plugin: "simple_oauth", + scope: "editor", + }, + }) + + expect(fetchSpy).toHaveBeenCalledWith( + expect.anything(), + expect.objectContaining({ + withAuth: { + ...clientIdSecret, + scope: "editor", + url: "/oauth/token", + }, + }) + ) + }) + + test("should use the access_token from context if in preview and using the jwt plugin", async () => { + const client = new DrupalClient(BASE_URL, { + auth: clientIdSecret, + }) + const fetchSpy = spyOnFetch() + + await client.getResourceFromContext("node--article", { + preview: true, + previewData: { + plugin: "jwt", + access_token: "example-token", + }, + }) + + expect(fetchSpy).toHaveBeenCalledWith( + expect.anything(), + expect.objectContaining({ + withAuth: `Bearer example-token`, + }) + ) + }) + + test("should use the access token from context even with global withAuth if in preview and using the jwt plugin", async () => { + const client = new DrupalClient(BASE_URL, { + auth: { + ...clientIdSecret, + scope: "administrator", + }, + withAuth: true, + }) + const fetchSpy = spyOnFetch() + + await client.getResourceFromContext("node--article", { + preview: true, + previewData: { + plugin: "jwt", + access_token: "example-token", + }, + }) + + expect(fetchSpy).toHaveBeenCalledWith( + expect.anything(), + expect.objectContaining({ + withAuth: `Bearer example-token`, + }) + ) + }) +}) + +describe("getPathFromContext()", () => { + test("returns a path from context", async () => { + const client = new DrupalClient(BASE_URL) + + expect( + client.getPathFromContext({ + params: { + slug: ["foo"], + }, + }) + ).toEqual("/foo") + + expect( + client.getPathFromContext({ + params: { + slug: ["foo", "bar"], + }, + }) + ).toEqual("/foo/bar") + + expect( + client.getPathFromContext({ + locale: "en", + defaultLocale: "es", + params: { + slug: ["foo", "bar"], + }, + }) + ).toEqual("/en/foo/bar") + + expect( + client.getPathFromContext({ + params: { + slug: [], + }, + }) + ).toEqual("/home") + + client.frontPage = "/front" + + expect( + client.getPathFromContext({ + params: { + slug: [], + }, + }) + ).toEqual("/front") + + expect( + client.getPathFromContext({ + locale: "es", + defaultLocale: "en", + params: { + slug: [], + }, + }) + ).toEqual("/es/front") + }) + + test("returns a path from context with pathPrefix", () => { + const client = new DrupalClient(BASE_URL) + + expect( + client.getPathFromContext( + { + params: { + slug: ["bar", "baz"], + }, + }, + { + pathPrefix: "/foo", + } + ) + ).toEqual("/foo/bar/baz") + + expect( + client.getPathFromContext( + { + params: { + slug: ["bar", "baz"], + }, + }, + { + pathPrefix: "foo", + } + ) + ).toEqual("/foo/bar/baz") + + expect( + client.getPathFromContext( + { + locale: "en", + defaultLocale: "en", + params: { + slug: ["bar", "baz"], + }, + }, + { + pathPrefix: "foo", + } + ) + ).toEqual("/foo/bar/baz") + + expect( + client.getPathFromContext( + { + locale: "es", + defaultLocale: "en", + params: { + slug: ["bar", "baz"], + }, + }, + { + pathPrefix: "foo", + } + ) + ).toEqual("/es/foo/bar/baz") + + expect( + client.getPathFromContext( + { + locale: "es", + defaultLocale: "en", + params: { + slug: [], + }, + }, + { + pathPrefix: "/foo", + } + ) + ).toEqual("/es/foo/home") + + client.frontPage = "/baz" + + expect( + client.getPathFromContext( + { + locale: "en", + defaultLocale: "en", + params: { + slug: [], + }, + }, + { + pathPrefix: "foo", + } + ) + ).toEqual("/foo/baz") + + expect( + client.getPathFromContext( + { + params: { + slug: [], + }, + }, + { + pathPrefix: "/foo/bar", + } + ) + ).toEqual("/foo/bar/baz") + }) + + test("encodes path with punctuation", async () => { + const client = new DrupalClient(BASE_URL) + + const path = client.getPathFromContext({ + params: { + slug: ["path&with^punc&in$path"], + }, + }) + + expect(path).toEqual("/path%26with%5Epunc%26in%24path") + + const translatedPath = await client.translatePath(path) + + expect(translatedPath).toMatchSnapshot() + }) +}) + +describe("getPathsFromContext()", () => { + test("is an alias for getStaticPathsFromContext", () => { + const client = new DrupalClient(BASE_URL) + expect(client.getPathsFromContext).toBe(client.getStaticPathsFromContext) + }) +}) + +describe("getResourceCollectionFromContext()", () => { + test("fetches a resource collection", async () => { + const client = new DrupalClient(BASE_URL) + + const context: GetStaticPropsContext = { + locale: "en", + defaultLocale: "en", + } + + const articles = await client.getResourceCollectionFromContext( + "node--article", + context, + { + params: { + "fields[node--article]": "title", + }, + } + ) + + expect(articles).toMatchSnapshot() + }) + + test("fetches a resource collection using locale", async () => { + const client = new DrupalClient(BASE_URL) + + const context: GetStaticPropsContext = { + locale: "es", + defaultLocale: "en", + } + + const articles = await client.getResourceCollectionFromContext( + "node--article", + context, + { + params: { + "fields[node--article]": "title,langcode", + }, + } + ) + + expect(articles[0].langcode).toEqual("es") + + expect(articles).toMatchSnapshot() + }) + + test("fetches raw data", async () => { + const client = new DrupalClient(BASE_URL) + + const context: GetStaticPropsContext = { + locale: "en", + defaultLocale: "en", + } + + const recipes = await client.getResourceCollectionFromContext( + "node--recipe", + context, + { + deserialize: false, + params: { + "fields[node--recipe]": "title", + "page[limit]": 2, + }, + } + ) + + expect(recipes).toMatchSnapshot() + }) + + test("throws an error for invalid resource type", async () => { + const client = new DrupalClient(BASE_URL) + + const context: GetStaticPropsContext = { + locale: "en", + defaultLocale: "en", + } + + await expect( + client.getResourceCollectionFromContext( + "RESOURCE-DOES-NOT-EXIST", + context + ) + ).rejects.toThrow("Resource of type 'RESOURCE-DOES-NOT-EXIST' not found.") + }) + + test("throws an error for invalid params", async () => { + const client = new DrupalClient(BASE_URL) + + const context: GetStaticPropsContext = { + locale: "en", + defaultLocale: "en", + } + + await expect( + client.getResourceCollectionFromContext( + "node--recipe", + context, + { + params: { + include: "invalid_relationship", + }, + } + ) + ).rejects.toThrow( + "400 Bad Request\n`invalid_relationship` is not a valid relationship field name. Possible values: node_type, revision_uid, uid, menu_link, field_media_image, field_recipe_category, field_tags." + ) + }) + + test("makes un-authenticated requests by default", async () => { + const client = new DrupalClient(BASE_URL) + const fetchSpy = jest.spyOn(client, "fetch") + + const context: GetStaticPropsContext = { + locale: "en", + defaultLocale: "en", + } + + await client.getResourceCollectionFromContext("node--recipe", context) + expect(fetchSpy).toHaveBeenCalledWith(expect.anything(), { + withAuth: false, + }) + }) + + test("makes authenticated requests with withAuth option", async () => { + const client = new DrupalClient(BASE_URL, { + useDefaultResourceTypeEntry: true, + auth: `Bearer sample-token`, + }) + const fetchSpy = spyOnFetch() + jest.spyOn(client, "getAccessToken") + + const context: GetStaticPropsContext = { + locale: "en", + defaultLocale: "en", + } + await client.getResourceCollectionFromContext("node--recipe", context, { + withAuth: true, + }) + + expect(fetchSpy).toHaveBeenCalledWith( + expect.anything(), + expect.objectContaining({ + withAuth: true, + }) + ) + }) +}) + +describe("getResourceFromContext()", () => { + test("fetches a resource from context", async () => { + const client = new DrupalClient(BASE_URL) + const context: GetStaticPropsContext = { + params: { + slug: ["recipes", "deep-mediterranean-quiche"], + }, + } + const recipe = await client.getResourceFromContext( + "node--recipe", + context + ) + + expect(recipe).toMatchSnapshot() + }) + + test("fetches a resource from context with params", async () => { + const client = new DrupalClient(BASE_URL) + const context: GetStaticPropsContext = { + params: { + slug: ["recipes", "deep-mediterranean-quiche"], + }, + } + const recipe = await client.getResourceFromContext( + "node--recipe", + context, + { + params: { + "fields[node--recipe]": "title", + }, + } + ) + + expect(recipe).toMatchSnapshot() + }) + + test("fetches a resource from context using locale", async () => { + const client = new DrupalClient(BASE_URL) + const context: GetStaticPropsContext = { + params: { + slug: ["recipes", "quiche-mediterráneo-profundo"], + }, + locale: "es", + defaultLocale: "en", + } + const recipe = await client.getResourceFromContext( + "node--recipe", + context, + { + params: { + "fields[node--recipe]": "title,field_cooking_time", + }, + } + ) + + expect(recipe).toMatchSnapshot() + }) + + test("fetches raw data", async () => { + const client = new DrupalClient(BASE_URL) + + const context: GetStaticPropsContext = { + params: { + slug: ["recipes", "deep-mediterranean-quiche"], + }, + } + const recipe = await client.getResourceFromContext( + "node--recipe", + context, + { + deserialize: false, + params: { + "fields[node--recipe]": "title", + }, + } + ) + + expect(recipe).toMatchSnapshot() + }) + + test("fetches a resource from context by revision", async () => { + const client = new DrupalClient(BASE_URL) + const context: GetStaticPropsContext = { + params: { + slug: ["recipes", "quiche-mediterráneo-profundo"], + }, + locale: "es", + defaultLocale: "en", + } + const recipe = await client.getResourceFromContext( + "node--recipe", + context, + { + params: { + "fields[node--recipe]": "drupal_internal__vid", + }, + } + ) + + context.previewData = { resourceVersion: "rel:latest-version" } + + const latestRevision = await client.getResourceFromContext( + "node--recipe", + context, + { + params: { + "fields[node--recipe]": "drupal_internal__vid", + }, + } + ) + + expect(recipe.drupal_internal__vid).toEqual( + latestRevision.drupal_internal__vid + ) + }) + + test("throws an error for invalid revision", async () => { + const client = new DrupalClient(BASE_URL) + const context: GetStaticPropsContext = { + previewData: { + resourceVersion: "id:-11", + }, + params: { + slug: ["recipes", "deep-mediterranean-quiche"], + }, + } + + await expect( + client.getResourceFromContext("node--recipe", context, { + params: { + "fields[node--recipe]": "drupal_internal__vid", + }, + }) + ).rejects.toThrow( + "404 Not Found\nThe requested version, identified by `id:-11`, could not be found." + ) + }) + + test("throws an error if revision access is forbidden", async () => { + const client = new DrupalClient(BASE_URL) + + const context: GetStaticPropsContext = { + previewData: { + resourceVersion: "id:1", + }, + params: { + slug: ["recipes", "deep-mediterranean-quiche"], + }, + } + + await expect( + client.getResourceFromContext("node--recipe", context, { + params: { + "fields[node--recipe]": "title", + }, + }) + ).rejects.toThrow( + "403 Forbidden\nThe current user is not allowed to GET the selected resource. The user does not have access to the requested version." + ) + }) + + test("makes un-authenticated requests by default", async () => { + const client = new DrupalClient(BASE_URL) + const fetchSpy = jest.spyOn(client, "fetch") + const context: GetStaticPropsContext = { + params: { + slug: ["recipes", "deep-mediterranean-quiche"], + }, + } + + await client.getResourceFromContext("node--recipe", context) + expect(fetchSpy).toHaveBeenCalledWith( + expect.anything(), + expect.objectContaining({ + withAuth: false, + }) + ) + }) + + test("makes authenticated requests with withAuth option", async () => { + const client = new DrupalClient(BASE_URL, { + useDefaultResourceTypeEntry: true, + auth: `Bearer sample-token`, + }) + const fetchSpy = spyOnFetch() + jest.spyOn(client, "getAccessToken") + + const context: GetStaticPropsContext = { + params: { + slug: ["recipes", "deep-mediterranean-quiche"], + }, + } + + await client.getResourceFromContext("node--recipe", context, { + withAuth: true, + }) + + expect(fetchSpy).toHaveBeenCalledWith( + expect.anything(), + expect.objectContaining({ + withAuth: true, + }) + ) + }) + + test("makes authenticated requests when preview is true", async () => { + const client = new DrupalClient(BASE_URL, { + useDefaultResourceTypeEntry: true, + auth: `Bearer sample-token`, + }) + const fetchSpy = spyOnFetch() + jest.spyOn(client, "getAccessToken") + + const context: GetStaticPropsContext = { + preview: true, + previewData: { + plugin: "simple_oauth", + scope: "editor", + }, + params: { + slug: ["recipes", "deep-mediterranean-quiche"], + }, + } + + await client.getResourceFromContext("node--recipe", context) + + expect(fetchSpy).toHaveBeenCalledWith( + expect.anything(), + expect.objectContaining({ + withAuth: `Bearer sample-token`, + }) + ) + }) + + test("accepts a translated path", async () => { + const client = new DrupalClient(BASE_URL) + + const path = await client.translatePath("recipes/deep-mediterranean-quiche") + + const context: GetStaticPropsContext = { + params: { + slug: ["recipes", "deep-mediterranean-quiche"], + }, + } + + const recipe = await client.getResourceFromContext(path, context, { + params: { + "fields[node--recipe]": "title,path,status", + }, + }) + + await expect(recipe).toMatchSnapshot() + }) +}) + +describe("getSearchIndexFromContext()", () => { + test("calls getSearchIndex() with context data", async () => { + const client = new DrupalClient(BASE_URL) + const fetchSpy = jest + .spyOn(client, "getSearchIndex") + .mockImplementation(async () => jest.fn()) + const name = "resource-name" + const locale = "en-uk" + const defaultLocale = "en-us" + const options = { + deserialize: true, + } + + await client.getSearchIndexFromContext( + name, + { locale, defaultLocale }, + options + ) + + expect(fetchSpy).toHaveBeenCalledWith(name, { + ...options, + locale, + defaultLocale, + }) + }) +}) + +describe("getStaticPathsFromContext()", () => { + test("returns static paths from context", async () => { + const client = new DrupalClient(BASE_URL) + + const paths = await client.getStaticPathsFromContext("node--article", {}) + + expect(paths).toMatchSnapshot() + }) + + test("returns static paths from context with locale", async () => { + const client = new DrupalClient(BASE_URL) + + const paths = await client.getStaticPathsFromContext("node--article", { + locales: ["en", "es"], + defaultLocale: "en", + }) + + expect(paths).toMatchSnapshot() + }) + + test("returns static paths for multiple resource types from context", async () => { + const client = new DrupalClient(BASE_URL) + + const paths = await client.getStaticPathsFromContext( + ["node--article", "node--recipe"], + { + locales: ["en", "es"], + defaultLocale: "en", + } + ) + + expect(paths).toMatchSnapshot() + }) + + test("returns static paths from context with params", async () => { + const client = new DrupalClient(BASE_URL) + + const paths = await client.getStaticPathsFromContext( + "node--article", + {}, + { + params: { + "filter[promote]": 1, + }, + } + ) + + expect(paths).toMatchSnapshot() + }) + + test("makes un-authenticated requests by default", async () => { + const client = new DrupalClient(BASE_URL) + const fetchSpy = jest.spyOn(client, "fetch") + + await client.getStaticPathsFromContext("node--article", { + locales: ["en", "es"], + defaultLocale: "en", + }) + expect(fetchSpy).toHaveBeenCalledWith(expect.anything(), { + withAuth: false, + }) + }) + + test("makes authenticated requests with withAuth option", async () => { + const client = new DrupalClient(BASE_URL, { + useDefaultResourceTypeEntry: true, + auth: `Bearer sample-token`, + }) + const fetchSpy = spyOnFetch() + jest.spyOn(client, "getAccessToken") + + await client.getStaticPathsFromContext( + "node--article", + { + locales: ["en", "es"], + defaultLocale: "en", + }, + { + withAuth: true, + } + ) + + expect(fetchSpy).toHaveBeenCalledWith( + expect.anything(), + expect.objectContaining({ + withAuth: true, + }) + ) + }) +}) + +describe("translatePathFromContext()", () => { + test("translates a path", async () => { + const client = new DrupalClient(BASE_URL) + + const context: GetStaticPropsContext = { + params: { + slug: ["recipes", "deep-mediterranean-quiche"], + }, + } + + const path = await client.translatePathFromContext(context) + + expect(path).toMatchSnapshot() + }) + + test("returns null for path not found", async () => { + const client = new DrupalClient(BASE_URL) + + const context: GetStaticPropsContext = { + params: { + slug: ["path-not-found"], + }, + } + + const path = await client.translatePathFromContext(context) + + expect(path).toBeNull() + }) + + test("translates a path with pathPrefix", async () => { + const client = new DrupalClient(BASE_URL) + + const context: GetStaticPropsContext = { + params: { + slug: ["deep-mediterranean-quiche"], + }, + } + + const path = await client.translatePathFromContext(context, { + pathPrefix: "recipes", + }) + + expect(path).toMatchSnapshot() + + const path2 = await client.translatePathFromContext(context, { + pathPrefix: "/recipes", + }) + + expect(path).toEqual(path2) + }) + + test("makes un-authenticated requests by default", async () => { + const client = new DrupalClient(BASE_URL) + const fetchSpy = jest.spyOn(client, "fetch") + + const context: GetStaticPropsContext = { + params: { + slug: ["recipes", "deep-mediterranean-quiche"], + }, + } + await client.translatePathFromContext(context) + + expect(fetchSpy).toHaveBeenCalledWith( + expect.anything(), + expect.objectContaining({ + withAuth: false, + }) + ) + }) + + test("makes authenticated requests with withAuth option", async () => { + const client = new DrupalClient(BASE_URL, { + useDefaultResourceTypeEntry: true, + auth: `Bearer sample-token`, + }) + const fetchSpy = spyOnFetch() + jest.spyOn(client, "getAccessToken") + + const context: GetStaticPropsContext = { + params: { + slug: ["deep-mediterranean-quiche"], + }, + } + await client.translatePathFromContext(context, { + pathPrefix: "recipes", + withAuth: true, + }) + + expect(fetchSpy).toHaveBeenCalledWith( + expect.anything(), + expect.objectContaining({ + withAuth: true, + }) + ) + }) +}) diff --git a/packages/next-drupal/tests/Logger/logger.test.ts b/packages/next-drupal/tests/Logger/logger.test.ts new file mode 100644 index 00000000..4ecf4150 --- /dev/null +++ b/packages/next-drupal/tests/Logger/logger.test.ts @@ -0,0 +1,69 @@ +import { describe, expect, jest, test } from "@jest/globals" +import { + LOG_MESSAGE_PREFIX, + DEBUG_MESSAGE_PREFIX, + WARN_MESSAGE_PREFIX, + ERROR_MESSAGE_PREFIX, + logger, +} from "../../src/logger" +import type { Logger } from "../../src" + +test("is type Logger", () => { + // At compile time, compilation will fail if not a Logger type. + const test: Logger = logger + + // At run-time, we just check for object. + expect(typeof test === "object").toBe(true) +}) + +describe("method: debug", () => { + test("logs a message", () => { + const consoleSpy = jest + .spyOn(console, "debug") + .mockImplementation((message) => message) + const message = "Test debug message" + + logger.debug(message) + + expect(consoleSpy).toHaveBeenCalledWith(DEBUG_MESSAGE_PREFIX, message) + }) +}) + +describe("method: error", () => { + test("logs a message", () => { + const consoleSpy = jest + .spyOn(console, "error") + .mockImplementation((message) => message) + const message = "Test error message" + + logger.error(message) + + expect(consoleSpy).toHaveBeenCalledWith(ERROR_MESSAGE_PREFIX, message) + }) +}) + +describe("method: log", () => { + test("logs a message", () => { + const consoleSpy = jest + .spyOn(console, "log") + .mockImplementation((message) => message) + const message = "Test log message" + + logger.log(message) + + expect(consoleSpy).toHaveBeenCalledWith(LOG_MESSAGE_PREFIX, message) + }) +}) + +describe("method: warn", () => { + test("logs a message", () => { + const consoleSpy = jest + .spyOn(console, "warn") + .mockImplementation((message) => message) + const message = "Test warn message" + + logger.warn(message) + + expect(consoleSpy).toHaveBeenCalledWith(WARN_MESSAGE_PREFIX, message) + }) +}) diff --git a/packages/next-drupal/tests/__mocks__/next.ts b/packages/next-drupal/tests/__mocks__/next.ts new file mode 100644 index 00000000..664b58ba --- /dev/null +++ b/packages/next-drupal/tests/__mocks__/next.ts @@ -0,0 +1,37 @@ +export const NextApiRequest = jest.fn(function () { + this.query = { + slug: "/example", + resourceVersion: "id:1", + plugin: "simple_oauth", + secret: "very-secret-key", + } + this.url = `https://example.com/?${new URLSearchParams(this.query)}` + this.headers = { + host: "https://example.com", + } +}) + +export const NextApiResponse = jest.fn(function () { + const headers = { + "Set-Cookie": ["mock-cookie-value"], + } + const response = { + statusCode: 200, + status: jest.fn((statusCode) => { + response.statusCode = statusCode + return response + }), + clearPreviewData: jest.fn(() => response), + setPreviewData: jest.fn(() => response), + setDraftMode: jest.fn(() => response), + getHeader: jest.fn((name) => headers[name]), + setHeader: jest.fn((name, value) => { + headers[name] = value + return response + }), + writeHead: jest.fn(() => response), + end: jest.fn(), + json: jest.fn(), + } + return response +}) diff --git a/packages/next-drupal/tests/__mocks__/next/headers.ts b/packages/next-drupal/tests/__mocks__/next/headers.ts new file mode 100644 index 00000000..ca2da914 --- /dev/null +++ b/packages/next-drupal/tests/__mocks__/next/headers.ts @@ -0,0 +1,86 @@ +import type { CookieListItem } from "next/dist/compiled/@edge-runtime/cookies" + +// Create nested mocks ahead of time instead of always creating new mocks when +// the cookies mock function is called. +export const cookies = jest.fn(() => cookiesObject) + +const cookieStore = {} +const cookiesObject = { + delete: jest.fn((name: string) => { + delete cookieStore[name] + return cookiesObject + }), + get: jest.fn((name: string) => + cookieStore[name] + ? ({ + ...cookieStore[name], + } as CookieListItem) + : undefined + ), + getAll: jest.fn( + () => + [ + ...Object.keys(cookieStore).map((name) => ({ + ...cookieStore[name], + })), + ] as CookieListItem[] + ), + has: jest.fn((name: string) => !!cookieStore[name]), + set: jest.fn( + ({ + name, + value, + expires, + sameSite, + secure, + path, + domain, + }: CookieListItem) => { + cookieStore[name] = { + name, + value, + expires, + sameSite, + secure, + path, + domain, + } + return cookiesObject + } + ), + toString: jest.fn(), +} + +// Create nested mocks ahead of time instead of always creating new mocks when +// the draftMode mock function is called. +export const draftMode = jest.fn(() => ({ + disable, + enable, + isEnabled: draftModeEnabled, +})) + +let draftModeEnabled = false +const disable = jest.fn(() => { + draftModeEnabled = false +}) +const enable = jest.fn(() => { + draftModeEnabled = true +}) + +export function resetNextHeaders() { + cookies.mockClear() + cookiesObject.delete.mockClear() + cookiesObject.get.mockClear() + cookiesObject.getAll.mockClear() + cookiesObject.has.mockClear() + cookiesObject.set.mockClear() + cookiesObject.toString.mockClear() + Object.keys(cookieStore).forEach((key) => { + delete cookieStore[key] + }) + + draftMode.mockClear() + disable.mockClear() + enable.mockClear() + draftModeEnabled = false +} diff --git a/packages/next-drupal/tests/client.test.ts b/packages/next-drupal/tests/client.test.ts deleted file mode 100644 index 3dc2b604..00000000 --- a/packages/next-drupal/tests/client.test.ts +++ /dev/null @@ -1,2643 +0,0 @@ -import { expect } from "@jest/globals" -import { GetStaticPropsContext } from "next" -import { DrupalClient } from "../src/client" -import type { - Serializer, - DrupalNode, - Logger, - JsonApiResourceWithPath, - JsonApiSearchApiResponse, -} from "../src/types" -import { BASE_URL } from "./utils" - -afterEach(() => { - jest.restoreAllMocks() -}) - -describe("DrupalClient", () => { - test("it properly constructs a DrupalClient", () => { - expect(new DrupalClient(BASE_URL)).toBeInstanceOf(DrupalClient) - }) - - test("it throws error for invalid baseUrl", () => { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - expect(() => new DrupalClient()).toThrow("The 'baseUrl' param is required.") - - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - expect(() => new DrupalClient({})).toThrow( - "The 'baseUrl' param is required." - ) - }) - - test("it correctly formats apiPrefix", () => { - const client = new DrupalClient(BASE_URL) - expect(client.apiPrefix).toBe("/jsonapi") - - const client2 = new DrupalClient(BASE_URL, { - apiPrefix: "/api", - }) - expect(client2.apiPrefix).toBe("/api") - - const client3 = new DrupalClient(BASE_URL, {}) - client3.apiPrefix = "api" - expect(client3.apiPrefix).toBe("/api") - - const client4 = new DrupalClient(BASE_URL, {}) - expect(client4.apiPrefix).toBe("/jsonapi") - }) - - test("it has a debug mode", async () => { - const consoleSpy = jest.spyOn(console, "debug").mockImplementation() - - const client = new DrupalClient(BASE_URL, { - debug: true, - }) - - expect(consoleSpy).toHaveBeenCalledWith( - "[next-drupal][debug]:", - "Debug mode is on." - ) - expect(client.debug).toBe(true) - }) -}) - -describe("auth", () => { - test("it accepts username and password for auth", async () => { - const customFetch = jest.fn() - - const client = new DrupalClient(BASE_URL, { - auth: { - username: "admin", - password: "password", - }, - fetcher: customFetch, - }) - const url = client.buildUrl("/jsonapi").toString() - - await client.fetch(url, { withAuth: true }) - expect(customFetch).toHaveBeenCalledWith( - url, - expect.objectContaining({ - headers: { - "Content-Type": "application/vnd.api+json", - Accept: "application/vnd.api+json", - Authorization: "Basic YWRtaW46cGFzc3dvcmQ=", - }, - withAuth: true, - }) - ) - }) - - test("it accepts callback for auth", async () => { - const customAuth = jest - .fn() - .mockReturnValue("Basic YXJzaGFkQG5leHQtZHJ1cGFsLm9yZzphYmMxMjM=") - const customFetch = jest.fn() - - const client = new DrupalClient(BASE_URL, { - auth: customAuth, - fetcher: customFetch, - }) - const url = client.buildUrl("/jsonapi").toString() - - await client.fetch(url, { withAuth: true }) - expect(customFetch).toHaveBeenCalledWith( - url, - expect.objectContaining({ - headers: { - "Content-Type": "application/vnd.api+json", - Accept: "application/vnd.api+json", - Authorization: "Basic YXJzaGFkQG5leHQtZHJ1cGFsLm9yZzphYmMxMjM=", - }, - withAuth: true, - }) - ) - }) - - test("it accepts clientId and clientSecret for auth", async () => { - const client = new DrupalClient(BASE_URL, { - auth: { - clientId: "7795065e-8ad0-45eb-a64d-73d9f3a5e943", - clientSecret: "d92Fm^ds", - }, - }) - const fetchSpy = jest - .spyOn(global, "fetch") - .mockImplementation( - jest.fn(() => - Promise.resolve({ ok: true, json: () => Promise.resolve({}) }) - ) as jest.Mock - ) - - const basic = Buffer.from( - `7795065e-8ad0-45eb-a64d-73d9f3a5e943:d92Fm^ds` - ).toString("base64") - - await client.fetch("http://example.com", { withAuth: true }) - expect(fetchSpy).toHaveBeenNthCalledWith( - 1, - `${BASE_URL}/oauth/token`, - expect.objectContaining({ - headers: { - Accept: "application/json", - Authorization: `Basic ${basic}`, - "Content-Type": "application/x-www-form-urlencoded", - }, - }) - ) - }) - - test("it accepts custom auth url", async () => { - const client = new DrupalClient(BASE_URL, { - auth: { - clientId: "7795065e-8ad0-45eb-a64d-73d9f3a5e943", - clientSecret: "d92Fm^ds", - url: "/custom/oauth", - }, - }) - const fetchSpy = jest - .spyOn(global, "fetch") - .mockImplementation( - jest.fn(() => - Promise.resolve({ ok: true, json: () => Promise.resolve({}) }) - ) as jest.Mock - ) - - await client.fetch("http://example.com", { withAuth: true }) - expect(fetchSpy).toHaveBeenNthCalledWith( - 1, - `${BASE_URL}/custom/oauth`, - expect.anything() - ) - }) - - test("it throws an error if invalid auth is set", async () => { - expect( - () => - new DrupalClient(BASE_URL, { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - auth: { - clientId: "7795065e-8ad0-45eb-a64d-73d9f3a5e943", - }, - }) - ).toThrow( - "'clientId' and 'clientSecret' are required for auth. See https://next-drupal.org/docs/client/auth" - ) - - expect(() => { - const client = new DrupalClient(BASE_URL) - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - client.auth = { - clientSecret: "d92Fm^ds", - } - }).toThrow( - "'clientId' and 'clientSecret' are required for auth. See https://next-drupal.org/docs/client/auth" - ) - - expect( - () => - new DrupalClient(BASE_URL, { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - auth: { - username: "admin", - }, - }) - ).toThrow( - "'username' and 'password' are required for auth. See https://next-drupal.org/docs/client/auth" - ) - - expect( - () => - new DrupalClient(BASE_URL, { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - auth: { - password: "password", - }, - }) - ).toThrow( - "'username' and 'password' are required for auth. See https://next-drupal.org/docs/client/auth" - ) - }) -}) - -describe("getAccessToken", () => { - test("it fetches an access token", async () => { - jest.spyOn(global, "fetch").mockImplementation( - jest.fn(() => - Promise.resolve({ - ok: true, - json: () => - Promise.resolve({ - access_token: "ECYM594IlARGc3S8KgBHvTpki0rDtWx6", - token_type: "bearer", - expires_in: 3600, - }), - }) - ) as jest.Mock - ) - - const client = new DrupalClient(BASE_URL, { - auth: { - clientId: "7795065e-8ad0-45eb-a64d-73d9f3a5e943", - clientSecret: "d92Fm^ds", - }, - }) - - const token = await client.getAccessToken() - expect(token).toEqual({ - access_token: "ECYM594IlARGc3S8KgBHvTpki0rDtWx6", - token_type: "bearer", - expires_in: 3600, - }) - }) - - test("it re-uses access token", async () => { - jest.spyOn(global, "fetch").mockImplementation( - jest.fn(() => - Promise.resolve({ - ok: true, - json: () => - Promise.resolve({ - access_token: "ECYM594IlARGc3S8KgBHvTpki0rDtWx6" + Math.random(), - token_type: "bearer", - expires_in: 3600, - }), - }) - ) as jest.Mock - ) - - const client = new DrupalClient(BASE_URL, { - auth: { - clientId: "7795065e-8ad0-45eb-a64d-73d9f3a5e943", - clientSecret: "d92Fm^ds", - }, - }) - - const token1 = await client.getAccessToken() - const token2 = await client.getAccessToken() - expect(token1).toEqual(token2) - }) - - test("it accepts a long-lived accessToken", async () => { - const accessToken = { - token_type: "Bearer", - expires_in: 300, - access_token: - "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6ImVlNDkyOTI4ZTZjNj", - } - - const client = new DrupalClient(BASE_URL, { - accessToken, - }) - - const token = await client.getAccessToken() - - expect(token).toEqual(accessToken) - }) -}) - -describe("headers", () => { - test("it allows setting custom headers", async () => { - const customFetch = jest.fn() - const client = new DrupalClient(BASE_URL, { - fetcher: customFetch, - }) - client.headers = { - foo: "bar", - } - - const url = "http://example.com" - - await client.fetch(url) - expect(customFetch).toHaveBeenCalledWith( - url, - expect.objectContaining({ - headers: { foo: "bar" }, - }) - ) - }) - - test("it allows setting custom headers with custom auth", async () => { - const customFetch = jest.fn() - const client = new DrupalClient(BASE_URL, { - fetcher: customFetch, - headers: { - foo: "bar", - }, - auth: jest - .fn() - .mockReturnValue("Basic YXJzaGFkQG5leHQtZHJ1cGFsLm9yZzphYmMxMjM="), - }) - - const url = "http://example.com" - - await client.fetch(url, { withAuth: true }) - - expect(customFetch).toHaveBeenCalledWith( - url, - expect.objectContaining({ - headers: { - foo: "bar", - Authorization: "Basic YXJzaGFkQG5leHQtZHJ1cGFsLm9yZzphYmMxMjM=", - }, - withAuth: true, - }) - ) - }) -}) - -describe("logger", () => { - test("it allows custom logger", () => { - const logger: Logger = { - log(message) { - console.log(message) - }, - warn(message) { - console.warn(message) - }, - error(message) { - console.error(message) - }, - debug(message) { - console.debug(message) - }, - } - const debugSpy = jest.spyOn(logger, "debug").mockImplementation() - - new DrupalClient(BASE_URL, { debug: true, logger }) - - expect(debugSpy).toHaveBeenCalled() - }) -}) - -describe("fetch", () => { - test("it allows fetching custom url", async () => { - const client = new DrupalClient(BASE_URL) - const url = client.buildUrl( - "/jsonapi/node/article/52837ad0-f218-46bd-a106-5710336b7053" - ) - - const response = await client.fetch(url.toString()) - expect(response.headers.get("content-type")).toEqual( - "application/vnd.api+json" - ) - const json = await response.json() - expect(json).toMatchSnapshot() - }) - - test("it allows authenticated requests", async () => { - const client = new DrupalClient(BASE_URL, { - auth: { - clientId: "7795065e-8ad0-45eb-a64d-73d9f3a5e943", - clientSecret: "d92Fm^ds", - }, - }) - const url = client.buildUrl("/jsonapi") - - const getAccessTokenSpy = jest - .spyOn(client, "getAccessToken") - .mockImplementation() - - await client.fetch(url.toString(), { - withAuth: true, - }) - - expect(getAccessTokenSpy).toHaveBeenCalled() - }) - - test("it throws an error if withAuth is called when auth is not configured", async () => { - const client = new DrupalClient(BASE_URL) - - const url = client.buildUrl("/jsonapi") - - await expect( - client.fetch(url.toString(), { - withAuth: true, - }) - ).rejects.toThrow("auth is not configured.") - }) - - test("it allows for custom fetcher", async () => { - const customFetch = jest.fn() - - const client = new DrupalClient(BASE_URL, { - fetcher: customFetch, - }) - const url = client.buildUrl("/jsonapi").toString() - - await client.fetch(url) - expect(customFetch).toHaveBeenCalledWith( - url, - expect.objectContaining({ - headers: { - "Content-Type": "application/vnd.api+json", - Accept: "application/vnd.api+json", - }, - }) - ) - - await client.fetch(url, { - headers: { - foo: "bar", - }, - }) - expect(customFetch).toHaveBeenLastCalledWith( - url, - expect.objectContaining({ - headers: { - Accept: "application/vnd.api+json", - "Content-Type": "application/vnd.api+json", - foo: "bar", - }, - }) - ) - }) -}) - -describe("buildUrl", () => { - const client = new DrupalClient(BASE_URL) - - test("it builds a url", () => { - expect(client.buildUrl("http://example.com").toString()).toEqual( - "http://example.com/" - ) - }) - - test("it builds a relative url", () => { - expect(client.buildUrl("/foo").toString()).toEqual(`${BASE_URL}/foo`) - }) - - test("it builds a url with params", () => { - expect(client.buildUrl("/foo", { bar: "baz" }).toString()).toEqual( - `${BASE_URL}/foo?bar=baz` - ) - - expect( - client - .buildUrl("/jsonapi/node/article", { - sort: "-created", - "fields[node--article]": "title,path", - }) - .toString() - ).toEqual( - `${BASE_URL}/jsonapi/node/article?sort=-created&fields%5Bnode--article%5D=title%2Cpath` - ) - }) - - test("it builds a url from object (DrupalJsonApiParams)", () => { - const params = { - getQueryObject: () => ({ - sort: "-created", - "fields[node--article]": "title,path", - }), - } - - expect(client.buildUrl("/jsonapi/node/article", params).toString()).toEqual( - `${BASE_URL}/jsonapi/node/article?sort=-created&fields%5Bnode--article%5D=title%2Cpath` - ) - }) -}) - -describe("deserialize", () => { - test("it deserializes JSON:API resource", async () => { - const client = new DrupalClient(BASE_URL) - const url = client.buildUrl( - "/jsonapi/node/article/52837ad0-f218-46bd-a106-5710336b7053", - { - include: "field_tags", - } - ) - - const response = await client.fetch(url.toString()) - const json = await response.json() - const article = client.deserialize(json) as DrupalNode - - expect(article).toMatchSnapshot() - expect(article.id).toEqual("52837ad0-f218-46bd-a106-5710336b7053") - expect(article.field_tags).toHaveLength(3) - }) - - test("it deserializes JSON:API collection", async () => { - const client = new DrupalClient(BASE_URL) - const url = client.buildUrl("/jsonapi/node/article", { - getQueryObject: () => ({ - "fields[node--article]": "title", - }), - }) - - const response = await client.fetch(url.toString()) - const json = await response.json() - const articles = client.deserialize(json) as DrupalNode[] - - expect(articles).toMatchSnapshot() - }) - - test("it allows for custom data serializer", async () => { - const serializer: Serializer = { - deserialize: ( - body: { data: { id: string; attributes: { title: string } } }, - options: { pathPrefix: string } - ) => { - return { - id: body.data.id, - title: `${options.pathPrefix}: ${body.data.attributes.title}`, - } - }, - } - const client = new DrupalClient(BASE_URL, { - serializer, - }) - const url = client.buildUrl( - "/jsonapi/node/article/52837ad0-f218-46bd-a106-5710336b7053" - ) - - const response = await client.fetch(url.toString()) - const json = await response.json() - const article = client.deserialize(json, { - pathPrefix: "TITLE", - }) as DrupalNode - - expect(article).toMatchSnapshot() - expect(article.id).toEqual("52837ad0-f218-46bd-a106-5710336b7053") - expect(article.title).toEqual(`TITLE: ${json.data.attributes.title}`) - }) -}) - -describe("getPathFromContext", () => { - test("it returns a path from context", async () => { - const client = new DrupalClient(BASE_URL) - - expect( - client.getPathFromContext({ - params: { - slug: ["foo"], - }, - }) - ).toEqual("/foo") - - expect( - client.getPathFromContext({ - params: { - slug: ["foo", "bar"], - }, - }) - ).toEqual("/foo/bar") - - expect( - client.getPathFromContext({ - locale: "en", - defaultLocale: "es", - params: { - slug: ["foo", "bar"], - }, - }) - ).toEqual("/en/foo/bar") - - expect( - client.getPathFromContext({ - params: { - slug: [], - }, - }) - ).toEqual("/home") - - client.frontPage = "/front" - - expect( - client.getPathFromContext({ - params: { - slug: [], - }, - }) - ).toEqual("/front") - - expect( - client.getPathFromContext({ - locale: "es", - defaultLocale: "en", - params: { - slug: [], - }, - }) - ).toEqual("/es/front") - }) - - test("it returns a path from context with pathPrefix", () => { - const client = new DrupalClient(BASE_URL) - - expect( - client.getPathFromContext( - { - params: { - slug: ["bar", "baz"], - }, - }, - { - pathPrefix: "/foo", - } - ) - ).toEqual("/foo/bar/baz") - - expect( - client.getPathFromContext( - { - params: { - slug: ["bar", "baz"], - }, - }, - { - pathPrefix: "foo", - } - ) - ).toEqual("/foo/bar/baz") - - expect( - client.getPathFromContext( - { - locale: "en", - defaultLocale: "en", - params: { - slug: ["bar", "baz"], - }, - }, - { - pathPrefix: "foo", - } - ) - ).toEqual("/foo/bar/baz") - - expect( - client.getPathFromContext( - { - locale: "es", - defaultLocale: "en", - params: { - slug: ["bar", "baz"], - }, - }, - { - pathPrefix: "foo", - } - ) - ).toEqual("/es/foo/bar/baz") - - expect( - client.getPathFromContext( - { - locale: "es", - defaultLocale: "en", - params: { - slug: [], - }, - }, - { - pathPrefix: "/foo", - } - ) - ).toEqual("/es/foo/home") - - client.frontPage = "/baz" - - expect( - client.getPathFromContext( - { - locale: "en", - defaultLocale: "en", - params: { - slug: [], - }, - }, - { - pathPrefix: "foo", - } - ) - ).toEqual("/foo/baz") - - expect( - client.getPathFromContext( - { - params: { - slug: [], - }, - }, - { - pathPrefix: "/foo/bar", - } - ) - ).toEqual("/foo/bar/baz") - }) - - test("it encodes path with punctuation", async () => { - const client = new DrupalClient(BASE_URL) - - const path = client.getPathFromContext({ - params: { - slug: ["path&with^punc&in$path"], - }, - }) - - expect(path).toEqual("/path%26with%5Epunc%26in%24path") - - const translatedPath = await client.translatePath(path) - - expect(translatedPath).toMatchSnapshot() - }) -}) - -describe("getIndex", () => { - test("it fetches the JSON:API index", async () => { - const client = new DrupalClient(BASE_URL) - const index = await client.getIndex() - - expect(index).toMatchSnapshot() - }) - - test("it fetches the JSON:API index with locale", async () => { - const client = new DrupalClient(BASE_URL) - const index = await client.getIndex("es") - - expect(index).toMatchSnapshot() - }) - - test("it throws error for invalid base url", async () => { - const client = new DrupalClient("https://example.com") - - await expect(client.getIndex()).rejects.toThrow( - "Failed to fetch JSON:API index at https://example.com/jsonapi" - ) - }) -}) - -describe("getEntryForResourceType", () => { - test("it returns the JSON:API entry for a resource type", async () => { - const client = new DrupalClient(BASE_URL) - const getIndexSpy = jest.spyOn(client, "getIndex") - - const recipeEntry = await client.getEntryForResourceType("node--recipe") - expect(recipeEntry).toMatch(`${BASE_URL}/en/jsonapi/node/recipe`) - expect(getIndexSpy).toHaveBeenCalledTimes(1) - - const articleEntry = await client.getEntryForResourceType("node--article") - expect(articleEntry).toMatch(`${BASE_URL}/en/jsonapi/node/article`) - expect(getIndexSpy).toHaveBeenCalledTimes(2) - }) - - test("it assembles JSON:API entry without fetching index", async () => { - const client = new DrupalClient(BASE_URL, { - useDefaultResourceTypeEntry: true, - }) - const getIndexSpy = jest.spyOn(client, "getIndex") - - const recipeEntry = await client.getEntryForResourceType("node--article") - expect(recipeEntry).toMatch(`${BASE_URL}/jsonapi/node/article`) - expect(getIndexSpy).toHaveBeenCalledTimes(0) - }) - - test("it throws an error if resource type does not exist", async () => { - const client = new DrupalClient(BASE_URL) - - await expect( - client.getEntryForResourceType("RESOURCE-DOES-NOT-EXIST") - ).rejects.toThrow("Resource of type 'RESOURCE-DOES-NOT-EXIST' not found.") - }) -}) - -describe("getResource", () => { - test("it fetches a resource by uuid", async () => { - const client = new DrupalClient(BASE_URL) - const recipe = await client.getResource( - "node--recipe", - "71e04ead-4cc7-416c-b9ca-60b635fdc50f" - ) - - expect(recipe).toMatchSnapshot() - }) - - test("it fetches a resource by uuid with params", async () => { - const client = new DrupalClient(BASE_URL) - const recipe = await client.getResource( - "node--recipe", - "71e04ead-4cc7-416c-b9ca-60b635fdc50f", - { - params: { - "fields[node--recipe]": "title,field_cooking_time", - }, - } - ) - - expect(recipe).toMatchSnapshot() - }) - - test("it fetches a resource using locale", async () => { - const client = new DrupalClient(BASE_URL) - const recipe = await client.getResource( - "node--recipe", - "71e04ead-4cc7-416c-b9ca-60b635fdc50f", - { - locale: "es", - defaultLocale: "en", - params: { - "fields[node--recipe]": "title,field_cooking_time", - }, - } - ) - - expect(recipe).toMatchSnapshot() - }) - - test("it fetches raw data", async () => { - const client = new DrupalClient(BASE_URL) - - await expect( - client.getResource( - "node--recipe", - "71e04ead-4cc7-416c-b9ca-60b635fdc50f", - { - deserialize: false, - } - ) - ).resolves.toMatchSnapshot() - }) - - test("it fetches a resource by revision", async () => { - const client = new DrupalClient(BASE_URL) - const recipe = await client.getResource( - "node--recipe", - "71e04ead-4cc7-416c-b9ca-60b635fdc50f", - { - params: { - "fields[node--recipe]": "drupal_internal__vid", - }, - } - ) - const latestRevision = await client.getResource( - "node--recipe", - "71e04ead-4cc7-416c-b9ca-60b635fdc50f", - { - params: { - resourceVersion: "rel:latest-version", - "fields[node--recipe]": "drupal_internal__vid", - }, - } - ) - - expect(recipe.drupal_internal__vid).toEqual( - latestRevision.drupal_internal__vid - ) - }) - - test("it throws an error for invalid revision", async () => { - const client = new DrupalClient(BASE_URL) - - await expect( - client.getResource( - "node--recipe", - "71e04ead-4cc7-416c-b9ca-60b635fdc50f", - { - params: { - resourceVersion: "id:-11", - "fields[node--recipe]": "title", - }, - } - ) - ).rejects.toThrow( - "404 Not Found\nThe requested version, identified by `id:-11`, could not be found." - ) - }) - - test("it throws an error if revision access is forbidden", async () => { - const client = new DrupalClient(BASE_URL) - - await expect( - client.getResource( - "node--recipe", - "71e04ead-4cc7-416c-b9ca-60b635fdc50f", - { - params: { - resourceVersion: "id:1", - "fields[node--recipe]": "title", - }, - } - ) - ).rejects.toThrow( - "401 Unauthorized\nNo authentication credentials provided." - ) - }) - - test("it throws an error for invalid resource type", async () => { - const client = new DrupalClient(BASE_URL) - - await expect( - client.getResource( - "RESOURCE-DOES-NOT-EXIST", - "71e04ead-4cc7-416c-b9ca-60b635fdc50f" - ) - ).rejects.toThrow("Resource of type 'RESOURCE-DOES-NOT-EXIST' not found.") - }) - - test("it throws an error for invalid params", async () => { - const client = new DrupalClient(BASE_URL) - - await expect( - client.getResource( - "node--recipe", - "71e04ead-4cc7-416c-b9ca-60b635fdc50f", - { - params: { - include: "invalid_relationship", - }, - } - ) - ).rejects.toThrow( - "400 Bad Request\n`invalid_relationship` is not a valid relationship field name. Possible values: node_type, revision_uid, uid, menu_link, field_media_image, field_recipe_category, field_tags." - ) - }) - - test("it makes un-authenticated requests by default", async () => { - const client = new DrupalClient(BASE_URL) - const fetchSpy = jest.spyOn(client, "fetch") - - await client.getResource( - "node--recipe", - "71e04ead-4cc7-416c-b9ca-60b635fdc50f" - ) - expect(fetchSpy).toHaveBeenCalledWith(expect.anything(), { - withAuth: false, - }) - }) - - test("it makes authenticated requests with withAuth option", async () => { - const client = new DrupalClient(BASE_URL, { - useDefaultResourceTypeEntry: true, - auth: `Bearer sample-token`, - }) - const fetchSpy = jest - .spyOn(global, "fetch") - .mockImplementation( - jest.fn(() => - Promise.resolve({ ok: true, json: () => Promise.resolve({}) }) - ) as jest.Mock - ) - jest.spyOn(client, "getAccessToken").mockImplementation() - - await client.getResource( - "node--recipe", - "71e04ead-4cc7-416c-b9ca-60b635fdc50f", - { - withAuth: true, - } - ) - - expect(fetchSpy).toHaveBeenCalledWith( - expect.anything(), - expect.objectContaining({ - withAuth: true, - }) - ) - }) -}) - -describe("getResourceByPath", () => { - test("it fetches a resource by path", async () => { - const client = new DrupalClient(BASE_URL) - - await expect( - client.getResourceByPath("/recipes/deep-mediterranean-quiche") - ).resolves.toMatchSnapshot() - }) - - test("it fetches a resource by path with params", async () => { - const client = new DrupalClient(BASE_URL) - - await expect( - client.getResourceByPath("/recipes/deep-mediterranean-quiche", { - params: { - "fields[node--recipe]": "title,field_cooking_time", - }, - }) - ).resolves.toMatchSnapshot() - }) - - test("it fetches a resource by path using locale", async () => { - const client = new DrupalClient(BASE_URL) - const recipe = await client.getResourceByPath( - "/recipes/quiche-mediterráneo-profundo", - { - locale: "es", - defaultLocale: "en", - params: { - "fields[node--recipe]": "title,field_cooking_time", - }, - } - ) - - expect(recipe).toMatchSnapshot() - }) - - test("it fetches raw data", async () => { - const client = new DrupalClient(BASE_URL) - - await expect( - client.getResourceByPath("/recipes/deep-mediterranean-quiche", { - deserialize: false, - }) - ).resolves.toMatchSnapshot() - }) - - test("it fetches a resource by revision", async () => { - const client = new DrupalClient(BASE_URL) - const recipe = await client.getResourceByPath( - "/recipes/deep-mediterranean-quiche", - { - params: { - "fields[node--recipe]": "drupal_internal__vid", - }, - } - ) - const latestRevision = await client.getResourceByPath( - "/recipes/deep-mediterranean-quiche", - { - params: { - resourceVersion: "rel:latest-version", - "fields[node--recipe]": "drupal_internal__vid", - }, - } - ) - - expect(recipe.drupal_internal__vid).toEqual( - latestRevision.drupal_internal__vid - ) - }) - - test("it throws an error for invalid revision", async () => { - const client = new DrupalClient(BASE_URL) - - await expect( - client.getResourceByPath( - "/recipes/deep-mediterranean-quiche", - { - params: { - resourceVersion: "id:-11", - "fields[node--recipe]": "title", - }, - } - ) - ).rejects.toThrow( - "404 Not Found\nThe requested version, identified by `id:-11`, could not be found." - ) - }) - - test("it throws an error if revision access is forbidden", async () => { - const client = new DrupalClient(BASE_URL) - - await expect( - client.getResourceByPath( - "/recipes/deep-mediterranean-quiche", - { - params: { - resourceVersion: "id:1", - "fields[node--recipe]": "title", - }, - } - ) - ).rejects.toThrow( - "401 Unauthorized\nNo authentication credentials provided." - ) - }) - - test("it returns null for path not found", async () => { - const client = new DrupalClient(BASE_URL) - - await expect( - client.getResourceByPath("/path-do-not-exist") - ).rejects.toThrow("Unable to resolve path /path-do-not-exist.") - }) - - test("it throws an error for invalid params", async () => { - const client = new DrupalClient(BASE_URL) - - await expect( - client.getResourceByPath( - "/recipes/deep-mediterranean-quiche", - { - params: { - include: "invalid_relationship", - }, - } - ) - ).rejects.toThrow( - "400 Bad Request\n`invalid_relationship` is not a valid relationship field name. Possible values: node_type, revision_uid, uid, menu_link, field_media_image, field_recipe_category, field_tags." - ) - }) - - test("it makes un-authenticated requests by default", async () => { - const client = new DrupalClient(BASE_URL) - const fetchSpy = jest.spyOn(client, "fetch") - const getAccessTokenSpy = jest.spyOn(client, "getAccessToken") - - await client.getResourceByPath( - "/recipes/deep-mediterranean-quiche" - ) - expect(fetchSpy).toHaveBeenCalledWith( - expect.anything(), - expect.not.objectContaining({ - withAuth: true, - }) - ) - expect(getAccessTokenSpy).not.toHaveBeenCalled() - }) - - test("it makes authenticated requests with withAuth", async () => { - const client = new DrupalClient(BASE_URL, { - auth: { - clientId: "7795065e-8ad0-45eb-a64d-73d9f3a5e943", - clientSecret: "d92Fm^ds", - }, - }) - const fetchSpy = jest - .spyOn(global, "fetch") - .mockImplementation( - jest.fn(() => - Promise.resolve({ ok: true, json: () => Promise.resolve({}) }) - ) as jest.Mock - ) - const getAccessTokenSpy = jest.spyOn(client, "getAccessToken") - - await client.getResourceByPath( - "/recipes/deep-mediterranean-quiche", - { - withAuth: true, - } - ) - - expect(fetchSpy).toHaveBeenCalledWith( - expect.anything(), - expect.objectContaining({ - withAuth: true, - }) - ) - expect(getAccessTokenSpy).toHaveBeenCalled() - }) -}) - -describe("getResourceFromContext", () => { - test("it fetches a resource from context", async () => { - const client = new DrupalClient(BASE_URL) - const context: GetStaticPropsContext = { - params: { - slug: ["recipes", "deep-mediterranean-quiche"], - }, - } - const recipe = await client.getResourceFromContext( - "node--recipe", - context - ) - - expect(recipe).toMatchSnapshot() - }) - - test("it fetches a resource from context with params", async () => { - const client = new DrupalClient(BASE_URL) - const context: GetStaticPropsContext = { - params: { - slug: ["recipes", "deep-mediterranean-quiche"], - }, - } - const recipe = await client.getResourceFromContext( - "node--recipe", - context, - { - params: { - "fields[node--recipe]": "title", - }, - } - ) - - expect(recipe).toMatchSnapshot() - }) - - test("it fetches a resource from context using locale", async () => { - const client = new DrupalClient(BASE_URL) - const context: GetStaticPropsContext = { - params: { - slug: ["recipes", "quiche-mediterráneo-profundo"], - }, - locale: "es", - defaultLocale: "en", - } - const recipe = await client.getResourceFromContext( - "node--recipe", - context, - { - params: { - "fields[node--recipe]": "title,field_cooking_time", - }, - } - ) - - expect(recipe).toMatchSnapshot() - }) - - test("it fetches raw data", async () => { - const client = new DrupalClient(BASE_URL) - - const context: GetStaticPropsContext = { - params: { - slug: ["recipes", "deep-mediterranean-quiche"], - }, - } - const recipe = await client.getResourceFromContext( - "node--recipe", - context, - { - deserialize: false, - params: { - "fields[node--recipe]": "title", - }, - } - ) - - expect(recipe).toMatchSnapshot() - }) - - test("it fetches a resource from context by revision", async () => { - const client = new DrupalClient(BASE_URL) - const context: GetStaticPropsContext = { - params: { - slug: ["recipes", "quiche-mediterráneo-profundo"], - }, - locale: "es", - defaultLocale: "en", - } - const recipe = await client.getResourceFromContext( - "node--recipe", - context, - { - params: { - "fields[node--recipe]": "drupal_internal__vid", - }, - } - ) - - context.previewData = { resourceVersion: "rel:latest-version" } - - const latestRevision = await client.getResourceFromContext( - "node--recipe", - context, - { - params: { - "fields[node--recipe]": "drupal_internal__vid", - }, - } - ) - - expect(recipe.drupal_internal__vid).toEqual( - latestRevision.drupal_internal__vid - ) - }) - - test("it throws an error for invalid revision", async () => { - const client = new DrupalClient(BASE_URL) - const context: GetStaticPropsContext = { - previewData: { - resourceVersion: "id:-11", - }, - params: { - slug: ["recipes", "deep-mediterranean-quiche"], - }, - } - - await expect( - client.getResourceFromContext("node--recipe", context, { - params: { - "fields[node--recipe]": "drupal_internal__vid", - }, - }) - ).rejects.toThrow( - "404 Not Found\nThe requested version, identified by `id:-11`, could not be found." - ) - }) - - test("it throws an error if revision access is forbidden", async () => { - const client = new DrupalClient(BASE_URL) - - const context: GetStaticPropsContext = { - previewData: { - resourceVersion: "id:1", - }, - params: { - slug: ["recipes", "deep-mediterranean-quiche"], - }, - } - - await expect( - client.getResourceFromContext("node--recipe", context, { - params: { - "fields[node--recipe]": "title", - }, - }) - ).rejects.toThrow( - "401 Unauthorized\nNo authentication credentials provided." - ) - }) - - test("it makes un-authenticated requests by default", async () => { - const client = new DrupalClient(BASE_URL) - const fetchSpy = jest.spyOn(client, "fetch") - const context: GetStaticPropsContext = { - params: { - slug: ["recipes", "deep-mediterranean-quiche"], - }, - } - - await client.getResourceFromContext("node--recipe", context) - expect(fetchSpy).toHaveBeenCalledWith( - expect.anything(), - expect.objectContaining({ - withAuth: false, - }) - ) - }) - - test("it makes authenticated requests with withAuth option", async () => { - const client = new DrupalClient(BASE_URL, { - useDefaultResourceTypeEntry: true, - auth: `Bearer sample-token`, - }) - const fetchSpy = jest - .spyOn(global, "fetch") - .mockImplementation( - jest.fn(() => - Promise.resolve({ ok: true, json: () => Promise.resolve({}) }) - ) as jest.Mock - ) - jest.spyOn(client, "getAccessToken").mockImplementation() - - const context: GetStaticPropsContext = { - params: { - slug: ["recipes", "deep-mediterranean-quiche"], - }, - } - - await client.getResourceFromContext("node--recipe", context, { - withAuth: true, - }) - - expect(fetchSpy).toHaveBeenCalledWith( - expect.anything(), - expect.objectContaining({ - withAuth: true, - }) - ) - }) - - test("it makes authenticated requests when preview is true", async () => { - const client = new DrupalClient(BASE_URL, { - useDefaultResourceTypeEntry: true, - auth: `Bearer sample-token`, - }) - const fetchSpy = jest - .spyOn(global, "fetch") - .mockImplementation( - jest.fn(() => - Promise.resolve({ ok: true, json: () => Promise.resolve({}) }) - ) as jest.Mock - ) - jest.spyOn(client, "getAccessToken").mockImplementation() - - const context: GetStaticPropsContext = { - preview: true, - previewData: { - plugin: "simple_oauth", - scope: "editor", - }, - params: { - slug: ["recipes", "deep-mediterranean-quiche"], - }, - } - - await client.getResourceFromContext("node--recipe", context) - - expect(fetchSpy).toHaveBeenCalledWith( - expect.anything(), - expect.objectContaining({ - withAuth: `Bearer sample-token`, - }) - ) - }) - - test("it accepts a translated path", async () => { - const client = new DrupalClient(BASE_URL) - - const path = await client.translatePath("recipes/deep-mediterranean-quiche") - - const context: GetStaticPropsContext = { - params: { - slug: ["recipes", "deep-mediterranean-quiche"], - }, - } - - const recipe = await client.getResourceFromContext(path, context, { - params: { - "fields[node--recipe]": "title,path,status", - }, - }) - - await expect(recipe).toMatchSnapshot() - }) -}) - -describe("translatePath", () => { - test("it translates a path", async () => { - const client = new DrupalClient(BASE_URL) - - const path = await client.translatePath("recipes/deep-mediterranean-quiche") - - expect(path).toMatchSnapshot() - - const path2 = await client.translatePath( - "/recipes/deep-mediterranean-quiche" - ) - - expect(path).toEqual(path2) - }) - - test("it returns null for path not found", async () => { - const client = new DrupalClient(BASE_URL) - - const path = await client.translatePath("/path-not-found") - - expect(path).toBeNull() - }) - - test("it makes un-authenticated requests by default", async () => { - const client = new DrupalClient(BASE_URL) - const fetchSpy = jest.spyOn(client, "fetch") - - await client.translatePath("recipes/deep-mediterranean-quiche") - - expect(fetchSpy).toHaveBeenCalledWith( - expect.anything(), - expect.objectContaining({ - withAuth: false, - }) - ) - }) - - test("it makes authenticated requests with withAuth option", async () => { - const client = new DrupalClient(BASE_URL, { - useDefaultResourceTypeEntry: true, - auth: `Bearer sample-token`, - }) - const fetchSpy = jest - .spyOn(global, "fetch") - .mockImplementation( - jest.fn(() => - Promise.resolve({ ok: true, json: () => Promise.resolve({}) }) - ) as jest.Mock - ) - jest.spyOn(client, "getAccessToken").mockImplementation() - - await client.translatePath("recipes/deep-mediterranean-quiche", { - withAuth: true, - }) - - expect(fetchSpy).toHaveBeenCalledWith( - expect.anything(), - expect.objectContaining({ - withAuth: true, - }) - ) - }) -}) - -describe("translatePathFromContext", () => { - test("it translates a path", async () => { - const client = new DrupalClient(BASE_URL) - - const context: GetStaticPropsContext = { - params: { - slug: ["recipes", "deep-mediterranean-quiche"], - }, - } - - const path = await client.translatePathFromContext(context) - - expect(path).toMatchSnapshot() - }) - - test("it returns null for path not found", async () => { - const client = new DrupalClient(BASE_URL) - - const context: GetStaticPropsContext = { - params: { - slug: ["path-not-found"], - }, - } - - const path = await client.translatePathFromContext(context) - - expect(path).toBeNull() - }) - - test("it translates a path with pathPrefix", async () => { - const client = new DrupalClient(BASE_URL) - - const context: GetStaticPropsContext = { - params: { - slug: ["deep-mediterranean-quiche"], - }, - } - - const path = await client.translatePathFromContext(context, { - pathPrefix: "recipes", - }) - - expect(path).toMatchSnapshot() - - const path2 = await client.translatePathFromContext(context, { - pathPrefix: "/recipes", - }) - - expect(path).toEqual(path2) - }) - - test("it makes un-authenticated requests by default", async () => { - const client = new DrupalClient(BASE_URL) - const fetchSpy = jest.spyOn(client, "fetch") - - const context: GetStaticPropsContext = { - params: { - slug: ["recipes", "deep-mediterranean-quiche"], - }, - } - await client.translatePathFromContext(context) - - expect(fetchSpy).toHaveBeenCalledWith( - expect.anything(), - expect.objectContaining({ - withAuth: false, - }) - ) - }) - - test("it makes authenticated requests with withAuth option", async () => { - const client = new DrupalClient(BASE_URL, { - useDefaultResourceTypeEntry: true, - auth: `Bearer sample-token`, - }) - const fetchSpy = jest - .spyOn(global, "fetch") - .mockImplementation( - jest.fn(() => - Promise.resolve({ ok: true, json: () => Promise.resolve({}) }) - ) as jest.Mock - ) - jest.spyOn(client, "getAccessToken").mockImplementation() - - const context: GetStaticPropsContext = { - params: { - slug: ["deep-mediterranean-quiche"], - }, - } - await client.translatePathFromContext(context, { - pathPrefix: "recipes", - withAuth: true, - }) - - expect(fetchSpy).toHaveBeenCalledWith( - expect.anything(), - expect.objectContaining({ - withAuth: true, - }) - ) - }) -}) - -describe("getResourceCollection", () => { - test("it fetches a resource collection", async () => { - const client = new DrupalClient(BASE_URL) - - const articles = await client.getResourceCollection("node--article", { - params: { - "fields[node--article]": "title", - }, - }) - - expect(articles).toMatchSnapshot() - }) - - test("it fetches a resource collection using locale", async () => { - const client = new DrupalClient(BASE_URL) - - const articles = await client.getResourceCollection("node--article", { - locale: "es", - defaultLocale: "en", - params: { - "fields[node--article]": "title,langcode", - }, - }) - - expect(articles[0].langcode).toEqual("es") - - expect(articles).toMatchSnapshot() - }) - - test("it fetches raw data", async () => { - const client = new DrupalClient(BASE_URL) - - const recipes = await client.getResourceCollection("node--recipe", { - deserialize: false, - params: { - "fields[node--recipe]": "title", - "page[limit]": 2, - }, - }) - - expect(recipes).toMatchSnapshot() - }) - - test("it throws an error for invalid resource type", async () => { - const client = new DrupalClient(BASE_URL) - - await expect( - client.getResourceCollection("RESOURCE-DOES-NOT-EXIST") - ).rejects.toThrow("Resource of type 'RESOURCE-DOES-NOT-EXIST' not found.") - }) - - test("it throws an error for invalid params", async () => { - const client = new DrupalClient(BASE_URL) - - await expect( - client.getResourceCollection("node--recipe", { - params: { - include: "invalid_relationship", - }, - }) - ).rejects.toThrow( - "400 Bad Request\n`invalid_relationship` is not a valid relationship field name. Possible values: node_type, revision_uid, uid, menu_link, field_media_image, field_recipe_category, field_tags." - ) - }) - - test("it makes un-authenticated requests by default", async () => { - const client = new DrupalClient(BASE_URL) - const fetchSpy = jest.spyOn(client, "fetch") - - await client.getResourceCollection("node--recipe") - expect(fetchSpy).toHaveBeenCalledWith(expect.anything(), { - withAuth: false, - }) - }) - - test("it makes authenticated requests with withAuth option", async () => { - const client = new DrupalClient(BASE_URL, { - useDefaultResourceTypeEntry: true, - auth: `Bearer sample-token`, - }) - const fetchSpy = jest - .spyOn(global, "fetch") - .mockImplementation( - jest.fn(() => - Promise.resolve({ ok: true, json: () => Promise.resolve({}) }) - ) as jest.Mock - ) - jest.spyOn(client, "getAccessToken").mockImplementation() - - await client.getResourceCollection("node--recipe", { - withAuth: true, - }) - - expect(fetchSpy).toHaveBeenCalledWith( - expect.anything(), - expect.objectContaining({ - withAuth: true, - }) - ) - }) -}) - -describe("getResourceCollectionFromContext", () => { - test("it fetches a resource collection", async () => { - const client = new DrupalClient(BASE_URL) - - const context: GetStaticPropsContext = { - locale: "en", - defaultLocale: "en", - } - - const articles = await client.getResourceCollectionFromContext( - "node--article", - context, - { - params: { - "fields[node--article]": "title", - }, - } - ) - - expect(articles).toMatchSnapshot() - }) - - test("it fetches a resource collection using locale", async () => { - const client = new DrupalClient(BASE_URL) - - const context: GetStaticPropsContext = { - locale: "es", - defaultLocale: "en", - } - - const articles = await client.getResourceCollectionFromContext( - "node--article", - context, - { - params: { - "fields[node--article]": "title,langcode", - }, - } - ) - - expect(articles[0].langcode).toEqual("es") - - expect(articles).toMatchSnapshot() - }) - - test("it fetches raw data", async () => { - const client = new DrupalClient(BASE_URL) - - const context: GetStaticPropsContext = { - locale: "en", - defaultLocale: "en", - } - - const recipes = await client.getResourceCollectionFromContext( - "node--recipe", - context, - { - deserialize: false, - params: { - "fields[node--recipe]": "title", - "page[limit]": 2, - }, - } - ) - - expect(recipes).toMatchSnapshot() - }) - - test("it throws an error for invalid resource type", async () => { - const client = new DrupalClient(BASE_URL) - - const context: GetStaticPropsContext = { - locale: "en", - defaultLocale: "en", - } - - await expect( - client.getResourceCollectionFromContext( - "RESOURCE-DOES-NOT-EXIST", - context - ) - ).rejects.toThrow("Resource of type 'RESOURCE-DOES-NOT-EXIST' not found.") - }) - - test("it throws an error for invalid params", async () => { - const client = new DrupalClient(BASE_URL) - - const context: GetStaticPropsContext = { - locale: "en", - defaultLocale: "en", - } - - await expect( - client.getResourceCollectionFromContext( - "node--recipe", - context, - { - params: { - include: "invalid_relationship", - }, - } - ) - ).rejects.toThrow( - "400 Bad Request\n`invalid_relationship` is not a valid relationship field name. Possible values: node_type, revision_uid, uid, menu_link, field_media_image, field_recipe_category, field_tags." - ) - }) - - test("it makes un-authenticated requests by default", async () => { - const client = new DrupalClient(BASE_URL) - const fetchSpy = jest.spyOn(client, "fetch") - - const context: GetStaticPropsContext = { - locale: "en", - defaultLocale: "en", - } - - await client.getResourceCollectionFromContext("node--recipe", context) - expect(fetchSpy).toHaveBeenCalledWith(expect.anything(), { - withAuth: false, - }) - }) - - test("it makes authenticated requests with withAuth option", async () => { - const client = new DrupalClient(BASE_URL, { - useDefaultResourceTypeEntry: true, - auth: `Bearer sample-token`, - }) - const fetchSpy = jest - .spyOn(global, "fetch") - .mockImplementation( - jest.fn(() => - Promise.resolve({ ok: true, json: () => Promise.resolve({}) }) - ) as jest.Mock - ) - jest.spyOn(client, "getAccessToken").mockImplementation() - - const context: GetStaticPropsContext = { - locale: "en", - defaultLocale: "en", - } - await client.getResourceCollectionFromContext("node--recipe", context, { - withAuth: true, - }) - - expect(fetchSpy).toHaveBeenCalledWith( - expect.anything(), - expect.objectContaining({ - withAuth: true, - }) - ) - }) -}) - -describe("getStaticPathsFromContext", () => { - test("it returns static paths from context", async () => { - const client = new DrupalClient(BASE_URL) - - const paths = await client.getStaticPathsFromContext("node--article", {}) - - expect(paths).toMatchSnapshot() - }) - - test("it returns static paths from context with locale", async () => { - const client = new DrupalClient(BASE_URL) - - const paths = await client.getStaticPathsFromContext("node--article", { - locales: ["en", "es"], - defaultLocale: "en", - }) - - expect(paths).toMatchSnapshot() - }) - - test("it returns static paths for multiple resource types from context", async () => { - const client = new DrupalClient(BASE_URL) - - const paths = await client.getStaticPathsFromContext( - ["node--article", "node--recipe"], - { - locales: ["en", "es"], - defaultLocale: "en", - } - ) - - expect(paths).toMatchSnapshot() - }) - - test("it returns static paths from context with params", async () => { - const client = new DrupalClient(BASE_URL) - - const paths = await client.getStaticPathsFromContext( - "node--article", - {}, - { - params: { - "filter[promote]": 1, - }, - } - ) - - expect(paths).toMatchSnapshot() - }) - - test("it makes un-authenticated requests by default", async () => { - const client = new DrupalClient(BASE_URL) - const fetchSpy = jest.spyOn(client, "fetch") - - await client.getStaticPathsFromContext("node--article", { - locales: ["en", "es"], - defaultLocale: "en", - }) - expect(fetchSpy).toHaveBeenCalledWith(expect.anything(), { - withAuth: false, - }) - }) - - test("it makes authenticated requests with withAuth option", async () => { - const client = new DrupalClient(BASE_URL, { - useDefaultResourceTypeEntry: true, - auth: `Bearer sample-token`, - }) - const fetchSpy = jest - .spyOn(global, "fetch") - .mockImplementation( - jest.fn(() => - Promise.resolve({ ok: true, json: () => Promise.resolve({}) }) - ) as jest.Mock - ) - jest.spyOn(client, "getAccessToken").mockImplementation() - - await client.getStaticPathsFromContext( - "node--article", - { - locales: ["en", "es"], - defaultLocale: "en", - }, - { - withAuth: true, - } - ) - - expect(fetchSpy).toHaveBeenCalledWith( - expect.anything(), - expect.objectContaining({ - withAuth: true, - }) - ) - }) -}) - -describe("buildStaticPathsParamsFromPaths", () => { - test("it builds static paths from paths", () => { - const client = new DrupalClient(BASE_URL) - - const paths = ["/blog/post/one", "/blog/post/two", "/blog/post/three"] - - expect(client.buildStaticPathsParamsFromPaths(paths)).toMatchSnapshot() - - expect( - client.buildStaticPathsParamsFromPaths(paths, { locale: "en" }) - ).toMatchSnapshot() - }) - - test("it builds static paths from paths with pathPrefix", () => { - const client = new DrupalClient(BASE_URL) - - const paths = client.buildStaticPathsParamsFromPaths( - ["/blog/post/one", "/blog/post/two", "/blog/post"], - { pathPrefix: "blog" } - ) - - const paths2 = client.buildStaticPathsParamsFromPaths( - ["/blog/post/one", "/blog/post/two", "/blog/post"], - { pathPrefix: "/blog" } - ) - - const paths3 = client.buildStaticPathsParamsFromPaths( - ["blog/post/one", "blog/post/two", "blog/post"], - { pathPrefix: "/blog" } - ) - - const paths4 = client.buildStaticPathsParamsFromPaths( - ["blog/post/one", "blog/post/two", "blog/post"], - { pathPrefix: "blog" } - ) - - expect(paths).toMatchSnapshot() - - expect(paths).toEqual(paths2) - expect(paths).toEqual(paths3) - expect(paths).toEqual(paths4) - }) -}) - -describe("buildStaticPathsFromResources", () => { - test("it builds static paths from resources", () => { - const client = new DrupalClient(BASE_URL) - - const resources: Pick[] = [ - { - path: { - alias: "blog/post/one", - pid: 1, - langcode: "en", - }, - }, - { - path: { - alias: "blog/post/two", - pid: 2, - langcode: "en", - }, - }, - ] - - expect(client.buildStaticPathsFromResources(resources)).toMatchSnapshot() - - expect( - client.buildStaticPathsFromResources(resources, { locale: "es" }) - ).toMatchSnapshot() - }) - - test("it builds static paths from resources with pathPrefix", () => { - const client = new DrupalClient(BASE_URL) - - const resources: Pick[] = [ - { - path: { - alias: "blog/post/one", - pid: 1, - langcode: "en", - }, - }, - { - path: { - alias: "blog/post/two", - pid: 2, - langcode: "en", - }, - }, - ] - - const paths = client.buildStaticPathsFromResources(resources, { - pathPrefix: "blog", - }) - - const paths2 = client.buildStaticPathsFromResources(resources, { - pathPrefix: "/blog", - }) - - const paths3 = client.buildStaticPathsFromResources(resources, { - pathPrefix: "/blog/post", - locale: "es", - }) - - const paths4 = client.buildStaticPathsFromResources(resources, { - pathPrefix: "blog/post", - locale: "es", - }) - - expect(paths).toMatchSnapshot() - expect(paths3).toMatchSnapshot() - - expect(paths).toEqual(paths2) - expect(paths3).toEqual(paths4) - }) -}) - -describe("getMenu", () => { - test("it fetches menu items for a menu", async () => { - const client = new DrupalClient(BASE_URL) - - const menu = await client.getMenu("main") - - expect(menu).toMatchSnapshot() - }) - - test("it fetches menu items for a menu with locale", async () => { - const client = new DrupalClient(BASE_URL) - - const menu = await client.getMenu("main", { - locale: "es", - defaultLocale: "en", - }) - - expect(menu).toMatchSnapshot() - }) - - test("it fetches menu items for a menu with params", async () => { - const client = new DrupalClient(BASE_URL) - - const menu = await client.getMenu("main", { - params: { - "fields[menu_link_content--menu_link_content]": "title", - }, - }) - - expect(menu).toMatchSnapshot() - }) - - test("it throws an error for invalid menu name", async () => { - const client = new DrupalClient(BASE_URL) - - await expect(client.getMenu("INVALID")).rejects.toThrow( - '404 Not Found\nThe "menu" parameter was not converted for the path "/jsonapi/menu_items/{menu}" (route name: "jsonapi_menu_items.menu")' - ) - }) - - test("it makes un-authenticated requests by default", async () => { - const client = new DrupalClient(BASE_URL) - const fetchSpy = jest.spyOn(client, "fetch") - - await client.getMenu("main") - expect(fetchSpy).toHaveBeenCalledWith(expect.anything(), { - withAuth: false, - }) - }) - - test("it makes authenticated requests with withAuth option", async () => { - const client = new DrupalClient(BASE_URL, { - useDefaultResourceTypeEntry: true, - auth: `Bearer sample-token`, - }) - const fetchSpy = jest - .spyOn(global, "fetch") - .mockImplementation( - jest.fn(() => - Promise.resolve({ ok: true, json: () => Promise.resolve({}) }) - ) as jest.Mock - ) - jest.spyOn(client, "getAccessToken").mockImplementation() - - await client.getMenu("main", { withAuth: true }) - - expect(fetchSpy).toHaveBeenCalledWith( - expect.anything(), - expect.objectContaining({ - withAuth: true, - }) - ) - }) -}) - -describe("getView", () => { - test("it fetches a view", async () => { - const client = new DrupalClient(BASE_URL) - - const view = await client.getView("featured_articles--page_1") - - expect(view).toMatchSnapshot() - }) - - test("it fetches a view with params", async () => { - const client = new DrupalClient(BASE_URL) - - const view = await client.getView("featured_articles--page_1", { - params: { - "fields[node--article]": "title", - }, - }) - - expect(view).toMatchSnapshot() - }) - - test("it fetches a view with locale", async () => { - const client = new DrupalClient(BASE_URL) - - const view = await client.getView("featured_articles--page_1", { - locale: "es", - defaultLocale: "en", - params: { - "fields[node--article]": "title", - }, - }) - - expect(view).toMatchSnapshot() - }) - - test("it fetches raw data", async () => { - const client = new DrupalClient(BASE_URL) - - const view = await client.getView("featured_articles--page_1", { - locale: "es", - defaultLocale: "en", - deserialize: false, - params: { - "fields[node--article]": "title", - }, - }) - - expect(view).toMatchSnapshot() - }) - - test("it throws an error for invalid view name", async () => { - const client = new DrupalClient(BASE_URL) - - await expect(client.getView("INVALID")).rejects.toThrow("Not Found") - }) - - test("it makes un-authenticated requests by default", async () => { - const client = new DrupalClient(BASE_URL) - const fetchSpy = jest.spyOn(client, "fetch") - - await client.getView("featured_articles--page_1") - expect(fetchSpy).toHaveBeenCalledWith(expect.anything(), { - withAuth: false, - }) - }) - - test("it makes authenticated requests with withAuth option", async () => { - const client = new DrupalClient(BASE_URL, { - useDefaultResourceTypeEntry: true, - auth: `Bearer sample-token`, - }) - const fetchSpy = jest - .spyOn(global, "fetch") - .mockImplementation( - jest.fn(() => - Promise.resolve({ ok: true, json: () => Promise.resolve({}) }) - ) as jest.Mock - ) - jest.spyOn(client, "getAccessToken").mockImplementation() - - await client.getView("featured_articles--page_1", { withAuth: true }) - - expect(fetchSpy).toHaveBeenCalledWith( - expect.anything(), - expect.objectContaining({ - withAuth: true, - }) - ) - }) - - test("it fetches a view with links for pagination", async () => { - const client = new DrupalClient(BASE_URL) - const view = await client.getView("recipes--page_1") - - expect(view.links).toHaveProperty("next") - }) -}) - -describe("getSearchIndex", () => { - test("it fetches a search index", async () => { - const client = new DrupalClient(BASE_URL) - - const search = await client.getSearchIndex("recipes", { - params: { - "fields[node--recipe]": "title", - }, - }) - - expect(search).toMatchSnapshot() - }) - - test("it fetches a search index with locale", async () => { - const client = new DrupalClient(BASE_URL) - - const search = await client.getSearchIndex("recipes", { - locale: "es", - defaultLocale: "en", - params: { - "fields[node--recipe]": "title", - }, - }) - - expect(search).toMatchSnapshot() - }) - - test("it fetches a search index with facets filters", async () => { - const client = new DrupalClient(BASE_URL) - - const search = await client.getSearchIndex( - "recipes", - { - deserialize: false, - params: { - "filter[difficulty]": "easy", - "fields[node--recipe]": "title,field_difficulty", - }, - } - ) - - expect(search).toMatchSnapshot() - expect(search.meta.facets).not.toBeNull() - }) - - test("it fetches raw data from search index", async () => { - const client = new DrupalClient(BASE_URL) - - const search = await client.getSearchIndex("recipes", { - deserialize: false, - params: { - "filter[difficulty]": "easy", - "fields[node--recipe]": "title,field_difficulty", - }, - }) - - expect(search).toMatchSnapshot() - }) - - test("it makes un-authenticated requests by default", async () => { - const client = new DrupalClient(BASE_URL) - const fetchSpy = jest.spyOn(client, "fetch") - - await client.getSearchIndex("recipes") - - expect(fetchSpy).toHaveBeenCalledWith(expect.anything(), { - withAuth: false, - }) - }) - - test("it throws an error for invalid index", async () => { - const client = new DrupalClient(BASE_URL) - - await expect(client.getSearchIndex("INVALID-INDEX")).rejects.toThrow( - "Not Found" - ) - }) - - test("it makes authenticated requests with withAuth option", async () => { - const client = new DrupalClient(BASE_URL, { - useDefaultResourceTypeEntry: true, - auth: `Bearer sample-token`, - }) - const fetchSpy = jest - .spyOn(global, "fetch") - .mockImplementation( - jest.fn(() => - Promise.resolve({ ok: true, json: () => Promise.resolve({}) }) - ) as jest.Mock - ) - jest.spyOn(client, "getAccessToken").mockImplementation() - - await client.getSearchIndex("recipes", { - withAuth: true, - }) - - expect(fetchSpy).toHaveBeenCalledWith( - expect.anything(), - expect.objectContaining({ - withAuth: true, - }) - ) - }) -}) - -describe("getAuthFromContextAndOptions", () => { - test("if NOT in preview and withAuth option is provided, it should use the withAuth option", async () => { - const client = new DrupalClient(BASE_URL, { - auth: { - clientId: "7795065e-8ad0-45eb-a64d-73d9f3a5e943", - clientSecret: "d92Fm^ds", - }, - }) - const fetchSpy = jest - .spyOn(global, "fetch") - .mockImplementation( - jest.fn(() => - Promise.resolve({ ok: true, json: () => Promise.resolve({}) }) - ) as jest.Mock - ) - jest.spyOn(client, "getAccessToken").mockImplementation() - - await client.getResourceFromContext( - "node--article", - { - preview: false, - }, - { - withAuth: true, - } - ) - - expect(fetchSpy).toHaveBeenCalledWith( - expect.anything(), - expect.objectContaining({ - withAuth: true, - }) - ) - - await client.getResourceFromContext( - "node--article", - { - preview: false, - }, - { - withAuth: { - clientId: "foo", - clientSecret: "bar", - scope: "baz", - }, - } - ) - - expect(fetchSpy).toHaveBeenLastCalledWith( - expect.anything(), - expect.objectContaining({ - withAuth: { - clientId: "foo", - clientSecret: "bar", - scope: "baz", - }, - }) - ) - }) - - test("if NOT in preview and no withAuth option provided, it should fallback to the global auth", async () => { - const client = new DrupalClient(BASE_URL, { - auth: { - clientId: "7795065e-8ad0-45eb-a64d-73d9f3a5e943", - clientSecret: "d92Fm^ds", - }, - }) - const fetchSpy = jest - .spyOn(global, "fetch") - .mockImplementation( - jest.fn(() => - Promise.resolve({ ok: true, json: () => Promise.resolve({}) }) - ) as jest.Mock - ) - - await client.getResourceFromContext("node--article", { - preview: false, - }) - - expect(fetchSpy).toHaveBeenCalledWith( - expect.anything(), - expect.objectContaining({ - withAuth: false, - }) - ) - - const client2 = new DrupalClient(BASE_URL, { - auth: { - clientId: "7795065e-8ad0-45eb-a64d-73d9f3a5e943", - clientSecret: "d92Fm^ds", - }, - withAuth: true, - }) - jest.spyOn(client2, "getAccessToken").mockImplementation() - - await client2.getResourceFromContext("node--article", { - preview: false, - }) - - expect(fetchSpy).toHaveBeenLastCalledWith( - expect.anything(), - expect.objectContaining({ - withAuth: true, - }) - ) - }) - - test("if in preview, it should NOT use the global auth", async () => { - const client = new DrupalClient(BASE_URL, { - auth: { - clientId: "7795065e-8ad0-45eb-a64d-73d9f3a5e943", - clientSecret: "d92Fm^ds", - }, - withAuth: true, - }) - const fetchSpy = jest - .spyOn(global, "fetch") - .mockImplementation( - jest.fn(() => - Promise.resolve({ ok: true, json: () => Promise.resolve({}) }) - ) as jest.Mock - ) - - await client.getResourceFromContext("node--article", { - preview: true, - }) - - expect(fetchSpy).toHaveBeenCalledWith( - expect.anything(), - expect.objectContaining({ - withAuth: null, - }) - ) - }) - - test("if in preview and using the simple_oauth plugin, it should use the scope from context", async () => { - const client = new DrupalClient(BASE_URL, { - auth: { - clientId: "7795065e-8ad0-45eb-a64d-73d9f3a5e943", - clientSecret: "d92Fm^ds", - }, - }) - const fetchSpy = jest - .spyOn(global, "fetch") - .mockImplementation( - jest.fn(() => - Promise.resolve({ ok: true, json: () => Promise.resolve({}) }) - ) as jest.Mock - ) - - await client.getResourceFromContext("node--article", { - preview: true, - previewData: { - plugin: "simple_oauth", - scope: "editor", - }, - }) - - expect(fetchSpy).toHaveBeenCalledWith( - expect.anything(), - expect.objectContaining({ - withAuth: { - clientId: "7795065e-8ad0-45eb-a64d-73d9f3a5e943", - clientSecret: "d92Fm^ds", - scope: "editor", - url: "/oauth/token", - }, - }) - ) - }) - - test("if in preview and using the simple_oauth plugin, tt should use the scope from context even with global withAuth", async () => { - const client = new DrupalClient(BASE_URL, { - auth: { - clientId: "7795065e-8ad0-45eb-a64d-73d9f3a5e943", - clientSecret: "d92Fm^ds", - scope: "administrator", - }, - withAuth: true, - }) - const fetchSpy = jest - .spyOn(global, "fetch") - .mockImplementation( - jest.fn(() => - Promise.resolve({ ok: true, json: () => Promise.resolve({}) }) - ) as jest.Mock - ) - - await client.getResourceFromContext("node--article", { - preview: true, - previewData: { - plugin: "simple_oauth", - scope: "editor", - }, - }) - - expect(fetchSpy).toHaveBeenCalledWith( - expect.anything(), - expect.objectContaining({ - withAuth: { - clientId: "7795065e-8ad0-45eb-a64d-73d9f3a5e943", - clientSecret: "d92Fm^ds", - scope: "editor", - url: "/oauth/token", - }, - }) - ) - }) - - test("if in preview and using the jwt plugin, it should use the access_token from context", async () => { - const client = new DrupalClient(BASE_URL, { - auth: { - clientId: "7795065e-8ad0-45eb-a64d-73d9f3a5e943", - clientSecret: "d92Fm^ds", - }, - }) - const fetchSpy = jest - .spyOn(global, "fetch") - .mockImplementation( - jest.fn(() => - Promise.resolve({ ok: true, json: () => Promise.resolve({}) }) - ) as jest.Mock - ) - - await client.getResourceFromContext("node--article", { - preview: true, - previewData: { - plugin: "jwt", - access_token: "example-token", - }, - }) - - expect(fetchSpy).toHaveBeenCalledWith( - expect.anything(), - expect.objectContaining({ - withAuth: `Bearer example-token`, - }) - ) - }) - - test("if in preview and using the jwt plugin, it should use the access token from context even with global withAuth", async () => { - const client = new DrupalClient(BASE_URL, { - auth: { - clientId: "7795065e-8ad0-45eb-a64d-73d9f3a5e943", - clientSecret: "d92Fm^ds", - scope: "administrator", - }, - withAuth: true, - }) - const fetchSpy = jest - .spyOn(global, "fetch") - .mockImplementation( - jest.fn(() => - Promise.resolve({ ok: true, json: () => Promise.resolve({}) }) - ) as jest.Mock - ) - - await client.getResourceFromContext("node--article", { - preview: true, - previewData: { - plugin: "jwt", - access_token: "example-token", - }, - }) - - expect(fetchSpy).toHaveBeenCalledWith( - expect.anything(), - expect.objectContaining({ - withAuth: `Bearer example-token`, - }) - ) - }) -}) diff --git a/packages/next-drupal/tests/draft/draft.test.ts b/packages/next-drupal/tests/draft/draft.test.ts new file mode 100644 index 00000000..10499087 --- /dev/null +++ b/packages/next-drupal/tests/draft/draft.test.ts @@ -0,0 +1,206 @@ +import { + afterEach, + beforeEach, + describe, + expect, + jest, + test, +} from "@jest/globals" +import { cookies, draftMode } from "next/headers" +import { redirect } from "next/navigation" +import { NextRequest } from "next/server" +import { + DRAFT_DATA_COOKIE_NAME, + DRAFT_MODE_COOKIE_NAME, + DrupalClient, +} from "../../src" +import { BASE_URL, spyOnFetch } from "../utils" +import { + disableDraftMode, + enableDraftMode, + getDraftData, +} from "../../src/draft" +import { resetNextHeaders } from "../__mocks__/next/headers" +import type { ResponseCookie } from "next/dist/compiled/@edge-runtime/cookies" + +jest.mock("next/headers") +jest.mock("next/navigation", () => ({ + redirect: jest.fn(), +})) + +beforeEach(() => { + resetNextHeaders() +}) + +afterEach(() => { + jest.restoreAllMocks() +}) + +describe("enableDraftMode()", () => { + const searchParams = new URLSearchParams({ + slug: "/example", + resourceVersion: "id:1", + plugin: "simple_oauth", + secret: "very-secret-key", + }) + const validationPayload = { + path: "/example", + maxAge: 30, + } + const request = new NextRequest( + `https://example.com/api/draft?${searchParams}` + ) + const client = new DrupalClient(BASE_URL) + const draftModeCookie: ResponseCookie = { + name: DRAFT_MODE_COOKIE_NAME, + value: "some-secret-key", + sameSite: "lax", + } + + test("does not enable draft mode if validation fails", async () => { + spyOnFetch({ responseBody: { message: "fail" }, status: 500 }) + + const response = await enableDraftMode(request, client) + + expect(draftMode().enable).not.toHaveBeenCalled() + expect(response).toBeInstanceOf(Response) + expect(response.status).toBe(500) + }) + + test("enables draft mode", async () => { + spyOnFetch({ responseBody: validationPayload }) + + await enableDraftMode(request, client) + + expect(draftMode().enable).toHaveBeenCalled() + }) + + test("updates draft mode cookie’s sameSite flag", async () => { + spyOnFetch({ responseBody: validationPayload }) + + // Our mock draftMode().enable does not set a cookie, so we set one. + cookies().set(draftModeCookie) + expect(cookies().get(DRAFT_MODE_COOKIE_NAME).sameSite).toBe("lax") + expect(cookies().get(DRAFT_MODE_COOKIE_NAME).secure).toBeFalsy() + + await enableDraftMode(request, client) + + expect(cookies().get(DRAFT_MODE_COOKIE_NAME).sameSite).toBe("none") + expect(cookies().get(DRAFT_MODE_COOKIE_NAME).secure).toBe(true) + }) + + test("sets a draft data cookie", async () => { + spyOnFetch({ responseBody: validationPayload }) + expect(cookies().get(DRAFT_DATA_COOKIE_NAME)).toBe(undefined) + + await enableDraftMode(request, client) + + const cookie = cookies().get(DRAFT_DATA_COOKIE_NAME) + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const { secret, plugin, ...data } = Object.fromEntries( + searchParams.entries() + ) + expect(cookie).toMatchObject({ + name: DRAFT_DATA_COOKIE_NAME, + sameSite: "none", + secure: true, + value: JSON.stringify(data), + }) + }) + + test("redirects to the slug path", async () => { + spyOnFetch({ responseBody: validationPayload }) + + await enableDraftMode(request, client) + + expect(redirect).toHaveBeenCalledWith(searchParams.get("slug")) + }) +}) + +describe("disableDraftMode()", () => { + test("draft data cookie was deleted", () => { + disableDraftMode() + + expect(cookies).toHaveBeenCalledTimes(1) + expect(cookies().delete).toHaveBeenCalledWith(DRAFT_DATA_COOKIE_NAME) + }) + + test("draft mode was disabled", () => { + // First ensure draft mode is enabled. + draftMode().enable() + expect(draftMode().isEnabled).toBe(true) + + disableDraftMode() + expect(draftMode().disable).toHaveBeenCalledTimes(1) + expect(draftMode().isEnabled).toBe(false) + }) + + test("returns a response object", async () => { + const response = disableDraftMode() + + expect(response).toBeInstanceOf(Response) + expect(response.ok).toBe(true) + expect(await response.text()).toBe("Draft mode is disabled") + }) +}) + +describe("getDraftData()", () => { + const draftData = { + slug: "/example", + resourceVersion: "id:1", + } + const draftDataCookie: ResponseCookie = { + name: DRAFT_DATA_COOKIE_NAME, + value: JSON.stringify(draftData), + sameSite: "none", + secure: true, + } + + test("returns empty object if draft mode disabled", () => { + cookies().set(draftDataCookie) + + const data = getDraftData() + expect(draftMode().isEnabled).toBe(false) + expect(cookies().has).toHaveBeenCalledTimes(0) + expect(cookies().get).toHaveBeenCalledTimes(0) + expect(data).toMatchObject({}) + }) + + test("returns empty object if no draft data cookie", () => { + draftMode().enable() + draftMode.mockClear() + + const data = getDraftData() + expect(draftMode).toHaveBeenCalledTimes(1) + expect(draftMode().isEnabled).toBe(true) + expect(cookies().has).toHaveBeenCalledWith(DRAFT_DATA_COOKIE_NAME) + expect(cookies().has).toHaveBeenCalledTimes(1) + expect(cookies().get).toHaveBeenCalledTimes(0) + expect(data).toMatchObject({}) + }) + + test("returns empty object if no draft data cookie value", () => { + cookies().set({ + ...draftDataCookie, + value: "", + }) + draftMode().enable() + draftMode.mockClear() + + const data = getDraftData() + expect(draftMode).toHaveBeenCalledTimes(1) + expect(draftMode().isEnabled).toBe(true) + expect(cookies().has).toHaveBeenCalledWith(DRAFT_DATA_COOKIE_NAME) + expect(cookies().has).toHaveBeenCalledTimes(1) + expect(cookies().get).toHaveBeenCalledWith(DRAFT_DATA_COOKIE_NAME) + expect(cookies().get).toHaveBeenCalledTimes(1) + expect(data).toMatchObject({}) + }) + + test("returns the JSON.parse()d data", () => { + cookies().set(draftDataCookie) + draftMode().enable() + + expect(getDraftData()).toMatchObject(draftData) + }) +}) diff --git a/packages/next-drupal/tests/utils/index.ts b/packages/next-drupal/tests/utils/index.ts new file mode 100644 index 00000000..a6dd3e49 --- /dev/null +++ b/packages/next-drupal/tests/utils/index.ts @@ -0,0 +1,2 @@ +export * from "./mocks" +export * from "./rpc" diff --git a/packages/next-drupal/tests/utils/mocks/data.ts b/packages/next-drupal/tests/utils/mocks/data.ts new file mode 100644 index 00000000..95ec1895 --- /dev/null +++ b/packages/next-drupal/tests/utils/mocks/data.ts @@ -0,0 +1,365 @@ +import type { + DrupalClientAuth, + DrupalClientAuthAccessToken, + DrupalClientAuthClientIdSecret, + DrupalClientAuthUsernamePassword, +} from "../../../src" + +// Run all tests against this env until we configure CI to setup a Drupal instance. +// TODO: Bootstrap and expose the /drupal env for testing. +export const BASE_URL = process.env["DRUPAL_BASE_URL"] as string + +const auth = { + basicAuth: { + username: "admin", + password: "example", + } as DrupalClientAuthUsernamePassword, + accessToken: { + access_token: "ECYM594IlARGc3S8KgBHvTpki0rDtWx6", + token_type: "bearer", + expires_in: 3600, + } as DrupalClientAuthAccessToken, + clientIdSecret: { + clientId: "7795065e-8ad0-45eb-a64d-73d9f3a5e943", + clientSecret: "d92Fm^ds", + } as DrupalClientAuthClientIdSecret, + function: function authFunction() { + return "custom Authentication header from authFunction" + } as DrupalClientAuth, + customAuthenticationHeader: + "custom Authentication header from string" as DrupalClientAuth, +} + +const resources = { + file: { + jsonapi: { + version: "1.0", + meta: { links: { self: { href: "http://jsonapi.org/format/1.0/" } } }, + }, + data: { + type: "file--file", + id: "641fc6a4-276d-43e9-abbd-1e51bc28ddf9", + links: { + self: { + href: "https://example.com/en/jsonapi/file/file/641fc6a4-276d-43e9-abbd-1e51bc28ddf9", + }, + }, + attributes: { + drupal_internal__fid: 1, + langcode: "en", + filename: "mediterranean-quiche-umami.jpg", + uri: { + value: "public://mediterranean-quiche-umami.jpg", + url: "/sites/default/files/mediterranean-quiche-umami.jpg", + }, + filemime: "image/jpeg", + filesize: 70160, + status: true, + created: "2022-03-21T10:52:42+00:00", + changed: "2022-03-21T10:52:42+00:00", + }, + relationships: { + uid: { + data: null, + links: { + related: { + href: "https://example.com/en/jsonapi/file/file/641fc6a4-276d-43e9-abbd-1e51bc28ddf9/uid", + }, + self: { + href: "https://example.com/en/jsonapi/file/file/641fc6a4-276d-43e9-abbd-1e51bc28ddf9/relationships/uid", + }, + }, + }, + }, + }, + links: { + self: { + href: "https://example.com/en/jsonapi/file/file/641fc6a4-276d-43e9-abbd-1e51bc28ddf9", + }, + }, + }, + mediaImage: { + jsonapi: { + version: "1.0", + meta: { links: { self: { href: "http://jsonapi.org/format/1.0/" } } }, + }, + data: { + type: "media--image", + id: "bbfe9d97-2da2-432b-a22c-0396c08e06ca", + links: { + self: { + href: "https://example.com/en/jsonapi/media/image/bbfe9d97-2da2-432b-a22c-0396c08e06ca?resourceVersion=id%3A1", + }, + }, + attributes: { + drupal_internal__mid: 1, + drupal_internal__vid: 1, + langcode: "en", + revision_created: "2022-03-21T10:52:42+00:00", + revision_log_message: null, + status: true, + name: "Deep mediterranean quiche", + created: "2022-03-21T10:52:42+00:00", + changed: "2022-03-21T10:52:42+00:00", + default_langcode: true, + revision_translation_affected: true, + path: { alias: null, pid: null, langcode: "en" }, + content_translation_source: "und", + content_translation_outdated: false, + }, + relationships: { + bundle: { + data: { + type: "media_type--media_type", + id: "afec21c2-d0a9-4e0e-8c3a-1cd6d5a8fc92", + meta: { drupal_internal__target_id: "image" }, + }, + links: { + related: { + href: "https://example.com/en/jsonapi/media/image/bbfe9d97-2da2-432b-a22c-0396c08e06ca/bundle?resourceVersion=id%3A1", + }, + self: { + href: "https://example.com/en/jsonapi/media/image/bbfe9d97-2da2-432b-a22c-0396c08e06ca/relationships/bundle?resourceVersion=id%3A1", + }, + }, + }, + revision_user: { + data: null, + links: { + related: { + href: "https://example.com/en/jsonapi/media/image/bbfe9d97-2da2-432b-a22c-0396c08e06ca/revision_user?resourceVersion=id%3A1", + }, + self: { + href: "https://example.com/en/jsonapi/media/image/bbfe9d97-2da2-432b-a22c-0396c08e06ca/relationships/revision_user?resourceVersion=id%3A1", + }, + }, + }, + uid: { + data: { + type: "user--user", + id: "256a133b-0bd7-4426-a823-b8ce81e0d778", + meta: { drupal_internal__target_id: 0 }, + }, + links: { + related: { + href: "https://example.com/en/jsonapi/media/image/bbfe9d97-2da2-432b-a22c-0396c08e06ca/uid?resourceVersion=id%3A1", + }, + self: { + href: "https://example.com/en/jsonapi/media/image/bbfe9d97-2da2-432b-a22c-0396c08e06ca/relationships/uid?resourceVersion=id%3A1", + }, + }, + }, + thumbnail: { + data: { + type: "file--file", + id: "641fc6a4-276d-43e9-abbd-1e51bc28ddf9", + meta: { + alt: "A delicious deep layered Mediterranean quiche with basil garnish", + title: null, + width: 768, + height: 511, + drupal_internal__target_id: 1, + }, + }, + links: { + related: { + href: "https://example.com/en/jsonapi/media/image/bbfe9d97-2da2-432b-a22c-0396c08e06ca/thumbnail?resourceVersion=id%3A1", + }, + self: { + href: "https://example.com/en/jsonapi/media/image/bbfe9d97-2da2-432b-a22c-0396c08e06ca/relationships/thumbnail?resourceVersion=id%3A1", + }, + }, + }, + field_media_image: { + data: { + type: "file--file", + id: "641fc6a4-276d-43e9-abbd-1e51bc28ddf9", + meta: { + alt: "A delicious deep layered Mediterranean quiche with basil garnish", + title: null, + width: 768, + height: 511, + drupal_internal__target_id: 1, + }, + }, + links: { + related: { + href: "https://example.com/en/jsonapi/media/image/bbfe9d97-2da2-432b-a22c-0396c08e06ca/field_media_image?resourceVersion=id%3A1", + }, + self: { + href: "https://example.com/en/jsonapi/media/image/bbfe9d97-2da2-432b-a22c-0396c08e06ca/relationships/field_media_image?resourceVersion=id%3A1", + }, + }, + }, + }, + }, + included: [ + { + type: "file--file", + id: "641fc6a4-276d-43e9-abbd-1e51bc28ddf9", + links: { + self: { + href: "https://example.com/en/jsonapi/file/file/641fc6a4-276d-43e9-abbd-1e51bc28ddf9", + }, + }, + attributes: { + drupal_internal__fid: 1, + langcode: "en", + filename: "mediterranean-quiche-umami.jpg", + uri: { + value: "public://mediterranean-quiche-umami.jpg", + url: "/sites/default/files/mediterranean-quiche-umami.jpg", + }, + filemime: "image/jpeg", + filesize: 70160, + status: true, + created: "2022-03-21T10:52:42+00:00", + changed: "2022-03-21T10:52:42+00:00", + }, + relationships: { + uid: { + data: null, + links: { + related: { + href: "https://example.com/en/jsonapi/file/file/641fc6a4-276d-43e9-abbd-1e51bc28ddf9/uid", + }, + self: { + href: "https://example.com/en/jsonapi/file/file/641fc6a4-276d-43e9-abbd-1e51bc28ddf9/relationships/uid", + }, + }, + }, + }, + }, + ], + links: { + self: { + href: "https://example.com/en/jsonapi/media/image/bbfe9d97-2da2-432b-a22c-0396c08e06ca?include=field_media_image\u0026resourceVersion=id%3A1", + }, + }, + }, +} + +const menus = { + menuItems: { + jsonapi: { + version: "1.0", + meta: { + links: { + self: { + href: "http://jsonapi.org/format/1.0/", + }, + }, + }, + }, + data: [ + { + type: "menu_link_content--menu_link_content", + id: "standard.front_page", + attributes: { + description: "", + enabled: true, + expanded: false, + menu_name: "main", + meta: [], + options: [], + parent: "", + provider: "demo_umami", + route: { + name: "", + parameters: [], + }, + title: "Home", + url: "/en", + weight: "0", + }, + }, + { + type: "menu_link_content--menu_link_content", + id: "views_view:views.featured_articles.page_1", + attributes: { + description: "", + enabled: true, + expanded: false, + menu_name: "main", + meta: { + view_id: "featured_articles", + display_id: "page_1", + }, + options: [], + parent: "", + provider: "views", + route: { + name: "view.featured_articles.page_1", + parameters: [], + }, + title: "Articles", + url: "/en/articles", + weight: "20", + }, + }, + { + type: "menu_link_content--menu_link_content", + id: "views_view:views.recipes.page_1", + attributes: { + description: "", + enabled: true, + expanded: false, + menu_name: "main", + meta: { + view_id: "recipes", + display_id: "page_1", + }, + options: [], + parent: "", + provider: "views", + route: { + name: "view.recipes.page_1", + parameters: [], + }, + title: "Recipes", + url: "/en/recipes", + weight: "30", + }, + }, + ], + links: { + self: { + href: "https://next-drupal-test.ddev.site/jsonapi/menu_items/main", + }, + }, + }, + invalidMenu: { + jsonapi: { + version: "1.0", + meta: { + links: { + self: { + href: "http://jsonapi.org/format/1.0/", + }, + }, + }, + }, + errors: [ + { + title: "Not Found", + status: "404", + detail: + 'The "menu" parameter was not converted for the path "/jsonapi/menu_items/{menu}" (route name: "jsonapi_menu_items.menu")', + links: { + via: { + href: "https://next-drupal-test.ddev.site/jsonapi/menu_items/INVALID", + }, + info: { + href: "http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.5", + }, + }, + }, + ], + }, +} + +export const mocks = { + auth, + resources, + menus, +} diff --git a/packages/next-drupal/tests/utils/mocks/fetch.ts b/packages/next-drupal/tests/utils/mocks/fetch.ts new file mode 100644 index 00000000..b33122ca --- /dev/null +++ b/packages/next-drupal/tests/utils/mocks/fetch.ts @@ -0,0 +1,63 @@ +import { jest } from "@jest/globals" + +interface SpyOnFetchParams { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + responseBody?: any + throwErrorMessage?: string + status?: number + headers?: Record +} + +export function spyOnFetch({ + responseBody = null, + throwErrorMessage = null, + status = 200, + headers = {}, +}: SpyOnFetchParams = {}) { + return jest.spyOn(global, "fetch").mockImplementation( + fetchMockImplementation({ + responseBody, + throwErrorMessage, + status, + headers, + }) + ) +} + +export function spyOnFetchOnce({ + responseBody = null, + throwErrorMessage = null, + status = 200, + headers = {}, +}: SpyOnFetchParams) { + return jest.spyOn(global, "fetch").mockImplementationOnce( + fetchMockImplementation({ + responseBody, + throwErrorMessage, + status, + headers, + }) + ) +} + +function fetchMockImplementation({ + responseBody = null, + throwErrorMessage = null, + status = 200, + headers = {}, +}: SpyOnFetchParams) { + if (throwErrorMessage) { + return async () => { + throw new Error(throwErrorMessage) + } + } + + return async () => + new Response(JSON.stringify(responseBody || {}), { + status, + headers: { + "content-type": "application/vnd.api+json", + ...headers, + }, + }) +} diff --git a/packages/next-drupal/tests/utils/mocks/index.ts b/packages/next-drupal/tests/utils/mocks/index.ts new file mode 100644 index 00000000..96ddd33a --- /dev/null +++ b/packages/next-drupal/tests/utils/mocks/index.ts @@ -0,0 +1,3 @@ +export * from "./data" +export * from "./fetch" +export * from "./logger" diff --git a/packages/next-drupal/tests/utils/mocks/logger.ts b/packages/next-drupal/tests/utils/mocks/logger.ts new file mode 100644 index 00000000..bd696ee5 --- /dev/null +++ b/packages/next-drupal/tests/utils/mocks/logger.ts @@ -0,0 +1,10 @@ +import { Logger } from "../../../src" + +export function mockLogger(): Logger { + return { + log: jest.fn(), + debug: jest.fn(), + warn: jest.fn(), + error: jest.fn(), + } +} diff --git a/packages/next-drupal/tests/utils.ts b/packages/next-drupal/tests/utils/rpc.ts similarity index 76% rename from packages/next-drupal/tests/utils.ts rename to packages/next-drupal/tests/utils/rpc.ts index 762eb6ba..1b4aae67 100644 --- a/packages/next-drupal/tests/utils.ts +++ b/packages/next-drupal/tests/utils/rpc.ts @@ -1,8 +1,5 @@ -import { DrupalClient } from "../src/client" - -// Run all tests against this env until we configure CI to setup a Drupal instance. -// TODO: Bootstrap and expose the /drupal env for testing. -export const BASE_URL = process.env["DRUPAL_BASE_URL"] as string +import { DrupalClient } from "../../src" +import { BASE_URL } from "./index" const client = new DrupalClient(BASE_URL, { auth: { diff --git a/packages/next-drupal/tsup.config.ts b/packages/next-drupal/tsup.config.ts index 0690563c..b7692abe 100644 --- a/packages/next-drupal/tsup.config.ts +++ b/packages/next-drupal/tsup.config.ts @@ -1,7 +1,7 @@ import { defineConfig } from "tsup" export const tsup = defineConfig({ - entry: ["src/index.ts", "src/navigation.ts"], + entry: ["src/index.ts", "src/draft.ts", "src/navigation.ts"], // Enable experimental code splitting support in CommonJS. // splitting: true, // Use Rollup for tree shaking. diff --git a/scripts/sync-examples.sh b/scripts/sync-examples.sh deleted file mode 100755 index 35ce4e50..00000000 --- a/scripts/sync-examples.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/bash - -set -e # bail on errors -GLOB=$1 -IS_CI="${CI:-false}" -BASE=$(pwd) -COMMIT_MESSAGE=$(git log -1 --pretty=%B) - -for folder in $GLOB; do - [ -d "$folder" ] || continue - cd $BASE - - NAME=${folder##*/} - CLONE_DIR="__${NAME}__clone__" - - # sync to read-only clones - # clone, delete files in the clone, and copy (new) files over - # this handles file deletions, additions, and changes seamlessly - # note: redirect output to dev/null to avoid any possibility of leaking token - git clone --quiet --depth 1 https://github.com/chapter-three/next-${NAME}.git $CLONE_DIR > /dev/null - cd $CLONE_DIR - find . | grep -v ".git" | grep -v "^\.*$" | xargs rm -rf # delete all files (to handle deletions in monorepo) - cp -r $BASE/$folder/. . - - if [ -n "$(git status --porcelain)" ]; then - git add . - git commit -m "$COMMIT_MESSAGE" - git push origin main - fi - - cd $BASE - rm -rf $CLONE_DIR -done diff --git a/scripts/sync-modules.sh b/scripts/sync-modules.sh deleted file mode 100755 index 702124e1..00000000 --- a/scripts/sync-modules.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/bash - -set -e # bail on errors -GLOB=$1 -IS_CI="${CI:-false}" -BASE=$(pwd) -COMMIT_MESSAGE=$(git log -1 --pretty=%B) - -for folder in $GLOB; do - [ -d "$folder" ] || continue - cd $BASE - - NAME=${folder##*/} - CLONE_DIR="__${NAME}__clone__" - - # sync to read-only clones - # clone, delete files in the clone, and copy (new) files over - # this handles file deletions, additions, and changes seamlessly - # note: redirect output to dev/null to avoid any possibility of leaking token - git clone --quiet --depth 1 git@git.drupal.org:project/$NAME.git $CLONE_DIR > /dev/null - cd $CLONE_DIR - find . | grep -v ".git" | grep -v "^\.*$" | xargs rm -rf # delete all files (to handle deletions in monorepo) - cp -r $BASE/$folder/. . - - if [ -n "$(git status --porcelain)" ]; then - git add . - git commit -m "$COMMIT_MESSAGE" - git push origin 1.0.x - fi - - cd $BASE - rm -rf $CLONE_DIR -done diff --git a/scripts/sync-repo.sh b/scripts/sync-repo.sh new file mode 100755 index 00000000..1784c02d --- /dev/null +++ b/scripts/sync-repo.sh @@ -0,0 +1,49 @@ +#!/bin/bash + +# Script to sync packages to read-only git clones +# +# This handles file deletions, additions, and changes seamlessly + +set -e # bail on errors + +BRANCHES=$1 +REPO=$2 +GLOB=$3 + +# Allow BRANCHES to be a comma-seperated list. +BRANCH=$(echo $BRANCHES | cut -d "," -f 1) +TRACKING_BRANCH=$(echo $BRANCHES | cut -d "," -f 2) + +BASE=$(pwd) +COMMIT_MESSAGE=$(git log -1 --pretty=%B) + +for folder in $GLOB; do + [ -d "$folder" ] || continue + cd $BASE + + NAME=${folder##*/} + CLONE_DIR="__${NAME}__clone__" + + # Note: redirect output to dev/null to avoid any possibility of leaking token + git clone --quiet --depth 1 --branch ${BRANCH} ${REPO}${NAME}.git $CLONE_DIR > /dev/null + cd $CLONE_DIR + + # Delete all files (to handle deletions in monorepo) + find . | grep -v ".git" | grep -v "^\.*$" | xargs rm -rf + + # Copy new files to the clone + cp -r $BASE/$folder/. . + + if [ -n "$(git status --porcelain)" ]; then + git add . + git commit -m "$COMMIT_MESSAGE" + git push origin ${BRANCH} + fi + + if [ "$TRACKING_BRANCH" != "$BRANCH" ]; then + git push origin ${BRANCH}:${TRACKING_BRANCH} + fi + + cd $BASE + rm -rf $CLONE_DIR +done diff --git a/scripts/sync-starters.sh b/scripts/sync-starters.sh deleted file mode 100755 index ea6946f9..00000000 --- a/scripts/sync-starters.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/bash - -set -e # bail on errors -GLOB=$1 -IS_CI="${CI:-false}" -BASE=$(pwd) -COMMIT_MESSAGE=$(git log -1 --pretty=%B) - -for folder in $GLOB; do - [ -d "$folder" ] || continue - cd $BASE - - NAME=${folder##*/} - CLONE_DIR="__${NAME}__clone__" - - # sync to read-only clones - # clone, delete files in the clone, and copy (new) files over - # this handles file deletions, additions, and changes seamlessly - # note: redirect output to dev/null to avoid any possibility of leaking token - git clone --quiet --depth 1 https://github.com/chapter-three/next-drupal-${NAME}.git $CLONE_DIR > /dev/null - cd $CLONE_DIR - find . | grep -v ".git" | grep -v "^\.*$" | xargs rm -rf # delete all files (to handle deletions in monorepo) - cp -r $BASE/$folder/. . - - if [ -n "$(git status --porcelain)" ]; then - git add . - git commit -m "$COMMIT_MESSAGE" - git push origin main - fi - - cd $BASE - rm -rf $CLONE_DIR -done diff --git a/starters/basic-starter/.gitignore b/starters/basic-starter/.gitignore index 081b7c17..83ec79b6 100644 --- a/starters/basic-starter/.gitignore +++ b/starters/basic-starter/.gitignore @@ -6,7 +6,8 @@ .pnp.js .yarn/install-state.gz -# testing +# build/test artifacts +/.turbo /coverage # next.js diff --git a/starters/basic-starter/package.json b/starters/basic-starter/package.json index 6d974a7e..51b3ed0e 100644 --- a/starters/basic-starter/package.json +++ b/starters/basic-starter/package.json @@ -1,6 +1,6 @@ { "name": "basic-starter", - "version": "1.8.0", + "version": "2.0.0-alpha.0", "private": true, "license": "MIT", "scripts": { @@ -14,7 +14,7 @@ }, "dependencies": { "next": "^14", - "next-drupal": "^1.6.0", + "next-drupal": "^2.0.0-alpha.0", "react": "^18.2.0", "react-dom": "^18.2.0" }, diff --git a/starters/graphql-starter/.gitignore b/starters/graphql-starter/.gitignore index 081b7c17..83ec79b6 100644 --- a/starters/graphql-starter/.gitignore +++ b/starters/graphql-starter/.gitignore @@ -6,7 +6,8 @@ .pnp.js .yarn/install-state.gz -# testing +# build/test artifacts +/.turbo /coverage # next.js diff --git a/starters/graphql-starter/package.json b/starters/graphql-starter/package.json index a8d0986e..77b11cb7 100644 --- a/starters/graphql-starter/package.json +++ b/starters/graphql-starter/package.json @@ -1,6 +1,6 @@ { "name": "graphql-starter", - "version": "0.1.0", + "version": "2.0.0-alpha.0", "private": true, "license": "MIT", "scripts": { @@ -14,7 +14,7 @@ }, "dependencies": { "next": "^14", - "next-drupal": "^1.6.0", + "next-drupal": "^2.0.0-alpha.0", "react": "^18.2.0", "react-dom": "^18.2.0" }, diff --git a/www/.gitignore b/www/.gitignore index 22c8bbcb..6686735a 100644 --- a/www/.gitignore +++ b/www/.gitignore @@ -1,10 +1,16 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + # dependencies /node_modules /.pnp .pnp.js +.yarn/install-state.gz -# testing +# build/test artifacts +/.turbo /coverage +/cypress/screenshots +/cypress/videos # next.js /.next/ @@ -23,10 +29,11 @@ yarn-debug.log* yarn-error.log* # local env files -.env.local -.env.development.local -.env.test.local -.env.production.local +.env*.local # vercel .vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/www/content/docs/configuration.mdx b/www/content/docs/configuration.mdx index 42d9f8ac..baaaec03 100644 --- a/www/content/docs/configuration.mdx +++ b/www/content/docs/configuration.mdx @@ -217,34 +217,6 @@ A long-lived access token you can set directly on the client. --- -### forceIframeSameSiteCookie - - - -Use `forceIframeSameSiteCookie` in development only. - - - -- **Default value**: `false` -- **Required**: No - -If you're running your site in development and the host address is different from the iframe preview, you might run into issues with `SameSite` cookies. - -You can use this option to force the cookie to be set to `SameSite=None,Secure` in **development**. - -```ts -export const drupal = new DrupalClient( - process.env.NEXT_PUBLIC_DRUPAL_BASE_URL, - { - forceIframeSameSiteCookie: process.env.NODE_ENV === "development", - } -) -``` - -For more info see: https://github.com/vercel/next.js/discussions/32238 - ---- - ### debug - **Default value**: `false` diff --git a/www/content/tutorials/graphql/apply-patches.mdx b/www/content/tutorials/graphql/apply-patches.mdx index cf685951..43ad17a8 100644 --- a/www/content/tutorials/graphql/apply-patches.mdx +++ b/www/content/tutorials/graphql/apply-patches.mdx @@ -21,10 +21,10 @@ At the time of this writing, there are two patches we need to wire everything to // highlight-start "patches": { "drupal/subrequests": { - "Get same results on different request": "https://www.drupal.org/files/issues/2019-07-18/change_request_type-63049395-09.patch" + "#3049395-47 - Page Cache causes different subrequests to return the same responses": "https://www.drupal.org/files/issues/2022-12-06/subrequests-3049395-chnage-request-type-47.patch" }, "drupal/decoupled_router": { - "Unable to resolve path on node in other language than default": "https://www.drupal.org/files/issues/2022-11-30/decouple_router-3111456-resolve-language-issue-58.patch" + "#3111456-59 - Unable to resolve path on node in other language than default": "https://www.drupal.org/files/issues/2022-12-01/decouple_router-3111456-resolve-language-issue-58--get-translation.patch" } }, // highlight-end diff --git a/www/content/tutorials/graphql/enable-modules.mdx b/www/content/tutorials/graphql/enable-modules.mdx index b5d04a4f..1997a8c0 100644 --- a/www/content/tutorials/graphql/enable-modules.mdx +++ b/www/content/tutorials/graphql/enable-modules.mdx @@ -6,7 +6,14 @@ group: Quick Start (GraphQL) --- 1. Visit `/admin/modules`. -2. Enable the following modules: **Next.js** and **Next.js GraphQL**. +2. Enable the following modules: **Next.js**, **Next.js GraphQL**, **GraphQL Compose: Edges**, **GraphQL Compose: Routes**. + +## Configure GraphQL Compose + +1. Visit `/admin/config/graphql_compose`. +2. Enable "GraphQL", "Single Query", "Edge Query", & "Loading by Route" for the Article content type. +3. Enable all of the fields for the Article content type. +4. Do the same for the Basic page content type. ## Try GraphQL @@ -14,7 +21,7 @@ If you visit `/admin/config/graphql/servers/manage/graphql_compose_server/explor You can start testing GraphQL queries. Let's make our first request to fetch the first 5 articles. -Copy and paste the following in the query textbox and click run. +Copy and paste the following in the query text input and click the Execute Query (▶) button. ```graphql query Articles { diff --git a/www/content/tutorials/graphql/install-drupal.mdx b/www/content/tutorials/graphql/install-drupal.mdx index d5103b01..1db1d176 100644 --- a/www/content/tutorials/graphql/install-drupal.mdx +++ b/www/content/tutorials/graphql/install-drupal.mdx @@ -38,5 +38,5 @@ composer require drupal/next Run the following command to install GraphQL and GraphQL Compose modules: ```sh -composer require 'drupal/graphql:^4.4' 'drupal/graphql_compose:^1.0@beta' +composer require 'drupal/graphql:^4.6' 'drupal/graphql_compose:^2.0' ``` diff --git a/yarn.lock b/yarn.lock index 4f2ddedc..a151c177 100644 --- a/yarn.lock +++ b/yarn.lock @@ -50,109 +50,109 @@ resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.3.tgz#2e22e830d36f0a9cf2c0ccd3c7f6d59435b77dfa" integrity sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ== -"@algolia/cache-browser-local-storage@4.20.0": - version "4.20.0" - resolved "https://registry.yarnpkg.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.20.0.tgz#357318242fc542ffce41d6eb5b4a9b402921b0bb" - integrity sha512-uujahcBt4DxduBTvYdwO3sBfHuJvJokiC3BP1+O70fglmE1ShkH8lpXqZBac1rrU3FnNYSUs4pL9lBdTKeRPOQ== - dependencies: - "@algolia/cache-common" "4.20.0" - -"@algolia/cache-common@4.20.0": - version "4.20.0" - resolved "https://registry.yarnpkg.com/@algolia/cache-common/-/cache-common-4.20.0.tgz#ec52230509fce891091ffd0d890618bcdc2fa20d" - integrity sha512-vCfxauaZutL3NImzB2G9LjLt36vKAckc6DhMp05An14kVo8F1Yofb6SIl6U3SaEz8pG2QOB9ptwM5c+zGevwIQ== - -"@algolia/cache-in-memory@4.20.0": - version "4.20.0" - resolved "https://registry.yarnpkg.com/@algolia/cache-in-memory/-/cache-in-memory-4.20.0.tgz#5f18d057bd6b3b075022df085c4f83bcca4e3e67" - integrity sha512-Wm9ak/IaacAZXS4mB3+qF/KCoVSBV6aLgIGFEtQtJwjv64g4ePMapORGmCyulCFwfePaRAtcaTbMcJF+voc/bg== - dependencies: - "@algolia/cache-common" "4.20.0" - -"@algolia/client-account@4.20.0": - version "4.20.0" - resolved "https://registry.yarnpkg.com/@algolia/client-account/-/client-account-4.20.0.tgz#23ce0b4cffd63100fb7c1aa1c67a4494de5bd645" - integrity sha512-GGToLQvrwo7am4zVkZTnKa72pheQeez/16sURDWm7Seyz+HUxKi3BM6fthVVPUEBhtJ0reyVtuK9ArmnaKl10Q== - dependencies: - "@algolia/client-common" "4.20.0" - "@algolia/client-search" "4.20.0" - "@algolia/transporter" "4.20.0" - -"@algolia/client-analytics@4.20.0": - version "4.20.0" - resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-4.20.0.tgz#0aa6bef35d3a41ac3991b3f46fcd0bf00d276fa9" - integrity sha512-EIr+PdFMOallRdBTHHdKI3CstslgLORQG7844Mq84ib5oVFRVASuuPmG4bXBgiDbcsMLUeOC6zRVJhv1KWI0ug== - dependencies: - "@algolia/client-common" "4.20.0" - "@algolia/client-search" "4.20.0" - "@algolia/requester-common" "4.20.0" - "@algolia/transporter" "4.20.0" - -"@algolia/client-common@4.20.0": - version "4.20.0" - resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-4.20.0.tgz#ca60f04466515548651c4371a742fbb8971790ef" - integrity sha512-P3WgMdEss915p+knMMSd/fwiHRHKvDu4DYRrCRaBrsfFw7EQHon+EbRSm4QisS9NYdxbS04kcvNoavVGthyfqQ== - dependencies: - "@algolia/requester-common" "4.20.0" - "@algolia/transporter" "4.20.0" - -"@algolia/client-personalization@4.20.0": - version "4.20.0" - resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-4.20.0.tgz#ca81308e8ad0db3b27458b78355f124f29657181" - integrity sha512-N9+zx0tWOQsLc3K4PVRDV8GUeOLAY0i445En79Pr3zWB+m67V+n/8w4Kw1C5LlbHDDJcyhMMIlqezh6BEk7xAQ== - dependencies: - "@algolia/client-common" "4.20.0" - "@algolia/requester-common" "4.20.0" - "@algolia/transporter" "4.20.0" - -"@algolia/client-search@4.20.0": - version "4.20.0" - resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-4.20.0.tgz#3bcce817ca6caedc835e0eaf6f580e02ee7c3e15" - integrity sha512-zgwqnMvhWLdpzKTpd3sGmMlr4c+iS7eyyLGiaO51zDZWGMkpgoNVmltkzdBwxOVXz0RsFMznIxB9zuarUv4TZg== - dependencies: - "@algolia/client-common" "4.20.0" - "@algolia/requester-common" "4.20.0" - "@algolia/transporter" "4.20.0" - -"@algolia/logger-common@4.20.0": - version "4.20.0" - resolved "https://registry.yarnpkg.com/@algolia/logger-common/-/logger-common-4.20.0.tgz#f148ddf67e5d733a06213bebf7117cb8a651ab36" - integrity sha512-xouigCMB5WJYEwvoWW5XDv7Z9f0A8VoXJc3VKwlHJw/je+3p2RcDXfksLI4G4lIVncFUYMZx30tP/rsdlvvzHQ== - -"@algolia/logger-console@4.20.0": - version "4.20.0" - resolved "https://registry.yarnpkg.com/@algolia/logger-console/-/logger-console-4.20.0.tgz#ac443d27c4e94357f3063e675039cef0aa2de0a7" - integrity sha512-THlIGG1g/FS63z0StQqDhT6bprUczBI8wnLT3JWvfAQDZX5P6fCg7dG+pIrUBpDIHGszgkqYEqECaKKsdNKOUA== - dependencies: - "@algolia/logger-common" "4.20.0" - -"@algolia/requester-browser-xhr@4.20.0": - version "4.20.0" - resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.20.0.tgz#db16d0bdef018b93b51681d3f1e134aca4f64814" - integrity sha512-HbzoSjcjuUmYOkcHECkVTwAelmvTlgs48N6Owt4FnTOQdwn0b8pdht9eMgishvk8+F8bal354nhx/xOoTfwiAw== - dependencies: - "@algolia/requester-common" "4.20.0" - -"@algolia/requester-common@4.20.0": - version "4.20.0" - resolved "https://registry.yarnpkg.com/@algolia/requester-common/-/requester-common-4.20.0.tgz#65694b2263a8712b4360fef18680528ffd435b5c" - integrity sha512-9h6ye6RY/BkfmeJp7Z8gyyeMrmmWsMOCRBXQDs4mZKKsyVlfIVICpcSibbeYcuUdurLhIlrOUkH3rQEgZzonng== - -"@algolia/requester-node-http@4.20.0": - version "4.20.0" - resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-4.20.0.tgz#b52b182b52b0b16dec4070832267d484a6b1d5bb" - integrity sha512-ocJ66L60ABSSTRFnCHIEZpNHv6qTxsBwJEPfYaSBsLQodm0F9ptvalFkHMpvj5DfE22oZrcrLbOYM2bdPJRHng== - dependencies: - "@algolia/requester-common" "4.20.0" - -"@algolia/transporter@4.20.0": - version "4.20.0" - resolved "https://registry.yarnpkg.com/@algolia/transporter/-/transporter-4.20.0.tgz#7e5b24333d7cc9a926b2f6a249f87c2889b944a9" - integrity sha512-Lsii1pGWOAISbzeyuf+r/GPhvHMPHSPrTDWNcIzOE1SG1inlJHICaVe2ikuoRjcpgxZNU54Jl+if15SUCsaTUg== - dependencies: - "@algolia/cache-common" "4.20.0" - "@algolia/logger-common" "4.20.0" - "@algolia/requester-common" "4.20.0" +"@algolia/cache-browser-local-storage@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.22.1.tgz#14b6dc9abc9e3a304a5fffb063d15f30af1032d1" + integrity sha512-Sw6IAmOCvvP6QNgY9j+Hv09mvkvEIDKjYW8ow0UDDAxSXy664RBNQk3i/0nt7gvceOJ6jGmOTimaZoY1THmU7g== + dependencies: + "@algolia/cache-common" "4.22.1" + +"@algolia/cache-common@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/cache-common/-/cache-common-4.22.1.tgz#c625dff4bc2a74e79f9aed67b4e053b0ef1b3ec1" + integrity sha512-TJMBKqZNKYB9TptRRjSUtevJeQVXRmg6rk9qgFKWvOy8jhCPdyNZV1nB3SKGufzvTVbomAukFR8guu/8NRKBTA== + +"@algolia/cache-in-memory@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/cache-in-memory/-/cache-in-memory-4.22.1.tgz#858a3d887f521362e87d04f3943e2810226a0d71" + integrity sha512-ve+6Ac2LhwpufuWavM/aHjLoNz/Z/sYSgNIXsinGofWOysPilQZPUetqLj8vbvi+DHZZaYSEP9H5SRVXnpsNNw== + dependencies: + "@algolia/cache-common" "4.22.1" + +"@algolia/client-account@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/client-account/-/client-account-4.22.1.tgz#a7fb8b66b9a4f0a428e1426b2561144267d76d43" + integrity sha512-k8m+oegM2zlns/TwZyi4YgCtyToackkOpE+xCaKCYfBfDtdGOaVZCM5YvGPtK+HGaJMIN/DoTL8asbM3NzHonw== + dependencies: + "@algolia/client-common" "4.22.1" + "@algolia/client-search" "4.22.1" + "@algolia/transporter" "4.22.1" + +"@algolia/client-analytics@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-4.22.1.tgz#506558740b4d49b1b1e3393861f729a8ce921851" + integrity sha512-1ssi9pyxyQNN4a7Ji9R50nSdISIumMFDwKNuwZipB6TkauJ8J7ha/uO60sPJFqQyqvvI+px7RSNRQT3Zrvzieg== + dependencies: + "@algolia/client-common" "4.22.1" + "@algolia/client-search" "4.22.1" + "@algolia/requester-common" "4.22.1" + "@algolia/transporter" "4.22.1" + +"@algolia/client-common@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-4.22.1.tgz#042b19c1b6157c485fa1b551349ab313944d2b05" + integrity sha512-IvaL5v9mZtm4k4QHbBGDmU3wa/mKokmqNBqPj0K7lcR8ZDKzUorhcGp/u8PkPC/e0zoHSTvRh7TRkGX3Lm7iOQ== + dependencies: + "@algolia/requester-common" "4.22.1" + "@algolia/transporter" "4.22.1" + +"@algolia/client-personalization@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-4.22.1.tgz#ff088d797648224fb582e9fe5828f8087835fa3d" + integrity sha512-sl+/klQJ93+4yaqZ7ezOttMQ/nczly/3GmgZXJ1xmoewP5jmdP/X/nV5U7EHHH3hCUEHeN7X1nsIhGPVt9E1cQ== + dependencies: + "@algolia/client-common" "4.22.1" + "@algolia/requester-common" "4.22.1" + "@algolia/transporter" "4.22.1" + +"@algolia/client-search@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-4.22.1.tgz#508cc6ab3d1f4e9c02735a630d4dff6fbb8514a2" + integrity sha512-yb05NA4tNaOgx3+rOxAmFztgMTtGBi97X7PC3jyNeGiwkAjOZc2QrdZBYyIdcDLoI09N0gjtpClcackoTN0gPA== + dependencies: + "@algolia/client-common" "4.22.1" + "@algolia/requester-common" "4.22.1" + "@algolia/transporter" "4.22.1" + +"@algolia/logger-common@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/logger-common/-/logger-common-4.22.1.tgz#79cf4cd295de0377a94582c6aaac59b1ded731d9" + integrity sha512-OnTFymd2odHSO39r4DSWRFETkBufnY2iGUZNrMXpIhF5cmFE8pGoINNPzwg02QLBlGSaLqdKy0bM8S0GyqPLBg== + +"@algolia/logger-console@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/logger-console/-/logger-console-4.22.1.tgz#0355345f6940f67aaa78ae9b81c06e44e49f2336" + integrity sha512-O99rcqpVPKN1RlpgD6H3khUWylU24OXlzkavUAMy6QZd1776QAcauE3oP8CmD43nbaTjBexZj2nGsBH9Tc0FVA== + dependencies: + "@algolia/logger-common" "4.22.1" + +"@algolia/requester-browser-xhr@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.22.1.tgz#f04df6fe9690a071b267c77d26b83a3be9280361" + integrity sha512-dtQGYIg6MteqT1Uay3J/0NDqD+UciHy3QgRbk7bNddOJu+p3hzjTRYESqEnoX/DpEkaNYdRHUKNylsqMpgwaEw== + dependencies: + "@algolia/requester-common" "4.22.1" + +"@algolia/requester-common@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/requester-common/-/requester-common-4.22.1.tgz#27be35f3718aafcb6b388ff9c3aa2defabd559ff" + integrity sha512-dgvhSAtg2MJnR+BxrIFqlLtkLlVVhas9HgYKMk2Uxiy5m6/8HZBL40JVAMb2LovoPFs9I/EWIoFVjOrFwzn5Qg== + +"@algolia/requester-node-http@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-4.22.1.tgz#589a6fa828ad0f325e727a6fcaf4e1a2343cc62b" + integrity sha512-JfmZ3MVFQkAU+zug8H3s8rZ6h0ahHZL/SpMaSasTCGYR5EEJsCc8SI5UZ6raPN2tjxa5bxS13BRpGSBUens7EA== + dependencies: + "@algolia/requester-common" "4.22.1" + +"@algolia/transporter@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/transporter/-/transporter-4.22.1.tgz#8843841b857dc021668f31647aa557ff19cd9cb1" + integrity sha512-kzWgc2c9IdxMa3YqA6TN0NW5VrKYYW/BELIn7vnLyn+U/RFdZ4lxxt9/8yq3DKV5snvoDzzO4ClyejZRdV3lMQ== + dependencies: + "@algolia/cache-common" "4.22.1" + "@algolia/logger-common" "4.22.1" + "@algolia/requester-common" "4.22.1" "@alloc/quick-lru@^5.2.0": version "5.2.0" @@ -167,18 +167,18 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.13": - version "7.22.13" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" - integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" + integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== dependencies: - "@babel/highlight" "^7.22.13" + "@babel/highlight" "^7.23.4" chalk "^2.4.2" -"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9", "@babel/compat-data@^7.23.2": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.2.tgz#6a12ced93455827037bfb5ed8492820d60fc32cc" - integrity sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ== +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.23.3", "@babel/compat-data@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" + integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== "@babel/core@7.12.9": version "7.12.9" @@ -202,42 +202,42 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/core@^7.1.0", "@babel/core@^7.12.10", "@babel/core@^7.12.3", "@babel/core@^7.12.9", "@babel/core@^7.23.2", "@babel/core@^7.7.2", "@babel/core@^7.8.0": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.2.tgz#ed10df0d580fff67c5f3ee70fd22e2e4c90a9f94" - integrity sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ== +"@babel/core@^7.11.6", "@babel/core@^7.12.10", "@babel/core@^7.12.3", "@babel/core@^7.12.9", "@babel/core@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.9.tgz#b028820718000f267870822fec434820e9b1e4d1" + integrity sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.0" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-module-transforms" "^7.23.0" - "@babel/helpers" "^7.23.2" - "@babel/parser" "^7.23.0" - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.2" - "@babel/types" "^7.23.0" + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helpers" "^7.23.9" + "@babel/parser" "^7.23.9" + "@babel/template" "^7.23.9" + "@babel/traverse" "^7.23.9" + "@babel/types" "^7.23.9" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.3" semver "^6.3.1" -"@babel/eslint-parser@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.22.15.tgz#263f059c476e29ca4972481a17b8b660cb025a34" - integrity sha512-yc8OOBIQk1EcRrpizuARSQS0TWAcOMpEJ1aafhNznaeYkeL+OhqnDObGFylB8ka8VFF/sZc+S4RzHyO+3LjQxg== +"@babel/eslint-parser@^7.23.10": + version "7.23.10" + resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.23.10.tgz#2d4164842d6db798873b40e0c4238827084667a2" + integrity sha512-3wSYDPZVnhseRnxRJH6ZVTNknBz76AEnyC+AYYhasjP3Yy23qz0ERR7Fcd2SHmYuSFJ2kY9gaaDd3vyqU09eSw== dependencies: "@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1" eslint-visitor-keys "^2.1.0" semver "^6.3.1" -"@babel/generator@^7.12.5", "@babel/generator@^7.23.0", "@babel/generator@^7.7.2": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420" - integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g== +"@babel/generator@^7.12.5", "@babel/generator@^7.23.6", "@babel/generator@^7.7.2": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e" + integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== dependencies: - "@babel/types" "^7.23.0" + "@babel/types" "^7.23.6" "@jridgewell/gen-mapping" "^0.3.2" "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" @@ -249,40 +249,40 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.5": +"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.15": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz#5426b109cf3ad47b91120f8328d8ab1be8b0b956" integrity sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw== dependencies: "@babel/types" "^7.22.15" -"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.5", "@babel/helper-compilation-targets@^7.22.6": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52" - integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw== +"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" + integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== dependencies: - "@babel/compat-data" "^7.22.9" - "@babel/helper-validator-option" "^7.22.15" - browserslist "^4.21.9" + "@babel/compat-data" "^7.23.5" + "@babel/helper-validator-option" "^7.23.5" + browserslist "^4.22.2" lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.22.11", "@babel/helper-create-class-features-plugin@^7.22.15", "@babel/helper-create-class-features-plugin@^7.22.5": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz#97a61b385e57fe458496fad19f8e63b63c867de4" - integrity sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg== +"@babel/helper-create-class-features-plugin@^7.22.15", "@babel/helper-create-class-features-plugin@^7.23.6": + version "7.23.10" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.10.tgz#25d55fafbaea31fd0e723820bb6cc3df72edf7ea" + integrity sha512-2XpP2XhkXzgxecPNEEK8Vz8Asj9aRxt08oKOqtiZoqV2UGZ5T+EkyP9sXQ9nwMxBIG34a7jmasVqoMop7VdPUw== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-member-expression-to-functions" "^7.22.15" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-member-expression-to-functions" "^7.23.0" "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.9" + "@babel/helper-replace-supers" "^7.22.20" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" semver "^6.3.1" -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.5": +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.15", "@babel/helper-create-regexp-features-plugin@^7.22.5": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1" integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== @@ -291,10 +291,10 @@ regexpu-core "^5.3.1" semver "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.4.3": - version "0.4.3" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.3.tgz#a71c10f7146d809f4a256c373f462d9bba8cf6ba" - integrity sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug== +"@babel/helper-define-polyfill-provider@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz#465805b7361f461e86c680f1de21eaf88c25901b" + integrity sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q== dependencies: "@babel/helper-compilation-targets" "^7.22.6" "@babel/helper-plugin-utils" "^7.22.5" @@ -302,7 +302,7 @@ lodash.debounce "^4.0.8" resolve "^1.14.2" -"@babel/helper-environment-visitor@^7.22.20", "@babel/helper-environment-visitor@^7.22.5": +"@babel/helper-environment-visitor@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== @@ -322,24 +322,24 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-member-expression-to-functions@^7.22.15": +"@babel/helper-member-expression-to-functions@^7.22.15", "@babel/helper-member-expression-to-functions@^7.23.0": version "7.23.0" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz#9263e88cc5e41d39ec18c9a3e0eced59a3e7d366" integrity sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA== dependencies: "@babel/types" "^7.23.0" -"@babel/helper-module-imports@^7.22.15", "@babel/helper-module-imports@^7.22.5": +"@babel/helper-module-imports@^7.22.15": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== dependencies: "@babel/types" "^7.22.15" -"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.22.5", "@babel/helper-module-transforms@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz#3ec246457f6c842c0aee62a01f60739906f7047e" - integrity sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw== +"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" + integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== dependencies: "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-module-imports" "^7.22.15" @@ -364,7 +364,7 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== -"@babel/helper-remap-async-to-generator@^7.22.20", "@babel/helper-remap-async-to-generator@^7.22.5": +"@babel/helper-remap-async-to-generator@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz#7b68e1cb4fa964d2996fd063723fb48eca8498e0" integrity sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw== @@ -373,7 +373,7 @@ "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-wrap-function" "^7.22.20" -"@babel/helper-replace-supers@^7.22.5", "@babel/helper-replace-supers@^7.22.9": +"@babel/helper-replace-supers@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz#e37d367123ca98fe455a9887734ed2e16eb7a793" integrity sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw== @@ -403,20 +403,20 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-string-parser@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" - integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== +"@babel/helper-string-parser@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" + integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== "@babel/helper-validator-identifier@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== -"@babel/helper-validator-option@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz#694c30dfa1d09a6534cdfcafbe56789d36aba040" - integrity sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA== +"@babel/helper-validator-option@^7.22.15", "@babel/helper-validator-option@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" + integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== "@babel/helper-wrap-function@^7.22.20": version "7.22.20" @@ -427,44 +427,52 @@ "@babel/template" "^7.22.15" "@babel/types" "^7.22.19" -"@babel/helpers@^7.12.5", "@babel/helpers@^7.23.2": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.2.tgz#2832549a6e37d484286e15ba36a5330483cac767" - integrity sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ== +"@babel/helpers@^7.12.5", "@babel/helpers@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.9.tgz#c3e20bbe7f7a7e10cb9b178384b4affdf5995c7d" + integrity sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ== dependencies: - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.2" - "@babel/types" "^7.23.0" + "@babel/template" "^7.23.9" + "@babel/traverse" "^7.23.9" + "@babel/types" "^7.23.9" -"@babel/highlight@^7.22.13": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" - integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== +"@babel/highlight@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" + integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== dependencies: "@babel/helper-validator-identifier" "^7.22.20" chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.12.7", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719" - integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw== +"@babel/parser@^7.1.0", "@babel/parser@^7.12.7", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.9.tgz#7b903b6149b0f8fa7ad564af646c4c38a77fc44b" + integrity sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA== -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz#02dc8a03f613ed5fdc29fb2f728397c78146c962" - integrity sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz#5cd1c87ba9380d0afb78469292c954fee5d2411a" + integrity sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz#2aeb91d337d4e1a1e7ce85b76a37f5301781200f" - integrity sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz#f6652bb16b94f8f9c20c50941e16e9756898dc5d" + integrity sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.22.15" + "@babel/plugin-transform-optional-chaining" "^7.23.3" + +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.23.7": + version "7.23.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.7.tgz#516462a95d10a9618f197d39ad291a9b47ae1d7b" + integrity sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-proposal-object-rest-spread@7.12.1": version "7.12.1" @@ -522,17 +530,17 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-import-assertions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz#07d252e2aa0bc6125567f742cd58619cb14dce98" - integrity sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg== +"@babel/plugin-syntax-import-assertions@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz#9c05a7f592982aff1a2768260ad84bcd3f0c77fc" + integrity sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-syntax-import-attributes@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz#ab840248d834410b829f569f5262b9e517555ecb" - integrity sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg== +"@babel/plugin-syntax-import-attributes@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz#992aee922cf04512461d7dae3ff6951b90a2dc06" + integrity sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -557,10 +565,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-jsx@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz#a6b68e84fb76e759fc3b93e901876ffabbe1d918" - integrity sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg== +"@babel/plugin-syntax-jsx@^7.23.3", "@babel/plugin-syntax-jsx@^7.7.2": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz#8f2e4f8a9b5f9aa16067e142c1ac9cd9f810f473" + integrity sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -620,10 +628,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.22.5", "@babel/plugin-syntax-typescript@^7.7.2": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz#aac8d383b062c5072c647a31ef990c1d0af90272" - integrity sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ== +"@babel/plugin-syntax-typescript@^7.23.3", "@babel/plugin-syntax-typescript@^7.7.2": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz#24f460c85dbbc983cd2b9c4994178bcc01df958f" + integrity sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -635,211 +643,211 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-arrow-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz#e5ba566d0c58a5b2ba2a8b795450641950b71958" - integrity sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw== +"@babel/plugin-transform-arrow-functions@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz#94c6dcfd731af90f27a79509f9ab7fb2120fc38b" + integrity sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-async-generator-functions@^7.23.2": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.2.tgz#054afe290d64c6f576f371ccc321772c8ea87ebb" - integrity sha512-BBYVGxbDVHfoeXbOwcagAkOQAm9NxoTdMGfTqghu1GrvadSaw6iW3Je6IcL5PNOw8VwjxqBECXy50/iCQSY/lQ== +"@babel/plugin-transform-async-generator-functions@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.9.tgz#9adaeb66fc9634a586c5df139c6240d41ed801ce" + integrity sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ== dependencies: "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-remap-async-to-generator" "^7.22.20" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-transform-async-to-generator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz#c7a85f44e46f8952f6d27fe57c2ed3cc084c3775" - integrity sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ== +"@babel/plugin-transform-async-to-generator@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz#d1f513c7a8a506d43f47df2bf25f9254b0b051fa" + integrity sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw== dependencies: - "@babel/helper-module-imports" "^7.22.5" + "@babel/helper-module-imports" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.5" + "@babel/helper-remap-async-to-generator" "^7.22.20" -"@babel/plugin-transform-block-scoped-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz#27978075bfaeb9fa586d3cb63a3d30c1de580024" - integrity sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA== +"@babel/plugin-transform-block-scoped-functions@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz#fe1177d715fb569663095e04f3598525d98e8c77" + integrity sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-block-scoping@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.0.tgz#8744d02c6c264d82e1a4bc5d2d501fd8aff6f022" - integrity sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g== +"@babel/plugin-transform-block-scoping@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz#b2d38589531c6c80fbe25e6b58e763622d2d3cf5" + integrity sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-class-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz#97a56e31ad8c9dc06a0b3710ce7803d5a48cca77" - integrity sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ== +"@babel/plugin-transform-class-properties@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz#35c377db11ca92a785a718b6aa4e3ed1eb65dc48" + integrity sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-class-static-block@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz#dc8cc6e498f55692ac6b4b89e56d87cec766c974" - integrity sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g== +"@babel/plugin-transform-class-static-block@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz#2a202c8787a8964dd11dfcedf994d36bfc844ab5" + integrity sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.11" + "@babel/helper-create-class-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-transform-classes@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz#aaf4753aee262a232bbc95451b4bdf9599c65a0b" - integrity sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw== +"@babel/plugin-transform-classes@^7.23.8": + version "7.23.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz#d08ae096c240347badd68cdf1b6d1624a6435d92" + integrity sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.9" + "@babel/helper-replace-supers" "^7.22.20" "@babel/helper-split-export-declaration" "^7.22.6" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz#cd1e994bf9f316bd1c2dafcd02063ec261bb3869" - integrity sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg== +"@babel/plugin-transform-computed-properties@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz#652e69561fcc9d2b50ba4f7ac7f60dcf65e86474" + integrity sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" - "@babel/template" "^7.22.5" + "@babel/template" "^7.22.15" -"@babel/plugin-transform-destructuring@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.0.tgz#6447aa686be48b32eaf65a73e0e2c0bd010a266c" - integrity sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg== +"@babel/plugin-transform-destructuring@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz#8c9ee68228b12ae3dff986e56ed1ba4f3c446311" + integrity sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-dotall-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz#dbb4f0e45766eb544e193fb00e65a1dd3b2a4165" - integrity sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw== +"@babel/plugin-transform-dotall-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz#3f7af6054882ede89c378d0cf889b854a993da50" + integrity sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-duplicate-keys@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz#b6e6428d9416f5f0bba19c70d1e6e7e0b88ab285" - integrity sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw== +"@babel/plugin-transform-duplicate-keys@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz#664706ca0a5dfe8d066537f99032fc1dc8b720ce" + integrity sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-dynamic-import@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz#2c7722d2a5c01839eaf31518c6ff96d408e447aa" - integrity sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA== +"@babel/plugin-transform-dynamic-import@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz#c7629e7254011ac3630d47d7f34ddd40ca535143" + integrity sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-transform-exponentiation-operator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz#402432ad544a1f9a480da865fda26be653e48f6a" - integrity sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g== +"@babel/plugin-transform-exponentiation-operator@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz#ea0d978f6b9232ba4722f3dbecdd18f450babd18" + integrity sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.5" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-export-namespace-from@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz#b3c84c8f19880b6c7440108f8929caf6056db26c" - integrity sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw== +"@babel/plugin-transform-export-namespace-from@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz#084c7b25e9a5c8271e987a08cf85807b80283191" + integrity sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-transform-for-of@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz#f64b4ccc3a4f131a996388fae7680b472b306b29" - integrity sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA== +"@babel/plugin-transform-for-of@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz#81c37e24171b37b370ba6aaffa7ac86bcb46f94e" + integrity sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" -"@babel/plugin-transform-function-name@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz#935189af68b01898e0d6d99658db6b164205c143" - integrity sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg== +"@babel/plugin-transform-function-name@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz#8f424fcd862bf84cb9a1a6b42bc2f47ed630f8dc" + integrity sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw== dependencies: - "@babel/helper-compilation-targets" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-function-name" "^7.23.0" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-json-strings@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz#689a34e1eed1928a40954e37f74509f48af67835" - integrity sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw== +"@babel/plugin-transform-json-strings@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz#a871d9b6bd171976efad2e43e694c961ffa3714d" + integrity sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-transform-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz#e9341f4b5a167952576e23db8d435849b1dd7920" - integrity sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g== +"@babel/plugin-transform-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz#8214665f00506ead73de157eba233e7381f3beb4" + integrity sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-logical-assignment-operators@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz#24c522a61688bde045b7d9bc3c2597a4d948fc9c" - integrity sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ== +"@babel/plugin-transform-logical-assignment-operators@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz#e599f82c51d55fac725f62ce55d3a0886279ecb5" + integrity sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-transform-member-expression-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz#4fcc9050eded981a468347dd374539ed3e058def" - integrity sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew== +"@babel/plugin-transform-member-expression-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz#e37b3f0502289f477ac0e776b05a833d853cabcc" + integrity sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-modules-amd@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.0.tgz#05b2bc43373faa6d30ca89214731f76f966f3b88" - integrity sha512-xWT5gefv2HGSm4QHtgc1sYPbseOyf+FFDo2JbpE25GWl5BqTGO9IMwTYJRoIdjsF85GE+VegHxSCUt5EvoYTAw== +"@babel/plugin-transform-modules-amd@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz#e19b55436a1416829df0a1afc495deedfae17f7d" + integrity sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw== dependencies: - "@babel/helper-module-transforms" "^7.23.0" + "@babel/helper-module-transforms" "^7.23.3" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-modules-commonjs@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.0.tgz#b3dba4757133b2762c00f4f94590cf6d52602481" - integrity sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ== +"@babel/plugin-transform-modules-commonjs@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz#661ae831b9577e52be57dd8356b734f9700b53b4" + integrity sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA== dependencies: - "@babel/helper-module-transforms" "^7.23.0" + "@babel/helper-module-transforms" "^7.23.3" "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-simple-access" "^7.22.5" -"@babel/plugin-transform-modules-systemjs@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.0.tgz#77591e126f3ff4132a40595a6cccd00a6b60d160" - integrity sha512-qBej6ctXZD2f+DhlOC9yO47yEYgUh5CZNz/aBoH4j/3NOlRfJXJbY7xDQCqQVf9KbrqGzIWER1f23doHGrIHFg== +"@babel/plugin-transform-modules-systemjs@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.9.tgz#105d3ed46e4a21d257f83a2f9e2ee4203ceda6be" + integrity sha512-KDlPRM6sLo4o1FkiSlXoAa8edLXFsKKIda779fbLrvmeuc3itnjCtaO6RrtoaANsIJANj+Vk1zqbZIMhkCAHVw== dependencies: "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-module-transforms" "^7.23.0" + "@babel/helper-module-transforms" "^7.23.3" "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-validator-identifier" "^7.22.20" -"@babel/plugin-transform-modules-umd@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz#4694ae40a87b1745e3775b6a7fe96400315d4f98" - integrity sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ== +"@babel/plugin-transform-modules-umd@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz#5d4395fccd071dfefe6585a4411aa7d6b7d769e9" + integrity sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg== dependencies: - "@babel/helper-module-transforms" "^7.22.5" + "@babel/helper-module-transforms" "^7.23.3" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": @@ -850,101 +858,101 @@ "@babel/helper-create-regexp-features-plugin" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-new-target@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz#1b248acea54ce44ea06dfd37247ba089fcf9758d" - integrity sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw== +"@babel/plugin-transform-new-target@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz#5491bb78ed6ac87e990957cea367eab781c4d980" + integrity sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-nullish-coalescing-operator@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz#debef6c8ba795f5ac67cd861a81b744c5d38d9fc" - integrity sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg== +"@babel/plugin-transform-nullish-coalescing-operator@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz#45556aad123fc6e52189ea749e33ce090637346e" + integrity sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-transform-numeric-separator@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz#498d77dc45a6c6db74bb829c02a01c1d719cbfbd" - integrity sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg== +"@babel/plugin-transform-numeric-separator@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz#03d08e3691e405804ecdd19dd278a40cca531f29" + integrity sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-transform-object-rest-spread@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz#21a95db166be59b91cde48775310c0df6e1da56f" - integrity sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q== +"@babel/plugin-transform-object-rest-spread@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz#2b9c2d26bf62710460bdc0d1730d4f1048361b83" + integrity sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g== dependencies: - "@babel/compat-data" "^7.22.9" + "@babel/compat-data" "^7.23.3" "@babel/helper-compilation-targets" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.22.15" + "@babel/plugin-transform-parameters" "^7.23.3" -"@babel/plugin-transform-object-super@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz#794a8d2fcb5d0835af722173c1a9d704f44e218c" - integrity sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw== +"@babel/plugin-transform-object-super@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz#81fdb636dcb306dd2e4e8fd80db5b2362ed2ebcd" + integrity sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.20" -"@babel/plugin-transform-optional-catch-binding@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz#461cc4f578a127bb055527b3e77404cad38c08e0" - integrity sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ== +"@babel/plugin-transform-optional-catch-binding@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz#318066de6dacce7d92fa244ae475aa8d91778017" + integrity sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-transform-optional-chaining@^7.22.15", "@babel/plugin-transform-optional-chaining@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.0.tgz#73ff5fc1cf98f542f09f29c0631647d8ad0be158" - integrity sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g== +"@babel/plugin-transform-optional-chaining@^7.23.3", "@babel/plugin-transform-optional-chaining@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz#6acf61203bdfc4de9d4e52e64490aeb3e52bd017" + integrity sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz#719ca82a01d177af358df64a514d64c2e3edb114" - integrity sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ== +"@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz#83ef5d1baf4b1072fa6e54b2b0999a7b2527e2af" + integrity sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-private-methods@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz#21c8af791f76674420a147ae62e9935d790f8722" - integrity sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA== +"@babel/plugin-transform-private-methods@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz#b2d7a3c97e278bfe59137a978d53b2c2e038c0e4" + integrity sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-private-property-in-object@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz#ad45c4fc440e9cb84c718ed0906d96cf40f9a4e1" - integrity sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ== +"@babel/plugin-transform-private-property-in-object@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz#3ec711d05d6608fd173d9b8de39872d8dbf68bf5" + integrity sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.22.11" + "@babel/helper-create-class-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -"@babel/plugin-transform-property-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz#b5ddabd73a4f7f26cd0e20f5db48290b88732766" - integrity sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ== +"@babel/plugin-transform-property-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz#54518f14ac4755d22b92162e4a852d308a560875" + integrity sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-react-display-name@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.22.5.tgz#3c4326f9fce31c7968d6cb9debcaf32d9e279a2b" - integrity sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw== +"@babel/plugin-transform-react-display-name@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.23.3.tgz#70529f034dd1e561045ad3c8152a267f0d7b6200" + integrity sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -956,147 +964,148 @@ "@babel/plugin-transform-react-jsx" "^7.22.5" "@babel/plugin-transform-react-jsx@^7.22.15", "@babel/plugin-transform-react-jsx@^7.22.5": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.15.tgz#7e6266d88705d7c49f11c98db8b9464531289cd6" - integrity sha512-oKckg2eZFa8771O/5vi7XeTvmM6+O9cxZu+kanTU7tD4sin5nO/G8jGJhq8Hvt2Z0kUoEDRayuZLaUlYl8QuGA== + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz#393f99185110cea87184ea47bcb4a7b0c2e39312" + integrity sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" "@babel/helper-module-imports" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-jsx" "^7.22.5" - "@babel/types" "^7.22.15" + "@babel/plugin-syntax-jsx" "^7.23.3" + "@babel/types" "^7.23.4" -"@babel/plugin-transform-react-pure-annotations@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.22.5.tgz#1f58363eef6626d6fa517b95ac66fe94685e32c0" - integrity sha512-gP4k85wx09q+brArVinTXhWiyzLl9UpmGva0+mWyKxk6JZequ05x3eUcIUE+FyttPKJFRRVtAvQaJ6YF9h1ZpA== +"@babel/plugin-transform-react-pure-annotations@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.23.3.tgz#fabedbdb8ee40edf5da96f3ecfc6958e3783b93c" + integrity sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-regenerator@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz#8ceef3bd7375c4db7652878b0241b2be5d0c3cca" - integrity sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw== +"@babel/plugin-transform-regenerator@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz#141afd4a2057298602069fce7f2dc5173e6c561c" + integrity sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" regenerator-transform "^0.15.2" -"@babel/plugin-transform-reserved-words@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz#832cd35b81c287c4bcd09ce03e22199641f964fb" - integrity sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA== +"@babel/plugin-transform-reserved-words@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz#4130dcee12bd3dd5705c587947eb715da12efac8" + integrity sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-runtime@^7.23.2": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.2.tgz#c956a3f8d1aa50816ff6c30c6288d66635c12990" - integrity sha512-XOntj6icgzMS58jPVtQpiuF6ZFWxQiJavISGx5KGjRj+3gqZr8+N6Kx+N9BApWzgS+DOjIZfXXj0ZesenOWDyA== +"@babel/plugin-transform-runtime@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.9.tgz#2c64d0680fc8e09e1dfe8fd5c646fe72abd82004" + integrity sha512-A7clW3a0aSjm3ONU9o2HAILSegJCYlEZmOhmBRReVtIpY/Z/p7yIZ+wR41Z+UipwdGuqwtID/V/dOdZXjwi9gQ== dependencies: "@babel/helper-module-imports" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" - babel-plugin-polyfill-corejs2 "^0.4.6" - babel-plugin-polyfill-corejs3 "^0.8.5" - babel-plugin-polyfill-regenerator "^0.5.3" + babel-plugin-polyfill-corejs2 "^0.4.8" + babel-plugin-polyfill-corejs3 "^0.9.0" + babel-plugin-polyfill-regenerator "^0.5.5" semver "^6.3.1" -"@babel/plugin-transform-shorthand-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz#6e277654be82b5559fc4b9f58088507c24f0c624" - integrity sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA== +"@babel/plugin-transform-shorthand-properties@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz#97d82a39b0e0c24f8a981568a8ed851745f59210" + integrity sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-spread@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz#6487fd29f229c95e284ba6c98d65eafb893fea6b" - integrity sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg== +"@babel/plugin-transform-spread@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz#41d17aacb12bde55168403c6f2d6bdca563d362c" + integrity sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" -"@babel/plugin-transform-sticky-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz#295aba1595bfc8197abd02eae5fc288c0deb26aa" - integrity sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw== +"@babel/plugin-transform-sticky-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz#dec45588ab4a723cb579c609b294a3d1bd22ff04" + integrity sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-template-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz#8f38cf291e5f7a8e60e9f733193f0bcc10909bff" - integrity sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA== +"@babel/plugin-transform-template-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz#5f0f028eb14e50b5d0f76be57f90045757539d07" + integrity sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-typeof-symbol@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz#5e2ba478da4b603af8673ff7c54f75a97b716b34" - integrity sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA== +"@babel/plugin-transform-typeof-symbol@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz#9dfab97acc87495c0c449014eb9c547d8966bca4" + integrity sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-typescript@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.15.tgz#15adef906451d86349eb4b8764865c960eb54127" - integrity sha512-1uirS0TnijxvQLnlv5wQBwOX3E1wCFX7ITv+9pBV2wKEk4K+M5tqDaoNXnTH8tjEIYHLO98MwiTWO04Ggz4XuA== +"@babel/plugin-transform-typescript@^7.23.3": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.6.tgz#aa36a94e5da8d94339ae3a4e22d40ed287feb34c" + integrity sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.22.15" + "@babel/helper-create-class-features-plugin" "^7.23.6" "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-typescript" "^7.22.5" + "@babel/plugin-syntax-typescript" "^7.23.3" -"@babel/plugin-transform-unicode-escapes@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz#c723f380f40a2b2f57a62df24c9005834c8616d9" - integrity sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg== +"@babel/plugin-transform-unicode-escapes@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz#1f66d16cab01fab98d784867d24f70c1ca65b925" + integrity sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-unicode-property-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz#098898f74d5c1e86660dc112057b2d11227f1c81" - integrity sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A== +"@babel/plugin-transform-unicode-property-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz#19e234129e5ffa7205010feec0d94c251083d7ad" + integrity sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-unicode-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz#ce7e7bb3ef208c4ff67e02a22816656256d7a183" - integrity sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg== +"@babel/plugin-transform-unicode-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz#26897708d8f42654ca4ce1b73e96140fbad879dc" + integrity sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-unicode-sets-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz#77788060e511b708ffc7d42fdfbc5b37c3004e91" - integrity sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg== +"@babel/plugin-transform-unicode-sets-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz#4fb6f0a719c2c5859d11f6b55a050cc987f3799e" + integrity sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/preset-env@^7.12.11", "@babel/preset-env@^7.23.2": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.23.2.tgz#1f22be0ff0e121113260337dbc3e58fafce8d059" - integrity sha512-BW3gsuDD+rvHL2VO2SjAUNTBe5YrjsTiDyqamPDWY723na3/yPQ65X5oQkFVJZ0o50/2d+svm1rkPoJeR1KxVQ== +"@babel/preset-env@^7.12.11", "@babel/preset-env@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.23.9.tgz#beace3b7994560ed6bf78e4ae2073dff45387669" + integrity sha512-3kBGTNBBk9DQiPoXYS0g0BYlwTQYUTifqgKTjxUwEUkduRT2QOa0FPGBJ+NROQhGyYO5BuTJwGvBnqKDykac6A== dependencies: - "@babel/compat-data" "^7.23.2" - "@babel/helper-compilation-targets" "^7.22.15" + "@babel/compat-data" "^7.23.5" + "@babel/helper-compilation-targets" "^7.23.6" "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.15" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.22.15" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.22.15" + "@babel/helper-validator-option" "^7.23.5" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.23.3" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.23.3" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.23.7" "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.22.5" - "@babel/plugin-syntax-import-attributes" "^7.22.5" + "@babel/plugin-syntax-import-assertions" "^7.23.3" + "@babel/plugin-syntax-import-attributes" "^7.23.3" "@babel/plugin-syntax-import-meta" "^7.10.4" "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" @@ -1108,59 +1117,58 @@ "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-syntax-top-level-await" "^7.14.5" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.22.5" - "@babel/plugin-transform-async-generator-functions" "^7.23.2" - "@babel/plugin-transform-async-to-generator" "^7.22.5" - "@babel/plugin-transform-block-scoped-functions" "^7.22.5" - "@babel/plugin-transform-block-scoping" "^7.23.0" - "@babel/plugin-transform-class-properties" "^7.22.5" - "@babel/plugin-transform-class-static-block" "^7.22.11" - "@babel/plugin-transform-classes" "^7.22.15" - "@babel/plugin-transform-computed-properties" "^7.22.5" - "@babel/plugin-transform-destructuring" "^7.23.0" - "@babel/plugin-transform-dotall-regex" "^7.22.5" - "@babel/plugin-transform-duplicate-keys" "^7.22.5" - "@babel/plugin-transform-dynamic-import" "^7.22.11" - "@babel/plugin-transform-exponentiation-operator" "^7.22.5" - "@babel/plugin-transform-export-namespace-from" "^7.22.11" - "@babel/plugin-transform-for-of" "^7.22.15" - "@babel/plugin-transform-function-name" "^7.22.5" - "@babel/plugin-transform-json-strings" "^7.22.11" - "@babel/plugin-transform-literals" "^7.22.5" - "@babel/plugin-transform-logical-assignment-operators" "^7.22.11" - "@babel/plugin-transform-member-expression-literals" "^7.22.5" - "@babel/plugin-transform-modules-amd" "^7.23.0" - "@babel/plugin-transform-modules-commonjs" "^7.23.0" - "@babel/plugin-transform-modules-systemjs" "^7.23.0" - "@babel/plugin-transform-modules-umd" "^7.22.5" + "@babel/plugin-transform-arrow-functions" "^7.23.3" + "@babel/plugin-transform-async-generator-functions" "^7.23.9" + "@babel/plugin-transform-async-to-generator" "^7.23.3" + "@babel/plugin-transform-block-scoped-functions" "^7.23.3" + "@babel/plugin-transform-block-scoping" "^7.23.4" + "@babel/plugin-transform-class-properties" "^7.23.3" + "@babel/plugin-transform-class-static-block" "^7.23.4" + "@babel/plugin-transform-classes" "^7.23.8" + "@babel/plugin-transform-computed-properties" "^7.23.3" + "@babel/plugin-transform-destructuring" "^7.23.3" + "@babel/plugin-transform-dotall-regex" "^7.23.3" + "@babel/plugin-transform-duplicate-keys" "^7.23.3" + "@babel/plugin-transform-dynamic-import" "^7.23.4" + "@babel/plugin-transform-exponentiation-operator" "^7.23.3" + "@babel/plugin-transform-export-namespace-from" "^7.23.4" + "@babel/plugin-transform-for-of" "^7.23.6" + "@babel/plugin-transform-function-name" "^7.23.3" + "@babel/plugin-transform-json-strings" "^7.23.4" + "@babel/plugin-transform-literals" "^7.23.3" + "@babel/plugin-transform-logical-assignment-operators" "^7.23.4" + "@babel/plugin-transform-member-expression-literals" "^7.23.3" + "@babel/plugin-transform-modules-amd" "^7.23.3" + "@babel/plugin-transform-modules-commonjs" "^7.23.3" + "@babel/plugin-transform-modules-systemjs" "^7.23.9" + "@babel/plugin-transform-modules-umd" "^7.23.3" "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" - "@babel/plugin-transform-new-target" "^7.22.5" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.22.11" - "@babel/plugin-transform-numeric-separator" "^7.22.11" - "@babel/plugin-transform-object-rest-spread" "^7.22.15" - "@babel/plugin-transform-object-super" "^7.22.5" - "@babel/plugin-transform-optional-catch-binding" "^7.22.11" - "@babel/plugin-transform-optional-chaining" "^7.23.0" - "@babel/plugin-transform-parameters" "^7.22.15" - "@babel/plugin-transform-private-methods" "^7.22.5" - "@babel/plugin-transform-private-property-in-object" "^7.22.11" - "@babel/plugin-transform-property-literals" "^7.22.5" - "@babel/plugin-transform-regenerator" "^7.22.10" - "@babel/plugin-transform-reserved-words" "^7.22.5" - "@babel/plugin-transform-shorthand-properties" "^7.22.5" - "@babel/plugin-transform-spread" "^7.22.5" - "@babel/plugin-transform-sticky-regex" "^7.22.5" - "@babel/plugin-transform-template-literals" "^7.22.5" - "@babel/plugin-transform-typeof-symbol" "^7.22.5" - "@babel/plugin-transform-unicode-escapes" "^7.22.10" - "@babel/plugin-transform-unicode-property-regex" "^7.22.5" - "@babel/plugin-transform-unicode-regex" "^7.22.5" - "@babel/plugin-transform-unicode-sets-regex" "^7.22.5" + "@babel/plugin-transform-new-target" "^7.23.3" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.23.4" + "@babel/plugin-transform-numeric-separator" "^7.23.4" + "@babel/plugin-transform-object-rest-spread" "^7.23.4" + "@babel/plugin-transform-object-super" "^7.23.3" + "@babel/plugin-transform-optional-catch-binding" "^7.23.4" + "@babel/plugin-transform-optional-chaining" "^7.23.4" + "@babel/plugin-transform-parameters" "^7.23.3" + "@babel/plugin-transform-private-methods" "^7.23.3" + "@babel/plugin-transform-private-property-in-object" "^7.23.4" + "@babel/plugin-transform-property-literals" "^7.23.3" + "@babel/plugin-transform-regenerator" "^7.23.3" + "@babel/plugin-transform-reserved-words" "^7.23.3" + "@babel/plugin-transform-shorthand-properties" "^7.23.3" + "@babel/plugin-transform-spread" "^7.23.3" + "@babel/plugin-transform-sticky-regex" "^7.23.3" + "@babel/plugin-transform-template-literals" "^7.23.3" + "@babel/plugin-transform-typeof-symbol" "^7.23.3" + "@babel/plugin-transform-unicode-escapes" "^7.23.3" + "@babel/plugin-transform-unicode-property-regex" "^7.23.3" + "@babel/plugin-transform-unicode-regex" "^7.23.3" + "@babel/plugin-transform-unicode-sets-regex" "^7.23.3" "@babel/preset-modules" "0.1.6-no-external-plugins" - "@babel/types" "^7.23.0" - babel-plugin-polyfill-corejs2 "^0.4.6" - babel-plugin-polyfill-corejs3 "^0.8.5" - babel-plugin-polyfill-regenerator "^0.5.3" + babel-plugin-polyfill-corejs2 "^0.4.8" + babel-plugin-polyfill-corejs3 "^0.9.0" + babel-plugin-polyfill-regenerator "^0.5.5" core-js-compat "^3.31.0" semver "^6.3.1" @@ -1173,72 +1181,72 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" -"@babel/preset-react@^7.12.10", "@babel/preset-react@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.22.15.tgz#9a776892b648e13cc8ca2edf5ed1264eea6b6afc" - integrity sha512-Csy1IJ2uEh/PecCBXXoZGAZBeCATTuePzCSB7dLYWS0vOEj6CNpjxIhW4duWwZodBNueH7QO14WbGn8YyeuN9w== +"@babel/preset-react@^7.12.10", "@babel/preset-react@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.23.3.tgz#f73ca07e7590f977db07eb54dbe46538cc015709" + integrity sha512-tbkHOS9axH6Ysf2OUEqoSZ6T3Fa2SrNH6WTWSPBboxKzdxNc9qOICeLXkNG0ZEwbQ1HY8liwOce4aN/Ceyuq6w== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-validator-option" "^7.22.15" - "@babel/plugin-transform-react-display-name" "^7.22.5" + "@babel/plugin-transform-react-display-name" "^7.23.3" "@babel/plugin-transform-react-jsx" "^7.22.15" "@babel/plugin-transform-react-jsx-development" "^7.22.5" - "@babel/plugin-transform-react-pure-annotations" "^7.22.5" + "@babel/plugin-transform-react-pure-annotations" "^7.23.3" "@babel/preset-typescript@^7.12.7": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.23.2.tgz#c8de488130b7081f7e1482936ad3de5b018beef4" - integrity sha512-u4UJc1XsS1GhIGteM8rnGiIvf9rJpiVgMEeCnwlLA7WJPC+jcXWJAGxYmeqs5hOZD8BbAfnV5ezBOxQbb4OUxA== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.23.3.tgz#14534b34ed5b6d435aa05f1ae1c5e7adcc01d913" + integrity sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-validator-option" "^7.22.15" - "@babel/plugin-syntax-jsx" "^7.22.5" - "@babel/plugin-transform-modules-commonjs" "^7.23.0" - "@babel/plugin-transform-typescript" "^7.22.15" + "@babel/plugin-syntax-jsx" "^7.23.3" + "@babel/plugin-transform-modules-commonjs" "^7.23.3" + "@babel/plugin-transform-typescript" "^7.23.3" "@babel/regjsgen@^0.8.0": version "0.8.0" resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== -"@babel/runtime@^7.12.5", "@babel/runtime@^7.14.6", "@babel/runtime@^7.15.4", "@babel/runtime@^7.20.13", "@babel/runtime@^7.20.6", "@babel/runtime@^7.20.7", "@babel/runtime@^7.8.4": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.2.tgz#062b0ac103261d68a966c4c7baf2ae3e62ec3885" - integrity sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg== +"@babel/runtime@^7.12.5", "@babel/runtime@^7.14.6", "@babel/runtime@^7.15.4", "@babel/runtime@^7.20.13", "@babel/runtime@^7.20.6", "@babel/runtime@^7.23.2", "@babel/runtime@^7.8.4": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.9.tgz#47791a15e4603bb5f905bc0753801cf21d6345f7" + integrity sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw== dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.12.7", "@babel/template@^7.22.15", "@babel/template@^7.22.5", "@babel/template@^7.3.3": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" - integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== +"@babel/template@^7.12.7", "@babel/template@^7.22.15", "@babel/template@^7.23.9", "@babel/template@^7.3.3": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.23.9.tgz#f881d0487cba2828d3259dcb9ef5005a9731011a" + integrity sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA== dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/parser" "^7.22.15" - "@babel/types" "^7.22.15" + "@babel/code-frame" "^7.23.5" + "@babel/parser" "^7.23.9" + "@babel/types" "^7.23.9" -"@babel/traverse@^7.12.9", "@babel/traverse@^7.23.2", "@babel/traverse@^7.7.2": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.2.tgz#329c7a06735e144a506bdb2cad0268b7f46f4ad8" - integrity sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw== +"@babel/traverse@^7.12.9", "@babel/traverse@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.9.tgz#2f9d6aead6b564669394c5ce0f9302bb65b9d950" + integrity sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg== dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.0" + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-function-name" "^7.23.0" "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.0" - "@babel/types" "^7.23.0" - debug "^4.1.0" + "@babel/parser" "^7.23.9" + "@babel/types" "^7.23.9" + debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.12.7", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb" - integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg== +"@babel/types@^7.0.0", "@babel/types@^7.12.7", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.4", "@babel/types@^7.23.6", "@babel/types@^7.23.9", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.9.tgz#1dd7b59a9a2b5c87f8b41e52770b5ecbf492e002" + integrity sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q== dependencies: - "@babel/helper-string-parser" "^7.22.5" + "@babel/helper-string-parser" "^7.23.4" "@babel/helper-validator-identifier" "^7.22.20" to-fast-properties "^2.0.0" @@ -1252,164 +1260,161 @@ resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== -"@commitlint/cli@^17.8.0": - version "17.8.1" - resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-17.8.1.tgz#10492114a022c91dcfb1d84dac773abb3db76d33" - integrity sha512-ay+WbzQesE0Rv4EQKfNbSMiJJ12KdKTDzIt0tcK4k11FdsWmtwP0Kp1NWMOUswfIWo6Eb7p7Ln721Nx9FLNBjg== +"@commitlint/cli@^18.6.1": + version "18.6.1" + resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-18.6.1.tgz#78bffdfa00d6f01425d53096954993d83f2b343d" + integrity sha512-5IDE0a+lWGdkOvKH892HHAZgbAjcj1mT5QrfA/SVbLJV/BbBMGyKN0W5mhgjekPJJwEQdVNvhl9PwUacY58Usw== dependencies: - "@commitlint/format" "^17.8.1" - "@commitlint/lint" "^17.8.1" - "@commitlint/load" "^17.8.1" - "@commitlint/read" "^17.8.1" - "@commitlint/types" "^17.8.1" + "@commitlint/format" "^18.6.1" + "@commitlint/lint" "^18.6.1" + "@commitlint/load" "^18.6.1" + "@commitlint/read" "^18.6.1" + "@commitlint/types" "^18.6.1" execa "^5.0.0" lodash.isfunction "^3.0.9" resolve-from "5.0.0" resolve-global "1.0.0" yargs "^17.0.0" -"@commitlint/config-conventional@^17.8.0": - version "17.8.1" - resolved "https://registry.yarnpkg.com/@commitlint/config-conventional/-/config-conventional-17.8.1.tgz#e5bcf0cfec8da7ac50bc04dc92e0a4ea74964ce0" - integrity sha512-NxCOHx1kgneig3VLauWJcDWS40DVjg7nKOpBEEK9E5fjJpQqLCilcnKkIIjdBH98kEO1q3NpE5NSrZ2kl/QGJg== +"@commitlint/config-conventional@^18.6.2": + version "18.6.2" + resolved "https://registry.yarnpkg.com/@commitlint/config-conventional/-/config-conventional-18.6.2.tgz#617f3ee761578040cade530631058699642cbd78" + integrity sha512-PcgSYg1AKGQIwDQKbaHtJsfqYy4uJTC7crLVZ83lfjcPaec4Pry2vLeaWej7ao2KsT20l9dWoMPpEGg8LWdUuA== dependencies: - conventional-changelog-conventionalcommits "^6.1.0" + "@commitlint/types" "^18.6.1" + conventional-changelog-conventionalcommits "^7.0.2" -"@commitlint/config-validator@^17.8.1": - version "17.8.1" - resolved "https://registry.yarnpkg.com/@commitlint/config-validator/-/config-validator-17.8.1.tgz#5cc93b6b49d5524c9cc345a60e5bf74bcca2b7f9" - integrity sha512-UUgUC+sNiiMwkyiuIFR7JG2cfd9t/7MV8VB4TZ+q02ZFkHoduUS4tJGsCBWvBOGD9Btev6IecPMvlWUfJorkEA== +"@commitlint/config-validator@^18.6.1": + version "18.6.1" + resolved "https://registry.yarnpkg.com/@commitlint/config-validator/-/config-validator-18.6.1.tgz#e0d71a99c984a68586c7ae7afd3f52342022fae8" + integrity sha512-05uiToBVfPhepcQWE1ZQBR/Io3+tb3gEotZjnI4tTzzPk16NffN6YABgwFQCLmzZefbDcmwWqJWc2XT47q7Znw== dependencies: - "@commitlint/types" "^17.8.1" + "@commitlint/types" "^18.6.1" ajv "^8.11.0" -"@commitlint/ensure@^17.8.1": - version "17.8.1" - resolved "https://registry.yarnpkg.com/@commitlint/ensure/-/ensure-17.8.1.tgz#59183557844999dbb6aab6d03629a3d104d01a8d" - integrity sha512-xjafwKxid8s1K23NFpL8JNo6JnY/ysetKo8kegVM7c8vs+kWLP8VrQq+NbhgVlmCojhEDbzQKp4eRXSjVOGsow== +"@commitlint/ensure@^18.6.1": + version "18.6.1" + resolved "https://registry.yarnpkg.com/@commitlint/ensure/-/ensure-18.6.1.tgz#17141e083200ca94d8480dc23b0e8f8b1fd37b7f" + integrity sha512-BPm6+SspyxQ7ZTsZwXc7TRQL5kh5YWt3euKmEIBZnocMFkJevqs3fbLRb8+8I/cfbVcAo4mxRlpTPfz8zX7SnQ== dependencies: - "@commitlint/types" "^17.8.1" + "@commitlint/types" "^18.6.1" lodash.camelcase "^4.3.0" lodash.kebabcase "^4.1.1" lodash.snakecase "^4.1.1" lodash.startcase "^4.4.0" lodash.upperfirst "^4.3.1" -"@commitlint/execute-rule@^17.8.1": - version "17.8.1" - resolved "https://registry.yarnpkg.com/@commitlint/execute-rule/-/execute-rule-17.8.1.tgz#504ed69eb61044eeb84fdfd10cc18f0dab14f34c" - integrity sha512-JHVupQeSdNI6xzA9SqMF+p/JjrHTcrJdI02PwesQIDCIGUrv04hicJgCcws5nzaoZbROapPs0s6zeVHoxpMwFQ== +"@commitlint/execute-rule@^18.6.1": + version "18.6.1" + resolved "https://registry.yarnpkg.com/@commitlint/execute-rule/-/execute-rule-18.6.1.tgz#18175e043fe6fb5fceea7b8530316c644f93dfe6" + integrity sha512-7s37a+iWyJiGUeMFF6qBlyZciUkF8odSAnHijbD36YDctLhGKoYltdvuJ/AFfRm6cBLRtRk9cCVPdsEFtt/2rg== -"@commitlint/format@^17.8.1": - version "17.8.1" - resolved "https://registry.yarnpkg.com/@commitlint/format/-/format-17.8.1.tgz#6108bb6b4408e711006680649927e1b559bdc5f8" - integrity sha512-f3oMTyZ84M9ht7fb93wbCKmWxO5/kKSbwuYvS867duVomoOsgrgljkGGIztmT/srZnaiGbaK8+Wf8Ik2tSr5eg== +"@commitlint/format@^18.6.1": + version "18.6.1" + resolved "https://registry.yarnpkg.com/@commitlint/format/-/format-18.6.1.tgz#5f2b8b3ae4d8d80bd9239178e97df63e5b8d280a" + integrity sha512-K8mNcfU/JEFCharj2xVjxGSF+My+FbUHoqR+4GqPGrHNqXOGNio47ziiR4HQUPKtiNs05o8/WyLBoIpMVOP7wg== dependencies: - "@commitlint/types" "^17.8.1" + "@commitlint/types" "^18.6.1" chalk "^4.1.0" -"@commitlint/is-ignored@^17.8.1": - version "17.8.1" - resolved "https://registry.yarnpkg.com/@commitlint/is-ignored/-/is-ignored-17.8.1.tgz#cf25bcd8409c79684b63f8bdeb35df48edda244e" - integrity sha512-UshMi4Ltb4ZlNn4F7WtSEugFDZmctzFpmbqvpyxD3la510J+PLcnyhf9chs7EryaRFJMdAKwsEKfNK0jL/QM4g== - dependencies: - "@commitlint/types" "^17.8.1" - semver "7.5.4" - -"@commitlint/lint@^17.8.1": - version "17.8.1" - resolved "https://registry.yarnpkg.com/@commitlint/lint/-/lint-17.8.1.tgz#bfc21215f6b18d41d4d43e2aa3cb79a5d7726cd8" - integrity sha512-aQUlwIR1/VMv2D4GXSk7PfL5hIaFSfy6hSHV94O8Y27T5q+DlDEgd/cZ4KmVI+MWKzFfCTiTuWqjfRSfdRllCA== - dependencies: - "@commitlint/is-ignored" "^17.8.1" - "@commitlint/parse" "^17.8.1" - "@commitlint/rules" "^17.8.1" - "@commitlint/types" "^17.8.1" - -"@commitlint/load@^17.8.1": - version "17.8.1" - resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-17.8.1.tgz#fa061e7bfa53281eb03ca8517ca26d66a189030c" - integrity sha512-iF4CL7KDFstP1kpVUkT8K2Wl17h2yx9VaR1ztTc8vzByWWcbO/WaKwxsnCOqow9tVAlzPfo1ywk9m2oJ9ucMqA== - dependencies: - "@commitlint/config-validator" "^17.8.1" - "@commitlint/execute-rule" "^17.8.1" - "@commitlint/resolve-extends" "^17.8.1" - "@commitlint/types" "^17.8.1" - "@types/node" "20.5.1" +"@commitlint/is-ignored@^18.6.1": + version "18.6.1" + resolved "https://registry.yarnpkg.com/@commitlint/is-ignored/-/is-ignored-18.6.1.tgz#4ee08ba91ff3defb06e0ef19259a9c6734a8d06e" + integrity sha512-MOfJjkEJj/wOaPBw5jFjTtfnx72RGwqYIROABudOtJKW7isVjFe9j0t8xhceA02QebtYf4P/zea4HIwnXg8rvA== + dependencies: + "@commitlint/types" "^18.6.1" + semver "7.6.0" + +"@commitlint/lint@^18.6.1": + version "18.6.1" + resolved "https://registry.yarnpkg.com/@commitlint/lint/-/lint-18.6.1.tgz#fe3834636c99ee14534a8eb3832831ac362e9fd8" + integrity sha512-8WwIFo3jAuU+h1PkYe5SfnIOzp+TtBHpFr4S8oJWhu44IWKuVx6GOPux3+9H1iHOan/rGBaiacicZkMZuluhfQ== + dependencies: + "@commitlint/is-ignored" "^18.6.1" + "@commitlint/parse" "^18.6.1" + "@commitlint/rules" "^18.6.1" + "@commitlint/types" "^18.6.1" + +"@commitlint/load@^18.6.1": + version "18.6.1" + resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-18.6.1.tgz#fb79ed7ee8b5897a9b5c274c1e24eda9162df816" + integrity sha512-p26x8734tSXUHoAw0ERIiHyW4RaI4Bj99D8YgUlVV9SedLf8hlWAfyIFhHRIhfPngLlCe0QYOdRKYFt8gy56TA== + dependencies: + "@commitlint/config-validator" "^18.6.1" + "@commitlint/execute-rule" "^18.6.1" + "@commitlint/resolve-extends" "^18.6.1" + "@commitlint/types" "^18.6.1" chalk "^4.1.0" - cosmiconfig "^8.0.0" - cosmiconfig-typescript-loader "^4.0.0" + cosmiconfig "^8.3.6" + cosmiconfig-typescript-loader "^5.0.0" lodash.isplainobject "^4.0.6" lodash.merge "^4.6.2" lodash.uniq "^4.5.0" resolve-from "^5.0.0" - ts-node "^10.8.1" - typescript "^4.6.4 || ^5.2.2" -"@commitlint/message@^17.8.1": - version "17.8.1" - resolved "https://registry.yarnpkg.com/@commitlint/message/-/message-17.8.1.tgz#a5cd226c419be20ee03c3d237db6ac37b95958b3" - integrity sha512-6bYL1GUQsD6bLhTH3QQty8pVFoETfFQlMn2Nzmz3AOLqRVfNNtXBaSY0dhZ0dM6A2MEq4+2d7L/2LP8TjqGRkA== +"@commitlint/message@^18.6.1": + version "18.6.1" + resolved "https://registry.yarnpkg.com/@commitlint/message/-/message-18.6.1.tgz#107bd40923ad23d2de56c92a68b179ebfb7e314e" + integrity sha512-VKC10UTMLcpVjMIaHHsY1KwhuTQtdIKPkIdVEwWV+YuzKkzhlI3aNy6oo1eAN6b/D2LTtZkJe2enHmX0corYRw== -"@commitlint/parse@^17.8.1": - version "17.8.1" - resolved "https://registry.yarnpkg.com/@commitlint/parse/-/parse-17.8.1.tgz#6e00b8f50ebd63562d25dcf4230da2c9f984e626" - integrity sha512-/wLUickTo0rNpQgWwLPavTm7WbwkZoBy3X8PpkUmlSmQJyWQTj0m6bDjiykMaDt41qcUbfeFfaCvXfiR4EGnfw== +"@commitlint/parse@^18.6.1": + version "18.6.1" + resolved "https://registry.yarnpkg.com/@commitlint/parse/-/parse-18.6.1.tgz#2946b814125e907b9c4d63d3e71d0c1b54b30b62" + integrity sha512-eS/3GREtvVJqGZrwAGRwR9Gdno3YcZ6Xvuaa+vUF8j++wsmxrA2En3n0ccfVO2qVOLJC41ni7jSZhQiJpMPGOQ== dependencies: - "@commitlint/types" "^17.8.1" - conventional-changelog-angular "^6.0.0" - conventional-commits-parser "^4.0.0" + "@commitlint/types" "^18.6.1" + conventional-changelog-angular "^7.0.0" + conventional-commits-parser "^5.0.0" -"@commitlint/read@^17.8.1": - version "17.8.1" - resolved "https://registry.yarnpkg.com/@commitlint/read/-/read-17.8.1.tgz#b3f28777607c756078356cc133368b0e8c08092f" - integrity sha512-Fd55Oaz9irzBESPCdMd8vWWgxsW3OWR99wOntBDHgf9h7Y6OOHjWEdS9Xzen1GFndqgyoaFplQS5y7KZe0kO2w== +"@commitlint/read@^18.6.1": + version "18.6.1" + resolved "https://registry.yarnpkg.com/@commitlint/read/-/read-18.6.1.tgz#8c138311ed9749427920c369f6276be136f2aa50" + integrity sha512-ia6ODaQFzXrVul07ffSgbZGFajpe8xhnDeLIprLeyfz3ivQU1dIoHp7yz0QIorZ6yuf4nlzg4ZUkluDrGN/J/w== dependencies: - "@commitlint/top-level" "^17.8.1" - "@commitlint/types" "^17.8.1" - fs-extra "^11.0.0" + "@commitlint/top-level" "^18.6.1" + "@commitlint/types" "^18.6.1" git-raw-commits "^2.0.11" minimist "^1.2.6" -"@commitlint/resolve-extends@^17.8.1": - version "17.8.1" - resolved "https://registry.yarnpkg.com/@commitlint/resolve-extends/-/resolve-extends-17.8.1.tgz#9af01432bf2fd9ce3dd5a00d266cce14e4c977e7" - integrity sha512-W/ryRoQ0TSVXqJrx5SGkaYuAaE/BUontL1j1HsKckvM6e5ZaG0M9126zcwL6peKSuIetJi7E87PRQF8O86EW0Q== +"@commitlint/resolve-extends@^18.6.1": + version "18.6.1" + resolved "https://registry.yarnpkg.com/@commitlint/resolve-extends/-/resolve-extends-18.6.1.tgz#f0572c682fc24dbabe2e0f42873261e0fa42c91a" + integrity sha512-ifRAQtHwK+Gj3Bxj/5chhc4L2LIc3s30lpsyW67yyjsETR6ctHAHRu1FSpt0KqahK5xESqoJ92v6XxoDRtjwEQ== dependencies: - "@commitlint/config-validator" "^17.8.1" - "@commitlint/types" "^17.8.1" + "@commitlint/config-validator" "^18.6.1" + "@commitlint/types" "^18.6.1" import-fresh "^3.0.0" lodash.mergewith "^4.6.2" resolve-from "^5.0.0" resolve-global "^1.0.0" -"@commitlint/rules@^17.8.1": - version "17.8.1" - resolved "https://registry.yarnpkg.com/@commitlint/rules/-/rules-17.8.1.tgz#da49cab1b7ebaf90d108de9f58f684dc4ccb65a0" - integrity sha512-2b7OdVbN7MTAt9U0vKOYKCDsOvESVXxQmrvuVUZ0rGFMCrCPJWWP1GJ7f0lAypbDAhaGb8zqtdOr47192LBrIA== +"@commitlint/rules@^18.6.1": + version "18.6.1" + resolved "https://registry.yarnpkg.com/@commitlint/rules/-/rules-18.6.1.tgz#da25aeffe6c0e1c7625e44f46089fb8860986caf" + integrity sha512-kguM6HxZDtz60v/zQYOe0voAtTdGybWXefA1iidjWYmyUUspO1zBPQEmJZ05/plIAqCVyNUTAiRPWIBKLCrGew== dependencies: - "@commitlint/ensure" "^17.8.1" - "@commitlint/message" "^17.8.1" - "@commitlint/to-lines" "^17.8.1" - "@commitlint/types" "^17.8.1" + "@commitlint/ensure" "^18.6.1" + "@commitlint/message" "^18.6.1" + "@commitlint/to-lines" "^18.6.1" + "@commitlint/types" "^18.6.1" execa "^5.0.0" -"@commitlint/to-lines@^17.8.1": - version "17.8.1" - resolved "https://registry.yarnpkg.com/@commitlint/to-lines/-/to-lines-17.8.1.tgz#a5c4a7cf7dff3dbdd69289fc0eb19b66f3cfe017" - integrity sha512-LE0jb8CuR/mj6xJyrIk8VLz03OEzXFgLdivBytoooKO5xLt5yalc8Ma5guTWobw998sbR3ogDd+2jed03CFmJA== +"@commitlint/to-lines@^18.6.1": + version "18.6.1" + resolved "https://registry.yarnpkg.com/@commitlint/to-lines/-/to-lines-18.6.1.tgz#d28827a4a540c98eea1aae31dafd66f80b2f1b9e" + integrity sha512-Gl+orGBxYSNphx1+83GYeNy5N0dQsHBQ9PJMriaLQDB51UQHCVLBT/HBdOx5VaYksivSf5Os55TLePbRLlW50Q== -"@commitlint/top-level@^17.8.1": - version "17.8.1" - resolved "https://registry.yarnpkg.com/@commitlint/top-level/-/top-level-17.8.1.tgz#206d37d6782f33c9572e44fbe3758392fdeea7bc" - integrity sha512-l6+Z6rrNf5p333SHfEte6r+WkOxGlWK4bLuZKbtf/2TXRN+qhrvn1XE63VhD8Oe9oIHQ7F7W1nG2k/TJFhx2yA== +"@commitlint/top-level@^18.6.1": + version "18.6.1" + resolved "https://registry.yarnpkg.com/@commitlint/top-level/-/top-level-18.6.1.tgz#429fcb985e3beaba9b17e05c0ae61926c647baf0" + integrity sha512-HyiHQZUTf0+r0goTCDs/bbVv/LiiQ7AVtz6KIar+8ZrseB9+YJAIo8HQ2IC2QT1y3N1lbW6OqVEsTHjbT6hGSw== dependencies: find-up "^5.0.0" -"@commitlint/types@^17.8.1": - version "17.8.1" - resolved "https://registry.yarnpkg.com/@commitlint/types/-/types-17.8.1.tgz#883a0ad35c5206d5fef7bc6ce1bbe648118af44e" - integrity sha512-PXDQXkAmiMEG162Bqdh9ChML/GJZo6vU+7F03ALKDK8zYc6SuAr47LjG7hGYRqUOz+WK0dU7bQ0xzuqFMdxzeQ== +"@commitlint/types@^18.6.1": + version "18.6.1" + resolved "https://registry.yarnpkg.com/@commitlint/types/-/types-18.6.1.tgz#7eb3ab2d799d9166fbb98b96b0744581e59a4ad4" + integrity sha512-gwRLBLra/Dozj2OywopeuHj2ac26gjGkz2cZ+86cTJOdtWfiRRr4+e77ZDAGc6MDWxaWheI+mAV5TLWWRwqrFg== dependencies: chalk "^4.1.0" @@ -1467,132 +1472,137 @@ "@docsearch/css" "3.5.2" algoliasearch "^4.19.1" -"@esbuild/android-arm64@0.19.5": - version "0.19.5" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.5.tgz#276c5f99604054d3dbb733577e09adae944baa90" - integrity sha512-5d1OkoJxnYQfmC+Zd8NBFjkhyCNYwM4n9ODrycTFY6Jk1IGiZ+tjVJDDSwDt77nK+tfpGP4T50iMtVi4dEGzhQ== - -"@esbuild/android-arm@0.19.5": - version "0.19.5" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.5.tgz#4a3cbf14758166abaae8ba9c01a80e68342a4eec" - integrity sha512-bhvbzWFF3CwMs5tbjf3ObfGqbl/17ict2/uwOSfr3wmxDE6VdS2GqY/FuzIPe0q0bdhj65zQsvqfArI9MY6+AA== - -"@esbuild/android-x64@0.19.5": - version "0.19.5" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.5.tgz#21a3d11cd4613d2d3c5ccb9e746c254eb9265b0a" - integrity sha512-9t+28jHGL7uBdkBjL90QFxe7DVA+KGqWlHCF8ChTKyaKO//VLuoBricQCgwhOjA1/qOczsw843Fy4cbs4H3DVA== - -"@esbuild/darwin-arm64@0.19.5": - version "0.19.5" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.5.tgz#714cb839f467d6a67b151ee8255886498e2b9bf6" - integrity sha512-mvXGcKqqIqyKoxq26qEDPHJuBYUA5KizJncKOAf9eJQez+L9O+KfvNFu6nl7SCZ/gFb2QPaRqqmG0doSWlgkqw== - -"@esbuild/darwin-x64@0.19.5": - version "0.19.5" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.5.tgz#2c553e97a6d2b4ae76a884e35e6cbab85a990bbf" - integrity sha512-Ly8cn6fGLNet19s0X4unjcniX24I0RqjPv+kurpXabZYSXGM4Pwpmf85WHJN3lAgB8GSth7s5A0r856S+4DyiA== - -"@esbuild/freebsd-arm64@0.19.5": - version "0.19.5" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.5.tgz#d554f556718adb31917a0da24277bf84b6ee87f3" - integrity sha512-GGDNnPWTmWE+DMchq1W8Sd0mUkL+APvJg3b11klSGUDvRXh70JqLAO56tubmq1s2cgpVCSKYywEiKBfju8JztQ== - -"@esbuild/freebsd-x64@0.19.5": - version "0.19.5" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.5.tgz#288f7358a3bb15d99e73c65c9adaa3dabb497432" - integrity sha512-1CCwDHnSSoA0HNwdfoNY0jLfJpd7ygaLAp5EHFos3VWJCRX9DMwWODf96s9TSse39Br7oOTLryRVmBoFwXbuuQ== - -"@esbuild/linux-arm64@0.19.5": - version "0.19.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.5.tgz#95933ae86325c93cb6b5e8333d22120ecfdc901b" - integrity sha512-o3vYippBmSrjjQUCEEiTZ2l+4yC0pVJD/Dl57WfPwwlvFkrxoSO7rmBZFii6kQB3Wrn/6GwJUPLU5t52eq2meA== - -"@esbuild/linux-arm@0.19.5": - version "0.19.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.5.tgz#0acef93aa3e0579e46d33b666627bddb06636664" - integrity sha512-lrWXLY/vJBzCPC51QN0HM71uWgIEpGSjSZZADQhq7DKhPcI6NH1IdzjfHkDQws2oNpJKpR13kv7/pFHBbDQDwQ== - -"@esbuild/linux-ia32@0.19.5": - version "0.19.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.5.tgz#b6e5c9e80b42131cbd6b1ddaa48c92835f1ed67f" - integrity sha512-MkjHXS03AXAkNp1KKkhSKPOCYztRtK+KXDNkBa6P78F8Bw0ynknCSClO/ztGszILZtyO/lVKpa7MolbBZ6oJtQ== - -"@esbuild/linux-loong64@0.19.5": - version "0.19.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.5.tgz#e5f0cf95a180158b01ff5f417da796a1c09dfbea" - integrity sha512-42GwZMm5oYOD/JHqHska3Jg0r+XFb/fdZRX+WjADm3nLWLcIsN27YKtqxzQmGNJgu0AyXg4HtcSK9HuOk3v1Dw== - -"@esbuild/linux-mips64el@0.19.5": - version "0.19.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.5.tgz#ae36fb86c7d5f641f3a0c8472e83dcb6ea36a408" - integrity sha512-kcjndCSMitUuPJobWCnwQ9lLjiLZUR3QLQmlgaBfMX23UEa7ZOrtufnRds+6WZtIS9HdTXqND4yH8NLoVVIkcg== - -"@esbuild/linux-ppc64@0.19.5": - version "0.19.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.5.tgz#7960cb1666f0340ddd9eef7b26dcea3835d472d0" - integrity sha512-yJAxJfHVm0ZbsiljbtFFP1BQKLc8kUF6+17tjQ78QjqjAQDnhULWiTA6u0FCDmYT1oOKS9PzZ2z0aBI+Mcyj7Q== - -"@esbuild/linux-riscv64@0.19.5": - version "0.19.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.5.tgz#32207df26af60a3a9feea1783fc21b9817bade19" - integrity sha512-5u8cIR/t3gaD6ad3wNt1MNRstAZO+aNyBxu2We8X31bA8XUNyamTVQwLDA1SLoPCUehNCymhBhK3Qim1433Zag== - -"@esbuild/linux-s390x@0.19.5": - version "0.19.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.5.tgz#b38d5681db89a3723862dfa792812397b1510a7d" - integrity sha512-Z6JrMyEw/EmZBD/OFEFpb+gao9xJ59ATsoTNlj39jVBbXqoZm4Xntu6wVmGPB/OATi1uk/DB+yeDPv2E8PqZGw== - -"@esbuild/linux-x64@0.19.5": - version "0.19.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.5.tgz#46feba2ad041a241379d150f415b472fe3885075" - integrity sha512-psagl+2RlK1z8zWZOmVdImisMtrUxvwereIdyJTmtmHahJTKb64pAcqoPlx6CewPdvGvUKe2Jw+0Z/0qhSbG1A== - -"@esbuild/netbsd-x64@0.19.5": - version "0.19.5" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.5.tgz#3b5c1fb068f26bfc681d31f682adf1bea4ef0702" - integrity sha512-kL2l+xScnAy/E/3119OggX8SrWyBEcqAh8aOY1gr4gPvw76la2GlD4Ymf832UCVbmuWeTf2adkZDK+h0Z/fB4g== - -"@esbuild/openbsd-x64@0.19.5": - version "0.19.5" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.5.tgz#ca6830316ca68056c5c88a875f103ad3235e00db" - integrity sha512-sPOfhtzFufQfTBgRnE1DIJjzsXukKSvZxloZbkJDG383q0awVAq600pc1nfqBcl0ice/WN9p4qLc39WhBShRTA== - -"@esbuild/sunos-x64@0.19.5": - version "0.19.5" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.5.tgz#9efc4eb9539a7be7d5a05ada52ee43cda0d8e2dd" - integrity sha512-dGZkBXaafuKLpDSjKcB0ax0FL36YXCvJNnztjKV+6CO82tTYVDSH2lifitJ29jxRMoUhgkg9a+VA/B03WK5lcg== - -"@esbuild/win32-arm64@0.19.5": - version "0.19.5" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.5.tgz#29f8184afa7a02a956ebda4ed638099f4b8ff198" - integrity sha512-dWVjD9y03ilhdRQ6Xig1NWNgfLtf2o/STKTS+eZuF90fI2BhbwD6WlaiCGKptlqXlURVB5AUOxUj09LuwKGDTg== - -"@esbuild/win32-ia32@0.19.5": - version "0.19.5" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.5.tgz#f3de07afb292ecad651ae4bb8727789de2d95b05" - integrity sha512-4liggWIA4oDgUxqpZwrDhmEfAH4d0iljanDOK7AnVU89T6CzHon/ony8C5LeOdfgx60x5cnQJFZwEydVlYx4iw== - -"@esbuild/win32-x64@0.19.5": - version "0.19.5" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.5.tgz#faad84c41ba12e3a0acb52571df9bff37bee75f6" - integrity sha512-czTrygUsB/jlM8qEW5MD8bgYU2Xg14lo6kBDXW6HdxKjh8M5PzETGiSHaz9MtbXBYDloHNUAUW2tMiKW4KM9Mw== - -"@eslint-community/eslint-utils@^4.2.0": +"@esbuild/aix-ppc64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz#d1bc06aedb6936b3b6d313bf809a5a40387d2b7f" + integrity sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA== + +"@esbuild/android-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz#7ad65a36cfdb7e0d429c353e00f680d737c2aed4" + integrity sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA== + +"@esbuild/android-arm@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.12.tgz#b0c26536f37776162ca8bde25e42040c203f2824" + integrity sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w== + +"@esbuild/android-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.12.tgz#cb13e2211282012194d89bf3bfe7721273473b3d" + integrity sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew== + +"@esbuild/darwin-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz#cbee41e988020d4b516e9d9e44dd29200996275e" + integrity sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g== + +"@esbuild/darwin-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz#e37d9633246d52aecf491ee916ece709f9d5f4cd" + integrity sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A== + +"@esbuild/freebsd-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz#1ee4d8b682ed363b08af74d1ea2b2b4dbba76487" + integrity sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA== + +"@esbuild/freebsd-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz#37a693553d42ff77cd7126764b535fb6cc28a11c" + integrity sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg== + +"@esbuild/linux-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz#be9b145985ec6c57470e0e051d887b09dddb2d4b" + integrity sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA== + +"@esbuild/linux-arm@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz#207ecd982a8db95f7b5279207d0ff2331acf5eef" + integrity sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w== + +"@esbuild/linux-ia32@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz#d0d86b5ca1562523dc284a6723293a52d5860601" + integrity sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA== + +"@esbuild/linux-loong64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz#9a37f87fec4b8408e682b528391fa22afd952299" + integrity sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA== + +"@esbuild/linux-mips64el@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz#4ddebd4e6eeba20b509d8e74c8e30d8ace0b89ec" + integrity sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w== + +"@esbuild/linux-ppc64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz#adb67dadb73656849f63cd522f5ecb351dd8dee8" + integrity sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg== + +"@esbuild/linux-riscv64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz#11bc0698bf0a2abf8727f1c7ace2112612c15adf" + integrity sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg== + +"@esbuild/linux-s390x@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz#e86fb8ffba7c5c92ba91fc3b27ed5a70196c3cc8" + integrity sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg== + +"@esbuild/linux-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz#5f37cfdc705aea687dfe5dfbec086a05acfe9c78" + integrity sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg== + +"@esbuild/netbsd-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz#29da566a75324e0d0dd7e47519ba2f7ef168657b" + integrity sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA== + +"@esbuild/openbsd-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz#306c0acbdb5a99c95be98bdd1d47c916e7dc3ff0" + integrity sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw== + +"@esbuild/sunos-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz#0933eaab9af8b9b2c930236f62aae3fc593faf30" + integrity sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA== + +"@esbuild/win32-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz#773bdbaa1971b36db2f6560088639ccd1e6773ae" + integrity sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A== + +"@esbuild/win32-ia32@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz#000516cad06354cc84a73f0943a4aa690ef6fd67" + integrity sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ== + +"@esbuild/win32-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz#c57c8afbb4054a3ab8317591a0b7320360b444ae" + integrity sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA== + +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": version "4.4.0" resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== dependencies: eslint-visitor-keys "^3.3.0" -"@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.6.1": +"@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": version "4.10.0" resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== -"@eslint/eslintrc@^2.1.2": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.2.tgz#c6936b4b328c64496692f76944e755738be62396" - integrity sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g== +"@eslint/eslintrc@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" + integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== dependencies: ajv "^6.12.4" debug "^4.3.2" @@ -1604,27 +1614,22 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.52.0": - version "8.52.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.52.0.tgz#78fe5f117840f69dc4a353adf9b9cd926353378c" - integrity sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA== +"@eslint/js@8.56.0": + version "8.56.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.56.0.tgz#ef20350fec605a7f7035a01764731b2de0f3782b" + integrity sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A== "@fastify/busboy@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.0.0.tgz#f22824caff3ae506b18207bad4126dbc6ccdb6b8" - integrity sha512-JUFJad5lv7jxj926GPgymrWQxxjPYuJNiNjNMzqT+HiuP6Vl3dk5xzG+8sTX96np0ZAluvaMzPsjhHZ5rNuNQQ== - -"@gar/promisify@^1.0.1": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" - integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== + version "2.1.0" + resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.0.tgz#0709e9f4cb252351c609c6e6d8d6779a8d25edff" + integrity sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA== -"@hapi/hoek@^9.0.0": +"@hapi/hoek@^9.0.0", "@hapi/hoek@^9.3.0": version "9.3.0" resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb" integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ== -"@hapi/topo@^5.0.0": +"@hapi/topo@^5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.1.0.tgz#dc448e332c6c6e37a4dc02fd84ba8d44b9afb012" integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg== @@ -1632,10 +1637,11 @@ "@hapi/hoek" "^9.0.0" "@headlessui/react@^1.6.4": - version "1.7.17" - resolved "https://registry.yarnpkg.com/@headlessui/react/-/react-1.7.17.tgz#a0ec23af21b527c030967245fd99776aa7352bc6" - integrity sha512-4am+tzvkqDSSgiwrsEpGWqgGo9dz8qU5M3znCkC4PgkpY4HcCZzEDEvozltGGGHIKl9jbXbZPSH5TWn4sWJdow== + version "1.7.18" + resolved "https://registry.yarnpkg.com/@headlessui/react/-/react-1.7.18.tgz#30af4634d2215b2ca1aa29d07f33d02bea82d9d7" + integrity sha512-4i5DOrzwN4qSgNsL4Si61VMkUcWbcSKueUV7sFhpHzQcSShdlHENE5+QBntMSRvHt8NyoFO2AGG8si9lq+w4zQ== dependencies: + "@tanstack/react-virtual" "^3.0.0-beta.60" client-only "^0.0.1" "@hookform/resolvers@^2.8.3": @@ -1644,12 +1650,12 @@ integrity sha512-bA3aZ79UgcHj7tFV7RlgThzwSSHZgvfbt2wprldRkYBcMopdMvHyO17Wwp/twcJasNFischFfS7oz8Katz8DdQ== "@humanwhocodes/config-array@^0.11.13": - version "0.11.13" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.13.tgz#075dc9684f40a531d9b26b0822153c1e832ee297" - integrity sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ== + version "0.11.14" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" + integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== dependencies: - "@humanwhocodes/object-schema" "^2.0.1" - debug "^4.1.1" + "@humanwhocodes/object-schema" "^2.0.2" + debug "^4.3.1" minimatch "^3.0.5" "@humanwhocodes/module-importer@^1.0.1": @@ -1657,10 +1663,10 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/object-schema@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz#e5211452df060fa8522b55c7b3c0c4d1981cb044" - integrity sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw== +"@humanwhocodes/object-schema@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz#d9fae00a2d5cb40f92cfe64b47ad749fbc38f917" + integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw== "@hutson/parse-repository-url@^3.0.0": version "3.0.2" @@ -1672,6 +1678,18 @@ resolved "https://registry.yarnpkg.com/@ioredis/commands/-/commands-1.2.0.tgz#6d61b3097470af1fdbbe622795b8921d42018e11" integrity sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg== +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" @@ -1683,178 +1701,201 @@ js-yaml "^3.13.1" resolve-from "^5.0.0" -"@istanbuljs/schema@^0.1.2": +"@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3": version "0.1.3" resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== -"@jest/console@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.5.1.tgz#260fe7239602fe5130a94f1aa386eff54b014bba" - integrity sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg== +"@jest/console@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.7.0.tgz#cd4822dbdb84529265c5a2bdb529a3c9cc950ffc" + integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^27.5.1" - jest-util "^27.5.1" + jest-message-util "^29.7.0" + jest-util "^29.7.0" slash "^3.0.0" -"@jest/core@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.5.1.tgz#267ac5f704e09dc52de2922cbf3af9edcd64b626" - integrity sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ== - dependencies: - "@jest/console" "^27.5.1" - "@jest/reporters" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" +"@jest/core@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.7.0.tgz#b6cccc239f30ff36609658c5a5e2291757ce448f" + integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== + dependencies: + "@jest/console" "^29.7.0" + "@jest/reporters" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" - emittery "^0.8.1" + ci-info "^3.2.0" exit "^0.1.2" graceful-fs "^4.2.9" - jest-changed-files "^27.5.1" - jest-config "^27.5.1" - jest-haste-map "^27.5.1" - jest-message-util "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-resolve-dependencies "^27.5.1" - jest-runner "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" - jest-watcher "^27.5.1" + jest-changed-files "^29.7.0" + jest-config "^29.7.0" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-resolve-dependencies "^29.7.0" + jest-runner "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + jest-watcher "^29.7.0" micromatch "^4.0.4" - rimraf "^3.0.0" + pretty-format "^29.7.0" slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.5.1.tgz#d7425820511fe7158abbecc010140c3fd3be9c74" - integrity sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA== +"@jest/environment@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7" + integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== dependencies: - "@jest/fake-timers" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" - jest-mock "^27.5.1" + jest-mock "^29.7.0" -"@jest/fake-timers@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.5.1.tgz#76979745ce0579c8a94a4678af7a748eda8ada74" - integrity sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ== +"@jest/expect-utils@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" + integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== + dependencies: + jest-get-type "^29.6.3" + +"@jest/expect@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.7.0.tgz#76a3edb0cb753b70dfbfe23283510d3d45432bf2" + integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== dependencies: - "@jest/types" "^27.5.1" - "@sinonjs/fake-timers" "^8.0.1" + expect "^29.7.0" + jest-snapshot "^29.7.0" + +"@jest/fake-timers@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565" + integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== + dependencies: + "@jest/types" "^29.6.3" + "@sinonjs/fake-timers" "^10.0.2" "@types/node" "*" - jest-message-util "^27.5.1" - jest-mock "^27.5.1" - jest-util "^27.5.1" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-util "^29.7.0" -"@jest/globals@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.5.1.tgz#7ac06ce57ab966566c7963431cef458434601b2b" - integrity sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q== +"@jest/globals@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.7.0.tgz#8d9290f9ec47ff772607fa864ca1d5a2efae1d4d" + integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== dependencies: - "@jest/environment" "^27.5.1" - "@jest/types" "^27.5.1" - expect "^27.5.1" + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/types" "^29.6.3" + jest-mock "^29.7.0" -"@jest/reporters@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.5.1.tgz#ceda7be96170b03c923c37987b64015812ffec04" - integrity sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw== +"@jest/reporters@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.7.0.tgz#04b262ecb3b8faa83b0b3d321623972393e8f4c7" + integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/console" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" "@types/node" "*" chalk "^4.0.0" collect-v8-coverage "^1.0.0" exit "^0.1.2" - glob "^7.1.2" + glob "^7.1.3" graceful-fs "^4.2.9" istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^5.1.0" + istanbul-lib-instrument "^6.0.0" istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" istanbul-reports "^3.1.3" - jest-haste-map "^27.5.1" - jest-resolve "^27.5.1" - jest-util "^27.5.1" - jest-worker "^27.5.1" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + jest-worker "^29.7.0" slash "^3.0.0" - source-map "^0.6.0" string-length "^4.0.1" - terminal-link "^2.0.0" - v8-to-istanbul "^8.1.0" + strip-ansi "^6.0.0" + v8-to-istanbul "^9.0.1" -"@jest/source-map@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.5.1.tgz#6608391e465add4205eae073b55e7f279e04e8cf" - integrity sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg== +"@jest/schemas@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" + integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== dependencies: + "@sinclair/typebox" "^0.27.8" + +"@jest/source-map@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4" + integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== + dependencies: + "@jridgewell/trace-mapping" "^0.3.18" callsites "^3.0.0" graceful-fs "^4.2.9" - source-map "^0.6.0" -"@jest/test-result@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.5.1.tgz#56a6585fa80f7cdab72b8c5fc2e871d03832f5bb" - integrity sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag== +"@jest/test-result@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.7.0.tgz#8db9a80aa1a097bb2262572686734baed9b1657c" + integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== dependencies: - "@jest/console" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/console" "^29.7.0" + "@jest/types" "^29.6.3" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz#4057e0e9cea4439e544c6353c6affe58d095745b" - integrity sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ== +"@jest/test-sequencer@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz#6cef977ce1d39834a3aea887a1726628a6f072ce" + integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== dependencies: - "@jest/test-result" "^27.5.1" + "@jest/test-result" "^29.7.0" graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-runtime "^27.5.1" + jest-haste-map "^29.7.0" + slash "^3.0.0" -"@jest/transform@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.5.1.tgz#6c3501dcc00c4c08915f292a600ece5ecfe1f409" - integrity sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw== +"@jest/transform@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" + integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== dependencies: - "@babel/core" "^7.1.0" - "@jest/types" "^27.5.1" + "@babel/core" "^7.11.6" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" babel-plugin-istanbul "^6.1.1" chalk "^4.0.0" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" + convert-source-map "^2.0.0" + fast-json-stable-stringify "^2.1.0" graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-regex-util "^27.5.1" - jest-util "^27.5.1" + jest-haste-map "^29.7.0" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" micromatch "^4.0.4" pirates "^4.0.4" slash "^3.0.0" - source-map "^0.6.1" - write-file-atomic "^3.0.0" + write-file-atomic "^4.0.2" -"@jest/types@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80" - integrity sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw== +"@jest/types@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" + integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== dependencies: + "@jest/schemas" "^29.6.3" "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^3.0.0" "@types/node" "*" - "@types/yargs" "^16.0.0" + "@types/yargs" "^17.0.8" chalk "^4.0.0" "@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": @@ -1867,9 +1908,9 @@ "@jridgewell/trace-mapping" "^0.3.9" "@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== "@jridgewell/set-array@^1.0.1": version "1.1.2" @@ -1889,739 +1930,143 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.20" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f" - integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.22" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz#72a621e5de59f5f1ef792d0793a82ee20f645e4c" + integrity sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw== dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" -"@lerna/add@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/add/-/add-4.0.0.tgz#c36f57d132502a57b9e7058d1548b7a565ef183f" - integrity sha512-cpmAH1iS3k8JBxNvnMqrGTTjbY/ZAiKa1ChJzFevMYY3eeqbvhsBKnBcxjRXtdrJ6bd3dCQM+ZtK+0i682Fhng== - dependencies: - "@lerna/bootstrap" "4.0.0" - "@lerna/command" "4.0.0" - "@lerna/filter-options" "4.0.0" - "@lerna/npm-conf" "4.0.0" - "@lerna/validation-error" "4.0.0" - dedent "^0.7.0" - npm-package-arg "^8.1.0" - p-map "^4.0.0" - pacote "^11.2.6" - semver "^7.3.4" - -"@lerna/bootstrap@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/bootstrap/-/bootstrap-4.0.0.tgz#5f5c5e2c6cfc8fcec50cb2fbe569a8c607101891" - integrity sha512-RkS7UbeM2vu+kJnHzxNRCLvoOP9yGNgkzRdy4UV2hNalD7EP41bLvRVOwRYQ7fhc2QcbhnKNdOBihYRL0LcKtw== - dependencies: - "@lerna/command" "4.0.0" - "@lerna/filter-options" "4.0.0" - "@lerna/has-npm-version" "4.0.0" - "@lerna/npm-install" "4.0.0" - "@lerna/package-graph" "4.0.0" - "@lerna/pulse-till-done" "4.0.0" - "@lerna/rimraf-dir" "4.0.0" - "@lerna/run-lifecycle" "4.0.0" - "@lerna/run-topologically" "4.0.0" - "@lerna/symlink-binary" "4.0.0" - "@lerna/symlink-dependencies" "4.0.0" - "@lerna/validation-error" "4.0.0" - dedent "^0.7.0" - get-port "^5.1.1" - multimatch "^5.0.0" - npm-package-arg "^8.1.0" - npmlog "^4.1.2" - p-map "^4.0.0" - p-map-series "^2.1.0" - p-waterfall "^2.1.1" - read-package-tree "^5.3.1" +"@lerna/create@8.1.2": + version "8.1.2" + resolved "https://registry.yarnpkg.com/@lerna/create/-/create-8.1.2.tgz#4dc8b3f59c963275bfb8b390491068751101f477" + integrity sha512-GzScCIkAW3tg3+Yn/MKCH9963bzG+zpjGz2NdfYDlYWI7p0f/SH46v1dqpPpYmZ2E/m3JK8HjTNNNL8eIm8/YQ== + dependencies: + "@npmcli/run-script" "7.0.2" + "@nx/devkit" ">=17.1.2 < 19" + "@octokit/plugin-enterprise-rest" "6.0.1" + "@octokit/rest" "19.0.11" + byte-size "8.1.1" + chalk "4.1.0" + clone-deep "4.0.1" + cmd-shim "6.0.1" + columnify "1.6.0" + conventional-changelog-core "5.0.1" + conventional-recommended-bump "7.0.1" + cosmiconfig "^8.2.0" + dedent "0.7.0" + execa "5.0.0" + fs-extra "^11.1.1" + get-stream "6.0.0" + git-url-parse "13.1.0" + glob-parent "5.1.2" + globby "11.1.0" + graceful-fs "4.2.11" + has-unicode "2.0.1" + ini "^1.3.8" + init-package-json "5.0.0" + inquirer "^8.2.4" + is-ci "3.0.1" + is-stream "2.0.0" + js-yaml "4.1.0" + libnpmpublish "7.3.0" + load-json-file "6.2.0" + lodash "^4.17.21" + make-dir "4.0.0" + minimatch "3.0.5" + multimatch "5.0.0" + node-fetch "2.6.7" + npm-package-arg "8.1.1" + npm-packlist "5.1.1" + npm-registry-fetch "^14.0.5" + npmlog "^6.0.2" + nx ">=17.1.2 < 19" + p-map "4.0.0" + p-map-series "2.1.0" + p-queue "6.6.2" + p-reduce "^2.1.0" + pacote "^17.0.5" + pify "5.0.0" + read-cmd-shim "4.0.0" + read-package-json "6.0.4" + resolve-from "5.0.0" + rimraf "^4.4.1" semver "^7.3.4" + signal-exit "3.0.7" + slash "^3.0.0" + ssri "^9.0.1" + strong-log-transformer "2.1.0" + tar "6.1.11" + temp-dir "1.0.0" + upath "2.0.1" + uuid "^9.0.0" + validate-npm-package-license "^3.0.4" + validate-npm-package-name "5.0.0" + write-file-atomic "5.0.1" + write-pkg "4.0.0" + yargs "17.7.2" + yargs-parser "21.1.1" -"@lerna/changed@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/changed/-/changed-4.0.0.tgz#b9fc76cea39b9292a6cd263f03eb57af85c9270b" - integrity sha512-cD+KuPRp6qiPOD+BO6S6SN5cARspIaWSOqGBpGnYzLb4uWT8Vk4JzKyYtc8ym1DIwyoFXHosXt8+GDAgR8QrgQ== +"@mapbox/rehype-prism@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@mapbox/rehype-prism/-/rehype-prism-0.8.0.tgz#c8b6eafb041a97e143fcbf93dd4e319ab0c131d6" + integrity sha512-bIz4a3oZ8g+pQBHSMMIxNpYOMX4yq4aZdpezoiCl9yJudh1Z9SRmHQqH6f+WtTBNOORzXMEGkvBze4PiH17wtA== dependencies: - "@lerna/collect-updates" "4.0.0" - "@lerna/command" "4.0.0" - "@lerna/listable" "4.0.0" - "@lerna/output" "4.0.0" + hast-util-to-string "^1.0.4" + mrm "^3.0.9" + refractor "^3.4.0" + unist-util-visit "^2.0.3" -"@lerna/check-working-tree@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/check-working-tree/-/check-working-tree-4.0.0.tgz#257e36a602c00142e76082a19358e3e1ae8dbd58" - integrity sha512-/++bxM43jYJCshBiKP5cRlCTwSJdRSxVmcDAXM+1oUewlZJVSVlnks5eO0uLxokVFvLhHlC5kHMc7gbVFPHv6Q== +"@mdx-js/mdx@^1.6.22": + version "1.6.22" + resolved "https://registry.yarnpkg.com/@mdx-js/mdx/-/mdx-1.6.22.tgz#8a723157bf90e78f17dc0f27995398e6c731f1ba" + integrity sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA== dependencies: - "@lerna/collect-uncommitted" "4.0.0" - "@lerna/describe-ref" "4.0.0" - "@lerna/validation-error" "4.0.0" + "@babel/core" "7.12.9" + "@babel/plugin-syntax-jsx" "7.12.1" + "@babel/plugin-syntax-object-rest-spread" "7.8.3" + "@mdx-js/util" "1.6.22" + babel-plugin-apply-mdx-type-prop "1.6.22" + babel-plugin-extract-import-names "1.6.22" + camelcase-css "2.0.1" + detab "2.0.4" + hast-util-raw "6.0.1" + lodash.uniq "4.5.0" + mdast-util-to-hast "10.0.1" + remark-footnotes "2.0.0" + remark-mdx "1.6.22" + remark-parse "8.0.3" + remark-squeeze-paragraphs "4.0.0" + style-to-object "0.3.0" + unified "9.2.0" + unist-builder "2.0.3" + unist-util-visit "2.0.3" -"@lerna/child-process@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/child-process/-/child-process-4.0.0.tgz#341b96a57dffbd9705646d316e231df6fa4df6e1" - integrity sha512-XtCnmCT9eyVsUUHx6y/CTBYdV9g2Cr/VxyseTWBgfIur92/YKClfEtJTbOh94jRT62hlKLqSvux/UhxXVh613Q== - dependencies: - chalk "^4.1.0" - execa "^5.0.0" - strong-log-transformer "^2.1.0" +"@mdx-js/react@^1.6.22": + version "1.6.22" + resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-1.6.22.tgz#ae09b4744fddc74714ee9f9d6f17a66e77c43573" + integrity sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg== -"@lerna/clean@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/clean/-/clean-4.0.0.tgz#8f778b6f2617aa2a936a6b5e085ae62498e57dc5" - integrity sha512-uugG2iN9k45ITx2jtd8nEOoAtca8hNlDCUM0N3lFgU/b1mEQYAPRkqr1qs4FLRl/Y50ZJ41wUz1eazS+d/0osA== - dependencies: - "@lerna/command" "4.0.0" - "@lerna/filter-options" "4.0.0" - "@lerna/prompt" "4.0.0" - "@lerna/pulse-till-done" "4.0.0" - "@lerna/rimraf-dir" "4.0.0" - p-map "^4.0.0" - p-map-series "^2.1.0" - p-waterfall "^2.1.1" +"@mdx-js/util@1.6.22": + version "1.6.22" + resolved "https://registry.yarnpkg.com/@mdx-js/util/-/util-1.6.22.tgz#219dfd89ae5b97a8801f015323ffa4b62f45718b" + integrity sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA== -"@lerna/cli@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/cli/-/cli-4.0.0.tgz#8eabd334558836c1664df23f19acb95e98b5bbf3" - integrity sha512-Neaw3GzFrwZiRZv2g7g6NwFjs3er1vhraIniEs0jjVLPMNC4eata0na3GfE5yibkM/9d3gZdmihhZdZ3EBdvYA== - dependencies: - "@lerna/global-options" "4.0.0" - dedent "^0.7.0" - npmlog "^4.1.2" - yargs "^16.2.0" +"@next/env@12.3.4": + version "12.3.4" + resolved "https://registry.yarnpkg.com/@next/env/-/env-12.3.4.tgz#c787837d36fcad75d72ff8df6b57482027d64a47" + integrity sha512-H/69Lc5Q02dq3o+dxxy5O/oNxFsZpdL6WREtOOtOM1B/weonIwDXkekr1KV5DPVPr12IHFPrMrcJQ6bgPMfn7A== -"@lerna/collect-uncommitted@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/collect-uncommitted/-/collect-uncommitted-4.0.0.tgz#855cd64612969371cfc2453b90593053ff1ba779" - integrity sha512-ufSTfHZzbx69YNj7KXQ3o66V4RC76ffOjwLX0q/ab//61bObJ41n03SiQEhSlmpP+gmFbTJ3/7pTe04AHX9m/g== - dependencies: - "@lerna/child-process" "4.0.0" - chalk "^4.1.0" - npmlog "^4.1.2" - -"@lerna/collect-updates@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/collect-updates/-/collect-updates-4.0.0.tgz#8e208b1bafd98a372ff1177f7a5e288f6bea8041" - integrity sha512-bnNGpaj4zuxsEkyaCZLka9s7nMs58uZoxrRIPJ+nrmrZYp1V5rrd+7/NYTuunOhY2ug1sTBvTAxj3NZQ+JKnOw== - dependencies: - "@lerna/child-process" "4.0.0" - "@lerna/describe-ref" "4.0.0" - minimatch "^3.0.4" - npmlog "^4.1.2" - slash "^3.0.0" - -"@lerna/command@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/command/-/command-4.0.0.tgz#991c7971df8f5bf6ae6e42c808869a55361c1b98" - integrity sha512-LM9g3rt5FsPNFqIHUeRwWXLNHJ5NKzOwmVKZ8anSp4e1SPrv2HNc1V02/9QyDDZK/w+5POXH5lxZUI1CHaOK/A== - dependencies: - "@lerna/child-process" "4.0.0" - "@lerna/package-graph" "4.0.0" - "@lerna/project" "4.0.0" - "@lerna/validation-error" "4.0.0" - "@lerna/write-log-file" "4.0.0" - clone-deep "^4.0.1" - dedent "^0.7.0" - execa "^5.0.0" - is-ci "^2.0.0" - npmlog "^4.1.2" - -"@lerna/conventional-commits@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/conventional-commits/-/conventional-commits-4.0.0.tgz#660fb2c7b718cb942ead70110df61f18c6f99750" - integrity sha512-CSUQRjJHFrH8eBn7+wegZLV3OrNc0Y1FehYfYGhjLE2SIfpCL4bmfu/ViYuHh9YjwHaA+4SX6d3hR+xkeseKmw== - dependencies: - "@lerna/validation-error" "4.0.0" - conventional-changelog-angular "^5.0.12" - conventional-changelog-core "^4.2.2" - conventional-recommended-bump "^6.1.0" - fs-extra "^9.1.0" - get-stream "^6.0.0" - lodash.template "^4.5.0" - npm-package-arg "^8.1.0" - npmlog "^4.1.2" - pify "^5.0.0" - semver "^7.3.4" - -"@lerna/create-symlink@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/create-symlink/-/create-symlink-4.0.0.tgz#8c5317ce5ae89f67825443bd7651bf4121786228" - integrity sha512-I0phtKJJdafUiDwm7BBlEUOtogmu8+taxq6PtIrxZbllV9hWg59qkpuIsiFp+no7nfRVuaasNYHwNUhDAVQBig== - dependencies: - cmd-shim "^4.1.0" - fs-extra "^9.1.0" - npmlog "^4.1.2" - -"@lerna/create@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/create/-/create-4.0.0.tgz#b6947e9b5dfb6530321952998948c3e63d64d730" - integrity sha512-mVOB1niKByEUfxlbKTM1UNECWAjwUdiioIbRQZEeEabtjCL69r9rscIsjlGyhGWCfsdAG5wfq4t47nlDXdLLag== - dependencies: - "@lerna/child-process" "4.0.0" - "@lerna/command" "4.0.0" - "@lerna/npm-conf" "4.0.0" - "@lerna/validation-error" "4.0.0" - dedent "^0.7.0" - fs-extra "^9.1.0" - globby "^11.0.2" - init-package-json "^2.0.2" - npm-package-arg "^8.1.0" - p-reduce "^2.1.0" - pacote "^11.2.6" - pify "^5.0.0" - semver "^7.3.4" - slash "^3.0.0" - validate-npm-package-license "^3.0.4" - validate-npm-package-name "^3.0.0" - whatwg-url "^8.4.0" - yargs-parser "20.2.4" - -"@lerna/describe-ref@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/describe-ref/-/describe-ref-4.0.0.tgz#53c53b4ea65fdceffa072a62bfebe6772c45d9ec" - integrity sha512-eTU5+xC4C5Gcgz+Ey4Qiw9nV2B4JJbMulsYJMW8QjGcGh8zudib7Sduj6urgZXUYNyhYpRs+teci9M2J8u+UvQ== - dependencies: - "@lerna/child-process" "4.0.0" - npmlog "^4.1.2" - -"@lerna/diff@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/diff/-/diff-4.0.0.tgz#6d3071817aaa4205a07bf77cfc6e932796d48b92" - integrity sha512-jYPKprQVg41+MUMxx6cwtqsNm0Yxx9GDEwdiPLwcUTFx+/qKCEwifKNJ1oGIPBxyEHX2PFCOjkK39lHoj2qiag== - dependencies: - "@lerna/child-process" "4.0.0" - "@lerna/command" "4.0.0" - "@lerna/validation-error" "4.0.0" - npmlog "^4.1.2" - -"@lerna/exec@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/exec/-/exec-4.0.0.tgz#eb6cb95cb92d42590e9e2d628fcaf4719d4a8be6" - integrity sha512-VGXtL/b/JfY84NB98VWZpIExfhLOzy0ozm/0XaS4a2SmkAJc5CeUfrhvHxxkxiTBLkU+iVQUyYEoAT0ulQ8PCw== - dependencies: - "@lerna/child-process" "4.0.0" - "@lerna/command" "4.0.0" - "@lerna/filter-options" "4.0.0" - "@lerna/profiler" "4.0.0" - "@lerna/run-topologically" "4.0.0" - "@lerna/validation-error" "4.0.0" - p-map "^4.0.0" - -"@lerna/filter-options@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/filter-options/-/filter-options-4.0.0.tgz#ac94cc515d7fa3b47e2f7d74deddeabb1de5e9e6" - integrity sha512-vV2ANOeZhOqM0rzXnYcFFCJ/kBWy/3OA58irXih9AMTAlQLymWAK0akWybl++sUJ4HB9Hx12TOqaXbYS2NM5uw== - dependencies: - "@lerna/collect-updates" "4.0.0" - "@lerna/filter-packages" "4.0.0" - dedent "^0.7.0" - npmlog "^4.1.2" - -"@lerna/filter-packages@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/filter-packages/-/filter-packages-4.0.0.tgz#b1f70d70e1de9cdd36a4e50caa0ac501f8d012f2" - integrity sha512-+4AJIkK7iIiOaqCiVTYJxh/I9qikk4XjNQLhE3kixaqgMuHl1NQ99qXRR0OZqAWB9mh8Z1HA9bM5K1HZLBTOqA== - dependencies: - "@lerna/validation-error" "4.0.0" - multimatch "^5.0.0" - npmlog "^4.1.2" - -"@lerna/get-npm-exec-opts@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-4.0.0.tgz#dc955be94a4ae75c374ef9bce91320887d34608f" - integrity sha512-yvmkerU31CTWS2c7DvmAWmZVeclPBqI7gPVr5VATUKNWJ/zmVcU4PqbYoLu92I9Qc4gY1TuUplMNdNuZTSL7IQ== - dependencies: - npmlog "^4.1.2" - -"@lerna/get-packed@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/get-packed/-/get-packed-4.0.0.tgz#0989d61624ac1f97e393bdad2137c49cd7a37823" - integrity sha512-rfWONRsEIGyPJTxFzC8ECb3ZbsDXJbfqWYyeeQQDrJRPnEJErlltRLPLgC2QWbxFgFPsoDLeQmFHJnf0iDfd8w== - dependencies: - fs-extra "^9.1.0" - ssri "^8.0.1" - tar "^6.1.0" - -"@lerna/github-client@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/github-client/-/github-client-4.0.0.tgz#2ced67721363ef70f8e12ffafce4410918f4a8a4" - integrity sha512-2jhsldZtTKXYUBnOm23Lb0Fx8G4qfSXF9y7UpyUgWUj+YZYd+cFxSuorwQIgk5P4XXrtVhsUesIsli+BYSThiw== - dependencies: - "@lerna/child-process" "4.0.0" - "@octokit/plugin-enterprise-rest" "^6.0.1" - "@octokit/rest" "^18.1.0" - git-url-parse "^11.4.4" - npmlog "^4.1.2" - -"@lerna/gitlab-client@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/gitlab-client/-/gitlab-client-4.0.0.tgz#00dad73379c7b38951d4b4ded043504c14e2b67d" - integrity sha512-OMUpGSkeDWFf7BxGHlkbb35T7YHqVFCwBPSIR6wRsszY8PAzCYahtH3IaJzEJyUg6vmZsNl0FSr3pdA2skhxqA== - dependencies: - node-fetch "^2.6.1" - npmlog "^4.1.2" - whatwg-url "^8.4.0" - -"@lerna/global-options@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/global-options/-/global-options-4.0.0.tgz#c7d8b0de6a01d8a845e2621ea89e7f60f18c6a5f" - integrity sha512-TRMR8afAHxuYBHK7F++Ogop2a82xQjoGna1dvPOY6ltj/pEx59pdgcJfYcynYqMkFIk8bhLJJN9/ndIfX29FTQ== - -"@lerna/has-npm-version@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/has-npm-version/-/has-npm-version-4.0.0.tgz#d3fc3292c545eb28bd493b36e6237cf0279f631c" - integrity sha512-LQ3U6XFH8ZmLCsvsgq1zNDqka0Xzjq5ibVN+igAI5ccRWNaUsE/OcmsyMr50xAtNQMYMzmpw5GVLAivT2/YzCg== - dependencies: - "@lerna/child-process" "4.0.0" - semver "^7.3.4" - -"@lerna/import@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/import/-/import-4.0.0.tgz#bde656c4a451fa87ae41733ff8a8da60547c5465" - integrity sha512-FaIhd+4aiBousKNqC7TX1Uhe97eNKf5/SC7c5WZANVWtC7aBWdmswwDt3usrzCNpj6/Wwr9EtEbYROzxKH8ffg== - dependencies: - "@lerna/child-process" "4.0.0" - "@lerna/command" "4.0.0" - "@lerna/prompt" "4.0.0" - "@lerna/pulse-till-done" "4.0.0" - "@lerna/validation-error" "4.0.0" - dedent "^0.7.0" - fs-extra "^9.1.0" - p-map-series "^2.1.0" - -"@lerna/info@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/info/-/info-4.0.0.tgz#b9fb0e479d60efe1623603958a831a88b1d7f1fc" - integrity sha512-8Uboa12kaCSZEn4XRfPz5KU9XXoexSPS4oeYGj76s2UQb1O1GdnEyfjyNWoUl1KlJ2i/8nxUskpXIftoFYH0/Q== - dependencies: - "@lerna/command" "4.0.0" - "@lerna/output" "4.0.0" - envinfo "^7.7.4" - -"@lerna/init@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/init/-/init-4.0.0.tgz#dadff67e6dfb981e8ccbe0e6a310e837962f6c7a" - integrity sha512-wY6kygop0BCXupzWj5eLvTUqdR7vIAm0OgyV9WHpMYQGfs1V22jhztt8mtjCloD/O0nEe4tJhdG62XU5aYmPNQ== - dependencies: - "@lerna/child-process" "4.0.0" - "@lerna/command" "4.0.0" - fs-extra "^9.1.0" - p-map "^4.0.0" - write-json-file "^4.3.0" - -"@lerna/link@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/link/-/link-4.0.0.tgz#c3a38aabd44279d714e90f2451e31b63f0fb65ba" - integrity sha512-KlvPi7XTAcVOByfaLlOeYOfkkDcd+bejpHMCd1KcArcFTwijOwXOVi24DYomIeHvy6HsX/IUquJ4PPUJIeB4+w== - dependencies: - "@lerna/command" "4.0.0" - "@lerna/package-graph" "4.0.0" - "@lerna/symlink-dependencies" "4.0.0" - p-map "^4.0.0" - slash "^3.0.0" - -"@lerna/list@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/list/-/list-4.0.0.tgz#24b4e6995bd73f81c556793fe502b847efd9d1d7" - integrity sha512-L2B5m3P+U4Bif5PultR4TI+KtW+SArwq1i75QZ78mRYxPc0U/piau1DbLOmwrdqr99wzM49t0Dlvl6twd7GHFg== - dependencies: - "@lerna/command" "4.0.0" - "@lerna/filter-options" "4.0.0" - "@lerna/listable" "4.0.0" - "@lerna/output" "4.0.0" - -"@lerna/listable@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/listable/-/listable-4.0.0.tgz#d00d6cb4809b403f2b0374fc521a78e318b01214" - integrity sha512-/rPOSDKsOHs5/PBLINZOkRIX1joOXUXEtyUs5DHLM8q6/RP668x/1lFhw6Dx7/U+L0+tbkpGtZ1Yt0LewCLgeQ== - dependencies: - "@lerna/query-graph" "4.0.0" - chalk "^4.1.0" - columnify "^1.5.4" - -"@lerna/log-packed@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/log-packed/-/log-packed-4.0.0.tgz#95168fe2e26ac6a71e42f4be857519b77e57a09f" - integrity sha512-+dpCiWbdzgMAtpajLToy9PO713IHoE6GV/aizXycAyA07QlqnkpaBNZ8DW84gHdM1j79TWockGJo9PybVhrrZQ== - dependencies: - byte-size "^7.0.0" - columnify "^1.5.4" - has-unicode "^2.0.1" - npmlog "^4.1.2" - -"@lerna/npm-conf@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/npm-conf/-/npm-conf-4.0.0.tgz#b259fd1e1cee2bf5402b236e770140ff9ade7fd2" - integrity sha512-uS7H02yQNq3oejgjxAxqq/jhwGEE0W0ntr8vM3EfpCW1F/wZruwQw+7bleJQ9vUBjmdXST//tk8mXzr5+JXCfw== - dependencies: - config-chain "^1.1.12" - pify "^5.0.0" - -"@lerna/npm-dist-tag@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/npm-dist-tag/-/npm-dist-tag-4.0.0.tgz#d1e99b4eccd3414142f0548ad331bf2d53f3257a" - integrity sha512-F20sg28FMYTgXqEQihgoqSfwmq+Id3zT23CnOwD+XQMPSy9IzyLf1fFVH319vXIw6NF6Pgs4JZN2Qty6/CQXGw== - dependencies: - "@lerna/otplease" "4.0.0" - npm-package-arg "^8.1.0" - npm-registry-fetch "^9.0.0" - npmlog "^4.1.2" - -"@lerna/npm-install@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/npm-install/-/npm-install-4.0.0.tgz#31180be3ab3b7d1818a1a0c206aec156b7094c78" - integrity sha512-aKNxq2j3bCH3eXl3Fmu4D54s/YLL9WSwV8W7X2O25r98wzrO38AUN6AB9EtmAx+LV/SP15et7Yueg9vSaanRWg== - dependencies: - "@lerna/child-process" "4.0.0" - "@lerna/get-npm-exec-opts" "4.0.0" - fs-extra "^9.1.0" - npm-package-arg "^8.1.0" - npmlog "^4.1.2" - signal-exit "^3.0.3" - write-pkg "^4.0.0" - -"@lerna/npm-publish@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/npm-publish/-/npm-publish-4.0.0.tgz#84eb62e876fe949ae1fd62c60804423dbc2c4472" - integrity sha512-vQb7yAPRo5G5r77DRjHITc9piR9gvEKWrmfCH7wkfBnGWEqu7n8/4bFQ7lhnkujvc8RXOsYpvbMQkNfkYibD/w== - dependencies: - "@lerna/otplease" "4.0.0" - "@lerna/run-lifecycle" "4.0.0" - fs-extra "^9.1.0" - libnpmpublish "^4.0.0" - npm-package-arg "^8.1.0" - npmlog "^4.1.2" - pify "^5.0.0" - read-package-json "^3.0.0" - -"@lerna/npm-run-script@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/npm-run-script/-/npm-run-script-4.0.0.tgz#dfebf4f4601442e7c0b5214f9fb0d96c9350743b" - integrity sha512-Jmyh9/IwXJjOXqKfIgtxi0bxi1pUeKe5bD3S81tkcy+kyng/GNj9WSqD5ZggoNP2NP//s4CLDAtUYLdP7CU9rA== - dependencies: - "@lerna/child-process" "4.0.0" - "@lerna/get-npm-exec-opts" "4.0.0" - npmlog "^4.1.2" - -"@lerna/otplease@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/otplease/-/otplease-4.0.0.tgz#84972eb43448f8a1077435ba1c5e59233b725850" - integrity sha512-Sgzbqdk1GH4psNiT6hk+BhjOfIr/5KhGBk86CEfHNJTk9BK4aZYyJD4lpDbDdMjIV4g03G7pYoqHzH765T4fxw== - dependencies: - "@lerna/prompt" "4.0.0" - -"@lerna/output@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/output/-/output-4.0.0.tgz#b1d72215c0e35483e4f3e9994debc82c621851f2" - integrity sha512-Un1sHtO1AD7buDQrpnaYTi2EG6sLF+KOPEAMxeUYG5qG3khTs2Zgzq5WE3dt2N/bKh7naESt20JjIW6tBELP0w== - dependencies: - npmlog "^4.1.2" - -"@lerna/pack-directory@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/pack-directory/-/pack-directory-4.0.0.tgz#8b617db95d20792f043aaaa13a9ccc0e04cb4c74" - integrity sha512-NJrmZNmBHS+5aM+T8N6FVbaKFScVqKlQFJNY2k7nsJ/uklNKsLLl6VhTQBPwMTbf6Tf7l6bcKzpy7aePuq9UiQ== - dependencies: - "@lerna/get-packed" "4.0.0" - "@lerna/package" "4.0.0" - "@lerna/run-lifecycle" "4.0.0" - npm-packlist "^2.1.4" - npmlog "^4.1.2" - tar "^6.1.0" - temp-write "^4.0.0" - -"@lerna/package-graph@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/package-graph/-/package-graph-4.0.0.tgz#16a00253a8ac810f72041481cb46bcee8d8123dd" - integrity sha512-QED2ZCTkfXMKFoTGoccwUzjHtZMSf3UKX14A4/kYyBms9xfFsesCZ6SLI5YeySEgcul8iuIWfQFZqRw+Qrjraw== - dependencies: - "@lerna/prerelease-id-from-version" "4.0.0" - "@lerna/validation-error" "4.0.0" - npm-package-arg "^8.1.0" - npmlog "^4.1.2" - semver "^7.3.4" - -"@lerna/package@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/package/-/package-4.0.0.tgz#1b4c259c4bcff45c876ee1d591a043aacbc0d6b7" - integrity sha512-l0M/izok6FlyyitxiQKr+gZLVFnvxRQdNhzmQ6nRnN9dvBJWn+IxxpM+cLqGACatTnyo9LDzNTOj2Db3+s0s8Q== - dependencies: - load-json-file "^6.2.0" - npm-package-arg "^8.1.0" - write-pkg "^4.0.0" - -"@lerna/prerelease-id-from-version@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-4.0.0.tgz#c7e0676fcee1950d85630e108eddecdd5b48c916" - integrity sha512-GQqguzETdsYRxOSmdFZ6zDBXDErIETWOqomLERRY54f4p+tk4aJjoVdd9xKwehC9TBfIFvlRbL1V9uQGHh1opg== - dependencies: - semver "^7.3.4" - -"@lerna/profiler@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/profiler/-/profiler-4.0.0.tgz#8a53ab874522eae15d178402bff90a14071908e9" - integrity sha512-/BaEbqnVh1LgW/+qz8wCuI+obzi5/vRE8nlhjPzdEzdmWmZXuCKyWSEzAyHOJWw1ntwMiww5dZHhFQABuoFz9Q== - dependencies: - fs-extra "^9.1.0" - npmlog "^4.1.2" - upath "^2.0.1" - -"@lerna/project@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/project/-/project-4.0.0.tgz#ff84893935833533a74deff30c0e64ddb7f0ba6b" - integrity sha512-o0MlVbDkD5qRPkFKlBZsXZjoNTWPyuL58564nSfZJ6JYNmgAptnWPB2dQlAc7HWRZkmnC2fCkEdoU+jioPavbg== - dependencies: - "@lerna/package" "4.0.0" - "@lerna/validation-error" "4.0.0" - cosmiconfig "^7.0.0" - dedent "^0.7.0" - dot-prop "^6.0.1" - glob-parent "^5.1.1" - globby "^11.0.2" - load-json-file "^6.2.0" - npmlog "^4.1.2" - p-map "^4.0.0" - resolve-from "^5.0.0" - write-json-file "^4.3.0" - -"@lerna/prompt@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/prompt/-/prompt-4.0.0.tgz#5ec69a803f3f0db0ad9f221dad64664d3daca41b" - integrity sha512-4Ig46oCH1TH5M7YyTt53fT6TuaKMgqUUaqdgxvp6HP6jtdak6+amcsqB8YGz2eQnw/sdxunx84DfI9XpoLj4bQ== - dependencies: - inquirer "^7.3.3" - npmlog "^4.1.2" - -"@lerna/publish@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/publish/-/publish-4.0.0.tgz#f67011305adeba120066a3b6d984a5bb5fceef65" - integrity sha512-K8jpqjHrChH22qtkytA5GRKIVFEtqBF6JWj1I8dWZtHs4Jywn8yB1jQ3BAMLhqmDJjWJtRck0KXhQQKzDK2UPg== - dependencies: - "@lerna/check-working-tree" "4.0.0" - "@lerna/child-process" "4.0.0" - "@lerna/collect-updates" "4.0.0" - "@lerna/command" "4.0.0" - "@lerna/describe-ref" "4.0.0" - "@lerna/log-packed" "4.0.0" - "@lerna/npm-conf" "4.0.0" - "@lerna/npm-dist-tag" "4.0.0" - "@lerna/npm-publish" "4.0.0" - "@lerna/otplease" "4.0.0" - "@lerna/output" "4.0.0" - "@lerna/pack-directory" "4.0.0" - "@lerna/prerelease-id-from-version" "4.0.0" - "@lerna/prompt" "4.0.0" - "@lerna/pulse-till-done" "4.0.0" - "@lerna/run-lifecycle" "4.0.0" - "@lerna/run-topologically" "4.0.0" - "@lerna/validation-error" "4.0.0" - "@lerna/version" "4.0.0" - fs-extra "^9.1.0" - libnpmaccess "^4.0.1" - npm-package-arg "^8.1.0" - npm-registry-fetch "^9.0.0" - npmlog "^4.1.2" - p-map "^4.0.0" - p-pipe "^3.1.0" - pacote "^11.2.6" - semver "^7.3.4" - -"@lerna/pulse-till-done@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/pulse-till-done/-/pulse-till-done-4.0.0.tgz#04bace7d483a8205c187b806bcd8be23d7bb80a3" - integrity sha512-Frb4F7QGckaybRhbF7aosLsJ5e9WuH7h0KUkjlzSByVycxY91UZgaEIVjS2oN9wQLrheLMHl6SiFY0/Pvo0Cxg== - dependencies: - npmlog "^4.1.2" - -"@lerna/query-graph@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/query-graph/-/query-graph-4.0.0.tgz#09dd1c819ac5ee3f38db23931143701f8a6eef63" - integrity sha512-YlP6yI3tM4WbBmL9GCmNDoeQyzcyg1e4W96y/PKMZa5GbyUvkS2+Jc2kwPD+5KcXou3wQZxSPzR3Te5OenaDdg== - dependencies: - "@lerna/package-graph" "4.0.0" - -"@lerna/resolve-symlink@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/resolve-symlink/-/resolve-symlink-4.0.0.tgz#6d006628a210c9b821964657a9e20a8c9a115e14" - integrity sha512-RtX8VEUzqT+uLSCohx8zgmjc6zjyRlh6i/helxtZTMmc4+6O4FS9q5LJas2uGO2wKvBlhcD6siibGt7dIC3xZA== - dependencies: - fs-extra "^9.1.0" - npmlog "^4.1.2" - read-cmd-shim "^2.0.0" - -"@lerna/rimraf-dir@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/rimraf-dir/-/rimraf-dir-4.0.0.tgz#2edf3b62d4eb0ef4e44e430f5844667d551ec25a" - integrity sha512-QNH9ABWk9mcMJh2/muD9iYWBk1oQd40y6oH+f3wwmVGKYU5YJD//+zMiBI13jxZRtwBx0vmBZzkBkK1dR11cBg== - dependencies: - "@lerna/child-process" "4.0.0" - npmlog "^4.1.2" - path-exists "^4.0.0" - rimraf "^3.0.2" - -"@lerna/run-lifecycle@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/run-lifecycle/-/run-lifecycle-4.0.0.tgz#e648a46f9210a9bcd7c391df6844498cb5079334" - integrity sha512-IwxxsajjCQQEJAeAaxF8QdEixfI7eLKNm4GHhXHrgBu185JcwScFZrj9Bs+PFKxwb+gNLR4iI5rpUdY8Y0UdGQ== - dependencies: - "@lerna/npm-conf" "4.0.0" - npm-lifecycle "^3.1.5" - npmlog "^4.1.2" - -"@lerna/run-topologically@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/run-topologically/-/run-topologically-4.0.0.tgz#af846eeee1a09b0c2be0d1bfb5ef0f7b04bb1827" - integrity sha512-EVZw9hGwo+5yp+VL94+NXRYisqgAlj0jWKWtAIynDCpghRxCE5GMO3xrQLmQgqkpUl9ZxQFpICgYv5DW4DksQA== - dependencies: - "@lerna/query-graph" "4.0.0" - p-queue "^6.6.2" - -"@lerna/run@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/run/-/run-4.0.0.tgz#4bc7fda055a729487897c23579694f6183c91262" - integrity sha512-9giulCOzlMPzcZS/6Eov6pxE9gNTyaXk0Man+iCIdGJNMrCnW7Dme0Z229WWP/UoxDKg71F2tMsVVGDiRd8fFQ== - dependencies: - "@lerna/command" "4.0.0" - "@lerna/filter-options" "4.0.0" - "@lerna/npm-run-script" "4.0.0" - "@lerna/output" "4.0.0" - "@lerna/profiler" "4.0.0" - "@lerna/run-topologically" "4.0.0" - "@lerna/timer" "4.0.0" - "@lerna/validation-error" "4.0.0" - p-map "^4.0.0" - -"@lerna/symlink-binary@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/symlink-binary/-/symlink-binary-4.0.0.tgz#21009f62d53a425f136cb4c1a32c6b2a0cc02d47" - integrity sha512-zualodWC4q1QQc1pkz969hcFeWXOsVYZC5AWVtAPTDfLl+TwM7eG/O6oP+Rr3fFowspxo6b1TQ6sYfDV6HXNWA== - dependencies: - "@lerna/create-symlink" "4.0.0" - "@lerna/package" "4.0.0" - fs-extra "^9.1.0" - p-map "^4.0.0" - -"@lerna/symlink-dependencies@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/symlink-dependencies/-/symlink-dependencies-4.0.0.tgz#8910eca084ae062642d0490d8972cf2d98e9ebbd" - integrity sha512-BABo0MjeUHNAe2FNGty1eantWp8u83BHSeIMPDxNq0MuW2K3CiQRaeWT3EGPAzXpGt0+hVzBrA6+OT0GPn7Yuw== - dependencies: - "@lerna/create-symlink" "4.0.0" - "@lerna/resolve-symlink" "4.0.0" - "@lerna/symlink-binary" "4.0.0" - fs-extra "^9.1.0" - p-map "^4.0.0" - p-map-series "^2.1.0" - -"@lerna/timer@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/timer/-/timer-4.0.0.tgz#a52e51bfcd39bfd768988049ace7b15c1fd7a6da" - integrity sha512-WFsnlaE7SdOvjuyd05oKt8Leg3ENHICnvX3uYKKdByA+S3g+TCz38JsNs7OUZVt+ba63nC2nbXDlUnuT2Xbsfg== - -"@lerna/validation-error@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/validation-error/-/validation-error-4.0.0.tgz#af9d62fe8304eaa2eb9a6ba1394f9aa807026d35" - integrity sha512-1rBOM5/koiVWlRi3V6dB863E1YzJS8v41UtsHgMr6gB2ncJ2LsQtMKlJpi3voqcgh41H8UsPXR58RrrpPpufyw== - dependencies: - npmlog "^4.1.2" - -"@lerna/version@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/version/-/version-4.0.0.tgz#532659ec6154d8a8789c5ab53878663e244e3228" - integrity sha512-otUgiqs5W9zGWJZSCCMRV/2Zm2A9q9JwSDS7s/tlKq4mWCYriWo7+wsHEA/nPTMDyYyBO5oyZDj+3X50KDUzeA== - dependencies: - "@lerna/check-working-tree" "4.0.0" - "@lerna/child-process" "4.0.0" - "@lerna/collect-updates" "4.0.0" - "@lerna/command" "4.0.0" - "@lerna/conventional-commits" "4.0.0" - "@lerna/github-client" "4.0.0" - "@lerna/gitlab-client" "4.0.0" - "@lerna/output" "4.0.0" - "@lerna/prerelease-id-from-version" "4.0.0" - "@lerna/prompt" "4.0.0" - "@lerna/run-lifecycle" "4.0.0" - "@lerna/run-topologically" "4.0.0" - "@lerna/validation-error" "4.0.0" - chalk "^4.1.0" - dedent "^0.7.0" - load-json-file "^6.2.0" - minimatch "^3.0.4" - npmlog "^4.1.2" - p-map "^4.0.0" - p-pipe "^3.1.0" - p-reduce "^2.1.0" - p-waterfall "^2.1.1" - semver "^7.3.4" - slash "^3.0.0" - temp-write "^4.0.0" - write-json-file "^4.3.0" - -"@lerna/write-log-file@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@lerna/write-log-file/-/write-log-file-4.0.0.tgz#18221a38a6a307d6b0a5844dd592ad53fa27091e" - integrity sha512-XRG5BloiArpXRakcnPHmEHJp+4AtnhRtpDIHSghmXD5EichI1uD73J7FgPp30mm2pDRq3FdqB0NbwSEsJ9xFQg== - dependencies: - npmlog "^4.1.2" - write-file-atomic "^3.0.3" - -"@mapbox/rehype-prism@^0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@mapbox/rehype-prism/-/rehype-prism-0.8.0.tgz#c8b6eafb041a97e143fcbf93dd4e319ab0c131d6" - integrity sha512-bIz4a3oZ8g+pQBHSMMIxNpYOMX4yq4aZdpezoiCl9yJudh1Z9SRmHQqH6f+WtTBNOORzXMEGkvBze4PiH17wtA== - dependencies: - hast-util-to-string "^1.0.4" - mrm "^3.0.9" - refractor "^3.4.0" - unist-util-visit "^2.0.3" - -"@mdx-js/mdx@^1.6.22": - version "1.6.22" - resolved "https://registry.yarnpkg.com/@mdx-js/mdx/-/mdx-1.6.22.tgz#8a723157bf90e78f17dc0f27995398e6c731f1ba" - integrity sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA== - dependencies: - "@babel/core" "7.12.9" - "@babel/plugin-syntax-jsx" "7.12.1" - "@babel/plugin-syntax-object-rest-spread" "7.8.3" - "@mdx-js/util" "1.6.22" - babel-plugin-apply-mdx-type-prop "1.6.22" - babel-plugin-extract-import-names "1.6.22" - camelcase-css "2.0.1" - detab "2.0.4" - hast-util-raw "6.0.1" - lodash.uniq "4.5.0" - mdast-util-to-hast "10.0.1" - remark-footnotes "2.0.0" - remark-mdx "1.6.22" - remark-parse "8.0.3" - remark-squeeze-paragraphs "4.0.0" - style-to-object "0.3.0" - unified "9.2.0" - unist-builder "2.0.3" - unist-util-visit "2.0.3" - -"@mdx-js/react@^1.6.22": - version "1.6.22" - resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-1.6.22.tgz#ae09b4744fddc74714ee9f9d6f17a66e77c43573" - integrity sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg== - -"@mdx-js/util@1.6.22": - version "1.6.22" - resolved "https://registry.yarnpkg.com/@mdx-js/util/-/util-1.6.22.tgz#219dfd89ae5b97a8801f015323ffa4b62f45718b" - integrity sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA== - -"@next/env@12.3.4": - version "12.3.4" - resolved "https://registry.yarnpkg.com/@next/env/-/env-12.3.4.tgz#c787837d36fcad75d72ff8df6b57482027d64a47" - integrity sha512-H/69Lc5Q02dq3o+dxxy5O/oNxFsZpdL6WREtOOtOM1B/weonIwDXkekr1KV5DPVPr12IHFPrMrcJQ6bgPMfn7A== +"@next/env@13.5.6": + version "13.5.6" + resolved "https://registry.yarnpkg.com/@next/env/-/env-13.5.6.tgz#c1148e2e1aa166614f05161ee8f77ded467062bc" + integrity sha512-Yac/bV5sBGkkEXmAX5FWPS9Mmo2rthrOPRQQNfycJPkjUAUclomCPH7QFVCDQ4Mp2k2K1SSM6m0zrxYrOwtFQw== -"@next/env@14.0.3": - version "14.0.3" - resolved "https://registry.yarnpkg.com/@next/env/-/env-14.0.3.tgz#9a58b296e7ae04ffebce8a4e5bd0f87f71de86bd" - integrity sha512-7xRqh9nMvP5xrW4/+L0jgRRX+HoNRGnfJpD+5Wq6/13j3dsdzxO3BCXn7D3hMqsDb+vjZnJq+vI7+EtgrYZTeA== +"@next/env@14.1.0": + version "14.1.0" + resolved "https://registry.yarnpkg.com/@next/env/-/env-14.1.0.tgz#43d92ebb53bc0ae43dcc64fb4d418f8f17d7a341" + integrity sha512-Py8zIo+02ht82brwwhTg36iogzFqGLPXlRGKQw5s+qP/kMNc4MAyDeEwBKDijk6zTIbegEgu8Qy7C1LboslQAw== "@next/eslint-plugin-next@12.3.4", "@next/eslint-plugin-next@^12.3.4": version "12.3.4" @@ -2630,12 +2075,12 @@ dependencies: glob "7.1.7" -"@next/eslint-plugin-next@13.5.6": - version "13.5.6" - resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-13.5.6.tgz#cf279b94ddc7de49af8e8957f0c3b7349bc489bf" - integrity sha512-ng7pU/DDsxPgT6ZPvuprxrkeew3XaRf4LAT4FabaEO/hAbvVx4P7wqnqdbTdDn1kgTvsI4tpIgT4Awn/m0bGbg== +"@next/eslint-plugin-next@14.1.0": + version "14.1.0" + resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-14.1.0.tgz#29b041233fac7417e22eefa4146432d5cd910820" + integrity sha512-x4FavbNEeXx/baD/zC/SdrvkjSby8nBn8KcCREqk6UuwvwoAPZmaV8TFCAuo/cpovBRTIY67mHhe86MQQm/68Q== dependencies: - glob "7.1.7" + glob "10.3.10" "@next/swc-android-arm-eabi@12.3.4": version "12.3.4" @@ -2652,20 +2097,30 @@ resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.3.4.tgz#14ac8357010c95e67327f47082af9c9d75d5be79" integrity sha512-DqsSTd3FRjQUR6ao0E1e2OlOcrF5br+uegcEGPVonKYJpcr0MJrtYmPxd4v5T6UCJZ+XzydF7eQo5wdGvSZAyA== -"@next/swc-darwin-arm64@14.0.3": - version "14.0.3" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.0.3.tgz#b1a0440ffbf69056451947c4aea5b6d887e9fbbc" - integrity sha512-64JbSvi3nbbcEtyitNn2LEDS/hcleAFpHdykpcnrstITFlzFgB/bW0ER5/SJJwUPj+ZPY+z3e+1jAfcczRLVGw== +"@next/swc-darwin-arm64@13.5.6": + version "13.5.6" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.5.6.tgz#b15d139d8971360fca29be3bdd703c108c9a45fb" + integrity sha512-5nvXMzKtZfvcu4BhtV0KH1oGv4XEW+B+jOfmBdpFI3C7FrB/MfujRpWYSBBO64+qbW8pkZiSyQv9eiwnn5VIQA== + +"@next/swc-darwin-arm64@14.1.0": + version "14.1.0" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.1.0.tgz#70a57c87ab1ae5aa963a3ba0f4e59e18f4ecea39" + integrity sha512-nUDn7TOGcIeyQni6lZHfzNoo9S0euXnu0jhsbMOmMJUBfgsnESdjN97kM7cBqQxZa8L/bM9om/S5/1dzCrW6wQ== "@next/swc-darwin-x64@12.3.4": version "12.3.4" resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-12.3.4.tgz#e7dc63cd2ac26d15fb84d4d2997207fb9ba7da0f" integrity sha512-PPF7tbWD4k0dJ2EcUSnOsaOJ5rhT3rlEt/3LhZUGiYNL8KvoqczFrETlUx0cUYaXe11dRA3F80Hpt727QIwByQ== -"@next/swc-darwin-x64@14.0.3": - version "14.0.3" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-14.0.3.tgz#48b527ef7eb5dbdcaf62fd107bc3a78371f36f09" - integrity sha512-RkTf+KbAD0SgYdVn1XzqE/+sIxYGB7NLMZRn9I4Z24afrhUpVJx6L8hsRnIwxz3ERE2NFURNliPjJ2QNfnWicQ== +"@next/swc-darwin-x64@13.5.6": + version "13.5.6" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.5.6.tgz#9c72ee31cc356cb65ce6860b658d807ff39f1578" + integrity sha512-6cgBfxg98oOCSr4BckWjLLgiVwlL3vlLj8hXg2b+nDgm4bC/qVXXLfpLB9FHdoDu4057hzywbxKvmYGmi7yUzA== + +"@next/swc-darwin-x64@14.1.0": + version "14.1.0" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-14.1.0.tgz#0863a22feae1540e83c249384b539069fef054e9" + integrity sha512-1jgudN5haWxiAl3O1ljUS2GfupPmcftu2RYJqZiMJmmbBT5M1XDffjUtRUzP4W3cBHsrvkfOFdQ71hAreNQP6g== "@next/swc-freebsd-x64@12.3.4": version "12.3.4" @@ -2682,70 +2137,105 @@ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.3.4.tgz#43a7bc409b03487bff5beb99479cacdc7bd29af5" integrity sha512-kiX0vgJGMZVv+oo1QuObaYulXNvdH/IINmvdZnVzMO/jic/B8EEIGlZ8Bgvw8LCjH3zNVPO3mGrdMvnEEPEhKA== -"@next/swc-linux-arm64-gnu@14.0.3": - version "14.0.3" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.0.3.tgz#0a36475a38b2855ab8ea0fe8b56899bc90184c0f" - integrity sha512-3tBWGgz7M9RKLO6sPWC6c4pAw4geujSwQ7q7Si4d6bo0l6cLs4tmO+lnSwFp1Tm3lxwfMk0SgkJT7EdwYSJvcg== +"@next/swc-linux-arm64-gnu@13.5.6": + version "13.5.6" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.5.6.tgz#59f5f66155e85380ffa26ee3d95b687a770cfeab" + integrity sha512-txagBbj1e1w47YQjcKgSU4rRVQ7uF29YpnlHV5xuVUsgCUf2FmyfJ3CPjZUvpIeXCJAoMCFAoGnbtX86BK7+sg== + +"@next/swc-linux-arm64-gnu@14.1.0": + version "14.1.0" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.1.0.tgz#893da533d3fce4aec7116fe772d4f9b95232423c" + integrity sha512-RHo7Tcj+jllXUbK7xk2NyIDod3YcCPDZxj1WLIYxd709BQ7WuRYl3OWUNG+WUfqeQBds6kvZYlc42NJJTNi4tQ== "@next/swc-linux-arm64-musl@12.3.4": version "12.3.4" resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.3.4.tgz#4d1db6de6dc982b974cd1c52937111e3e4a34bd3" integrity sha512-EETZPa1juczrKLWk5okoW2hv7D7WvonU+Cf2CgsSoxgsYbUCZ1voOpL4JZTOb6IbKMDo6ja+SbY0vzXZBUMvkQ== -"@next/swc-linux-arm64-musl@14.0.3": - version "14.0.3" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.0.3.tgz#25328a9f55baa09fde6364e7e47ade65c655034f" - integrity sha512-v0v8Kb8j8T23jvVUWZeA2D8+izWspeyeDGNaT2/mTHWp7+37fiNfL8bmBWiOmeumXkacM/AB0XOUQvEbncSnHA== +"@next/swc-linux-arm64-musl@13.5.6": + version "13.5.6" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.5.6.tgz#f012518228017052736a87d69bae73e587c76ce2" + integrity sha512-cGd+H8amifT86ZldVJtAKDxUqeFyLWW+v2NlBULnLAdWsiuuN8TuhVBt8ZNpCqcAuoruoSWynvMWixTFcroq+Q== + +"@next/swc-linux-arm64-musl@14.1.0": + version "14.1.0" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.1.0.tgz#d81ddcf95916310b8b0e4ad32b637406564244c0" + integrity sha512-v6kP8sHYxjO8RwHmWMJSq7VZP2nYCkRVQ0qolh2l6xroe9QjbgV8siTbduED4u0hlk0+tjS6/Tuy4n5XCp+l6g== "@next/swc-linux-x64-gnu@12.3.4": version "12.3.4" resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.3.4.tgz#c3b414d77bab08b35f7dd8943d5586f0adb15e38" integrity sha512-4csPbRbfZbuWOk3ATyWcvVFdD9/Rsdq5YHKvRuEni68OCLkfy4f+4I9OBpyK1SKJ00Cih16NJbHE+k+ljPPpag== -"@next/swc-linux-x64-gnu@14.0.3": - version "14.0.3" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.0.3.tgz#594b747e3c8896b2da67bba54fcf8a6b5a410e5e" - integrity sha512-VM1aE1tJKLBwMGtyBR21yy+STfl0MapMQnNrXkxeyLs0GFv/kZqXS5Jw/TQ3TSUnbv0QPDf/X8sDXuMtSgG6eg== +"@next/swc-linux-x64-gnu@13.5.6": + version "13.5.6" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.5.6.tgz#339b867a7e9e7ee727a700b496b269033d820df4" + integrity sha512-Mc2b4xiIWKXIhBy2NBTwOxGD3nHLmq4keFk+d4/WL5fMsB8XdJRdtUlL87SqVCTSaf1BRuQQf1HvXZcy+rq3Nw== + +"@next/swc-linux-x64-gnu@14.1.0": + version "14.1.0" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.1.0.tgz#18967f100ec19938354332dcb0268393cbacf581" + integrity sha512-zJ2pnoFYB1F4vmEVlb/eSe+VH679zT1VdXlZKX+pE66grOgjmKJHKacf82g/sWE4MQ4Rk2FMBCRnX+l6/TVYzQ== "@next/swc-linux-x64-musl@12.3.4": version "12.3.4" resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.3.4.tgz#187a883ec09eb2442a5ebf126826e19037313c61" integrity sha512-YeBmI+63Ro75SUiL/QXEVXQ19T++58aI/IINOyhpsRL1LKdyfK/35iilraZEFz9bLQrwy1LYAR5lK200A9Gjbg== -"@next/swc-linux-x64-musl@14.0.3": - version "14.0.3" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.0.3.tgz#a02da58fc6ecad8cf5c5a2a96a7f6030ec7f6215" - integrity sha512-64EnmKy18MYFL5CzLaSuUn561hbO1Gk16jM/KHznYP3iCIfF9e3yULtHaMy0D8zbHfxset9LTOv6cuYKJgcOxg== +"@next/swc-linux-x64-musl@13.5.6": + version "13.5.6" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.5.6.tgz#ae0ae84d058df758675830bcf70ca1846f1028f2" + integrity sha512-CFHvP9Qz98NruJiUnCe61O6GveKKHpJLloXbDSWRhqhkJdZD2zU5hG+gtVJR//tyW897izuHpM6Gtf6+sNgJPQ== + +"@next/swc-linux-x64-musl@14.1.0": + version "14.1.0" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.1.0.tgz#77077cd4ba8dda8f349dc7ceb6230e68ee3293cf" + integrity sha512-rbaIYFt2X9YZBSbH/CwGAjbBG2/MrACCVu2X0+kSykHzHnYH5FjHxwXLkcoJ10cX0aWCEynpu+rP76x0914atg== "@next/swc-win32-arm64-msvc@12.3.4": version "12.3.4" resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.3.4.tgz#89befa84e453ed2ef9a888f375eba565a0fde80b" integrity sha512-Sd0qFUJv8Tj0PukAYbCCDbmXcMkbIuhnTeHm9m4ZGjCf6kt7E/RMs55Pd3R5ePjOkN7dJEuxYBehawTR/aPDSQ== -"@next/swc-win32-arm64-msvc@14.0.3": - version "14.0.3" - resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.0.3.tgz#bf2be23d3ba2ebd0d4a9376a31f783efdb677b48" - integrity sha512-WRDp8QrmsL1bbGtsh5GqQ/KWulmrnMBgbnb+59qNTW1kVi1nG/2ndZLkcbs2GX7NpFLlToLRMWSQXmPzQm4tog== +"@next/swc-win32-arm64-msvc@13.5.6": + version "13.5.6" + resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.5.6.tgz#a5cc0c16920485a929a17495064671374fdbc661" + integrity sha512-aFv1ejfkbS7PUa1qVPwzDHjQWQtknzAZWGTKYIAaS4NMtBlk3VyA6AYn593pqNanlicewqyl2jUhQAaFV/qXsg== + +"@next/swc-win32-arm64-msvc@14.1.0": + version "14.1.0" + resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.1.0.tgz#5f0b8cf955644104621e6d7cc923cad3a4c5365a" + integrity sha512-o1N5TsYc8f/HpGt39OUQpQ9AKIGApd3QLueu7hXk//2xq5Z9OxmV6sQfNp8C7qYmiOlHYODOGqNNa0e9jvchGQ== "@next/swc-win32-ia32-msvc@12.3.4": version "12.3.4" resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.3.4.tgz#cb50c08f0e40ead63642a7f269f0c8254261f17c" integrity sha512-rt/vv/vg/ZGGkrkKcuJ0LyliRdbskQU+91bje+PgoYmxTZf/tYs6IfbmgudBJk6gH3QnjHWbkphDdRQrseRefQ== -"@next/swc-win32-ia32-msvc@14.0.3": - version "14.0.3" - resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.0.3.tgz#839f8de85a4bf2c3c69242483ab87cb916427551" - integrity sha512-EKffQeqCrj+t6qFFhIFTRoqb2QwX1mU7iTOvMyLbYw3QtqTw9sMwjykyiMlZlrfm2a4fA84+/aeW+PMg1MjuTg== +"@next/swc-win32-ia32-msvc@13.5.6": + version "13.5.6" + resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.5.6.tgz#6a2409b84a2cbf34bf92fe714896455efb4191e4" + integrity sha512-XqqpHgEIlBHvzwG8sp/JXMFkLAfGLqkbVsyN+/Ih1mR8INb6YCc2x/Mbwi6hsAgUnqQztz8cvEbHJUbSl7RHDg== + +"@next/swc-win32-ia32-msvc@14.1.0": + version "14.1.0" + resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.1.0.tgz#21f4de1293ac5e5a168a412b139db5d3420a89d0" + integrity sha512-XXIuB1DBRCFwNO6EEzCTMHT5pauwaSj4SWs7CYnME57eaReAKBXCnkUE80p/pAZcewm7hs+vGvNqDPacEXHVkw== "@next/swc-win32-x64-msvc@12.3.4": version "12.3.4" resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.3.4.tgz#d28ea15a72cdcf96201c60a43e9630cd7fda168f" integrity sha512-DQ20JEfTBZAgF8QCjYfJhv2/279M6onxFjdG/+5B0Cyj00/EdBxiWb2eGGFgQhrBbNv/lsvzFbbi0Ptf8Vw/bg== -"@next/swc-win32-x64-msvc@14.0.3": - version "14.0.3" - resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.0.3.tgz#27b623612b1d0cea6efe0a0d31aa1a335fc99647" - integrity sha512-ERhKPSJ1vQrPiwrs15Pjz/rvDHZmkmvbf/BjPN/UCOI++ODftT0GtasDPi0j+y6PPJi5HsXw+dpRaXUaw4vjuQ== +"@next/swc-win32-x64-msvc@13.5.6": + version "13.5.6" + resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.5.6.tgz#4a3e2a206251abc729339ba85f60bc0433c2865d" + integrity sha512-Cqfe1YmOS7k+5mGu92nl5ULkzpKuxJrP3+4AEuPmrpFZ3BHxTY3TnHmU1On3bFmFFs6FbTcdF58CCUProGpIGQ== + +"@next/swc-win32-x64-msvc@14.1.0": + version "14.1.0" + resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.1.0.tgz#e561fb330466d41807123d932b365cf3d33ceba2" + integrity sha512-9WEbVRRAqJ3YFVqEZIxUqkiO8l1nool1LmNxygr5HWF8AcSYsEpneUDhmjUVJEzO2A04+oPtZdombzzPPkTtgg== "@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1": version "5.1.1-v1" @@ -2775,294 +2265,486 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@npmcli/ci-detect@^1.0.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@npmcli/ci-detect/-/ci-detect-1.4.0.tgz#18478bbaa900c37bfbd8a2006a6262c62e8b0fe1" - integrity sha512-3BGrt6FLjqM6br5AhWRKTr3u5GIVkjRYeAFrMp3HjnfICrg4xOrVRwFavKT6tsp++bq5dluL5t8ME/Nha/6c1Q== +"@npmcli/agent@^2.0.0": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@npmcli/agent/-/agent-2.2.1.tgz#8aa677d0a4136d57524336a35d5679aedf2d56f7" + integrity sha512-H4FrOVtNyWC8MUwL3UfjOsAihHvT1Pe8POj3JvjXhSTJipsZMtgUALCT4mGyYZNxymkUfOw3PUj6dE4QPp6osQ== + dependencies: + agent-base "^7.1.0" + http-proxy-agent "^7.0.0" + https-proxy-agent "^7.0.1" + lru-cache "^10.0.1" + socks-proxy-agent "^8.0.1" -"@npmcli/fs@^1.0.0": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.1.1.tgz#72f719fe935e687c56a4faecf3c03d06ba593257" - integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ== +"@npmcli/fs@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-3.1.0.tgz#233d43a25a91d68c3a863ba0da6a3f00924a173e" + integrity sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w== dependencies: - "@gar/promisify" "^1.0.1" semver "^7.3.5" -"@npmcli/git@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-2.1.0.tgz#2fbd77e147530247d37f325930d457b3ebe894f6" - integrity sha512-/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw== +"@npmcli/git@^5.0.0": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-5.0.4.tgz#d18c50f99649e6e89e8b427318134f582498700c" + integrity sha512-nr6/WezNzuYUppzXRaYu/W4aT5rLxdXqEFupbh6e/ovlYFQ8hpu1UUPV3Ir/YTl+74iXl2ZOMlGzudh9ZPUchQ== dependencies: - "@npmcli/promise-spawn" "^1.3.2" - lru-cache "^6.0.0" - mkdirp "^1.0.4" - npm-pick-manifest "^6.1.1" + "@npmcli/promise-spawn" "^7.0.0" + lru-cache "^10.0.1" + npm-pick-manifest "^9.0.0" + proc-log "^3.0.0" promise-inflight "^1.0.1" promise-retry "^2.0.1" semver "^7.3.5" - which "^2.0.2" + which "^4.0.0" -"@npmcli/installed-package-contents@^1.0.6": - version "1.0.7" - resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz#ab7408c6147911b970a8abe261ce512232a3f4fa" - integrity sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw== +"@npmcli/installed-package-contents@^2.0.1": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz#bfd817eccd9e8df200919e73f57f9e3d9e4f9e33" + integrity sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ== dependencies: - npm-bundled "^1.1.1" - npm-normalize-package-bin "^1.0.1" + npm-bundled "^3.0.0" + npm-normalize-package-bin "^3.0.0" -"@npmcli/move-file@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" - integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== - dependencies: - mkdirp "^1.0.4" - rimraf "^3.0.2" +"@npmcli/node-gyp@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz#101b2d0490ef1aa20ed460e4c0813f0db560545a" + integrity sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA== -"@npmcli/node-gyp@^1.0.2": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-1.0.3.tgz#a912e637418ffc5f2db375e93b85837691a43a33" - integrity sha512-fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA== +"@npmcli/package-json@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-5.0.0.tgz#77d0f8b17096763ccbd8af03b7117ba6e34d6e91" + integrity sha512-OI2zdYBLhQ7kpNPaJxiflofYIpkNLi+lnGdzqUOfRmCF3r2l1nadcjtCYMJKv/Utm/ZtlffaUuTiAktPHbc17g== + dependencies: + "@npmcli/git" "^5.0.0" + glob "^10.2.2" + hosted-git-info "^7.0.0" + json-parse-even-better-errors "^3.0.0" + normalize-package-data "^6.0.0" + proc-log "^3.0.0" + semver "^7.5.3" -"@npmcli/promise-spawn@^1.2.0", "@npmcli/promise-spawn@^1.3.2": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz#42d4e56a8e9274fba180dabc0aea6e38f29274f5" - integrity sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg== +"@npmcli/promise-spawn@^7.0.0": + version "7.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-7.0.1.tgz#a836de2f42a2245d629cf6fbb8dd6c74c74c55af" + integrity sha512-P4KkF9jX3y+7yFUxgcUdDtLy+t4OlDGuEBLNs57AZsfSfg+uV6MLndqGpnl4831ggaEdXwR50XFoZP4VFtHolg== dependencies: - infer-owner "^1.0.4" + which "^4.0.0" -"@npmcli/run-script@^1.8.2": - version "1.8.6" - resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-1.8.6.tgz#18314802a6660b0d4baa4c3afe7f1ad39d8c28b7" - integrity sha512-e42bVZnC6VluBZBAFEr3YrdqSspG3bgilyg4nSLBJ7TRGNCzxHa92XAHxQBLYg0BmgwO4b2mf3h/l5EkEWRn3g== +"@npmcli/run-script@7.0.2": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-7.0.2.tgz#497e7f058799497889df65900c711312252276d3" + integrity sha512-Omu0rpA8WXvcGeY6DDzyRoY1i5DkCBkzyJ+m2u7PD6quzb0TvSqdIPOkTn8ZBOj7LbbcbMfZ3c5skwSu6m8y2w== dependencies: - "@npmcli/node-gyp" "^1.0.2" - "@npmcli/promise-spawn" "^1.3.2" - node-gyp "^7.1.0" - read-package-json-fast "^2.0.1" + "@npmcli/node-gyp" "^3.0.0" + "@npmcli/promise-spawn" "^7.0.0" + node-gyp "^10.0.0" + read-package-json-fast "^3.0.0" + which "^4.0.0" -"@octokit/auth-token@^2.4.4": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.5.0.tgz#27c37ea26c205f28443402477ffd261311f21e36" - integrity sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g== - dependencies: - "@octokit/types" "^6.0.3" +"@npmcli/run-script@^7.0.0": + version "7.0.4" + resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-7.0.4.tgz#9f29aaf4bfcf57f7de2a9e28d1ef091d14b2e6eb" + integrity sha512-9ApYM/3+rBt9V80aYg6tZfzj3UWdiYyCt7gJUD1VJKvWF5nwKDSICXbYIQbspFTq6TOpbsEtIC0LArB8d9PFmg== + dependencies: + "@npmcli/node-gyp" "^3.0.0" + "@npmcli/package-json" "^5.0.0" + "@npmcli/promise-spawn" "^7.0.0" + node-gyp "^10.0.0" + which "^4.0.0" + +"@nrwl/devkit@18.0.4": + version "18.0.4" + resolved "https://registry.yarnpkg.com/@nrwl/devkit/-/devkit-18.0.4.tgz#5135f2f27218ca34d7b93f95f9967f75320ce75a" + integrity sha512-fKHnjg4/9MdFd2U4e8p6ja9fRa864DCyF70kB4YUB9NuUIgWLQ15Uj6wXC3xjdXmxQRyHDa7ORodVoFzdo4UCg== + dependencies: + "@nx/devkit" "18.0.4" + +"@nrwl/tao@18.0.4": + version "18.0.4" + resolved "https://registry.yarnpkg.com/@nrwl/tao/-/tao-18.0.4.tgz#a74933a4c7d1b7c6467a526e9ac524f3b8edd212" + integrity sha512-/PzGOJevlDQnp5RPXF3WDe+w1cdohGkY+mbJUgDVA4Q5JEPT1DtE10h9GgdHdzkPjVPNYsaI4Vs/53NUdlVHHA== + dependencies: + nx "18.0.4" + tslib "^2.3.0" + +"@nx/devkit@18.0.4", "@nx/devkit@>=17.1.2 < 19": + version "18.0.4" + resolved "https://registry.yarnpkg.com/@nx/devkit/-/devkit-18.0.4.tgz#fec28139ef5d078933c5f1b5a7e0a585672dbdd6" + integrity sha512-Vs1AXgOjMJyaWpKopD04dy0FwQ22n5ZR1bFf98Ab4Ht0WJwJE90IpUVAkwI03n5BYxAKOlQnFltsB4gu6Y8mZQ== + dependencies: + "@nrwl/devkit" "18.0.4" + ejs "^3.1.7" + enquirer "~2.3.6" + ignore "^5.0.4" + semver "^7.5.3" + tmp "~0.2.1" + tslib "^2.3.0" + yargs-parser "21.1.1" + +"@nx/nx-darwin-arm64@18.0.4": + version "18.0.4" + resolved "https://registry.yarnpkg.com/@nx/nx-darwin-arm64/-/nx-darwin-arm64-18.0.4.tgz#c199b44ee21699acb14f6ecbada56ed19af936a3" + integrity sha512-9KJVONxUwdnFHHRNocsg7q5pliOTTfbjlr3rvhLuroV5HeTJFhUipKCQrVEhLy8e4auRdLuSz/HsgpJat3Z2cg== + +"@nx/nx-darwin-x64@18.0.4": + version "18.0.4" + resolved "https://registry.yarnpkg.com/@nx/nx-darwin-x64/-/nx-darwin-x64-18.0.4.tgz#859896881930d346afd6397b593f8d436722b80d" + integrity sha512-rFKHjeU0Ngz1R7UJAsbncpqwuFDjUdpcvI783r6s2eP7JoiiwtDBXvDcHiy8Odk0lPYmwDELaFZBhvdENqaDNA== + +"@nx/nx-freebsd-x64@18.0.4": + version "18.0.4" + resolved "https://registry.yarnpkg.com/@nx/nx-freebsd-x64/-/nx-freebsd-x64-18.0.4.tgz#2f295ff841e38f720aa9761e2c9eda90e372b380" + integrity sha512-jJx47wgRoUxVpQ+WG5+yLdxtJVuVgjphiTMRc0LOfUwKQaEHWyCA0hMK5fNmo0FAHIhGVCb/j2j9FxnCWTWpkg== + +"@nx/nx-linux-arm-gnueabihf@18.0.4": + version "18.0.4" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-18.0.4.tgz#7ceb5531887996f4cf5e9ebda8dab34421d3a061" + integrity sha512-C3qWbFhEMIdTzvAHlIUHecZN3YBu7bx3S0p3gPNGmEMUMbYHP2zMlimBrZIbAxzntyGqWCqhXiFB21QhJ0t1Dw== + +"@nx/nx-linux-arm64-gnu@18.0.4": + version "18.0.4" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-18.0.4.tgz#cfda70cedab2f3a7c5a9bb11ad4be180993b68c8" + integrity sha512-PxVMh9ikp8Q3hKagb66FAsek8O/08GcMF5dXBH7xc5AiQMaZ6Az/gAXOeHp274nmu3StQEpl9Il/YH6Z9f4V0w== + +"@nx/nx-linux-arm64-musl@18.0.4": + version "18.0.4" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-18.0.4.tgz#1ce43e4803d3d5b3aeefa43ec54df7501b04a0b7" + integrity sha512-Iz7Z4h2/dXJJvBcyeRHa+d3Ncc4Qz+OiGm6iRDXv4zjFm5EyC1tkSZIFNlNiRjmTToNHFr4savrCjCh8wRYejw== + +"@nx/nx-linux-x64-gnu@18.0.4": + version "18.0.4" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-18.0.4.tgz#0981787e067d6dd7e3f4f457eb3e24c9b12dccaa" + integrity sha512-BVLkegIwxHnEB64VBraBxyC01D3C3dVNxq2b4iNaqr4mpWNmos+G/mvcTU3NS7W8ZjpBjlXgdEkpgkl2hMKTEA== + +"@nx/nx-linux-x64-musl@18.0.4": + version "18.0.4" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-18.0.4.tgz#d2857870922ee76ed9f50763ec8bd3c6244c998a" + integrity sha512-WgVy41psjCE9uxjFi4P62UrWyKQ1e2IN2FZaIuwXEB9h8OU/+g9PFpL1Cs1llNoEKnapKXX4+9b5FHF9i7EKQw== + +"@nx/nx-win32-arm64-msvc@18.0.4": + version "18.0.4" + resolved "https://registry.yarnpkg.com/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-18.0.4.tgz#92c76b7b0e1616c273a231afc0f23f1a5e68f655" + integrity sha512-YoxhOrVKnS+kcNTnCg9M61cbigzGErYgnlI8kdZzH2ArD7mhv8bfZnSZUInf5Y8oDBVpKusel7AkCSofzSwigA== + +"@nx/nx-win32-x64-msvc@18.0.4": + version "18.0.4" + resolved "https://registry.yarnpkg.com/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-18.0.4.tgz#c57cbb5e42b10322cb966270a32a2f7869634186" + integrity sha512-FdAdl5buvtUXp8hZVRkK0AZeiCu35l0u+yHsulNViYdh3OXRT1hYJ0CeqpxlLfvbHqB9JzDPtJtG0dpKHH/O0Q== + +"@octokit/auth-token@^3.0.0": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-3.0.4.tgz#70e941ba742bdd2b49bdb7393e821dea8520a3db" + integrity sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ== -"@octokit/core@^3.5.1": - version "3.6.0" - resolved "https://registry.yarnpkg.com/@octokit/core/-/core-3.6.0.tgz#3376cb9f3008d9b3d110370d90e0a1fcd5fe6085" - integrity sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q== - dependencies: - "@octokit/auth-token" "^2.4.4" - "@octokit/graphql" "^4.5.8" - "@octokit/request" "^5.6.3" - "@octokit/request-error" "^2.0.5" - "@octokit/types" "^6.0.3" +"@octokit/core@^4.2.1": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@octokit/core/-/core-4.2.4.tgz#d8769ec2b43ff37cc3ea89ec4681a20ba58ef907" + integrity sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ== + dependencies: + "@octokit/auth-token" "^3.0.0" + "@octokit/graphql" "^5.0.0" + "@octokit/request" "^6.0.0" + "@octokit/request-error" "^3.0.0" + "@octokit/types" "^9.0.0" before-after-hook "^2.2.0" universal-user-agent "^6.0.0" -"@octokit/endpoint@^6.0.1": - version "6.0.12" - resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.12.tgz#3b4d47a4b0e79b1027fb8d75d4221928b2d05658" - integrity sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA== +"@octokit/endpoint@^7.0.0": + version "7.0.6" + resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-7.0.6.tgz#791f65d3937555141fb6c08f91d618a7d645f1e2" + integrity sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg== dependencies: - "@octokit/types" "^6.0.3" + "@octokit/types" "^9.0.0" is-plain-object "^5.0.0" universal-user-agent "^6.0.0" -"@octokit/graphql@^4.5.8": - version "4.8.0" - resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-4.8.0.tgz#664d9b11c0e12112cbf78e10f49a05959aa22cc3" - integrity sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg== +"@octokit/graphql@^5.0.0": + version "5.0.6" + resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-5.0.6.tgz#9eac411ac4353ccc5d3fca7d76736e6888c5d248" + integrity sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw== dependencies: - "@octokit/request" "^5.6.0" - "@octokit/types" "^6.0.3" + "@octokit/request" "^6.0.0" + "@octokit/types" "^9.0.0" universal-user-agent "^6.0.0" -"@octokit/openapi-types@^12.11.0": - version "12.11.0" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-12.11.0.tgz#da5638d64f2b919bca89ce6602d059f1b52d3ef0" - integrity sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ== +"@octokit/openapi-types@^18.0.0": + version "18.1.1" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-18.1.1.tgz#09bdfdabfd8e16d16324326da5148010d765f009" + integrity sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw== -"@octokit/plugin-enterprise-rest@^6.0.1": +"@octokit/plugin-enterprise-rest@6.0.1": version "6.0.1" resolved "https://registry.yarnpkg.com/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz#e07896739618dab8da7d4077c658003775f95437" integrity sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw== -"@octokit/plugin-paginate-rest@^2.16.8": - version "2.21.3" - resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.21.3.tgz#7f12532797775640dbb8224da577da7dc210c87e" - integrity sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw== +"@octokit/plugin-paginate-rest@^6.1.2": + version "6.1.2" + resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.1.2.tgz#f86456a7a1fe9e58fec6385a85cf1b34072341f8" + integrity sha512-qhrmtQeHU/IivxucOV1bbI/xZyC/iOBhclokv7Sut5vnejAIAEXVcGQeRpQlU39E0WwK9lNvJHphHri/DB6lbQ== dependencies: - "@octokit/types" "^6.40.0" + "@octokit/tsconfig" "^1.0.2" + "@octokit/types" "^9.2.3" "@octokit/plugin-request-log@^1.0.4": version "1.0.4" resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz#5e50ed7083a613816b1e4a28aeec5fb7f1462e85" integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA== -"@octokit/plugin-rest-endpoint-methods@^5.12.0": - version "5.16.2" - resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.16.2.tgz#7ee8bf586df97dd6868cf68f641354e908c25342" - integrity sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw== +"@octokit/plugin-rest-endpoint-methods@^7.1.2": + version "7.2.3" + resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.2.3.tgz#37a84b171a6cb6658816c82c4082ac3512021797" + integrity sha512-I5Gml6kTAkzVlN7KCtjOM+Ruwe/rQppp0QU372K1GP7kNOYEKe8Xn5BW4sE62JAHdwpq95OQK/qGNyKQMUzVgA== dependencies: - "@octokit/types" "^6.39.0" - deprecation "^2.3.1" + "@octokit/types" "^10.0.0" -"@octokit/request-error@^2.0.5", "@octokit/request-error@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-2.1.0.tgz#9e150357831bfc788d13a4fd4b1913d60c74d677" - integrity sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg== +"@octokit/request-error@^3.0.0": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-3.0.3.tgz#ef3dd08b8e964e53e55d471acfe00baa892b9c69" + integrity sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ== dependencies: - "@octokit/types" "^6.0.3" + "@octokit/types" "^9.0.0" deprecation "^2.0.0" once "^1.4.0" -"@octokit/request@^5.6.0", "@octokit/request@^5.6.3": - version "5.6.3" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.6.3.tgz#19a022515a5bba965ac06c9d1334514eb50c48b0" - integrity sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A== +"@octokit/request@^6.0.0": + version "6.2.8" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-6.2.8.tgz#aaf480b32ab2b210e9dadd8271d187c93171d8eb" + integrity sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw== dependencies: - "@octokit/endpoint" "^6.0.1" - "@octokit/request-error" "^2.1.0" - "@octokit/types" "^6.16.1" + "@octokit/endpoint" "^7.0.0" + "@octokit/request-error" "^3.0.0" + "@octokit/types" "^9.0.0" is-plain-object "^5.0.0" node-fetch "^2.6.7" universal-user-agent "^6.0.0" -"@octokit/rest@^18.1.0": - version "18.12.0" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-18.12.0.tgz#f06bc4952fc87130308d810ca9d00e79f6988881" - integrity sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q== +"@octokit/rest@19.0.11": + version "19.0.11" + resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-19.0.11.tgz#2ae01634fed4bd1fca5b642767205ed3fd36177c" + integrity sha512-m2a9VhaP5/tUw8FwfnW2ICXlXpLPIqxtg3XcAiGMLj/Xhw3RSBfZ8le/466ktO1Gcjr8oXudGnHhxV1TXJgFxw== dependencies: - "@octokit/core" "^3.5.1" - "@octokit/plugin-paginate-rest" "^2.16.8" + "@octokit/core" "^4.2.1" + "@octokit/plugin-paginate-rest" "^6.1.2" "@octokit/plugin-request-log" "^1.0.4" - "@octokit/plugin-rest-endpoint-methods" "^5.12.0" + "@octokit/plugin-rest-endpoint-methods" "^7.1.2" -"@octokit/types@^6.0.3", "@octokit/types@^6.16.1", "@octokit/types@^6.39.0", "@octokit/types@^6.40.0": - version "6.41.0" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.41.0.tgz#e58ef78d78596d2fb7df9c6259802464b5f84a04" - integrity sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg== +"@octokit/tsconfig@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@octokit/tsconfig/-/tsconfig-1.0.2.tgz#59b024d6f3c0ed82f00d08ead5b3750469125af7" + integrity sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA== + +"@octokit/types@^10.0.0": + version "10.0.0" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-10.0.0.tgz#7ee19c464ea4ada306c43f1a45d444000f419a4a" + integrity sha512-Vm8IddVmhCgU1fxC1eyinpwqzXPEYu0NrYzD3YZjlGjyftdLBTeqNblRC0jmJmgxbJIsQlyogVeGnrNaaMVzIg== + dependencies: + "@octokit/openapi-types" "^18.0.0" + +"@octokit/types@^9.0.0", "@octokit/types@^9.2.3": + version "9.3.2" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-9.3.2.tgz#3f5f89903b69f6a2d196d78ec35f888c0013cac5" + integrity sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA== dependencies: - "@octokit/openapi-types" "^12.11.0" + "@octokit/openapi-types" "^18.0.0" "@panva/hkdf@^1.0.2": version "1.1.1" resolved "https://registry.yarnpkg.com/@panva/hkdf/-/hkdf-1.1.1.tgz#ab9cd8755d1976e72fc77a00f7655a64efe6cd5d" integrity sha512-dhPeilub1NuIG0X5Kvhh9lH4iW3ZsHlnzwgwbOlgwQ2wG1IqFzsgHqmKPk3WzsdWAeaxKJxgM0+W433RmN45GA== -"@pkgr/utils@^2.3.1": - version "2.4.2" - resolved "https://registry.yarnpkg.com/@pkgr/utils/-/utils-2.4.2.tgz#9e638bbe9a6a6f165580dc943f138fd3309a2cbc" - integrity sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw== - dependencies: - cross-spawn "^7.0.3" - fast-glob "^3.3.0" - is-glob "^4.0.3" - open "^9.1.0" - picocolors "^1.0.0" - tslib "^2.6.0" +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== -"@rollup/rollup-android-arm-eabi@4.4.1": - version "4.4.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.4.1.tgz#f276b0fa322270aa42d1f56c982db6ef8d6a4393" - integrity sha512-Ss4suS/sd+6xLRu+MLCkED2mUrAyqHmmvZB+zpzZ9Znn9S8wCkTQCJaQ8P8aHofnvG5L16u9MVnJjCqioPErwQ== +"@pkgr/core@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.1.1.tgz#1ec17e2edbec25c8306d424ecfbf13c7de1aaa31" + integrity sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA== + +"@rollup/rollup-android-arm-eabi@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.12.0.tgz#38c3abd1955a3c21d492af6b1a1dca4bb1d894d6" + integrity sha512-+ac02NL/2TCKRrJu2wffk1kZ+RyqxVUlbjSagNgPm94frxtr+XDL12E5Ll1enWskLrtrZ2r8L3wED1orIibV/w== + +"@rollup/rollup-android-arm64@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.12.0.tgz#3822e929f415627609e53b11cec9a4be806de0e2" + integrity sha512-OBqcX2BMe6nvjQ0Nyp7cC90cnumt8PXmO7Dp3gfAju/6YwG0Tj74z1vKrfRz7qAv23nBcYM8BCbhrsWqO7PzQQ== + +"@rollup/rollup-darwin-arm64@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.12.0.tgz#6c082de71f481f57df6cfa3701ab2a7afde96f69" + integrity sha512-X64tZd8dRE/QTrBIEs63kaOBG0b5GVEd3ccoLtyf6IdXtHdh8h+I56C2yC3PtC9Ucnv0CpNFJLqKFVgCYe0lOQ== + +"@rollup/rollup-darwin-x64@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.12.0.tgz#c34ca0d31f3c46a22c9afa0e944403eea0edcfd8" + integrity sha512-cc71KUZoVbUJmGP2cOuiZ9HSOP14AzBAThn3OU+9LcA1+IUqswJyR1cAJj3Mg55HbjZP6OLAIscbQsQLrpgTOg== + +"@rollup/rollup-linux-arm-gnueabihf@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.12.0.tgz#48e899c1e438629c072889b824a98787a7c2362d" + integrity sha512-a6w/Y3hyyO6GlpKL2xJ4IOh/7d+APaqLYdMf86xnczU3nurFTaVN9s9jOXQg97BE4nYm/7Ga51rjec5nfRdrvA== + +"@rollup/rollup-linux-arm64-gnu@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.12.0.tgz#788c2698a119dc229062d40da6ada8a090a73a68" + integrity sha512-0fZBq27b+D7Ar5CQMofVN8sggOVhEtzFUwOwPppQt0k+VR+7UHMZZY4y+64WJ06XOhBTKXtQB/Sv0NwQMXyNAA== + +"@rollup/rollup-linux-arm64-musl@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.12.0.tgz#3882a4e3a564af9e55804beeb67076857b035ab7" + integrity sha512-eTvzUS3hhhlgeAv6bfigekzWZjaEX9xP9HhxB0Dvrdbkk5w/b+1Sxct2ZuDxNJKzsRStSq1EaEkVSEe7A7ipgQ== + +"@rollup/rollup-linux-riscv64-gnu@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.12.0.tgz#0c6ad792e1195c12bfae634425a3d2aa0fe93ab7" + integrity sha512-ix+qAB9qmrCRiaO71VFfY8rkiAZJL8zQRXveS27HS+pKdjwUfEhqo2+YF2oI+H/22Xsiski+qqwIBxVewLK7sw== + +"@rollup/rollup-linux-x64-gnu@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.12.0.tgz#9d62485ea0f18d8674033b57aa14fb758f6ec6e3" + integrity sha512-TenQhZVOtw/3qKOPa7d+QgkeM6xY0LtwzR8OplmyL5LrgTWIXpTQg2Q2ycBf8jm+SFW2Wt/DTn1gf7nFp3ssVA== + +"@rollup/rollup-linux-x64-musl@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.12.0.tgz#50e8167e28b33c977c1f813def2b2074d1435e05" + integrity sha512-LfFdRhNnW0zdMvdCb5FNuWlls2WbbSridJvxOvYWgSBOYZtgBfW9UGNJG//rwMqTX1xQE9BAodvMH9tAusKDUw== + +"@rollup/rollup-win32-arm64-msvc@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.12.0.tgz#68d233272a2004429124494121a42c4aebdc5b8e" + integrity sha512-JPDxovheWNp6d7AHCgsUlkuCKvtu3RB55iNEkaQcf0ttsDU/JZF+iQnYcQJSk/7PtT4mjjVG8N1kpwnI9SLYaw== + +"@rollup/rollup-win32-ia32-msvc@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.12.0.tgz#366ca62221d1689e3b55a03f4ae12ae9ba595d40" + integrity sha512-fjtuvMWRGJn1oZacG8IPnzIV6GF2/XG+h71FKn76OYFqySXInJtseAqdprVTDTyqPxQOG9Exak5/E9Z3+EJ8ZA== + +"@rollup/rollup-win32-x64-msvc@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.12.0.tgz#9ffdf9ed133a7464f4ae187eb9e1294413fab235" + integrity sha512-ZYmr5mS2wd4Dew/JjT0Fqi2NPB/ZhZ2VvPp7SmvPZb4Y1CG/LRcS6tcRo2cYU7zLK5A7cdbhWnnWmUjoI4qapg== -"@rollup/rollup-android-arm64@4.4.1": - version "4.4.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.4.1.tgz#f0492f00d18e1067785f8e820e137c00528c5e62" - integrity sha512-sRSkGTvGsARwWd7TzC8LKRf8FiPn7257vd/edzmvG4RIr9x68KBN0/Ek48CkuUJ5Pj/Dp9vKWv6PEupjKWjTYA== +"@rushstack/eslint-patch@^1.1.3", "@rushstack/eslint-patch@^1.3.3": + version "1.7.2" + resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.7.2.tgz#2d4260033e199b3032a08b41348ac10de21c47e9" + integrity sha512-RbhOOTCNoCrbfkRyoXODZp75MlpiHMgbE5MEBZAnnnLyQNgrigEj4p0lzsMDyc1zVsJDLrivB58tgg3emX0eEA== -"@rollup/rollup-darwin-arm64@4.4.1": - version "4.4.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.4.1.tgz#40443db7f4559171d797581e0618ec1a4c8dcee9" - integrity sha512-nz0AiGrrXyaWpsmBXUGOBiRDU0wyfSXbFuF98pPvIO8O6auQsPG6riWsfQqmCCC5FNd8zKQ4JhgugRNAkBJ8mQ== +"@sideway/address@^4.1.5": + version "4.1.5" + resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.5.tgz#4bc149a0076623ced99ca8208ba780d65a99b9d5" + integrity sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q== + dependencies: + "@hapi/hoek" "^9.0.0" -"@rollup/rollup-darwin-x64@4.4.1": - version "4.4.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.4.1.tgz#2868f37a9f9c2c22c091b6209f6ce7454437edf9" - integrity sha512-Ogqvf4/Ve/faMaiPRvzsJEqajbqs00LO+8vtrPBVvLgdw4wBg6ZDXdkDAZO+4MLnrc8mhGV6VJAzYScZdPLtJg== +"@sideway/formula@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.1.tgz#80fcbcbaf7ce031e0ef2dd29b1bfc7c3f583611f" + integrity sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg== -"@rollup/rollup-linux-arm-gnueabihf@4.4.1": - version "4.4.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.4.1.tgz#d78d7ad358d24058166ab5599de3dcb5ab951add" - integrity sha512-9zc2tqlr6HfO+hx9+wktUlWTRdje7Ub15iJqKcqg5uJZ+iKqmd2CMxlgPpXi7+bU7bjfDIuvCvnGk7wewFEhCg== +"@sideway/pinpoint@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" + integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== -"@rollup/rollup-linux-arm64-gnu@4.4.1": - version "4.4.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.4.1.tgz#5d07588b40a04f5b6fbd9e0169c8dc32c1c2ed21" - integrity sha512-phLb1fN3rq2o1j1v+nKxXUTSJnAhzhU0hLrl7Qzb0fLpwkGMHDem+o6d+ZI8+/BlTXfMU4kVWGvy6g9k/B8L6Q== +"@sigstore/bundle@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@sigstore/bundle/-/bundle-1.1.0.tgz#17f8d813b09348b16eeed66a8cf1c3d6bd3d04f1" + integrity sha512-PFutXEy0SmQxYI4texPw3dd2KewuNqv7OuK1ZFtY2fM754yhvG2KdgwIhRnoEE2uHdtdGNQ8s0lb94dW9sELog== + dependencies: + "@sigstore/protobuf-specs" "^0.2.0" -"@rollup/rollup-linux-arm64-musl@4.4.1": - version "4.4.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.4.1.tgz#d452e88a02755f449f6e98d4ce424d655ef42cfe" - integrity sha512-M2sDtw4tf57VPSjbTAN/lz1doWUqO2CbQuX3L9K6GWIR5uw9j+ROKCvvUNBY8WUbMxwaoc8mH9HmmBKsLht7+w== +"@sigstore/bundle@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@sigstore/bundle/-/bundle-2.2.0.tgz#e3f555a5c503fe176d8d1e0e829b00f842502e46" + integrity sha512-5VI58qgNs76RDrwXNhpmyN/jKpq9evV/7f1XrcqcAfvxDl5SeVY/I5Rmfe96ULAV7/FK5dge9RBKGBJPhL1WsQ== + dependencies: + "@sigstore/protobuf-specs" "^0.3.0" -"@rollup/rollup-linux-x64-gnu@4.4.1": - version "4.4.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.4.1.tgz#e8e8e87ab098784383a5ced4aa4bbfa7b2c92a4e" - integrity sha512-mHIlRLX+hx+30cD6c4BaBOsSqdnCE4ok7/KDvjHYAHoSuveoMMxIisZFvcLhUnyZcPBXDGZTuBoalcuh43UfQQ== +"@sigstore/core@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@sigstore/core/-/core-1.0.0.tgz#0fcdb32d191d4145a70cb837061185353b3b08e3" + integrity sha512-dW2qjbWLRKGu6MIDUTBuJwXCnR8zivcSpf5inUzk7y84zqy/dji0/uahppoIgMoKeR+6pUZucrwHfkQQtiG9Rw== -"@rollup/rollup-linux-x64-musl@4.4.1": - version "4.4.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.4.1.tgz#3e5da42626672e2d620ed12746158b0cf6143b23" - integrity sha512-tB+RZuDi3zxFx7vDrjTNGVLu2KNyzYv+UY8jz7e4TMEoAj7iEt8Qk6xVu6mo3pgjnsHj6jnq3uuRsHp97DLwOA== +"@sigstore/protobuf-specs@^0.2.0": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@sigstore/protobuf-specs/-/protobuf-specs-0.2.1.tgz#be9ef4f3c38052c43bd399d3f792c97ff9e2277b" + integrity sha512-XTWVxnWJu+c1oCshMLwnKvz8ZQJJDVOlciMfgpJBQbThVjKTCG8dwyhgLngBD2KN0ap9F/gOV8rFDEx8uh7R2A== -"@rollup/rollup-win32-arm64-msvc@4.4.1": - version "4.4.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.4.1.tgz#0f0d0c6b75c53643fab8238c76889a95bca3b9cc" - integrity sha512-Hdn39PzOQowK/HZzYpCuZdJC91PE6EaGbTe2VCA9oq2u18evkisQfws0Smh9QQGNNRa/T7MOuGNQoLeXhhE3PQ== +"@sigstore/protobuf-specs@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@sigstore/protobuf-specs/-/protobuf-specs-0.3.0.tgz#bdcc773671f625bb81591bca86ec5314d57297f3" + integrity sha512-zxiQ66JFOjVvP9hbhGj/F/qNdsZfkGb/dVXSanNRNuAzMlr4MC95voPUBX8//ZNnmv3uSYzdfR/JSkrgvZTGxA== -"@rollup/rollup-win32-ia32-msvc@4.4.1": - version "4.4.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.4.1.tgz#8bb9e8fbf0fdf96fe3bebcee23f5cfdbbd9a4a0a" - integrity sha512-tLpKb1Elm9fM8c5w3nl4N1eLTP4bCqTYw9tqUBxX8/hsxqHO3dxc2qPbZ9PNkdK4tg4iLEYn0pOUnVByRd2CbA== +"@sigstore/sign@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@sigstore/sign/-/sign-1.0.0.tgz#6b08ebc2f6c92aa5acb07a49784cb6738796f7b4" + integrity sha512-INxFVNQteLtcfGmcoldzV6Je0sbbfh9I16DM4yJPw3j5+TFP8X6uIiA18mvpEa9yyeycAKgPmOA3X9hVdVTPUA== + dependencies: + "@sigstore/bundle" "^1.1.0" + "@sigstore/protobuf-specs" "^0.2.0" + make-fetch-happen "^11.0.1" -"@rollup/rollup-win32-x64-msvc@4.4.1": - version "4.4.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.4.1.tgz#8311b77e6cce322865ba12ada8c3779369610d18" - integrity sha512-eAhItDX9yQtZVM3yvXS/VR3qPqcnXvnLyx1pLXl4JzyNMBNO3KC986t/iAg2zcMzpAp9JSvxB5VZGnBiNoA98w== +"@sigstore/sign@^2.2.3": + version "2.2.3" + resolved "https://registry.yarnpkg.com/@sigstore/sign/-/sign-2.2.3.tgz#f07bcd2cfee654fade867db44ae260f1a0142ba4" + integrity sha512-LqlA+ffyN02yC7RKszCdMTS6bldZnIodiox+IkT8B2f8oRYXCB3LQ9roXeiEL21m64CVH1wyveYAORfD65WoSw== + dependencies: + "@sigstore/bundle" "^2.2.0" + "@sigstore/core" "^1.0.0" + "@sigstore/protobuf-specs" "^0.3.0" + make-fetch-happen "^13.0.0" -"@rushstack/eslint-patch@^1.1.3", "@rushstack/eslint-patch@^1.3.3": - version "1.5.1" - resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.5.1.tgz#5f1b518ec5fa54437c0b7c4a821546c64fed6922" - integrity sha512-6i/8UoL0P5y4leBIGzvkZdS85RDMG9y1ihZzmTZQ5LdHUYmZ7pKFoj8X0236s3lusPs1Fa5HTQUpwI+UfTcmeA== +"@sigstore/tuf@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@sigstore/tuf/-/tuf-1.0.3.tgz#2a65986772ede996485728f027b0514c0b70b160" + integrity sha512-2bRovzs0nJZFlCN3rXirE4gwxCn97JNjMmwpecqlbgV9WcxX7WRuIrgzx/X7Ib7MYRbyUTpBYE0s2x6AmZXnlg== + dependencies: + "@sigstore/protobuf-specs" "^0.2.0" + tuf-js "^1.1.7" -"@sideway/address@^4.1.3": - version "4.1.4" - resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.4.tgz#03dccebc6ea47fdc226f7d3d1ad512955d4783f0" - integrity sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw== +"@sigstore/tuf@^2.3.1": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@sigstore/tuf/-/tuf-2.3.1.tgz#86ff3c3c907e271696c88de0108d9063a8cbcc45" + integrity sha512-9Iv40z652td/QbV0o5n/x25H9w6IYRt2pIGbTX55yFDYlApDQn/6YZomjz6+KBx69rXHLzHcbtTS586mDdFD+Q== dependencies: - "@hapi/hoek" "^9.0.0" + "@sigstore/protobuf-specs" "^0.3.0" + tuf-js "^2.2.0" -"@sideway/formula@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.1.tgz#80fcbcbaf7ce031e0ef2dd29b1bfc7c3f583611f" - integrity sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg== +"@sigstore/verify@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@sigstore/verify/-/verify-1.1.0.tgz#ab617c5dc0bc09ead7f101a848f4870af2d84374" + integrity sha512-1fTqnqyTBWvV7cftUUFtDcHPdSox0N3Ub7C0lRyReYx4zZUlNTZjCV+HPy4Lre+r45dV7Qx5JLKvqqsgxuyYfg== + dependencies: + "@sigstore/bundle" "^2.2.0" + "@sigstore/core" "^1.0.0" + "@sigstore/protobuf-specs" "^0.3.0" -"@sideway/pinpoint@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" - integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== +"@sinclair/typebox@^0.27.8": + version "0.27.8" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" + integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== "@sindresorhus/is@^0.14.0": version "0.14.0" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== -"@sinonjs/commons@^1.7.0": - version "1.8.6" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.6.tgz#80c516a4dc264c2a69115e7578d62581ff455ed9" - integrity sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ== +"@sinonjs/commons@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.1.tgz#1029357e44ca901a615585f6d27738dbc89084cd" + integrity sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ== dependencies: type-detect "4.0.8" -"@sinonjs/fake-timers@^8.0.1": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz#3fdc2b6cb58935b21bfb8d1625eb1300484316e7" - integrity sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg== +"@sinonjs/fake-timers@^10.0.2": + version "10.3.0" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" + integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== dependencies: - "@sinonjs/commons" "^1.7.0" + "@sinonjs/commons" "^3.0.0" "@swc/helpers@0.4.11": version "0.4.11" @@ -3091,13 +2773,13 @@ integrity sha512-8QPrypskfBa7QIMuKHg2TA7BqES6vhBrDLOv8Unb6FcFyd3TjKbc6lcmb9UPQHxfl24sXoJ41ux/H7qQQvfaSQ== "@tailwindcss/forms@^0.5.2", "@tailwindcss/forms@^0.5.6": - version "0.5.6" - resolved "https://registry.yarnpkg.com/@tailwindcss/forms/-/forms-0.5.6.tgz#29c6c2b032b363e0c5110efed1499867f6d7e868" - integrity sha512-Fw+2BJ0tmAwK/w01tEFL5TiaJBX1NLT1/YbWgvm7ws3Qcn11kiXxzNTEQDMs5V3mQemhB56l3u0i9dwdzSQldA== + version "0.5.7" + resolved "https://registry.yarnpkg.com/@tailwindcss/forms/-/forms-0.5.7.tgz#db5421f062a757b5f828bc9286ba626c6685e821" + integrity sha512-QE7X69iQI+ZXwldE+rzasvbJiyV/ju1FGHH0Qn2W3FKbuYtqp8LKcy6iSw79fVUT5/Vvf+0XgLCeYVG+UV6hOw== dependencies: mini-svg-data-uri "^1.2.3" -"@tailwindcss/typography@^0.5.1", "@tailwindcss/typography@^0.5.2", "@tailwindcss/typography@^0.5.8": +"@tailwindcss/typography@^0.5.1", "@tailwindcss/typography@^0.5.10", "@tailwindcss/typography@^0.5.2": version "0.5.10" resolved "https://registry.yarnpkg.com/@tailwindcss/typography/-/typography-0.5.10.tgz#2abde4c6d5c797ab49cf47610830a301de4c1e0a" integrity sha512-Pe8BuPJQJd3FfRnm6H0ulKIGoMEQS+Vq01R6M5aCrFB/ccR/shT+0kXLjouGC1gFLm9hopTFN+DMP0pfwRWzPw== @@ -3120,6 +2802,18 @@ "@tanstack/query-core" "4.36.1" use-sync-external-store "^1.2.0" +"@tanstack/react-virtual@^3.0.0-beta.60": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@tanstack/react-virtual/-/react-virtual-3.1.2.tgz#eb62b73cc82e34860604cd3d682a17db590f3c45" + integrity sha512-qibmxtctgOZo2I+3Rw5GR9kXgaa15U5r3/idDY1ItUKW15UK7GhCfyIfE6qYuJ1fxQF6dJDsD8SbpPyuJgpxuA== + dependencies: + "@tanstack/virtual-core" "3.1.2" + +"@tanstack/virtual-core@3.1.2": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@tanstack/virtual-core/-/virtual-core-3.1.2.tgz#ca76f28f826fbd3310f88c3cd355d9c4aba80abb" + integrity sha512-DATZJs8iejkIUqXZe6ruDAnjFo78BKnIIgqQZrc7CmEFqfLEN/TPD91n4hRfo6hpRB6xC00bwKxv7vdjFNEmOg== + "@testing-library/cypress@^8.0.7": version "8.0.7" resolved "https://registry.yarnpkg.com/@testing-library/cypress/-/cypress-8.0.7.tgz#18315eba3cf8852808afadf122e4858406384015" @@ -3142,10 +2836,10 @@ lz-string "^1.5.0" pretty-format "^27.0.2" -"@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== +"@tootallnate/once@2": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" + integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== "@tsconfig/node10@^1.0.7": version "1.0.9" @@ -3167,15 +2861,41 @@ resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== +"@tufjs/canonical-json@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz#eade9fd1f537993bc1f0949f3aea276ecc4fab31" + integrity sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ== + +"@tufjs/canonical-json@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz#a52f61a3d7374833fca945b2549bc30a2dd40d0a" + integrity sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA== + +"@tufjs/models@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@tufjs/models/-/models-1.0.4.tgz#5a689630f6b9dbda338d4b208019336562f176ef" + integrity sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A== + dependencies: + "@tufjs/canonical-json" "1.0.0" + minimatch "^9.0.0" + +"@tufjs/models@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@tufjs/models/-/models-2.0.0.tgz#c7ab241cf11dd29deb213d6817dabb8c99ce0863" + integrity sha512-c8nj8BaOExmZKO2DXhDfegyhSGcG9E/mPN3U13L+/PsoWm1uaGiHHjxqSHQiasDBQwDA3aHuw9+9spYAP1qvvg== + dependencies: + "@tufjs/canonical-json" "2.0.0" + minimatch "^9.0.3" + "@types/aria-query@^5.0.1": - version "5.0.3" - resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-5.0.3.tgz#07570ebd25f9b516c910a91f7244052c9b58eabc" - integrity sha512-0Z6Tr7wjKJIk4OUEjVUQMtyunLDy339vcMaj38Kpj6jM2OE1p3S4kXExKZ7a3uXQAPCoy3sbrP1wibDKaf39oA== + version "5.0.4" + resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-5.0.4.tgz#1a31c3d378850d2778dabb6374d036dcba4ba708" + integrity sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw== -"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": - version "7.20.3" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.3.tgz#d5625a50b6f18244425a1359a858c73d70340778" - integrity sha512-54fjTSeSHwfan8AyHWrKbfBWiEUrNTZsUwPTDSNaaP1QDQIZbeNUg3a59E9D+375MzUw/x1vx2/0F5LBz+AeYA== +"@types/babel__core@^7.1.14": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" + integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== dependencies: "@babel/parser" "^7.20.7" "@babel/types" "^7.20.7" @@ -3184,80 +2904,85 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.6" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.6.tgz#676f89f67dc8ddaae923f70ebc5f1fa800c031a8" - integrity sha512-66BXMKb/sUWbMdBNdMvajU7i/44RkrA3z/Yt1c7R5xejt8qh84iU54yUWCtm0QwGJlDcf/gg4zd/x4mpLAlb/w== + version "7.6.8" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab" + integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": - version "7.4.3" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.3.tgz#db9ac539a2fe05cfe9e168b24f360701bde41f5f" - integrity sha512-ciwyCLeuRfxboZ4isgdNZi/tkt06m8Tw6uGbBSBgWrnnZGNXiEyM27xc/PjXGQLqlZ6ylbgHMnm7ccF9tCkOeQ== + version "7.4.4" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" + integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": - version "7.20.3" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.3.tgz#a971aa47441b28ef17884ff945d0551265a2d058" - integrity sha512-Lsh766rGEFbaxMIDH7Qa+Yha8cMVI3qAK6CHt3OR0YfxOIn5Z54iHiyDRycHrBqeIiqGa20Kpsv1cavfBKkRSw== +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.5.tgz#7b7502be0aa80cc4ef22978846b983edaafcd4dd" + integrity sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ== dependencies: "@babel/types" "^7.20.7" -"@types/graceful-fs@^4.1.2": - version "4.1.8" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.8.tgz#417e461e4dc79d957dc3107f45fe4973b09c2915" - integrity sha512-NhRH7YzWq8WiNKVavKPBmtLYZHxNY19Hh+az28O/phfp68CF45pMFud+ZzJ8ewnxnC5smIdF3dqFeiSUQ5I+pw== +"@types/estree@1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" + integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== + +"@types/graceful-fs@^4.1.3": + version "4.1.9" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" + integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== dependencies: "@types/node" "*" "@types/hast@^2.0.0": - version "2.3.7" - resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.7.tgz#5e9bd7ab4452d5313aeec9d38fbc193a70f8d810" - integrity sha512-EVLigw5zInURhzfXUM65eixfadfsHKomGKUakToXo84t8gGIJuTcD2xooM2See7GyQ7DRtYjhCHnSUQez8JaLw== + version "2.3.10" + resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.10.tgz#5c9d9e0b304bbb8879b857225c5ebab2d81d7643" + integrity sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw== dependencies: "@types/unist" "^2" "@types/hoist-non-react-statics@^3.3.1": - version "3.3.4" - resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.4.tgz#cc477ce0283bb9d19ea0cbfa2941fe2c8493a1be" - integrity sha512-ZchYkbieA+7tnxwX/SCBySx9WwvWR8TaP5tb2jRAzwvLb/rWchGw3v0w3pqUbUvj0GCwW2Xz/AVPSk6kUGctXQ== + version "3.3.5" + resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz#dab7867ef789d87e2b4b0003c9d65c49cc44a494" + integrity sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg== dependencies: "@types/react" "*" hoist-non-react-statics "^3.3.0" "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz#fdfdd69fa16d530047d9963635bd77c71a08c068" - integrity sha512-zONci81DZYCZjiLe0r6equvZut0b+dBRPBN5kBDjsONnutYNtJMoWQ9uR2RkL1gLG9NMTzvf+29e5RFfPbeKhQ== + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" + integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== "@types/istanbul-lib-report@*": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.2.tgz#394798d5f727402eb5ec99eb9618ffcd2b7645a1" - integrity sha512-8toY6FgdltSdONav1XtUHl4LN1yTmLza+EuDazb/fEmRNCwjyqNVIQWs2IfC74IqjHkREs/nQ2FWq5kZU9IC0w== + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" + integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^3.0.0": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.3.tgz#0313e2608e6d6955d195f55361ddeebd4b74c6e7" - integrity sha512-1nESsePMBlf0RPRffLZi5ujYh7IH1BWL4y9pr+Bn3cJBdxz+RTP8bUFljLz9HvzhhOSWKdyBZ4DIivdL6rvgZg== + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" + integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== dependencies: "@types/istanbul-lib-report" "*" -"@types/jest@^27.5.2": - version "27.5.2" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-27.5.2.tgz#ec49d29d926500ffb9fd22b84262e862049c026c" - integrity sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA== +"@types/jest@^29.5.12": + version "29.5.12" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.12.tgz#7f7dc6eb4cf246d2474ed78744b05d06ce025544" + integrity sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw== dependencies: - jest-matcher-utils "^27.0.0" - pretty-format "^27.0.0" + expect "^29.0.0" + pretty-format "^29.0.0" -"@types/json-schema@^7.0.9": - version "7.0.14" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.14.tgz#74a97a5573980802f32c8e47b663530ab3b6b7d1" - integrity sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw== +"@types/json-schema@^7.0.12": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== "@types/json5@^0.0.29": version "0.0.29" @@ -3265,14 +2990,14 @@ integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== "@types/lodash@^4.14.175": - version "4.14.200" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.200.tgz#435b6035c7eba9cdf1e039af8212c9e9281e7149" - integrity sha512-YI/M/4HRImtNf3pJgbF+W6FrXovqj+T+/HpENLTooK9PnkacBsDpeP3IpHab40CClUfhNmdM2WTNP2sa2dni5Q== + version "4.14.202" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.202.tgz#f09dbd2fb082d507178b2f2a5c7e74bd72ff98f8" + integrity sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ== "@types/mdast@^3.0.0", "@types/mdast@^3.0.3": - version "3.0.14" - resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.14.tgz#0735473a5b35be032b9f2685b7413cbab1b8a639" - integrity sha512-gVZ04PGgw1qLZKsnWnyFv4ORnaJ+DXLdHTVSFbU8yX6xZ34Bjg4Q32yPkmveUP1yItXReKfB0Aknlh/3zxTKAw== + version "3.0.15" + resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.15.tgz#49c524a263f30ffa28b71ae282f813ed000ab9f5" + integrity sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ== dependencies: "@types/unist" "^2" @@ -3282,89 +3007,67 @@ integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== "@types/minimist@^1.2.0": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.4.tgz#81f886786411c45bba3f33e781ab48bd56bfca2e" - integrity sha512-Kfe/D3hxHTusnPNRbycJE1N77WHDsdS4AjUYIzlDzhDrS47NrwuL3YW4VITxwR7KCVpzwgy4Rbj829KSSQmwXQ== + version "1.2.5" + resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.5.tgz#ec10755e871497bcd83efe927e43ec46e8c0747e" + integrity sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag== -"@types/node@*": - version "20.8.10" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.8.10.tgz#a5448b895c753ae929c26ce85cab557c6d4a365e" - integrity sha512-TlgT8JntpcbmKUFzjhsyhGfP2fsiz1Mv56im6enJ905xG1DAYesxJaeSbGqQmAw8OWPdhyJGhGSQGKRNJ45u9w== +"@types/node@*", "@types/node@^20.10.0", "@types/node@^20.11.19": + version "20.11.19" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.19.tgz#b466de054e9cb5b3831bee38938de64ac7f81195" + integrity sha512-7xMnVEcZFu0DikYjWOlRq7NTPETrm7teqUT2WkQjrTIkEgUyyGdWsj/Zg8bEJt5TNklzbPD1X3fqfsHw3SpapQ== dependencies: undici-types "~5.26.4" -"@types/node@20.5.1": - version "20.5.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.5.1.tgz#178d58ee7e4834152b0e8b4d30cbfab578b9bb30" - integrity sha512-4tT2UrL5LBqDwoed9wZ6N3umC4Yhz3W3FloMmiiG4JwmUJWpie0c7lcnUNd4gtMKuDEO4wRVS8B6Xa0uMRsMKg== - "@types/node@^14.14.31": version "14.18.63" resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.63.tgz#1788fa8da838dbb5f9ea994b834278205db6ca2b" integrity sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ== -"@types/node@^17.0.21", "@types/node@^17.0.23", "@types/node@^17.0.45": +"@types/node@^17.0.21", "@types/node@^17.0.23": version "17.0.45" resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.45.tgz#2c0fafd78705e7a18b7906b5201a522719dc5190" integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== -"@types/node@^18.11.10": - version "18.18.8" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.18.8.tgz#2b285361f2357c8c8578ec86b5d097c7f464cfd6" - integrity sha512-OLGBaaK5V3VRBS1bAkMVP2/W9B+H8meUfl866OrMNQqt7wDgdpWPp5o6gmIc9pB+lIQHSq4ZL8ypeH1vPxcPaQ== - dependencies: - undici-types "~5.26.4" - "@types/normalize-package-data@^2.4.0": - version "2.4.3" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.3.tgz#291c243e4b94dbfbc0c0ee26b7666f1d5c030e2c" - integrity sha512-ehPtgRgaULsFG8x0NeYJvmyH1hmlfsNLujHe9dQEia/7MAJYdzMSi19JtchUHjmBA6XC/75dK55mzZH+RyieSg== - -"@types/parse-json@^4.0.0": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.1.tgz#27f7559836ad796cea31acb63163b203756a5b4e" - integrity sha512-3YmXzzPAdOTVljVMkTMBdBEvlOLg2cDQaDhnnhT3nT9uDbnJzjWhKlzb+desT12Y7tGqaN6d+AbozcKzyL36Ng== + version "2.4.4" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz#56e2cc26c397c038fab0e3a917a12d5c5909e901" + integrity sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA== "@types/parse5@^5.0.0": version "5.0.3" resolved "https://registry.yarnpkg.com/@types/parse5/-/parse5-5.0.3.tgz#e7b5aebbac150f8b5fdd4a46e7f0bd8e65e19109" integrity sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw== -"@types/prettier@^2.1.5": - version "2.7.3" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" - integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== - "@types/prop-types@*": - version "15.7.9" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.9.tgz#b6f785caa7ea1fe4414d9df42ee0ab67f23d8a6d" - integrity sha512-n1yyPsugYNSmHgxDFjicaI2+gCNjsBck8UX9kuofAKlc0h1bL+20oSF72KeNaW2DUlesbEVCFgyV2dPGTiY42g== + version "15.7.11" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.11.tgz#2596fb352ee96a1379c657734d4b913a613ad563" + integrity sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng== -"@types/react-dom@17.0.21", "@types/react-dom@^17.0.21", "@types/react-dom@^18.0.9": - version "17.0.21" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.21.tgz#85d56965483ce4850f5f03f9234e54a1f47786e5" - integrity sha512-3rQEFUNUUz2MYiRwJJj6UekcW7rFLOtmK7ajQP7qJpjNdggInl3I/xM4I3Hq1yYPdCGVMgax1gZsB7BBTtayXg== +"@types/react-dom@17.0.25", "@types/react-dom@^17.0.25", "@types/react-dom@^18.2.17": + version "17.0.25" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.25.tgz#e0e5b3571e1069625b3a3da2b279379aa33a0cb5" + integrity sha512-urx7A7UxkZQmThYA4So0NelOVjx3V4rNFVJwp0WZlbIK5eM4rNJDiN3R/E9ix0MBh6kAEojk/9YL+Te6D9zHNA== dependencies: "@types/react" "^17" -"@types/react@*", "@types/react@17.0.68", "@types/react@^17", "@types/react@^17.0.0", "@types/react@^17.0.43", "@types/react@^17.0.68", "@types/react@^18.0.26": - version "17.0.68" - resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.68.tgz#99b17f567e258f5e7be855a281ac67b49a34f9f2" - integrity sha512-y8heXejd/Gi43S28GOqIFmr6BzhLa3anMlPojRu4rHh3MtRrrpB+BtLEcqP3XPO1urXByzBdkOLU7sodYWnpkA== +"@types/react@*", "@types/react@17.0.75", "@types/react@^17", "@types/react@^17.0.0", "@types/react@^17.0.43", "@types/react@^17.0.75", "@types/react@^18.2.39": + version "17.0.75" + resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.75.tgz#cffbc76840a12fcadaf5a3cf14878bb06efcf73d" + integrity sha512-MSA+NzEzXnQKrqpO63CYqNstFjsESgvJAdAyyJ1n6ZQq/GLgf6nOfIKwk+Twuz0L1N6xPe+qz5xRCJrbhMaLsw== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" csstype "^3.0.2" "@types/scheduler@*": - version "0.16.5" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.5.tgz#4751153abbf8d6199babb345a52e1eb4167d64af" - integrity sha512-s/FPdYRmZR8SjLWGMCuax7r3qCWQw9QKHzXVukAuuIJkXkDRwp+Pu5LMIVFi0Fxbav35WURicYr8u1QsoybnQw== + version "0.16.8" + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.8.tgz#ce5ace04cfeabe7ef87c0091e50752e36707deff" + integrity sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A== -"@types/semver@^7.3.12": - version "7.5.4" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.4.tgz#0a41252ad431c473158b22f9bfb9a63df7541cff" - integrity sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ== +"@types/semver@^7.5.0": + version "7.5.7" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.7.tgz#326f5fdda70d13580777bcaa1bc6fa772a5aef0e" + integrity sha512-/wdoPq1QqkSj9/QOeKkFquEuPzQbHTWAMPH/PaUMB+JuR31lXhlWXRZ52IpfDYVlDOUBvX09uBrPwxGT1hjNBg== "@types/sinonjs__fake-timers@8.1.1": version "8.1.1" @@ -3372,56 +3075,57 @@ integrity sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g== "@types/sizzle@^2.3.2": - version "2.3.5" - resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.5.tgz#d93dd29cdcd5801d90be968073b09a6b370780e4" - integrity sha512-tAe4Q+OLFOA/AMD+0lq8ovp8t3ysxAOeaScnfNdZpUxaGl51ZMDEITxkvFl1STudQ58mz6gzVGl9VhMKhwRnZQ== + version "2.3.8" + resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.8.tgz#518609aefb797da19bf222feb199e8f653ff7627" + integrity sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg== "@types/stack-utils@^2.0.0": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.2.tgz#01284dde9ef4e6d8cef6422798d9a3ad18a66f8b" - integrity sha512-g7CK9nHdwjK2n0ymT2CW698FuWJRIx+RP6embAzZ2Qi8/ilIrA1Imt2LVSeHUzKvpoi7BhmmQcXz95eS0f2JXw== + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" + integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== "@types/unist@^2", "@types/unist@^2.0.0", "@types/unist@^2.0.2", "@types/unist@^2.0.3": - version "2.0.9" - resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.9.tgz#72e164381659a49557b0a078b28308f2c6a3e1ce" - integrity sha512-zC0iXxAv1C1ERURduJueYzkzZ2zaGyc+P2c95hgkikHPr3z8EdUZOlgEQ5X0DRmwDZn+hekycQnoeiiRVrmilQ== + version "2.0.10" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.10.tgz#04ffa7f406ab628f7f7e97ca23e290cd8ab15efc" + integrity sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA== "@types/yargs-parser@*": - version "21.0.2" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.2.tgz#7bd04c5da378496ef1695a1008bf8f71847a8b8b" - integrity sha512-5qcvofLPbfjmBfKaLfj/+f+Sbd6pN4zl7w7VSVI5uz7m9QZTuB2aZAa2uo1wHFBNN2x6g/SoTkXmd8mQnQF2Cw== + version "21.0.3" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" + integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== -"@types/yargs@^16.0.0": - version "16.0.7" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.7.tgz#b0d0502cb5f6c17994df72a600049f10bbf17203" - integrity sha512-lQcYmxWuOfJq4IncK88/nwud9rwr1F04CFc5xzk0k4oKVyz/AI35TfsXmhjf6t8zp8mpCOi17BfvuNWx+zrYkg== +"@types/yargs@^17.0.8": + version "17.0.32" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.32.tgz#030774723a2f7faafebf645f4e5a48371dca6229" + integrity sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog== dependencies: "@types/yargs-parser" "*" "@types/yauzl@^2.9.1": - version "2.10.2" - resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.2.tgz#dab926ef9b41a898bc943f11bca6b0bad6d4b729" - integrity sha512-Km7XAtUIduROw7QPgvcft0lIupeG8a8rdKL8RiSyKvlE7dYY31fEn41HVuQsRFDuROA8tA4K2UVL+WdfFmErBA== + version "2.10.3" + resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.3.tgz#e9b2808b4f109504a03cda958259876f61017999" + integrity sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q== dependencies: "@types/node" "*" -"@typescript-eslint/eslint-plugin@^5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz#aeef0328d172b9e37d9bab6dbc13b87ed88977db" - integrity sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag== - dependencies: - "@eslint-community/regexpp" "^4.4.0" - "@typescript-eslint/scope-manager" "5.62.0" - "@typescript-eslint/type-utils" "5.62.0" - "@typescript-eslint/utils" "5.62.0" +"@typescript-eslint/eslint-plugin@^7.0.2": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.0.2.tgz#c13a34057be425167cc4a765158c46fdf2fd981d" + integrity sha512-/XtVZJtbaphtdrWjr+CJclaCVGPtOdBpFEnvtNf/jRV0IiEemRrL0qABex/nEt8isYcnFacm3nPHYQwL+Wb7qg== + dependencies: + "@eslint-community/regexpp" "^4.5.1" + "@typescript-eslint/scope-manager" "7.0.2" + "@typescript-eslint/type-utils" "7.0.2" + "@typescript-eslint/utils" "7.0.2" + "@typescript-eslint/visitor-keys" "7.0.2" debug "^4.3.4" graphemer "^1.4.0" - ignore "^5.2.0" - natural-compare-lite "^1.4.0" - semver "^7.3.7" - tsutils "^3.21.0" + ignore "^5.2.4" + natural-compare "^1.4.0" + semver "^7.5.4" + ts-api-utils "^1.0.1" -"@typescript-eslint/parser@^5.21.0", "@typescript-eslint/parser@^5.62.0": +"@typescript-eslint/parser@^5.21.0": version "5.62.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.62.0.tgz#1b63d082d849a2fcae8a569248fbe2ee1b8a56c7" integrity sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA== @@ -3432,14 +3136,25 @@ debug "^4.3.4" "@typescript-eslint/parser@^5.4.2 || ^6.0.0": - version "6.9.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.9.1.tgz#4f685f672f8b9580beb38d5fb99d52fc3e34f7a3" - integrity sha512-C7AK2wn43GSaCUZ9do6Ksgi2g3mwFkMO3Cis96kzmgudoVaKyt62yNzJOktP0HDLb/iO2O0n2lBOzJgr6Q/cyg== - dependencies: - "@typescript-eslint/scope-manager" "6.9.1" - "@typescript-eslint/types" "6.9.1" - "@typescript-eslint/typescript-estree" "6.9.1" - "@typescript-eslint/visitor-keys" "6.9.1" + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.21.0.tgz#af8fcf66feee2edc86bc5d1cf45e33b0630bf35b" + integrity sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ== + dependencies: + "@typescript-eslint/scope-manager" "6.21.0" + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/typescript-estree" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" + debug "^4.3.4" + +"@typescript-eslint/parser@^7.0.2": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.0.2.tgz#95c31233d343db1ca1df8df7811b5b87ca7b1a68" + integrity sha512-GdwfDglCxSmU+QTS9vhz2Sop46ebNCXpPPvsByK7hu0rFGRHL+AusKQJ7SoN+LbLh6APFpQwHKmDSwN35Z700Q== + dependencies: + "@typescript-eslint/scope-manager" "7.0.2" + "@typescript-eslint/types" "7.0.2" + "@typescript-eslint/typescript-estree" "7.0.2" + "@typescript-eslint/visitor-keys" "7.0.2" debug "^4.3.4" "@typescript-eslint/scope-manager@5.62.0": @@ -3450,33 +3165,46 @@ "@typescript-eslint/types" "5.62.0" "@typescript-eslint/visitor-keys" "5.62.0" -"@typescript-eslint/scope-manager@6.9.1": - version "6.9.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.9.1.tgz#e96afeb9a68ad1cd816dba233351f61e13956b75" - integrity sha512-38IxvKB6NAne3g/+MyXMs2Cda/Sz+CEpmm+KLGEM8hx/CvnSRuw51i8ukfwB/B/sESdeTGet1NH1Wj7I0YXswg== +"@typescript-eslint/scope-manager@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz#ea8a9bfc8f1504a6ac5d59a6df308d3a0630a2b1" + integrity sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg== dependencies: - "@typescript-eslint/types" "6.9.1" - "@typescript-eslint/visitor-keys" "6.9.1" + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" -"@typescript-eslint/type-utils@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz#286f0389c41681376cdad96b309cedd17d70346a" - integrity sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew== +"@typescript-eslint/scope-manager@7.0.2": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.0.2.tgz#6ec4cc03752758ddd1fdaae6fbd0ed9a2ca4fe63" + integrity sha512-l6sa2jF3h+qgN2qUMjVR3uCNGjWw4ahGfzIYsCtFrQJCjhbrDPdiihYT8FnnqFwsWX+20hK592yX9I2rxKTP4g== dependencies: - "@typescript-eslint/typescript-estree" "5.62.0" - "@typescript-eslint/utils" "5.62.0" + "@typescript-eslint/types" "7.0.2" + "@typescript-eslint/visitor-keys" "7.0.2" + +"@typescript-eslint/type-utils@7.0.2": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.0.2.tgz#a7fc0adff0c202562721357e7478207d380a757b" + integrity sha512-IKKDcFsKAYlk8Rs4wiFfEwJTQlHcdn8CLwLaxwd6zb8HNiMcQIFX9sWax2k4Cjj7l7mGS5N1zl7RCHOVwHq2VQ== + dependencies: + "@typescript-eslint/typescript-estree" "7.0.2" + "@typescript-eslint/utils" "7.0.2" debug "^4.3.4" - tsutils "^3.21.0" + ts-api-utils "^1.0.1" "@typescript-eslint/types@5.62.0": version "5.62.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== -"@typescript-eslint/types@6.9.1": - version "6.9.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.9.1.tgz#a6cfc20db0fcedcb2f397ea728ef583e0ee72459" - integrity sha512-BUGslGOb14zUHOUmDB2FfT6SI1CcZEJYfF3qFwBeUrU6srJfzANonwRYHDpLBuzbq3HaoF2XL2hcr01c8f8OaQ== +"@typescript-eslint/types@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.21.0.tgz#205724c5123a8fef7ecd195075fa6e85bac3436d" + integrity sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg== + +"@typescript-eslint/types@7.0.2": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.0.2.tgz#b6edd108648028194eb213887d8d43ab5750351c" + integrity sha512-ZzcCQHj4JaXFjdOql6adYV4B/oFOFjPOC9XYwCaZFRvqN8Llfvv4gSxrkQkd2u4Ci62i2c6W6gkDwQJDaRc4nA== "@typescript-eslint/typescript-estree@5.62.0": version "5.62.0" @@ -3491,32 +3219,46 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/typescript-estree@6.9.1": - version "6.9.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.9.1.tgz#8c77910a49a04f0607ba94d78772da07dab275ad" - integrity sha512-U+mUylTHfcqeO7mLWVQ5W/tMLXqVpRv61wm9ZtfE5egz7gtnmqVIw9ryh0mgIlkKk9rZLY3UHygsBSdB9/ftyw== +"@typescript-eslint/typescript-estree@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz#c47ae7901db3b8bddc3ecd73daff2d0895688c46" + integrity sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ== dependencies: - "@typescript-eslint/types" "6.9.1" - "@typescript-eslint/visitor-keys" "6.9.1" + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" + minimatch "9.0.3" semver "^7.5.4" ts-api-utils "^1.0.1" -"@typescript-eslint/utils@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" - integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== +"@typescript-eslint/typescript-estree@7.0.2": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.0.2.tgz#3c6dc8a3b9799f4ef7eca0d224ded01974e4cb39" + integrity sha512-3AMc8khTcELFWcKcPc0xiLviEvvfzATpdPj/DXuOGIdQIIFybf4DMT1vKRbuAEOFMwhWt7NFLXRkbjsvKZQyvw== dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@types/json-schema" "^7.0.9" - "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.62.0" - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/typescript-estree" "5.62.0" - eslint-scope "^5.1.1" - semver "^7.3.7" + "@typescript-eslint/types" "7.0.2" + "@typescript-eslint/visitor-keys" "7.0.2" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + minimatch "9.0.3" + semver "^7.5.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/utils@7.0.2": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.0.2.tgz#8756123054cd934c8ba7db6a6cffbc654b10b5c4" + integrity sha512-PZPIONBIB/X684bhT1XlrkjNZJIEevwkKDsdwfiu1WeqBxYEEdIgVDgm8/bbKHVu+6YOpeRqcfImTdImx/4Bsw== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + "@types/json-schema" "^7.0.12" + "@types/semver" "^7.5.0" + "@typescript-eslint/scope-manager" "7.0.2" + "@typescript-eslint/types" "7.0.2" + "@typescript-eslint/typescript-estree" "7.0.2" + semver "^7.5.4" "@typescript-eslint/visitor-keys@5.62.0": version "5.62.0" @@ -3526,12 +3268,20 @@ "@typescript-eslint/types" "5.62.0" eslint-visitor-keys "^3.3.0" -"@typescript-eslint/visitor-keys@6.9.1": - version "6.9.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.9.1.tgz#6753a9225a0ba00459b15d6456b9c2780b66707d" - integrity sha512-MUaPUe/QRLEffARsmNfmpghuQkW436DvESW+h+M52w0coICHRfD6Np9/K6PdACwnrq1HmuLl+cSPZaJmeVPkSw== +"@typescript-eslint/visitor-keys@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz#87a99d077aa507e20e238b11d56cc26ade45fe47" + integrity sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A== dependencies: - "@typescript-eslint/types" "6.9.1" + "@typescript-eslint/types" "6.21.0" + eslint-visitor-keys "^3.4.1" + +"@typescript-eslint/visitor-keys@7.0.2": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.0.2.tgz#2899b716053ad7094962beb895d11396fc12afc7" + integrity sha512-8Y+YiBmqPighbm5xA2k4wKTxRzx9EkBu7Rlw+WHqMvRJ3RPz/BMBO9b2ru0LUNmXg120PHUXD5+SWFy2R8DqlQ== + dependencies: + "@typescript-eslint/types" "7.0.2" eslint-visitor-keys "^3.4.1" "@ungap/structured-clone@^1.2.0": @@ -3544,7 +3294,27 @@ resolved "https://registry.yarnpkg.com/@vercel/analytics/-/analytics-0.1.11.tgz#727a0ac655a4a89104cdea3e6925476470299428" integrity sha512-mj5CPR02y0BRs1tN3oZcBNAX9a8NxsIUl9vElDPcqxnMfP0RbRc9fI9Ud7+QDg/1Izvt5uMumsr+6YsmVHcyuw== -JSONStream@^1.0.4, JSONStream@^1.3.5: +"@yarnpkg/lockfile@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" + integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== + +"@yarnpkg/parsers@3.0.0-rc.46": + version "3.0.0-rc.46" + resolved "https://registry.yarnpkg.com/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz#03f8363111efc0ea670e53b0282cd3ef62de4e01" + integrity sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q== + dependencies: + js-yaml "^3.10.0" + tslib "^2.4.0" + +"@zkochan/js-yaml@0.0.6": + version "0.0.6" + resolved "https://registry.yarnpkg.com/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz#975f0b306e705e28b8068a07737fa46d3fc04826" + integrity sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg== + dependencies: + argparse "^2.0.1" + +JSONStream@^1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== @@ -3552,48 +3322,25 @@ JSONStream@^1.0.4, JSONStream@^1.3.5: jsonparse "^1.2.0" through ">=2.2.7 <3" -abab@^2.0.3, abab@^2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" - integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== - -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -acorn-globals@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" - integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== - dependencies: - acorn "^7.1.1" - acorn-walk "^7.1.1" +abbrev@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-2.0.0.tgz#cf59829b8b4f03f89dda2771cb7f3653828c89bf" + integrity sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ== acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn-walk@^7.1.1: - version "7.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" - integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== - acorn-walk@^8.1.1: - version "8.3.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.0.tgz#2097665af50fd0cf7a2dfccd2b9368964e66540f" - integrity sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA== - -acorn@^7.1.1: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + version "8.3.2" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" + integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== -acorn@^8.2.4, acorn@^8.4.1, acorn@^8.9.0: - version "8.11.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b" - integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== +acorn@^8.4.1, acorn@^8.9.0: + version "8.11.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== add-stream@^1.0.0: version "1.0.0" @@ -3607,7 +3354,14 @@ agent-base@6, agent-base@^6.0.2: dependencies: debug "4" -agentkeepalive@^4.1.3: +agent-base@^7.0.2, agent-base@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.0.tgz#536802b76bc0b34aa50195eb2442276d613e3434" + integrity sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg== + dependencies: + debug "^4.3.4" + +agentkeepalive@^4.2.1: version "4.5.0" resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923" integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew== @@ -3622,7 +3376,7 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" -ajv@^6.12.3, ajv@^6.12.4: +ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -3643,24 +3397,24 @@ ajv@^8.11.0: uri-js "^4.2.2" algoliasearch@^4.19.1: - version "4.20.0" - resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-4.20.0.tgz#700c2cb66e14f8a288460036c7b2a554d0d93cf4" - integrity sha512-y+UHEjnOItoNy0bYO+WWmLWBlPwDjKHW6mNHrPi0NkuhpQOOEbrkwQH/wgKFDLh7qlKjzoKeiRtlpewDPDG23g== - dependencies: - "@algolia/cache-browser-local-storage" "4.20.0" - "@algolia/cache-common" "4.20.0" - "@algolia/cache-in-memory" "4.20.0" - "@algolia/client-account" "4.20.0" - "@algolia/client-analytics" "4.20.0" - "@algolia/client-common" "4.20.0" - "@algolia/client-personalization" "4.20.0" - "@algolia/client-search" "4.20.0" - "@algolia/logger-common" "4.20.0" - "@algolia/logger-console" "4.20.0" - "@algolia/requester-browser-xhr" "4.20.0" - "@algolia/requester-common" "4.20.0" - "@algolia/requester-node-http" "4.20.0" - "@algolia/transporter" "4.20.0" + version "4.22.1" + resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-4.22.1.tgz#f10fbecdc7654639ec20d62f109c1b3a46bc6afc" + integrity sha512-jwydKFQJKIx9kIZ8Jm44SdpigFwRGPESaxZBaHSV0XWN2yBJAOT4mT7ppvlrpA4UGzz92pqFnVKr/kaZXrcreg== + dependencies: + "@algolia/cache-browser-local-storage" "4.22.1" + "@algolia/cache-common" "4.22.1" + "@algolia/cache-in-memory" "4.22.1" + "@algolia/client-account" "4.22.1" + "@algolia/client-analytics" "4.22.1" + "@algolia/client-common" "4.22.1" + "@algolia/client-personalization" "4.22.1" + "@algolia/client-search" "4.22.1" + "@algolia/logger-common" "4.22.1" + "@algolia/logger-console" "4.22.1" + "@algolia/requester-browser-xhr" "4.22.1" + "@algolia/requester-common" "4.22.1" + "@algolia/requester-node-http" "4.22.1" + "@algolia/transporter" "4.22.1" ansi-align@^2.0.0: version "2.0.0" @@ -3688,12 +3442,12 @@ ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: dependencies: type-fest "^0.21.3" -ansi-escapes@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-5.0.0.tgz#b6a0caf0eef0c41af190e9a749e0c00ec04bb2a6" - integrity sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA== +ansi-escapes@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-6.2.0.tgz#8a13ce75286f417f1963487d86ba9f90dccf9947" + integrity sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw== dependencies: - type-fest "^1.0.2" + type-fest "^3.0.0" ansi-regex@^2.0.0: version "2.1.1" @@ -3744,7 +3498,7 @@ ansi-styles@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== -ansi-styles@^6.0.0, ansi-styles@^6.1.0: +ansi-styles@^6.0.0, ansi-styles@^6.1.0, ansi-styles@^6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== @@ -3762,12 +3516,7 @@ anymatch@^3.0.3, anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" -aproba@^1.0.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== - -aproba@^2.0.0: +"aproba@^1.0.3 || ^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== @@ -3777,13 +3526,13 @@ arch@^2.2.0: resolved "https://registry.yarnpkg.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11" integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ== -are-we-there-yet@~1.1.2: - version "1.1.7" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz#b15474a932adab4ff8a50d9adfa7e4e926f21146" - integrity sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g== +are-we-there-yet@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" + integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== dependencies: delegates "^1.0.0" - readable-stream "^2.0.6" + readable-stream "^3.6.0" arg@^4.1.0: version "4.1.3" @@ -3814,20 +3563,20 @@ aria-query@5.1.3: dependencies: deep-equal "^2.0.5" -aria-query@^5.1.3: +aria-query@^5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== dependencies: dequal "^2.0.3" -array-buffer-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" - integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== +array-buffer-byte-length@^1.0.0, array-buffer-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" + integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== dependencies: - call-bind "^1.0.2" - is-array-buffer "^3.0.1" + call-bind "^1.0.5" + is-array-buffer "^3.0.4" array-differ@^3.0.0: version "3.0.0" @@ -3855,16 +3604,27 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array.prototype.findlastindex@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz#b37598438f97b579166940814e2c0493a4f50207" - integrity sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA== +array.prototype.filter@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz#423771edeb417ff5914111fff4277ea0624c0d0e" + integrity sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw== dependencies: call-bind "^1.0.2" define-properties "^1.2.0" es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - get-intrinsic "^1.2.1" + es-array-method-boxes-properly "^1.0.0" + is-string "^1.0.7" + +array.prototype.findlastindex@^1.2.3: + version "1.2.4" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.4.tgz#d1c50f0b3a9da191981ff8942a0aedd82794404f" + integrity sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.3.0" + es-shim-unscopables "^1.0.2" array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2: version "1.3.2" @@ -3886,39 +3646,29 @@ array.prototype.flatmap@^1.3.1, array.prototype.flatmap@^1.3.2: es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" -array.prototype.reduce@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.6.tgz#63149931808c5fc1e1354814923d92d45f7d96d5" - integrity sha512-UW+Mz8LG/sPSU8jRDCjVr6J/ZKAGpHfwrZ6kWTG5qCxIEiXdVshqGnu5vEZA8S1y6X4aCSbQZ0/EEsfvEvBiSg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-array-method-boxes-properly "^1.0.0" - is-string "^1.0.7" - array.prototype.tosorted@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.2.tgz#620eff7442503d66c799d95503f82b475745cefd" - integrity sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg== + version "1.1.3" + resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz#c8c89348337e51b8a3c48a9227f9ce93ceedcba8" + integrity sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - get-intrinsic "^1.2.1" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.1.0" + es-shim-unscopables "^1.0.2" -arraybuffer.prototype.slice@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz#98bd561953e3e74bb34938e77647179dfe6e9f12" - integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw== +arraybuffer.prototype.slice@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" + integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== dependencies: - array-buffer-byte-length "^1.0.0" - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - is-array-buffer "^3.0.2" + array-buffer-byte-length "^1.0.1" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.2.1" + get-intrinsic "^1.2.3" + is-array-buffer "^3.0.4" is-shared-array-buffer "^1.0.2" arrify@^1.0.1: @@ -3948,20 +3698,20 @@ assert-plus@1.0.0, assert-plus@^1.0.0: resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== -ast-types-flow@^0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" - integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag== +ast-types-flow@^0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.8.tgz#0a85e1c92695769ac13a428bb653e7538bea27d6" + integrity sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ== astral-regex@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== -async@^3.2.0: - version "3.2.4" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" - integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== +async@^3.2.0, async@^3.2.3: + version "3.2.5" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" + integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== asynciterator.prototype@^1.0.0: version "1.0.0" @@ -3980,22 +3730,24 @@ at-least-node@^1.0.0: resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== -autoprefixer@^10.4.13, autoprefixer@^10.4.2, autoprefixer@^10.4.4, autoprefixer@^10.4.7: - version "10.4.16" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.16.tgz#fad1411024d8670880bdece3970aa72e3572feb8" - integrity sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ== +autoprefixer@^10.4.16, autoprefixer@^10.4.2, autoprefixer@^10.4.4, autoprefixer@^10.4.7: + version "10.4.17" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.17.tgz#35cd5695cbbe82f536a50fa025d561b01fdec8be" + integrity sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg== dependencies: - browserslist "^4.21.10" - caniuse-lite "^1.0.30001538" - fraction.js "^4.3.6" + browserslist "^4.22.2" + caniuse-lite "^1.0.30001578" + fraction.js "^4.3.7" normalize-range "^0.1.2" picocolors "^1.0.0" postcss-value-parser "^4.2.0" -available-typed-arrays@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" - integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== +available-typed-arrays@^1.0.6, available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" aws-sign2@~0.7.0: version "0.7.0" @@ -4007,10 +3759,10 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.12.0.tgz#ce1c9d143389679e253b314241ea9aa5cec980d3" integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg== -axe-core@^4.6.2: - version "4.8.2" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.8.2.tgz#2f6f3cde40935825cf4465e3c1c9e77b240ff6ae" - integrity sha512-/dlp0fxyM3R8YW7MFzaHWXrf4zzbr0vaYb23VBFCl83R7nWNPg/yaQw2Dc8jzCMmDVLhSdzH8MjrsuIUuvX+6g== +axe-core@=4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.7.0.tgz#34ba5a48a8b564f67e103f0aa5768d76e15bbbbf" + integrity sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ== axios@^0.27.2: version "0.27.2" @@ -4020,7 +3772,16 @@ axios@^0.27.2: follow-redirects "^1.14.9" form-data "^4.0.0" -axobject-query@^3.1.1: +axios@^1.6.0: + version "1.6.7" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.7.tgz#7b48c2e27c96f9c68a2f8f31e2ab19f59b06b0a7" + integrity sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA== + dependencies: + follow-redirects "^1.15.4" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +axobject-query@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.2.1.tgz#39c378a6e3b06ca679f29138151e45b2b32da62a" integrity sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg== @@ -4036,16 +3797,15 @@ babel-code-frame@^6.26.0: esutils "^2.0.2" js-tokens "^3.0.2" -babel-jest@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.5.1.tgz#a1bf8d61928edfefd21da27eb86a695bfd691444" - integrity sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg== +babel-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" + integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== dependencies: - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/transform" "^29.7.0" "@types/babel__core" "^7.1.14" babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^27.5.1" + babel-preset-jest "^29.6.3" chalk "^4.0.0" graceful-fs "^4.2.9" slash "^3.0.0" @@ -4076,39 +3836,39 @@ babel-plugin-istanbul@^6.1.1: istanbul-lib-instrument "^5.0.4" test-exclude "^6.0.0" -babel-plugin-jest-hoist@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz#9be98ecf28c331eb9f5df9c72d6f89deb8181c2e" - integrity sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ== +babel-plugin-jest-hoist@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626" + integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== dependencies: "@babel/template" "^7.3.3" "@babel/types" "^7.3.3" - "@types/babel__core" "^7.0.0" + "@types/babel__core" "^7.1.14" "@types/babel__traverse" "^7.0.6" -babel-plugin-polyfill-corejs2@^0.4.6: - version "0.4.6" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.6.tgz#b2df0251d8e99f229a8e60fc4efa9a68b41c8313" - integrity sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q== +babel-plugin-polyfill-corejs2@^0.4.8: + version "0.4.8" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.8.tgz#dbcc3c8ca758a290d47c3c6a490d59429b0d2269" + integrity sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg== dependencies: "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.4.3" + "@babel/helper-define-polyfill-provider" "^0.5.0" semver "^6.3.1" -babel-plugin-polyfill-corejs3@^0.8.5: - version "0.8.6" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.6.tgz#25c2d20002da91fe328ff89095c85a391d6856cf" - integrity sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ== +babel-plugin-polyfill-corejs3@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.9.0.tgz#9eea32349d94556c2ad3ab9b82ebb27d4bf04a81" + integrity sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.3" - core-js-compat "^3.33.1" + "@babel/helper-define-polyfill-provider" "^0.5.0" + core-js-compat "^3.34.0" -babel-plugin-polyfill-regenerator@^0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.3.tgz#d4c49e4b44614607c13fb769bcd85c72bb26a4a5" - integrity sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw== +babel-plugin-polyfill-regenerator@^0.5.5: + version "0.5.5" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz#8b0c8fc6434239e5d7b8a9d1f832bb2b0310f06a" + integrity sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.3" + "@babel/helper-define-polyfill-provider" "^0.5.0" babel-preset-current-node-syntax@^1.0.0: version "1.0.1" @@ -4128,12 +3888,12 @@ babel-preset-current-node-syntax@^1.0.0: "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-top-level-await" "^7.8.3" -babel-preset-jest@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz#91f10f58034cb7989cb4f962b69fa6eef6a6bc81" - integrity sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag== +babel-preset-jest@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c" + integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== dependencies: - babel-plugin-jest-hoist "^27.5.1" + babel-plugin-jest-hoist "^29.6.3" babel-preset-current-node-syntax "^1.0.0" bail@^1.0.0: @@ -4163,17 +3923,12 @@ before-after-hook@^2.2.0: resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c" integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ== -big-integer@^1.6.44: - version "1.6.51" - resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686" - integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg== - binary-extensions@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== -bl@^4.0.3: +bl@^4.0.3, bl@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== @@ -4219,13 +3974,6 @@ boxen@^4.2.0: type-fest "^0.8.1" widest-line "^3.1.0" -bplist-parser@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.2.0.tgz#43a9d183e5bf9d545200ceac3e712f79ebbe8d0e" - integrity sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw== - dependencies: - big-integer "^1.6.44" - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -4234,6 +3982,13 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + braces@^3.0.2, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" @@ -4241,19 +3996,14 @@ braces@^3.0.2, braces@~3.0.2: dependencies: fill-range "^7.0.1" -browser-process-hrtime@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" - integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== - -browserslist@^4.21.10, browserslist@^4.21.9, browserslist@^4.22.1: - version "4.22.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.1.tgz#ba91958d1a59b87dab6fed8dfbcb3da5e2e9c619" - integrity sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ== +browserslist@^4.22.2, browserslist@^4.22.3: + version "4.23.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" + integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== dependencies: - caniuse-lite "^1.0.30001541" - electron-to-chromium "^1.4.535" - node-releases "^2.0.13" + caniuse-lite "^1.0.30001587" + electron-to-chromium "^1.4.668" + node-releases "^2.0.14" update-browserslist-db "^1.0.13" bs-logger@0.x: @@ -4293,12 +4043,12 @@ builtins@^1.0.3: resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" integrity sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ== -bundle-name@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-3.0.0.tgz#ba59bcc9ac785fb67ccdbf104a2bf60c099f0e1a" - integrity sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw== +builtins@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9" + integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== dependencies: - run-applescript "^5.0.0" + semver "^7.0.0" bundle-require@^4.0.0: version "4.0.2" @@ -4314,44 +4064,51 @@ busboy@1.6.0: dependencies: streamsearch "^1.1.0" -byline@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1" - integrity sha512-s6webAy+R4SR8XVuJWt2V2rGvhnrhxN+9S15GNuTK3wKPOXFF6RNc+8ug2XhH+2s4f+uudG4kUVYmYOQWL2g0Q== - -byte-size@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-7.0.1.tgz#b1daf3386de7ab9d706b941a748dbfc71130dee3" - integrity sha512-crQdqyCwhokxwV1UyDzLZanhkugAgft7vt0qbbdt60C6Zf3CAiGmtUCylbtYwrU6loOUw3euGrNtW1J651ot1A== +byte-size@8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-8.1.1.tgz#3424608c62d59de5bfda05d31e0313c6174842ae" + integrity sha512-tUkzZWK0M/qdoLEqikxBWe4kumyuwjl3HO6zHTr4yEI23EojPtLYXdG1+AQY7MN0cGyNDvEaJ8wiYQm6P2bPxg== cac@^6.7.12: version "6.7.14" resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== -cacache@^15.0.5, cacache@^15.2.0: - version "15.3.0" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" - integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== +cacache@^17.0.0: + version "17.1.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-17.1.4.tgz#b3ff381580b47e85c6e64f801101508e26604b35" + integrity sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A== dependencies: - "@npmcli/fs" "^1.0.0" - "@npmcli/move-file" "^1.0.1" - chownr "^2.0.0" - fs-minipass "^2.0.0" - glob "^7.1.4" - infer-owner "^1.0.4" - lru-cache "^6.0.0" - minipass "^3.1.1" + "@npmcli/fs" "^3.1.0" + fs-minipass "^3.0.0" + glob "^10.2.2" + lru-cache "^7.7.1" + minipass "^7.0.3" minipass-collect "^1.0.2" minipass-flush "^1.0.5" - minipass-pipeline "^1.2.2" - mkdirp "^1.0.3" + minipass-pipeline "^1.2.4" p-map "^4.0.0" - promise-inflight "^1.0.1" - rimraf "^3.0.2" - ssri "^8.0.1" - tar "^6.0.2" - unique-filename "^1.1.1" + ssri "^10.0.0" + tar "^6.1.11" + unique-filename "^3.0.0" + +cacache@^18.0.0: + version "18.0.2" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-18.0.2.tgz#fd527ea0f03a603be5c0da5805635f8eef00c60c" + integrity sha512-r3NU8h/P+4lVUHfeRw1dtgQYar3DZMm4/cm2bZgOvrFC/su7budSOeqh52VJIC4U4iG1WWwV6vRW0znqBvxNuw== + dependencies: + "@npmcli/fs" "^3.1.0" + fs-minipass "^3.0.0" + glob "^10.2.2" + lru-cache "^10.0.1" + minipass "^7.0.3" + minipass-collect "^2.0.1" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + p-map "^4.0.0" + ssri "^10.0.0" + tar "^6.1.11" + unique-filename "^3.0.0" cacheable-request@^6.0.0: version "6.1.0" @@ -4371,14 +4128,16 @@ cachedir@^2.3.0: resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.4.0.tgz#7fef9cf7367233d7c88068fe6e34ed0d355a610d" integrity sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ== -call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4, call-bind@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" - integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== +call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" + integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" function-bind "^1.1.2" - get-intrinsic "^1.2.1" - set-function-length "^1.1.1" + get-intrinsic "^1.2.4" + set-function-length "^1.2.1" callsites@^3.0.0: version "3.1.0" @@ -4414,10 +4173,10 @@ camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001406, caniuse-lite@^1.0.30001538, caniuse-lite@^1.0.30001541: - version "1.0.30001559" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001559.tgz#95a982440d3d314c471db68d02664fb7536c5a30" - integrity sha512-cPiMKZgqgkg5LY3/ntGeLFUpi6tzddBNS58A4tnTgQw1zON7u2sZMU7SzOeVH4tj20++9ggL+V6FDOFMTaFFYA== +caniuse-lite@^1.0.30001406, caniuse-lite@^1.0.30001578, caniuse-lite@^1.0.30001579, caniuse-lite@^1.0.30001587: + version "1.0.30001588" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001588.tgz#07f16b65a7f95dba82377096923947fb25bce6e3" + integrity sha512-+hVY9jE44uKLkH0SrUTqxjxqNTOWHsbnQDIKjwkZ3lNTzUUVdBLBGXtj/q5Mp5u98r3droaZAewQuEDzjQdZlQ== capture-stack-trace@^1.0.0: version "1.0.2" @@ -4434,6 +4193,14 @@ ccount@^1.0.0: resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.1.0.tgz#246687debb6014735131be8abab2d93898f8d043" integrity sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg== +chalk@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chalk@5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" @@ -4467,7 +4234,7 @@ chalk@^3.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^4.0.0, chalk@^4.1.0: +chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -4506,9 +4273,9 @@ check-more-types@2.24.0, check-more-types@^2.24.0: integrity sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA== chokidar@^3.5.1, chokidar@^3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== dependencies: anymatch "~3.1.2" braces "~3.0.2" @@ -4520,7 +4287,7 @@ chokidar@^3.5.1, chokidar@^3.5.3: optionalDependencies: fsevents "~2.3.2" -chownr@^1.1.1, chownr@^1.1.4: +chownr@^1.1.1: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== @@ -4540,7 +4307,7 @@ ci-info@^2.0.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== -ci-info@^3.2.0: +ci-info@^3.2.0, ci-info@^3.6.1: version "3.9.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== @@ -4551,9 +4318,9 @@ cjs-module-lexer@^1.0.0: integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== classnames@^2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924" - integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw== + version "2.5.1" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.5.1.tgz#ba774c614be0f016da105c858e7159eae8e7687b" + integrity sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow== clean-stack@^2.0.0: version "2.2.0" @@ -4570,7 +4337,7 @@ cli-boxes@^2.2.0: resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== -cli-cursor@^3.1.0: +cli-cursor@3.1.0, cli-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== @@ -4584,6 +4351,16 @@ cli-cursor@^4.0.0: dependencies: restore-cursor "^4.0.0" +cli-spinners@2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" + integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== + +cli-spinners@^2.5.0: + version "2.9.2" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" + integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== + cli-table3@~0.6.1: version "0.6.3" resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.3.tgz#61ab765aac156b52f222954ffc607a6f01dbeeb2" @@ -4601,13 +4378,13 @@ cli-truncate@^2.1.0: slice-ansi "^3.0.0" string-width "^4.2.0" -cli-truncate@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-3.1.0.tgz#3f23ab12535e3d73e839bb43e73c9de487db1389" - integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA== +cli-truncate@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-4.0.0.tgz#6cc28a2924fee9e25ce91e973db56c7066e6172a" + integrity sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA== dependencies: slice-ansi "^5.0.0" - string-width "^5.0.0" + string-width "^7.0.0" cli-width@^3.0.0: version "3.0.0" @@ -4646,7 +4423,7 @@ cliui@^8.0.1: strip-ansi "^6.0.1" wrap-ansi "^7.0.0" -clone-deep@^4.0.1: +clone-deep@4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== @@ -4682,23 +4459,16 @@ cluster-key-slot@^1.1.0: resolved "https://registry.yarnpkg.com/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz#88ddaa46906e303b5de30d3153b7d9fe0a0c19ac" integrity sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA== -cmd-shim@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-4.1.0.tgz#b3a904a6743e9fede4148c6f3800bf2a08135bdd" - integrity sha512-lb9L7EM4I/ZRVuljLPEtUJOP+xiQVknZ4ZMpMgEp4JzNldPb27HU03hi6K1/6CoIuit/Zm/LQXySErFeXxDprw== - dependencies: - mkdirp-infer-owner "^2.0.0" +cmd-shim@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-6.0.1.tgz#a65878080548e1dca760b3aea1e21ed05194da9d" + integrity sha512-S9iI9y0nKR4hwEQsVWpyxld/6kRfGepGfzff83FcaiEBpmvlbA2nnGe7Cylgrx2f/p1P5S5wpRm9oL8z1PbS3Q== co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA== - collapse-white-space@^1.0.2: version "1.0.6" resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.6.tgz#e63629c0016665792060dbbeb79c42239d2c5287" @@ -4741,6 +4511,11 @@ color-string@^1.9.0: color-name "^1.0.0" simple-swizzle "^0.2.2" +color-support@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== + color@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/color/-/color-4.2.3.tgz#d781ecb5e57224ee43ea9627560107c0e0c6463a" @@ -4754,7 +4529,7 @@ colorette@^2.0.16, colorette@^2.0.20: resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== -columnify@^1.5.4: +columnify@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.6.0.tgz#6989531713c9008bb29735e61e37acf5bd553cf3" integrity sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q== @@ -4832,14 +4607,6 @@ concat-stream@^2.0.0: readable-stream "^3.0.2" typedarray "^0.0.6" -config-chain@^1.1.12: - version "1.1.13" - resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" - integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== - dependencies: - ini "^1.3.4" - proto-list "~1.2.1" - configstore@^3.0.0: version "3.1.5" resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.5.tgz#e9af331fadc14dabd544d3e7e76dc446a09a530f" @@ -4864,92 +4631,67 @@ configstore@^5.0.1: write-file-atomic "^3.0.0" xdg-basedir "^4.0.0" -console-control-strings@^1.0.0, console-control-strings@~1.1.0: +console-control-strings@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== -conventional-changelog-angular@^5.0.12: - version "5.0.13" - resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz#896885d63b914a70d4934b59d2fe7bde1832b28c" - integrity sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA== - dependencies: - compare-func "^2.0.0" - q "^1.5.1" - -conventional-changelog-angular@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-6.0.0.tgz#a9a9494c28b7165889144fd5b91573c4aa9ca541" - integrity sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg== +conventional-changelog-angular@7.0.0, conventional-changelog-angular@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz#5eec8edbff15aa9b1680a8dcfbd53e2d7eb2ba7a" + integrity sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ== dependencies: compare-func "^2.0.0" -conventional-changelog-conventionalcommits@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-6.1.0.tgz#3bad05f4eea64e423d3d90fc50c17d2c8cf17652" - integrity sha512-3cS3GEtR78zTfMzk0AizXKKIdN4OvSh7ibNz6/DPbhWWQu7LqE/8+/GqSodV+sywUR2gpJAdP/1JFf4XtN7Zpw== +conventional-changelog-conventionalcommits@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-7.0.2.tgz#aa5da0f1b2543094889e8cf7616ebe1a8f5c70d5" + integrity sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w== dependencies: compare-func "^2.0.0" -conventional-changelog-core@^4.2.2: - version "4.2.4" - resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz#e50d047e8ebacf63fac3dc67bf918177001e1e9f" - integrity sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg== +conventional-changelog-core@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-5.0.1.tgz#3c331b155d5b9850f47b4760aeddfc983a92ad49" + integrity sha512-Rvi5pH+LvgsqGwZPZ3Cq/tz4ty7mjijhr3qR4m9IBXNbxGGYgTVVO+duXzz9aArmHxFtwZ+LRkrNIMDQzgoY4A== dependencies: add-stream "^1.0.0" - conventional-changelog-writer "^5.0.0" - conventional-commits-parser "^3.2.0" - dateformat "^3.0.0" - get-pkg-repo "^4.0.0" - git-raw-commits "^2.0.8" + conventional-changelog-writer "^6.0.0" + conventional-commits-parser "^4.0.0" + dateformat "^3.0.3" + get-pkg-repo "^4.2.1" + git-raw-commits "^3.0.0" git-remote-origin-url "^2.0.0" - git-semver-tags "^4.1.1" - lodash "^4.17.15" - normalize-package-data "^3.0.0" - q "^1.5.1" + git-semver-tags "^5.0.0" + normalize-package-data "^3.0.3" read-pkg "^3.0.0" read-pkg-up "^3.0.0" - through2 "^4.0.0" -conventional-changelog-preset-loader@^2.3.4: - version "2.3.4" - resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz#14a855abbffd59027fd602581f1f34d9862ea44c" - integrity sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g== +conventional-changelog-preset-loader@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-3.0.0.tgz#14975ef759d22515d6eabae6396c2ae721d4c105" + integrity sha512-qy9XbdSLmVnwnvzEisjxdDiLA4OmV3o8db+Zdg4WiFw14fP3B6XNz98X0swPPpkTd/pc1K7+adKgEDM1JCUMiA== -conventional-changelog-writer@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz#e0757072f045fe03d91da6343c843029e702f359" - integrity sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ== +conventional-changelog-writer@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-6.0.1.tgz#d8d3bb5e1f6230caed969dcc762b1c368a8f7b01" + integrity sha512-359t9aHorPw+U+nHzUXHS5ZnPBOizRxfQsWT5ZDHBfvfxQOAik+yfuhKXG66CN5LEWPpMNnIMHUTCKeYNprvHQ== dependencies: - conventional-commits-filter "^2.0.7" - dateformat "^3.0.0" + conventional-commits-filter "^3.0.0" + dateformat "^3.0.3" handlebars "^4.7.7" json-stringify-safe "^5.0.1" - lodash "^4.17.15" - meow "^8.0.0" - semver "^6.0.0" - split "^1.0.0" - through2 "^4.0.0" + meow "^8.1.2" + semver "^7.0.0" + split "^1.0.1" -conventional-commits-filter@^2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz#f8d9b4f182fce00c9af7139da49365b136c8a0b3" - integrity sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA== +conventional-commits-filter@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-3.0.0.tgz#bf1113266151dd64c49cd269e3eb7d71d7015ee2" + integrity sha512-1ymej8b5LouPx9Ox0Dw/qAO2dVdfpRFq28e5Y0jJEU8ZrLdy0vOSkkIInwmxErFGhg6SALro60ZrwYFVTUDo4Q== dependencies: lodash.ismatch "^4.4.0" - modify-values "^1.0.0" - -conventional-commits-parser@^3.2.0: - version "3.2.4" - resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz#a7d3b77758a202a9b2293d2112a8d8052c740972" - integrity sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q== - dependencies: - JSONStream "^1.0.4" - is-text-path "^1.0.1" - lodash "^4.17.15" - meow "^8.0.0" - split2 "^3.0.0" - through2 "^4.0.0" + modify-values "^1.0.1" conventional-commits-parser@^4.0.0: version "4.0.0" @@ -4961,21 +4703,30 @@ conventional-commits-parser@^4.0.0: meow "^8.1.2" split2 "^3.2.2" -conventional-recommended-bump@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz#cfa623285d1de554012f2ffde70d9c8a22231f55" - integrity sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw== +conventional-commits-parser@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz#57f3594b81ad54d40c1b4280f04554df28627d9a" + integrity sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA== + dependencies: + JSONStream "^1.3.5" + is-text-path "^2.0.0" + meow "^12.0.1" + split2 "^4.0.0" + +conventional-recommended-bump@7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-7.0.1.tgz#ec01f6c7f5d0e2491c2d89488b0d757393392424" + integrity sha512-Ft79FF4SlOFvX4PkwFDRnaNiIVX7YbmqGU0RwccUaiGvgp3S0a8ipR2/Qxk31vclDNM+GSdJOVs2KrsUCjblVA== dependencies: concat-stream "^2.0.0" - conventional-changelog-preset-loader "^2.3.4" - conventional-commits-filter "^2.0.7" - conventional-commits-parser "^3.2.0" - git-raw-commits "^2.0.8" - git-semver-tags "^4.1.1" - meow "^8.0.0" - q "^1.5.1" + conventional-changelog-preset-loader "^3.0.0" + conventional-commits-filter "^3.0.0" + conventional-commits-parser "^4.0.0" + git-raw-commits "^3.0.0" + git-semver-tags "^5.0.0" + meow "^8.1.2" -convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: +convert-source-map@^1.7.0: version "1.9.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== @@ -4997,17 +4748,17 @@ copy-to-clipboard@^3.3.1: dependencies: toggle-selection "^1.0.6" -core-js-compat@^3.31.0, core-js-compat@^3.33.1: - version "3.33.2" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.33.2.tgz#3ea4563bfd015ad4e4b52442865b02c62aba5085" - integrity sha512-axfo+wxFVxnqf8RvxTzoAlzW4gRoacrHeoFlc9n0x50+7BEyZL/Rt3hicaED1/CEd7I6tPCPVUYcJwCMO5XUYw== +core-js-compat@^3.31.0, core-js-compat@^3.34.0: + version "3.36.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.36.0.tgz#087679119bc2fdbdefad0d45d8e5d307d45ba190" + integrity sha512-iV9Pd/PsgjNWBXeq8XRtWVSgz2tKAfhfvBs7qxYty+RlRd+OCksaWmOnc4JKrTc1cToXL1N0s3l/vwlxPtdElw== dependencies: - browserslist "^4.22.1" + browserslist "^4.22.3" core-js@^3: - version "3.33.2" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.33.2.tgz#312bbf6996a3a517c04c99b9909cdd27138d1ceb" - integrity sha512-XeBzWI6QL3nJQiHmdzbAOiMYqjrb7hwU7A39Qhvd/POSa/t9E1AeZyEZx3fNvp/vtM8zXwhoL0FsiS0hD0pruQ== + version "3.36.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.36.0.tgz#e752fa0b0b462a0787d56e9d73f80b0f7c0dde68" + integrity sha512-mt7+TUBbTFg5+GngsAxeKBTl5/VS0guFeJacYge9OmHb+m058UwwIm41SE9T4Den7ClatV57B6TYTuJ0CX1MAw== core-util-is@1.0.2: version "1.0.2" @@ -5019,23 +4770,14 @@ core-util-is@^1.0.2, core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== -cosmiconfig-typescript-loader@^4.0.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.4.0.tgz#f3feae459ea090f131df5474ce4b1222912319f9" - integrity sha512-BabizFdC3wBHhbI4kJh0VkQP9GkBfoHPydD0COMce1nJ1kJAB3F2TmJ/I7diULBKtmEWSwEbuN/KDtgnmUUVmw== - -cosmiconfig@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" - integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== +cosmiconfig-typescript-loader@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-5.0.0.tgz#0d3becfe022a871f7275ceb2397d692e06045dc8" + integrity sha512-+8cK7jRAReYkMwMiG+bxhcNKiHJDM6bR9FD/nGBXOWdMLuYawjF5cGrtLilJ+LGd3ZjCXnJjR5DkfWPoIVlqJA== dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.2.1" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.10.0" + jiti "^1.19.1" -cosmiconfig@^8.0.0: +cosmiconfig@^8.2.0, cosmiconfig@^8.3.6: version "8.3.6" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3" integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== @@ -5052,6 +4794,19 @@ create-error-class@^3.0.0: dependencies: capture-stack-trace "^1.0.0" +create-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320" + integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== + dependencies: + "@jest/types" "^29.6.3" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-config "^29.7.0" + jest-util "^29.7.0" + prompts "^2.0.1" + create-require@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" @@ -5097,27 +4852,10 @@ cssesc@^3.0.0: resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== -cssom@^0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" - integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== - -cssom@~0.3.6: - version "0.3.8" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" - integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== - -cssstyle@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" - integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== - dependencies: - cssom "~0.3.6" - csstype@^3.0.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" - integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== + version "3.1.3" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" + integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== cypress@^9.7.0: version "9.7.0" @@ -5184,16 +4922,7 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -data-urls@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" - integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== - dependencies: - abab "^2.0.3" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.0.0" - -dateformat@^3.0.0: +dateformat@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== @@ -5217,11 +4946,6 @@ debug@^3.1.0, debug@^3.2.7: dependencies: ms "^2.1.1" -debuglog@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" - integrity sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw== - decamelize-keys@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8" @@ -5235,16 +4959,6 @@ decamelize@^1.1.0, decamelize@^1.2.0: resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== -decimal.js@^10.2.1: - version "10.4.3" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" - integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== - -decode-uri-component@^0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" - integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== - decompress-response@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" @@ -5259,20 +4973,25 @@ decompress-response@^6.0.0: dependencies: mimic-response "^3.1.0" -dedent@^0.7.0: +dedent@0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== +dedent@^1.0.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.1.tgz#4f3fc94c8b711e9bb2800d185cd6ad20f2a90aff" + integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg== + deep-equal@^2.0.5: - version "2.2.2" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.2.tgz#9b2635da569a13ba8e1cc159c2f744071b115daa" - integrity sha512-xjVyBf0w5vH0I42jdAZzOKVldmPgSulmiyPRywoyq7HXC9qdgo17kxJE+rdnif5Tz6+pIrpJI8dCpMNLIGkUiA== + version "2.2.3" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.3.tgz#af89dafb23a396c7da3e862abc0be27cf51d56e1" + integrity sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA== dependencies: array-buffer-byte-length "^1.0.0" - call-bind "^1.0.2" + call-bind "^1.0.5" es-get-iterator "^1.1.3" - get-intrinsic "^1.2.1" + get-intrinsic "^1.2.2" is-arguments "^1.1.1" is-array-buffer "^3.0.2" is-date-object "^1.0.5" @@ -5282,11 +5001,11 @@ deep-equal@^2.0.5: object-is "^1.1.5" object-keys "^1.1.1" object.assign "^4.1.4" - regexp.prototype.flags "^1.5.0" + regexp.prototype.flags "^1.5.1" side-channel "^1.0.4" which-boxed-primitive "^1.0.2" which-collection "^1.0.1" - which-typed-array "^1.1.9" + which-typed-array "^1.1.13" deep-extend@^0.6.0: version "0.6.0" @@ -5303,24 +5022,6 @@ deepmerge@^4.2.2, deepmerge@^4.3.1: resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== -default-browser-id@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-3.0.0.tgz#bee7bbbef1f4e75d31f98f4d3f1556a14cea790c" - integrity sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA== - dependencies: - bplist-parser "^0.2.0" - untildify "^4.0.0" - -default-browser@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-4.0.0.tgz#53c9894f8810bf86696de117a6ce9085a3cbc7da" - integrity sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA== - dependencies: - bundle-name "^3.0.0" - default-browser-id "^3.0.0" - execa "^7.1.1" - titleize "^3.0.0" - defaults@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" @@ -5333,21 +5034,21 @@ defer-to-connect@^1.0.1: resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== -define-data-property@^1.0.1, define-data-property@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" - integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== +define-data-property@^1.0.1, define-data-property@^1.1.2, define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== dependencies: - get-intrinsic "^1.2.1" + es-define-property "^1.0.0" + es-errors "^1.3.0" gopd "^1.0.1" - has-property-descriptors "^1.0.0" -define-lazy-prop@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f" - integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== -define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0, define-properties@^1.2.1: +define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== @@ -5371,7 +5072,7 @@ denque@^2.1.0: resolved "https://registry.yarnpkg.com/denque/-/denque-2.1.0.tgz#e93e1a6569fb5e66f16a3c2a2964617d349d6ab1" integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw== -deprecation@^2.0.0, deprecation@^2.3.1: +deprecation@^2.0.0: version "2.3.1" resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== @@ -5408,7 +5109,7 @@ detect-newline@^3.0.0: resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== -dezalgo@^1.0.0, dezalgo@^1.0.4: +dezalgo@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.4.tgz#751235260469084c132157dfa857f386d4c33d81" integrity sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig== @@ -5421,10 +5122,10 @@ didyoumean@^1.2.2: resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== -diff-sequences@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327" - integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== +diff-sequences@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" + integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== diff@^4.0.1: version "4.0.2" @@ -5476,13 +5177,6 @@ domelementtype@^2.3.0: resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== -domexception@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" - integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== - dependencies: - webidl-conversions "^5.0.0" - domhandler@5.0.3, domhandler@^5.0.2, domhandler@^5.0.3: version "5.0.3" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" @@ -5513,18 +5207,21 @@ dot-prop@^5.1.0, dot-prop@^5.2.0: dependencies: is-obj "^2.0.0" -dot-prop@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-6.0.1.tgz#fc26b3cf142b9e59b74dbd39ed66ce620c681083" - integrity sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA== - dependencies: - is-obj "^2.0.0" +dotenv-expand@~10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-10.0.0.tgz#12605d00fb0af6d0a592e6558585784032e4ef37" + integrity sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A== dotenv@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-5.0.1.tgz#a5317459bd3d79ab88cff6e44057a6a3fbb1fcef" integrity sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow== +dotenv@~16.3.1: + version "16.3.2" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.3.2.tgz#3cb611ce5a63002dbabf7c281bc331f69d28f03f" + integrity sha512-HTlk5nmhkm8F6JcdXvHIzaorzCoziNQT9mGxLPVXW8wJF1TiGSL60ZGB4gHWabHOaMmWmhvk2/lPHfnBiT78AQ== + drupal-jsonapi-params@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/drupal-jsonapi-params/-/drupal-jsonapi-params-1.2.3.tgz#e27676f897732c6093081f45853ec2612f1bd6b8" @@ -5532,7 +5229,7 @@ drupal-jsonapi-params@^1.2.2: dependencies: qs "^6.10.0" -drupal-jsonapi-params@^2.0.0, drupal-jsonapi-params@^2.3.1: +drupal-jsonapi-params@^2.0.0, drupal-jsonapi-params@^2.1.0, drupal-jsonapi-params@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/drupal-jsonapi-params/-/drupal-jsonapi-params-2.3.1.tgz#7e91f9d7aa6b2b0793cf6b51fe19a5ffb9591278" integrity sha512-Isx6dudrFhORCl87OWHHO2LpQIAha5d6n7+/fwngsgcQs4PYeZcmTAA3pKUmvfyyFgCJ0N4fLAJQHyf4jtgiDA== @@ -5572,15 +5269,27 @@ editorconfig@^0.15.3: semver "^5.6.0" sigmund "^1.0.1" -electron-to-chromium@^1.4.535: - version "1.4.572" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.572.tgz#ed9876658998138fe9e3aa47ecfa0bf914192a86" - integrity sha512-RlFobl4D3ieetbnR+2EpxdzFl9h0RAJkPK3pfiwMug2nhBin2ZCsGIAJWdpNniLz43sgXam/CgipOmvTA+rUiA== +ejs@^3.1.7: + version "3.1.9" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.9.tgz#03c9e8777fe12686a9effcef22303ca3d8eeb361" + integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ== + dependencies: + jake "^10.8.5" -emittery@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860" - integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg== +electron-to-chromium@^1.4.668: + version "1.4.677" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.677.tgz#49ee77713516740bdde32ac2d1443c444f0dafe7" + integrity sha512-erDa3CaDzwJOpyvfKhOiJjBVNnMM0qxHq47RheVVwsSQrgBA9ZSGV9kdaOfZDPXcHzhG7lBxhj6A7KvfLJBd6Q== + +emittery@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" + integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== + +emoji-regex@^10.3.0: + version "10.3.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.3.0.tgz#76998b9268409eb3dae3de989254d456e70cfe23" + integrity sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw== emoji-regex@^7.0.1: version "7.0.3" @@ -5597,7 +5306,7 @@ emoji-regex@^9.2.2: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== -encoding@^0.1.12: +encoding@^0.1.13: version "0.1.13" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== @@ -5627,6 +5336,13 @@ enquirer@^2.3.6: ansi-colors "^4.1.1" strip-ansi "^6.0.1" +enquirer@~2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + entities@^4.2.0, entities@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" @@ -5637,10 +5353,10 @@ env-paths@^2.2.0: resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== -envinfo@^7.7.4: - version "7.11.0" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.11.0.tgz#c3793f44284a55ff8c82faf1ffd91bc6478ea01f" - integrity sha512-G9/6xF1FPbIw0TtalAMaVPpiq2aDEuKLXM314jPVAO9r2fo2a4BLqMNkmRS7O/xPPZ+COAhGIz3ETvHEV3eUcg== +envinfo@7.8.1: + version "7.8.1" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" + integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== err-code@^2.0.2: version "2.0.3" @@ -5654,56 +5370,70 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.22.1: - version "1.22.3" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" - integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== - dependencies: - array-buffer-byte-length "^1.0.0" - arraybuffer.prototype.slice "^1.0.2" - available-typed-arrays "^1.0.5" - call-bind "^1.0.5" - es-set-tostringtag "^2.0.1" +es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.22.4: + version "1.22.4" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.4.tgz#26eb2e7538c3271141f5754d31aabfdb215f27bf" + integrity sha512-vZYJlk2u6qHYxBOTjAeg7qUxHdNfih64Uu2J8QqWgXZ2cri0ZpJAkzDUK/q593+mvKwlxyaxr6F1Q+3LKoQRgg== + dependencies: + array-buffer-byte-length "^1.0.1" + arraybuffer.prototype.slice "^1.0.3" + available-typed-arrays "^1.0.6" + call-bind "^1.0.7" + es-define-property "^1.0.0" + es-errors "^1.3.0" + es-set-tostringtag "^2.0.2" es-to-primitive "^1.2.1" function.prototype.name "^1.1.6" - get-intrinsic "^1.2.2" - get-symbol-description "^1.0.0" + get-intrinsic "^1.2.4" + get-symbol-description "^1.0.2" globalthis "^1.0.3" gopd "^1.0.1" - has-property-descriptors "^1.0.0" + has-property-descriptors "^1.0.2" has-proto "^1.0.1" has-symbols "^1.0.3" - hasown "^2.0.0" - internal-slot "^1.0.5" - is-array-buffer "^3.0.2" + hasown "^2.0.1" + internal-slot "^1.0.7" + is-array-buffer "^3.0.4" is-callable "^1.2.7" is-negative-zero "^2.0.2" is-regex "^1.1.4" is-shared-array-buffer "^1.0.2" is-string "^1.0.7" - is-typed-array "^1.1.12" + is-typed-array "^1.1.13" is-weakref "^1.0.2" object-inspect "^1.13.1" object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.5.1" - safe-array-concat "^1.0.1" - safe-regex-test "^1.0.0" + object.assign "^4.1.5" + regexp.prototype.flags "^1.5.2" + safe-array-concat "^1.1.0" + safe-regex-test "^1.0.3" string.prototype.trim "^1.2.8" string.prototype.trimend "^1.0.7" string.prototype.trimstart "^1.0.7" - typed-array-buffer "^1.0.0" + typed-array-buffer "^1.0.1" typed-array-byte-length "^1.0.0" typed-array-byte-offset "^1.0.0" typed-array-length "^1.0.4" unbox-primitive "^1.0.2" - which-typed-array "^1.1.13" + which-typed-array "^1.1.14" es-array-method-boxes-properly@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== +es-define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + dependencies: + get-intrinsic "^1.2.4" + +es-errors@^1.0.0, es-errors@^1.1.0, es-errors@^1.2.1, es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + es-get-iterator@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6" @@ -5719,36 +5449,37 @@ es-get-iterator@^1.1.3: isarray "^2.0.5" stop-iteration-iterator "^1.0.0" -es-iterator-helpers@^1.0.12: - version "1.0.15" - resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz#bd81d275ac766431d19305923707c3efd9f1ae40" - integrity sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g== +es-iterator-helpers@^1.0.12, es-iterator-helpers@^1.0.15: + version "1.0.17" + resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.17.tgz#123d1315780df15b34eb181022da43e734388bb8" + integrity sha512-lh7BsUqelv4KUbR5a/ZTaGGIMLCjPGPqJ6q+Oq24YP0RdyptX1uzm4vvaqzk7Zx3bpl/76YLTTDj9L7uYQ92oQ== dependencies: asynciterator.prototype "^1.0.0" - call-bind "^1.0.2" + call-bind "^1.0.7" define-properties "^1.2.1" - es-abstract "^1.22.1" - es-set-tostringtag "^2.0.1" - function-bind "^1.1.1" - get-intrinsic "^1.2.1" + es-abstract "^1.22.4" + es-errors "^1.3.0" + es-set-tostringtag "^2.0.2" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" globalthis "^1.0.3" - has-property-descriptors "^1.0.0" + has-property-descriptors "^1.0.2" has-proto "^1.0.1" has-symbols "^1.0.3" - internal-slot "^1.0.5" + internal-slot "^1.0.7" iterator.prototype "^1.1.2" - safe-array-concat "^1.0.1" + safe-array-concat "^1.1.0" -es-set-tostringtag@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9" - integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q== +es-set-tostringtag@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" + integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== dependencies: - get-intrinsic "^1.2.2" - has-tostringtag "^1.0.0" - hasown "^2.0.0" + get-intrinsic "^1.2.4" + has-tostringtag "^1.0.2" + hasown "^2.0.1" -es-shim-unscopables@^1.0.0: +es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== @@ -5765,37 +5496,38 @@ es-to-primitive@^1.2.1: is-symbol "^1.0.2" esbuild@^0.19.2: - version "0.19.5" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.5.tgz#53a0e19dfbf61ba6c827d51a80813cf071239a8c" - integrity sha512-bUxalY7b1g8vNhQKdB24QDmHeY4V4tw/s6Ak5z+jJX9laP5MoQseTOMemAr0gxssjNcH0MCViG8ONI2kksvfFQ== + version "0.19.12" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.12.tgz#dc82ee5dc79e82f5a5c3b4323a2a641827db3e04" + integrity sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg== optionalDependencies: - "@esbuild/android-arm" "0.19.5" - "@esbuild/android-arm64" "0.19.5" - "@esbuild/android-x64" "0.19.5" - "@esbuild/darwin-arm64" "0.19.5" - "@esbuild/darwin-x64" "0.19.5" - "@esbuild/freebsd-arm64" "0.19.5" - "@esbuild/freebsd-x64" "0.19.5" - "@esbuild/linux-arm" "0.19.5" - "@esbuild/linux-arm64" "0.19.5" - "@esbuild/linux-ia32" "0.19.5" - "@esbuild/linux-loong64" "0.19.5" - "@esbuild/linux-mips64el" "0.19.5" - "@esbuild/linux-ppc64" "0.19.5" - "@esbuild/linux-riscv64" "0.19.5" - "@esbuild/linux-s390x" "0.19.5" - "@esbuild/linux-x64" "0.19.5" - "@esbuild/netbsd-x64" "0.19.5" - "@esbuild/openbsd-x64" "0.19.5" - "@esbuild/sunos-x64" "0.19.5" - "@esbuild/win32-arm64" "0.19.5" - "@esbuild/win32-ia32" "0.19.5" - "@esbuild/win32-x64" "0.19.5" + "@esbuild/aix-ppc64" "0.19.12" + "@esbuild/android-arm" "0.19.12" + "@esbuild/android-arm64" "0.19.12" + "@esbuild/android-x64" "0.19.12" + "@esbuild/darwin-arm64" "0.19.12" + "@esbuild/darwin-x64" "0.19.12" + "@esbuild/freebsd-arm64" "0.19.12" + "@esbuild/freebsd-x64" "0.19.12" + "@esbuild/linux-arm" "0.19.12" + "@esbuild/linux-arm64" "0.19.12" + "@esbuild/linux-ia32" "0.19.12" + "@esbuild/linux-loong64" "0.19.12" + "@esbuild/linux-mips64el" "0.19.12" + "@esbuild/linux-ppc64" "0.19.12" + "@esbuild/linux-riscv64" "0.19.12" + "@esbuild/linux-s390x" "0.19.12" + "@esbuild/linux-x64" "0.19.12" + "@esbuild/netbsd-x64" "0.19.12" + "@esbuild/openbsd-x64" "0.19.12" + "@esbuild/sunos-x64" "0.19.12" + "@esbuild/win32-arm64" "0.19.12" + "@esbuild/win32-ia32" "0.19.12" + "@esbuild/win32-x64" "0.19.12" escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + version "3.1.2" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" + integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== escape-goat@^2.0.0: version "2.1.1" @@ -5817,17 +5549,6 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -escodegen@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" - integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== - dependencies: - esprima "^4.0.1" - estraverse "^5.2.0" - esutils "^2.0.2" - optionalDependencies: - source-map "~0.6.1" - eslint-config-next@^12.0.10, eslint-config-next@^12.1.4: version "12.3.4" resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-12.3.4.tgz#3d4d9e74b919b879c4cc79c61bdc388fb2b964ee" @@ -5843,12 +5564,12 @@ eslint-config-next@^12.0.10, eslint-config-next@^12.1.4: eslint-plugin-react "^7.31.7" eslint-plugin-react-hooks "^4.5.0" -eslint-config-next@^13.0.6: - version "13.5.6" - resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-13.5.6.tgz#3a5a6222d5cb32256760ad68ab8e976e866a08c8" - integrity sha512-o8pQsUHTo9aHqJ2YiZDym5gQAMRf7O2HndHo/JZeY7TDD+W4hk6Ma8Vw54RHiBeb7OWWO5dPirQB+Is/aVQ7Kg== +eslint-config-next@^14.0.3: + version "14.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-14.1.0.tgz#7e309d426b8afacaba3b32fdbb02ba220b6d0a97" + integrity sha512-SBX2ed7DoRFXC6CQSLc/SbLY9Ut6HxNB2wPTcoIWjUMd7aF7O/SIE7111L8FdZ9TXsNV4pulUDnfthpyPtbFUg== dependencies: - "@next/eslint-plugin-next" "13.5.6" + "@next/eslint-plugin-next" "14.1.0" "@rushstack/eslint-patch" "^1.3.3" "@typescript-eslint/parser" "^5.4.2 || ^6.0.0" eslint-import-resolver-node "^0.3.6" @@ -5858,10 +5579,10 @@ eslint-config-next@^13.0.6: eslint-plugin-react "^7.33.2" eslint-plugin-react-hooks "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705" -eslint-config-prettier@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz#eb25485946dd0c66cd216a46232dc05451518d1f" - integrity sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw== +eslint-config-prettier@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz#31af3d94578645966c082fcb71a5846d3c94867f" + integrity sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw== eslint-import-resolver-node@^0.3.6, eslint-import-resolver-node@^0.3.9: version "0.3.9" @@ -5911,9 +5632,9 @@ eslint-plugin-cypress@^2.15.1: globals "^13.20.0" eslint-plugin-import@^2.26.0, eslint-plugin-import@^2.28.1: - version "2.29.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz#8133232e4329ee344f2f612885ac3073b0b7e155" - integrity sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg== + version "2.29.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz#d45b37b5ef5901d639c15270d74d46d161150643" + integrity sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw== dependencies: array-includes "^3.1.7" array.prototype.findlastindex "^1.2.3" @@ -5931,37 +5652,37 @@ eslint-plugin-import@^2.26.0, eslint-plugin-import@^2.28.1: object.groupby "^1.0.1" object.values "^1.1.7" semver "^6.3.1" - tsconfig-paths "^3.14.2" + tsconfig-paths "^3.15.0" eslint-plugin-jsx-a11y@^6.5.1, eslint-plugin-jsx-a11y@^6.7.1: - version "6.7.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz#fca5e02d115f48c9a597a6894d5bcec2f7a76976" - integrity sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA== + version "6.8.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz#2fa9c701d44fcd722b7c771ec322432857fcbad2" + integrity sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA== dependencies: - "@babel/runtime" "^7.20.7" - aria-query "^5.1.3" - array-includes "^3.1.6" - array.prototype.flatmap "^1.3.1" - ast-types-flow "^0.0.7" - axe-core "^4.6.2" - axobject-query "^3.1.1" + "@babel/runtime" "^7.23.2" + aria-query "^5.3.0" + array-includes "^3.1.7" + array.prototype.flatmap "^1.3.2" + ast-types-flow "^0.0.8" + axe-core "=4.7.0" + axobject-query "^3.2.1" damerau-levenshtein "^1.0.8" emoji-regex "^9.2.2" - has "^1.0.3" - jsx-ast-utils "^3.3.3" - language-tags "=1.0.5" + es-iterator-helpers "^1.0.15" + hasown "^2.0.0" + jsx-ast-utils "^3.3.5" + language-tags "^1.0.9" minimatch "^3.1.2" - object.entries "^1.1.6" - object.fromentries "^2.0.6" - semver "^6.3.0" + object.entries "^1.1.7" + object.fromentries "^2.0.7" -eslint-plugin-prettier@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.1.tgz#a3b399f04378f79f066379f544e42d6b73f11515" - integrity sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg== +eslint-plugin-prettier@^5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz#17cfade9e732cef32b5f5be53bd4e07afd8e67e1" + integrity sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw== dependencies: prettier-linter-helpers "^1.0.0" - synckit "^0.8.5" + synckit "^0.8.6" eslint-plugin-react-hooks@^4.5.0, "eslint-plugin-react-hooks@^4.5.0 || 5.0.0-canary-7118f5dd7-20230705": version "4.6.0" @@ -5990,7 +5711,7 @@ eslint-plugin-react@^7.31.7, eslint-plugin-react@^7.33.2: semver "^6.3.1" string.prototype.matchall "^4.0.8" -eslint-scope@5.1.1, eslint-scope@^5.1.1: +eslint-scope@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== @@ -6016,15 +5737,15 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4 resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== -eslint@^8.12.0, eslint@^8.28.0, eslint@^8.51.0: - version "8.52.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.52.0.tgz#d0cd4a1fac06427a61ef9242b9353f36ea7062fc" - integrity sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg== +eslint@^8.12.0, eslint@^8.54.0, eslint@^8.56.0: + version "8.56.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.56.0.tgz#4957ce8da409dc0809f99ab07a1b94832ab74b15" + integrity sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^2.1.2" - "@eslint/js" "8.52.0" + "@eslint/eslintrc" "^2.1.4" + "@eslint/js" "8.56.0" "@humanwhocodes/config-array" "^0.11.13" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" @@ -6146,6 +5867,21 @@ execa@4.1.0: signal-exit "^3.0.2" strip-final-newline "^2.0.0" +execa@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.0.0.tgz#4029b0007998a841fbd1032e5f4de86a3c1e3376" + integrity sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + execa@5.1.1, execa@^5.0.0: version "5.1.1" resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" @@ -6189,21 +5925,6 @@ execa@^0.7.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -execa@^7.1.1: - version "7.2.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-7.2.0.tgz#657e75ba984f42a70f38928cedc87d6f2d4fe4e9" - integrity sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.1" - human-signals "^4.3.0" - is-stream "^3.0.0" - merge-stream "^2.0.0" - npm-run-path "^5.1.0" - onetime "^6.0.0" - signal-exit "^3.0.7" - strip-final-newline "^3.0.0" - executable@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/executable/-/executable-4.1.1.tgz#41532bff361d3e57af4d763b70582db18f5d133c" @@ -6221,15 +5942,21 @@ expand-template@^2.0.3: resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== -expect@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/expect/-/expect-27.5.1.tgz#83ce59f1e5bdf5f9d2b94b61d2050db48f3fef74" - integrity sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw== +expect@^29.0.0, expect@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" + integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== dependencies: - "@jest/types" "^27.5.1" - jest-get-type "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" + "@jest/expect-utils" "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + +exponential-backoff@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6" + integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw== extend-shallow@^2.0.1: version "2.0.1" @@ -6289,9 +6016,9 @@ fast-diff@^1.1.2: integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== fast-glob@^3.2.5, fast-glob@^3.2.9, fast-glob@^3.3.0, fast-glob@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" - integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== + version "3.3.2" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" @@ -6299,7 +6026,7 @@ fast-glob@^3.2.5, fast-glob@^3.2.9, fast-glob@^3.3.0, fast-glob@^3.3.1: merge2 "^1.3.0" micromatch "^4.0.4" -fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: +fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== @@ -6310,9 +6037,9 @@ fast-levenshtein@^2.0.6: integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fastq@^1.6.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" - integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== + version "1.17.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" + integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== dependencies: reusify "^1.0.4" @@ -6330,7 +6057,7 @@ fd-slicer@~1.1.0: dependencies: pend "~1.2.0" -figures@^3.0.0, figures@^3.2.0: +figures@3.2.0, figures@^3.0.0, figures@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== @@ -6344,6 +6071,13 @@ file-entry-cache@^6.0.1: dependencies: flat-cache "^3.0.4" +filelist@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" + integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== + dependencies: + minimatch "^5.0.1" + fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" @@ -6351,11 +6085,6 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" -filter-obj@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/filter-obj/-/filter-obj-1.1.0.tgz#9b311112bc6c6127a16e016c6c5d7f19e0805c5b" - integrity sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ== - find-up@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" @@ -6387,23 +6116,28 @@ find-up@^5.0.0: path-exists "^4.0.0" flat-cache@^3.0.4: - version "3.1.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.1.1.tgz#a02a15fdec25a8f844ff7cc658f03dd99eb4609b" - integrity sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q== + version "3.2.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" + integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== dependencies: flatted "^3.2.9" keyv "^4.5.3" rimraf "^3.0.2" +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== + flatted@^3.2.9: - version "3.2.9" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" - integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== + version "3.3.0" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.0.tgz#5fdca2b5e671cd38d1537427a10e02a2caa8257e" + integrity sha512-noqGuLw158+DuD9UPRKHpJ2hGxpFyDlYYrfM0mWt4XhT4n0lwzTLh70Tkdyy4kyTmyTT9Bv7bWAJqw7cgkEXDg== -follow-redirects@^1.14.9: - version "1.15.3" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a" - integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q== +follow-redirects@^1.14.9, follow-redirects@^1.15.4: + version "1.15.5" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.5.tgz#54d4d6d062c0fa7d9d17feb008461550e3ba8020" + integrity sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw== for-each@^0.3.3: version "0.3.3" @@ -6412,20 +6146,19 @@ for-each@^0.3.3: dependencies: is-callable "^1.1.3" +foreground-child@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" + integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^4.0.1" + forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== -form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - form-data@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" @@ -6453,7 +6186,7 @@ formidable@^3.2.4: hexoid "^1.0.0" once "^1.4.0" -fraction.js@^4.3.6: +fraction.js@^4.3.7: version "4.3.7" resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7" integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== @@ -6473,10 +6206,10 @@ fs-exists-sync@^0.1.0: resolved "https://registry.yarnpkg.com/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add" integrity sha512-cR/vflFyPZtrN6b38ZyWxpWdhlXrzZEBawlpBQMq7033xVY7/kg0GDMBK5jg8lDYQckdJ5x/YC88lM3C7VMsLg== -fs-extra@^11.0.0: - version "11.1.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.1.1.tgz#da69f7c39f3b002378b0954bb6ae7efdc0876e2d" - integrity sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ== +fs-extra@^11.1.0, fs-extra@^11.1.1: + version "11.2.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b" + integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== dependencies: graceful-fs "^4.2.0" jsonfile "^6.0.1" @@ -6501,20 +6234,20 @@ fs-extra@^9.1.0: jsonfile "^6.0.1" universalify "^2.0.0" -fs-minipass@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" - integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== - dependencies: - minipass "^2.6.0" - -fs-minipass@^2.0.0, fs-minipass@^2.1.0: +fs-minipass@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== dependencies: minipass "^3.0.0" +fs-minipass@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-3.0.3.tgz#79a85981c4dc120065e96f62086bf6f9dc26cc54" + integrity sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw== + dependencies: + minipass "^7.0.3" + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -6525,7 +6258,7 @@ fsevents@^2.3.2, fsevents@~2.3.2: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== -function-bind@^1.1.1, function-bind@^1.1.2: +function-bind@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== @@ -6545,19 +6278,19 @@ functions-have-names@^1.2.3: resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - integrity sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg== +gauge@^4.0.3: + version "4.0.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" + integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.3" + console-control-strings "^1.1.0" + has-unicode "^2.0.1" + signal-exit "^3.0.7" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.5" gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: version "1.0.0-beta.2" @@ -6569,11 +6302,17 @@ get-caller-file@^2.0.1, get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" - integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== +get-east-asian-width@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz#5e6ebd9baee6fb8b7b6bd505221065f0cd91f64e" + integrity sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA== + +get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== dependencies: + es-errors "^1.3.0" function-bind "^1.1.2" has-proto "^1.0.1" has-symbols "^1.0.3" @@ -6584,7 +6323,7 @@ get-package-type@^0.1.0: resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== -get-pkg-repo@^4.0.0: +get-pkg-repo@^4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz#75973e1c8050c73f48190c52047c4cee3acbf385" integrity sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA== @@ -6594,11 +6333,16 @@ get-pkg-repo@^4.0.0: through2 "^2.0.0" yargs "^16.2.0" -get-port@^5.1.1: +get-port@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== +get-stream@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.0.tgz#3e0012cb6827319da2706e601a1583e8629a6718" + integrity sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg== + get-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" @@ -6618,7 +6362,7 @@ get-stream@^5.0.0, get-stream@^5.1.0: dependencies: pump "^3.0.0" -get-stream@^6.0.0, get-stream@^6.0.1: +get-stream@^6.0.0: version "6.0.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== @@ -6628,13 +6372,14 @@ get-stream@^8.0.1: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-8.0.1.tgz#def9dfd71742cd7754a7761ed43749a27d02eca2" integrity sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA== -get-symbol-description@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" - integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== +get-symbol-description@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" + integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" + call-bind "^1.0.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" get-tsconfig@^4.5.0: version "4.7.2" @@ -6666,7 +6411,7 @@ git-config-path@^1.0.1: fs-exists-sync "^0.1.0" homedir-polyfill "^1.0.0" -git-raw-commits@^2.0.11, git-raw-commits@^2.0.8: +git-raw-commits@^2.0.11: version "2.0.11" resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.11.tgz#bc3576638071d18655e1cc60d7f524920008d723" integrity sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A== @@ -6677,6 +6422,15 @@ git-raw-commits@^2.0.11, git-raw-commits@^2.0.8: split2 "^3.0.0" through2 "^4.0.0" +git-raw-commits@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-3.0.0.tgz#5432f053a9744f67e8db03dbc48add81252cfdeb" + integrity sha512-b5OHmZ3vAgGrDn/X0kS+9qCfNKWe4K/jFnhwzVWWg0/k5eLa3060tZShrRg8Dja5kPc+YjS0Gc6y7cRr44Lpjw== + dependencies: + dargs "^7.0.0" + meow "^8.1.2" + split2 "^3.2.2" + git-remote-origin-url@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f" @@ -6685,28 +6439,28 @@ git-remote-origin-url@^2.0.0: gitconfiglocal "^1.0.0" pify "^2.3.0" -git-semver-tags@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-4.1.1.tgz#63191bcd809b0ec3e151ba4751c16c444e5b5780" - integrity sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA== +git-semver-tags@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-5.0.1.tgz#db748aa0e43d313bf38dcd68624d8443234e1c15" + integrity sha512-hIvOeZwRbQ+7YEUmCkHqo8FOLQZCEn18yevLHADlFPZY02KJGsu5FZt9YW/lybfK2uhWFI7Qg/07LekJiTv7iA== dependencies: - meow "^8.0.0" - semver "^6.0.0" + meow "^8.1.2" + semver "^7.0.0" -git-up@^4.0.0: - version "4.0.5" - resolved "https://registry.yarnpkg.com/git-up/-/git-up-4.0.5.tgz#e7bb70981a37ea2fb8fe049669800a1f9a01d759" - integrity sha512-YUvVDg/vX3d0syBsk/CKUTib0srcQME0JyHkL5BaYdwLsiCslPWmDSi8PUMo9pXYjrryMcmsCoCgsTpSCJEQaA== +git-up@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/git-up/-/git-up-7.0.0.tgz#bace30786e36f56ea341b6f69adfd83286337467" + integrity sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ== dependencies: - is-ssh "^1.3.0" - parse-url "^6.0.0" + is-ssh "^1.4.0" + parse-url "^8.1.0" -git-url-parse@^11.4.4: - version "11.6.0" - resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-11.6.0.tgz#c634b8de7faa66498a2b88932df31702c67df605" - integrity sha512-WWUxvJs5HsyHL6L08wOusa/IXYtMuCAhrMmnTjQPpBU0TTHyDhnOATNH3xNQz7YOQUsqIIPTGr4xiVti1Hsk5g== +git-url-parse@13.1.0: + version "13.1.0" + resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-13.1.0.tgz#07e136b5baa08d59fabdf0e33170de425adf07b4" + integrity sha512-5FvPJP/70WkIprlUZ33bm4UAaFdjcLkJLpWft1BeZKqwR0uhhNGoKwlUaPtVb4LxCSQ++erHapRak9kWGj+FCA== dependencies: - git-up "^4.0.0" + git-up "^7.0.0" git-username@^1.0.0: version "1.0.0" @@ -6733,7 +6487,7 @@ github-slugger@^1.0.0, github-slugger@^1.2.1: resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.5.0.tgz#17891bbc73232051474d68bd867a34625c955f7d" integrity sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw== -glob-parent@^5.1.1, glob-parent@^5.1.2, glob-parent@~5.1.2: +glob-parent@5.1.2, glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -6752,17 +6506,16 @@ glob-to-regexp@^0.4.1: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@7.1.6: - version "7.1.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== +glob@10.3.10, glob@^10.2.2, glob@^10.3.10: + version "10.3.10" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" + integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" + foreground-child "^3.1.0" + jackspeak "^2.3.5" + minimatch "^9.0.1" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + path-scurry "^1.10.1" glob@7.1.7: version "7.1.7" @@ -6776,7 +6529,7 @@ glob@7.1.7: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.2.0: +glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.2.0: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -6788,6 +6541,27 @@ glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.2.0: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^8.0.1: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + +glob@^9.2.0: + version "9.3.5" + resolved "https://registry.yarnpkg.com/glob/-/glob-9.3.5.tgz#ca2ed8ca452781a3009685607fdf025a899dfe21" + integrity sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q== + dependencies: + fs.realpath "^1.0.0" + minimatch "^8.0.2" + minipass "^4.2.4" + path-scurry "^1.6.1" + global-dirs@^0.1.0, global-dirs@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" @@ -6815,9 +6589,9 @@ globals@^11.1.0: integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globals@^13.19.0, globals@^13.20.0: - version "13.23.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.23.0.tgz#ef31673c926a0976e1f61dab4dca57e0c0a8af02" - integrity sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA== + version "13.24.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" + integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== dependencies: type-fest "^0.20.2" @@ -6828,7 +6602,7 @@ globalthis@^1.0.3: dependencies: define-properties "^1.1.3" -globby@^11.0.2, globby@^11.0.3, globby@^11.1.0: +globby@11.1.0, globby@^11.0.3, globby@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== @@ -6881,7 +6655,7 @@ got@^9.6.0: to-readable-stream "^1.0.0" url-parse-lax "^3.0.0" -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.3, graceful-fs@^4.2.4, graceful-fs@^4.2.9: +graceful-fs@4.2.11, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -6913,19 +6687,6 @@ handlebars@^4.7.7: optionalDependencies: uglify-js "^3.1.4" -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== - -har-validator@~5.1.3: - version "5.1.5" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" - integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== - dependencies: - ajv "^6.12.3" - har-schema "^2.0.0" - hard-rejection@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" @@ -6958,31 +6719,31 @@ has-own-prop@^2.0.0: resolved "https://registry.yarnpkg.com/has-own-prop/-/has-own-prop-2.0.0.tgz#f0f95d58f65804f5d218db32563bb85b8e0417af" integrity sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ== -has-property-descriptors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" - integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.1, has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== dependencies: - get-intrinsic "^1.2.2" + es-define-property "^1.0.0" -has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== +has-proto@^1.0.1, has-proto@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" + integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== +has-tostringtag@^1.0.0, has-tostringtag@^1.0.1, has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== dependencies: - has-symbols "^1.0.2" + has-symbols "^1.0.3" -has-unicode@^2.0.0, has-unicode@^2.0.1: +has-unicode@2.0.1, has-unicode@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== @@ -6992,11 +6753,6 @@ has-yarn@^2.1.0: resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== -has@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.4.tgz#2eb2860e000011dae4f1406a86fe80e530fb2ec6" - integrity sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ== - hasha@^5.2.2: version "5.2.2" resolved "https://registry.yarnpkg.com/hasha/-/hasha-5.2.2.tgz#a48477989b3b327aea3c04f53096d816d97522a1" @@ -7005,10 +6761,10 @@ hasha@^5.2.2: is-stream "^2.0.0" type-fest "^0.8.0" -hasown@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" - integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== +hasown@^2.0.0, hasown@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.1.tgz#26f48f039de2c0f8d3356c223fb8d50253519faa" + integrity sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA== dependencies: function-bind "^1.1.2" @@ -7114,6 +6870,13 @@ hosted-git-info@^2.1.4, hosted-git-info@^2.7.1: resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== +hosted-git-info@^3.0.6: + version "3.0.8" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-3.0.8.tgz#6e35d4cc87af2c5f816e4cb9ce350ba87a3f370d" + integrity sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw== + dependencies: + lru-cache "^6.0.0" + hosted-git-info@^4.0.0, hosted-git-info@^4.0.1: version "4.1.0" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" @@ -7121,6 +6884,20 @@ hosted-git-info@^4.0.0, hosted-git-info@^4.0.1: dependencies: lru-cache "^6.0.0" +hosted-git-info@^6.0.0: + version "6.1.1" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-6.1.1.tgz#629442c7889a69c05de604d52996b74fe6f26d58" + integrity sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w== + dependencies: + lru-cache "^7.5.1" + +hosted-git-info@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-7.0.1.tgz#9985fcb2700467fecf7f33a4d4874e30680b5322" + integrity sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA== + dependencies: + lru-cache "^10.0.1" + html-dom-parser@5.0.3: version "5.0.3" resolved "https://registry.yarnpkg.com/html-dom-parser/-/html-dom-parser-5.0.3.tgz#823ecc15292c36cb1611213384c9eb2fbb085e5c" @@ -7129,13 +6906,6 @@ html-dom-parser@5.0.3: domhandler "5.0.3" htmlparser2 "9.0.0" -html-encoding-sniffer@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" - integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== - dependencies: - whatwg-encoding "^1.0.5" - html-escaper@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" @@ -7173,28 +6943,27 @@ htmlparser2@9.0.0: domutils "^3.1.0" entities "^4.5.0" -http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0: +http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== -http-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== +http-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" + integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== dependencies: - "@tootallnate/once" "1" + "@tootallnate/once" "2" agent-base "6" debug "4" -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== +http-proxy-agent@^7.0.0: + version "7.0.2" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e" + integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig== dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" + agent-base "^7.1.0" + debug "^4.3.4" http-signature@~1.3.6: version "1.3.6" @@ -7213,6 +6982,14 @@ https-proxy-agent@^5.0.0: agent-base "6" debug "4" +https-proxy-agent@^7.0.1: + version "7.0.4" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz#8e97b841a029ad8ddc8731f26595bad868cb4168" + integrity sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg== + dependencies: + agent-base "^7.0.2" + debug "4" + human-signals@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" @@ -7223,11 +7000,6 @@ human-signals@^2.1.0: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== -human-signals@^4.3.0: - version "4.3.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2" - integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ== - human-signals@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-5.0.0.tgz#42665a284f9ae0dade3ba41ebc37eb4b852f3a28" @@ -7240,15 +7012,15 @@ humanize-ms@^1.2.1: dependencies: ms "^2.0.0" -husky@^8.0.3: - version "8.0.3" - resolved "https://registry.yarnpkg.com/husky/-/husky-8.0.3.tgz#4936d7212e46d1dea28fef29bb3a108872cd9184" - integrity sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg== +husky@^9.0.11: + version "9.0.11" + resolved "https://registry.yarnpkg.com/husky/-/husky-9.0.11.tgz#fc91df4c756050de41b3e478b2158b87c1e79af9" + integrity sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw== i18next-fs-backend@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/i18next-fs-backend/-/i18next-fs-backend-2.2.0.tgz#016c865344632a666ea80653deae466fbfa6042c" - integrity sha512-VOPHhdDX0M/csRqEw+9Ectpf6wvTIg1MZDfAHxc3JKnAlJz7fcZSAKAeyDohOq0xuLx57esYpJopIvBaRb0Bag== + version "2.3.1" + resolved "https://registry.yarnpkg.com/i18next-fs-backend/-/i18next-fs-backend-2.3.1.tgz#0c7d2459ff4a039e2b3228131809fbc0e74ff1a8" + integrity sha512-tvfXskmG/9o+TJ5Fxu54sSO5OkY6d+uMn+K6JiUGLJrwxAVfer+8V3nU8jq3ts9Pe5lXJv4b1N7foIjJ8Iy2Gg== i18next@^22.4.10: version "22.5.1" @@ -7257,7 +7029,7 @@ i18next@^22.4.10: dependencies: "@babel/runtime" "^7.20.6" -iconv-lite@0.4.24, iconv-lite@^0.4.24: +iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -7276,17 +7048,24 @@ ieee754@^1.1.13: resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -ignore-walk@^3.0.3: - version "3.0.4" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.4.tgz#c9a09f69b7c7b479a5d74ac1a3c0d4236d2a6335" - integrity sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ== +ignore-walk@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-5.0.1.tgz#5f199e23e1288f518d90358d461387788a154776" + integrity sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw== dependencies: - minimatch "^3.0.4" + minimatch "^5.0.1" + +ignore-walk@^6.0.4: + version "6.0.4" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-6.0.4.tgz#89950be94b4f522225eb63a13c56badb639190e9" + integrity sha512-t7sv42WkwFkyKbivUCglsQW5YWMskWtbEf4MNKX5u/CCWHKSPzN4FtBQGsQZgCLbxOzpVlcbWVK5KB3auIOjSw== + dependencies: + minimatch "^9.0.0" -ignore@^5.2.0: - version "5.2.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" - integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== +ignore@^5.0.4, ignore@^5.2.0, ignore@^5.2.4: + version "5.3.1" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" + integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== import-fresh@^3.0.0, import-fresh@^3.2.1, import-fresh@^3.3.0: version "3.3.0" @@ -7301,7 +7080,7 @@ import-lazy@^2.1.0: resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" integrity sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A== -import-local@^3.0.2: +import-local@3.1.0, import-local@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== @@ -7319,11 +7098,6 @@ indent-string@^4.0.0: resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== -infer-owner@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" - integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== - inflected@^1.1.6: version "1.1.7" resolved "https://registry.yarnpkg.com/inflected/-/inflected-1.1.7.tgz#c393df6e28472d0d77b3082ec3aa2091f4bc96f9" @@ -7352,23 +7126,23 @@ ini@2.0.0: resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== -ini@^1.3.2, ini@^1.3.4, ini@~1.3.0: +ini@^1.3.2, ini@^1.3.4, ini@^1.3.8, ini@~1.3.0: version "1.3.8" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -init-package-json@^2.0.2: - version "2.0.5" - resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-2.0.5.tgz#78b85f3c36014db42d8f32117252504f68022646" - integrity sha512-u1uGAtEFu3VA6HNl/yUWw57jmKEMx8SKOxHhxjGnOFUiIlFnohKDFg4ZrPpv9wWqk44nDxGJAtqjdQFm+9XXQA== +init-package-json@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-5.0.0.tgz#030cf0ea9c84cfc1b0dc2e898b45d171393e4b40" + integrity sha512-kBhlSheBfYmq3e0L1ii+VKe3zBTLL5lDCDWR+f9dLmEGSB3MqLlMlsolubSsyI88Bg6EA+BIMlomAnQ1SwgQBw== dependencies: - npm-package-arg "^8.1.5" - promzard "^0.3.0" - read "~1.0.1" - read-package-json "^4.1.1" + npm-package-arg "^10.0.0" + promzard "^1.0.0" + read "^2.0.0" + read-package-json "^6.0.0" semver "^7.3.5" validate-npm-package-license "^3.0.4" - validate-npm-package-name "^3.0.0" + validate-npm-package-name "^5.0.0" inline-style-parser@0.1.1: version "0.1.1" @@ -7380,7 +7154,7 @@ inline-style-parser@0.2.2: resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.2.2.tgz#d498b4e6de0373458fc610ff793f6b14ebf45633" integrity sha512-EcKzdTHVe8wFVOGEYXiW9WmJXPjqi1T+234YpJr98RiFYKHV3cdy1+3mkTE+KHTHxFFLH51SfaGOoUdW+v7ViQ== -inquirer@^7.0.4, inquirer@^7.3.3: +inquirer@^7.0.4: version "7.3.3" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== @@ -7399,12 +7173,33 @@ inquirer@^7.0.4, inquirer@^7.3.3: strip-ansi "^6.0.0" through "^2.3.6" -internal-slot@^1.0.4, internal-slot@^1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.6.tgz#37e756098c4911c5e912b8edbf71ed3aa116f930" - integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg== +inquirer@^8.2.4: + version "8.2.6" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.6.tgz#733b74888195d8d400a67ac332011b5fae5ea562" + integrity sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg== dependencies: - get-intrinsic "^1.2.2" + ansi-escapes "^4.2.1" + chalk "^4.1.1" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.21" + mute-stream "0.0.8" + ora "^5.4.1" + run-async "^2.4.0" + rxjs "^7.5.5" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + wrap-ansi "^6.0.1" + +internal-slot@^1.0.4, internal-slot@^1.0.5, internal-slot@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" + integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== + dependencies: + es-errors "^1.3.0" hasown "^2.0.0" side-channel "^1.0.4" @@ -7423,10 +7218,13 @@ ioredis@^5.0.4: redis-parser "^3.0.0" standard-as-callback "^2.1.0" -ip@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" - integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== +ip-address@^9.0.5: + version "9.0.5" + resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-9.0.5.tgz#117a960819b08780c3bd1f14ef3c1cc1d3f3ea5a" + integrity sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g== + dependencies: + jsbn "1.1.0" + sprintf-js "^1.1.3" is-alphabetical@1.0.4, is-alphabetical@^1.0.0: version "1.0.4" @@ -7449,14 +7247,13 @@ is-arguments@^1.1.1: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" - integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== +is-array-buffer@^3.0.2, is-array-buffer@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" + integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== dependencies: call-bind "^1.0.2" - get-intrinsic "^1.2.0" - is-typed-array "^1.1.10" + get-intrinsic "^1.2.1" is-arrayish@^0.2.1: version "0.2.1" @@ -7507,6 +7304,13 @@ is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== +is-ci@3.0.1, is-ci@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867" + integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ== + dependencies: + ci-info "^3.2.0" + is-ci@^1.0.10: version "1.2.1" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" @@ -7521,14 +7325,7 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" -is-ci@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867" - integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ== - dependencies: - ci-info "^3.2.0" - -is-core-module@^2.11.0, is-core-module@^2.13.0, is-core-module@^2.13.1, is-core-module@^2.5.0: +is-core-module@^2.11.0, is-core-module@^2.13.0, is-core-module@^2.13.1, is-core-module@^2.5.0, is-core-module@^2.8.1: version "2.13.1" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== @@ -7552,16 +7349,11 @@ is-directory@^0.3.1: resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" integrity sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw== -is-docker@^2.0.0: +is-docker@^2.0.0, is-docker@^2.1.1: version "2.2.1" resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== -is-docker@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200" - integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== - is-extendable@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" @@ -7579,13 +7371,6 @@ is-finalizationregistry@^1.0.2: dependencies: call-bind "^1.0.2" -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - integrity sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw== - dependencies: - number-is-nan "^1.0.0" - is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" @@ -7601,6 +7386,13 @@ is-fullwidth-code-point@^4.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88" integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== +is-fullwidth-code-point@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz#9609efced7c2f97da7b60145ef481c787c7ba704" + integrity sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA== + dependencies: + get-east-asian-width "^1.0.0" + is-generator-fn@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" @@ -7625,13 +7417,6 @@ is-hexadecimal@^1.0.0: resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== -is-inside-container@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4" - integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA== - dependencies: - is-docker "^3.0.0" - is-installed-globally@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" @@ -7656,6 +7441,11 @@ is-installed-globally@~0.4.0: global-dirs "^3.0.0" is-path-inside "^3.0.2" +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + is-lambda@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" @@ -7667,9 +7457,9 @@ is-map@^2.0.1, is-map@^2.0.2: integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== is-negative-zero@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" - integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" + integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== is-npm@^1.0.0: version "1.0.0" @@ -7737,11 +7527,6 @@ is-plain-object@^5.0.0: resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== -is-potential-custom-element-name@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" - integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== - is-redirect@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" @@ -7766,19 +7551,24 @@ is-set@^2.0.1, is-set@^2.0.2: integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== is-shared-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" - integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" + integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== dependencies: - call-bind "^1.0.2" + call-bind "^1.0.7" -is-ssh@^1.3.0: +is-ssh@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.4.0.tgz#4f8220601d2839d8fa624b3106f8e8884f01b8b2" integrity sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ== dependencies: protocols "^2.0.1" +is-stream@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + is-stream@^1.0.0, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" @@ -7815,12 +7605,19 @@ is-text-path@^1.0.1: dependencies: text-extensions "^1.0.0" -is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.9: - version "1.1.12" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" - integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== +is-text-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-2.0.0.tgz#b2484e2b720a633feb2e85b67dc193ff72c75636" + integrity sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw== dependencies: - which-typed-array "^1.1.11" + text-extensions "^2.0.0" + +is-typed-array@^1.1.13: + version "1.1.13" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" + integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== + dependencies: + which-typed-array "^1.1.14" is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" @@ -7889,6 +7686,11 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== +isexe@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-3.1.1.tgz#4a407e2bd78ddfb14bea0c27c6f7072dde775f0d" + integrity sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ== + isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" @@ -7908,11 +7710,11 @@ isstream@~0.1.2: integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" - integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== + version "3.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== -istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: +istanbul-lib-instrument@^5.0.4: version "5.2.1" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== @@ -7923,6 +7725,17 @@ istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: istanbul-lib-coverage "^3.2.0" semver "^6.3.0" +istanbul-lib-instrument@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz#91655936cf7380e4e473383081e38478b69993b1" + integrity sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw== + dependencies: + "@babel/core" "^7.23.9" + "@babel/parser" "^7.23.9" + "@istanbuljs/schema" "^0.1.3" + istanbul-lib-coverage "^3.2.0" + semver "^7.5.4" + istanbul-lib-report@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" @@ -7942,9 +7755,9 @@ istanbul-lib-source-maps@^4.0.0: source-map "^0.6.1" istanbul-reports@^3.1.3: - version "3.1.6" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.6.tgz#2544bcab4768154281a2f0870471902704ccaa1a" - integrity sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg== + version "3.1.7" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" + integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" @@ -7960,410 +7773,382 @@ iterator.prototype@^1.1.2: reflect.getprototypeof "^1.0.4" set-function-name "^2.0.1" -jest-changed-files@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.5.1.tgz#a348aed00ec9bf671cc58a66fcbe7c3dfd6a68f5" - integrity sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw== +jackspeak@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" + integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== dependencies: - "@jest/types" "^27.5.1" - execa "^5.0.0" - throat "^6.0.1" + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" -jest-circus@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.5.1.tgz#37a5a4459b7bf4406e53d637b49d22c65d125ecc" - integrity sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw== +jake@^10.8.5: + version "10.8.7" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.7.tgz#63a32821177940c33f356e0ba44ff9d34e1c7d8f" + integrity sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w== + dependencies: + async "^3.2.3" + chalk "^4.0.2" + filelist "^1.0.4" + minimatch "^3.1.2" + +jest-changed-files@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" + integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== dependencies: - "@jest/environment" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" + execa "^5.0.0" + jest-util "^29.7.0" + p-limit "^3.1.0" + +jest-circus@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.7.0.tgz#b6817a45fcc835d8b16d5962d0c026473ee3668a" + integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" - dedent "^0.7.0" - expect "^27.5.1" + dedent "^1.0.0" is-generator-fn "^2.0.0" - jest-each "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" + jest-each "^29.7.0" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + p-limit "^3.1.0" + pretty-format "^29.7.0" + pure-rand "^6.0.0" slash "^3.0.0" stack-utils "^2.0.3" - throat "^6.0.1" -jest-cli@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.5.1.tgz#278794a6e6458ea8029547e6c6cbf673bd30b145" - integrity sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw== +jest-cli@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995" + integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== dependencies: - "@jest/core" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/core" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" chalk "^4.0.0" + create-jest "^29.7.0" exit "^0.1.2" - graceful-fs "^4.2.9" import-local "^3.0.2" - jest-config "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" - prompts "^2.0.1" - yargs "^16.2.0" - -jest-config@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.5.1.tgz#5c387de33dca3f99ad6357ddeccd91bf3a0e4a41" - integrity sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA== - dependencies: - "@babel/core" "^7.8.0" - "@jest/test-sequencer" "^27.5.1" - "@jest/types" "^27.5.1" - babel-jest "^27.5.1" + jest-config "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + yargs "^17.3.1" + +jest-config@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.7.0.tgz#bcbda8806dbcc01b1e316a46bb74085a84b0245f" + integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== + dependencies: + "@babel/core" "^7.11.6" + "@jest/test-sequencer" "^29.7.0" + "@jest/types" "^29.6.3" + babel-jest "^29.7.0" chalk "^4.0.0" ci-info "^3.2.0" deepmerge "^4.2.2" - glob "^7.1.1" + glob "^7.1.3" graceful-fs "^4.2.9" - jest-circus "^27.5.1" - jest-environment-jsdom "^27.5.1" - jest-environment-node "^27.5.1" - jest-get-type "^27.5.1" - jest-jasmine2 "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-runner "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" + jest-circus "^29.7.0" + jest-environment-node "^29.7.0" + jest-get-type "^29.6.3" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-runner "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" micromatch "^4.0.4" parse-json "^5.2.0" - pretty-format "^27.5.1" + pretty-format "^29.7.0" slash "^3.0.0" strip-json-comments "^3.1.1" -jest-diff@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.5.1.tgz#a07f5011ac9e6643cf8a95a462b7b1ecf6680def" - integrity sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw== +"jest-diff@>=29.4.3 < 30", jest-diff@^29.4.1, jest-diff@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" + integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== dependencies: chalk "^4.0.0" - diff-sequences "^27.5.1" - jest-get-type "^27.5.1" - pretty-format "^27.5.1" + diff-sequences "^29.6.3" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" -jest-docblock@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.5.1.tgz#14092f364a42c6108d42c33c8cf30e058e25f6c0" - integrity sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ== +jest-docblock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.7.0.tgz#8fddb6adc3cdc955c93e2a87f61cfd350d5d119a" + integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== dependencies: detect-newline "^3.0.0" -jest-each@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.5.1.tgz#5bc87016f45ed9507fed6e4702a5b468a5b2c44e" - integrity sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ== +jest-each@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.7.0.tgz#162a9b3f2328bdd991beaabffbb74745e56577d1" + integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" chalk "^4.0.0" - jest-get-type "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" - -jest-environment-jsdom@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz#ea9ccd1fc610209655a77898f86b2b559516a546" - integrity sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/fake-timers" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - jest-mock "^27.5.1" - jest-util "^27.5.1" - jsdom "^16.6.0" - -jest-environment-node@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.5.1.tgz#dedc2cfe52fab6b8f5714b4808aefa85357a365e" - integrity sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/fake-timers" "^27.5.1" - "@jest/types" "^27.5.1" + jest-get-type "^29.6.3" + jest-util "^29.7.0" + pretty-format "^29.7.0" + +jest-environment-node@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376" + integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" - jest-mock "^27.5.1" - jest-util "^27.5.1" + jest-mock "^29.7.0" + jest-util "^29.7.0" -jest-get-type@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1" - integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw== +jest-get-type@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" + integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== -jest-haste-map@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.5.1.tgz#9fd8bd7e7b4fa502d9c6164c5640512b4e811e7f" - integrity sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng== +jest-haste-map@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" + integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== dependencies: - "@jest/types" "^27.5.1" - "@types/graceful-fs" "^4.1.2" + "@jest/types" "^29.6.3" + "@types/graceful-fs" "^4.1.3" "@types/node" "*" anymatch "^3.0.3" fb-watchman "^2.0.0" graceful-fs "^4.2.9" - jest-regex-util "^27.5.1" - jest-serializer "^27.5.1" - jest-util "^27.5.1" - jest-worker "^27.5.1" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + jest-worker "^29.7.0" micromatch "^4.0.4" - walker "^1.0.7" + walker "^1.0.8" optionalDependencies: fsevents "^2.3.2" -jest-jasmine2@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz#a037b0034ef49a9f3d71c4375a796f3b230d1ac4" - integrity sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/source-map" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - expect "^27.5.1" - is-generator-fn "^2.0.0" - jest-each "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" - throat "^6.0.1" - -jest-leak-detector@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz#6ec9d54c3579dd6e3e66d70e3498adf80fde3fb8" - integrity sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ== +jest-leak-detector@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728" + integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== dependencies: - jest-get-type "^27.5.1" - pretty-format "^27.5.1" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" -jest-matcher-utils@^27.0.0, jest-matcher-utils@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz#9c0cdbda8245bc22d2331729d1091308b40cf8ab" - integrity sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw== +jest-matcher-utils@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" + integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== dependencies: chalk "^4.0.0" - jest-diff "^27.5.1" - jest-get-type "^27.5.1" - pretty-format "^27.5.1" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" -jest-message-util@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.5.1.tgz#bdda72806da10d9ed6425e12afff38cd1458b6cf" - integrity sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g== +jest-message-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" + integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== dependencies: "@babel/code-frame" "^7.12.13" - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" "@types/stack-utils" "^2.0.0" chalk "^4.0.0" graceful-fs "^4.2.9" micromatch "^4.0.4" - pretty-format "^27.5.1" + pretty-format "^29.7.0" slash "^3.0.0" stack-utils "^2.0.3" -jest-mock@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.5.1.tgz#19948336d49ef4d9c52021d34ac7b5f36ff967d6" - integrity sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og== +jest-mock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347" + integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" "@types/node" "*" + jest-util "^29.7.0" jest-pnp-resolver@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== -jest-regex-util@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95" - integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg== +jest-regex-util@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" + integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== -jest-resolve-dependencies@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz#d811ecc8305e731cc86dd79741ee98fed06f1da8" - integrity sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg== +jest-resolve-dependencies@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz#1b04f2c095f37fc776ff40803dc92921b1e88428" + integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== dependencies: - "@jest/types" "^27.5.1" - jest-regex-util "^27.5.1" - jest-snapshot "^27.5.1" + jest-regex-util "^29.6.3" + jest-snapshot "^29.7.0" -jest-resolve@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.5.1.tgz#a2f1c5a0796ec18fe9eb1536ac3814c23617b384" - integrity sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw== +jest-resolve@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.7.0.tgz#64d6a8992dd26f635ab0c01e5eef4399c6bcbc30" + integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== dependencies: - "@jest/types" "^27.5.1" chalk "^4.0.0" graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" + jest-haste-map "^29.7.0" jest-pnp-resolver "^1.2.2" - jest-util "^27.5.1" - jest-validate "^27.5.1" + jest-util "^29.7.0" + jest-validate "^29.7.0" resolve "^1.20.0" - resolve.exports "^1.1.0" + resolve.exports "^2.0.0" slash "^3.0.0" -jest-runner@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.5.1.tgz#071b27c1fa30d90540805c5645a0ec167c7b62e5" - integrity sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ== - dependencies: - "@jest/console" "^27.5.1" - "@jest/environment" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" +jest-runner@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.7.0.tgz#809af072d408a53dcfd2e849a4c976d3132f718e" + integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== + dependencies: + "@jest/console" "^29.7.0" + "@jest/environment" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" - emittery "^0.8.1" + emittery "^0.13.1" graceful-fs "^4.2.9" - jest-docblock "^27.5.1" - jest-environment-jsdom "^27.5.1" - jest-environment-node "^27.5.1" - jest-haste-map "^27.5.1" - jest-leak-detector "^27.5.1" - jest-message-util "^27.5.1" - jest-resolve "^27.5.1" - jest-runtime "^27.5.1" - jest-util "^27.5.1" - jest-worker "^27.5.1" - source-map-support "^0.5.6" - throat "^6.0.1" - -jest-runtime@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.5.1.tgz#4896003d7a334f7e8e4a53ba93fb9bcd3db0a1af" - integrity sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/fake-timers" "^27.5.1" - "@jest/globals" "^27.5.1" - "@jest/source-map" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + jest-docblock "^29.7.0" + jest-environment-node "^29.7.0" + jest-haste-map "^29.7.0" + jest-leak-detector "^29.7.0" + jest-message-util "^29.7.0" + jest-resolve "^29.7.0" + jest-runtime "^29.7.0" + jest-util "^29.7.0" + jest-watcher "^29.7.0" + jest-worker "^29.7.0" + p-limit "^3.1.0" + source-map-support "0.5.13" + +jest-runtime@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.7.0.tgz#efecb3141cf7d3767a3a0cc8f7c9990587d3d817" + integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/globals" "^29.7.0" + "@jest/source-map" "^29.6.3" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" chalk "^4.0.0" cjs-module-lexer "^1.0.0" collect-v8-coverage "^1.0.0" - execa "^5.0.0" glob "^7.1.3" graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-message-util "^27.5.1" - jest-mock "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" slash "^3.0.0" strip-bom "^4.0.0" -jest-serializer@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.5.1.tgz#81438410a30ea66fd57ff730835123dea1fb1f64" - integrity sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w== - dependencies: - "@types/node" "*" - graceful-fs "^4.2.9" - -jest-snapshot@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.5.1.tgz#b668d50d23d38054a51b42c4039cab59ae6eb6a1" - integrity sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA== +jest-snapshot@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.7.0.tgz#c2c574c3f51865da1bb329036778a69bf88a6be5" + integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== dependencies: - "@babel/core" "^7.7.2" + "@babel/core" "^7.11.6" "@babel/generator" "^7.7.2" + "@babel/plugin-syntax-jsx" "^7.7.2" "@babel/plugin-syntax-typescript" "^7.7.2" - "@babel/traverse" "^7.7.2" - "@babel/types" "^7.0.0" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/babel__traverse" "^7.0.4" - "@types/prettier" "^2.1.5" + "@babel/types" "^7.3.3" + "@jest/expect-utils" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" babel-preset-current-node-syntax "^1.0.0" chalk "^4.0.0" - expect "^27.5.1" + expect "^29.7.0" graceful-fs "^4.2.9" - jest-diff "^27.5.1" - jest-get-type "^27.5.1" - jest-haste-map "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-util "^27.5.1" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" natural-compare "^1.4.0" - pretty-format "^27.5.1" - semver "^7.3.2" + pretty-format "^29.7.0" + semver "^7.5.3" -jest-util@^27.0.0, jest-util@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.5.1.tgz#3ba9771e8e31a0b85da48fe0b0891fb86c01c2f9" - integrity sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw== +jest-util@^29.0.0, jest-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" + integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" ci-info "^3.2.0" graceful-fs "^4.2.9" picomatch "^2.2.3" -jest-validate@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.5.1.tgz#9197d54dc0bdb52260b8db40b46ae668e04df067" - integrity sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ== +jest-validate@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" + integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" camelcase "^6.2.0" chalk "^4.0.0" - jest-get-type "^27.5.1" + jest-get-type "^29.6.3" leven "^3.1.0" - pretty-format "^27.5.1" + pretty-format "^29.7.0" -jest-watcher@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.5.1.tgz#71bd85fb9bde3a2c2ec4dc353437971c43c642a2" - integrity sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw== +jest-watcher@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.7.0.tgz#7810d30d619c3a62093223ce6bb359ca1b28a2f2" + integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== dependencies: - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" - jest-util "^27.5.1" + emittery "^0.13.1" + jest-util "^29.7.0" string-length "^4.0.1" -jest-worker@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" - integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== +jest-worker@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" + integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== dependencies: "@types/node" "*" + jest-util "^29.7.0" merge-stream "^2.0.0" supports-color "^8.0.0" -jest@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest/-/jest-27.5.1.tgz#dadf33ba70a779be7a6fc33015843b51494f63fc" - integrity sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ== +jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613" + integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== dependencies: - "@jest/core" "^27.5.1" + "@jest/core" "^29.7.0" + "@jest/types" "^29.6.3" import-local "^3.0.2" - jest-cli "^27.5.1" + jest-cli "^29.7.0" jiti@^1.19.1: version "1.21.0" @@ -8371,17 +8156,17 @@ jiti@^1.19.1: integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q== joi@^17.7.0: - version "17.11.0" - resolved "https://registry.yarnpkg.com/joi/-/joi-17.11.0.tgz#aa9da753578ec7720e6f0ca2c7046996ed04fc1a" - integrity sha512-NgB+lZLNoqISVy1rZocE9PZI36bL/77ie924Ri43yEvi9GUUMPeyVIr8KdFTMUlby1p0PBYMk9spIxEUQYqrJQ== + version "17.12.1" + resolved "https://registry.yarnpkg.com/joi/-/joi-17.12.1.tgz#3347ecf4cd3301962d42191c021b165eef1f395b" + integrity sha512-vtxmq+Lsc5SlfqotnfVjlViWfOL9nt/avKNbKYizwf6gsCfq9NYY/ceYRMFD8XDdrjJ9abJyScWmhmIiy+XRtQ== dependencies: - "@hapi/hoek" "^9.0.0" - "@hapi/topo" "^5.0.0" - "@sideway/address" "^4.1.3" + "@hapi/hoek" "^9.3.0" + "@hapi/topo" "^5.1.0" + "@sideway/address" "^4.1.5" "@sideway/formula" "^3.0.1" "@sideway/pinpoint" "^2.0.0" -jose@^4.11.4, jose@^4.15.1: +jose@^4.11.4, jose@^4.15.4: version "4.15.4" resolved "https://registry.yarnpkg.com/jose/-/jose-4.15.4.tgz#02a9a763803e3872cf55f29ecef0dfdcc218cc03" integrity sha512-W+oqK4H+r5sITxfxpSU+MMdr/YSWGvgZMQDIsNoBDGGy4i7GBPTtvFKibQzW06n3U3TqHjhvBJsirShsEJ6eeQ== @@ -8401,7 +8186,14 @@ js-tokens@^3.0.2: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" integrity sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg== -js-yaml@^3.13.1: +js-yaml@4.1.0, js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +js-yaml@^3.10.0, js-yaml@^3.13.1: version "3.14.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== @@ -8409,51 +8201,16 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" +jsbn@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040" + integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A== jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== -jsdom@^16.6.0: - version "16.7.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" - integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== - dependencies: - abab "^2.0.5" - acorn "^8.2.4" - acorn-globals "^6.0.0" - cssom "^0.4.4" - cssstyle "^2.3.0" - data-urls "^2.0.0" - decimal.js "^10.2.1" - domexception "^2.0.1" - escodegen "^2.0.0" - form-data "^3.0.0" - html-encoding-sniffer "^2.0.1" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - is-potential-custom-element-name "^1.0.1" - nwsapi "^2.2.0" - parse5 "6.0.1" - saxes "^5.0.1" - symbol-tree "^3.2.4" - tough-cookie "^4.0.0" - w3c-hr-time "^1.0.2" - w3c-xmlserializer "^2.0.0" - webidl-conversions "^6.1.0" - whatwg-encoding "^1.0.5" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.5.0" - ws "^7.4.6" - xml-name-validator "^3.0.0" - jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" @@ -8484,6 +8241,11 @@ json-parse-even-better-errors@^2.3.0: resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== +json-parse-even-better-errors@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz#02bb29fb5da90b5444581749c22cedd3597c6cb0" + integrity sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg== + json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -8509,11 +8271,6 @@ json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== -json5@2.x, json5@^2.1.2, json5@^2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - json5@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" @@ -8521,7 +8278,12 @@ json5@^1.0.2: dependencies: minimist "^1.2.0" -jsona@^1.12.1: +json5@^2.1.2, json5@^2.2.2, json5@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +jsona@^1.12.1, jsona@^1.9.7: version "1.12.1" resolved "https://registry.yarnpkg.com/jsona/-/jsona-1.12.1.tgz#213f8c55a3460d94179824ac83d1dfdbfa265238" integrity sha512-44WL4ZdsKx//mCDPUFQtbK7mnVdHXcVzbBy7Pzy0LAgXyfpN5+q8Hum7cLUX4wTnRsClHb4eId1hePZYchwczg== @@ -8536,11 +8298,16 @@ jsonapi-serializer@^3.6.7: inflected "^1.1.6" lodash "^4.16.3" -jsonc-parser@^3.0.0: +jsonc-parser@3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== +jsonc-parser@^3.0.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.1.tgz#031904571ccf929d7670ee8c547545081cb37f1a" + integrity sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA== + jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" @@ -8562,16 +8329,6 @@ jsonparse@^1.2.0, jsonparse@^1.3.1: resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== -jsprim@^1.2.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" - integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.4.0" - verror "1.10.0" - jsprim@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-2.0.2.tgz#77ca23dbcd4135cd364800d22ff82c2185803d4d" @@ -8582,7 +8339,7 @@ jsprim@^2.0.2: json-schema "0.4.0" verror "1.10.0" -"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.3: +"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.5: version "3.3.5" resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ== @@ -8621,17 +8378,17 @@ kleur@^3.0.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== -language-subtag-registry@~0.3.2: +language-subtag-registry@^0.3.20: version "0.3.22" resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== -language-tags@=1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a" - integrity sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ== +language-tags@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.9.tgz#1ffdcd0ec0fafb4b1be7f8b11f306ad0f9c08777" + integrity sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA== dependencies: - language-subtag-registry "~0.3.2" + language-subtag-registry "^0.3.20" latest-version@^3.0.0: version "3.1.0" @@ -8652,29 +8409,85 @@ lazy-ass@1.6.0, lazy-ass@^1.6.0: resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513" integrity sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw== -lerna@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/lerna/-/lerna-4.0.0.tgz#b139d685d50ea0ca1be87713a7c2f44a5b678e9e" - integrity sha512-DD/i1znurfOmNJb0OBw66NmNqiM8kF6uIrzrJ0wGE3VNdzeOhz9ziWLYiRaZDGGwgbcjOo6eIfcx9O5Qynz+kg== - dependencies: - "@lerna/add" "4.0.0" - "@lerna/bootstrap" "4.0.0" - "@lerna/changed" "4.0.0" - "@lerna/clean" "4.0.0" - "@lerna/cli" "4.0.0" - "@lerna/create" "4.0.0" - "@lerna/diff" "4.0.0" - "@lerna/exec" "4.0.0" - "@lerna/import" "4.0.0" - "@lerna/info" "4.0.0" - "@lerna/init" "4.0.0" - "@lerna/link" "4.0.0" - "@lerna/list" "4.0.0" - "@lerna/publish" "4.0.0" - "@lerna/run" "4.0.0" - "@lerna/version" "4.0.0" - import-local "^3.0.2" - npmlog "^4.1.2" +lerna@^8.1.2: + version "8.1.2" + resolved "https://registry.yarnpkg.com/lerna/-/lerna-8.1.2.tgz#441e8078d0b68557b4ef5b33202a16a6bc2a50d3" + integrity sha512-RCyBAn3XsqqvHbz3TxLfD7ylqzCi1A2UJnFEZmhURgx589vM3qYWQa/uOMeEEf565q6cAdtmulITciX1wgkAtw== + dependencies: + "@lerna/create" "8.1.2" + "@npmcli/run-script" "7.0.2" + "@nx/devkit" ">=17.1.2 < 19" + "@octokit/plugin-enterprise-rest" "6.0.1" + "@octokit/rest" "19.0.11" + byte-size "8.1.1" + chalk "4.1.0" + clone-deep "4.0.1" + cmd-shim "6.0.1" + columnify "1.6.0" + conventional-changelog-angular "7.0.0" + conventional-changelog-core "5.0.1" + conventional-recommended-bump "7.0.1" + cosmiconfig "^8.2.0" + dedent "0.7.0" + envinfo "7.8.1" + execa "5.0.0" + fs-extra "^11.1.1" + get-port "5.1.1" + get-stream "6.0.0" + git-url-parse "13.1.0" + glob-parent "5.1.2" + globby "11.1.0" + graceful-fs "4.2.11" + has-unicode "2.0.1" + import-local "3.1.0" + ini "^1.3.8" + init-package-json "5.0.0" + inquirer "^8.2.4" + is-ci "3.0.1" + is-stream "2.0.0" + jest-diff ">=29.4.3 < 30" + js-yaml "4.1.0" + libnpmaccess "7.0.2" + libnpmpublish "7.3.0" + load-json-file "6.2.0" + lodash "^4.17.21" + make-dir "4.0.0" + minimatch "3.0.5" + multimatch "5.0.0" + node-fetch "2.6.7" + npm-package-arg "8.1.1" + npm-packlist "5.1.1" + npm-registry-fetch "^14.0.5" + npmlog "^6.0.2" + nx ">=17.1.2 < 19" + p-map "4.0.0" + p-map-series "2.1.0" + p-pipe "3.1.0" + p-queue "6.6.2" + p-reduce "2.1.0" + p-waterfall "2.1.1" + pacote "^17.0.5" + pify "5.0.0" + read-cmd-shim "4.0.0" + read-package-json "6.0.4" + resolve-from "5.0.0" + rimraf "^4.4.1" + semver "^7.3.8" + signal-exit "3.0.7" + slash "3.0.0" + ssri "^9.0.1" + strong-log-transformer "2.1.0" + tar "6.1.11" + temp-dir "1.0.0" + typescript ">=3 < 6" + upath "2.0.1" + uuid "^9.0.0" + validate-npm-package-license "3.0.4" + validate-npm-package-name "5.0.0" + write-file-atomic "5.0.1" + write-pkg "4.0.0" + yargs "17.7.2" + yargs-parser "21.1.1" leven@^3.1.0: version "3.1.0" @@ -8689,26 +8502,27 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" -libnpmaccess@^4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-4.0.3.tgz#dfb0e5b0a53c315a2610d300e46b4ddeb66e7eec" - integrity sha512-sPeTSNImksm8O2b6/pf3ikv4N567ERYEpeKRPSmqlNt1dTZbvgpJIzg5vAhXHpw2ISBsELFRelk0jEahj1c6nQ== +libnpmaccess@7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-7.0.2.tgz#7f056c8c933dd9c8ba771fa6493556b53c5aac52" + integrity sha512-vHBVMw1JFMTgEk15zRsJuSAg7QtGGHpUSEfnbcRL1/gTBag9iEfJbyjpDmdJmwMhvpoLoNBtdAUCdGnaP32hhw== dependencies: - aproba "^2.0.0" - minipass "^3.1.1" - npm-package-arg "^8.1.2" - npm-registry-fetch "^11.0.0" + npm-package-arg "^10.1.0" + npm-registry-fetch "^14.0.3" -libnpmpublish@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-4.0.2.tgz#be77e8bf5956131bcb45e3caa6b96a842dec0794" - integrity sha512-+AD7A2zbVeGRCFI2aO//oUmapCwy7GHqPXFJh3qpToSRNU+tXKJ2YFUgjt04LPPAf2dlEH95s6EhIHM1J7bmOw== - dependencies: - normalize-package-data "^3.0.2" - npm-package-arg "^8.1.2" - npm-registry-fetch "^11.0.0" - semver "^7.1.3" - ssri "^8.0.1" +libnpmpublish@7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-7.3.0.tgz#2ceb2b36866d75a6cd7b4aa748808169f4d17e37" + integrity sha512-fHUxw5VJhZCNSls0KLNEG0mCD2PN1i14gH5elGOgiVnU3VgTcRahagYP2LKI1m0tFCJ+XrAm0zVYyF5RCbXzcg== + dependencies: + ci-info "^3.6.1" + normalize-package-data "^5.0.0" + npm-package-arg "^10.1.0" + npm-registry-fetch "^14.0.3" + proc-log "^3.0.0" + semver "^7.3.7" + sigstore "^1.4.0" + ssri "^10.0.1" libnpx@^10.2.4: version "10.2.4" @@ -8724,48 +8538,63 @@ libnpx@^10.2.4: y18n "^4.0.0" yargs "^14.2.3" -lilconfig@2.1.0, lilconfig@^2.0.5, lilconfig@^2.1.0: +lilconfig@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.0.0.tgz#f8067feb033b5b74dab4602a5f5029420be749bc" + integrity sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g== + +lilconfig@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== +lilconfig@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.1.tgz#9d8a246fa753106cfc205fd2d77042faca56e5e3" + integrity sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ== + lines-and-columns@^1.1.6: version "1.2.4" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== -lint-staged@^15.0.2: - version "15.0.2" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-15.0.2.tgz#abef713182ec2770143e40a5d6d0130fe61ed442" - integrity sha512-vnEy7pFTHyVuDmCAIFKR5QDO8XLVlPFQQyujQ/STOxe40ICWqJ6knS2wSJ/ffX/Lw0rz83luRDh+ET7toN+rOw== +lines-and-columns@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-2.0.4.tgz#d00318855905d2660d8c0822e3f5a4715855fc42" + integrity sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A== + +lint-staged@^15.2.2: + version "15.2.2" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-15.2.2.tgz#ad7cbb5b3ab70e043fa05bff82a09ed286bc4c5f" + integrity sha512-TiTt93OPh1OZOsb5B7k96A/ATl2AjIZo+vnzFZ6oHK5FuTk63ByDtxGQpHm+kFETjEWqgkF95M8FRXKR/LEBcw== dependencies: chalk "5.3.0" commander "11.1.0" debug "4.3.4" execa "8.0.1" - lilconfig "2.1.0" - listr2 "7.0.2" + lilconfig "3.0.0" + listr2 "8.0.1" micromatch "4.0.5" pidtree "0.6.0" string-argv "0.3.2" - yaml "2.3.3" + yaml "2.3.4" listify@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/listify/-/listify-1.0.3.tgz#a9335ac351c3d1aea515494ed746976eeb92248b" integrity sha512-083swF7iH7bx8666zdzBColpgEuy46HjN3r1isD4zV6Ix7FuHfb/2/WVnl4CH8hjuoWeFF7P5KkKNXUnJCFEJg== -listr2@7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-7.0.2.tgz#3aa3e1549dfaf3c57ab5eeaba754da3b87f33063" - integrity sha512-rJysbR9GKIalhTbVL2tYbF2hVyDnrf7pFUZBwjPaMIdadYHmeT+EVi/Bu3qd7ETQPahTotg2WRCatXwRBW554g== +listr2@8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-8.0.1.tgz#4d3f50ae6cec3c62bdf0e94f5c2c9edebd4b9c34" + integrity sha512-ovJXBXkKGfq+CwmKTjluEqFi3p4h8xvkxGQQAQan22YCgef4KZ1mKGjzfGh6PL6AW5Csw0QiQPNuQyH+6Xk3hA== dependencies: - cli-truncate "^3.1.0" + cli-truncate "^4.0.0" colorette "^2.0.20" eventemitter3 "^5.0.1" - log-update "^5.0.1" + log-update "^6.0.0" rfdc "^1.3.0" - wrap-ansi "^8.1.0" + wrap-ansi "^9.0.0" listr2@^3.8.3: version "3.14.0" @@ -8781,6 +8610,16 @@ listr2@^3.8.3: through "^2.3.8" wrap-ansi "^7.0.0" +load-json-file@6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-6.2.0.tgz#5c7770b42cafa97074ca2848707c61662f4251a1" + integrity sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ== + dependencies: + graceful-fs "^4.1.15" + parse-json "^5.0.0" + strip-bom "^4.0.0" + type-fest "^0.6.0" + load-json-file@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" @@ -8791,16 +8630,6 @@ load-json-file@^4.0.0: pify "^3.0.0" strip-bom "^3.0.0" -load-json-file@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-6.2.0.tgz#5c7770b42cafa97074ca2848707c61662f4251a1" - integrity sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ== - dependencies: - graceful-fs "^4.1.15" - parse-json "^5.0.0" - strip-bom "^4.0.0" - type-fest "^0.6.0" - load-tsconfig@^0.2.3: version "0.2.5" resolved "https://registry.yarnpkg.com/load-tsconfig/-/load-tsconfig-0.2.5.tgz#453b8cd8961bfb912dea77eb6c168fe8cca3d3a1" @@ -8841,11 +8670,6 @@ lodash-es@^4.17.21: resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== -lodash._reinterpolate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" - integrity sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA== - lodash.camelcase@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" @@ -8926,21 +8750,6 @@ lodash.startcase@^4.4.0: resolved "https://registry.yarnpkg.com/lodash.startcase/-/lodash.startcase-4.4.0.tgz#9436e34ed26093ed7ffae1936144350915d9add8" integrity sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg== -lodash.template@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" - integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A== - dependencies: - lodash._reinterpolate "^3.0.0" - lodash.templatesettings "^4.0.0" - -lodash.templatesettings@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33" - integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ== - dependencies: - lodash._reinterpolate "^3.0.0" - lodash.uniq@4.5.0, lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" @@ -8951,12 +8760,12 @@ lodash.upperfirst@^4.3.1: resolved "https://registry.yarnpkg.com/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz#1365edf431480481ef0d1c68957a5ed99d49f7ce" integrity sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg== -lodash@^4.16.3, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21, lodash@^4.7.0: +lodash@^4.16.3, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -log-symbols@^4.0.0: +log-symbols@^4.0.0, log-symbols@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== @@ -8974,16 +8783,16 @@ log-update@^4.0.0: slice-ansi "^4.0.0" wrap-ansi "^6.2.0" -log-update@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-5.0.1.tgz#9e928bf70cb183c1f0c9e91d9e6b7115d597ce09" - integrity sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw== +log-update@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-6.0.0.tgz#0ddeb7ac6ad658c944c1de902993fce7c33f5e59" + integrity sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw== dependencies: - ansi-escapes "^5.0.0" + ansi-escapes "^6.2.0" cli-cursor "^4.0.0" - slice-ansi "^5.0.0" - strip-ansi "^7.0.1" - wrap-ansi "^8.0.1" + slice-ansi "^7.0.0" + strip-ansi "^7.1.0" + wrap-ansi "^9.0.0" longest-streak@^2.0.0: version "2.0.4" @@ -9012,6 +8821,11 @@ lowercase-keys@^2.0.0: resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== +lru-cache@^10.0.1, "lru-cache@^9.1.1 || ^10.0.0": + version "10.2.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" + integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== + lru-cache@^4.0.1, lru-cache@^4.1.5: version "4.1.5" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" @@ -9034,11 +8848,23 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" +lru-cache@^7.5.1, lru-cache@^7.7.1: + version "7.18.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" + integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== + lz-string@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941" integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ== +make-dir@4.0.0, make-dir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" + integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== + dependencies: + semver "^7.5.3" + make-dir@^1.0.0: version "1.3.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" @@ -9061,60 +8887,48 @@ make-dir@^3.0.0: dependencies: semver "^6.0.0" -make-dir@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" - integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== - dependencies: - semver "^7.5.3" - make-error@1.x, make-error@^1.1.1: version "1.3.6" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== -make-fetch-happen@^8.0.9: - version "8.0.14" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-8.0.14.tgz#aaba73ae0ab5586ad8eaa68bd83332669393e222" - integrity sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ== +make-fetch-happen@^11.0.0, make-fetch-happen@^11.0.1, make-fetch-happen@^11.1.1: + version "11.1.1" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz#85ceb98079584a9523d4bf71d32996e7e208549f" + integrity sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w== dependencies: - agentkeepalive "^4.1.3" - cacache "^15.0.5" - http-cache-semantics "^4.1.0" - http-proxy-agent "^4.0.1" + agentkeepalive "^4.2.1" + cacache "^17.0.0" + http-cache-semantics "^4.1.1" + http-proxy-agent "^5.0.0" https-proxy-agent "^5.0.0" is-lambda "^1.0.1" - lru-cache "^6.0.0" - minipass "^3.1.3" - minipass-collect "^1.0.2" - minipass-fetch "^1.3.2" + lru-cache "^7.7.1" + minipass "^5.0.0" + minipass-fetch "^3.0.0" minipass-flush "^1.0.5" minipass-pipeline "^1.2.4" + negotiator "^0.6.3" promise-retry "^2.0.1" - socks-proxy-agent "^5.0.0" - ssri "^8.0.0" + socks-proxy-agent "^7.0.0" + ssri "^10.0.0" -make-fetch-happen@^9.0.1: - version "9.1.0" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968" - integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== +make-fetch-happen@^13.0.0: + version "13.0.0" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-13.0.0.tgz#705d6f6cbd7faecb8eac2432f551e49475bfedf0" + integrity sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A== dependencies: - agentkeepalive "^4.1.3" - cacache "^15.2.0" - http-cache-semantics "^4.1.0" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" + "@npmcli/agent" "^2.0.0" + cacache "^18.0.0" + http-cache-semantics "^4.1.1" is-lambda "^1.0.1" - lru-cache "^6.0.0" - minipass "^3.1.3" - minipass-collect "^1.0.2" - minipass-fetch "^1.3.2" + minipass "^7.0.2" + minipass-fetch "^3.0.0" minipass-flush "^1.0.5" minipass-pipeline "^1.2.4" - negotiator "^0.6.2" + negotiator "^0.6.3" promise-retry "^2.0.1" - socks-proxy-agent "^6.0.0" - ssri "^8.0.0" + ssri "^10.0.0" makeerror@1.0.12: version "1.0.12" @@ -9227,6 +9041,11 @@ memoize-one@^4.0.0: resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-4.1.0.tgz#a2387c58c03fff27ca390c31b764a79addf3f906" integrity sha512-2GApq0yI/b22J2j9rhbrAlsHb0Qcz+7yWxeLG8h+95sl1XPUgeLimQSOdur4Vw7cUhrBHwaUZxWFZueojqNRzA== +meow@^12.0.1: + version "12.1.1" + resolved "https://registry.yarnpkg.com/meow/-/meow-12.1.1.tgz#e558dddbab12477b69b2e9a2728c327f191bace6" + integrity sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw== + meow@^8.0.0, meow@^8.1.2: version "8.1.2" resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" @@ -9319,6 +9138,20 @@ mini-svg-data-uri@^1.2.3: resolved "https://registry.yarnpkg.com/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz#8ab0aabcdf8c29ad5693ca595af19dd2ead09939" integrity sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg== +minimatch@3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.5.tgz#4da8f1290ee0f0f8e83d60ca69f8f134068604a3" + integrity sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@9.0.3, minimatch@^9.0.0, minimatch@^9.0.1, minimatch@^9.0.3: + version "9.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== + dependencies: + brace-expansion "^2.0.1" + minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" @@ -9326,6 +9159,20 @@ minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: dependencies: brace-expansion "^1.1.7" +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^8.0.2: + version "8.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-8.0.4.tgz#847c1b25c014d4e9a7f68aaf63dedd668a626229" + integrity sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA== + dependencies: + brace-expansion "^2.0.1" + minimist-options@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" @@ -9347,16 +9194,23 @@ minipass-collect@^1.0.2: dependencies: minipass "^3.0.0" -minipass-fetch@^1.3.0, minipass-fetch@^1.3.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.4.1.tgz#d75e0091daac1b0ffd7e9d41629faff7d0c1f1b6" - integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw== +minipass-collect@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-2.0.1.tgz#1621bc77e12258a12c60d34e2276ec5c20680863" + integrity sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw== dependencies: - minipass "^3.1.0" + minipass "^7.0.3" + +minipass-fetch@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-3.0.4.tgz#4d4d9b9f34053af6c6e597a64be8e66e42bf45b7" + integrity sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg== + dependencies: + minipass "^7.0.3" minipass-sized "^1.0.3" - minizlib "^2.0.0" + minizlib "^2.1.2" optionalDependencies: - encoding "^0.1.12" + encoding "^0.1.13" minipass-flush@^1.0.5: version "1.0.5" @@ -9373,7 +9227,7 @@ minipass-json-stream@^1.0.1: jsonparse "^1.3.1" minipass "^3.0.0" -minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: +minipass-pipeline@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== @@ -9387,34 +9241,29 @@ minipass-sized@^1.0.3: dependencies: minipass "^3.0.0" -minipass@^2.6.0, minipass@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" - integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== - dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" - -minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: +minipass@^3.0.0, minipass@^3.1.1: version "3.3.6" resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== dependencies: yallist "^4.0.0" +minipass@^4.2.4: + version "4.2.8" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.8.tgz#f0010f64393ecfc1d1ccb5f582bcaf45f48e1a3a" + integrity sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ== + minipass@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== -minizlib@^1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" - integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== - dependencies: - minipass "^2.9.0" +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.2, minipass@^7.0.3: + version "7.0.4" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" + integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== -minizlib@^2.0.0, minizlib@^2.1.1: +minizlib@^2.1.1, minizlib@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== @@ -9427,28 +9276,12 @@ mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== -mkdirp-infer-owner@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz#55d3b368e7d89065c38f32fd38e638f0ab61d316" - integrity sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw== - dependencies: - chownr "^2.0.0" - infer-owner "^1.0.4" - mkdirp "^1.0.3" - -mkdirp@^0.5.1, mkdirp@^0.5.5: - version "0.5.6" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" - integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== - dependencies: - minimist "^1.2.6" - -mkdirp@^1.0.3, mkdirp@^1.0.4: +mkdirp@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -modify-values@^1.0.0: +modify-values@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== @@ -9512,7 +9345,7 @@ ms@^2.0.0, ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -multimatch@^5.0.0: +multimatch@5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-5.0.0.tgz#932b800963cea7a31a033328fa1e0c3a1874dbe6" integrity sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA== @@ -9523,11 +9356,16 @@ multimatch@^5.0.0: arrify "^2.0.1" minimatch "^3.0.4" -mute-stream@0.0.8, mute-stream@~0.0.4: +mute-stream@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== +mute-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e" + integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== + mz@^2.7.0: version "2.7.0" resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" @@ -9542,27 +9380,22 @@ nanoclone@^0.2.1: resolved "https://registry.yarnpkg.com/nanoclone/-/nanoclone-0.2.1.tgz#dd4090f8f1a110d26bb32c49ed2f5b9235209ed4" integrity sha512-wynEP02LmIbLpcYw8uBKpcfF6dmg2vcpKqxeH5UcoKEYdExslsdUA4ugFauuaeYdTB76ez6gJW8XAZ6CgkXYxA== -nanoid@^3.3.4, nanoid@^3.3.6: - version "3.3.6" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" - integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== +nanoid@^3.3.4, nanoid@^3.3.6, nanoid@^3.3.7: + version "3.3.7" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" + integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== napi-build-utils@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== -natural-compare-lite@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" - integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== - natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== -negotiator@^0.6.2: +negotiator@^0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== @@ -9573,9 +9406,9 @@ neo-async@^2.6.2: integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== next-auth@^4.22.1: - version "4.24.4" - resolved "https://registry.yarnpkg.com/next-auth/-/next-auth-4.24.4.tgz#ec8aa72963c4c8d325ebc21f4c15e3b46647026e" - integrity sha512-5DGffi+OpkbU62vPQIJ1z+hFnmow+ec5Qrn9m6eoglIO51m0DlrmLxBduZEwKAYDEg9k2joi1yelgmq1vqK3aQ== + version "4.24.6" + resolved "https://registry.yarnpkg.com/next-auth/-/next-auth-4.24.6.tgz#8cb1848197fdb2479eac2f10e4efa1f1b6b0daaa" + integrity sha512-djQt3ZEaWEIxcsuh3HTW2uuzLfXMRjHH+ugAsichlQSbH4iA5MRcgMA2HvTNvsDTDLh44tyU72+/gWsxgTbAKg== dependencies: "@babel/runtime" "^7.20.13" "@panva/hkdf" "^1.0.2" @@ -9587,6 +9420,28 @@ next-auth@^4.22.1: preact-render-to-string "^5.1.19" uuid "^8.3.2" +next-drupal-query@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/next-drupal-query/-/next-drupal-query-0.4.0.tgz#26def174b3449fd5365670c83f23f942cab8d845" + integrity sha512-05kDHr/I0OiwaXLQxhBHEZ1q6xIWYNSnli2TsiAgEtfmDo4K2mqGEnjPDUXzkXvtH/XfJ7y5hG83qydLKghiAA== + dependencies: + deepmerge "^4.2.2" + drupal-jsonapi-params "^2.1.0" + next "^12.2.3 || ^13" + type-fest "^2.17.0" + +next-drupal@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/next-drupal/-/next-drupal-1.6.0.tgz#4bc14f73a5dc55763e461da696fc938da2bb6b67" + integrity sha512-IRHgcpidXj45jicVl2wEp2WhyaV384rfubxxWopgbmo4YKYvIrg0GtPj3EQNuuX5/EJxyZcULHmmhSXFSidlpg== + dependencies: + jsona "^1.9.7" + next "^12.2.0 || ^13" + node-cache "^5.1.2" + qs "^6.10.3" + react "^17.0.2 || ^18" + react-dom "^17.0.2 || ^18" + next-i18next@^13.1.5: version "13.3.0" resolved "https://registry.yarnpkg.com/next-i18next/-/next-i18next-13.3.0.tgz#81575b0e17a94efa97319c1e697af893a4cea174" @@ -9637,12 +9492,12 @@ next-seo@^4.23.0: resolved "https://registry.yarnpkg.com/next-seo/-/next-seo-4.29.0.tgz#d281e95ba47914117cc99e9e468599f0547d9b9b" integrity sha512-xmwzcz4uHaYJ8glbuhs6FSBQ7z3irmdPYdJJ5saWm72Uy3o+mPKGaPCXQetTCE6/xxVnpoDV4yFtFlEjUcljSg== -"next@^12.2.0 || ^13 || ^14", "next@^12.2.3 || ^13 || ^14", "next@^13 || ^14": - version "14.0.3" - resolved "https://registry.yarnpkg.com/next/-/next-14.0.3.tgz#8d801a08eaefe5974203d71092fccc463103a03f" - integrity sha512-AbYdRNfImBr3XGtvnwOxq8ekVCwbFTv/UJoLwmaX89nk9i051AEY4/HAWzU0YpaTDw8IofUpmuIlvzWF13jxIw== +"next@^12.2.0 || ^13", "next@^12.2.3 || ^13": + version "13.5.6" + resolved "https://registry.yarnpkg.com/next/-/next-13.5.6.tgz#e964b5853272236c37ce0dd2c68302973cf010b1" + integrity sha512-Y2wTcTbO4WwEsVb4A8VSnOsG1I9ok+h74q0ZdxkwM3EODqrs4pasq7O0iUxbcS9VtWMicG7f3+HAj0r1+NtKSw== dependencies: - "@next/env" "14.0.3" + "@next/env" "13.5.6" "@swc/helpers" "0.5.2" busboy "1.6.0" caniuse-lite "^1.0.30001406" @@ -9650,15 +9505,15 @@ next-seo@^4.23.0: styled-jsx "5.1.1" watchpack "2.4.0" optionalDependencies: - "@next/swc-darwin-arm64" "14.0.3" - "@next/swc-darwin-x64" "14.0.3" - "@next/swc-linux-arm64-gnu" "14.0.3" - "@next/swc-linux-arm64-musl" "14.0.3" - "@next/swc-linux-x64-gnu" "14.0.3" - "@next/swc-linux-x64-musl" "14.0.3" - "@next/swc-win32-arm64-msvc" "14.0.3" - "@next/swc-win32-ia32-msvc" "14.0.3" - "@next/swc-win32-x64-msvc" "14.0.3" + "@next/swc-darwin-arm64" "13.5.6" + "@next/swc-darwin-x64" "13.5.6" + "@next/swc-linux-arm64-gnu" "13.5.6" + "@next/swc-linux-arm64-musl" "13.5.6" + "@next/swc-linux-x64-gnu" "13.5.6" + "@next/swc-linux-x64-musl" "13.5.6" + "@next/swc-win32-arm64-msvc" "13.5.6" + "@next/swc-win32-ia32-msvc" "13.5.6" + "@next/swc-win32-x64-msvc" "13.5.6" next@^12.2.3: version "12.3.4" @@ -9686,10 +9541,33 @@ next@^12.2.3: "@next/swc-win32-ia32-msvc" "12.3.4" "@next/swc-win32-x64-msvc" "12.3.4" +"next@^12.2.3 || ^13 || ^14", "next@^13.4 || ^14", next@^14: + version "14.1.0" + resolved "https://registry.yarnpkg.com/next/-/next-14.1.0.tgz#b31c0261ff9caa6b4a17c5af019ed77387174b69" + integrity sha512-wlzrsbfeSU48YQBjZhDzOwhWhGsy+uQycR8bHAOt1LY1bn3zZEcDyHQOEoN3aWzQ8LHCAJ1nqrWCc9XF2+O45Q== + dependencies: + "@next/env" "14.1.0" + "@swc/helpers" "0.5.2" + busboy "1.6.0" + caniuse-lite "^1.0.30001579" + graceful-fs "^4.2.11" + postcss "8.4.31" + styled-jsx "5.1.1" + optionalDependencies: + "@next/swc-darwin-arm64" "14.1.0" + "@next/swc-darwin-x64" "14.1.0" + "@next/swc-linux-arm64-gnu" "14.1.0" + "@next/swc-linux-arm64-musl" "14.1.0" + "@next/swc-linux-x64-gnu" "14.1.0" + "@next/swc-linux-x64-musl" "14.1.0" + "@next/swc-win32-arm64-msvc" "14.1.0" + "@next/swc-win32-ia32-msvc" "14.1.0" + "@next/swc-win32-x64-msvc" "14.1.0" + node-abi@^3.3.0: - version "3.51.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.51.0.tgz#970bf595ef5a26a271307f8a4befa02823d4e87d" - integrity sha512-SQkEP4hmNWjlniS5zdnfIXTk1x7Ome85RDzHlTbBtzE97Gfwz/Ipw4v/Ryk20DWIy3yCNVLVlGKApCnmvYoJbA== + version "3.55.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.55.0.tgz#57bc713082a48d4c7c7d3104d3d0cbb1a0e12ed9" + integrity sha512-uPEjtyh2tFEvWYt4Jw7McOD5FPcHkcxm/tHZc5PWaDB3JYq0rGFUbgaAK+CT5pYpQddBfsZVWI08OwoRfdfbcQ== dependencies: semver "^7.3.5" @@ -9705,6 +9583,13 @@ node-cache@^5.1.2: dependencies: clone "2.x" +node-fetch@2.6.7: + version "2.6.7" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + node-fetch@^2.6.1, node-fetch@^2.6.12, node-fetch@^2.6.7: version "2.7.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" @@ -9712,65 +9597,45 @@ node-fetch@^2.6.1, node-fetch@^2.6.12, node-fetch@^2.6.7: dependencies: whatwg-url "^5.0.0" -node-gyp@^5.0.2: - version "5.1.1" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-5.1.1.tgz#eb915f7b631c937d282e33aed44cb7a025f62a3e" - integrity sha512-WH0WKGi+a4i4DUt2mHnvocex/xPLp9pYt5R6M2JdFB7pJ7Z34hveZ4nDTGTiLXCkitA9T8HFZjhinBCiVHYcWw== - dependencies: - env-paths "^2.2.0" - glob "^7.1.4" - graceful-fs "^4.2.2" - mkdirp "^0.5.1" - nopt "^4.0.1" - npmlog "^4.1.2" - request "^2.88.0" - rimraf "^2.6.3" - semver "^5.7.1" - tar "^4.4.12" - which "^1.3.1" - -node-gyp@^7.1.0: - version "7.1.2" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-7.1.2.tgz#21a810aebb187120251c3bcec979af1587b188ae" - integrity sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ== +node-gyp@^10.0.0: + version "10.0.1" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-10.0.1.tgz#205514fc19e5830fa991e4a689f9e81af377a966" + integrity sha512-gg3/bHehQfZivQVfqIyy8wTdSymF9yTyP4CJifK73imyNMU8AIGQE2pUa7dNWfmMeG9cDVF2eehiRMv0LC1iAg== dependencies: env-paths "^2.2.0" - glob "^7.1.4" - graceful-fs "^4.2.3" - nopt "^5.0.0" - npmlog "^4.1.2" - request "^2.88.2" - rimraf "^3.0.2" - semver "^7.3.2" - tar "^6.0.2" - which "^2.0.2" + exponential-backoff "^3.1.1" + glob "^10.3.10" + graceful-fs "^4.2.6" + make-fetch-happen "^13.0.0" + nopt "^7.0.0" + proc-log "^3.0.0" + semver "^7.3.5" + tar "^6.1.2" + which "^4.0.0" node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== -node-releases@^2.0.13: - version "2.0.13" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" - integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== +node-machine-id@1.1.12: + version "1.1.12" + resolved "https://registry.yarnpkg.com/node-machine-id/-/node-machine-id-1.1.12.tgz#37904eee1e59b320bb9c5d6c0a59f3b469cb6267" + integrity sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ== -nopt@^4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" - integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg== - dependencies: - abbrev "1" - osenv "^0.1.4" +node-releases@^2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" + integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== -nopt@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" - integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== +nopt@^7.0.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-7.2.0.tgz#067378c68116f602f552876194fd11f1292503d7" + integrity sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA== dependencies: - abbrev "1" + abbrev "^2.0.0" -normalize-package-data@^2.0.0, normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: +normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== @@ -9780,15 +9645,35 @@ normalize-package-data@^2.0.0, normalize-package-data@^2.3.2, normalize-package- semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -normalize-package-data@^3.0.0, normalize-package-data@^3.0.2: +normalize-package-data@^3.0.0, normalize-package-data@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== dependencies: - hosted-git-info "^4.0.1" - is-core-module "^2.5.0" - semver "^7.3.4" - validate-npm-package-license "^3.0.1" + hosted-git-info "^4.0.1" + is-core-module "^2.5.0" + semver "^7.3.4" + validate-npm-package-license "^3.0.1" + +normalize-package-data@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-5.0.0.tgz#abcb8d7e724c40d88462b84982f7cbf6859b4588" + integrity sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q== + dependencies: + hosted-git-info "^6.0.0" + is-core-module "^2.8.1" + semver "^7.3.5" + validate-npm-package-license "^3.0.4" + +normalize-package-data@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-6.0.0.tgz#68a96b3c11edd462af7189c837b6b1064a484196" + integrity sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg== + dependencies: + hosted-git-info "^7.0.0" + is-core-module "^2.8.1" + semver "^7.3.5" + validate-npm-package-license "^3.0.4" normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" @@ -9805,44 +9690,66 @@ normalize-url@^4.1.0: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== -normalize-url@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" - integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== - -npm-bundled@^1.1.1: +npm-bundled@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1" integrity sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ== dependencies: npm-normalize-package-bin "^1.0.1" -npm-install-checks@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-4.0.0.tgz#a37facc763a2fde0497ef2c6d0ac7c3fbe00d7b4" - integrity sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w== +npm-bundled@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-3.0.0.tgz#7e8e2f8bb26b794265028491be60321a25a39db7" + integrity sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ== dependencies: - semver "^7.1.1" + npm-normalize-package-bin "^3.0.0" -npm-lifecycle@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/npm-lifecycle/-/npm-lifecycle-3.1.5.tgz#9882d3642b8c82c815782a12e6a1bfeed0026309" - integrity sha512-lDLVkjfZmvmfvpvBzA4vzee9cn+Me4orq0QF8glbswJVEbIcSNWib7qGOffolysc3teCqbbPZZkzbr3GQZTL1g== +npm-install-checks@^6.0.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-6.3.0.tgz#046552d8920e801fa9f919cad569545d60e826fe" + integrity sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw== dependencies: - byline "^5.0.0" - graceful-fs "^4.1.15" - node-gyp "^5.0.2" - resolve-from "^4.0.0" - slide "^1.1.6" - uid-number "0.0.6" - umask "^1.1.0" - which "^1.3.1" + semver "^7.1.1" -npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1: +npm-normalize-package-bin@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== +npm-normalize-package-bin@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz#25447e32a9a7de1f51362c61a559233b89947832" + integrity sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ== + +npm-package-arg@8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-8.1.1.tgz#00ebf16ac395c63318e67ce66780a06db6df1b04" + integrity sha512-CsP95FhWQDwNqiYS+Q0mZ7FAEDytDZAkNxQqea6IaAFJTAY9Lhhqyl0irU/6PMc7BGfUmnsbHcqxJD7XuVM/rg== + dependencies: + hosted-git-info "^3.0.6" + semver "^7.0.0" + validate-npm-package-name "^3.0.0" + +npm-package-arg@^10.0.0, npm-package-arg@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-10.1.0.tgz#827d1260a683806685d17193073cc152d3c7e9b1" + integrity sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA== + dependencies: + hosted-git-info "^6.0.0" + proc-log "^3.0.0" + semver "^7.3.5" + validate-npm-package-name "^5.0.0" + +npm-package-arg@^11.0.0: + version "11.0.1" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-11.0.1.tgz#f208b0022c29240a1c532a449bdde3f0a4708ebc" + integrity sha512-M7s1BD4NxdAvBKUPqqRW957Xwcl/4Zvo8Aj+ANrzvIPzGJZElrH7Z//rSaec2ORcND6FHHLnZeY8qgTpXDMFQQ== + dependencies: + hosted-git-info "^7.0.0" + proc-log "^3.0.0" + semver "^7.3.5" + validate-npm-package-name "^5.0.0" + npm-package-arg@^6.0.0: version "6.1.1" resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-6.1.1.tgz#02168cb0a49a2b75bf988a28698de7b529df5cb7" @@ -9853,60 +9760,58 @@ npm-package-arg@^6.0.0: semver "^5.6.0" validate-npm-package-name "^3.0.0" -npm-package-arg@^8.0.0, npm-package-arg@^8.0.1, npm-package-arg@^8.1.0, npm-package-arg@^8.1.2, npm-package-arg@^8.1.5: - version "8.1.5" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-8.1.5.tgz#3369b2d5fe8fdc674baa7f1786514ddc15466e44" - integrity sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q== - dependencies: - hosted-git-info "^4.0.1" - semver "^7.3.4" - validate-npm-package-name "^3.0.0" - -npm-packlist@^2.1.4: - version "2.2.2" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-2.2.2.tgz#076b97293fa620f632833186a7a8f65aaa6148c8" - integrity sha512-Jt01acDvJRhJGthnUJVF/w6gumWOZxO7IkpY/lsX9//zqQgnF7OJaxgQXcerd4uQOLu7W5bkb4mChL9mdfm+Zg== +npm-packlist@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-5.1.1.tgz#79bcaf22a26b6c30aa4dd66b976d69cc286800e0" + integrity sha512-UfpSvQ5YKwctmodvPPkK6Fwk603aoVsf8AEbmVKAEECrfvL8SSe1A2YIwrJ6xmTHAITKPwwZsWo7WwEbNk0kxw== dependencies: - glob "^7.1.6" - ignore-walk "^3.0.3" - npm-bundled "^1.1.1" + glob "^8.0.1" + ignore-walk "^5.0.1" + npm-bundled "^1.1.2" npm-normalize-package-bin "^1.0.1" -npm-pick-manifest@^6.0.0, npm-pick-manifest@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz#7b5484ca2c908565f43b7f27644f36bb816f5148" - integrity sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA== +npm-packlist@^8.0.0: + version "8.0.2" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-8.0.2.tgz#5b8d1d906d96d21c85ebbeed2cf54147477c8478" + integrity sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA== dependencies: - npm-install-checks "^4.0.0" - npm-normalize-package-bin "^1.0.1" - npm-package-arg "^8.1.2" - semver "^7.3.4" + ignore-walk "^6.0.4" -npm-registry-fetch@^11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz#68c1bb810c46542760d62a6a965f85a702d43a76" - integrity sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA== +npm-pick-manifest@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-9.0.0.tgz#f87a4c134504a2c7931f2bb8733126e3c3bb7e8f" + integrity sha512-VfvRSs/b6n9ol4Qb+bDwNGUXutpy76x6MARw/XssevE0TnctIKcmklJZM5Z7nqs5z5aW+0S63pgCNbpkUNNXBg== dependencies: - make-fetch-happen "^9.0.1" - minipass "^3.1.3" - minipass-fetch "^1.3.0" - minipass-json-stream "^1.0.1" - minizlib "^2.0.0" - npm-package-arg "^8.0.0" + npm-install-checks "^6.0.0" + npm-normalize-package-bin "^3.0.0" + npm-package-arg "^11.0.0" + semver "^7.3.5" -npm-registry-fetch@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-9.0.0.tgz#86f3feb4ce00313bc0b8f1f8f69daae6face1661" - integrity sha512-PuFYYtnQ8IyVl6ib9d3PepeehcUeHN9IO5N/iCRhyg9tStQcqGQBRVHmfmMWPDERU3KwZoHFvbJ4FPXPspvzbA== +npm-registry-fetch@^14.0.3, npm-registry-fetch@^14.0.5: + version "14.0.5" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz#fe7169957ba4986a4853a650278ee02e568d115d" + integrity sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA== dependencies: - "@npmcli/ci-detect" "^1.0.0" - lru-cache "^6.0.0" - make-fetch-happen "^8.0.9" - minipass "^3.1.3" - minipass-fetch "^1.3.0" + make-fetch-happen "^11.0.0" + minipass "^5.0.0" + minipass-fetch "^3.0.0" minipass-json-stream "^1.0.1" - minizlib "^2.0.0" - npm-package-arg "^8.0.0" + minizlib "^2.1.2" + npm-package-arg "^10.0.0" + proc-log "^3.0.0" + +npm-registry-fetch@^16.0.0: + version "16.1.0" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-16.1.0.tgz#10227b7b36c97bc1cf2902a24e4f710cfe62803c" + integrity sha512-PQCELXKt8Azvxnt5Y85GseQDJJlglTFM9L9U9gkv2y4e9s0k3GVDdOx3YoB6gm2Do0hlkzC39iCGXby+Wve1Bw== + dependencies: + make-fetch-happen "^13.0.0" + minipass "^7.0.2" + minipass-fetch "^3.0.0" + minipass-json-stream "^1.0.1" + minizlib "^2.1.2" + npm-package-arg "^11.0.0" + proc-log "^3.0.0" npm-run-path@^2.0.0: version "2.0.2" @@ -9923,48 +9828,84 @@ npm-run-path@^4.0.0, npm-run-path@^4.0.1: path-key "^3.0.0" npm-run-path@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00" - integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q== + version "5.2.0" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.2.0.tgz#224cdd22c755560253dd71b83a1ef2f758b2e955" + integrity sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg== dependencies: path-key "^4.0.0" -npmlog@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== +npmlog@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" + integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" + are-we-there-yet "^3.0.0" + console-control-strings "^1.1.0" + gauge "^4.0.3" + set-blocking "^2.0.0" nprogress@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/nprogress/-/nprogress-0.2.0.tgz#cb8f34c53213d895723fcbab907e9422adbcafb1" integrity sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA== -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== - -nwsapi@^2.2.0: - version "2.2.7" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30" - integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== - -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== +nx@18.0.4, "nx@>=17.1.2 < 19": + version "18.0.4" + resolved "https://registry.yarnpkg.com/nx/-/nx-18.0.4.tgz#3a77de6b51869449d849dccab7db74b35ec32a6b" + integrity sha512-Njb1fGppOw/wM7nOA1hYlLduV2aL4PdXSv5QS5cVYicHT5tw5RnG/0z4j9e6QfFj2EydxVeDUtlGR98diZ3/Yw== + dependencies: + "@nrwl/tao" "18.0.4" + "@yarnpkg/lockfile" "^1.1.0" + "@yarnpkg/parsers" "3.0.0-rc.46" + "@zkochan/js-yaml" "0.0.6" + axios "^1.6.0" + chalk "^4.1.0" + cli-cursor "3.1.0" + cli-spinners "2.6.1" + cliui "^8.0.1" + dotenv "~16.3.1" + dotenv-expand "~10.0.0" + enquirer "~2.3.6" + figures "3.2.0" + flat "^5.0.2" + fs-extra "^11.1.0" + ignore "^5.0.4" + jest-diff "^29.4.1" + js-yaml "4.1.0" + jsonc-parser "3.2.0" + lines-and-columns "~2.0.3" + minimatch "9.0.3" + node-machine-id "1.1.12" + npm-run-path "^4.0.1" + open "^8.4.0" + ora "5.3.0" + semver "^7.5.3" + string-width "^4.2.3" + strong-log-transformer "^2.1.0" + tar-stream "~2.2.0" + tmp "~0.2.1" + tsconfig-paths "^4.1.2" + tslib "^2.3.0" + yargs "^17.6.2" + yargs-parser "21.1.1" + optionalDependencies: + "@nx/nx-darwin-arm64" "18.0.4" + "@nx/nx-darwin-x64" "18.0.4" + "@nx/nx-freebsd-x64" "18.0.4" + "@nx/nx-linux-arm-gnueabihf" "18.0.4" + "@nx/nx-linux-arm64-gnu" "18.0.4" + "@nx/nx-linux-arm64-musl" "18.0.4" + "@nx/nx-linux-x64-gnu" "18.0.4" + "@nx/nx-linux-x64-musl" "18.0.4" + "@nx/nx-win32-arm64-msvc" "18.0.4" + "@nx/nx-win32-x64-msvc" "18.0.4" oauth@^0.9.15: version "0.9.15" resolved "https://registry.yarnpkg.com/oauth/-/oauth-0.9.15.tgz#bd1fefaf686c96b75475aed5196412ff60cfb9c1" integrity sha512-a5ERWK1kh38ExDEfoO6qUHJb32rd7aYmPHuyCu3Fta/cnICvYmgd2uhuKXvPD+PXB+gCEYYEaQdIRAjCOwAKNA== -object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: +object-assign@^4.0.1, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== @@ -9979,7 +9920,7 @@ object-hash@^3.0.0: resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== -object-inspect@^1.13.1, object-inspect@^1.9.0: +object-inspect@^1.13.1: version "1.13.1" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== @@ -9997,17 +9938,17 @@ object-keys@^1.1.1: resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object.assign@^4.1.4: - version "4.1.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" - integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== +object.assign@^4.1.4, object.assign@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" + integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" + call-bind "^1.0.5" + define-properties "^1.2.1" has-symbols "^1.0.3" object-keys "^1.1.1" -object.entries@^1.1.6: +object.entries@^1.1.6, object.entries@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.7.tgz#2b47760e2a2e3a752f39dd874655c61a7f03c131" integrity sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA== @@ -10025,26 +9966,16 @@ object.fromentries@^2.0.6, object.fromentries@^2.0.7: define-properties "^1.2.0" es-abstract "^1.22.1" -object.getownpropertydescriptors@^2.0.3: - version "2.1.7" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.7.tgz#7a466a356cd7da4ba8b9e94ff6d35c3eeab5d56a" - integrity sha512-PrJz0C2xJ58FNn11XV2lr4Jt5Gzl94qpy9Lu0JlfEj14z88sqbSBJCBEzdlNUCzY2gburhbrwOZ5BHCmuNUy0g== - dependencies: - array.prototype.reduce "^1.0.6" - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - safe-array-concat "^1.0.0" - object.groupby@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.1.tgz#d41d9f3c8d6c778d9cbac86b4ee9f5af103152ee" - integrity sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ== + version "1.0.2" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.2.tgz#494800ff5bab78fd0eff2835ec859066e00192ec" + integrity sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" + array.prototype.filter "^1.0.3" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.0.0" object.hasown@^1.1.2: version "1.1.3" @@ -10089,22 +10020,21 @@ onetime@^6.0.0: dependencies: mimic-fn "^4.0.0" -open@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/open/-/open-9.1.0.tgz#684934359c90ad25742f5a26151970ff8c6c80b6" - integrity sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg== +open@^8.4.0: + version "8.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" + integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== dependencies: - default-browser "^4.0.0" - define-lazy-prop "^3.0.0" - is-inside-container "^1.0.0" + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" is-wsl "^2.2.0" openid-client@^5.4.0: - version "5.6.1" - resolved "https://registry.yarnpkg.com/openid-client/-/openid-client-5.6.1.tgz#8f7526a50c290a5e28a7fe21b3ece3107511bc73" - integrity sha512-PtrWsY+dXg6y8mtMPyL/namZSYVz8pjXz3yJiBNZsEdCnu9miHLB4ELVC85WvneMKo2Rg62Ay7NkuCpM0bgiLQ== + version "5.6.4" + resolved "https://registry.yarnpkg.com/openid-client/-/openid-client-5.6.4.tgz#b2c25e6d5338ba3ce00e04341bb286798a196177" + integrity sha512-T1h3B10BRPKfcObdBklX639tVz+xh34O7GjofqrqiAQdm7eHsQ00ih18x6wuJ/E6FxdtS2u3FmUGPDeEcMwzNA== dependencies: - jose "^4.15.1" + jose "^4.15.4" lru-cache "^6.0.0" object-hash "^2.2.0" oidc-token-hash "^5.0.3" @@ -10121,6 +10051,35 @@ optionator@^0.9.3: prelude-ls "^1.2.1" type-check "^0.4.0" +ora@5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.3.0.tgz#fb832899d3a1372fe71c8b2c534bbfe74961bb6f" + integrity sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g== + dependencies: + bl "^4.0.3" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + log-symbols "^4.0.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + +ora@^5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== + dependencies: + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + os-homedir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" @@ -10131,7 +10090,7 @@ os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== -osenv@^0.1.4, osenv@^0.1.5: +osenv@^0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== @@ -10168,7 +10127,7 @@ p-limit@^2.0.0, p-limit@^2.2.0: dependencies: p-try "^2.0.0" -p-limit@^3.0.2: +p-limit@^3.0.2, p-limit@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== @@ -10203,24 +10162,24 @@ p-locate@^5.0.0: dependencies: p-limit "^3.0.2" -p-map-series@^2.1.0: +p-map-series@2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/p-map-series/-/p-map-series-2.1.0.tgz#7560d4c452d9da0c07e692fdbfe6e2c81a2a91f2" integrity sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q== -p-map@^4.0.0: +p-map@4.0.0, p-map@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== dependencies: aggregate-error "^3.0.0" -p-pipe@^3.1.0: +p-pipe@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/p-pipe/-/p-pipe-3.1.0.tgz#48b57c922aa2e1af6a6404cb7c6bf0eb9cc8e60e" integrity sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw== -p-queue@^6.6.2: +p-queue@6.6.2: version "6.6.2" resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-6.6.2.tgz#2068a9dcf8e67dd0ec3e7a2bcb76810faa85e426" integrity sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ== @@ -10228,7 +10187,7 @@ p-queue@^6.6.2: eventemitter3 "^4.0.4" p-timeout "^3.2.0" -p-reduce@^2.0.0, p-reduce@^2.1.0: +p-reduce@2.1.0, p-reduce@^2.0.0, p-reduce@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-2.1.0.tgz#09408da49507c6c274faa31f28df334bc712b64a" integrity sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw== @@ -10250,7 +10209,7 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -p-waterfall@^2.1.1: +p-waterfall@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/p-waterfall/-/p-waterfall-2.1.1.tgz#63153a774f472ccdc4eb281cdb2967fcf158b2ee" integrity sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw== @@ -10277,30 +10236,29 @@ package-json@^6.3.0: registry-url "^5.0.0" semver "^6.2.0" -pacote@^11.2.6: - version "11.3.5" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-11.3.5.tgz#73cf1fc3772b533f575e39efa96c50be8c3dc9d2" - integrity sha512-fT375Yczn4zi+6Hkk2TBe1x1sP8FgFsEIZ2/iWaXY2r/NkhDJfxbcn5paz1+RTFCyNf+dPnaoBDJoAxXSU8Bkg== - dependencies: - "@npmcli/git" "^2.1.0" - "@npmcli/installed-package-contents" "^1.0.6" - "@npmcli/promise-spawn" "^1.2.0" - "@npmcli/run-script" "^1.8.2" - cacache "^15.0.5" - chownr "^2.0.0" - fs-minipass "^2.1.0" - infer-owner "^1.0.4" - minipass "^3.1.3" - mkdirp "^1.0.3" - npm-package-arg "^8.0.1" - npm-packlist "^2.1.4" - npm-pick-manifest "^6.0.0" - npm-registry-fetch "^11.0.0" +pacote@^17.0.5: + version "17.0.6" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-17.0.6.tgz#874bb59cda5d44ab784d0b6530fcb4a7d9b76a60" + integrity sha512-cJKrW21VRE8vVTRskJo78c/RCvwJCn1f4qgfxL4w77SOWrTCRcmfkYHlHtS0gqpgjv3zhXflRtgsrUCX5xwNnQ== + dependencies: + "@npmcli/git" "^5.0.0" + "@npmcli/installed-package-contents" "^2.0.1" + "@npmcli/promise-spawn" "^7.0.0" + "@npmcli/run-script" "^7.0.0" + cacache "^18.0.0" + fs-minipass "^3.0.0" + minipass "^7.0.2" + npm-package-arg "^11.0.0" + npm-packlist "^8.0.0" + npm-pick-manifest "^9.0.0" + npm-registry-fetch "^16.0.0" + proc-log "^3.0.0" promise-retry "^2.0.1" - read-package-json-fast "^2.0.1" - rimraf "^3.0.2" - ssri "^8.0.1" - tar "^6.1.0" + read-package-json "^7.0.0" + read-package-json-fast "^3.0.0" + sigstore "^2.2.0" + ssri "^10.0.0" + tar "^6.1.11" parent-module@^1.0.0: version "1.0.1" @@ -10364,27 +10322,21 @@ parse-passwd@^1.0.0: resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" integrity sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q== -parse-path@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-4.0.4.tgz#4bf424e6b743fb080831f03b536af9fc43f0ffea" - integrity sha512-Z2lWUis7jlmXC1jeOG9giRO2+FsuyNipeQ43HAjqAZjwSe3SEf+q/84FGPHoso3kyntbxa4c4i77t3m6fGf8cw== +parse-path@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-7.0.0.tgz#605a2d58d0a749c8594405d8cc3a2bf76d16099b" + integrity sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog== dependencies: - is-ssh "^1.3.0" - protocols "^1.4.0" - qs "^6.9.4" - query-string "^6.13.8" + protocols "^2.0.0" -parse-url@^6.0.0: - version "6.0.5" - resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-6.0.5.tgz#4acab8982cef1846a0f8675fa686cef24b2f6f9b" - integrity sha512-e35AeLTSIlkw/5GFq70IN7po8fmDUjpDPY1rIK+VubRfsUvBonjQ+PBZG+vWMACnQSmNlvl524IucoDmcioMxA== +parse-url@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-8.1.0.tgz#972e0827ed4b57fc85f0ea6b0d839f0d8a57a57d" + integrity sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w== dependencies: - is-ssh "^1.3.0" - normalize-url "^6.1.0" - parse-path "^4.0.0" - protocols "^1.4.0" + parse-path "^7.0.0" -parse5@6.0.1, parse5@^6.0.0: +parse5@^6.0.0: version "6.0.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== @@ -10429,6 +10381,14 @@ path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== +path-scurry@^1.10.1, path-scurry@^1.6.1: + version "1.10.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698" + integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== + dependencies: + lru-cache "^9.1.1 || ^10.0.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + path-type@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" @@ -10473,6 +10433,11 @@ pidtree@0.6.0: resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c" integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g== +pify@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-5.0.0.tgz#1f5eca3f5e87ebec28cc6d54a0e4aaf00acc127f" + integrity sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA== + pify@^2.2.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -10488,11 +10453,6 @@ pify@^4.0.1: resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== -pify@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-5.0.0.tgz#1f5eca3f5e87ebec28cc6d54a0e4aaf00acc127f" - integrity sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA== - pirates@^4.0.1, pirates@^4.0.4: version "4.0.6" resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" @@ -10505,6 +10465,11 @@ pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" +possible-typed-array-names@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" + integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== + postcss-import@^15.1.0: version "15.1.0" resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-15.1.0.tgz#41c64ed8cc0e23735a9698b3249ffdbf704adc70" @@ -10522,12 +10487,12 @@ postcss-js@^4.0.1: camelcase-css "^2.0.1" postcss-load-config@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.1.tgz#152383f481c2758274404e4962743191d73875bd" - integrity sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA== + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.2.tgz#7159dcf626118d33e299f485d6afe4aff7c4a3e3" + integrity sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ== dependencies: - lilconfig "^2.0.5" - yaml "^2.1.1" + lilconfig "^3.0.0" + yaml "^2.3.4" postcss-nested@^6.0.1: version "6.0.1" @@ -10545,9 +10510,9 @@ postcss-selector-parser@6.0.10: util-deprecate "^1.0.2" postcss-selector-parser@^6.0.11: - version "6.0.13" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b" - integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ== + version "6.0.15" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz#11cc2b21eebc0b99ea374ffb9887174855a01535" + integrity sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw== dependencies: cssesc "^3.0.0" util-deprecate "^1.0.2" @@ -10566,7 +10531,7 @@ postcss@8.4.14: picocolors "^1.0.0" source-map-js "^1.0.2" -postcss@8.4.31, postcss@^8.4.12, postcss@^8.4.14, postcss@^8.4.19, postcss@^8.4.23, postcss@^8.4.5: +postcss@8.4.31: version "8.4.31" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d" integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== @@ -10575,6 +10540,15 @@ postcss@8.4.31, postcss@^8.4.12, postcss@^8.4.14, postcss@^8.4.19, postcss@^8.4. picocolors "^1.0.0" source-map-js "^1.0.2" +postcss@^8.4.12, postcss@^8.4.14, postcss@^8.4.23, postcss@^8.4.31, postcss@^8.4.5: + version "8.4.35" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.35.tgz#60997775689ce09011edf083a549cea44aabe2f7" + integrity sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA== + dependencies: + nanoid "^3.3.7" + picocolors "^1.0.0" + source-map-js "^1.0.2" + preact-render-to-string@^5.1.19: version "5.2.6" resolved "https://registry.yarnpkg.com/preact-render-to-string/-/preact-render-to-string-5.2.6.tgz#0ff0c86cd118d30affb825193f18e92bd59d0604" @@ -10583,9 +10557,9 @@ preact-render-to-string@^5.1.19: pretty-format "^3.8.0" preact@^10.6.3: - version "10.18.1" - resolved "https://registry.yarnpkg.com/preact/-/preact-10.18.1.tgz#3b84bb305f0b05f4ad5784b981d15fcec4e105da" - integrity sha512-mKUD7RRkQQM6s7Rkmi7IFkoEHjuFqRQUaXamO61E6Nn7vqF/bo7EZCmSyrUnp2UWHw0O7XjZ2eeXis+m7tf4lg== + version "10.19.5" + resolved "https://registry.yarnpkg.com/preact/-/preact-10.19.5.tgz#ed220be0d3273102b5c97dd0163468164064d9f1" + integrity sha512-OPELkDmSVbKjbFqF9tgvOowiiQ9TmsJljIzXRyNE8nGiis94pwv1siF78rQkAP1Q1738Ce6pellRg/Ns/CtHqQ== prebuild-install@^7.1.1: version "7.1.1" @@ -10627,17 +10601,17 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" -prettier@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.0.3.tgz#432a51f7ba422d1469096c0fdc28e235db8f9643" - integrity sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg== +prettier@^3.1.0, prettier@^3.2.5: + version "3.2.5" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368" + integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A== pretty-bytes@^5.6.0: version "5.6.0" resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== -pretty-format@^27.0.0, pretty-format@^27.0.2, pretty-format@^27.5.1: +pretty-format@^27.0.2: version "27.5.1" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== @@ -10646,6 +10620,15 @@ pretty-format@^27.0.0, pretty-format@^27.0.2, pretty-format@^27.5.1: ansi-styles "^5.0.0" react-is "^17.0.1" +pretty-format@^29.0.0, pretty-format@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" + integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== + dependencies: + "@jest/schemas" "^29.6.3" + ansi-styles "^5.0.0" + react-is "^18.0.0" + pretty-format@^3.8.0: version "3.8.0" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-3.8.0.tgz#bfbed56d5e9a776645f4b1ff7aa1a3ac4fa3c385" @@ -10661,6 +10644,11 @@ prismjs@~1.27.0: resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.27.0.tgz#bb6ee3138a0b438a3653dd4d6ce0cc6510a45057" integrity sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA== +proc-log@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-3.0.0.tgz#fb05ef83ccd64fd7b20bbe9c8c1070fc08338dd8" + integrity sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A== + process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" @@ -10687,12 +10675,12 @@ prompts@^2.0.1: kleur "^3.0.3" sisteransi "^1.0.5" -promzard@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" - integrity sha512-JZeYqd7UAcHCwI+sTOeUDYkvEU+1bQ7iE0UT1MgB/tERkAPkesW46MrpIySzODi+owTjZtiF8Ay5j9m60KmMBw== +promzard@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/promzard/-/promzard-1.0.0.tgz#3246f8e6c9895a77c0549cefb65828ac0f6c006b" + integrity sha512-KQVDEubSUHGSt5xLakaToDFrSoZhStB8dXLzk2xvwR67gJktrHFvpR63oZgHyK19WKbHFLXJqCPXdVR3aBP8Ig== dependencies: - read "1" + read "^2.0.0" prop-ini@^0.0.2: version "0.0.2" @@ -10722,17 +10710,7 @@ property-information@^5.0.0, property-information@^5.3.0: dependencies: xtend "^4.0.0" -proto-list@~1.2.1: - version "1.2.4" - resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" - integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== - -protocols@^1.4.0: - version "1.4.8" - resolved "https://registry.yarnpkg.com/protocols/-/protocols-1.4.8.tgz#48eea2d8f58d9644a4a32caae5d5db290a075ce8" - integrity sha512-IgjKyaUSjsROSO8/D49Ab7hP8mJgTYcqApOqdPhLoPxAplXmkp+zRvsrSQjFn5by0rhm4VH0GAUELIPpx7B1yg== - -protocols@^2.0.1: +protocols@^2.0.0, protocols@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/protocols/-/protocols-2.0.1.tgz#8f155da3fc0f32644e83c5782c8e8212ccf70a86" integrity sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q== @@ -10742,6 +10720,11 @@ proxy-from-env@1.0.0: resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee" integrity sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A== +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + ps-tree@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/ps-tree/-/ps-tree-1.2.0.tgz#5e7425b89508736cdd4f2224d028f7bb3f722ebd" @@ -10754,7 +10737,7 @@ pseudomap@^1.0.2: resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ== -psl@^1.1.28, psl@^1.1.33: +psl@^1.1.33: version "1.9.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== @@ -10779,12 +10762,12 @@ pupa@^2.0.1: dependencies: escape-goat "^2.0.0" -q@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== +pure-rand@^6.0.0: + version "6.0.4" + resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.0.4.tgz#50b737f6a925468679bff00ad20eade53f37d5c7" + integrity sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA== -qs@^6.10.0, qs@^6.10.3, qs@^6.11.2, qs@^6.9.4: +qs@^6.10.0, qs@^6.10.3, qs@^6.11.2: version "6.11.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== @@ -10798,21 +10781,6 @@ qs@~6.10.3: dependencies: side-channel "^1.0.4" -qs@~6.5.2: - version "6.5.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" - integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== - -query-string@^6.13.8: - version "6.14.1" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.14.1.tgz#7ac2dca46da7f309449ba0f86b1fd28255b0c86a" - integrity sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw== - dependencies: - decode-uri-component "^0.2.0" - filter-obj "^1.1.0" - split-on-first "^1.0.0" - strict-uri-encode "^2.0.0" - querystringify@^2.1.1: version "2.2.0" resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" @@ -10865,9 +10833,9 @@ react-highlight-words@^0.18.0: prop-types "^15.5.8" react-hook-form@^7.25.3, react-hook-form@^7.8.6: - version "7.47.0" - resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.47.0.tgz#a42f07266bd297ddf1f914f08f4b5f9783262f31" - integrity sha512-F/TroLjTICipmHeFlMrLtNLceO2xr1jU3CyiNla5zdwsGUGu2UOxxR4UyJgLlhMwLW/Wzp4cpJ7CPfgJIeKdSg== + version "7.50.1" + resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.50.1.tgz#f6aeb17a863327e5a0252de8b35b4fc8990377ed" + integrity sha512-3PCY82oE0WgeOgUtIr3nYNNtNvqtJ7BZjsbxh6TnYNbXButaD5WpjOmTjdxZfheuHKR68qfeFnEDVYoSSFPMTQ== react-i18next@^12.1.5: version "12.3.1" @@ -10887,6 +10855,11 @@ react-is@^17.0.1: resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== +react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + react-property@2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/react-property/-/react-property-2.0.2.tgz#d5ac9e244cef564880a610bc8d868bd6f60fdda6" @@ -10914,57 +10887,38 @@ read-cache@^1.0.0: dependencies: pify "^2.3.0" -read-cmd-shim@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-2.0.0.tgz#4a50a71d6f0965364938e9038476f7eede3928d9" - integrity sha512-HJpV9bQpkl6KwjxlJcBoqu9Ba0PQg8TqSNIOrulGt54a0uup0HtevreFHzYzkm0lpnleRdNBzXznKrgxglEHQw== - -read-package-json-fast@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz#323ca529630da82cb34b36cc0b996693c98c2b83" - integrity sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ== - dependencies: - json-parse-even-better-errors "^2.3.0" - npm-normalize-package-bin "^1.0.1" - -read-package-json@^2.0.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.1.2.tgz#6992b2b66c7177259feb8eaac73c3acd28b9222a" - integrity sha512-D1KmuLQr6ZSJS0tW8hf3WGpRlwszJOXZ3E8Yd/DNRaM5d+1wVRZdHlpGBLAuovjr28LbWvjpWkBHMxpRGGjzNA== - dependencies: - glob "^7.1.1" - json-parse-even-better-errors "^2.3.0" - normalize-package-data "^2.0.0" - npm-normalize-package-bin "^1.0.0" +read-cmd-shim@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz#640a08b473a49043e394ae0c7a34dd822c73b9bb" + integrity sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q== -read-package-json@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-3.0.1.tgz#c7108f0b9390257b08c21e3004d2404c806744b9" - integrity sha512-aLcPqxovhJTVJcsnROuuzQvv6oziQx4zd3JvG0vGCL5MjTONUc4uJ90zCBC6R7W7oUKBNoR/F8pkyfVwlbxqng== +read-package-json-fast@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz#394908a9725dc7a5f14e70c8e7556dff1d2b1049" + integrity sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw== dependencies: - glob "^7.1.1" - json-parse-even-better-errors "^2.3.0" - normalize-package-data "^3.0.0" - npm-normalize-package-bin "^1.0.0" + json-parse-even-better-errors "^3.0.0" + npm-normalize-package-bin "^3.0.0" -read-package-json@^4.1.1: - version "4.1.2" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-4.1.2.tgz#b444d047de7c75d4a160cb056d00c0693c1df703" - integrity sha512-Dqer4pqzamDE2O4M55xp1qZMuLPqi4ldk2ya648FOMHRjwMzFhuxVrG04wd0c38IsvkVdr3vgHI6z+QTPdAjrQ== +read-package-json@6.0.4, read-package-json@^6.0.0: + version "6.0.4" + resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-6.0.4.tgz#90318824ec456c287437ea79595f4c2854708836" + integrity sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw== dependencies: - glob "^7.1.1" - json-parse-even-better-errors "^2.3.0" - normalize-package-data "^3.0.0" - npm-normalize-package-bin "^1.0.0" + glob "^10.2.2" + json-parse-even-better-errors "^3.0.0" + normalize-package-data "^5.0.0" + npm-normalize-package-bin "^3.0.0" -read-package-tree@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/read-package-tree/-/read-package-tree-5.3.1.tgz#a32cb64c7f31eb8a6f31ef06f9cedf74068fe636" - integrity sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw== +read-package-json@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-7.0.0.tgz#d605c9dcf6bc5856da24204aa4e9518ee9714be0" + integrity sha512-uL4Z10OKV4p6vbdvIXB+OzhInYtIozl/VxUBPgNkBuUi2DeRonnuspmaVAMcrkmfjKGNmRndyQAbE7/AmzGwFg== dependencies: - read-package-json "^2.0.0" - readdir-scoped-modules "^1.0.0" - util-promisify "^2.1.0" + glob "^10.2.2" + json-parse-even-better-errors "^3.0.0" + normalize-package-data "^6.0.0" + npm-normalize-package-bin "^3.0.0" read-pkg-up@^3.0.0: version "3.0.0" @@ -11002,14 +10956,14 @@ read-pkg@^5.2.0: parse-json "^5.0.0" type-fest "^0.6.0" -read@1, read@~1.0.1: - version "1.0.7" - resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" - integrity sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ== +read@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/read/-/read-2.1.0.tgz#69409372c54fe3381092bc363a00650b6ac37218" + integrity sha512-bvxi1QLJHcaywCAEsAk4DG3nVoqiY2Csps3qzWalhj5hFqRn1d/OixkFXtLO1PrgHUcAP0FNaSY/5GYNfENFFQ== dependencies: - mute-stream "~0.0.4" + mute-stream "~1.0.0" -readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0: +readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.2" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== @@ -11018,7 +10972,7 @@ readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stre string_decoder "^1.1.1" util-deprecate "^1.0.1" -readable-stream@^2.0.6, readable-stream@~2.3.6: +readable-stream@~2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== @@ -11031,16 +10985,6 @@ readable-stream@^2.0.6, readable-stream@~2.3.6: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readdir-scoped-modules@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" - integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== - dependencies: - debuglog "^1.0.1" - dezalgo "^1.0.0" - graceful-fs "^4.1.2" - once "^1.3.0" - readdirp@~3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" @@ -11076,14 +11020,15 @@ redis-parser@^3.0.0: redis-errors "^1.0.0" reflect.getprototypeof@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz#aaccbf41aca3821b87bb71d9dcbc7ad0ba50a3f3" - integrity sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw== + version "1.0.5" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.5.tgz#e0bd28b597518f16edaf9c0e292c631eb13e0674" + integrity sha512-62wgfC8dJWrmxv44CA36pLDnP6KKl3Vhxb7PL+8+qrrFMMoJij4vgiMP8zV4O8+CBMXY1mHxI5fITGHXFHVmQQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.0.0" + get-intrinsic "^1.2.3" globalthis "^1.0.3" which-builtin-type "^1.1.3" @@ -11109,9 +11054,9 @@ regenerate@^1.4.2: integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== regenerator-runtime@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" - integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== regenerator-transform@^0.15.2: version "0.15.2" @@ -11120,14 +11065,15 @@ regenerator-transform@^0.15.2: dependencies: "@babel/runtime" "^7.8.4" -regexp.prototype.flags@^1.5.0, regexp.prototype.flags@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e" - integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== +regexp.prototype.flags@^1.5.0, regexp.prototype.flags@^1.5.1, regexp.prototype.flags@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" + integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - set-function-name "^2.0.0" + call-bind "^1.0.6" + define-properties "^1.2.1" + es-errors "^1.3.0" + set-function-name "^2.0.1" regexpu-core@^5.3.1: version "5.3.2" @@ -11293,32 +11239,6 @@ request-progress@^3.0.0: dependencies: throttleit "^1.0.0" -request@^2.88.0, request@^2.88.2: - version "2.88.2" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" - integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -11368,10 +11288,10 @@ resolve-pkg-maps@^1.0.0: resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== -resolve.exports@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.1.tgz#05cfd5b3edf641571fd46fa608b610dda9ead999" - integrity sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ== +resolve.exports@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" + integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== resolve@^1.1.7, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.20.0, resolve@^1.22.0, resolve@^1.22.2, resolve@^1.22.4, resolve@^1.3.2: version "1.22.8" @@ -11425,11 +11345,11 @@ reusify@^1.0.4: integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== rfdc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" - integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== + version "1.3.1" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.1.tgz#2b6d4df52dffe8bb346992a10ea9451f24373a8f" + integrity sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg== -rimraf@^2.6.2, rimraf@^2.6.3: +rimraf@^2.6.2: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== @@ -11443,31 +11363,34 @@ rimraf@^3.0.0, rimraf@^3.0.2: dependencies: glob "^7.1.3" -rollup@^4.0.2: +rimraf@^4.4.1: version "4.4.1" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.4.1.tgz#2f85169f23d13dabb3d9b846d753965757353820" - integrity sha512-idZzrUpWSblPJX66i+GzrpjKE3vbYrlWirUHteoAbjKReZwa0cohAErOYA5efoMmNCdvG9yrJS+w9Kl6csaH4w== - optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.4.1" - "@rollup/rollup-android-arm64" "4.4.1" - "@rollup/rollup-darwin-arm64" "4.4.1" - "@rollup/rollup-darwin-x64" "4.4.1" - "@rollup/rollup-linux-arm-gnueabihf" "4.4.1" - "@rollup/rollup-linux-arm64-gnu" "4.4.1" - "@rollup/rollup-linux-arm64-musl" "4.4.1" - "@rollup/rollup-linux-x64-gnu" "4.4.1" - "@rollup/rollup-linux-x64-musl" "4.4.1" - "@rollup/rollup-win32-arm64-msvc" "4.4.1" - "@rollup/rollup-win32-ia32-msvc" "4.4.1" - "@rollup/rollup-win32-x64-msvc" "4.4.1" - fsevents "~2.3.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-4.4.1.tgz#bd33364f67021c5b79e93d7f4fa0568c7c21b755" + integrity sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og== + dependencies: + glob "^9.2.0" -run-applescript@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-5.0.0.tgz#e11e1c932e055d5c6b40d98374e0268d9b11899c" - integrity sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg== +rollup@^4.0.2: + version "4.12.0" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.12.0.tgz#0b6d1e5f3d46bbcf244deec41a7421dc54cc45b5" + integrity sha512-wz66wn4t1OHIJw3+XU7mJJQV/2NAfw5OAk6G6Hoo3zcvz/XOfQ52Vgi+AN4Uxoxi0KBBwk2g8zPrTDA4btSB/Q== dependencies: - execa "^5.0.0" + "@types/estree" "1.0.5" + optionalDependencies: + "@rollup/rollup-android-arm-eabi" "4.12.0" + "@rollup/rollup-android-arm64" "4.12.0" + "@rollup/rollup-darwin-arm64" "4.12.0" + "@rollup/rollup-darwin-x64" "4.12.0" + "@rollup/rollup-linux-arm-gnueabihf" "4.12.0" + "@rollup/rollup-linux-arm64-gnu" "4.12.0" + "@rollup/rollup-linux-arm64-musl" "4.12.0" + "@rollup/rollup-linux-riscv64-gnu" "4.12.0" + "@rollup/rollup-linux-x64-gnu" "4.12.0" + "@rollup/rollup-linux-x64-musl" "4.12.0" + "@rollup/rollup-win32-arm64-msvc" "4.12.0" + "@rollup/rollup-win32-ia32-msvc" "4.12.0" + "@rollup/rollup-win32-x64-msvc" "4.12.0" + fsevents "~2.3.2" run-async@^2.4.0: version "2.4.1" @@ -11488,24 +11411,24 @@ rxjs@^6.6.0: dependencies: tslib "^1.9.0" -rxjs@^7.5.1, rxjs@^7.8.0: +rxjs@^7.5.1, rxjs@^7.5.5, rxjs@^7.8.0: version "7.8.1" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== dependencies: tslib "^2.1.0" -safe-array-concat@^1.0.0, safe-array-concat@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c" - integrity sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q== +safe-array-concat@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.0.tgz#8d0cae9cb806d6d1c06e08ab13d847293ebe0692" + integrity sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" + call-bind "^1.0.5" + get-intrinsic "^1.2.2" has-symbols "^1.0.3" isarray "^2.0.5" -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@^5.2.1, safe-buffer@~5.2.0: +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -11515,13 +11438,13 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-regex-test@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" - integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== +safe-regex-test@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" + integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" + call-bind "^1.0.6" + es-errors "^1.3.0" is-regex "^1.1.4" "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: @@ -11529,13 +11452,6 @@ safe-regex-test@^1.0.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -saxes@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" - integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== - dependencies: - xmlchars "^2.2.0" - scheduler@^0.20.2: version "0.20.2" resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" @@ -11578,15 +11494,15 @@ semver-utils@^1.1.4: resolved "https://registry.yarnpkg.com/semver-utils/-/semver-utils-1.1.4.tgz#cf0405e669a57488913909fc1c3f29bf2a4871e2" integrity sha512-EjnoLE5OGmDAVV/8YDoN5KiajNadjzIp9BAHOhYeQHt7j0UWxjmgsx4YD48wp4Ue1Qogq38F1GNUJNqF1kKKxA== -"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.4.1, semver@^5.6.0, semver@^5.7.1: +"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.4.1, semver@^5.6.0: version "5.7.2" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== -semver@7.5.4, semver@7.x, semver@^7.1.1, semver@^7.1.3, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4: - version "7.5.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== +semver@7.6.0, semver@^7.0.0, semver@^7.1.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4: + version "7.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" + integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== dependencies: lru-cache "^6.0.0" @@ -11595,29 +11511,32 @@ semver@^6.0.0, semver@^6.2.0, semver@^6.3.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -set-blocking@^2.0.0, set-blocking@~2.0.0: +set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== -set-function-length@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed" - integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== +set-function-length@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.1.tgz#47cc5945f2c771e2cf261c6737cf9684a2a5e425" + integrity sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g== dependencies: - define-data-property "^1.1.1" - get-intrinsic "^1.2.1" + define-data-property "^1.1.2" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.3" gopd "^1.0.1" - has-property-descriptors "^1.0.0" + has-property-descriptors "^1.0.1" set-function-name@^2.0.0, set-function-name@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" - integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== + version "2.0.2" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" + integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== dependencies: - define-data-property "^1.0.1" + define-data-property "^1.1.4" + es-errors "^1.3.0" functions-have-names "^1.2.3" - has-property-descriptors "^1.0.0" + has-property-descriptors "^1.0.2" shallow-clone@^3.0.0: version "3.0.1" @@ -11640,20 +11559,6 @@ sharp@^0.30.4, sharp@^0.30.7: tar-fs "^2.1.1" tunnel-agent "^0.6.0" -sharp@^0.31.2: - version "0.31.3" - resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.31.3.tgz#60227edc5c2be90e7378a210466c99aefcf32688" - integrity sha512-XcR4+FCLBFKw1bdB+GEhnUNXNXvnt0tDo4WsBsraKymuo/IAuPuCBVAL2wIkUw2r/dwFW5Q5+g66Kwl2dgDFVg== - dependencies: - color "^4.2.3" - detect-libc "^2.0.1" - node-addon-api "^5.0.0" - prebuild-install "^7.1.1" - semver "^7.3.8" - simple-get "^4.0.1" - tar-fs "^2.1.1" - tunnel-agent "^0.6.0" - shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -11688,29 +11593,53 @@ shiki@^0.11.1: vscode-textmate "^6.0.0" side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + version "1.0.5" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.5.tgz#9a84546599b48909fb6af1211708d23b1946221b" + integrity sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ== dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" + call-bind "^1.0.6" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + object-inspect "^1.13.1" sigmund@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" integrity sha512-fCvEXfh6NWpm+YSuY2bpXb/VIihqWA6hLsgboC+0nl71Q7N7o2eaCW8mJa/NLvQhs6jpd3VZV4UiUQlV6+lc8g== -signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: +signal-exit@3.0.7, signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== -signal-exit@^4.1.0: +signal-exit@^4.0.1, signal-exit@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== +sigstore@^1.4.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/sigstore/-/sigstore-1.9.0.tgz#1e7ad8933aa99b75c6898ddd0eeebc3eb0d59875" + integrity sha512-0Zjz0oe37d08VeOtBIuB6cRriqXse2e8w+7yIy2XSXjshRKxbc2KkhXjL229jXSxEm7UbcjS76wcJDGQddVI9A== + dependencies: + "@sigstore/bundle" "^1.1.0" + "@sigstore/protobuf-specs" "^0.2.0" + "@sigstore/sign" "^1.0.0" + "@sigstore/tuf" "^1.0.3" + make-fetch-happen "^11.0.1" + +sigstore@^2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/sigstore/-/sigstore-2.2.2.tgz#5e4ff39febeae9e0679bafa22180cb0f445a7e35" + integrity sha512-2A3WvXkQurhuMgORgT60r6pOWiCOO5LlEqY2ADxGBDGVYLSo5HN0uLtb68YpVpuL/Vi8mLTe7+0Dx2Fq8lLqEg== + dependencies: + "@sigstore/bundle" "^2.2.0" + "@sigstore/core" "^1.0.0" + "@sigstore/protobuf-specs" "^0.3.0" + "@sigstore/sign" "^2.2.3" + "@sigstore/tuf" "^2.3.1" + "@sigstore/verify" "^1.1.0" + simple-concat@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" @@ -11737,7 +11666,7 @@ sisteransi@^1.0.5: resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== -slash@^3.0.0: +slash@3.0.0, slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== @@ -11768,10 +11697,13 @@ slice-ansi@^5.0.0: ansi-styles "^6.0.0" is-fullwidth-code-point "^4.0.0" -slide@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" - integrity sha512-NwrtjCg+lZoqhFU8fOwl4ay2ei8PaqCBOUV3/ektPY9trO1yQ1oXEfmHAhKArUVUr/hOHvy5f6AdP17dCM0zMw== +slice-ansi@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-7.1.0.tgz#cd6b4655e298a8d1bdeb04250a433094b347b9a9" + integrity sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg== + dependencies: + ansi-styles "^6.2.1" + is-fullwidth-code-point "^5.0.0" smart-buffer@^4.2.0: version "4.2.0" @@ -11785,30 +11717,30 @@ smpltmpl@^1.0.2: dependencies: babel-code-frame "^6.26.0" -socks-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz#032fb583048a29ebffec2e6a73fca0761f48177e" - integrity sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ== - dependencies: - agent-base "^6.0.2" - debug "4" - socks "^2.3.3" - -socks-proxy-agent@^6.0.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz#2687a31f9d7185e38d530bef1944fe1f1496d6ce" - integrity sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ== +socks-proxy-agent@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz#dc069ecf34436621acb41e3efa66ca1b5fed15b6" + integrity sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww== dependencies: agent-base "^6.0.2" debug "^4.3.3" socks "^2.6.2" -socks@^2.3.3, socks@^2.6.2: - version "2.7.1" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" - integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== +socks-proxy-agent@^8.0.1: + version "8.0.2" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz#5acbd7be7baf18c46a3f293a840109a430a640ad" + integrity sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g== + dependencies: + agent-base "^7.0.2" + debug "^4.3.4" + socks "^2.7.1" + +socks@^2.6.2, socks@^2.7.1: + version "2.7.3" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.3.tgz#7d8a75d7ce845c0a96f710917174dba0d543a785" + integrity sha512-vfuYK48HXCTFD03G/1/zkIls3Ebr2YNa4qU9gHDZdblHLiqhJrJGkY3+0Nx0JpN9qBhJbVObc1CNciT1bIZJxw== dependencies: - ip "^2.0.0" + ip-address "^9.0.5" smart-buffer "^4.2.0" sort-keys@^2.0.0: @@ -11818,22 +11750,15 @@ sort-keys@^2.0.0: dependencies: is-plain-obj "^1.0.0" -sort-keys@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-4.2.0.tgz#6b7638cee42c506fff8c1cecde7376d21315be18" - integrity sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg== - dependencies: - is-plain-obj "^2.0.0" - source-map-js@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== -source-map-support@^0.5.6: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== +source-map-support@0.5.13: + version "0.5.13" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" @@ -11850,16 +11775,11 @@ source-map@^0.5.0: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: +source-map@^0.6.0, source-map@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@^0.7.3: - version "0.7.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" - integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== - space-separated-tokens@^1.0.0: version "1.1.5" resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz#85f32c3d10d9682007e917414ddc5c26d1aa6899" @@ -11874,9 +11794,9 @@ spdx-correct@^3.0.0: spdx-license-ids "^3.0.0" spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + version "2.5.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66" + integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== spdx-expression-parse@^3.0.0: version "3.0.1" @@ -11887,20 +11807,15 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.16" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz#a14f64e0954f6e25cc6587bd4f392522db0d998f" - integrity sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw== + version "3.0.17" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz#887da8aa73218e51a1d917502d79863161a93f9c" + integrity sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg== split-lines@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/split-lines/-/split-lines-2.1.0.tgz#3bc9dbf75637c8bae6ed5dcbc7dbd83956b72311" integrity sha512-8dv+1zKgTpfTkOy8XZLFyWrfxO0NV/bj/3EaQ+hBrBxGv2DwiroljPjU8NlCr+59nLnsVm9WYT7lXKwe4TC6bw== -split-on-first@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" - integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw== - split2@^3.0.0, split2@^3.2.2: version "3.2.2" resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" @@ -11908,6 +11823,11 @@ split2@^3.0.0, split2@^3.2.2: dependencies: readable-stream "^3.0.0" +split2@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" + integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== + split@0.3: version "0.3.3" resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f" @@ -11915,19 +11835,24 @@ split@0.3: dependencies: through "2" -split@^1.0.0: +split@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== dependencies: through "2" +sprintf-js@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" + integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== -sshpk@^1.14.1, sshpk@^1.7.0: +sshpk@^1.14.1: version "1.18.0" resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.18.0.tgz#1663e55cddf4d688b86a46b77f0d5fe363aba028" integrity sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ== @@ -11942,10 +11867,17 @@ sshpk@^1.14.1, sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" -ssri@^8.0.0, ssri@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" - integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== +ssri@^10.0.0, ssri@^10.0.1: + version "10.0.5" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.5.tgz#e49efcd6e36385196cb515d3a2ad6c3f0265ef8c" + integrity sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A== + dependencies: + minipass "^7.0.3" + +ssri@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-9.0.1.tgz#544d4c357a8d7b71a19700074b6883fcb4eae057" + integrity sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q== dependencies: minipass "^3.1.1" @@ -11999,11 +11931,6 @@ streamsearch@^1.1.0: resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== -strict-uri-encode@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" - integrity sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ== - string-argv@0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6" @@ -12017,16 +11944,7 @@ string-length@^4.0.1: char-regex "^1.0.2" strip-ansi "^6.0.0" -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw== - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -12052,7 +11970,7 @@ string-width@^3.0.0, string-width@^3.1.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" -string-width@^5.0.0, string-width@^5.0.1: +string-width@^5.0.1, string-width@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== @@ -12061,6 +11979,15 @@ string-width@^5.0.0, string-width@^5.0.1: emoji-regex "^9.2.2" strip-ansi "^7.0.1" +string-width@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-7.1.0.tgz#d994252935224729ea3719c49f7206dc9c46550a" + integrity sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw== + dependencies: + emoji-regex "^10.3.0" + get-east-asian-width "^1.0.0" + strip-ansi "^7.1.0" + string.prototype.matchall@^4.0.8: version "4.0.10" resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz#a1553eb532221d4180c51581d6072cd65d1ee100" @@ -12117,7 +12044,14 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -strip-ansi@^3.0.0, strip-ansi@^3.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== @@ -12138,14 +12072,7 @@ strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: dependencies: ansi-regex "^4.1.0" -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^7.0.1: +strip-ansi@^7.0.1, strip-ansi@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== @@ -12199,7 +12126,7 @@ strip-json-comments@~2.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== -strong-log-transformer@^2.1.0: +strong-log-transformer@2.1.0, strong-log-transformer@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz#0f5ed78d325e0421ac6f90f7f10e691d6ae3ae10" integrity sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA== @@ -12242,13 +12169,13 @@ styled-jsx@5.1.1: client-only "0.0.1" sucrase@^3.20.3, sucrase@^3.32.0: - version "3.34.0" - resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.34.0.tgz#1e0e2d8fcf07f8b9c3569067d92fbd8690fb576f" - integrity sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw== + version "3.35.0" + resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.35.0.tgz#57f17a3d7e19b36d8995f06679d121be914ae263" + integrity sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA== dependencies: "@jridgewell/gen-mapping" "^0.3.2" commander "^4.0.0" - glob "7.1.6" + glob "^10.3.10" lines-and-columns "^1.1.6" mz "^2.7.0" pirates "^4.0.1" @@ -12266,7 +12193,7 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -supports-color@^7.0.0, supports-color@^7.1.0: +supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== @@ -12280,14 +12207,6 @@ supports-color@^8.0.0, supports-color@^8.1.1: dependencies: has-flag "^4.0.0" -supports-hyperlinks@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" - integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== - dependencies: - has-flag "^4.0.0" - supports-color "^7.0.0" - supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" @@ -12298,23 +12217,18 @@ swr@^1.3.0: resolved "https://registry.yarnpkg.com/swr/-/swr-1.3.0.tgz#c6531866a35b4db37b38b72c45a63171faf9f4e8" integrity sha512-dkghQrOl2ORX9HYrMDtPa7LTVHJjCTeZoB1dqTbnnEDlSvN8JEKpYIYurDfvbQFUUS8Cg8PceFVZNkW0KNNYPw== -symbol-tree@^3.2.4: - version "3.2.4" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" - integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== - -synckit@^0.8.5: - version "0.8.5" - resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.5.tgz#b7f4358f9bb559437f9f167eb6bc46b3c9818fa3" - integrity sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q== +synckit@^0.8.6: + version "0.8.8" + resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.8.tgz#fe7fe446518e3d3d49f5e429f443cf08b6edfcd7" + integrity sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ== dependencies: - "@pkgr/utils" "^2.3.1" - tslib "^2.5.0" + "@pkgr/core" "^0.1.0" + tslib "^2.6.2" -tailwindcss@^3.0.15, tailwindcss@^3.0.23, tailwindcss@^3.0.24, tailwindcss@^3.2.4: - version "3.3.5" - resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.3.5.tgz#22a59e2fbe0ecb6660809d9cc5f3976b077be3b8" - integrity sha512-5SEZU4J7pxZgSkv7FP1zY8i2TIAOooNZ1e/OGtxIEv6GltpoiXUqWvLy89+a10qYTB1N5Ifkuw9lqQkN9sscvA== +tailwindcss@^3.0.15, tailwindcss@^3.0.23, tailwindcss@^3.0.24, tailwindcss@^3.3.5: + version "3.4.1" + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.1.tgz#f512ca5d1dd4c9503c7d3d28a968f1ad8f5c839d" + integrity sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA== dependencies: "@alloc/quick-lru" "^5.2.0" arg "^5.0.2" @@ -12354,7 +12268,7 @@ tar-fs@^2.0.0, tar-fs@^2.1.1: pump "^3.0.0" tar-stream "^2.1.4" -tar-stream@^2.1.4: +tar-stream@^2.1.4, tar-stream@~2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== @@ -12365,20 +12279,19 @@ tar-stream@^2.1.4: inherits "^2.0.3" readable-stream "^3.1.1" -tar@^4.4.12: - version "4.4.19" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.19.tgz#2e4d7263df26f2b914dee10c825ab132123742f3" - integrity sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA== +tar@6.1.11: + version "6.1.11" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" + integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== dependencies: - chownr "^1.1.4" - fs-minipass "^1.2.7" - minipass "^2.9.0" - minizlib "^1.3.3" - mkdirp "^0.5.5" - safe-buffer "^5.2.1" - yallist "^3.1.1" + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^3.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" -tar@^6.0.2, tar@^6.1.0: +tar@^6.1.11, tar@^6.1.2: version "6.2.0" resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.0.tgz#b14ce49a79cb1cd23bc9b016302dea5474493f73" integrity sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ== @@ -12390,22 +12303,11 @@ tar@^6.0.2, tar@^6.1.0: mkdirp "^1.0.3" yallist "^4.0.0" -temp-dir@^1.0.0: +temp-dir@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" integrity sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ== -temp-write@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/temp-write/-/temp-write-4.0.0.tgz#cd2e0825fc826ae72d201dc26eef3bf7e6fc9320" - integrity sha512-HIeWmj77uOOHb0QX7siN3OtwV3CTntquin6TNVg6SHOqCP3hYKmox90eeFOGaY1MqJ9WYDDjkyZrW6qS5AWpbw== - dependencies: - graceful-fs "^4.1.15" - is-stream "^2.0.0" - make-dir "^3.0.0" - temp-dir "^1.0.0" - uuid "^3.3.2" - term-size@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" @@ -12418,14 +12320,6 @@ term-size@^2.1.0: resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54" integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg== -terminal-link@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" - integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== - dependencies: - ansi-escapes "^4.2.1" - supports-hyperlinks "^2.0.0" - test-exclude@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" @@ -12440,6 +12334,11 @@ text-extensions@^1.0.0: resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== +text-extensions@^2.0.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-2.4.0.tgz#a1cfcc50cf34da41bfd047cc744f804d1680ea34" + integrity sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g== + text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" @@ -12459,15 +12358,10 @@ thenify-all@^1.0.0: dependencies: any-promise "^1.0.0" -throat@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.2.tgz#51a3fbb5e11ae72e2cf74861ed5c8020f89f29fe" - integrity sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ== - throttleit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c" - integrity sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g== + version "1.0.1" + resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.1.tgz#304ec51631c3b770c65c6c6f76938b384000f4d5" + integrity sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ== through2@^2.0.0: version "2.0.5" @@ -12494,11 +12388,6 @@ timed-out@^4.0.0: resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" integrity sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA== -titleize@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/titleize/-/titleize-3.0.0.tgz#71c12eb7fdd2558aa8a44b0be83b8a76694acd53" - integrity sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ== - tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -12545,7 +12434,7 @@ toposort@^2.0.2: resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330" integrity sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg== -tough-cookie@^4.0.0, tough-cookie@^4.1.3: +tough-cookie@^4.1.3: version "4.1.3" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== @@ -12555,14 +12444,6 @@ tough-cookie@^4.0.0, tough-cookie@^4.1.3: universalify "^0.2.0" url-parse "^1.5.3" -tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== - dependencies: - psl "^1.1.28" - punycode "^2.1.1" - tr46@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" @@ -12570,13 +12451,6 @@ tr46@^1.0.1: dependencies: punycode "^2.1.0" -tr46@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" - integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== - dependencies: - punycode "^2.1.1" - tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" @@ -12608,33 +12482,33 @@ trough@^1.0.0: integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA== ts-api-utils@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.0.3.tgz#f12c1c781d04427313dbac808f453f050e54a331" - integrity sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg== + version "1.2.1" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.2.1.tgz#f716c7e027494629485b21c0df6180f4d08f5e8b" + integrity sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA== ts-interface-checker@^0.1.9: version "0.1.13" resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== -ts-jest@^27.1.5: - version "27.1.5" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-27.1.5.tgz#0ddf1b163fbaae3d5b7504a1e65c914a95cff297" - integrity sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA== +ts-jest@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.1.2.tgz#7613d8c81c43c8cb312c6904027257e814c40e09" + integrity sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g== dependencies: bs-logger "0.x" fast-json-stable-stringify "2.x" - jest-util "^27.0.0" - json5 "2.x" + jest-util "^29.0.0" + json5 "^2.2.3" lodash.memoize "4.x" make-error "1.x" - semver "7.x" - yargs-parser "20.x" + semver "^7.5.3" + yargs-parser "^21.0.1" -ts-node@^10.8.1, ts-node@^10.9.1: - version "10.9.1" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" - integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== +ts-node@^10.9.2: + version "10.9.2" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" + integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== dependencies: "@cspotcode/source-map-support" "^0.8.0" "@tsconfig/node10" "^1.0.7" @@ -12650,30 +12524,39 @@ ts-node@^10.8.1, ts-node@^10.9.1: v8-compile-cache-lib "^3.0.1" yn "3.1.1" -tsconfig-paths@^3.14.1, tsconfig-paths@^3.14.2: - version "3.14.2" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088" - integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== +tsconfig-paths@^3.14.1, tsconfig-paths@^3.15.0: + version "3.15.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" + integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== dependencies: "@types/json5" "^0.0.29" json5 "^1.0.2" minimist "^1.2.6" strip-bom "^3.0.0" +tsconfig-paths@^4.1.2: + version "4.2.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz#ef78e19039133446d244beac0fd6a1632e2d107c" + integrity sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg== + dependencies: + json5 "^2.2.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + tslib@^1.8.1, tslib@^1.9.0: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.1.0, tslib@^2.4.0, tslib@^2.4.1, tslib@^2.5.0, tslib@^2.6.0: +tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.0, tslib@^2.4.1, tslib@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== -tsup@^7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/tsup/-/tsup-7.3.0.tgz#c7776e08c7ef55ed69def2c6e7ba4719005f5abd" - integrity sha512-Ja1eaSRrE+QarmATlNO5fse2aOACYMBX+IZRKy1T+gpyH+jXgRrl5l4nHIQJQ1DoDgEjHDTw8cpE085UdBZuWQ== +tsup@^8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/tsup/-/tsup-8.0.2.tgz#c63192a08386515103e2c44ac5a23bdff75c5fa1" + integrity sha512-NY8xtQXdH7hDUAZwcQdY/Vzlw9johQsaqf7iwZ6g1DOUlFYQ5/AtVAjTvihhEyeRlGo4dLRVHtrRaL35M1daqQ== dependencies: bundle-require "^4.0.0" cac "^6.7.12" @@ -12697,6 +12580,24 @@ tsutils@^3.21.0: dependencies: tslib "^1.8.1" +tuf-js@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/tuf-js/-/tuf-js-1.1.7.tgz#21b7ae92a9373015be77dfe0cb282a80ec3bbe43" + integrity sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg== + dependencies: + "@tufjs/models" "1.0.4" + debug "^4.3.4" + make-fetch-happen "^11.1.1" + +tuf-js@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tuf-js/-/tuf-js-2.2.0.tgz#4daaa8620ba7545501d04dfa933c98abbcc959b9" + integrity sha512-ZSDngmP1z6zw+FIkIBjvOp/II/mIub/O7Pp12j1WNsiCpg5R5wAc//i555bBQsE44O94btLt0xM/Zr2LQjwdCg== + dependencies: + "@tufjs/models" "2.0.0" + debug "^4.3.4" + make-fetch-happen "^13.0.0" + tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -12709,47 +12610,47 @@ tunnel@^0.0.6: resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.6.tgz#72f1314b34a5b192db012324df2cc587ca47f92c" integrity sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg== -turbo-darwin-64@1.10.16: - version "1.10.16" - resolved "https://registry.yarnpkg.com/turbo-darwin-64/-/turbo-darwin-64-1.10.16.tgz#5a8717c1372f2a75e8cfe0b4b6455119ce410b19" - integrity sha512-+Jk91FNcp9e9NCLYlvDDlp2HwEDp14F9N42IoW3dmHI5ZkGSXzalbhVcrx3DOox3QfiNUHxzWg4d7CnVNCuuMg== - -turbo-darwin-arm64@1.10.16: - version "1.10.16" - resolved "https://registry.yarnpkg.com/turbo-darwin-arm64/-/turbo-darwin-arm64-1.10.16.tgz#19b5b63acf7ee0fce7e1fe5850e093c2ac9c73f5" - integrity sha512-jqGpFZipIivkRp/i+jnL8npX0VssE6IAVNKtu573LXtssZdV/S+fRGYA16tI46xJGxSAivrZ/IcgZrV6Jk80bw== - -turbo-linux-64@1.10.16: - version "1.10.16" - resolved "https://registry.yarnpkg.com/turbo-linux-64/-/turbo-linux-64-1.10.16.tgz#ee97c0011553a96bd7995e7bcc6e65aab8996798" - integrity sha512-PpqEZHwLoizQ6sTUvmImcRmACyRk9EWLXGlqceogPZsJ1jTRK3sfcF9fC2W56zkSIzuLEP07k5kl+ZxJd8JMcg== - -turbo-linux-arm64@1.10.16: - version "1.10.16" - resolved "https://registry.yarnpkg.com/turbo-linux-arm64/-/turbo-linux-arm64-1.10.16.tgz#2723cc2a846d89df7484002161b25673f4f04009" - integrity sha512-TMjFYz8to1QE0fKVXCIvG/4giyfnmqcQIwjdNfJvKjBxn22PpbjeuFuQ5kNXshUTRaTJihFbuuCcb5OYFNx4uw== - -turbo-windows-64@1.10.16: - version "1.10.16" - resolved "https://registry.yarnpkg.com/turbo-windows-64/-/turbo-windows-64-1.10.16.tgz#87c46a78502a86dec73634b255a6b3471285969b" - integrity sha512-+jsf68krs0N66FfC4/zZvioUap/Tq3sPFumnMV+EBo8jFdqs4yehd6+MxIwYTjSQLIcpH8KoNMB0gQYhJRLZzw== - -turbo-windows-arm64@1.10.16: - version "1.10.16" - resolved "https://registry.yarnpkg.com/turbo-windows-arm64/-/turbo-windows-arm64-1.10.16.tgz#a6208c2bc27e5e6ef0aa4a3e64389c4285c3f274" - integrity sha512-sKm3hcMM1bl0B3PLG4ifidicOGfoJmOEacM5JtgBkYM48ncMHjkHfFY7HrJHZHUnXM4l05RQTpLFoOl/uIo2HQ== - -turbo@^1.10.15: - version "1.10.16" - resolved "https://registry.yarnpkg.com/turbo/-/turbo-1.10.16.tgz#51601a65a3aa56d1b9d9cb9a2ab3a5a2eab41e19" - integrity sha512-2CEaK4FIuSZiP83iFa9GqMTQhroW2QryckVqUydmg4tx78baftTOS0O+oDAhvo9r9Nit4xUEtC1RAHoqs6ZEtg== +turbo-darwin-64@1.12.4: + version "1.12.4" + resolved "https://registry.yarnpkg.com/turbo-darwin-64/-/turbo-darwin-64-1.12.4.tgz#c03061dcf3e9fb6e530b7c5be035e44627015af7" + integrity sha512-dBwFxhp9isTa9RS/fz2gDVk5wWhKQsPQMozYhjM7TT4jTrnYn0ZJMzr7V3B/M/T8QF65TbniW7w1gtgxQgX5Zg== + +turbo-darwin-arm64@1.12.4: + version "1.12.4" + resolved "https://registry.yarnpkg.com/turbo-darwin-arm64/-/turbo-darwin-arm64-1.12.4.tgz#5a10367004077fb7874717f4ddc47b2f66f74cfb" + integrity sha512-1Uo5iI6xsJ1j9ObsqxYRsa3W26mEbUe6fnj4rQYV6kDaqYD54oAMJ6hM53q9rB8JvFxwdrUXGp3PwTw9A0qqkA== + +turbo-linux-64@1.12.4: + version "1.12.4" + resolved "https://registry.yarnpkg.com/turbo-linux-64/-/turbo-linux-64-1.12.4.tgz#22af551b152634a162a13c4a14af28816b383fc9" + integrity sha512-ONg2aSqKP7LAQOg7ysmU5WpEQp4DGNxSlAiR7um+LKtbmC/UxogbR5+T+Uuq6zGuQ5kJyKjWJ4NhtvUswOqBsA== + +turbo-linux-arm64@1.12.4: + version "1.12.4" + resolved "https://registry.yarnpkg.com/turbo-linux-arm64/-/turbo-linux-arm64-1.12.4.tgz#f13fb4da0e9fd968ccc0b807df643913ee8fab50" + integrity sha512-9FPufkwdgfIKg/9jj87Cdtftw8o36y27/S2vLN7FTR2pp9c0MQiTBOLVYadUr1FlShupddmaMbTkXEhyt9SdrA== + +turbo-windows-64@1.12.4: + version "1.12.4" + resolved "https://registry.yarnpkg.com/turbo-windows-64/-/turbo-windows-64-1.12.4.tgz#9b72a5082f6db8f995f409226220982ee90661f7" + integrity sha512-2mOtxHW5Vjh/5rDVu/aFwsMzI+chs8XcEuJHlY1sYOpEymYTz+u6AXbnzRvwZFMrLKr7J7fQOGl+v96sLKbNdA== + +turbo-windows-arm64@1.12.4: + version "1.12.4" + resolved "https://registry.yarnpkg.com/turbo-windows-arm64/-/turbo-windows-arm64-1.12.4.tgz#e7058885e18705c625436acebcd66fda3dd506d5" + integrity sha512-nOY5wae9qnxPOpT1fRuYO0ks6dTwpKMPV6++VkDkamFDLFHUDVM/9kmD2UTeh1yyrKnrZksbb9zmShhmfj1wog== + +turbo@^1.12.4: + version "1.12.4" + resolved "https://registry.yarnpkg.com/turbo/-/turbo-1.12.4.tgz#c3ba81871eba9ec87ac86af9e6270857726da9cb" + integrity sha512-yUJ7elEUSToiGwFZogXpYKJpQ0BvaMbkEuQECIWtkBLcmWzlMOt6bActsIm29oN83mRU0WbzGt4e8H1KHWedhg== optionalDependencies: - turbo-darwin-64 "1.10.16" - turbo-darwin-arm64 "1.10.16" - turbo-linux-64 "1.10.16" - turbo-linux-arm64 "1.10.16" - turbo-windows-64 "1.10.16" - turbo-windows-arm64 "1.10.16" + turbo-darwin-64 "1.12.4" + turbo-darwin-arm64 "1.12.4" + turbo-linux-64 "1.12.4" + turbo-linux-arm64 "1.12.4" + turbo-windows-64 "1.12.4" + turbo-windows-arm64 "1.12.4" tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" @@ -12798,54 +12699,64 @@ type-fest@^0.8.0, type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== -type-fest@^1.0.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" - integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== +type-fest@^2.17.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b" + integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== + +type-fest@^3.0.0: + version "3.13.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-3.13.1.tgz#bb744c1f0678bea7543a2d1ec24e83e68e8c8706" + integrity sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g== type-fest@^4.8.1: - version "4.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.8.1.tgz#2a5bf1074abb580d2d6eb5c1e79c11147fd11d4f" - integrity sha512-ShaaYnjf+0etG8W/FumARKMjjIToy/haCaTjN2dvcewOSoNqCQzdgG7m2JVOlM5qndGTHjkvsrWZs+k/2Z7E0Q== + version "4.10.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.10.2.tgz#3abdb144d93c5750432aac0d73d3e85fcab45738" + integrity sha512-anpAG63wSpdEbLwOqH8L84urkL6PiVIov3EMmgIhhThevh9aiMQov+6Btx0wldNcvm4wV+e2/Rt1QdDwKHFbHw== -typed-array-buffer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" - integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== +typed-array-buffer@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" + integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" - is-typed-array "^1.1.10" + call-bind "^1.0.7" + es-errors "^1.3.0" + is-typed-array "^1.1.13" typed-array-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" - integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== + version "1.0.1" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67" + integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== dependencies: - call-bind "^1.0.2" + call-bind "^1.0.7" for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" typed-array-byte-offset@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" - integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063" + integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA== dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" typed-array-length@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" - integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== + version "1.0.5" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.5.tgz#57d44da160296d8663fd63180a1802ebf25905d5" + integrity sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA== dependencies: - call-bind "^1.0.2" + call-bind "^1.0.7" for-each "^0.3.3" - is-typed-array "^1.1.9" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" typedarray-to-buffer@^3.1.5: version "3.1.5" @@ -12859,26 +12770,16 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== -"typescript@^4.6.4 || ^5.2.2", typescript@^5.2.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.2.2.tgz#5ebb5e5a5b75f085f22bc3f8460fba308310fa78" - integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w== +"typescript@>=3 < 6", typescript@^5.2.2, typescript@^5.3.2, typescript@^5.3.3: + version "5.3.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" + integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== uglify-js@^3.1.4: version "3.17.4" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== -uid-number@0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" - integrity sha512-c461FXIljswCuscZn67xq9PpszkPT6RjheWFQTgCyabJrTUozElanb0YEqv2UGgk247YpcJkFBuSGNvBlpXM9w== - -umask@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/umask/-/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d" - integrity sha512-lE/rxOhmiScJu9L6RTNVgB/zZbF+vGC0/p6D3xnkAePI2o0sMyFG966iR5Ki50OI/0mNi2yaRnxfLsPmEZF/JA== - unbox-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" @@ -12895,9 +12796,9 @@ undici-types@~5.26.4: integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== undici@^5.25.4: - version "5.27.0" - resolved "https://registry.yarnpkg.com/undici/-/undici-5.27.0.tgz#789f2e40ce982b5507899abc2c2ddeb2712b4554" - integrity sha512-l3ydWhlhOJzMVOYkymLykcRRXqbUaQriERtR70B9LzNkZ4bX52Fc8wbTDneMiwo8T+AemZXvXaTx+9o5ROxrXg== + version "5.28.3" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.3.tgz#a731e0eff2c3fcfd41c1169a869062be222d1e5b" + integrity sha512-3ItfzbrhDlINjaP0duwnNsKpDQk3acHI3gVJ1z4fmwMK31k5G9OVIAMLSIaP6w4FaGkaAkN6zaQO9LUvZ1t7VA== dependencies: "@fastify/busboy" "^2.0.0" @@ -12956,12 +12857,12 @@ unified@^9.0.0, unified@^9.1.0: trough "^1.0.0" vfile "^4.0.0" -unique-filename@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" - integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== +unique-filename@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-3.0.0.tgz#48ba7a5a16849f5080d26c760c86cf5cf05770ea" + integrity sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g== dependencies: - unique-slug "^2.0.0" + unique-slug "^4.0.0" unique-random-array@1.0.0: version "1.0.0" @@ -12975,10 +12876,10 @@ unique-random@^1.0.0: resolved "https://registry.yarnpkg.com/unique-random/-/unique-random-1.0.0.tgz#ce3e224c8242cd33a0e77b0d7180d77e6b62d0c4" integrity sha512-K1sUkPf9EXCZFNIlMCoX4icAqcvkR4FMPH4Z61HbyiWhQl1ZGo0zYeV2bJmocK8Cp6tnKYrCnpkeKGebXZoRTQ== -unique-slug@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" - integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== +unique-slug@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-4.0.0.tgz#6bae6bb16be91351badd24cdce741f892a6532e3" + integrity sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ== dependencies: imurmurhash "^0.1.4" @@ -13055,9 +12956,9 @@ unist-util-visit@2.0.3, unist-util-visit@^2.0.0, unist-util-visit@^2.0.3: unist-util-visit-parents "^3.0.0" universal-user-agent@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" - integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== + version "6.0.1" + resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.1.tgz#15f20f55da3c930c57bddbf1734c6654d5fd35aa" + integrity sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ== universalify@^0.1.0: version "0.1.2" @@ -13070,9 +12971,9 @@ universalify@^0.2.0: integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== untildify@^4.0.0: version "4.0.0" @@ -13084,7 +12985,7 @@ unzip-response@^2.0.1: resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" integrity sha512-N0XH6lqDtFH84JxptQoZYmloF4nzrQqqrAymNj+/gW60AO2AZgOcf4O/nUXJcYfyQkqvMo9lSupBZmmgvuVXlw== -upath@^2.0.1: +upath@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b" integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w== @@ -13185,24 +13086,12 @@ util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -util-promisify@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/util-promisify/-/util-promisify-2.1.0.tgz#3c2236476c4d32c5ff3c47002add7c13b9a82a53" - integrity sha512-K+5eQPYs14b3+E+hmE2J6gCZ4JmMl9DbYS6BeP2CHq6WMuNxErxf5B/n0fz85L8zUuoO6rIzNNmIQDu/j+1OcA== - dependencies: - object.getownpropertydescriptors "^2.0.3" - -uuid@^3.3.2: - version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - uuid@^8.3.2: version "8.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== -uuid@^9.0.1: +uuid@^9.0.0, uuid@^9.0.1: version "9.0.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== @@ -13212,16 +13101,16 @@ v8-compile-cache-lib@^3.0.1: resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== -v8-to-istanbul@^8.1.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz#77b752fd3975e31bbcef938f85e9bd1c7a8d60ed" - integrity sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w== +v8-to-istanbul@^9.0.1: + version "9.2.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz#2ed7644a245cddd83d4e087b9b33b3e62dfd10ad" + integrity sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA== dependencies: + "@jridgewell/trace-mapping" "^0.3.12" "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^1.6.0" - source-map "^0.7.3" + convert-source-map "^2.0.0" -validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: +validate-npm-package-license@3.0.4, validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== @@ -13229,6 +13118,13 @@ validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" +validate-npm-package-name@5.0.0, validate-npm-package-name@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz#f16afd48318e6f90a1ec101377fa0384cfc8c713" + integrity sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ== + dependencies: + builtins "^5.0.0" + validate-npm-package-name@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" @@ -13283,20 +13179,6 @@ vscode-textmate@^6.0.0: resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-6.0.0.tgz#a3777197235036814ac9a92451492f2748589210" integrity sha512-gu73tuZfJgu+mvCSy4UZwd2JXykjK9zAZsfmDeut5dx/1a7FeTk0XwJsSuqQn+cuMCGVbIBfl+s53X4T19DnzQ== -w3c-hr-time@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" - integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== - dependencies: - browser-process-hrtime "^1.0.0" - -w3c-xmlserializer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" - integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== - dependencies: - xml-name-validator "^3.0.0" - wait-on@7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/wait-on/-/wait-on-7.0.1.tgz#5cff9f8427e94f4deacbc2762e6b0a489b19eae9" @@ -13308,7 +13190,7 @@ wait-on@7.0.1: minimist "^1.2.7" rxjs "^7.8.0" -walker@^1.0.7: +walker@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== @@ -13323,7 +13205,7 @@ watchpack@2.4.0: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" -wcwidth@^1.0.0: +wcwidth@^1.0.0, wcwidth@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== @@ -13345,16 +13227,6 @@ webidl-conversions@^4.0.2: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== -webidl-conversions@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" - integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== - -webidl-conversions@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" - integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== - webpack-merge@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.2.2.tgz#a27c52ea783d1398afd2087f547d7b9d2f43634d" @@ -13362,22 +13234,10 @@ webpack-merge@^4.2.2: dependencies: lodash "^4.17.15" -whatwg-encoding@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" - integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== - dependencies: - iconv-lite "0.4.24" - whatwg-fetch@^3.4.1: - version "3.6.19" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.19.tgz#caefd92ae630b91c07345537e67f8354db470973" - integrity sha512-d67JP4dHSbm2TrpFj8AbO8DnL1JXL5J9u0Kq2xW6d0TFDbCA3Muhdt8orXC22utleTVj7Prqt82baN6RBvnEgw== - -whatwg-mimetype@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" - integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== + version "3.6.20" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz#580ce6d791facec91d37c72890995a0b48d31c70" + integrity sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg== whatwg-url@^5.0.0: version "5.0.0" @@ -13396,15 +13256,6 @@ whatwg-url@^7.0.0: tr46 "^1.0.1" webidl-conversions "^4.0.2" -whatwg-url@^8.0.0, whatwg-url@^8.4.0, whatwg-url@^8.5.0: - version "8.7.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" - integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== - dependencies: - lodash "^4.7.0" - tr46 "^2.1.0" - webidl-conversions "^6.1.0" - which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" @@ -13449,18 +13300,18 @@ which-module@^2.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== -which-typed-array@^1.1.11, which-typed-array@^1.1.13, which-typed-array@^1.1.9: - version "1.1.13" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.13.tgz#870cd5be06ddb616f504e7b039c4c24898184d36" - integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow== +which-typed-array@^1.1.13, which-typed-array@^1.1.14, which-typed-array@^1.1.9: + version "1.1.14" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.14.tgz#1f78a111aee1e131ca66164d8bdc3ab062c95a06" + integrity sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg== dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.4" + available-typed-arrays "^1.0.6" + call-bind "^1.0.5" for-each "^0.3.3" gopd "^1.0.1" - has-tostringtag "^1.0.0" + has-tostringtag "^1.0.1" -which@^1.2.9, which@^1.3.0, which@^1.3.1: +which@^1.2.9, which@^1.3.0: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== @@ -13474,7 +13325,14 @@ which@^2.0.1, which@^2.0.2: dependencies: isexe "^2.0.0" -wide-align@^1.1.0: +which@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/which/-/which-4.0.0.tgz#cd60b5e74503a3fbcfbf6cd6b4138a8bae644c1a" + integrity sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg== + dependencies: + isexe "^3.1.1" + +wide-align@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== @@ -13500,6 +13358,15 @@ wordwrap@^1.0.0: resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrap-ansi@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" @@ -13509,7 +13376,7 @@ wrap-ansi@^5.1.0: string-width "^3.0.0" strip-ansi "^5.0.0" -wrap-ansi@^6.2.0: +wrap-ansi@^6.0.1, wrap-ansi@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== @@ -13518,16 +13385,7 @@ wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^8.0.1, wrap-ansi@^8.1.0: +wrap-ansi@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== @@ -13536,11 +13394,28 @@ wrap-ansi@^8.0.1, wrap-ansi@^8.1.0: string-width "^5.0.1" strip-ansi "^7.0.1" +wrap-ansi@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-9.0.0.tgz#1a3dc8b70d85eeb8398ddfb1e4a02cd186e58b3e" + integrity sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q== + dependencies: + ansi-styles "^6.2.1" + string-width "^7.0.0" + strip-ansi "^7.1.0" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== +write-file-atomic@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-5.0.1.tgz#68df4717c55c6fa4281a7860b4c2ba0a6d2b11e7" + integrity sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^4.0.1" + write-file-atomic@^2.0.0, write-file-atomic@^2.4.2: version "2.4.3" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" @@ -13550,7 +13425,7 @@ write-file-atomic@^2.0.0, write-file-atomic@^2.4.2: imurmurhash "^0.1.4" signal-exit "^3.0.2" -write-file-atomic@^3.0.0, write-file-atomic@^3.0.3: +write-file-atomic@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== @@ -13560,6 +13435,14 @@ write-file-atomic@^3.0.0, write-file-atomic@^3.0.3: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" +write-file-atomic@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^3.0.7" + write-json-file@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-3.2.0.tgz#65bbdc9ecd8a1458e15952770ccbadfcff5fe62a" @@ -13572,19 +13455,7 @@ write-json-file@^3.2.0: sort-keys "^2.0.0" write-file-atomic "^2.4.2" -write-json-file@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-4.3.0.tgz#908493d6fd23225344af324016e4ca8f702dd12d" - integrity sha512-PxiShnxf0IlnQuMYOPPhPkhExoCQuTUNPOa/2JWCYTmBquU9njyyDuwRKN26IZBlp4yn1nt+Agh2HOOBl+55HQ== - dependencies: - detect-indent "^6.0.0" - graceful-fs "^4.1.15" - is-plain-obj "^2.0.0" - make-dir "^3.0.0" - sort-keys "^4.0.0" - write-file-atomic "^3.0.0" - -write-pkg@^4.0.0: +write-pkg@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/write-pkg/-/write-pkg-4.0.0.tgz#675cc04ef6c11faacbbc7771b24c0abbf2a20039" integrity sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA== @@ -13593,11 +13464,6 @@ write-pkg@^4.0.0: type-fest "^0.4.1" write-json-file "^3.2.0" -ws@^7.4.6: - version "7.5.9" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== - xdg-basedir@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" @@ -13608,16 +13474,6 @@ xdg-basedir@^4.0.0: resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== -xml-name-validator@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" - integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== - -xmlchars@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" - integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== - xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" @@ -13638,7 +13494,7 @@ yallist@^2.1.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" integrity sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A== -yallist@^3.0.0, yallist@^3.0.2, yallist@^3.1.1: +yallist@^3.0.2: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== @@ -13648,25 +13504,15 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml@2.3.3, yaml@^2.0.0-1, yaml@^2.1.1, yaml@^2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.3.tgz#01f6d18ef036446340007db8e016810e5d64aad9" - integrity sha512-zw0VAJxgeZ6+++/su5AFoqBbZbrEakwu+X0M5HmcwUiBL7AzcuPKjj5we4xfQLp78LkEMpD0cOnUhmgOVy3KdQ== - -yaml@^1.10.0: - version "1.10.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== - -yargs-parser@20.2.4: - version "20.2.4" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" - integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== +yaml@2.3.4, yaml@^2.0.0-1, yaml@^2.3.4: + version "2.3.4" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.4.tgz#53fc1d514be80aabf386dc6001eb29bf3b7523b2" + integrity sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA== -yargs-parser@20.x, yargs-parser@^20.2.2, yargs-parser@^20.2.3: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== +yargs-parser@21.1.1, yargs-parser@^21.0.1, yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== yargs-parser@^15.0.1: version "15.0.3" @@ -13676,10 +13522,23 @@ yargs-parser@^15.0.1: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^21.1.1: - version "21.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" - integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== +yargs-parser@^20.2.2, yargs-parser@^20.2.3: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs@17.7.2, yargs@^17.0.0, yargs@^17.3.1, yargs@^17.6.2: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" yargs@^14.2.3: version "14.2.3" @@ -13711,19 +13570,6 @@ yargs@^16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" -yargs@^17.0.0: - version "17.7.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" - integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== - dependencies: - cliui "^8.0.1" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.1.1" - yauzl@^2.10.0: version "2.10.0" resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"