diff --git a/.gitignore b/.gitignore index 659430d31dd..5d4acae64f8 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,5 @@ website/i18n/* !website/i18n/en.json .nvmrc +website/scripts/sync-api-docs/generatedComponentApiDocs.js +website/scripts/sync-api-docs/extracted.json diff --git a/website/package.json b/website/package.json index 26e08c7c0f7..d3fef85907a 100644 --- a/website/package.json +++ b/website/package.json @@ -17,9 +17,9 @@ "version": "docusaurus-version", "rename-version": "docusaurus-rename-version", "ci-check": "yarn prettier:diff && node image-check.js", - "format:source": "prettier --write \"{core/**/*.js,static/js/**/*.js}\"", + "format:source": "prettier --write \"{core/**/*.js,scripts/**/*.js,static/js/**/*.js}\"", "format:markdown": "prettier --write \"{../docs/*.md,versioned_docs/**/*.md,blog/**/*.md}\"", - "nit:source": "prettier --list-different \"{core/**/*.js,static/js/**/*.js}\"", + "nit:source": "prettier --list-different \"{core/**/*.js,scripts/**/*.js,static/js/**/*.js}\"", "nit:markdown": "prettier --list-different \"{../docs/*.md,versioned_docs/**/*.md,blog/**/*.md}\"", "prettier": "yarn format:source && yarn format:markdown", "prettier:diff": "yarn nit:source", @@ -28,6 +28,7 @@ "test": "yarn build", "lint": "cd ../ && alex .", "lintv": "cd ../ && alex", + "sync:docs": "node scripts/sync-api-docs/sync-api-docs ../../react-native", "update-lock": "npx yarn-deduplicate && npx optimize-yarn-lock" }, "husky": { @@ -41,6 +42,7 @@ "remarkable": "^2.0.1" }, "devDependencies": { + "@motiz88/react-native-docgen": "0.0.3", "alex": "^8.2.0", "front-matter": "^4.0.2", "fs-extra": "^9.0.1", @@ -50,6 +52,8 @@ "node-fetch": "^2.6.0", "path": "^0.12.7", "prettier": "1.16.4", - "pretty-quick": "^1.11.1" + "pretty-quick": "^1.11.1", + "react-docgen-markdown-renderer": "^2.1.3", + "tokenize-comment": "^3.0.1" } } diff --git a/website/scripts/sync-api-docs/extractDocsFromRN.js b/website/scripts/sync-api-docs/extractDocsFromRN.js new file mode 100644 index 00000000000..f55543ba44e --- /dev/null +++ b/website/scripts/sync-api-docs/extractDocsFromRN.js @@ -0,0 +1,72 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @format + */ + +'use strict'; + +const fs = require('fs-extra'); +const glob = require('glob'); +const path = require('path'); +const reactDocs = require('@motiz88/react-native-docgen'); + +const GENERATE_ANNOTATION = '@' + 'generate-docs'; + +module.exports = extractDocsFromRN; + +async function extractDocsFromRN(rnRoot) { + // TODO: make implementation async + + const allComponentFiles = glob.sync( + path.join(rnRoot, '/Libraries/{Components,Image,}/**/*.js'), + { + nodir: true, + absolute: true, + } + ); + + const docs = []; + + for (const file of allComponentFiles) { + const contents = fs.readFileSync(file, {encoding: 'utf-8'}); + if (!contents.includes(GENERATE_ANNOTATION)) { + continue; + } + + console.log(file); + + const result = reactDocs.parse( + contents, + reactDocs.resolver.findExportedComponentDefinition, + reactDocs.defaultHandlers.filter( + handler => handler !== reactDocs.handlers.propTypeCompositionHandler + ), + {filename: file} + ); + + docs.push({ + file, + component: cleanComponentResult(result), + }); + } + + // Make sure output is JSON-safe + const docsSerialized = JSON.parse(JSON.stringify(docs)); + await fs.writeFile( + path.join(__dirname, 'extracted.json'), + JSON.stringify(docsSerialized, null, 2), + 'utf8' + ); + return docsSerialized; +} + +function cleanComponentResult(component) { + return { + ...component, + methods: component.methods.filter(method => !method.name.startsWith('_')), + }; +} diff --git a/website/scripts/sync-api-docs/generateMarkdown.js b/website/scripts/sync-api-docs/generateMarkdown.js new file mode 100644 index 00000000000..e62948e27bf --- /dev/null +++ b/website/scripts/sync-api-docs/generateMarkdown.js @@ -0,0 +1,269 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +const tokenizeComment = require('tokenize-comment'); +const { + formatMultiplePlatform, + maybeLinkifyType, + maybeLinkifyTypeName, + formatTypeColumn, + formatDefaultColumn, +} = require('./propFormatter'); + +// Formats an array of rows as a Markdown table +function generateTable(rows) { + const colWidths = new Map(); + for (const row of rows) { + for (const col of Object.keys(row)) { + colWidths.set( + col, + Math.max(colWidths.get(col) || col.length, String(row[col]).length) + ); + } + } + if (!colWidths.size) { + return ''; + } + let header = '|', + divider = '|'; + for (const [col, width] of colWidths) { + header += ' ' + col.padEnd(width + 1) + '|'; + divider += ' ' + '-'.repeat(width) + ' ' + '|'; + } + + let result = header + '\n' + divider + '\n'; + for (const row of rows) { + result += '|'; + for (const [col, width] of colWidths) { + result += ' ' + String(row[col] || '').padEnd(width + 1) + '|'; + } + result += '\n'; + } + return result; +} + +// Formats information about a prop +function generateProp(propName, prop) { + const infoTable = generateTable([ + { + Type: formatTypeColumn(prop), + ...formatDefaultColumn(prop), + }, + ]); + + return ( + '### ' + + (prop.required ? '
Required
' : '') + + '`' + + propName + + '`' + + (prop.rnTags && prop.rnTags.platform + ? formatMultiplePlatform(prop.rnTags.platform) + : '') + + '\n' + + '\n' + + (prop.description ? prop.description + '\n\n' : '') + + infoTable + ); +} + +// Formats information about a prop +function generateMethod(method, component) { + const infoTable = generateTable([ + { + ...(method.rnTags && method.rnTags.platform + ? {Platform: formatPlatformName(method.rnTags.platform)} + : {}), + }, + ]); + + return ( + '### `' + + method.name + + '()`' + + '\n' + + '\n' + + generateMethodSignatureBlock(method, component) + + (method.description ? method.description + '\n\n' : '') + + generateMethodSignatureTable(method, component) + + infoTable + ).trim(); +} + +function lowerFirst(s) { + return s[0].toLowerCase() + s.slice(1); +} + +function generateMethodSignatureBlock(method, component) { + return ( + '```jsx\n' + + (method.modifiers.includes('static') + ? component.displayName + '.' + : lowerFirst(component.displayName + '.')) + + method.name + + '(' + + method.params + .map(param => (param.optional ? `[${param.name}]` : param.name)) + .join(', ') + + ');' + + '\n' + + '```\n\n' + ); +} + +function generateMethodSignatureTable(method, component) { + if (!method.params.length) { + return ''; + } + return ( + '**Parameters:**\n\n' + + generateTable( + method.params.map(param => ({ + Name: param.name, + Type: param.type ? maybeLinkifyType(param.type) : '', + Required: param.optional ? 'No' : 'Yes', + Description: param.description, + })) + ) + ); +} + +// Formats information about props +function generateProps({props, composes}) { + if (!props || !Object.keys(props).length) { + return ''; + } + + return ( + '## Props' + + '\n' + + '\n' + + (composes && composes.length + ? composes + .map(parent => 'Inherits ' + maybeLinkifyTypeName(parent) + '.') + .join('\n\n') + '\n\n' + : '') + + Object.keys(props) + .sort((a, b) => a.localeCompare(b)) + .sort((a, b) => props[b].required - props[a].required) + .map(function(propName) { + return generateProp(propName, props[propName]); + }) + .join('\n\n---\n\n') + ); +} + +function generateMethods(component) { + const {methods} = component; + if (!methods || !methods.length) { + return ''; + } + + return ( + '## Methods' + + '\n' + + '\n' + + [...methods] + .sort((a, b) => + a.name.localeCompare( + b.name /* TODO @nocommit what's a neutral locale */ + ) + ) + .map(function(method) { + return generateMethod(method, component); + }) + .join('\n\n---\n\n') + ); +} + +// Generates a Docusaurus header for a component page +function generateHeader({id, title}) { + return ( + '---' + '\n' + 'id: ' + id + '\n' + 'title: ' + title + '\n' + '---' + '\n' + ); +} + +// Function to process example contained description +function preprocessDescription(desc) { + // Playground tabs for the class and functional components + const playgroundTab = `
+ +
`; + + //Blocks for different syntax sections + const functionalBlock = ``; + const classBlock = ``; + const endBlock = ``; + + desc = desc + .split('\n') + .map(line => { + return line.replace(/ /, ''); + }) + .join('\n'); + + const descriptionTokenized = tokenizeComment(desc); + // Tabs counter for examples + let tabs = 0; + descriptionTokenized.examples.map(item => { + const matchSnackPlayer = item.language.match(/(SnackPlayer name=).*/g); + if (matchSnackPlayer) { + const matchClassComp = matchSnackPlayer[0].match( + /Class%20Component%20Example/ + ); + const matchFuncComp = matchSnackPlayer[0].match( + /Function%20Component%20Example/ + ); + if (matchClassComp || matchFuncComp) tabs++; + } + }); + + if (tabs === 2) { + const wrapper = `${playgroundTab}\n\n${functionalBlock}\n\n${ + descriptionTokenized.examples[0].raw + }\n\n${classBlock}\n\n${ + descriptionTokenized.examples[1].raw + }\n\n${endBlock}`; + return ( + descriptionTokenized.description + + `\n## Example\n` + + wrapper + + '\n' + + descriptionTokenized?.footer + ); + } else { + return ( + desc.substr(0, desc.search('```SnackPlayer')) + + '\n' + + '\n## Example\n' + + '\n' + + desc.substr(desc.search('```SnackPlayer')) + ); + } +} + +function generateMarkdown({id, title}, component) { + const markdownString = + generateHeader({id, title}) + + '\n' + + preprocessDescription(component.description) + + '\n\n' + + '---\n\n' + + '# Reference\n\n' + + generateProps(component) + + generateMethods(component); + + return markdownString.replace(/\n{3,}/g, '\n\n'); +} + +module.exports = generateMarkdown; diff --git a/website/scripts/sync-api-docs/magic.js b/website/scripts/sync-api-docs/magic.js new file mode 100644 index 00000000000..e40137628e1 --- /dev/null +++ b/website/scripts/sync-api-docs/magic.js @@ -0,0 +1,33 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +// Hard-coded knowledge about the React Native codebase and how to document it, +// beyond what is explicitly encoded in the react-docgen artifact +// (generatedComponentApiDocs.js) + +// Ideally this file should go away. + +module.exports = { + linkableTypeAliases: { + NativeColorValue: { + text: 'color', + url: 'colors.md', + }, + ViewProps: { + text: 'View Props', + url: 'view.md#props', + }, + PressEvent: { + text: 'PressEvent', + url: 'pressevent.md', + }, + 'RefreshLayoutConsts.SIZE.DEFAULT': { + text: 'RefreshControl.SIZE', + url: 'refreshcontrol.md#refreshlayoutconstssize', + }, + }, +}; diff --git a/website/scripts/sync-api-docs/preprocessGeneratedApiDocs.js b/website/scripts/sync-api-docs/preprocessGeneratedApiDocs.js new file mode 100644 index 00000000000..46f52bba8e5 --- /dev/null +++ b/website/scripts/sync-api-docs/preprocessGeneratedApiDocs.js @@ -0,0 +1,85 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +'use strict'; + +// Preprocess the react-docgen artifact before rendering it to Markdown. +// This file may end up in the React Native repo, as part of the +// `generate-api-docs` script. + +const tokenizeComment = require('tokenize-comment'); +const {typeOf} = require('tokenize-comment/lib/utils'); + +function joinDescriptionAndExamples(tokenized) { + let sections = []; + if (tokenized.description) { + sections.push(tokenized.description); + } + for (const {raw} of tokenized.examples) { + sections.push(raw); + } + if (tokenized.footer) { + sections.push(tokenized.footer); + } + return sections.join('\n\n'); +} + +function preprocessTagsInDescription(obj) { + if (obj && obj.description) { + obj.description = obj.description + .split('\n') + .map(line => { + return line.replace(/ /, ''); + }) + .join('\n'); + const descriptionTokenized = tokenizeComment(obj.description); + obj.description = obj.description.replace( + /@platform .*|@default .*|@type .*/g, + '' + ); + obj.rnTags = {}; + const platformTag = descriptionTokenized.tags.find( + ({key}) => key === 'platform' + ); + const defaultTag = descriptionTokenized.tags.filter( + tag => tag.key === 'default' + ); + const typeTag = descriptionTokenized.tags.filter(tag => tag.key === 'type'); + + if (platformTag) { + obj.rnTags.platform = platformTag.value.split(','); + } + if (defaultTag.length) { + obj.rnTags.default = []; + defaultTag.forEach(tag => { + obj.rnTags.default.push(tag.value); + }); + } + if (typeTag.length) { + obj.rnTags.type = []; + typeTag.forEach(tag => { + obj.rnTags.type.push(tag.value); + }); + } + } +} + +// NOTE: This function mutates `docs`. +function preprocessGeneratedApiDocs(docs) { + for (const {component} of docs) { + if (component.props && component.description) { + for (const prop of Object.values(component.props)) { + preprocessTagsInDescription(prop); + } + for (const prop of component.methods) { + preprocessTagsInDescription(prop); + } + } + } +} + +module.exports = preprocessGeneratedApiDocs; diff --git a/website/scripts/sync-api-docs/propFormatter.js b/website/scripts/sync-api-docs/propFormatter.js new file mode 100644 index 00000000000..42de69ce4e5 --- /dev/null +++ b/website/scripts/sync-api-docs/propFormatter.js @@ -0,0 +1,237 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +'use strict'; + +const {typeOf} = require('tokenize-comment/lib/utils'); +const he = require('he'); +const magic = require('./magic'); + +// Adds multiple platform tags for prop name +function formatMultiplePlatform(platforms) { + let platformString = ''; + platforms.forEach(platform => { + switch (platform.trim()) { + case 'ios': + platformString += '
' + 'iOS' + '
'; + break; + case 'android': + platformString += '
' + 'Android' + '
'; + break; + case 'tv': + platformString += '
' + 'TV' + '
'; + } + }); + return platformString; +} + +// Wraps a string in an inline code block in a way that is safe to include in a +// table cell, by wrapping it as HTML if necessary. +function stringToInlineCodeForTable(str) { + let useHtml = /[`|]/.test(str); + str = str.replace(/\n/g, ' '); + if (useHtml) { + return '' + he.encode(str).replace(/\|/g, '|') + ''; + } + return '`' + str + '`'; +} + +function maybeLinkifyType(flowType) { + let url, text; + flowType.elements?.forEach(elem => { + if (Object.hasOwnProperty.call(magic.linkableTypeAliases, elem.name)) { + ({url, text} = magic.linkableTypeAliases[elem.name]); + } + }); + if (!text) { + text = stringToInlineCodeForTable( + flowType.raw || formatType(flowType.name) + ); + } + if (url) { + return `[${text}](${url})`; + } + return text; +} + +function formatType(name) { + if (name.toLowerCase() === 'boolean') return 'bool'; + if (name.toLowerCase() === 'stringish') return 'string'; + if (name === '$ReadOnlyArray') return 'array'; + return name; +} + +function maybeLinkifyTypeName(name) { + let url, text; + if (Object.hasOwnProperty.call(magic.linkableTypeAliases, name)) { + ({url, text} = magic.linkableTypeAliases[name]); + } + if (!text) { + text = stringToInlineCodeForTable(name); + } + if (url) { + return `[${text}](${url})`; + } + return text; +} + +// Adds proper markdown formatting to component's prop type. +function formatTypeColumn(prop) { + // Checks for @type pragma comment + if (prop.rnTags && prop.rnTags.type) { + let tableRows = ''; + const typeTags = prop.rnTags.type; + + typeTags.forEach(tag => { + // Checks for @platform pragma in @type string + const isMatch = tag.match(/{@platform [a-z ,]*}/); + if (isMatch) { + // Extracts platforms from matched regex + const platform = isMatch[0].match(/ [a-z ,]*/); + + // Replaces @platform strings with empty string + // and appends type with formatted platform + tag = tag.replace(/{@platform [a-z ,]*}/g, ''); + tag = tag + formatMultiplePlatform(platform[0].split(',')); + } + tableRows = tableRows + tag + '
'; + }); + tableRows = tableRows.replace(/$/, ''); + return tableRows; + } + + // To extract type from prop flowType + else if (prop.flowType && Object.keys(prop.flowType).length >= 1) { + let text, url; + + // Handles flowtype name for signatures + if (prop.flowType.name === 'signature') { + // Handles flowtype for function signature + if (prop.flowType.type === 'function') { + // Extracts EventType from the raw value + const isMatch = prop.flowType.raw.match(/: [a-zA-Z]*/); + if (isMatch) { + // Formats EventType + const eventType = isMatch[0].substr(2); + // Checks for aliases in magic and generates md url + if ( + Object.hasOwnProperty.call(magic.linkableTypeAliases, eventType) + ) { + ({url, text} = magic.linkableTypeAliases[eventType]); + return `${prop.flowType.type}([${text}](${url}))`; + } + // TODO: Handling unknown function params + return `${prop.flowType.type}`; + } else { + return prop.flowType.type; + } + } + } else if (prop.flowType.name.includes('$ReadOnlyArray')) { + prop?.flowType?.elements[0]?.elements && + prop?.flowType?.elements[0]?.elements.forEach(elem => { + if ( + Object.hasOwnProperty.call(magic.linkableTypeAliases, elem.name) + ) { + ({url, text} = magic.linkableTypeAliases[elem.name]); + } + }); + if (url) return `array of [${text}](${url})`; + } else if (prop.flowType.name === '$ReadOnly') { + // Special Case: switch#trackcolor + let markdown = ''; + if (prop.flowType.elements[0]?.type === 'object') { + prop?.flowType?.elements[0]?.signature?.properties.forEach( + ({key, value}) => { + value?.elements?.forEach(elem => { + if ( + Object.hasOwnProperty.call(magic.linkableTypeAliases, elem.name) + ) { + ({url, text} = magic.linkableTypeAliases[elem.name]); + markdown += `${key}: [${text}](${url})` + ', '; + } + }); + } + ); + if (markdown.match(/, $/)) markdown = markdown.replace(/, $/, ''); + return `${prop.flowType.elements[0]?.type}: {${markdown}}`; + } + } else { + // Get text and url from magic aliases + prop?.flowType?.elements?.forEach(elem => { + if (Object.hasOwnProperty.call(magic.linkableTypeAliases, elem.name)) { + ({url, text} = magic.linkableTypeAliases[elem.name]); + } + }); + } + + // If no text is found, get raw values as text + if (!text) { + // TO BE FIXED + text = + (prop.flowType.raw && stringToInlineCodeForTable(prop.flowType.raw)) || + formatType(prop.flowType.name); + } + + // If URL is found, return text and link in markdown format + if (url) { + return `[${text}](${url})`; + } + + return text; + } +} + +// Adds proper markdown formatting to component's default value. +function formatDefaultColumn(prop) { + if (prop?.rnTags?.default) { + // Parse from @default annotation + let tableRows = ''; + prop.rnTags.default.forEach(tag => { + const isMatch = tag.match(/{@platform [a-z]*}/); + + if (isMatch) { + const platform = isMatch[0].match(/ [a-z]*/); + tag = tag.replace(/{@platform [a-z]*}/g, ''); + + // Checks component for NativeColorValue in default + let colorBlock = ''; + prop?.flowType?.elements.some(elem => { + if (elem.name === 'NativeColorValue' && !tag.includes('null')) { + colorBlock = + ''; + return true; + } + }); + + tag = + (!tag.includes('null') ? '`' + tag + '`' : tag) + + colorBlock + + formatMultiplePlatform(platform[0].split(',')); + } else { + tag = '`' + tag + '`'; + } + tableRows = tableRows + tag + '
'; + }); + tableRows = tableRows.replace(/$/, ''); + return {Default: tableRows}; + } else { + // Parse defaultValue if @default annotation not provided + return prop?.defaultValue?.value + ? {Default: stringToInlineCodeForTable(prop?.defaultValue?.value)} + : ''; + } +} + +module.exports = { + formatMultiplePlatform, + maybeLinkifyType, + maybeLinkifyTypeName, + formatTypeColumn, + formatDefaultColumn, +}; diff --git a/website/scripts/sync-api-docs/sync-api-docs.js b/website/scripts/sync-api-docs/sync-api-docs.js new file mode 100644 index 00000000000..ec3a4dae50c --- /dev/null +++ b/website/scripts/sync-api-docs/sync-api-docs.js @@ -0,0 +1,51 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +// ***** EXPERIMENTAL ***** +// Updates the API docs from the React Native source code. + +'use strict'; + +const process = require('process'); +const fs = require('fs-extra'); +const path = require('path'); + +const extractDocsFromRN = require('./extractDocsFromRN'); +const preprocessGeneratedApiDocs = require('./preprocessGeneratedApiDocs'); +const generateMarkdown = require('./generateMarkdown'); +const titleToId = require('./titleToId'); + +const DOCS_ROOT_DIR = path.resolve(__dirname, '..', '..', '..', 'docs'); + +async function generateApiDocs(rnPath) { + const apiDocs = await extractDocsFromRN(rnPath); + preprocessGeneratedApiDocs(apiDocs); + await Promise.all( + apiDocs.map(async ({component, file}, index) => { + if (!component.displayName) { + console.log( + `react-docgen data for ${path.basename(file)} was malformed, skipping` + ); + return; + } + const id = titleToId(component.displayName); + const componentMarkdown = generateMarkdown( + {title: component.displayName, id: id}, + component + ); + const outFile = path.join(DOCS_ROOT_DIR, id + '.md'); + console.log('Generated ' + outFile); + await fs.writeFile(outFile, componentMarkdown, 'utf8'); + }) + ); +} + +async function main(args) { + await generateApiDocs(args[0]); +} + +main(process.argv.slice(2)); diff --git a/website/scripts/sync-api-docs/titleToId.js b/website/scripts/sync-api-docs/titleToId.js new file mode 100644 index 00000000000..254bc16e335 --- /dev/null +++ b/website/scripts/sync-api-docs/titleToId.js @@ -0,0 +1,12 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +function titleToId(title) { + return title.toLowerCase().replace(/[^a-z]+/g, '-'); +} + +module.exports = titleToId; diff --git a/website/yarn.lock b/website/yarn.lock index 424d0fe8c7d..892de0bd194 100644 --- a/website/yarn.lock +++ b/website/yarn.lock @@ -16,6 +16,13 @@ dependencies: "@babel/highlight" "^7.10.4" +"@babel/code-frame@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" + integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g== + dependencies: + "@babel/highlight" "^7.8.3" + "@babel/compat-data@^7.10.4", "@babel/compat-data@^7.11.0": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.11.0.tgz#e9f73efe09af1355b723a7f39b11bad637d7c99c" @@ -25,16 +32,37 @@ invariant "^2.2.4" semver "^5.5.0" +"@babel/core@^7.7.5": + version "7.8.4" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.8.4.tgz#d496799e5c12195b3602d0fddd77294e3e38e80e" + integrity sha512-0LiLrB2PwrVI+a2/IEskBopDYSd8BCb3rOvH7D5tzoWd696TBEduBvuLVm4Nx6rltrLZqvI3MCalB2K2aVzQjA== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/generator" "^7.8.4" + "@babel/helpers" "^7.8.4" + "@babel/parser" "^7.8.4" + "@babel/template" "^7.8.3" + "@babel/traverse" "^7.8.4" + "@babel/types" "^7.8.3" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.0" + lodash "^4.17.13" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + "@babel/core@^7.9.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.11.0.tgz#73b9c33f1658506887f767c26dae07798b30df76" - integrity sha512-mkLq8nwaXmDtFmRkQ8ED/eA2CnVw4zr7dCztKalZXBvdK5EeNUAesrrwUqjQEzFgomJssayzB0aqlOsP1vGLqg== + version "7.11.1" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.11.1.tgz#2c55b604e73a40dc21b0e52650b11c65cf276643" + integrity sha512-XqF7F6FWQdKGGWAzGELL+aCO1p+lRY5Tj5/tbT3St1G8NaH70jhhDIKknIZaDans0OQBG5wRAldROLHSt44BgQ== dependencies: "@babel/code-frame" "^7.10.4" "@babel/generator" "^7.11.0" "@babel/helper-module-transforms" "^7.11.0" "@babel/helpers" "^7.10.4" - "@babel/parser" "^7.11.0" + "@babel/parser" "^7.11.1" "@babel/template" "^7.10.4" "@babel/traverse" "^7.11.0" "@babel/types" "^7.11.0" @@ -56,6 +84,16 @@ jsesc "^2.5.1" source-map "^0.5.0" +"@babel/generator@^7.8.4": + version "7.8.4" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.8.4.tgz#35bbc74486956fe4251829f9f6c48330e8d0985e" + integrity sha512-PwhclGdRpNAf3IxZb0YVuITPZmmrXz9zf6fH8lT4XbrmfQKr6ryBzhv593P5C6poJRciFCL/eHGW2NuGrgEyxA== + dependencies: + "@babel/types" "^7.8.3" + jsesc "^2.5.1" + lodash "^4.17.13" + source-map "^0.5.0" + "@babel/helper-annotate-as-pure@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3" @@ -146,6 +184,15 @@ "@babel/template" "^7.10.4" "@babel/types" "^7.10.4" +"@babel/helper-function-name@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz#eeeb665a01b1f11068e9fb86ad56a1cb1a824cca" + integrity sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA== + dependencies: + "@babel/helper-get-function-arity" "^7.8.3" + "@babel/template" "^7.8.3" + "@babel/types" "^7.8.3" + "@babel/helper-get-function-arity@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" @@ -153,6 +200,13 @@ dependencies: "@babel/types" "^7.10.4" +"@babel/helper-get-function-arity@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5" + integrity sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA== + dependencies: + "@babel/types" "^7.8.3" + "@babel/helper-hoist-variables@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz#d49b001d1d5a68ca5e6604dda01a6297f7c9381e" @@ -249,6 +303,13 @@ dependencies: "@babel/types" "^7.11.0" +"@babel/helper-split-export-declaration@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9" + integrity sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA== + dependencies: + "@babel/types" "^7.8.3" + "@babel/helper-validator-identifier@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" @@ -273,6 +334,15 @@ "@babel/traverse" "^7.10.4" "@babel/types" "^7.10.4" +"@babel/helpers@^7.8.4": + version "7.8.4" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.8.4.tgz#754eb3ee727c165e0a240d6c207de7c455f36f73" + integrity sha512-VPbe7wcQ4chu4TDQjimHv/5tj73qz88o12EPkO2ValS2QiQS/1F2SsjyIGNnAD0vF/nZS6Cf9i+vW6HIlnaR8w== + dependencies: + "@babel/template" "^7.8.3" + "@babel/traverse" "^7.8.4" + "@babel/types" "^7.8.3" + "@babel/highlight@^7.0.0", "@babel/highlight@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" @@ -282,11 +352,30 @@ chalk "^2.0.0" js-tokens "^4.0.0" +"@babel/highlight@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz#28f173d04223eaaa59bc1d439a3836e6d1265797" + integrity sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg== + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^4.0.0" + "@babel/parser@^7.10.4", "@babel/parser@^7.11.0": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.0.tgz#a9d7e11aead25d3b422d17b2c6502c8dddef6a5d" integrity sha512-qvRvi4oI8xii8NllyEc4MDJjuZiNaRzyb7Y7lup1NqJV8TZHF4O27CcP+72WPn/k1zkgJ6WJfnIbk4jTsVAZHw== +"@babel/parser@^7.11.1": + version "7.11.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.3.tgz#9e1eae46738bcd08e23e867bab43e7b95299a8f9" + integrity sha512-REo8xv7+sDxkKvoxEywIdsNFiZLybwdI7hcT5uEPyQrSMB4YQ973BfC9OOrD/81MaIjh6UxdulIQXkjmiH3PcA== + +"@babel/parser@^7.8.3", "@babel/parser@^7.8.4": + version "7.8.4" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.8.4.tgz#d1dbe64691d60358a974295fa53da074dd2ce8e8" + integrity sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw== + "@babel/plugin-proposal-async-generator-functions@^7.10.4": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz#3491cabf2f7c179ab820606cec27fed15e0e8558" @@ -903,10 +992,17 @@ pirates "^4.0.0" source-map-support "^0.5.16" +"@babel/runtime@^7.7.6": + version "7.8.4" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.8.4.tgz#d79f5a2040f7caa24d53e563aad49cbc05581308" + integrity sha512-neAp3zt80trRVBI1x0azq6c57aNBqYZH8KhMm3TaB7wEI5Q4A2SHfBHE8w9gOhI/lrqxtEbXZgQIrHP+wvSGwQ== + dependencies: + regenerator-runtime "^0.13.2" + "@babel/runtime@^7.8.4": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.0.tgz#f10245877042a815e07f7e693faff0ae9d3a2aac" - integrity sha512-qArkXsjJq7H+T86WrIFV0Fnu/tNOkZ4cgXmjkzAu3b/58D5mFIO8JH/y77t7C9q0OdDRdh9s7Ue5GasYssxtXw== + version "7.11.2" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.2.tgz#f549c13c754cc40b87644b9fa9f09a6a95fe0736" + integrity sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw== dependencies: regenerator-runtime "^0.13.4" @@ -919,6 +1015,15 @@ "@babel/parser" "^7.10.4" "@babel/types" "^7.10.4" +"@babel/template@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.8.3.tgz#e02ad04fe262a657809327f578056ca15fd4d1b8" + integrity sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/parser" "^7.8.3" + "@babel/types" "^7.8.3" + "@babel/traverse@^7.10.4", "@babel/traverse@^7.11.0", "@babel/traverse@^7.9.0": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.11.0.tgz#9b996ce1b98f53f7c3e4175115605d56ed07dd24" @@ -934,6 +1039,21 @@ globals "^11.1.0" lodash "^4.17.19" +"@babel/traverse@^7.8.4": + version "7.8.4" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.4.tgz#f0845822365f9d5b0e312ed3959d3f827f869e3c" + integrity sha512-NGLJPZwnVEyBPLI+bl9y9aSnxMhsKz42so7ApAv9D+b4vAFPpY013FTS9LdKxcABoIYFU52HcYga1pPlx454mg== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/generator" "^7.8.4" + "@babel/helper-function-name" "^7.8.3" + "@babel/helper-split-export-declaration" "^7.8.3" + "@babel/parser" "^7.8.4" + "@babel/types" "^7.8.3" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.13" + "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.4.4", "@babel/types@^7.9.0": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.11.0.tgz#2ae6bf1ba9ae8c3c43824e5861269871b206e90d" @@ -943,6 +1063,35 @@ lodash "^4.17.19" to-fast-properties "^2.0.0" +"@babel/types@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz#5a383dffa5416db1b73dedffd311ffd0788fb31c" + integrity sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg== + dependencies: + esutils "^2.0.2" + lodash "^4.17.13" + to-fast-properties "^2.0.0" + +"@motiz88/ast-types@^0.13.3": + version "0.13.3" + resolved "https://registry.npmjs.org/@motiz88/ast-types/-/ast-types-0.13.3.tgz#0630c411325b145a7ad5632adf8d8d40d28e07d0" + integrity sha512-OzqnfkQv2JjhRqZ0BeuJRuU6rx47LqBYeirDOUfb5C5fFFtpOh0AHTlQRifG4a5kir/OwjWW+x4HlViYxVko/Q== + +"@motiz88/react-native-docgen@0.0.3": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@motiz88/react-native-docgen/-/react-native-docgen-0.0.3.tgz#7c08566fdc4ab1e5fba55860e7aa5e832025d61f" + integrity sha512-mSxa1nLGHmtEA9/EYZqwddYFxDH/F135CEEh2x7OhIGvTJu47E37qcXz83fDWL1KgZnpVHUAvMxAsmH4Npcw/A== + dependencies: + "@babel/core" "^7.7.5" + "@babel/runtime" "^7.7.6" + "@motiz88/ast-types" "^0.13.3" + commander "^2.19.0" + doctrine "^3.0.0" + neo-async "^2.6.1" + node-dir "^0.1.10" + resolve "^1.10.1" + strip-indent "^3.0.0" + "@mrmlnc/readdir-enhanced@^2.2.1": version "2.2.1" resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" @@ -1966,7 +2115,7 @@ comma-separated-tokens@^1.0.0: resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.7.tgz#419cd7fb3258b1ed838dc0953167a25e152f5b59" integrity sha512-Jrx3xsP4pPv4AwJUDWY9wOXGtwPXARej6Xd99h4TUGotmf8APuquKMpK+dnD3UgyxK7OEWaisjZz+3b5jtL6xQ== -commander@^2.15.1, commander@~2.20.3: +commander@^2.15.1, commander@^2.19.0, commander@~2.20.3: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== @@ -2531,6 +2680,13 @@ dir-glob@2.0.0: arrify "^1.0.1" path-type "^3.0.0" +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + docusaurus@1.14.6: version "1.14.6" resolved "https://registry.yarnpkg.com/docusaurus/-/docusaurus-1.14.6.tgz#ffab9f6dafe8c48c477e0ebc7f491e554143b2b5" @@ -3374,7 +3530,7 @@ gaze@^1.1.3: gensync@^1.0.0-beta.1: version "1.0.0-beta.1" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" + resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== get-proxy@^2.0.0: @@ -4654,7 +4810,7 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" -json5@^2.1.2: +json5@^2.1.0, json5@^2.1.2: version "2.1.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== @@ -4935,7 +5091,7 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@~4.17.10: +lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@~4.17.10: version "4.17.19" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== @@ -5205,7 +5361,7 @@ min-indent@^1.0.0: resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== -minimatch@3.0.4, minimatch@^3.0.4, minimatch@~3.0.2: +minimatch@3.0.4, minimatch@^3.0.2, minimatch@^3.0.4, minimatch@~3.0.2: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== @@ -5327,7 +5483,7 @@ negotiator@0.6.2: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== -neo-async@^2.6.0: +neo-async@^2.6.0, neo-async@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== @@ -5365,6 +5521,13 @@ nlcst-to-string@^2.0.0: resolved "https://registry.yarnpkg.com/nlcst-to-string/-/nlcst-to-string-2.0.3.tgz#b7913bb1305263b0561a86de68e179f17f7febe3" integrity sha512-OY2QhGdf6jpYfHqS4vJwqF7aIBZkaMjMUkcHcskMPitvXLuYNGdQvgVWI/5yKwkmIdmhft3ounSJv+Re2yydng== +node-dir@^0.1.10: + version "0.1.17" + resolved "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz#5f5665d93351335caabef8f1c554516cf5f1e4e5" + integrity sha1-X1Zl2TNRM1yqvvjxxVRRbPXx5OU= + dependencies: + minimatch "^3.0.2" + node-fetch@^2.6.0: version "2.6.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" @@ -6571,6 +6734,18 @@ react-dev-utils@^9.1.0: strip-ansi "5.2.0" text-table "0.2.0" +react-docgen-markdown-renderer@^2.1.3: + version "2.1.3" + resolved "https://registry.npmjs.org/react-docgen-markdown-renderer/-/react-docgen-markdown-renderer-2.1.3.tgz#b9278c0a288e46bf682cc53b6a4e5464789600d0" + integrity sha512-583Phg6Pep09XwklAVEf/+v4XrohYfjFMHA5XXmT2Bm+Xao+46ECkJl3pJb+K0GZN5oaxZcGis2cgQpaKqmd2A== + dependencies: + react-docgen-renderer-template "^0.1.0" + +react-docgen-renderer-template@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/react-docgen-renderer-template/-/react-docgen-renderer-template-0.1.0.tgz#29340c947ab42b0060aa8e1c64e379a822e2733e" + integrity sha512-3GyuFI9pBf3E2lW6oX6j3DvTQv55Wc9pWNKwDVcUFf8kDfpDyWmTeAYWPxoSEhSZxhEP+LV/1Tr4DLwE4CULQQ== + react-dom@^16.8.4: version "16.12.0" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.12.0.tgz#0da4b714b8d13c2038c9396b54a92baea633fe11" @@ -6719,7 +6894,7 @@ regenerate@^1.4.0: resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== -regenerator-runtime@^0.13.4: +regenerator-runtime@^0.13.2, regenerator-runtime@^0.13.4: version "0.13.7" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== @@ -6940,6 +7115,13 @@ resolve@^1.1.6, resolve@^1.10.0, resolve@^1.3.2: dependencies: path-parse "^1.0.6" +resolve@^1.10.1: + version "1.15.1" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" + integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w== + dependencies: + path-parse "^1.0.6" + responselike@1.0.2, responselike@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" @@ -7243,6 +7425,11 @@ sliced@^1.0.1: resolved "https://registry.yarnpkg.com/sliced/-/sliced-1.0.1.tgz#0b3a662b5d04c3177b1926bea82b03f837a2ef41" integrity sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E= +snapdragon-lexer@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/snapdragon-lexer/-/snapdragon-lexer-4.0.0.tgz#86e2fb96931e12060839000995b00d3551658292" + integrity sha512-ddXT9cpKI0PUrs3xeoQVKEjequr0UyW9w281dzu8RTgWtqdIGZSvoWDsnIMPCc8Fupk4dByatSodhwYEGgrdSg== + snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -7595,7 +7782,7 @@ strip-indent@^1.0.1: strip-indent@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== dependencies: min-indent "^1.0.0" @@ -7838,6 +8025,13 @@ toidentifier@1.0.0: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== +tokenize-comment@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/tokenize-comment/-/tokenize-comment-3.0.1.tgz#deeffcd57714e6097182a39e032e4ff861c60a1a" + integrity sha512-of5j9zCooBZxcE1EQ9PCjXcuFUPU/h8GxhWqF86cQ3muHQQreIWgY40ZNfuPQUSXyTa6i7oAWqWX4QivzZh26Q== + dependencies: + snapdragon-lexer "^4.0.0" + toml@^2.3.2: version "2.3.6" resolved "https://registry.yarnpkg.com/toml/-/toml-2.3.6.tgz#25b0866483a9722474895559088b436fd11f861b"