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 ? '
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"