diff --git a/README.md b/README.md index 8ef23ff6..ccd2a8e6 100644 --- a/README.md +++ b/README.md @@ -76,6 +76,7 @@ If you are using **`pages`** directory then `NextSeo` is **exactly what you need - [Article](#article-1) - [Breadcrumb](#breadcrumb) - [Blog](#blog) + - [Campground](#campground) - [Recipe](#recipe) - [Sitelinks Search Box](#sitelinks-search-box) - [Course](#course) @@ -89,6 +90,7 @@ If you are using **`pages`** directory then `NextSeo` is **exactly what you need - [Product](#product) - [Social Profile](#social-profile) - [News Article](#news-article) + - [Park](#park) - [Video](#video-1) - [VideoGame](#videogame) - [Event](#event) @@ -1088,6 +1090,7 @@ Below you will find a very basic page implementing each of the available JSON-LD - [Article](#article-1) - [Breadcrumb](#breadcrumb) - [Blog](#blog) +- [Campground](#campground) - [Recipe](#recipe) - [Sitelinks Search Box](#sitelinks-search-box) - [Course](#course) @@ -1100,6 +1103,7 @@ Below you will find a very basic page implementing each of the available JSON-LD - [Product](#product) - [Social Profile](#social-profile) - [News Article](#news-article) +- [Park](#park) Pull request very welcome to add any from the list [found on here](https://developers.google.com/search/docs/data-types/article) @@ -1241,6 +1245,109 @@ const Page = () => ( export default Page; ``` +### Campground + +```jsx +import { CampgroundJsonLd } from 'next-seo'; + +const Page = () => ( + <> +

Campground JSON-LD

+ + +); + +export default Page; +``` + +**Required properties** + +| Property | Info | +| ------------------------- | ------------------------------------------------------------------- | +| `@id` | Globally unique ID of the specific campground in the form of a URL. | +| `address` | Address of the specific campground location | +| `address.addressCountry` | The 2-letter ISO 3166-1 alpha-2 country code | +| `address.addressLocality` | City | +| `address.addressRegion` | State or province, if applicable. | +| `address.postalCode` | Postal or zip code. | +| `address.streetAddress` | Street number, street name, and unit number. | +| `name` | Campground name. | +| `description` | Campground description. | + +**Supported properties** + +| Property | Info | +| --------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | +| `geo` | Geographic coordinates of the campground. | +| `geo.latitude` | The latitude of the campground location | +| `geo.longitude` | The longitude of the campground location | +| `images` | An image or images of the campground. Required for valid markup depending on the type | +| `telephone` | A campground phone number meant to be the primary contact method for customers. | +| `url` | The fully-qualified URL of the specific campground. | +| `openingHours` | Opening hour specification of the campground. You can provide this as a single object, or an array of objects with the properties below. | +| `openingHours.opens` | The opening hour of the place or service on the given day(s) of the week. | +| `openingHours.closes` | The closing hour of the place or service on the given day(s) of the week. | +| `openingHours.dayOfWeek` | The day of the week for which these opening hours are valid. Can be a string or array of strings. Refer to [DayOfWeek](https://schema.org/DayOfWeek) | +| `openingHours.validFrom` | The date when the item becomes valid. | +| `openingHours.validThrough` | The date after when the item is not valid. | +| `isAccessibleForFree` | Whether or not the campground is accessible for free. | +| `petsAllowed` | Whether or not the campgroud allows pets. | +| `amenityFeature` | An amenity feature (e.g. a characteristic or service) of the campground. | +| `amenityFeature.name` | The name of the amenity. | +| `amenityFeature.value` | The value of the amenity. | +| `priceRange` | The price range of the campground, for example $$$. | +| `rating` | The average rating of the campground based on multiple ratings or reviews. | +| `rating.ratingValue` | The rating for the content. | +| `rating.ratingCount` | The count of total number of ratings. | + +**Other** +| `useAppDir` | This should be set to true if using new app directory. Not required if outside of app directory. | + ### Recipe ```jsx @@ -2136,6 +2243,91 @@ const Page = () => ( export default Page; ``` +### Park + +```jsx +import { ParkJsonLd } from 'next-seo'; + +const Page = () => ( + <> +

Park JSON-LD

+ + +); + +export default Page; +``` + +**Required properties** + +| Property | Info | +| ------------------------- | ------------------------------------------------------------- | +| `@id` | Globally unique ID of the specific park in the form of a URL. | +| `address` | Address of the specific park location | +| `address.addressCountry` | The 2-letter ISO 3166-1 alpha-2 country code | +| `address.addressLocality` | City | +| `address.addressRegion` | State or province, if applicable. | +| `address.postalCode` | Postal or zip code. | +| `address.streetAddress` | Street number, street name, and unit number. | +| `name` | Park name. | +| `description` | Park description. | + +**Supported properties** + +| Property | Info | +| --------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | +| `geo` | Geographic coordinates of the park. | +| `geo.latitude` | The latitude of the park location | +| `geo.longitude` | The longitude of the park location | +| `images` | An image or images of the park. Required for valid markup depending on the type | +| `telephone` | A business phone number meant to be the primary contact method for customers. | +| `url` | The fully-qualified URL of the specific park. | +| `openingHours` | Opening hour specification of the park. You can provide this as a single object, or an array of objects with the properties below. | +| `openingHours.opens` | The opening hour of the place or service on the given day(s) of the week. | +| `openingHours.closes` | The closing hour of the place or service on the given day(s) of the week. | +| `openingHours.dayOfWeek` | The day of the week for which these opening hours are valid. Can be a string or array of strings. Refer to [DayOfWeek](https://schema.org/DayOfWeek) | +| `openingHours.validFrom` | The date when the item becomes valid. | +| `openingHours.validThrough` | The date after when the item is not valid. | +| `isAccessibleForFree` | Whether or not the park is accessible for free. | + +**Other** +| `useAppDir` | This should be set to true if using new app directory. Not required if outside of app directory. | + [Google Docs for Social Profile](https://developers.google.com/search/docs/data-types/social-profile) ### Video @@ -3027,6 +3219,7 @@ export default () => ( aggregateRating={{ ratingValue: '4.6', reviewCount: '8864' }} operatingSystem="ANDROID" applicationCategory="GameApplication" + keywords="angrybirds, arcade, slingshot" /> ); @@ -3052,7 +3245,13 @@ export default () => ( | `operatingSystem` | The operating System supported by the game it self. | | `applicationCategory` | Desktop Software or Video Game... | -For reference and more info check [Google docs for Software App](https://developers.google.com/search/docs/data-types/software-app) +**Data other properties** + +| Property | Info | +| ---------- | ---------------------------------------------------------------------------------------------------------------------- | +| `keywords` | Keywords or tags used to describe this content. Multiple entries in a keywords list are typically delimited by commas. | + +For reference and more info check [Google docs for Software App](https://developers.google.com/search/docs/data-types/software-app) and [Schema.org docs](https://schema.org/SoftwareApplication) ### Organization diff --git a/cypress/e2e/campground.spec.js b/cypress/e2e/campground.spec.js new file mode 100644 index 00000000..f28f354e --- /dev/null +++ b/cypress/e2e/campground.spec.js @@ -0,0 +1,145 @@ +import { assertSchema } from '@cypress/schema-tools'; +import schemas from '../schemas'; + +describe('Campground JSON-LD', () => { + it('matches schema', () => { + cy.visit('http://localhost:3000/jsonld/campground'); + cy.get('head script[type="application/ld+json"]').then(tags => { + const jsonLD = JSON.parse(tags[0].innerHTML); + console.log('jsonLD', jsonLD); + assertSchema(schemas)('Campground', '1.0.0')(jsonLD); + }); + }); + + it('renders with one amenity feature', () => { + cy.visit('http://localhost:3000/jsonld/campground'); + cy.get('head script[type="application/ld+json"]').then(tags => { + const jsonLD = JSON.parse(tags[0].innerHTML); + expect(jsonLD).to.deep.equal({ + '@context': 'https://schema.org', + '@type': 'Campground', + '@id': 'https://www.example.com/campground/rip-van-winkle-campground', + name: 'Rip Van Winkle Campgrounds', + description: 'Description about Rip Van Winkle Campgrounds', + url: 'https://www.example.com/campground', + telephone: '+18452468114', + image: ['https://example.com/photos/1x1/photo.jpg'], + address: { + '@type': 'PostalAddress', + streetAddress: '149 Blue Mountain Rd', + addressLocality: 'Saugerties', + addressRegion: 'NY', + postalCode: '12477', + addressCountry: 'US', + }, + geo: { + '@type': 'GeoCoordinates', + latitude: '42.092599', + longitude: '-74.018580', + }, + openingHoursSpecification: [ + { + opens: '09:00', + closes: '17:00', + dayOfWeek: [ + 'Monday', + 'Tuesday', + 'Wednesday', + 'Thursday', + 'Friday', + 'Saturday', + 'Sunday', + ], + validFrom: '2019-12-23', + validThrough: '2020-04-02', + '@type': 'OpeningHoursSpecification', + }, + ], + petsAllowed: true, + aggregateRating: { + ratingValue: '5', + ratingCount: '18', + '@type': 'AggregateRating', + }, + amenityFeature: { + '@type': 'LocationFeatureSpecification', + name: 'Showers', + value: true, + }, + priceRange: '$$', + }); + }); + }); + + it('renders with multiple amenity features', () => { + cy.visit('http://localhost:3000/jsonld/campground/multipleAmenityFeatures'); + cy.get('head script[type="application/ld+json"]').then(tags => { + const jsonLD = JSON.parse(tags[0].innerHTML); + expect(jsonLD).to.deep.equal({ + '@context': 'https://schema.org', + '@type': 'Campground', + '@id': 'https://www.example.com/campground/rip-van-winkle-campground', + name: 'Rip Van Winkle Campgrounds', + description: 'Description about Rip Van Winkle Campgrounds', + url: 'https://www.example.com/campground', + telephone: '+18452468114', + image: ['https://example.com/photos/1x1/photo.jpg'], + address: { + '@type': 'PostalAddress', + streetAddress: '149 Blue Mountain Rd', + addressLocality: 'Saugerties', + addressRegion: 'NY', + postalCode: '12477', + addressCountry: 'US', + }, + geo: { + '@type': 'GeoCoordinates', + latitude: '42.092599', + longitude: '-74.018580', + }, + openingHoursSpecification: [ + { + opens: '09:00', + closes: '17:00', + dayOfWeek: [ + 'Monday', + 'Tuesday', + 'Wednesday', + 'Thursday', + 'Friday', + 'Saturday', + 'Sunday', + ], + validFrom: '2019-12-23', + validThrough: '2020-04-02', + '@type': 'OpeningHoursSpecification', + }, + ], + petsAllowed: true, + aggregateRating: { + ratingValue: '5', + ratingCount: '18', + '@type': 'AggregateRating', + }, + amenityFeature: [ + { + '@type': 'LocationFeatureSpecification', + name: 'Showers', + value: true, + }, + { + '@type': 'LocationFeatureSpecification', + name: 'RV Hookup', + value: false, + }, + { + '@type': 'LocationFeatureSpecification', + name: 'Campfire', + value: true, + }, + ], + priceRange: '$$', + }); + }); + }); +}); diff --git a/cypress/e2e/park.spec.js b/cypress/e2e/park.spec.js new file mode 100644 index 00000000..64538adb --- /dev/null +++ b/cypress/e2e/park.spec.js @@ -0,0 +1,61 @@ +import { assertSchema } from '@cypress/schema-tools'; +import schemas from '../schemas'; + +describe('Park JSON-LD', () => { + it('matches schema', () => { + cy.visit('http://localhost:3000/jsonld/park'); + cy.get('head script[type="application/ld+json"]').then(tags => { + const jsonLD = JSON.parse(tags[0].innerHTML); + console.log('jsonLD', jsonLD); + assertSchema(schemas)('Park', '1.0.0')(jsonLD); + }); + }); + + it('renders with all props', () => { + cy.visit('http://localhost:3000/jsonld/park'); + cy.get('head script[type="application/ld+json"]').then(tags => { + const jsonLD = JSON.parse(tags[0].innerHTML); + expect(jsonLD).to.deep.equal({ + '@context': 'https://schema.org', + '@type': 'Park', + '@id': 'https://www.example.com/park/minnewaska-state-park', + name: 'Minnewaska State Park', + description: 'Description about Minnewaska State Park', + url: 'https://www.example.com/park', + telephone: '+18452550752', + image: ['https://example.com/photos/1x1/photo.jpg'], + address: { + '@type': 'PostalAddress', + streetAddress: '5281 Route 44-55', + addressLocality: 'Kerhonkson', + addressRegion: 'NY', + postalCode: '12446', + addressCountry: 'US', + }, + geo: { + latitude: '41.735149', + longitude: '-74.239037', + '@type': 'GeoCoordinates', + }, + openingHoursSpecification: [ + { + opens: '09:00', + closes: '18:00', + dayOfWeek: [ + 'Monday', + 'Tuesday', + 'Wednesday', + 'Thursday', + 'Friday', + 'Saturday', + 'Sunday', + ], + validFrom: '2019-12-23', + validThrough: '2020-04-02', + '@type': 'OpeningHoursSpecification', + }, + ], + }); + }); + }); +}); diff --git a/cypress/e2e/softwareApp.spec.js b/cypress/e2e/softwareApp.spec.js index d03e591a..f05e1209 100644 --- a/cypress/e2e/softwareApp.spec.js +++ b/cypress/e2e/softwareApp.spec.js @@ -30,6 +30,7 @@ describe('SoftwareApp JSON-LD', () => { price: '1.00', priceCurrency: 'USD', }, + keywords: 'angrybirds, arcade, slingshot', }); }); }); diff --git a/cypress/schemas/campground-schema.js b/cypress/schemas/campground-schema.js new file mode 100644 index 00000000..3068a722 --- /dev/null +++ b/cypress/schemas/campground-schema.js @@ -0,0 +1,236 @@ +import { versionSchemas } from '@cypress/schema-tools'; + +import address100 from './address'; + +const campground100 = { + version: { + major: 1, + minor: 0, + patch: 0, + }, + schema: { + type: 'object', + title: 'Campground', + description: 'An example schema describing JSON-LD for type: Campground', + properties: { + '@context': { + type: 'string', + description: 'Schema.org context', + }, + '@type': { + type: 'string', + description: + 'Any more specific type supported by Campground https://schema.org/Campground', + }, + '@id': { + type: 'string', + description: + 'Globally unique ID of the specific campground in the form of a URL. The ID should be stable and unchanging over time. Google Search treats the URL as an opaque string and it does not have to be a working link.', + }, + name: { + type: 'string', + description: 'The name of the campground.', + }, + description: { + type: 'string', + description: 'Description for the campground.', + }, + url: { + type: 'string', + description: + 'The fully-qualified URL of the specific campground location. Unlike the @id property, this URL property should be a working link.', + }, + telephone: { + type: 'string', + description: + 'A campground phone number meant to be the primary contact method for customers. Be sure to include the country code and area code in the phone number.', + }, + image: { + type: 'array', + items: { + type: 'string', + }, + description: "Array of image URL's", + }, + address: { + ...address100.schema, + see: address100, + }, + geo: { + type: 'object', + description: 'An object with latitude and longitude', + properties: { + '@type': { + type: 'string', + description: 'JSON-LD type: GeoCoordinates', + }, + latitude: { + type: 'string', + description: 'The latitude of the campground location.', + }, + longitude: { + type: 'string', + description: 'The longitude of the campground location.', + }, + }, + }, + openingHoursSpecification: { + type: 'array', + description: 'Opening hour specification for the campground', + item: { + type: 'object', + properties: { + '@type': { + type: 'string', + description: 'JSON-LD type: OpeningHoursSpecification', + }, + opens: { + type: 'string', + description: + 'The opening hour of the place or service on the given day(s) of the week.', + }, + closes: { + type: 'string', + description: + 'The closing hour of the place or service on the given day(s) of the week.', + }, + dayOfWeek: { + type: 'array', + items: { + type: 'string', + }, + description: + 'The day of the week for which these opening hours are valid.', + }, + validFrom: { + type: 'string', + description: 'The date when the item becomes valid.', + }, + validThrough: { + type: 'string', + description: 'The date after when the item is not valid.', + }, + }, + }, + }, + petsAllowed: { + type: 'boolean', + description: + 'Indicates whether pets are allowed to enter the campground.', + }, + aggregateRating: { + type: 'object', + properties: { + '@type': { + type: 'string', + description: 'JSON-LD type: AggregateRating.', + }, + ratingValue: { + type: 'string', + description: 'Ratings/Reviews aggregate value of the campground.', + }, + ratingCount: { + type: 'string', + description: 'Ratings/Reviews number of the campground.', + }, + }, + description: 'Aggregate rating of the campground.', + }, + amenityFeature: { + type: ['array', 'object'], + item: { + type: 'object', + properties: { + '@type': { + type: 'string', + description: 'JSON-LD type: LocationFeatureSpecification', + }, + name: { + type: 'string', + description: 'The name of the amenity.', + }, + value: { + type: ['string', 'integer', 'boolean'], + description: 'The value of the amenity.', + }, + }, + }, + }, + priceRange: { + type: 'string', + description: + 'The approximate price of the campground. You can specify as many currency symbols as there are digits in the price, or you can specify an actual range.', + }, + }, + required: true, + additionalProperties: false, + }, + example: { + '@context': 'https://schema.org', + '@type': 'Campground', + '@id': 'https://www.example.com/campground/rip-van-winkle-campground', + name: 'Rip Van Winkle Campgrounds', + description: 'Description about Rip Van Winkle Campgrounds', + url: 'https://www.example.com/campground', + telephone: '+18452468114', + image: ['https://example.com/photos/1x1/photo.jpg'], + address: { + '@type': 'PostalAddress', + streetAddress: '149 Blue Mountain Rd', + addressLocality: 'Saugerties', + addressRegion: 'NY', + postalCode: '12477', + addressCountry: 'US', + }, + geo: { + latitude: '42.092599', + longitude: '-74.018580', + '@type': 'GeoCoordinates', + }, + openingHoursSpecification: [ + { + opens: '09:00', + closes: '17:00', + dayOfWeek: [ + 'Monday', + 'Tuesday', + 'Wednesday', + 'Thursday', + 'Friday', + 'Saturday', + 'Sunday', + ], + validFrom: '2019-12-23', + validThrough: '2020-04-02', + '@type': 'OpeningHoursSpecification', + }, + ], + petsAllowed: true, + aggregateRating: { + '@type': 'AggregateRating', + ratingValue: '5', + ratingCount: '18', + }, + amenityFeature: [ + { + '@type': 'LocationFeatureSpecification', + name: 'Showers', + value: true, + }, + { + '@type': 'LocationFeatureSpecification', + name: 'RV Hookup', + value: false, + }, + { + '@type': 'LocationFeatureSpecification', + name: 'Campfire', + value: true, + }, + ], + priceRange: '$$', + }, +}; + +const campground = versionSchemas(campground100); +export default campground; diff --git a/cypress/schemas/index.js b/cypress/schemas/index.js index ef2d4f55..c4892c35 100644 --- a/cypress/schemas/index.js +++ b/cypress/schemas/index.js @@ -27,6 +27,9 @@ import webPageVersions from './web-page-schema'; import videoVersions from './video-schema'; import howToVersions from './how-to-schema'; import imageVersions from './image-schema'; +import campgroundVersions from './campground-schema'; +import parkVersions from './park-schema'; + const schemas = combineSchemas( articleVersions, @@ -56,5 +59,7 @@ const schemas = combineSchemas( videoVersions, howToVersions, imageVersions, + campgroundVersions, + parkVersions, ); export default schemas; diff --git a/cypress/schemas/park-schema.js b/cypress/schemas/park-schema.js new file mode 100644 index 00000000..233a474a --- /dev/null +++ b/cypress/schemas/park-schema.js @@ -0,0 +1,164 @@ +import { versionSchemas } from '@cypress/schema-tools'; + +import address100 from './address'; + +const park100 = { + version: { + major: 1, + minor: 0, + patch: 0, + }, + schema: { + type: 'object', + title: 'Park', + description: 'An example schema describing JSON-LD for type: Park', + properties: { + '@context': { + type: 'string', + description: 'Schema.org context', + }, + '@type': { + type: 'string', + description: + 'Any more specific type supported by Park https://schema.org/Park', + }, + '@id': { + type: 'string', + description: + 'Globally unique ID of the specific park in the form of a URL. The ID should be stable and unchanging over time. Google Search treats the URL as an opaque string and it does not have to be a working link.', + }, + name: { + type: 'string', + description: 'The name of the park.', + }, + description: { + type: 'string', + description: 'Description for the park.', + }, + url: { + type: 'string', + description: + 'The fully-qualified URL of the specific park location. Unlike the @id property, this URL property should be a working link.', + }, + telephone: { + type: 'string', + description: + 'A park phone number meant to be the primary contact method for customers. Be sure to include the country code and area code in the phone number.', + }, + image: { + type: 'array', + items: { + type: 'string', + }, + description: "Array of image URL's", + }, + address: { + ...address100.schema, + see: address100, + }, + geo: { + type: 'object', + description: "Array of social profile URL's", + properties: { + '@type': { + type: 'string', + description: 'JSON-LD type: GeoCoordinates', + }, + latitude: { + type: 'string', + description: 'The latitude of the park location.', + }, + longitude: { + type: 'string', + description: 'The longitude of the park location.', + }, + }, + }, + openingHoursSpecification: { + type: 'array', + description: 'Opening hour specification for the park', + item: { + type: 'object', + properties: { + '@type': { + type: 'string', + description: 'JSON-LD type: OpeningHoursSpecification', + }, + opens: { + type: 'string', + description: + 'The opening hour of the place or service on the given day(s) of the week.', + }, + closes: { + type: 'string', + description: + 'The closing hour of the place or service on the given day(s) of the week.', + }, + dayOfWeek: { + type: 'array', + items: { + type: 'string', + }, + description: + 'The day of the week for which these opening hours are valid.', + }, + validFrom: { + type: 'string', + description: 'The date when the item becomes valid.', + }, + validThrough: { + type: 'string', + description: 'The date after when the item is not valid.', + }, + }, + }, + }, + }, + required: true, + additionalProperties: false, + }, + example: { + '@context': 'https://schema.org', + '@type': 'Park', + '@id': 'https://www.example.com/park/minnewaska-state-park', + name: 'Minnewaska State Park', + description: 'Description about Minnewaska State Park', + url: 'https://www.example.com/park', + telephone: '+18452550752', + image: ['https://example.com/photos/1x1/photo.jpg'], + address: { + '@type': 'PostalAddress', + streetAddress: '5281 Route 44-55', + addressLocality: 'Kerhonkson', + addressRegion: 'NY', + postalCode: '12446', + addressCountry: 'US', + }, + geo: { + latitude: '41.735149', + longitude: '-74.239037', + '@type': 'GeoCoordinates', + }, + openingHoursSpecification: [ + { + opens: '09:00', + closes: '18:00', + dayOfWeek: [ + 'Monday', + 'Tuesday', + 'Wednesday', + 'Thursday', + 'Friday', + 'Saturday', + 'Sunday', + ], + validFrom: '2019-12-23', + validThrough: '2020-04-02', + '@type': 'OpeningHoursSpecification', + }, + ], + }, +}; + +const park = versionSchemas(park100); +export default park; diff --git a/cypress/schemas/software-app-schema.js b/cypress/schemas/software-app-schema.js index 66bbad18..d2cd71bc 100644 --- a/cypress/schemas/software-app-schema.js +++ b/cypress/schemas/software-app-schema.js @@ -52,6 +52,9 @@ const softwareApp100 = { }, }, }, + keywords: { + type: 'string', + }, }, }, example: { @@ -70,6 +73,7 @@ const softwareApp100 = { price: '1.00', priceCurrency: 'USD', }, + keywords: 'angrybirds, arcade, slingshot', }, }; diff --git a/e2e/pages/jsonld/campground/index.tsx b/e2e/pages/jsonld/campground/index.tsx new file mode 100644 index 00000000..8401b7a9 --- /dev/null +++ b/e2e/pages/jsonld/campground/index.tsx @@ -0,0 +1,58 @@ +import React from 'react'; +import { CampgroundJsonLd } from '../../../..'; + +function Campground() { + return ( + <> +

Campground

+ + + ); +} + +export default Campground; diff --git a/e2e/pages/jsonld/campground/multipleAmenityFeatures.tsx b/e2e/pages/jsonld/campground/multipleAmenityFeatures.tsx new file mode 100644 index 00000000..bd950da2 --- /dev/null +++ b/e2e/pages/jsonld/campground/multipleAmenityFeatures.tsx @@ -0,0 +1,68 @@ +import React from 'react'; +import { CampgroundJsonLd } from '../../../..'; + +function Campground() { + return ( + <> +

Campground

+ + + ); +} + +export default Campground; diff --git a/e2e/pages/jsonld/index.tsx b/e2e/pages/jsonld/index.tsx index 191f490a..4665310d 100644 --- a/e2e/pages/jsonld/index.tsx +++ b/e2e/pages/jsonld/index.tsx @@ -6,6 +6,7 @@ const allJsonLDPages = [ 'blog', 'brand', 'breadcrumb', + 'campground', 'collectionPage', 'corporateContact', 'course', @@ -18,6 +19,7 @@ const allJsonLDPages = [ 'logo', 'newsarticle', 'organization', + 'park', 'product', 'profilePage', 'qaPage', diff --git a/e2e/pages/jsonld/park.tsx b/e2e/pages/jsonld/park.tsx new file mode 100644 index 00000000..d6a99fed --- /dev/null +++ b/e2e/pages/jsonld/park.tsx @@ -0,0 +1,48 @@ +import React from 'react'; +import { ParkJsonLd } from '../../..'; + +function Park() { + return ( + <> +

Park

+ + + ); +} + +export default Park; diff --git a/e2e/pages/jsonld/softwareApp.tsx b/e2e/pages/jsonld/softwareApp.tsx index bb6e3bd3..1ad2a928 100644 --- a/e2e/pages/jsonld/softwareApp.tsx +++ b/e2e/pages/jsonld/softwareApp.tsx @@ -12,6 +12,7 @@ function SoftwareApp() { aggregateRating={{ ratingValue: '4.6', ratingCount: '8864' }} operatingSystem="ANDROID" applicationCategory="GameApplication" + keywords="angrybirds, arcade, slingshot" /> ); diff --git a/package.json b/package.json index 07ceb8fe..0b77c4da 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "next-seo", - "version": "6.1.0", + "version": "6.2.0", "description": "SEO plugin for Next.js projects", "source": "src/index.tsx", "main": "lib/next-seo.js", @@ -73,7 +73,7 @@ "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^14.0.0", "@types/jest": "^29.5.0", - "@types/node": "^18.11.7", + "@types/node": "^20.3.2", "@types/react": "^18.0.31", "@types/react-dom": "^18.0.11", "babel-jest": "^29.5.0", @@ -85,9 +85,11 @@ "jest-environment-jsdom": "^29.5.0", "lint-staged": "11.1.1", "microbundle": "^0.15.1", + "lint-staged": "13.2.3", + "microbundle": "^0.14.2", "next": "^13.0.0", "npm-run-all": "4.1.5", - "prettier": "2.8.7", + "prettier": "2.8.8", "react": "^18.0.0", "react-dom": "^18.0.0", "rimraf": "4.4.1", diff --git a/src/index.tsx b/src/index.tsx index 5d8ed3ea..e5687e39 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -67,5 +67,9 @@ export { } from './jsonld/socialProfile'; export { default as HowToJsonLd, HowToJsonLdProps } from './jsonld/howTo'; export { default as ImageJsonLd, ImageJsonLdProps } from './jsonld/image'; - +export { + default as CampgroundJsonLd, + CampgroundJsonLdProps, +} from './jsonld/campground'; +export { default as ParkJsonLd, ParkJsonLdProps } from './jsonld/park'; export { DefaultSeoProps, NextSeoProps } from './types'; diff --git a/src/jsonld/campground.tsx b/src/jsonld/campground.tsx new file mode 100644 index 00000000..da57804e --- /dev/null +++ b/src/jsonld/campground.tsx @@ -0,0 +1,65 @@ +import React from 'react'; +import { JsonLd, JsonLdProps } from './jsonld'; +import { + Address, + AggregateRating, + AmenityFeature, + Geo, + OpeningHoursSpecification, +} from 'src/types'; +import { setGeo } from 'src/utils/schema/setGeo'; +import { setAddress } from 'src/utils/schema/setAddress'; +import { setOpeningHours } from 'src/utils/schema/setOpeningHours'; +import { setAmenityFeature } from 'src/utils/schema/setAmenityFeature'; +import { setAggregateRating } from 'src/utils/schema/setAggregateRating'; + +export interface CampgroundJsonLdProps extends JsonLdProps { + address: Address | Address[]; + amenityFeature?: AmenityFeature | AmenityFeature[]; + description: string; + geo?: Geo; + images?: string[]; + isAccessibleForFree?: boolean; + name: string; + openingHours?: OpeningHoursSpecification | OpeningHoursSpecification[]; + petsAllowed?: boolean; + priceRange?: string; + rating?: AggregateRating; + telephone?: string; + type?: string; + url?: string; +} + +function CampgroundJsonLd({ + address, + geo, + images, + keyOverride, + openingHours, + type = 'Campground', + amenityFeature, + rating, + ...rest +}: CampgroundJsonLdProps) { + const data = { + image: images, + openingHoursSpecification: Array.isArray(openingHours) + ? openingHours.map(setOpeningHours) + : setOpeningHours(openingHours), + address: setAddress(address), + geo: setGeo(geo), + amenityFeature: setAmenityFeature(amenityFeature), + aggregateRating: setAggregateRating(rating), + ...rest, + }; + return ( + + ); +} + +export default CampgroundJsonLd; diff --git a/src/jsonld/park.tsx b/src/jsonld/park.tsx new file mode 100644 index 00000000..58e0fb7f --- /dev/null +++ b/src/jsonld/park.tsx @@ -0,0 +1,44 @@ +import React from 'react'; +import { JsonLd, JsonLdProps } from './jsonld'; +import { Address, Geo, OpeningHoursSpecification } from 'src/types'; +import { setGeo } from 'src/utils/schema/setGeo'; +import { setAddress } from 'src/utils/schema/setAddress'; +import { setOpeningHours } from 'src/utils/schema/setOpeningHours'; + +export interface ParkJsonLdProps extends JsonLdProps { + address: Address | Address[]; + description: string; + geo?: Geo; + images?: string[]; + isAccessibleForFree?: boolean; + name: string; + openingHours?: OpeningHoursSpecification | OpeningHoursSpecification[]; + telephone?: string; + type?: string; + url?: string; +} + +function ParkJsonLd({ + address, + geo, + images, + keyOverride, + openingHours, + type = 'Park', + ...rest +}: ParkJsonLdProps) { + const data = { + image: images, + openingHoursSpecification: Array.isArray(openingHours) + ? openingHours.map(setOpeningHours) + : setOpeningHours(openingHours), + address: setAddress(address), + geo: setGeo(geo), + ...rest, + }; + return ( + + ); +} + +export default ParkJsonLd; diff --git a/src/jsonld/softwareApp.tsx b/src/jsonld/softwareApp.tsx index 5f9bc57e..4e564b89 100644 --- a/src/jsonld/softwareApp.tsx +++ b/src/jsonld/softwareApp.tsx @@ -13,6 +13,7 @@ export interface SoftwareAppJsonLdProps extends JsonLdProps { operatingSystem?: string; review?: Review; aggregateRating?: AggregateRating; + keywords?: string; } function SoftwareAppJsonLd({ @@ -22,6 +23,7 @@ function SoftwareAppJsonLd({ price, aggregateRating, review, + keywords, ...rest }: SoftwareAppJsonLdProps) { const data = { @@ -33,6 +35,7 @@ function SoftwareAppJsonLd({ }, aggregateRating: setAggregateRating(aggregateRating), review: setReviews(review), + keywords, }; return ( ({ + '@type': 'LocationFeatureSpecification', + ...amenity, + })); + +describe('setAmenityFeature', () => { + test('should return undefined if amenityFeature is undefined', () => { + const data = setAmenityFeature(undefined); + expect(data).toBeUndefined(); + }); + + test('should accept an object, decorates it, and returns it', () => { + const data = setAmenityFeature(amenityFeatureEx1); + expect(data).toEqual(decoratedAmenityFeatureEx1); + }); + + test('should accept an array of objects, decorates all of them, and returns it', () => { + const data = setAmenityFeature(amenityFeatureEx2); + expect(data).toEqual(decoratedAmenityFeatureEx2); + }); + + test('single object array returns correctly', () => { + const data = setAmenityFeature([amenityFeatureEx1]); + expect(data).toEqual(decoratedAmenityFeatureEx1); + }); +}); diff --git a/src/utils/schema/setAmenityFeature.ts b/src/utils/schema/setAmenityFeature.ts new file mode 100644 index 00000000..6f60cf84 --- /dev/null +++ b/src/utils/schema/setAmenityFeature.ts @@ -0,0 +1,26 @@ +import { AmenityFeature, DecoratedAmenityFeature } from 'src/types'; + +export function setAmenityFeature( + amenityFeature?: AmenityFeature | AmenityFeature[], +) { + if (!amenityFeature) return undefined; + + if (!Array.isArray(amenityFeature)) { + return decorateAmenityFeature(amenityFeature); + } + + if (amenityFeature.length === 1) { + return decorateAmenityFeature(amenityFeature[0]); + } + + return amenityFeature.map(decorateAmenityFeature); +} + +function decorateAmenityFeature( + amenity: AmenityFeature, +): DecoratedAmenityFeature { + return { + '@type': 'LocationFeatureSpecification', + ...amenity, + }; +} diff --git a/yarn.lock b/yarn.lock index 12082ff3..165c0ceb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3,9 +3,9 @@ "@adobe/css-tools@^4.0.1": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.2.0.tgz#e1a84fca468f4b337816fcb7f0964beb620ba855" - integrity sha512-E09FiIft46CmH5Qnjb0wsW54/YQd69LsxeKUOWawmws1XWvyFGURnAChH0mlr7YPFR1ofwvUQfcL0J3lMxXqPA== + version "4.3.1" + resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.3.1.tgz#abfccb8ca78075a2b6187345c26243c1a0842f28" + integrity sha512-/62yikz7NLScCGAAST5SHdnjaDJQBDq0M2muyRTpf2VQhw6StBg2ALiu73zSJQ4fMVLA+0uBhBHAle7Wg+2kSg== "@ampproject/remapping@^2.2.0": version "2.2.0" @@ -22,6 +22,14 @@ dependencies: "@babel/highlight" "^7.18.6" +"@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== + dependencies: + "@babel/highlight" "^7.22.13" + chalk "^2.4.2" + "@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.5", "@babel/compat-data@^7.21.4": version "7.21.4" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.21.4.tgz#457ffe647c480dff59c2be092fc3acf71195c87f" @@ -58,6 +66,16 @@ "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" +"@babel/generator@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420" + integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g== + dependencies: + "@babel/types" "^7.23.0" + "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" + jsesc "^2.5.1" + "@babel/helper-annotate-as-pure@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" @@ -123,6 +141,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== +"@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== + "@babel/helper-explode-assignable-expression@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz#41f8228ef0a6f1a036b8dfdfec7ce94f9a6bc096" @@ -138,6 +161,14 @@ "@babel/template" "^7.20.7" "@babel/types" "^7.21.0" +"@babel/helper-function-name@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" + integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== + dependencies: + "@babel/template" "^7.22.15" + "@babel/types" "^7.23.0" + "@babel/helper-hoist-variables@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" @@ -145,6 +176,13 @@ dependencies: "@babel/types" "^7.18.6" +"@babel/helper-hoist-variables@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" + integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== + dependencies: + "@babel/types" "^7.22.5" + "@babel/helper-member-expression-to-functions@^7.20.7", "@babel/helper-member-expression-to-functions@^7.21.0": version "7.21.0" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.0.tgz#319c6a940431a133897148515877d2f3269c3ba5" @@ -228,16 +266,33 @@ dependencies: "@babel/types" "^7.18.6" +"@babel/helper-split-export-declaration@^7.22.6": + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" + integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== + dependencies: + "@babel/types" "^7.22.5" + "@babel/helper-string-parser@^7.19.4": version "7.19.4" resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== +"@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-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": version "7.19.1" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== +"@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.18.6", "@babel/helper-validator-option@^7.21.0": version "7.21.0" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz#8224c7e13ace4bafdc4004da2cf064ef42673180" @@ -271,11 +326,25 @@ chalk "^2.0.0" js-tokens "^4.0.0" +"@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== + 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.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.21.4", "@babel/parser@^7.3.3": version "7.21.4" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.4.tgz#94003fdfc520bbe2875d4ae557b43ddb6d880f17" integrity sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw== +"@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/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": version "7.18.6" 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.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2" @@ -1016,19 +1085,28 @@ "@babel/parser" "^7.20.7" "@babel/types" "^7.20.7" -"@babel/traverse@^7.20.5", "@babel/traverse@^7.20.7", "@babel/traverse@^7.21.0", "@babel/traverse@^7.21.2", "@babel/traverse@^7.21.4", "@babel/traverse@^7.7.2": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.21.4.tgz#a836aca7b116634e97a6ed99976236b3282c9d36" - integrity sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q== +"@babel/template@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" + integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== dependencies: - "@babel/code-frame" "^7.21.4" - "@babel/generator" "^7.21.4" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.21.0" - "@babel/helper-hoist-variables" "^7.18.6" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.21.4" - "@babel/types" "^7.21.4" + "@babel/code-frame" "^7.22.13" + "@babel/parser" "^7.22.15" + "@babel/types" "^7.22.15" + +"@babel/traverse@^7.20.5", "@babel/traverse@^7.20.7", "@babel/traverse@^7.21.0", "@babel/traverse@^7.21.2", "@babel/traverse@^7.21.4", "@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== + dependencies: + "@babel/code-frame" "^7.22.13" + "@babel/generator" "^7.23.0" + "@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" globals "^11.1.0" @@ -1041,6 +1119,15 @@ "@babel/helper-validator-identifier" "^7.19.1" to-fast-properties "^2.0.0" +"@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb" + integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg== + dependencies: + "@babel/helper-string-parser" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.20" + to-fast-properties "^2.0.0" + "@bahmutov/all-paths@1.0.2": version "1.0.2" resolved "https://registry.yarnpkg.com/@bahmutov/all-paths/-/all-paths-1.0.2.tgz#9ae0dcdf9022dd6e5e14d7fda3479e6a330d035b" @@ -1689,9 +1776,9 @@ "@types/istanbul-lib-report" "*" "@types/jest@*", "@types/jest@^29.5.0": - version "29.5.0" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.0.tgz#337b90bbcfe42158f39c2fb5619ad044bbb518ac" - integrity sha512-3Emr5VOl/aoBwnWcH/EFQvlSAmjV+XtV9GGu5mwdYew5vhQh0IUZx/60x0TzHDu09Bi7HMx10t/namdJw5QIcg== + version "29.5.2" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.2.tgz#86b4afc86e3a8f3005b297ed8a72494f89e6395b" + integrity sha512-mSoZVJF5YzGVCk+FsDxzDuH7s+SCkzrgKZzf0Z0T2WudhBUPoF6ktoTPC4R0ZoCPCV5xUvuU6ias5NvxcBcMMg== dependencies: expect "^29.0.0" pretty-format "^29.0.0" @@ -1712,10 +1799,10 @@ dependencies: "@types/unist" "*" -"@types/node@*", "@types/node@^18.11.7": - version "18.15.11" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.11.tgz#b3b790f09cb1696cffcec605de025b088fa4225f" - integrity sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q== +"@types/node@*", "@types/node@^20.3.2": + version "20.3.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.3.2.tgz#fa6a90f2600e052a03c18b8cb3fd83dd4e599898" + integrity sha512-vOBLVQeCQfIcF/2Y7eKFTqrMnizK5lRNQ7ykML/5RuwVXVWxYkgwS7xbt4B6fKCUPgbSL5FSsjHQpaGQP/dQmw== "@types/node@^14.14.31": version "14.18.42" @@ -1750,9 +1837,9 @@ "@types/react" "*" "@types/react@*", "@types/react@^18.0.31": - version "18.0.31" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.31.tgz#a69ef8dd7bfa849734d258c793a8fe343a338205" - integrity sha512-EEG67of7DsvRDU6BLLI0p+k1GojDLz9+lZsnCpCRTa/lOokvyPBvp8S5x+A24hME3yyQuIipcP70KJ6H7Qupww== + version "18.2.14" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.14.tgz#fa7a6fecf1ce35ca94e74874f70c56ce88f7a127" + integrity sha512-A0zjq+QN/O0Kpe30hA1GidzyFjatVvrpIvWLxD+xv67Vt91TWWgco9IvrJBkeyHm1trGaFS/FSGqPlhyeZRm0g== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" @@ -1888,6 +1975,11 @@ ansi-regex@^5.0.1: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" @@ -1912,6 +2004,11 @@ 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: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + anymatch@^3.0.3: version "3.1.3" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" @@ -2275,6 +2372,11 @@ 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@5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.2.0.tgz#249623b7d66869c673699fb66d65723e54dfcfb3" + integrity sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA== + chalk@^1.0.0, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" @@ -2286,7 +2388,7 @@ chalk@^1.0.0, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.4.1: +chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -2303,7 +2405,7 @@ chalk@^3.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1: +chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -2380,6 +2482,14 @@ 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== + dependencies: + slice-ansi "^5.0.0" + string-width "^5.0.0" + client-only@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1" @@ -2438,6 +2548,11 @@ colorette@^2.0.16: resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== +colorette@^2.0.19: + version "2.0.20" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== + combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -2445,15 +2560,20 @@ combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" +commander@^10.0.0: + version "10.0.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" + integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== + commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -commander@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" - integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== +commander@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" + integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== commander@^7.2.0: version "7.2.0" @@ -2663,9 +2783,9 @@ cypress-testing-library@^4.0.0: integrity sha512-KDbVw7kgEylLOZZDO4yiDlKySLzJsPLjHn5FfKL0tqCYYR3xbdIamKRap1r96/CXL8y5V05lAunnoAFQkKpIFw== cypress@^12.9.0: - version "12.9.0" - resolved "https://registry.yarnpkg.com/cypress/-/cypress-12.9.0.tgz#e6ab43cf329fd7c821ef7645517649d72ccf0a12" - integrity sha512-Ofe09LbHKgSqX89Iy1xen2WvpgbvNxDzsWx3mgU1mfILouELeXYGwIib3ItCwoRrRifoQwcBFmY54Vs0zw7QCg== + version "12.16.0" + resolved "https://registry.yarnpkg.com/cypress/-/cypress-12.16.0.tgz#d0dcd0725a96497f4c60cf54742242259847924c" + integrity sha512-mwv1YNe48hm0LVaPgofEhGCtLwNIQEjmj2dJXnAkY1b4n/NE9OtgPph4TyS+tOtYp5CKtRmDvBzWseUXQTjbTg== dependencies: "@cypress/request" "^2.88.10" "@cypress/xvfb" "^1.2.4" @@ -2681,7 +2801,7 @@ cypress@^12.9.0: check-more-types "^2.24.0" cli-cursor "^3.1.0" cli-table3 "~0.6.1" - commander "^5.1.0" + commander "^6.2.1" common-tags "^1.8.0" dayjs "^1.10.4" debug "^4.3.4" @@ -2699,7 +2819,7 @@ cypress@^12.9.0: listr2 "^3.8.3" lodash "^4.17.21" log-symbols "^4.0.0" - minimist "^1.2.6" + minimist "^1.2.8" ospath "^1.2.2" pretty-bytes "^5.6.0" proxy-from-env "1.0.0" @@ -2731,7 +2851,7 @@ dayjs@^1.10.4: resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.7.tgz#4b296922642f70999544d1144a2c25730fce63e2" integrity sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ== -debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4: +debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -2887,6 +3007,11 @@ duplexer@^0.1.1, duplexer@^0.1.2: resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" @@ -2917,6 +3042,11 @@ emoji-regex@^8.0.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + emoji-regex@~10.1.0: version "10.1.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.1.0.tgz#d50e383743c0f7a5945c47087295afc112e3cf66" @@ -3133,6 +3263,21 @@ execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" +execa@^7.0.0: + version "7.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-7.1.1.tgz#3eb3c83d239488e7b409d48e8813b76bb55c9c43" + integrity sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q== + 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" @@ -3408,11 +3553,6 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@ has "^1.0.3" has-symbols "^1.0.3" -get-own-enumerable-property-symbols@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" - integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== - get-package-type@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" @@ -3425,7 +3565,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.0, get-stream@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== @@ -3645,6 +3785,11 @@ 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== + husky@4.3.8: version "4.3.8" resolved "https://registry.yarnpkg.com/husky/-/husky-4.3.8.tgz#31144060be963fd6850e5cc8f019a1dfe194296d" @@ -3851,6 +3996,11 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== +is-fullwidth-code-point@^4.0.0: + version "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-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" @@ -3901,11 +4051,6 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg== - is-path-inside@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" @@ -3941,11 +4086,6 @@ is-regex@^1.1.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" - integrity sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA== - is-set@^2.0.1, is-set@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" @@ -3963,6 +4103,11 @@ is-stream@^2.0.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== +is-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" + integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== + is-string@^1.0.5, is-string@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" @@ -4632,7 +4777,7 @@ levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" -lilconfig@^2.0.3, lilconfig@^2.0.5: +lilconfig@2.1.0, lilconfig@^2.0.3, lilconfig@^2.0.5: version "2.1.0" resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== @@ -4642,28 +4787,26 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== -lint-staged@11.1.1: - version "11.1.1" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-11.1.1.tgz#9c2018b872654cf80b2b1ff5a10b6b74aef6e300" - integrity sha512-eTNGe6i78PSUUH2BZi1gZmGmNfb8IeN4z2OzMYxSZ1qnP1WXKn1E7D+OHwLbRDm/wQINnzIj0bsKJ6lLVSuZiQ== +lint-staged@13.2.3: + version "13.2.3" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-13.2.3.tgz#f899aad6c093473467e9c9e316e3c2d8a28f87a7" + integrity sha512-zVVEXLuQIhr1Y7R7YAWx4TZLdvuzk7DnmrsTNL0fax6Z3jrpFcas+vKbzxhhvp6TA55m1SQuWkpzI1qbfDZbAg== dependencies: - chalk "^4.1.1" - cli-truncate "^2.1.0" - commander "^7.2.0" - cosmiconfig "^7.0.0" - debug "^4.3.1" - dedent "^0.7.0" - enquirer "^2.3.6" - execa "^5.0.0" - listr2 "^3.8.2" - log-symbols "^4.1.0" - micromatch "^4.0.4" + chalk "5.2.0" + cli-truncate "^3.1.0" + commander "^10.0.0" + debug "^4.3.4" + execa "^7.0.0" + lilconfig "2.1.0" + listr2 "^5.0.7" + micromatch "^4.0.5" normalize-path "^3.0.0" - please-upgrade-node "^3.2.0" - string-argv "0.3.1" - stringify-object "^3.3.0" + object-inspect "^1.12.3" + pidtree "^0.6.0" + string-argv "^0.3.1" + yaml "^2.2.2" -listr2@^3.8.2, listr2@^3.8.3: +listr2@^3.8.3: version "3.14.0" resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.14.0.tgz#23101cc62e1375fd5836b248276d1d2b51fdbe9e" integrity sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g== @@ -4677,6 +4820,20 @@ listr2@^3.8.2, listr2@^3.8.3: through "^2.3.8" wrap-ansi "^7.0.0" +listr2@^5.0.7: + version "5.0.8" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-5.0.8.tgz#a9379ffeb4bd83a68931a65fb223a11510d6ba23" + integrity sha512-mC73LitKHj9w6v30nLNGPetZIlfpUniNSsxxrbaPcWOjDb92SHPzJPi/t+v1YC/lxKz/AJ9egOjww0qUuFxBpA== + dependencies: + cli-truncate "^2.1.0" + colorette "^2.0.19" + log-update "^4.0.0" + p-map "^4.0.0" + rfdc "^1.3.0" + rxjs "^7.8.0" + through "^2.3.8" + wrap-ansi "^7.0.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" @@ -4766,7 +4923,7 @@ lodash@^4.17.15, lodash@^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.1.0: +log-symbols@^4.0.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== @@ -5082,7 +5239,7 @@ micromark@^2.11.3, micromark@~2.11.0, micromark@~2.11.3: debug "^4.0.0" parse-entities "^2.0.0" -micromatch@^4.0.4: +micromatch@^4.0.4, micromatch@^4.0.5: version "4.0.5" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== @@ -5107,6 +5264,11 @@ mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== +mimic-fn@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" + integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== + min-indent@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" @@ -5133,7 +5295,7 @@ minimatch@^7.4.1: dependencies: brace-expansion "^2.0.1" -minimist@^1.2.6: +minimist@^1.2.6, minimist@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== @@ -5255,6 +5417,13 @@ npm-run-path@^4.0.0, npm-run-path@^4.0.1: dependencies: 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== + dependencies: + path-key "^4.0.0" + nth-check@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" @@ -5328,6 +5497,13 @@ open@^8.4.0: is-docker "^2.1.1" is-wsl "^2.2.0" +onetime@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" + integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== + dependencies: + mimic-fn "^4.0.0" + opencollective-postinstall@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz#7a0fff978f6dbfa4d006238fbac98ed4198c3259" @@ -5474,6 +5650,11 @@ path-key@^3.0.0, path-key@^3.1.0: resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== +path-key@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" + integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== + path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" @@ -5524,6 +5705,11 @@ pidtree@^0.3.0: resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.3.1.tgz#ef09ac2cc0533df1f3250ccf2c4d366b0d12114a" integrity sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA== +pidtree@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c" + integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g== + pify@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -5848,10 +6034,10 @@ prelude-ls@~1.1.2: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== -prettier@2.8.7: - version "2.8.7" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.7.tgz#bb79fc8729308549d28fe3a98fce73d2c0656450" - integrity sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw== +prettier@2.8.8: + version "2.8.8" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" + integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== pretty-bytes@^3.0.0: version "3.0.1" @@ -6237,6 +6423,13 @@ rxjs@^7.5.1: dependencies: tslib "^2.1.0" +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" + sade@^1.7.4: version "1.8.1" resolved "https://registry.yarnpkg.com/sade/-/sade-1.8.1.tgz#0a78e81d658d394887be57d2a409bf703a3b2701" @@ -6293,19 +6486,19 @@ semver-regex@^3.1.2: integrity sha512-6IiqeZNgq01qGf0TId0t3NvKzSvUsjcpdEO3AQNeIjR6A2+ckTnQlDpl4qu1bjRv0RzN3FP9hzFmws3lKqRWkA== "semver@2 || 3 || 4 || 5", semver@^5.5.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== semver@^7.3.2, semver@^7.3.5: - version "7.3.8" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" - integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + 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== dependencies: lru-cache "^6.0.0" @@ -6387,6 +6580,14 @@ slice-ansi@^4.0.0: astral-regex "^2.0.0" is-fullwidth-code-point "^3.0.0" +slice-ansi@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a" + integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== + dependencies: + ansi-styles "^6.0.0" + is-fullwidth-code-point "^4.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" @@ -6488,10 +6689,10 @@ stop-iteration-iterator@^1.0.0: dependencies: internal-slot "^1.0.4" -string-argv@0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" - integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== +string-argv@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6" + integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q== string-hash@^1.1.1: version "1.1.3" @@ -6515,6 +6716,15 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" +string-width@^5.0.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + string.prototype.matchall@^4.0.6: version "4.0.8" resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3" @@ -6565,15 +6775,6 @@ string.prototype.trimstart@^1.0.6: define-properties "^1.1.4" es-abstract "^1.20.4" -stringify-object@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" - integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== - dependencies: - get-own-enumerable-property-symbols "^3.0.0" - is-obj "^1.0.1" - is-regexp "^1.0.0" - strip-ansi@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" @@ -6588,6 +6789,13 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" +strip-ansi@^7.0.1: + version "7.1.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== + dependencies: + ansi-regex "^6.0.1" + strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" @@ -6603,6 +6811,11 @@ strip-final-newline@^2.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== +strip-final-newline@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" + integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== + strip-indent@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" @@ -6829,9 +7042,9 @@ typescript@^4.1.3: integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== typescript@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.0.3.tgz#fe976f0c826a88d0a382007681cbb2da44afdedf" - integrity sha512-xv8mOEDnigb/tN9PSMTwSEqAnUvkoXMQlicOb0IUVDBSQCgBSaAAROUZYy2IcUy5qU6XajK5jjjO7TMWqBTKZA== + version "5.1.6" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.1.6.tgz#02f8ac202b6dad2c0dd5e0913745b47a37998274" + integrity sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA== unbox-primitive@^1.0.2: version "1.0.2" @@ -7085,9 +7298,9 @@ which@^2.0.1: isexe "^2.0.0" word-wrap@~1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + version "1.2.5" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== wrap-ansi@^6.2.0: version "6.2.0" @@ -7160,6 +7373,11 @@ yaml@^1.10.0, yaml@^1.10.2: resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== +yaml@^2.2.2: + version "2.3.1" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.1.tgz#02fe0975d23cd441242aa7204e09fc28ac2ac33b" + integrity sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ== + yargs-parser@^21.1.1: version "21.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35"