diff --git a/README.md b/README.md
index 2376aec..9038db0 100644
--- a/README.md
+++ b/README.md
@@ -15,6 +15,8 @@ With `gatsby-transformer-cloudinary` you may:
- [Install Packages](#install-packages)
- [Configure Plugins](#configure-plugins)
- [Example usage](#example-usage)
+ - [Sanity.io Configuration](#sanityio-configuration)
+ - [Contentful Configuration](#contentful-configuration)
- [📤 Upload local images and add Gatsby Image Support](#📤-upload-local-images-and-add-gatsby-image-support)
- [Install Packages](#install-packages-1)
- [Configure Plugins](#configure-plugins-1)
@@ -32,14 +34,11 @@ With `gatsby-transformer-cloudinary` you may:
## 🖼️ Add Gatsby Image Support to Existing Cloudinary Assets
-Use assets hosted by Cloudinary together with Gatsby's Image component:
+Information about Existing Cloudinary Assets is sourced into the Gatsby data layer using a plugin like [gatsby-source-contentful](https://www.gatsbyjs.com/plugins/gatsby-source-contentful/), [gatsby-source-sanity](https://www.gatsbyjs.com/plugins/gatsby-source-sanity/) etc. or a custom source plugin.
-- The plugin adds the `gatsbyImageData` resolver to each GraphQLType configured.
+- The plugin adds the `gatsbyImageData` resolver to the sourced GraphQL Types configured.
-
-This configuration and example assumes your Gatsby Data Layer has at least one node of type `BlogPost` with a `heroImage` field describing an already uploaded Cloudinary asset.
-
-👉 More details in [Transform Type Requierments](#transform-type-requierments).
+The GraphQL Type must describe an existing Cloudinary asset and [contain the following data](#transform-type-requierments).
### Install Packages
@@ -60,11 +59,16 @@ yarn add gatsby-transformer-cloudinary gatsby-plugin-image
module.exports = {
plugins: [
+ // Some source plugin creating a GraphQL Type named `BlogPostHeroImage`
{
resolve: `gatsby-transformer-cloudinary`,
options: {
- // Add the `gatsbyImageData` resolver to `BlogPostHeroImage`
- transformTypes: [`BlogPostHeroImage`],
+ transformTypes: [
+ // Assumes a GraphQL Type named `BlogPostHeroImage`
+ // Could be a `BlogPost` node with a `heroImage` field
+ // with the required data shape
+ `BlogPostHeroImage`,
+ ],
// Optional transformation option
defaultTransformations: ['c_fill', 'g_auto', 'q_auto'],
},
@@ -114,30 +118,162 @@ export const query = graphql`
export default BlogPost;
```
-### Transform Type Requierments
+### Transform Type Requirements
-You may add Gatsby Image support to any GraphQL Type describing a Cloudinary assets with this data shape:
+Gatsby Image support may be added to any GraphQL Type describing a Cloudinary asset with the following information:
```js
{
// Required
- cloudName: "my-amazing-blog",
- publicId: "blue-blue-blue",
+ cloud_name: "my-amazing-blog",
+ public_id: "blue-blue-blue",
// Optional: Saves a network request for size/format data per image queried if all are added
- originalHeight: 360,
- originalWidth: 820,
- originalFormat: "jpg",
+ heigh: 360,
+ width: 820,
+ format: "jpg",
// Optional: Saves a Cloudinary transformation per image queried with `placeholder=BLURRED` as this value will be used instead
- defaultBase64: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mMMXG/8HwAEwAI0Bj1bnwAAAABJRU5ErkJggg==",
+ base64: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mMMXG/8HwAEwAI0Bj1bnwAAAABJRU5ErkJggg==",
// Optional: Saves a Cloudinary transformation per image queried with `placeholder=TRACED_SVG` as this value will be used instead
- defaultTracedSVG: "data:image/svg+xml,%3Csvg%20height%3D%229999%22%20viewBox%3D%220%200%209999%209999%22%20width%3D%229999%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22m0%200h9999v9999h-9999z%22%20fill%3D%22%23f9fafb%22%2F%3E%3C%2Fsvg%3E",
+ tracedSVG: "data:image/svg+xml,%3Csvg%20height%3D%229999%22%20viewBox%3D%220%200%209999%209999%22%20width%3D%229999%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22m0%200h9999v9999h-9999z%22%20fill%3D%22%23f9fafb%22%2F%3E%3C%2Fsvg%3E",
}
```
-To find the GraphQL Type describing your Cloudinary assets use the built in [GraphiQL exlorer](https://www.gatsbyjs.com/docs/how-to/querying-data/running-queries-with-graphiql/). Either hover over the field describing the asset, or look in the "Documentation Explorer".
+If the GraphQL Type does not have the required data shape, you may use the `mapping` option to map the data from the sourced data shape to the required data shape:
+
+```js
+// File: ./gatsby-config.js
+
+module.exports = {
+ plugins: [
+ // Some source plugin creating a GraphQL Type named `BlogPostHeroImage`
+ {
+ resolve: `gatsby-transformer-cloudinary`,
+ options: {
+ transformTypes: [
+ {
+ type: `CustomType`,
+ mapping: {
+ // Use a static value
+ cloudName: () => 'my-cloud',
+ // Use a differnt key than the default
+ publicId: 'thePublicId', // default for publicId is `public_id`
+ // Resolve a value using a function
+ height: (data) => data.dimensions?.height,
+ width: (data) => data.dimentions?.width,
+ },
+ },
+ ],
+ // Optional transformation option
+ defaultTransformations: ['c_fill', 'g_auto', 'q_auto'],
+ },
+ },
+ `gatsby-plugin-image`,
+ ],
+};
+```
+
+To find the GraphQL Type describing your Cloudinary assets use the built-in [GraphiQL exlorer](https://www.gatsbyjs.com/docs/how-to/querying-data/running-queries-with-graphiql/)](https://www.gatsbyjs.com/docs/how-to/querying-data/running-queries-with-graphiql/). Either hover over the field describing the asset or look in the "Documentation Explorer".
`defaultBase64` and `defaultTracedSVG` is the base64 URI of the placeholder image, it must comply with [RFC 2397](https://tools.ietf.org/html/rfc2397).
+### Sanity.io Configuration
+
+If you are using [Sanity.io](https://www.sanity.io/) and the [gatsby-source-sanity](https://www.gatsbyjs.com/plugins/gatsby-source-sanity/) plugin use the following configuration to add the `gatsbyImageData` resolver to the sourced Sanity Cloudinary assets:
+
+```js
+// File: ./gatsby-config.js
+
+module.exports = {
+ plugins: [
+ {
+ resolve: `gatsby-source-sanity`,
+ options: {
+ projectId: process.env.SANITY_PROJECT_ID,
+ dataset: process.env.SANITY_DATASET,
+ token: process.env.SANITY_TOKEN,
+ },
+ },
+ {
+ resolve: `gatsby-transformer-cloudinary`,
+ options: {
+ transformTypes: [
+ {
+ type: 'SanityCloudinaryAsset',
+ mapping: {
+ // Dynamically get the cloud name
+ // from SanityCloudinaryAsset.url
+ cloudName: (data) => {
+ const findCloudName = new RegExp(
+ '(cloudinary.com/)([^/]+)',
+ 'i'
+ );
+ const result = data.url.match(findCloudName);
+ return result[1];
+ },
+ // Or set it statically if all assets are from the same cloud
+ // cloudName: () => "my-cloud",
+ },
+ },
+ ],
+ // Optional transformation option
+ defaultTransformations: ['c_fill', 'g_auto', 'q_auto'],
+ },
+ },
+ `gatsby-plugin-image`,
+ ],
+};
+```
+
+### Contentful Configuration
+
+If you are using [Contentful](https://www.contentful.com/) and the [gatsby-source-contentful](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-contentful) plugin use the following configuration to add the `gatsbyImageData` resolver to the sourced Cloudinary assets:
+
+```js
+// File: ./gatsby-config.js
+
+module.exports = {
+ plugins: [
+ {
+ resolve: `gatsby-source-contentful`,
+ options: {
+ spaceId: process.env.CONTENTFUL_SPACE_ID,
+ accessToken: process.env.CONTENTFUL_ACCESS_TOKEN,
+ },
+ },
+ {
+ resolve: `gatsby-transformer-cloudinary`,
+ options: {
+ transformTypes: [
+ {
+ // ❗❕ Replace `contentfulBlogPostFeaturedImageJsonNode`
+ // with the name of the GraphQL Type describing your Cloudinary assets
+ // will always start with `contentful` and end with `JsonNode`
+ type: 'contentfulBlogPostFeaturedImageJsonNode',
+ mapping: {
+ // Dynamically get the cloud name
+ // from SanityCloudinaryAsset.url
+ cloudName: (data) => {
+ const findCloudName = new RegExp(
+ '(cloudinary.com/)([^/]+)',
+ 'i'
+ );
+ const result = data.url.match(findCloudName);
+ return result[1];
+ },
+ // Or set it statically if all assets are from the same cloud
+ // cloudName: () => "my-cloud",
+ },
+ },
+ ],
+ // Optional transformation option
+ defaultTransformations: ['c_fill', 'g_auto', 'q_auto'],
+ },
+ },
+ `gatsby-plugin-image`,
+ ],
+};
+```
+
## 📤 Upload Local Images and Add Gatsby Image Support
@@ -439,7 +575,7 @@ An optional array limiting uploads to file nodes with a matching `sourceInstance
An optional array of GraphQL Types to add the `gatsbyImageData` resolver for Gatsby Image support.
-**Type:** `[String]`\
+**Type:** `[String] | [Object]`\
**Default:** `['CloudinaryAsset']`
### `overwriteExisting`
@@ -533,7 +669,6 @@ Read the [Gatsby Plugin Image Docs](https://www.gatsbyjs.com/docs/reference/buil
- [Using Cloudinary image service for media optimization](https://www.gatsbyjs.org/docs/using-cloudinary-image-service/)
- [Watch Jason Lengstorf build this plugin's first version](https://www.learnwithjason.dev/build-a-gatsby-transformer-plugin-for-cloudinary)
-
## 🏴☠️ Contribute
diff --git a/demo/gatsby-config.js b/demo/gatsby-config.js
index fb2d65f..249025c 100644
--- a/demo/gatsby-config.js
+++ b/demo/gatsby-config.js
@@ -12,9 +12,17 @@ module.exports = {
resolve: `gatsby-source-filesystem`,
options: {
name: `images`,
- path: `${__dirname}/src/images`,
+ path: `${__dirname}/src/content/images`,
},
},
+ {
+ resolve: `gatsby-source-filesystem`,
+ options: {
+ name: `images`,
+ path: `${__dirname}/src/content/manual-tests`,
+ },
+ },
+ `gatsby-transformer-remark`,
{
resolve: `gatsby-plugin-image`,
},
@@ -32,6 +40,23 @@ module.exports = {
'BlogPostHeroImage',
'VariedData',
'EmptyDataCloudinary',
+ 'MarkdownRemarkFrontmatterHeroImage',
+ // {
+ // name: 'MarkdownRemarkFrontmatterHeroImage',
+ // mapping: {
+ // cloudName: `cloudName`,
+ // publicId: `publicId`,
+ // }
+ // },
+ {
+ type: 'MarkdownRemarkFrontmatterHeroImageWithUnconformingShape',
+ mapping: {
+ cloudName: `a_cloud_name`,
+ publicId: (data) => {
+ return data['a_public_id'];
+ },
+ },
+ },
],
},
},
diff --git a/demo/package.json b/demo/package.json
index 2a261f8..cf047d3 100644
--- a/demo/package.json
+++ b/demo/package.json
@@ -8,6 +8,7 @@
"gatsby-plugin-image": "3.3.2",
"gatsby-source-filesystem": "5.3.1",
"gatsby-transformer-cloudinary": "*",
+ "gatsby-transformer-remark": "^6.13.0",
"react": "18.2.0",
"react-dom": "18.2.0"
},
diff --git a/demo/src/images/giphyCat.gif b/demo/src/content/images/giphyCat.gif
similarity index 100%
rename from demo/src/images/giphyCat.gif
rename to demo/src/content/images/giphyCat.gif
diff --git a/demo/src/images/joppe-spaa-unsplash.jpeg b/demo/src/content/images/joppe-spaa-unsplash.jpeg
similarity index 100%
rename from demo/src/images/joppe-spaa-unsplash.jpeg
rename to demo/src/content/images/joppe-spaa-unsplash.jpeg
diff --git a/demo/src/images/sergey-semin-unsplash.jpeg b/demo/src/content/images/sergey-semin-unsplash.jpeg
similarity index 100%
rename from demo/src/images/sergey-semin-unsplash.jpeg
rename to demo/src/content/images/sergey-semin-unsplash.jpeg
diff --git a/demo/src/content/manual-tests/test1.md b/demo/src/content/manual-tests/test1.md
new file mode 100644
index 0000000..5dd57c3
--- /dev/null
+++ b/demo/src/content/manual-tests/test1.md
@@ -0,0 +1,12 @@
+---
+title: Data Shape Tests
+slug: shape-tests
+heroImage:
+ cloudName: lilly-labs-consulting
+ publicId: gatsby-transformer-cloudinary-demo/photo-1631462685412-80a75dd611bc
+ alt: A fine hero image from Cloudinary
+heroImageWithUnconformingShape:
+ a_cloud_name: lilly-labs-consulting
+ a_public_id: gatsby-transformer-cloudinary-demo/photo-1631462685412-80a75dd611bc
+ alt: A fine hero image from Cloudinary
+---
diff --git a/demo/src/pages/manual-tests/{markdownRemark.frontmatter__slug}.js b/demo/src/pages/manual-tests/{markdownRemark.frontmatter__slug}.js
new file mode 100644
index 0000000..81293a4
--- /dev/null
+++ b/demo/src/pages/manual-tests/{markdownRemark.frontmatter__slug}.js
@@ -0,0 +1,55 @@
+import * as React from 'react';
+import { graphql } from 'gatsby';
+import { GatsbyImage } from 'gatsby-plugin-image';
+
+export default function BlogPostTemplate({ data }) {
+ const { markdownRemark } = data;
+ const { frontmatter, html } = markdownRemark;
+ const { title, heroImage, heroImageWithUnconformingShape } = frontmatter;
+ return (
+ <>
+
{title}
+
+ {heroImage?.gatsbyImageData ? (
+
+ ) : (
+
+ No gatsby image for heroImage
+
+ )}
+
+ {heroImageWithUnconformingShape?.gatsbyImageData ? (
+
+ ) : (
+
+ No gatsby image for heroImageWithUnconformingShape
+
+ )}
+
+
+ >
+ );
+}
+
+export const pageQuery = graphql`
+ query ($id: String!) {
+ markdownRemark(id: { eq: $id }) {
+ html
+ frontmatter {
+ slug
+ title
+ heroImage {
+ gatsbyImageData(height: 200, layout: FIXED)
+ alt
+ }
+ heroImageWithUnconformingShape {
+ gatsbyImageData(height: 200, layout: FIXED)
+ alt
+ }
+ }
+ }
+ }
+`;
diff --git a/plugin/gatsby-node.js b/plugin/gatsby-node.js
index 4c05ea0..6df3ee0 100644
--- a/plugin/gatsby-node.js
+++ b/plugin/gatsby-node.js
@@ -27,7 +27,35 @@ exports.pluginOptionsSchema = ({ Joi }) => {
uploadFolder: Joi.string(),
uploadSourceInstanceNames: Joi.array().items(Joi.string()),
transformTypes: Joi.array()
- .items(Joi.string())
+ .items(
+ Joi.string(),
+ Joi.object({
+ type: Joi.string().required(),
+ mapping: Joi.object({
+ cloudName: Joi.alternatives()
+ .try(Joi.function(), Joi.string())
+ .default('cloud_name'),
+ publicId: Joi.alternatives()
+ .try(Joi.function(), Joi.string())
+ .default('public_id'),
+ height: Joi.alternatives()
+ .try(Joi.function(), Joi.string())
+ .default('height'),
+ width: Joi.alternatives()
+ .try(Joi.function(), Joi.string())
+ .default('width'),
+ format: Joi.alternatives()
+ .try(Joi.function(), Joi.string())
+ .default('format'),
+ base64: Joi.alternatives()
+ .try(Joi.function(), Joi.string())
+ .default('base64'),
+ tracedSVG: Joi.alternatives()
+ .try(Joi.function(), Joi.string())
+ .default('tracedSVG'),
+ }),
+ })
+ )
.default(['CloudinaryAsset']),
overwriteExisting: Joi.boolean().default(false),
defaultTransformations: Joi.array()
diff --git a/plugin/gatsby-node.test.js b/plugin/gatsby-node.test.js
index 0c11c29..8c1ad37 100644
--- a/plugin/gatsby-node.test.js
+++ b/plugin/gatsby-node.test.js
@@ -40,12 +40,121 @@ describe('pluginOptionsSchema', () => {
`"apiSecret" must be a string`,
`"uploadFolder" must be a string`,
`"uploadSourceInstanceNames" must be an array`,
- `"transformTypes[0]" must be a string`,
+ `"transformTypes[0]" does not match any of the allowed types`,
`"overwriteExisting" must be a boolean`,
`"defaultTransformations" must be an array`,
]);
});
+ test('should invalidate incorrect transform type config', async () => {
+ // cloudName, apiKey, apiSecret
+ // only needed if uploading
+ const options = {
+ transformTypes: [
+ 'Type0',
+ {
+ type: 'Type1',
+ mapping: {
+ cloudName: 'cloud_name',
+ publicId: 'public_id',
+ height: () => 400,
+ width: 'the_width',
+ format: () => 'jpg',
+ base64: () => 'base64',
+ tracedSVG: () => 'tracedSVG',
+ },
+ },
+ {
+ type: undefined, // Missing type
+ mapping: {
+ cloudName: 'cloud_name',
+ publicId: 'public_id',
+ height: () => 400,
+ width: 'the_width',
+ format: () => 'jpg',
+ base64: () => 'base64',
+ tracedSVG: () => 'tracedSVG',
+ },
+ },
+ {
+ type: 'Type3',
+ mapping: {
+ cloudName: 'cloud_name',
+ publicId: 'public_id',
+ height: 400, // height is a number
+ width: 'the_width',
+ format: () => 'jpg',
+ base64: () => 'base64',
+ tracedSVG: () => 'tracedSVG',
+ },
+ },
+ {
+ type: 'Type4',
+ mapping: {
+ cloudName: 'cloud_name',
+ publicId: 'public_id',
+ height: 'the_height',
+ width: 700, // width is string, not number or function
+ format: () => 'jpg',
+ base64: 'base64',
+ tracedSVG: 'tracedSVG',
+ },
+ },
+ {
+ type: 'Type5',
+ mapping: {
+ cloudName: 'cloud_name',
+ publicId: 'public_id',
+ height: 300,
+ width: () => 200,
+ format: new Date('Hello'), // format is not string or function
+ base64: () => 'base64',
+ tracedSVG: () => 'tracedSVG',
+ },
+ },
+ {
+ type: 'Type6',
+ mapping: {
+ cloudName: 'cloud_name',
+ publicId: 'public_id',
+ height: 300,
+ width: () => 200,
+ format: 'png',
+ base64: 2342, // base64 is not string or function
+ tracedSVG: () => 'tracedSVG',
+ },
+ },
+ {
+ type: 'Type7',
+ mapping: {
+ cloudName: 'cloud_name',
+ publicId: 'public_id',
+ height: 300,
+ width: () => 200,
+ format: 'png',
+ base64: 'base64',
+ tracedSVG: 224, // tracedSVG is not string or function
+ },
+ },
+ ],
+ };
+
+ const { isValid, errors } = await testPluginOptionsSchema(
+ pluginOptionsSchema,
+ options
+ );
+
+ expect(isValid).toBe(false);
+ expect(errors).toEqual([
+ `"transformTypes[2]" does not match any of the allowed types`,
+ `"transformTypes[3]" does not match any of the allowed types`,
+ `"transformTypes[4]" does not match any of the allowed types`,
+ `"transformTypes[5]" does not match any of the allowed types`,
+ `"transformTypes[6]" does not match any of the allowed types`,
+ `"transformTypes[7]" does not match any of the allowed types`,
+ ]);
+ });
+
test('should add defaults', async () => {
const schema = pluginOptionsSchema({ Joi });
const options = {
diff --git a/plugin/gatsby-plugin-image/index.js b/plugin/gatsby-plugin-image/index.js
index bd4a88c..dd6216b 100644
--- a/plugin/gatsby-plugin-image/index.js
+++ b/plugin/gatsby-plugin-image/index.js
@@ -1,26 +1,57 @@
const { createGatsbyPluginImageResolver } = require('./resolvers');
+const amendTransformTypeMapping = (mapping) => {
+ return [
+ 'cloudName',
+ 'publicId',
+ 'height',
+ 'width',
+ 'format',
+ 'base64',
+ 'tracedSVG',
+ ].reduce((acc, key) => {
+ if (typeof mapping[key] === 'function') {
+ // Example config: { publicId: (data) => data['a_public_id'] }
+ // Use the configued function to get the field value
+ acc[key] = mapping[key];
+ } else if (typeof mapping[key] === 'string') {
+ // Example config: { publicId: 'a_public_id' }
+ // Use the configured key as the field name
+ acc[key] = (source) => source[mapping[key]];
+ } else {
+ // Use the key as the field name
+ acc[key] = (source) => source[key];
+ }
+ return acc;
+ }, {});
+};
+
+exports._amendTransformTypeMapping = amendTransformTypeMapping;
+
exports.createGatsbyImageDataResolver = (gatsbyUtils, pluginOptions) => {
const { createResolvers } = gatsbyUtils;
const { transformTypes } = pluginOptions;
- const gatsbyImageResolver = createGatsbyPluginImageResolver(
- gatsbyUtils,
- pluginOptions
- );
-
- if (gatsbyImageResolver) {
- const resolvers = {};
- // Make the resolver nullable, createGatsbyPluginImageResolver sets the type to 'GatsbyImageData!'
- gatsbyImageResolver.type = 'GatsbyImageData';
-
- transformTypes.forEach((type) => {
- // Add gatsbyImageData resolver
- // to all types that should be transformed
- resolvers[type] = {
+
+ const resolvers = {};
+
+ transformTypes.forEach((transformType) => {
+ const transformTypeConfig = {
+ type: transformType.type || transformType,
+ mapping: amendTransformTypeMapping(transformType.mapping || {}),
+ };
+
+ const gatsbyImageResolver = createGatsbyPluginImageResolver(
+ gatsbyUtils,
+ transformTypeConfig,
+ { transformations: pluginOptions.defaultTransformations, secure: true }
+ );
+
+ if (gatsbyImageResolver) {
+ resolvers[transformTypeConfig.type] = {
gatsbyImageData: gatsbyImageResolver,
};
- });
+ }
+ });
- createResolvers(resolvers);
- }
+ createResolvers(resolvers);
};
diff --git a/plugin/gatsby-plugin-image/index.test.js b/plugin/gatsby-plugin-image/index.test.js
new file mode 100644
index 0000000..2b771be
--- /dev/null
+++ b/plugin/gatsby-plugin-image/index.test.js
@@ -0,0 +1,180 @@
+const {
+ createGatsbyImageDataResolver,
+ _amendTransformTypeMapping,
+} = require('./index');
+
+const gatsbyUtilsMocks = {
+ createResolvers: jest.fn(),
+};
+
+describe('_amendTransformTypeConfig', () => {
+ it('defaults to using the field name as key', () => {
+ const ammendedMapping = _amendTransformTypeMapping({});
+
+ const source = {
+ publicId: 'a publicId',
+ cloudName: 'a cloudName',
+ height: 300,
+ width: 200,
+ format: 'a format',
+ base64: 'a base64',
+ tracedSVG: 'a tracedSVG',
+ };
+
+ expect({
+ publicId: ammendedMapping.publicId(source),
+ cloudName: ammendedMapping.cloudName(source),
+ height: ammendedMapping.height(source),
+ width: ammendedMapping.width(source),
+ format: ammendedMapping.format(source),
+ base64: ammendedMapping.base64(source),
+ tracedSVG: ammendedMapping.tracedSVG(source),
+ }).toEqual(source);
+ });
+
+ it('allows field name config', () => {
+ const originalMapping = {
+ publicId: 'field1',
+ cloudName: 'field2',
+ height: 'field3',
+ width: 'field4',
+ format: 'field5',
+ base64: 'field6',
+ tracedSVG: 'field7',
+ };
+ const ammenedMapping = _amendTransformTypeMapping(originalMapping);
+
+ const source = {
+ field1: 'a publicId',
+ field2: 'a cloudName',
+ field3: 300,
+ field4: 200,
+ field5: 'a format',
+ field6: 'a base64',
+ field7: 'a tracedSVG',
+ };
+
+ const asset = {
+ publicId: 'a publicId',
+ cloudName: 'a cloudName',
+ height: 300,
+ width: 200,
+ format: 'a format',
+ base64: 'a base64',
+ tracedSVG: 'a tracedSVG',
+ };
+
+ expect({
+ publicId: ammenedMapping.publicId(source),
+ cloudName: ammenedMapping.cloudName(source),
+ height: ammenedMapping.height(source),
+ width: ammenedMapping.width(source),
+ format: ammenedMapping.format(source),
+ base64: ammenedMapping.base64(source),
+ tracedSVG: ammenedMapping.tracedSVG(source),
+ }).toEqual(asset);
+ });
+
+ it('allows function config', () => {
+ const originalMapping = {
+ publicId: (source) => {
+ return source.field1;
+ },
+ cloudName: () => {
+ return 'cloud five';
+ },
+ height: (source) => {
+ return source.field3.height;
+ },
+ width: () => {
+ return 200;
+ },
+ format: (source) => {
+ return source.field5.toLowerCase();
+ },
+ base64: (source) => {
+ return source.field6.toUpperCase();
+ },
+ tracedSVG: (source) => {
+ return undefined;
+ },
+ };
+ const ammendedMapping = _amendTransformTypeMapping(originalMapping);
+
+ const source = {
+ field1: 'a publicId',
+ field2: 'a cloudName', // will not be used
+ field3: { height: 300 },
+ field4: 200, // will not be used
+ field5: 'A FORMAT',
+ field6: 'a base64',
+ field7: 'a tracedSVG', // will not be used
+ };
+
+ const asset = {
+ publicId: 'a publicId',
+ cloudName: 'cloud five',
+ height: 300,
+ width: 200,
+ format: 'a format',
+ base64: 'A BASE64',
+ tracedSVG: undefined,
+ };
+
+ expect({
+ publicId: ammendedMapping.publicId(source),
+ cloudName: ammendedMapping.cloudName(source),
+ height: ammendedMapping.height(source),
+ width: ammendedMapping.width(source),
+ format: ammendedMapping.format(source),
+ base64: ammendedMapping.base64(source),
+ tracedSVG: ammendedMapping.tracedSVG(source),
+ }).toEqual(asset);
+ });
+});
+
+describe('createGatsbyImageDataResolver', () => {
+ it('creates a resolver', () => {
+ const pluginOptions = {
+ defaultTransformations: ['c_fill', 'g_auto', 'q_auto'],
+ transformTypes: ['CloudinaryAsset', { type: 'CloudinaryAsset2' }],
+ };
+
+ createGatsbyImageDataResolver(gatsbyUtilsMocks, pluginOptions);
+
+ expect(gatsbyUtilsMocks.createResolvers).toBeCalledWith({
+ CloudinaryAsset: expect.objectContaining({
+ gatsbyImageData: expect.objectContaining({
+ type: 'GatsbyImageData',
+ resolve: expect.any(Function),
+ args: expect.objectContaining({
+ transformations: expect.objectContaining({
+ defaultValue: ['c_fill', 'g_auto', 'q_auto'],
+ type: '[String]',
+ }),
+ secure: expect.objectContaining({
+ defaultValue: true,
+ type: 'Boolean',
+ }),
+ }),
+ }),
+ }),
+ CloudinaryAsset2: expect.objectContaining({
+ gatsbyImageData: expect.objectContaining({
+ type: 'GatsbyImageData',
+ resolve: expect.any(Function),
+ args: expect.objectContaining({
+ transformations: expect.objectContaining({
+ defaultValue: ['c_fill', 'g_auto', 'q_auto'],
+ type: '[String]',
+ }),
+ secure: expect.objectContaining({
+ defaultValue: true,
+ type: 'Boolean',
+ }),
+ }),
+ }),
+ }),
+ });
+ });
+});
diff --git a/plugin/gatsby-plugin-image/resolve-asset.js b/plugin/gatsby-plugin-image/resolve-asset.js
index 487268d..12cf8dd 100644
--- a/plugin/gatsby-plugin-image/resolve-asset.js
+++ b/plugin/gatsby-plugin-image/resolve-asset.js
@@ -41,34 +41,34 @@ const generateCloudinaryAssetSource = (
return imageSource;
};
-const generateMetadata = async (source, args, transformType, reporter) => {
+const validateMetadataAndFetchIfNeeded = async (
+ cldAssetSource,
+ args,
+ reporter
+) => {
const schema = Joi.object({
width: Joi.number().positive().required(),
height: Joi.number().positive().required(),
format: Joi.string().default('auto'),
}).required();
- const originalMetadata = {
- width: source.originalWidth,
- height: source.originalHeight,
- format: source.originalFormat,
- };
-
- const { value, error } = schema.validate(originalMetadata);
+ const { value, error } = schema.validate(cldAssetSource, {
+ stripUnknown: true,
+ });
if (!error) {
- // Original metadata is valid,
- // use validated value
return value;
}
try {
- // Lacking metadata, so let's fetch it
reporter.verbose(
- `[gatsby-transformer-cloudinary] Missing metadata fields on ${transformType}: cloudName=${source.cloudName}, publicId=${source.publicId} >>> To save on network requests add originalWidth, originalHeight and originalFormat to ${transformType}`
+ `[gatsby-transformer-cloudinary] Missing metadata fields on ${cldAssetSource.type}: cloudName=${cldAssetSource.cloudName}, publicId=${cldAssetSource.publicId} >>> To save on network requests add width, height and format to ${cldAssetSource.transformType}`
);
- const fetchedMetadata = await getAssetMetadata({ source, args });
+ const fetchedMetadata = await getAssetMetadata({
+ source: cldAssetSource,
+ args,
+ });
const { value, error } = schema.validate(fetchedMetadata);
if (!error) {
@@ -78,14 +78,44 @@ const generateMetadata = async (source, args, transformType, reporter) => {
} else {
// Fetched metadata is not valid
reporter.verbose(
- `[gatsby-transformer-cloudinary] Invalid fetched metadata for ${transformType}: cloudName=${source.cloudName}, publicId=${source.publicId} >>> ${error.message}`
+ `[gatsby-transformer-cloudinary] Invalid fetched metadata for ${cldAssetSource.type}: cloudName=${cldAssetSource.cloudName}, publicId=${cldAssetSource.publicId} >>> ${error.message}`
);
return null;
}
} catch (error) {
// Error fetching
reporter.verbose(
- `[gatsby-transformer-cloudinary] Could not fetch metadata for ${transformType}: cloudName=${source.cloudName}, publicId=${source.publicId} >>> ${error.message}`
+ `[gatsby-transformer-cloudinary] Could not fetch metadata for ${cldAssetSource.type}: cloudName=${cldAssetSource.cloudName}, publicId=${cldAssetSource.publicId} >>> ${error.message}`
+ );
+ return null;
+ }
+};
+
+const validateRequiredData = (cldAssetSource, reporter) => {
+ const schema = Joi.object({
+ cloudName: Joi.string().required(),
+ publicId: Joi.string().required(),
+ }).required();
+
+ const { value, error } = schema.validate(cldAssetSource, {
+ abortEarly: false,
+ stripUnknown: true,
+ });
+
+ if (!error) {
+ return value;
+ }
+
+ if (error?.details.length < 2 && error?.details[0].path.length > 0) {
+ // Probably a mistake as it has one of the required fields
+ reporter.warn(
+ `[gatsby-transformer-cloudinary] Missing required field on ${cldAssetSource.type}: cloudName=${cldAssetSource.cloudName}, publicId=${cldAssetSource.publicId} >>> gatsbyImageData will resolve to null`
+ );
+ return null;
+ } else {
+ // Probably a non Cloudinary asses as it has none of the required fields
+ reporter.verbose(
+ `[gatsby-transformer-cloudinary] Missing cloudName and publicId on ${cldAssetSource.type} >>> gatsbyImageData will resolve to null`
);
return null;
}
@@ -95,81 +125,79 @@ const generateMetadata = async (source, args, transformType, reporter) => {
exports._generateCloudinaryAssetSource = generateCloudinaryAssetSource;
exports.createResolveCloudinaryAssetData =
- (gatsbyUtils) => async (source, args, _context, info) => {
+ (gatsbyUtils, transformTypeConfig) => async (source, args, _context) => {
let { reporter } = gatsbyUtils;
reporter = resolverReporter({ reporter, logLevel: args.logLevel });
- const transformType = info.parentType || 'UnknownTransformType';
-
- const schema = Joi.object({
- cloudName: Joi.string().required(),
- publicId: Joi.string().required(),
- }).required();
+ source = source || {};
+ const mapping = transformTypeConfig.mapping || {};
+
+ let cldAssetSource = {
+ type: transformTypeConfig.type,
+ cloudName: mapping['cloudName'](source) || source['cloudName'],
+ publicId: mapping['publicId'](source) || source['publicId'],
+ height: mapping['height'](source) || source['originalHeight'],
+ width: mapping['width'](source) || source['originalWidth'],
+ format: mapping['format'](source) || source['originalFormat'],
+ base64: mapping['base64'](source) || source['defaultBase64'],
+ tracedSVG: mapping['tracedSVG'](source) || source['defaultTracedSVG'],
+ };
- const { error } = schema.validate(source, {
- allowUnknown: true,
- abortEarly: false,
- });
+ const cldAssetRequired = validateRequiredData(cldAssetSource, reporter);
+ if (!cldAssetRequired) return null;
- if (error) {
- if (error.details.length < 2 && error.details[0].path.length > 0) {
- reporter.warn(
- `[gatsby-transformer-cloudinary] Missing required field on ${transformType}: cloudName=${source?.cloudName}, publicId=${source?.publicId} >>> gatsbyImageData will resolve to null`
- );
- } else {
- reporter.verbose(
- `[gatsby-transformer-cloudinary] Missing cloudName and publicId on ${transformType} >>> gatsbyImageData will resolve to null`
- );
- }
-
- return null;
- }
+ cldAssetSource = {
+ ...cldAssetSource,
+ ...cldAssetRequired,
+ };
- const metadata = await generateMetadata(
- source,
+ const cldAssetMetadata = await validateMetadataAndFetchIfNeeded(
+ cldAssetSource,
args,
- transformType,
reporter
);
+ if (!cldAssetMetadata) return null;
- if (!metadata) {
- reporter.warn(
- `[gatsby-transformer-cloudinary] No metadata for ${transformType}: cloudName=${source.cloudName}, publicId=${source.publicId} >>> gatsbyImageData will resolve to null`
- );
- return null;
- }
+ cldAssetSource = {
+ ...cldAssetSource,
+ ...cldAssetMetadata,
+ };
- const assetDataArgs = {
+ const gatsbyAssetDataArgs = {
...args,
- filename: source.cloudName + '>>>' + source.publicId,
+ filename: cldAssetSource.cloudName + '>>>' + cldAssetSource.publicId,
// Passing the plugin name allows for better error messages
pluginName: `gatsby-transformer-cloudinary`,
- sourceMetadata: metadata,
+ sourceMetadata: cldAssetMetadata,
generateImageSource: generateCloudinaryAssetSource,
options: args,
};
try {
if (args.placeholder === 'blurred') {
- if (source.defaultBase64) {
- assetDataArgs.placeholderURL = source.defaultBase64;
+ if (cldAssetSource.base64) {
+ gatsbyAssetDataArgs.placeholderURL = cldAssetSource.base64;
} else {
- const lowResolutionUrl = getLowResolutionImageURL(assetDataArgs);
+ const lowResolutionUrl =
+ getLowResolutionImageURL(gatsbyAssetDataArgs);
const base64 = await getUrlAsBase64Image(lowResolutionUrl);
- assetDataArgs.placeholderURL = base64;
+ gatsbyAssetDataArgs.placeholderURL = base64;
}
} else if (args.placeholder === 'tracedSVG') {
- if (source.defaultTracedSVG) {
- assetDataArgs.placeholderURL = source.defaultTracedSVG;
+ if (cldAssetSource.tracedSVG) {
+ gatsbyAssetDataArgs.placeholderURL = cldAssetSource.tracedSVG;
} else {
- const tracedSvg = await getAssetAsTracedSvg({ source, args });
- assetDataArgs.placeholderURL = tracedSvg;
+ const tracedSvg = await getAssetAsTracedSvg({
+ source: cldAssetSource,
+ args,
+ });
+ gatsbyAssetDataArgs.placeholderURL = tracedSvg;
}
}
} catch (error) {
reporter.error(
- `[gatsby-transformer-cloudinary] Could not generate placeholder (${args.placeholder}) for ${source.cloudName} > ${source.publicId}: ${error.message}`
+ `[gatsby-transformer-cloudinary] Could not generate placeholder (${args.placeholder}) for ${cldAssetSource.cloudName} > ${cldAssetSource.publicId}: ${error.message}`
);
}
- return generateImageData(assetDataArgs);
+ return generateImageData(gatsbyAssetDataArgs);
};
diff --git a/plugin/gatsby-plugin-image/resolve-asset.test.js b/plugin/gatsby-plugin-image/resolve-asset.test.js
index 5bfc88e..c9c6b29 100644
--- a/plugin/gatsby-plugin-image/resolve-asset.test.js
+++ b/plugin/gatsby-plugin-image/resolve-asset.test.js
@@ -27,8 +27,21 @@ const {
createResolveCloudinaryAssetData,
} = require('./resolve-asset');
-const resolveCloudinaryAssetData =
- createResolveCloudinaryAssetData(gatsbyUtilsMocks);
+const resolveCloudinaryAssetData = createResolveCloudinaryAssetData(
+ gatsbyUtilsMocks,
+ {
+ type: 'CloudinaryAsset',
+ mapping: {
+ cloudName: (data) => data.cloudName,
+ publicId: (data) => data.publicId,
+ height: () => 300,
+ width: (data) => data.width,
+ format: (data) => data.format,
+ base64: (data) => data.base64,
+ tracedSVG: (data) => data.tracedSVG,
+ },
+ }
+);
describe('generateCloudinaryAssetSource', () => {
const filename = 'cloud-name>>>public-id';
@@ -65,15 +78,15 @@ describe('resolveCloudinaryAssetData', () => {
publicId: 'public-id',
cloudName: 'cloud-name',
originalWidth: '600',
- originalHeight: '300',
+ // originalHeight: '300',
originalFormat: 'jpg',
};
const sourceWithoutFormat = {
publicId: 'public-id',
cloudName: 'cloud-name',
- originalWidth: '600',
- originalHeight: '300',
+ width: '600',
+ // height: '300',
};
const sourceWithoutMeta = {
@@ -81,6 +94,16 @@ describe('resolveCloudinaryAssetData', () => {
cloudName: 'cloud-name',
};
+ const sourceWithPlaceholder = {
+ publicId: 'public-id',
+ cloudName: 'cloud-name',
+ originalWidth: '600',
+ // originalHeight: '300',
+ originalFormat: 'jpg',
+ defaultBase64: 'defaultBase64DataUrl',
+ tracedSVG: 'defaultSvgDataUrl',
+ };
+
const context = {}; // Never used
const info = {};
@@ -109,7 +132,10 @@ describe('resolveCloudinaryAssetData', () => {
const args = { transformations: ['e_grayscale'] };
await resolveCloudinaryAssetData(sourceWithMetadata, args, context, info);
await resolveCloudinaryAssetData(sourceWithoutFormat, args, context, info);
+
expect(getAssetMetadata).toBeCalledTimes(0);
+ expect(generateImageData).toBeCalledTimes(2);
+
expect(generateImageData).toHaveBeenNthCalledWith(1, {
filename: 'cloud-name>>>public-id',
generateImageSource: _generateCloudinaryAssetSource,
@@ -165,10 +191,17 @@ describe('resolveCloudinaryAssetData', () => {
it('fetches and adds correct "blurred" placeholder', async () => {
const args = { placeholder: 'blurred' };
await resolveCloudinaryAssetData(sourceWithMetadata, args, context, info);
+ await resolveCloudinaryAssetData(
+ sourceWithPlaceholder,
+ args,
+ context,
+ info
+ );
expect(getLowResolutionImageURL).toBeCalledTimes(1);
expect(getUrlAsBase64Image).toBeCalledTimes(1);
- expect(generateImageData).toHaveBeenCalledWith({
+ expect(generateImageData).toBeCalledTimes(2);
+ expect(generateImageData).toHaveBeenNthCalledWith(1, {
filename: 'cloud-name>>>public-id',
generateImageSource: _generateCloudinaryAssetSource,
options: { placeholder: 'blurred' },
@@ -181,14 +214,34 @@ describe('resolveCloudinaryAssetData', () => {
placeholderURL: 'base64DataUrl',
placeholder: 'blurred',
});
+ expect(generateImageData).toHaveBeenNthCalledWith(2, {
+ filename: 'cloud-name>>>public-id',
+ generateImageSource: _generateCloudinaryAssetSource,
+ options: { placeholder: 'blurred' },
+ pluginName: 'gatsby-transformer-cloudinary',
+ sourceMetadata: {
+ format: 'jpg',
+ height: 300,
+ width: 600,
+ },
+ placeholderURL: 'defaultBase64DataUrl',
+ placeholder: 'blurred',
+ });
});
it('fetches and adds correct "tracedSVG" placeholder', async () => {
const args = { placeholder: 'tracedSVG' };
await resolveCloudinaryAssetData(sourceWithMetadata, args, context, info);
+ await resolveCloudinaryAssetData(
+ sourceWithPlaceholder,
+ args,
+ context,
+ info
+ );
expect(getAssetAsTracedSvg).toBeCalledTimes(1);
- expect(generateImageData).toHaveBeenCalledWith({
+ expect(generateImageData).toBeCalledTimes(2);
+ expect(generateImageData).toHaveBeenNthCalledWith(1, {
filename: 'cloud-name>>>public-id',
generateImageSource: _generateCloudinaryAssetSource,
options: { placeholder: 'tracedSVG' },
@@ -201,6 +254,19 @@ describe('resolveCloudinaryAssetData', () => {
placeholderURL: 'svgDataUrl',
placeholder: 'tracedSVG',
});
+ expect(generateImageData).toHaveBeenNthCalledWith(2, {
+ filename: 'cloud-name>>>public-id',
+ generateImageSource: _generateCloudinaryAssetSource,
+ options: { placeholder: 'tracedSVG' },
+ pluginName: 'gatsby-transformer-cloudinary',
+ sourceMetadata: {
+ format: 'jpg',
+ height: 300,
+ width: 600,
+ },
+ placeholderURL: 'defaultSvgDataUrl',
+ placeholder: 'tracedSVG',
+ });
});
describe('when unconforming source', () => {
@@ -342,7 +408,7 @@ describe('resolveCloudinaryAssetData', () => {
});
});
- describe('when fetched asset data is invalid', () => {
+ describe('when fetched asset metadata is invalid', () => {
beforeEach(() => {
getAssetMetadata.mockResolvedValue({
width: 100,
@@ -355,7 +421,7 @@ describe('resolveCloudinaryAssetData', () => {
jest.clearAllMocks();
});
- it('calls reporter.warn on invalid metadata and returns null', async () => {
+ it('calls reporter.verbose on invalid metadata and returns null', async () => {
const args = {};
const result = await resolveCloudinaryAssetData(
sourceWithoutMeta,
@@ -365,12 +431,14 @@ describe('resolveCloudinaryAssetData', () => {
);
expect(getAssetMetadata).toBeCalledTimes(1);
expect(generateImageData).toBeCalledTimes(0);
- expect(gatsbyUtilsMocks.reporter.warn).toBeCalledTimes(1);
+ // Once to notify invalid original metadata
+ // Once to notify about invalid fetched metadata
+ expect(gatsbyUtilsMocks.reporter.verbose).toBeCalledTimes(2);
expect(result).toBe(null);
});
});
- describe('when fetched asset data is undefined', () => {
+ describe('when fetched asset metadata is undefined', () => {
beforeEach(() => {
getAssetMetadata.mockResolvedValue(undefined);
});
@@ -379,7 +447,7 @@ describe('resolveCloudinaryAssetData', () => {
jest.clearAllMocks();
});
- it('calls reporter.warn on undefined metadata and returns null', async () => {
+ it('calls reporter.verbose on undefined metadata and returns null', async () => {
const args = {};
const result = await resolveCloudinaryAssetData(
sourceWithoutMeta,
@@ -389,7 +457,9 @@ describe('resolveCloudinaryAssetData', () => {
);
expect(getAssetMetadata).toBeCalledTimes(1);
expect(generateImageData).toBeCalledTimes(0);
- expect(gatsbyUtilsMocks.reporter.warn).toBeCalledTimes(1);
+ // Once to notify invalid original metadata
+ // Once to notify about invalid fetched metadata
+ expect(gatsbyUtilsMocks.reporter.verbose).toBeCalledTimes(2);
expect(result).toBe(null);
});
});
@@ -412,7 +482,7 @@ describe('resolveCloudinaryAssetData', () => {
jest.clearAllMocks();
});
- it('calls reporter.error on metadata error and returns null', async () => {
+ it('calls reporter.verbose on metadata error and returns null', async () => {
const args = {};
const result = await resolveCloudinaryAssetData(
sourceWithoutMeta,
@@ -422,7 +492,9 @@ describe('resolveCloudinaryAssetData', () => {
);
expect(getAssetMetadata).toBeCalledTimes(1);
expect(generateImageData).toBeCalledTimes(0);
- expect(gatsbyUtilsMocks.reporter.warn).toBeCalledTimes(1);
+ // Once to notify invalid original metadata
+ // Once to notify about invalid fetched metadata
+ expect(gatsbyUtilsMocks.reporter.verbose).toBeCalledTimes(2);
expect(result).toBe(null);
});
diff --git a/plugin/gatsby-plugin-image/resolvers.js b/plugin/gatsby-plugin-image/resolvers.js
index c9503fd..7b28dcd 100644
--- a/plugin/gatsby-plugin-image/resolvers.js
+++ b/plugin/gatsby-plugin-image/resolvers.js
@@ -1,4 +1,8 @@
-exports.createGatsbyPluginImageResolver = (gatsbyUtils, pluginOptions) => {
+exports.createGatsbyPluginImageResolver = (
+ gatsbyUtils,
+ transformTypeConfig,
+ defaultValues = {}
+) => {
const { reporter } = gatsbyUtils;
try {
const {
@@ -7,12 +11,12 @@ exports.createGatsbyPluginImageResolver = (gatsbyUtils, pluginOptions) => {
const { createResolveCloudinaryAssetData } = require('./resolve-asset');
const { CloudinaryPlaceholderType } = require('./types');
- return getGatsbyImageResolver(
- createResolveCloudinaryAssetData(gatsbyUtils),
+ const gatsbyImageResolver = getGatsbyImageResolver(
+ createResolveCloudinaryAssetData(gatsbyUtils, transformTypeConfig),
{
transformations: {
type: '[String]',
- defaultValue: pluginOptions.defaultTransformations,
+ defaultValue: defaultValues.transformations,
},
chained: '[String]',
placeholder: {
@@ -20,13 +24,18 @@ exports.createGatsbyPluginImageResolver = (gatsbyUtils, pluginOptions) => {
},
secure: {
type: 'Boolean',
- defaultValue: true,
+ defaultValue: defaultValues.secure,
},
logLevel: {
type: 'String',
},
}
);
+
+ // Make the resolver nullable
+ gatsbyImageResolver.type = 'GatsbyImageData';
+
+ return gatsbyImageResolver;
} catch (error) {
reporter.warn(
'[gatsby-transformer-cloudinary] Install and configure gatsby-plugin-image to use the new GatsbyImage component and gatsbyImageData resolver'
diff --git a/yarn.lock b/yarn.lock
index ad1d591..2bbcd54 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2715,6 +2715,13 @@
dependencies:
"@types/node" "*"
+"@types/hast@^2.0.0":
+ version "2.3.9"
+ resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.9.tgz#a9a1b5bbce46e8a1312e977364bacabc8e93d2cf"
+ integrity sha512-pTHyNlaMD/oKJmS+ZZUyFUcsZeBZpC0lmGquw98CqRVNgAdJZJeD7GoeLiT6Xbx5rU9VCjSt0RwEvDgzh4obFw==
+ dependencies:
+ "@types/unist" "^2"
+
"@types/http-cache-semantics@*", "@types/http-cache-semantics@^4.0.1":
version "4.0.1"
resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812"
@@ -2768,6 +2775,13 @@
resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.191.tgz#09511e7f7cba275acd8b419ddac8da9a6a79e2fa"
integrity sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==
+"@types/mdast@^3.0.0", "@types/mdast@^3.0.3":
+ 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"
+
"@types/minimatch@*", "@types/minimatch@^5.1.2":
version "5.1.2"
resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca"
@@ -2813,6 +2827,11 @@
resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0"
integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==
+"@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.2"
resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.2.tgz#6c2324641cc4ba050a8c710b2b251b377581fbf0"
@@ -2881,6 +2900,11 @@
resolved "https://registry.yarnpkg.com/@types/tmp/-/tmp-0.0.33.tgz#1073c4bc824754ae3d10cfab88ab0237ba964e4d"
integrity sha512-gVC1InwyVrO326wbBZw+AO3u2vRXz/iRWq9jYhpG4W8LXyIgDv3ZmcLQ5Q4Gs+gFMyqx+viFoFT+l3p61QFCmQ==
+"@types/unist@^2", "@types/unist@^2.0.0", "@types/unist@^2.0.2", "@types/unist@^2.0.3":
+ 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.0"
resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b"
@@ -3389,6 +3413,11 @@ array-includes@^3.1.5, array-includes@^3.1.6:
get-intrinsic "^1.1.3"
is-string "^1.0.7"
+array-iterate@^1.0.0:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/array-iterate/-/array-iterate-1.1.4.tgz#add1522e9dd9749bb41152d08b845bd08d6af8b7"
+ integrity sha512-sNRaPGh9nnmdC8Zf+pT3UqP8rnWj5Hf9wiFGsX3wUQ2yVSIhO2ShFwCoceIPpB41QF6i2OEmrHmCo36xronCVA==
+
array-union@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
@@ -3738,6 +3767,11 @@ backo2@~1.0.2:
resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947"
integrity sha512-zj6Z6M7Eq+PBZ7PQxl5NT665MvJdAkzp0f60nAJ+sLaSCBPMwVak5ZegFbgVCzFcCJTKFoMizvM5Ld7+JrRJHA==
+bail@^1.0.0:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776"
+ integrity sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==
+
balanced-match@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
@@ -4072,6 +4106,11 @@ cardinal@^2.1.1:
ansicolors "~0.3.2"
redeyed "~2.1.0"
+ccount@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.1.0.tgz#246687debb6014735131be8abab2d93898f8d043"
+ integrity sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==
+
chalk@^2.0.0, chalk@^2.3.2, chalk@^2.4.2:
version "2.4.2"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
@@ -4149,6 +4188,26 @@ char-regex@^1.0.2:
resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf"
integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==
+character-entities-html4@^1.0.0:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-1.1.4.tgz#0e64b0a3753ddbf1fdc044c5fd01d0199a02e125"
+ integrity sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==
+
+character-entities-legacy@^1.0.0:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1"
+ integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==
+
+character-entities@^1.0.0:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b"
+ integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==
+
+character-reference-invalid@^1.0.0:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560"
+ integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==
+
chardet@^0.7.0:
version "0.7.0"
resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
@@ -4411,6 +4470,11 @@ combined-stream@^1.0.8:
dependencies:
delayed-stream "~1.0.0"
+comma-separated-tokens@^1.0.0:
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea"
+ integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==
+
command-exists@^1.2.4:
version "1.2.9"
resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69"
@@ -4767,6 +4831,11 @@ css-select@^4.1.3, css-select@^4.2.1:
domutils "^2.8.0"
nth-check "^2.0.1"
+css-selector-parser@^1.0.0:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/css-selector-parser/-/css-selector-parser-1.4.1.tgz#03f9cb8a81c3e5ab2c51684557d5aaf6d2569759"
+ integrity sha512-HYPSb7y/Z7BNDCOrakL4raGO2zltZkbeXyAd6Tg9obzix6QhzxCotdBl6VT0Dv4vZfJGVz3WL/xaEI9Ly3ul0g==
+
css-tree@^1.1.2, css-tree@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d"
@@ -5167,7 +5236,16 @@ dom-serializer@^1.0.1:
domhandler "^4.2.0"
entities "^2.0.0"
-domelementtype@^2.0.1, domelementtype@^2.2.0:
+dom-serializer@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53"
+ integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==
+ dependencies:
+ domelementtype "^2.3.0"
+ domhandler "^5.0.2"
+ entities "^4.2.0"
+
+domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d"
integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==
@@ -5179,6 +5257,13 @@ domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1:
dependencies:
domelementtype "^2.2.0"
+domhandler@^5.0.2, domhandler@^5.0.3:
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31"
+ integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==
+ dependencies:
+ domelementtype "^2.3.0"
+
domutils@^2.5.2, domutils@^2.8.0:
version "2.8.0"
resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135"
@@ -5188,6 +5273,15 @@ domutils@^2.5.2, domutils@^2.8.0:
domelementtype "^2.2.0"
domhandler "^4.2.0"
+domutils@^3.0.1:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e"
+ integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==
+ dependencies:
+ dom-serializer "^2.0.0"
+ domelementtype "^2.3.0"
+ domhandler "^5.0.3"
+
dot-case@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751"
@@ -5335,6 +5429,11 @@ entities@^2.0.0:
resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55"
integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==
+entities@^4.2.0, entities@^4.4.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48"
+ integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==
+
env-ci@^5.0.0:
version "5.5.0"
resolved "https://registry.yarnpkg.com/env-ci/-/env-ci-5.5.0.tgz#43364e3554d261a586dec707bc32be81112b545f"
@@ -5898,6 +5997,18 @@ ext@^1.1.2:
dependencies:
type "^2.7.2"
+extend-shallow@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
+ integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==
+ dependencies:
+ is-extendable "^0.1.0"
+
+extend@^3.0.0, extend@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
+ integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
+
external-editor@^3.0.3:
version "3.1.0"
resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495"
@@ -5945,6 +6056,13 @@ fastq@^1.13.0, fastq@^1.6.0:
dependencies:
reusify "^1.0.4"
+fastq@^1.15.0:
+ version "1.16.0"
+ resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.16.0.tgz#83b9a9375692db77a822df081edb6a9cf6839320"
+ integrity sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==
+ dependencies:
+ reusify "^1.0.4"
+
fb-watchman@^2.0.0:
version "2.0.2"
resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c"
@@ -6217,6 +6335,15 @@ fs-extra@^11.0.0, fs-extra@^11.1.0:
jsonfile "^6.0.1"
universalify "^2.0.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"
+ universalify "^2.0.0"
+
fs-extra@^8.1.0:
version "8.1.0"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
@@ -6338,6 +6465,28 @@ gatsby-cli@^5.3.1:
yoga-layout-prebuilt "^1.10.0"
yurnalist "^2.1.0"
+gatsby-core-utils@^4.13.0:
+ version "4.13.0"
+ resolved "https://registry.yarnpkg.com/gatsby-core-utils/-/gatsby-core-utils-4.13.0.tgz#b286d9a5f31363d5264114b724a8d122850df2cd"
+ integrity sha512-+oJJsADfcEnzpQpof+L5qtP4iSeMaEPn1QSjXENlg/go9Pi/4eqb+Nn3y3q8bC/zy4hMWFWrPdMJmdW581uNvA==
+ dependencies:
+ "@babel/runtime" "^7.20.13"
+ ci-info "2.0.0"
+ configstore "^5.0.1"
+ fastq "^1.15.0"
+ file-type "^16.5.4"
+ fs-extra "^11.1.1"
+ got "^11.8.6"
+ hash-wasm "^4.9.0"
+ import-from "^4.0.0"
+ lmdb "2.5.3"
+ lock "^1.1.0"
+ node-object-hash "^2.3.10"
+ proper-lockfile "^4.1.2"
+ resolve-from "^5.0.0"
+ tmp "^0.2.1"
+ xdg-basedir "^4.0.0"
+
gatsby-core-utils@^4.3.1, gatsby-core-utils@^4.7.0:
version "4.7.0"
resolved "https://registry.yarnpkg.com/gatsby-core-utils/-/gatsby-core-utils-4.7.0.tgz#f2c9d74da334979b0ae847bc6cfe283670c2f752"
@@ -6501,6 +6650,14 @@ gatsby-sharp@^1.3.0, gatsby-sharp@^1.7.0:
"@types/sharp" "^0.31.1"
sharp "^0.31.3"
+gatsby-source-cloudinary@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/gatsby-source-cloudinary/-/gatsby-source-cloudinary-0.6.0.tgz#b98725bd0aa13b109b024fc72f09dbcf0385244e"
+ integrity sha512-5I229BbrskagoI/UKKotx6pNSkEeRHEBaeCelsOrR3Nl9VGGjPRr9+76lrZB6MCiCWY1FPXi3AUq9X4AShjR7A==
+ dependencies:
+ cloudinary "^1.35.0"
+ lodash "^4.17.21"
+
gatsby-source-filesystem@5.3.1:
version "5.3.1"
resolved "https://registry.yarnpkg.com/gatsby-source-filesystem/-/gatsby-source-filesystem-5.3.1.tgz#6d041fb2838e84c68843cf944de1727d1b48e1ea"
@@ -6535,6 +6692,34 @@ gatsby-telemetry@^4.3.1, gatsby-telemetry@^4.7.0:
lodash "^4.17.21"
node-fetch "^2.6.8"
+gatsby-transformer-remark@^6.13.0:
+ version "6.13.0"
+ resolved "https://registry.yarnpkg.com/gatsby-transformer-remark/-/gatsby-transformer-remark-6.13.0.tgz#972e78406c98baf4cef515de31129f2c567bcd56"
+ integrity sha512-eliRUa1fXgJMXpSYTeg1ayvrVTPHQlC93Nd9LymYhgrLbxhyI/zDG46O1oNDKiY2qYE4++i6woMhk0TUSJXW8w==
+ dependencies:
+ "@babel/runtime" "^7.20.13"
+ gatsby-core-utils "^4.13.0"
+ gray-matter "^4.0.3"
+ hast-util-raw "^6.1.0"
+ hast-util-to-html "^7.1.3"
+ lodash "^4.17.21"
+ mdast-util-to-hast "^10.2.0"
+ mdast-util-to-string "^2.0.0"
+ mdast-util-toc "^5.1.0"
+ remark "^13.0.0"
+ remark-footnotes "^3.0.0"
+ remark-gfm "^1.0.0"
+ remark-parse "^9.0.0"
+ remark-retext "^4.0.0"
+ remark-stringify "^9.0.1"
+ retext-english "^3.0.4"
+ sanitize-html "^2.11.0"
+ underscore.string "^3.3.6"
+ unified "^9.2.2"
+ unist-util-remove-position "^3.0.0"
+ unist-util-select "^3.0.4"
+ unist-util-visit "^2.0.3"
+
gatsby-worker@^2.3.0:
version "2.7.0"
resolved "https://registry.yarnpkg.com/gatsby-worker/-/gatsby-worker-2.7.0.tgz#2d3cfced5ecac1d345d5c4e8b896aca282e7a72a"
@@ -6825,6 +7010,11 @@ github-from-package@0.0.0:
resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce"
integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==
+github-slugger@^1.2.1:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.5.0.tgz#17891bbc73232051474d68bd867a34625c955f7d"
+ integrity sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==
+
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"
@@ -6914,7 +7104,7 @@ gopd@^1.0.1:
dependencies:
get-intrinsic "^1.1.3"
-got@^11.8.5:
+got@^11.8.5, got@^11.8.6:
version "11.8.6"
resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a"
integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==
@@ -6982,6 +7172,16 @@ graphql@^16.6.0:
resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.6.0.tgz#c2dcffa4649db149f6282af726c8c83f1c7c5fdb"
integrity sha512-KPIBPDlW7NxrbT/eh4qPXz5FiFdL5UbaA0XUNz2Rp3Z3hqBSkbj0GVjwFDztsWVauZUWsbKHgMg++sk8UX0bkw==
+gray-matter@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-4.0.3.tgz#e893c064825de73ea1f5f7d88c7a9f7274288798"
+ integrity sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==
+ dependencies:
+ js-yaml "^3.13.1"
+ kind-of "^6.0.2"
+ section-matter "^1.0.0"
+ strip-bom-string "^1.0.0"
+
gzip-size@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462"
@@ -7080,6 +7280,101 @@ hasha@^5.2.2:
is-stream "^2.0.0"
type-fest "^0.8.0"
+hast-to-hyperscript@^9.0.0:
+ version "9.0.1"
+ resolved "https://registry.yarnpkg.com/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz#9b67fd188e4c81e8ad66f803855334173920218d"
+ integrity sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==
+ dependencies:
+ "@types/unist" "^2.0.3"
+ comma-separated-tokens "^1.0.0"
+ property-information "^5.3.0"
+ space-separated-tokens "^1.0.0"
+ style-to-object "^0.3.0"
+ unist-util-is "^4.0.0"
+ web-namespaces "^1.0.0"
+
+hast-util-from-parse5@^6.0.0:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz#554e34abdeea25ac76f5bd950a1f0180e0b3bc2a"
+ integrity sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==
+ dependencies:
+ "@types/parse5" "^5.0.0"
+ hastscript "^6.0.0"
+ property-information "^5.0.0"
+ vfile "^4.0.0"
+ vfile-location "^3.2.0"
+ web-namespaces "^1.0.0"
+
+hast-util-is-element@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/hast-util-is-element/-/hast-util-is-element-1.1.0.tgz#3b3ed5159a2707c6137b48637fbfe068e175a425"
+ integrity sha512-oUmNua0bFbdrD/ELDSSEadRVtWZOf3iF6Lbv81naqsIV99RnSCieTbWuWCY8BAeEfKJTKl0gRdokv+dELutHGQ==
+
+hast-util-parse-selector@^2.0.0:
+ version "2.2.5"
+ resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz#d57c23f4da16ae3c63b3b6ca4616683313499c3a"
+ integrity sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==
+
+hast-util-raw@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-6.1.0.tgz#e16a3c2642f65cc7c480c165400a40d604ab75d0"
+ integrity sha512-5FoZLDHBpka20OlZZ4I/+RBw5piVQ8iI1doEvffQhx5CbCyTtP8UCq8Tw6NmTAMtXgsQxmhW7Ly8OdFre5/YMQ==
+ dependencies:
+ "@types/hast" "^2.0.0"
+ hast-util-from-parse5 "^6.0.0"
+ hast-util-to-parse5 "^6.0.0"
+ html-void-elements "^1.0.0"
+ parse5 "^6.0.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^2.0.0"
+ vfile "^4.0.0"
+ web-namespaces "^1.0.0"
+ xtend "^4.0.0"
+ zwitch "^1.0.0"
+
+hast-util-to-html@^7.1.3:
+ version "7.1.3"
+ resolved "https://registry.yarnpkg.com/hast-util-to-html/-/hast-util-to-html-7.1.3.tgz#9f339ca9bea71246e565fc79ff7dbfe98bb50f5e"
+ integrity sha512-yk2+1p3EJTEE9ZEUkgHsUSVhIpCsL/bvT8E5GzmWc+N1Po5gBw+0F8bo7dpxXR0nu0bQVxVZGX2lBGF21CmeDw==
+ dependencies:
+ ccount "^1.0.0"
+ comma-separated-tokens "^1.0.0"
+ hast-util-is-element "^1.0.0"
+ hast-util-whitespace "^1.0.0"
+ html-void-elements "^1.0.0"
+ property-information "^5.0.0"
+ space-separated-tokens "^1.0.0"
+ stringify-entities "^3.0.1"
+ unist-util-is "^4.0.0"
+ xtend "^4.0.0"
+
+hast-util-to-parse5@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz#1ec44650b631d72952066cea9b1445df699f8479"
+ integrity sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==
+ dependencies:
+ hast-to-hyperscript "^9.0.0"
+ property-information "^5.0.0"
+ web-namespaces "^1.0.0"
+ xtend "^4.0.0"
+ zwitch "^1.0.0"
+
+hast-util-whitespace@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-1.0.4.tgz#e4fe77c4a9ae1cb2e6c25e02df0043d0164f6e41"
+ integrity sha512-I5GTdSfhYfAPNztx2xJRQpG8cuDSNt599/7YUn7Gx/WxNMsG+a835k97TDkFgk123cwjfwINaZknkKkphx/f2A==
+
+hastscript@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-6.0.0.tgz#e8768d7eac56c3fdeac8a92830d58e811e5bf640"
+ integrity sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==
+ dependencies:
+ "@types/hast" "^2.0.0"
+ comma-separated-tokens "^1.0.0"
+ hast-util-parse-selector "^2.0.0"
+ property-information "^5.0.0"
+ space-separated-tokens "^1.0.0"
+
he@1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
@@ -7134,6 +7429,11 @@ html-escaper@^2.0.0:
resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453"
integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==
+html-void-elements@^1.0.0:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-1.0.5.tgz#ce9159494e86d95e45795b166c2021c2cfca4483"
+ integrity sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==
+
htmlparser2@^6.1.0:
version "6.1.0"
resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7"
@@ -7144,6 +7444,16 @@ htmlparser2@^6.1.0:
domutils "^2.5.2"
entities "^2.0.0"
+htmlparser2@^8.0.0:
+ version "8.0.2"
+ resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21"
+ integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==
+ dependencies:
+ domelementtype "^2.3.0"
+ domhandler "^5.0.3"
+ domutils "^3.0.1"
+ entities "^4.4.0"
+
http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.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"
@@ -7316,7 +7626,7 @@ inflight@^1.0.4:
once "^1.3.0"
wrappy "1"
-inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3:
+inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3:
version "2.0.4"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
@@ -7344,6 +7654,11 @@ init-package-json@^3.0.2:
validate-npm-package-license "^3.0.4"
validate-npm-package-name "^4.0.0"
+inline-style-parser@0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1"
+ integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==
+
inquirer@^7.0.0:
version "7.3.3"
resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003"
@@ -7420,6 +7735,19 @@ is-absolute@^1.0.0:
is-relative "^1.0.0"
is-windows "^1.0.1"
+is-alphabetical@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d"
+ integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==
+
+is-alphanumerical@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf"
+ integrity sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==
+ dependencies:
+ is-alphabetical "^1.0.0"
+ is-decimal "^1.0.0"
+
is-arguments@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b"
@@ -7469,6 +7797,11 @@ is-boolean-object@^1.1.0:
call-bind "^1.0.2"
has-tostringtag "^1.0.0"
+is-buffer@^2.0.0:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191"
+ integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==
+
is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7:
version "1.2.7"
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055"
@@ -7502,11 +7835,21 @@ is-date-object@^1.0.1, is-date-object@^1.0.5:
dependencies:
has-tostringtag "^1.0.0"
+is-decimal@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5"
+ integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==
+
is-docker@^2.0.0, is-docker@^2.1.1, is-docker@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa"
integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==
+is-extendable@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+ integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==
+
is-extglob@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
@@ -7541,6 +7884,11 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1:
dependencies:
is-extglob "^2.1.1"
+is-hexadecimal@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7"
+ integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==
+
is-invalid-path@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/is-invalid-path/-/is-invalid-path-0.1.0.tgz#307a855b3cf1a938b44ea70d2c61106053714f34"
@@ -7602,6 +7950,11 @@ is-plain-obj@^1.1.0:
resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==
+is-plain-obj@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287"
+ integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==
+
is-plain-object@^2.0.4:
version "2.0.4"
resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
@@ -8371,7 +8724,7 @@ keyv@^4.0.0, keyv@^4.5.2:
dependencies:
json-buffer "3.0.1"
-kind-of@^6.0.2, kind-of@^6.0.3:
+kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3:
version "6.0.3"
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
@@ -8753,6 +9106,11 @@ lodash@^4.17.10, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
+longest-streak@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.4.tgz#b8599957da5b5dab64dee3fe316fa774597d90e4"
+ integrity sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==
+
loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
@@ -8884,6 +9242,13 @@ map-obj@^4.0.0:
resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a"
integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==
+markdown-table@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-2.0.0.tgz#194a90ced26d31fe753d8b9434430214c011865b"
+ integrity sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==
+ dependencies:
+ repeat-string "^1.0.0"
+
marked-terminal@^5.0.0:
version "5.1.1"
resolved "https://registry.yarnpkg.com/marked-terminal/-/marked-terminal-5.1.1.tgz#d2edc2991841d893ee943b44b40b2ee9518b4d9f"
@@ -8906,11 +9271,147 @@ md5-file@^5.0.0:
resolved "https://registry.yarnpkg.com/md5-file/-/md5-file-5.0.0.tgz#e519f631feca9c39e7f9ea1780b63c4745012e20"
integrity sha512-xbEFXCYVWrSx/gEKS1VPlg84h/4L20znVIulKw6kMfmBUAZNAnF00eczz9ICMl+/hjQGo5KSXRxbL/47X3rmMw==
+mdast-util-definitions@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz#c5c1a84db799173b4dcf7643cda999e440c24db2"
+ integrity sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==
+ dependencies:
+ unist-util-visit "^2.0.0"
+
+mdast-util-find-and-replace@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/mdast-util-find-and-replace/-/mdast-util-find-and-replace-1.1.1.tgz#b7db1e873f96f66588c321f1363069abf607d1b5"
+ integrity sha512-9cKl33Y21lyckGzpSmEQnIDjEfeeWelN5s1kUW1LwdB0Fkuq2u+4GdqcGEygYxJE8GVqCl0741bYXHgamfWAZA==
+ dependencies:
+ escape-string-regexp "^4.0.0"
+ unist-util-is "^4.0.0"
+ unist-util-visit-parents "^3.0.0"
+
+mdast-util-footnote@^0.1.0:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/mdast-util-footnote/-/mdast-util-footnote-0.1.7.tgz#4b226caeab4613a3362c144c94af0fdd6f7e0ef0"
+ integrity sha512-QxNdO8qSxqbO2e3m09KwDKfWiLgqyCurdWTQ198NpbZ2hxntdc+VKS4fDJCmNWbAroUdYnSthu+XbZ8ovh8C3w==
+ dependencies:
+ mdast-util-to-markdown "^0.6.0"
+ micromark "~2.11.0"
+
+mdast-util-from-markdown@^0.8.0:
+ version "0.8.5"
+ resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz#d1ef2ca42bc377ecb0463a987910dae89bd9a28c"
+ integrity sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==
+ dependencies:
+ "@types/mdast" "^3.0.0"
+ mdast-util-to-string "^2.0.0"
+ micromark "~2.11.0"
+ parse-entities "^2.0.0"
+ unist-util-stringify-position "^2.0.0"
+
+mdast-util-gfm-autolink-literal@^0.1.0:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-0.1.3.tgz#9c4ff399c5ddd2ece40bd3b13e5447d84e385fb7"
+ integrity sha512-GjmLjWrXg1wqMIO9+ZsRik/s7PLwTaeCHVB7vRxUwLntZc8mzmTsLVr6HW1yLokcnhfURsn5zmSVdi3/xWWu1A==
+ dependencies:
+ ccount "^1.0.0"
+ mdast-util-find-and-replace "^1.1.0"
+ micromark "^2.11.3"
+
+mdast-util-gfm-strikethrough@^0.2.0:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-0.2.3.tgz#45eea337b7fff0755a291844fbea79996c322890"
+ integrity sha512-5OQLXpt6qdbttcDG/UxYY7Yjj3e8P7X16LzvpX8pIQPYJ/C2Z1qFGMmcw+1PZMUM3Z8wt8NRfYTvCni93mgsgA==
+ dependencies:
+ mdast-util-to-markdown "^0.6.0"
+
+mdast-util-gfm-table@^0.1.0:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/mdast-util-gfm-table/-/mdast-util-gfm-table-0.1.6.tgz#af05aeadc8e5ee004eeddfb324b2ad8c029b6ecf"
+ integrity sha512-j4yDxQ66AJSBwGkbpFEp9uG/LS1tZV3P33fN1gkyRB2LoRL+RR3f76m0HPHaby6F4Z5xr9Fv1URmATlRRUIpRQ==
+ dependencies:
+ markdown-table "^2.0.0"
+ mdast-util-to-markdown "~0.6.0"
+
+mdast-util-gfm-task-list-item@^0.1.0:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-0.1.6.tgz#70c885e6b9f543ddd7e6b41f9703ee55b084af10"
+ integrity sha512-/d51FFIfPsSmCIRNp7E6pozM9z1GYPIkSy1urQ8s/o4TC22BZ7DqfHFWiqBD23bc7J3vV1Fc9O4QIHBlfuit8A==
+ dependencies:
+ mdast-util-to-markdown "~0.6.0"
+
+mdast-util-gfm@^0.1.0:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/mdast-util-gfm/-/mdast-util-gfm-0.1.2.tgz#8ecddafe57d266540f6881f5c57ff19725bd351c"
+ integrity sha512-NNkhDx/qYcuOWB7xHUGWZYVXvjPFFd6afg6/e2g+SV4r9q5XUcCbV4Wfa3DLYIiD+xAEZc6K4MGaE/m0KDcPwQ==
+ dependencies:
+ mdast-util-gfm-autolink-literal "^0.1.0"
+ mdast-util-gfm-strikethrough "^0.2.0"
+ mdast-util-gfm-table "^0.1.0"
+ mdast-util-gfm-task-list-item "^0.1.0"
+ mdast-util-to-markdown "^0.6.1"
+
+mdast-util-to-hast@^10.2.0:
+ version "10.2.0"
+ resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-10.2.0.tgz#61875526a017d8857b71abc9333942700b2d3604"
+ integrity sha512-JoPBfJ3gBnHZ18icCwHR50orC9kNH81tiR1gs01D8Q5YpV6adHNO9nKNuFBCJQ941/32PT1a63UF/DitmS3amQ==
+ dependencies:
+ "@types/mdast" "^3.0.0"
+ "@types/unist" "^2.0.0"
+ mdast-util-definitions "^4.0.0"
+ mdurl "^1.0.0"
+ unist-builder "^2.0.0"
+ unist-util-generated "^1.0.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^2.0.0"
+
+mdast-util-to-markdown@^0.6.0, mdast-util-to-markdown@^0.6.1, mdast-util-to-markdown@~0.6.0:
+ version "0.6.5"
+ resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz#b33f67ca820d69e6cc527a93d4039249b504bebe"
+ integrity sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==
+ dependencies:
+ "@types/unist" "^2.0.0"
+ longest-streak "^2.0.0"
+ mdast-util-to-string "^2.0.0"
+ parse-entities "^2.0.0"
+ repeat-string "^1.0.0"
+ zwitch "^1.0.0"
+
+mdast-util-to-nlcst@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/mdast-util-to-nlcst/-/mdast-util-to-nlcst-4.0.1.tgz#ff8b5339c960b38209273fa8bf4dd7a9498f8636"
+ integrity sha512-Y4ffygj85MTt70STKnEquw6k73jYWJBaYcb4ITAKgSNokZF7fH8rEHZ1GsRY/JaxqUevMaEnsDmkVv5Z9uVRdg==
+ dependencies:
+ nlcst-to-string "^2.0.0"
+ repeat-string "^1.0.0"
+ unist-util-position "^3.0.0"
+ vfile-location "^3.1.0"
+
+mdast-util-to-string@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz#b8cfe6a713e1091cb5b728fc48885a4767f8b97b"
+ integrity sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==
+
+mdast-util-toc@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/mdast-util-toc/-/mdast-util-toc-5.1.0.tgz#3af0f9c9a764b993538af03f1f79f4e3cec22736"
+ integrity sha512-csimbRIVkiqc+PpFeKDGQ/Ck2N4f9FYH3zzBMMJzcxoKL8m+cM0n94xXm0I9eaxHnKdY9n145SGTdyJC7i273g==
+ dependencies:
+ "@types/mdast" "^3.0.3"
+ "@types/unist" "^2.0.3"
+ extend "^3.0.2"
+ github-slugger "^1.2.1"
+ mdast-util-to-string "^2.0.0"
+ unist-util-is "^4.0.0"
+ unist-util-visit "^2.0.0"
+
mdn-data@2.0.14:
version "2.0.14"
resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50"
integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==
+mdurl@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e"
+ integrity sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==
+
meant@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/meant/-/meant-1.0.3.tgz#67769af9de1d158773e928ae82c456114903554c"
@@ -8987,6 +9488,66 @@ methods@~1.1.2:
resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==
+micromark-extension-footnote@^0.3.0:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/micromark-extension-footnote/-/micromark-extension-footnote-0.3.2.tgz#129b74ef4920ce96719b2c06102ee7abb2b88a20"
+ integrity sha512-gr/BeIxbIWQoUm02cIfK7mdMZ/fbroRpLsck4kvFtjbzP4yi+OPVbnukTc/zy0i7spC2xYE/dbX1Sur8BEDJsQ==
+ dependencies:
+ micromark "~2.11.0"
+
+micromark-extension-gfm-autolink-literal@~0.5.0:
+ version "0.5.7"
+ resolved "https://registry.yarnpkg.com/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-0.5.7.tgz#53866c1f0c7ef940ae7ca1f72c6faef8fed9f204"
+ integrity sha512-ePiDGH0/lhcngCe8FtH4ARFoxKTUelMp4L7Gg2pujYD5CSMb9PbblnyL+AAMud/SNMyusbS2XDSiPIRcQoNFAw==
+ dependencies:
+ micromark "~2.11.3"
+
+micromark-extension-gfm-strikethrough@~0.6.5:
+ version "0.6.5"
+ resolved "https://registry.yarnpkg.com/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-0.6.5.tgz#96cb83356ff87bf31670eefb7ad7bba73e6514d1"
+ integrity sha512-PpOKlgokpQRwUesRwWEp+fHjGGkZEejj83k9gU5iXCbDG+XBA92BqnRKYJdfqfkrRcZRgGuPuXb7DaK/DmxOhw==
+ dependencies:
+ micromark "~2.11.0"
+
+micromark-extension-gfm-table@~0.4.0:
+ version "0.4.3"
+ resolved "https://registry.yarnpkg.com/micromark-extension-gfm-table/-/micromark-extension-gfm-table-0.4.3.tgz#4d49f1ce0ca84996c853880b9446698947f1802b"
+ integrity sha512-hVGvESPq0fk6ALWtomcwmgLvH8ZSVpcPjzi0AjPclB9FsVRgMtGZkUcpE0zgjOCFAznKepF4z3hX8z6e3HODdA==
+ dependencies:
+ micromark "~2.11.0"
+
+micromark-extension-gfm-tagfilter@~0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-0.3.0.tgz#d9f26a65adee984c9ccdd7e182220493562841ad"
+ integrity sha512-9GU0xBatryXifL//FJH+tAZ6i240xQuFrSL7mYi8f4oZSbc+NvXjkrHemeYP0+L4ZUT+Ptz3b95zhUZnMtoi/Q==
+
+micromark-extension-gfm-task-list-item@~0.3.0:
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-0.3.3.tgz#d90c755f2533ed55a718129cee11257f136283b8"
+ integrity sha512-0zvM5iSLKrc/NQl84pZSjGo66aTGd57C1idmlWmE87lkMcXrTxg1uXa/nXomxJytoje9trP0NDLvw4bZ/Z/XCQ==
+ dependencies:
+ micromark "~2.11.0"
+
+micromark-extension-gfm@^0.3.0:
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/micromark-extension-gfm/-/micromark-extension-gfm-0.3.3.tgz#36d1a4c089ca8bdfd978c9bd2bf1a0cb24e2acfe"
+ integrity sha512-oVN4zv5/tAIA+l3GbMi7lWeYpJ14oQyJ3uEim20ktYFAcfX1x3LNlFGGlmrZHt7u9YlKExmyJdDGaTt6cMSR/A==
+ dependencies:
+ micromark "~2.11.0"
+ micromark-extension-gfm-autolink-literal "~0.5.0"
+ micromark-extension-gfm-strikethrough "~0.6.5"
+ micromark-extension-gfm-table "~0.4.0"
+ micromark-extension-gfm-tagfilter "~0.3.0"
+ micromark-extension-gfm-task-list-item "~0.3.0"
+
+micromark@^2.11.3, micromark@~2.11.0, micromark@~2.11.3:
+ version "2.11.4"
+ resolved "https://registry.yarnpkg.com/micromark/-/micromark-2.11.4.tgz#d13436138eea826383e822449c9a5c50ee44665a"
+ integrity sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==
+ dependencies:
+ debug "^4.0.0"
+ parse-entities "^2.0.0"
+
micromatch@^4.0.0, micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5:
version "4.0.5"
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
@@ -9305,6 +9866,11 @@ nice-try@^1.0.4:
resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
+nlcst-to-string@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/nlcst-to-string/-/nlcst-to-string-2.0.4.tgz#9315dfab80882bbfd86ddf1b706f53622dc400cc"
+ integrity sha512-3x3jwTd6UPG7vi5k4GEzvxJ5rDA7hVUIRNHPblKuMVP9Z3xmlsd9cgLcpAMkc5uPOBna82EeshROFhsPkbnTZg==
+
no-case@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d"
@@ -9474,6 +10040,11 @@ normalize-url@^8.0.0:
resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-8.0.0.tgz#593dbd284f743e8dcf6a5ddf8fadff149c82701a"
integrity sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==
+not@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/not/-/not-0.1.0.tgz#c9691c1746c55dcfbe54cbd8bd4ff041bc2b519d"
+ integrity sha512-5PDmaAsVfnWUgTUbJ3ERwn7u79Z0dYxN9ErxCpVJJqe2RK0PJ3z+iFUxuqjwtlDDegXvtWoxD/3Fzxox7tFGWA==
+
npm-audit-report@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/npm-audit-report/-/npm-audit-report-3.0.0.tgz#1bf3e531208b5f77347c8d00c3d9badf5be30cd6"
@@ -9671,7 +10242,7 @@ npmlog@^6.0.0, npmlog@^6.0.2:
gauge "^4.0.3"
set-blocking "^2.0.0"
-nth-check@^2.0.1:
+nth-check@^2.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"
integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==
@@ -10062,6 +10633,28 @@ parse-conflict-json@^2.0.1, parse-conflict-json@^2.0.2:
just-diff "^5.0.1"
just-diff-apply "^5.2.0"
+parse-english@^4.0.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/parse-english/-/parse-english-4.2.0.tgz#037b68f34d1a1bdf3d33668b87791bdfc1f01e1e"
+ integrity sha512-jw5N6wZUZViIw3VLG/FUSeL3vDhfw5Q2g4E3nYC69Mm5ANbh9ZWd+eligQbeUoyObZM8neynTn3l14e09pjEWg==
+ dependencies:
+ nlcst-to-string "^2.0.0"
+ parse-latin "^4.0.0"
+ unist-util-modify-children "^2.0.0"
+ unist-util-visit-children "^1.0.0"
+
+parse-entities@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8"
+ integrity sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==
+ dependencies:
+ character-entities "^1.0.0"
+ character-entities-legacy "^1.0.0"
+ character-reference-invalid "^1.0.0"
+ is-alphanumerical "^1.0.0"
+ is-decimal "^1.0.0"
+ is-hexadecimal "^1.0.0"
+
parse-filepath@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.2.tgz#a632127f53aaf3d15876f5872f3ffac763d6c891"
@@ -10089,6 +10682,15 @@ parse-json@^5.0.0, parse-json@^5.2.0:
json-parse-even-better-errors "^2.3.0"
lines-and-columns "^1.1.6"
+parse-latin@^4.0.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/parse-latin/-/parse-latin-4.3.0.tgz#1a70fc5601743baa06c5f12253c334fc94b4a917"
+ integrity sha512-TYKL+K98dcAWoCw/Ac1yrPviU8Trk+/gmjQVaoWEFDZmVD4KRg6c/80xKqNNFQObo2mTONgF8trzAf2UTwKafw==
+ dependencies:
+ nlcst-to-string "^2.0.0"
+ unist-util-modify-children "^2.0.0"
+ unist-util-visit-children "^1.0.0"
+
parse-path@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-7.0.0.tgz#605a2d58d0a749c8594405d8cc3a2bf76d16099b"
@@ -10096,6 +10698,11 @@ parse-path@^7.0.0:
dependencies:
protocols "^2.0.0"
+parse-srcset@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/parse-srcset/-/parse-srcset-1.0.2.tgz#f2bd221f6cc970a938d88556abc589caaaa2bde1"
+ integrity sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==
+
parse-url@^8.1.0:
version "8.1.0"
resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-8.1.0.tgz#972e0827ed4b57fc85f0ea6b0d839f0d8a57a57d"
@@ -10103,6 +10710,11 @@ parse-url@^8.1.0:
dependencies:
parse-path "^7.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==
+
parseqs@0.0.6:
version "0.0.6"
resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.6.tgz#8e4bb5a19d1cdc844a08ac974d34e273afa670d5"
@@ -10654,6 +11266,13 @@ proper-lockfile@^4.1.2:
retry "^0.12.0"
signal-exit "^3.0.2"
+property-information@^5.0.0, property-information@^5.3.0:
+ version "5.6.0"
+ resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.6.0.tgz#61675545fb23002f245c6540ec46077d4da3ed69"
+ integrity sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==
+ 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"
@@ -11123,6 +11742,52 @@ relay-runtime@12.0.0:
fbjs "^3.0.0"
invariant "^2.2.4"
+remark-footnotes@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/remark-footnotes/-/remark-footnotes-3.0.0.tgz#5756b56f8464fa7ed80dbba0c966136305d8cb8d"
+ integrity sha512-ZssAvH9FjGYlJ/PBVKdSmfyPc3Cz4rTWgZLI4iE/SX8Nt5l3o3oEjv3wwG5VD7xOjktzdwp5coac+kJV9l4jgg==
+ dependencies:
+ mdast-util-footnote "^0.1.0"
+ micromark-extension-footnote "^0.3.0"
+
+remark-gfm@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/remark-gfm/-/remark-gfm-1.0.0.tgz#9213643001be3f277da6256464d56fd28c3b3c0d"
+ integrity sha512-KfexHJCiqvrdBZVbQ6RopMZGwaXz6wFJEfByIuEwGf0arvITHjiKKZ1dpXujjH9KZdm1//XJQwgfnJ3lmXaDPA==
+ dependencies:
+ mdast-util-gfm "^0.1.0"
+ micromark-extension-gfm "^0.3.0"
+
+remark-parse@^9.0.0:
+ version "9.0.0"
+ resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-9.0.0.tgz#4d20a299665880e4f4af5d90b7c7b8a935853640"
+ integrity sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==
+ dependencies:
+ mdast-util-from-markdown "^0.8.0"
+
+remark-retext@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/remark-retext/-/remark-retext-4.0.0.tgz#255ed98ac3e0a68da5c6ba4f172299b8d062bb28"
+ integrity sha512-cYCchalpf25bTtfXF24ribYvqytPKq0TiEhqQDBHvVEEsApebwruPWP1cTcvTFBidmpXyqzycm+y8ng7Kmvc8Q==
+ dependencies:
+ mdast-util-to-nlcst "^4.0.0"
+
+remark-stringify@^9.0.0, remark-stringify@^9.0.1:
+ version "9.0.1"
+ resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-9.0.1.tgz#576d06e910548b0a7191a71f27b33f1218862894"
+ integrity sha512-mWmNg3ZtESvZS8fv5PTvaPckdL4iNlCHTt8/e/8oN08nArHRHjNZMKzA/YW3+p7/lYqIw4nx1XsjCBo/AxNChg==
+ dependencies:
+ mdast-util-to-markdown "^0.6.0"
+
+remark@^13.0.0:
+ version "13.0.0"
+ resolved "https://registry.yarnpkg.com/remark/-/remark-13.0.0.tgz#d15d9bf71a402f40287ebe36067b66d54868e425"
+ integrity sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA==
+ dependencies:
+ remark-parse "^9.0.0"
+ remark-stringify "^9.0.0"
+ unified "^9.1.0"
+
remove-trailing-separator@^1.0.1:
version "1.1.0"
resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
@@ -11139,6 +11804,11 @@ renderkid@^2.0.4:
lodash "^4.17.21"
strip-ansi "^3.0.1"
+repeat-string@^1.0.0:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
+ integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==
+
require-directory@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
@@ -11226,6 +11896,14 @@ restore-cursor@^3.1.0:
onetime "^5.1.0"
signal-exit "^3.0.2"
+retext-english@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/retext-english/-/retext-english-3.0.4.tgz#f978828d51fbcee842bc3807a45b7f709822ea8d"
+ integrity sha512-yr1PgaBDde+25aJXrnt3p1jvT8FVLVat2Bx8XeAWX13KXo8OT+3nWGU3HWxM4YFJvmfqvJYJZG2d7xxaO774gw==
+ dependencies:
+ parse-english "^4.0.0"
+ unherit "^1.0.4"
+
retry@^0.12.0:
version "0.12.0"
resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b"
@@ -11298,6 +11976,18 @@ safe-regex-test@^1.0.0:
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+sanitize-html@^2.11.0:
+ version "2.11.0"
+ resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-2.11.0.tgz#9a6434ee8fcaeddc740d8ae7cd5dd71d3981f8f6"
+ integrity sha512-BG68EDHRaGKqlsNjJ2xUB7gpInPA8gVx/mvjO743hZaeMCZ2DwzW7xvsqZ+KNU4QKwj86HJ3uu2liISf2qBBUA==
+ dependencies:
+ deepmerge "^4.2.2"
+ escape-string-regexp "^4.0.0"
+ htmlparser2 "^8.0.0"
+ is-plain-object "^5.0.0"
+ parse-srcset "^1.0.2"
+ postcss "^8.3.11"
+
sax@^1.2.4:
version "1.2.4"
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
@@ -11337,6 +12027,14 @@ schema-utils@^3.0.0, schema-utils@^3.1.0, schema-utils@^3.1.1:
ajv "^6.12.5"
ajv-keywords "^3.5.2"
+section-matter@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/section-matter/-/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167"
+ integrity sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==
+ dependencies:
+ extend-shallow "^2.0.1"
+ kind-of "^6.0.0"
+
semantic-release@^19.0.5:
version "19.0.5"
resolved "https://registry.yarnpkg.com/semantic-release/-/semantic-release-19.0.5.tgz#d7fab4b33fc20f1288eafd6c441e5d0938e5e174"
@@ -11717,6 +12415,11 @@ source-map@^0.7.3:
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"
+ integrity sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==
+
spawn-error-forwarder@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/spawn-error-forwarder/-/spawn-error-forwarder-1.0.0.tgz#1afd94738e999b0346d7b9fc373be55e07577029"
@@ -11781,6 +12484,11 @@ sponge-case@^1.0.1:
dependencies:
tslib "^2.0.3"
+sprintf-js@^1.1.1:
+ 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"
@@ -11949,6 +12657,15 @@ string_decoder@~1.1.1:
dependencies:
safe-buffer "~5.1.0"
+stringify-entities@^3.0.1:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-3.1.0.tgz#b8d3feac256d9ffcc9fa1fefdcf3ca70576ee903"
+ integrity sha512-3FP+jGMmMV/ffZs86MoghGqAoqXAdxLrJP4GUdrDN1aIScYih5tuIO3eF4To5AJZ79KDZ8Fpdy7QJnK8SsL1Vg==
+ dependencies:
+ character-entities-html4 "^1.0.0"
+ character-entities-legacy "^1.0.0"
+ xtend "^4.0.0"
+
strip-ansi@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
@@ -11970,6 +12687,11 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1:
dependencies:
ansi-regex "^5.0.1"
+strip-bom-string@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92"
+ integrity sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==
+
strip-bom@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
@@ -12023,6 +12745,13 @@ style-loader@^2.0.0:
loader-utils "^2.0.0"
schema-utils "^3.0.0"
+style-to-object@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-0.3.0.tgz#b1b790d205991cc783801967214979ee19a76e46"
+ integrity sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==
+ dependencies:
+ inline-style-parser "0.1.1"
+
stylehacks@^5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-5.1.1.tgz#7934a34eb59d7152149fa69d6e9e56f2fc34bcc9"
@@ -12304,6 +13033,11 @@ trim-newlines@^3.0.0:
resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144"
integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==
+trough@^1.0.0:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406"
+ integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==
+
"true-case-path@^2.2.1":
version "2.2.1"
resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-2.2.1.tgz#c5bf04a5bbec3fd118be4084461b3a27c4d796bf"
@@ -12471,6 +13205,22 @@ unc-path-regex@^0.1.2:
resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa"
integrity sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==
+underscore.string@^3.3.6:
+ version "3.3.6"
+ resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-3.3.6.tgz#ad8cf23d7423cb3b53b898476117588f4e2f9159"
+ integrity sha512-VoC83HWXmCrF6rgkyxS9GHv8W9Q5nhMKho+OadDJGzL2oDYbYEppBaCMH6pFlwLeqj2QS+hhkw2kpXkSdD1JxQ==
+ dependencies:
+ sprintf-js "^1.1.1"
+ util-deprecate "^1.0.2"
+
+unherit@^1.0.4:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.3.tgz#6c9b503f2b41b262330c80e91c8614abdaa69c22"
+ integrity sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==
+ dependencies:
+ inherits "^2.0.0"
+ xtend "^4.0.0"
+
unicode-canonical-property-names-ecmascript@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc"
@@ -12494,6 +13244,18 @@ unicode-property-aliases-ecmascript@^2.0.0:
resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd"
integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==
+unified@^9.1.0, unified@^9.2.2:
+ version "9.2.2"
+ resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.2.tgz#67649a1abfc3ab85d2969502902775eb03146975"
+ integrity sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==
+ dependencies:
+ bail "^1.0.0"
+ extend "^3.0.0"
+ is-buffer "^2.0.0"
+ is-plain-obj "^2.0.0"
+ trough "^1.0.0"
+ vfile "^4.0.0"
+
unique-filename@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-2.0.1.tgz#e785f8675a9a7589e0ac77e0b5c34d2eaeac6da2"
@@ -12515,6 +13277,80 @@ unique-string@^2.0.0:
dependencies:
crypto-random-string "^2.0.0"
+unist-builder@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/unist-builder/-/unist-builder-2.0.3.tgz#77648711b5d86af0942f334397a33c5e91516436"
+ integrity sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==
+
+unist-util-generated@^1.0.0:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-1.1.6.tgz#5ab51f689e2992a472beb1b35f2ce7ff2f324d4b"
+ integrity sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==
+
+unist-util-is@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-4.1.0.tgz#976e5f462a7a5de73d94b706bac1b90671b57797"
+ integrity sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==
+
+unist-util-modify-children@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/unist-util-modify-children/-/unist-util-modify-children-2.0.0.tgz#9c9c30d4e32502aabb3fde10d7872a17c86801e2"
+ integrity sha512-HGrj7JQo9DwZt8XFsX8UD4gGqOsIlCih9opG6Y+N11XqkBGKzHo8cvDi+MfQQgiZ7zXRUiQREYHhjOBHERTMdg==
+ dependencies:
+ array-iterate "^1.0.0"
+
+unist-util-position@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-3.1.0.tgz#1c42ee6301f8d52f47d14f62bbdb796571fa2d47"
+ integrity sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==
+
+unist-util-remove-position@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-3.0.0.tgz#4cd19e82c8e665f462b6acfcfd0a8353235a88e9"
+ integrity sha512-17kIOuolVuK16LMb9KyMJlqdfCtlfQY5FjY3Sdo9iC7F5wqdXhNjMq0PBvMpkVNNnAmHxXssUW+rZ9T2zbP0Rg==
+ dependencies:
+ unist-util-visit "^2.0.0"
+
+unist-util-select@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/unist-util-select/-/unist-util-select-3.0.4.tgz#702c9dc1db1b2bbbfe27f796fce99e43f25edc60"
+ integrity sha512-xf1zCu4okgPqGLdhCDpRnjwBNyv3EqjiXRUbz2SdK1+qnLMB7uXXajfzuBvvbHoQ+JLyp4AEbFCGndmc6S72sw==
+ dependencies:
+ css-selector-parser "^1.0.0"
+ not "^0.1.0"
+ nth-check "^2.0.0"
+ unist-util-is "^4.0.0"
+ zwitch "^1.0.0"
+
+unist-util-stringify-position@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz#cce3bfa1cdf85ba7375d1d5b17bdc4cada9bd9da"
+ integrity sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==
+ dependencies:
+ "@types/unist" "^2.0.2"
+
+unist-util-visit-children@^1.0.0:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/unist-util-visit-children/-/unist-util-visit-children-1.1.4.tgz#e8a087e58a33a2815f76ea1901c15dec2cb4b432"
+ integrity sha512-sA/nXwYRCQVRwZU2/tQWUqJ9JSFM1X3x7JIOsIgSzrFHcfVt6NkzDtKzyxg2cZWkCwGF9CO8x4QNZRJRMK8FeQ==
+
+unist-util-visit-parents@^3.0.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz#65a6ce698f78a6b0f56aa0e88f13801886cdaef6"
+ integrity sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==
+ dependencies:
+ "@types/unist" "^2.0.0"
+ unist-util-is "^4.0.0"
+
+unist-util-visit@^2.0.0, unist-util-visit@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-2.0.3.tgz#c3703893146df47203bb8a9795af47d7b971208c"
+ integrity sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==
+ dependencies:
+ "@types/unist" "^2.0.0"
+ unist-util-is "^4.0.0"
+ 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"
@@ -12654,6 +13490,29 @@ vary@^1, vary@~1.1.2:
resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==
+vfile-location@^3.1.0, vfile-location@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-3.2.0.tgz#d8e41fbcbd406063669ebf6c33d56ae8721d0f3c"
+ integrity sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==
+
+vfile-message@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.4.tgz#5b43b88171d409eae58477d13f23dd41d52c371a"
+ integrity sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==
+ dependencies:
+ "@types/unist" "^2.0.0"
+ unist-util-stringify-position "^2.0.0"
+
+vfile@^4.0.0:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/vfile/-/vfile-4.2.1.tgz#03f1dce28fc625c625bc6514350fbdb00fa9e624"
+ integrity sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==
+ dependencies:
+ "@types/unist" "^2.0.0"
+ is-buffer "^2.0.0"
+ unist-util-stringify-position "^2.0.0"
+ vfile-message "^2.0.0"
+
vm2@^3.9.8:
version "3.9.14"
resolved "https://registry.yarnpkg.com/vm2/-/vm2-3.9.14.tgz#964042b474cf1e6e4f475a39144773cdb9deb734"
@@ -12694,6 +13553,11 @@ weak-lru-cache@^1.2.2:
resolved "https://registry.yarnpkg.com/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz#fdbb6741f36bae9540d12f480ce8254060dccd19"
integrity sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==
+web-namespaces@^1.0.0:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-1.1.4.tgz#bc98a3de60dadd7faefc403d1076d529f5e030ec"
+ integrity sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==
+
webidl-conversions@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
@@ -13065,3 +13929,8 @@ yurnalist@^2.1.0:
is-ci "^2.0.0"
read "^1.0.7"
strip-ansi "^5.2.0"
+
+zwitch@^1.0.0:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-1.0.5.tgz#d11d7381ffed16b742f6af7b3f223d5cd9fe9920"
+ integrity sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==