From 8e106ba497d32f165efd406a29c3257bed5600a4 Mon Sep 17 00:00:00 2001 From: Rob Snow Date: Fri, 10 Apr 2020 17:35:29 -0700 Subject: [PATCH 1/6] Debugging docs build for cyclic types --- .../@react-spectrum/listbox/docs/ListBox.mdx | 58 ++++++ .../@react-spectrum/listbox/src/ListBox.tsx | 5 +- packages/dev/docs/src/types.js | 2 +- .../dev/parcel-packager-docs/DocsPackager.js | 17 +- .../DocsTransformer.js | 170 ++++++++++++------ 5 files changed, 192 insertions(+), 60 deletions(-) create mode 100644 packages/@react-spectrum/listbox/docs/ListBox.mdx diff --git a/packages/@react-spectrum/listbox/docs/ListBox.mdx b/packages/@react-spectrum/listbox/docs/ListBox.mdx new file mode 100644 index 00000000000..278074b19db --- /dev/null +++ b/packages/@react-spectrum/listbox/docs/ListBox.mdx @@ -0,0 +1,58 @@ + + +import {Layout} from '@react-spectrum/docs'; +export default Layout; + +import docs from 'docs:@react-spectrum/listbox'; +import {HeaderInfo, PropTable} from '@react-spectrum/docs'; +import packageData from '../package.json'; + +```jsx import +import {ListBox, Section, Item} from '@react-spectrum/listbox'; +``` + +# Button + +

{docs.exports.ListBox.description}

+ + + +## Example + +```tsx example + +
+ Left + Middle + Right +
+
+ Top + Center + Bottom +
+
+``` + +## Content + +### Accessibility + +### Internationalization + +## Events + +## Props + + + +## Visual Options diff --git a/packages/@react-spectrum/listbox/src/ListBox.tsx b/packages/@react-spectrum/listbox/src/ListBox.tsx index a5c61df9c1a..7f9379be0f2 100644 --- a/packages/@react-spectrum/listbox/src/ListBox.tsx +++ b/packages/@react-spectrum/listbox/src/ListBox.tsx @@ -34,7 +34,8 @@ function ListBox(props: SpectrumListBoxProps, ref: DOMRef) ); } -// forwardRef doesn't support generic parameters, so cast the result to the correct type -// https://stackoverflow.com/questions/58469229/react-with-typescript-generics-while-using-react-forwardref +/** forwardRef doesn't support generic parameters, so cast the result to the correct type + * https://stackoverflow.com/questions/58469229/react-with-typescript-generics-while-using-react-forwardref + */ const _ListBox = React.forwardRef(ListBox) as (props: SpectrumListBoxProps & {ref?: DOMRef}) => ReactElement; export {_ListBox as ListBox}; diff --git a/packages/dev/docs/src/types.js b/packages/dev/docs/src/types.js index e23fe646f7f..a1b9d142f3e 100644 --- a/packages/dev/docs/src/types.js +++ b/packages/dev/docs/src/types.js @@ -85,7 +85,7 @@ export function Type({type}) { case 'alias': return ; default: - console.log('UNKNOWN TYPE', type); + console.log('no render for TYPE', type); return null; } } diff --git a/packages/dev/parcel-packager-docs/DocsPackager.js b/packages/dev/parcel-packager-docs/DocsPackager.js index d0c4276ff82..d1eb577a080 100644 --- a/packages/dev/parcel-packager-docs/DocsPackager.js +++ b/packages/dev/parcel-packager-docs/DocsPackager.js @@ -11,6 +11,7 @@ */ const {Packager} = require('@parcel/plugin'); +const v8 = require('v8'); module.exports = new Packager({ async package({bundle, bundleGraph, options}) { @@ -171,21 +172,31 @@ module.exports = new Packager({ }); async function parse(asset) { - let code = await asset.getCode(); - return [asset.id, JSON.parse(code)]; + let buffer = await asset.getBuffer(); + return [asset.id, v8.deserialize(buffer)]; } +let cache = new Map(); +// cache things in pre-visit order so the references exist function walk(obj, fn, k = null) { let recurse = (obj) => { + if (cache.has(obj)) { + return cache.get(obj); + } if (Array.isArray(obj)) { - return obj.map((item, i) => walk(item, fn, k)); + let resultArray = []; + cache.set(obj, resultArray); + obj.forEach((item, i) => resultArray[i] = walk(item, fn, k)); + return resultArray; } else if (obj && typeof obj === 'object') { let res = {}; + cache.set(obj, res); for (let key in obj) { res[key] = walk(obj[key], fn, key); } return res; } else { + cache.set(obj, obj); return obj; } }; diff --git a/packages/dev/parcel-transformer-docs/DocsTransformer.js b/packages/dev/parcel-transformer-docs/DocsTransformer.js index 8d910bdfe83..f408c4b6ab0 100644 --- a/packages/dev/parcel-transformer-docs/DocsTransformer.js +++ b/packages/dev/parcel-transformer-docs/DocsTransformer.js @@ -15,9 +15,13 @@ const {parse} = require('@babel/parser'); const traverse = require('@babel/traverse').default; const t = require('@babel/types'); const doctrine = require('doctrine'); +const v8 = require('v8'); + module.exports = new Transformer({ async transform({asset, options}) { + let nodeCache = new Map(); + let partialNode = null; if (asset.type === 'json') { return [asset]; } @@ -28,7 +32,7 @@ module.exports = new Transformer({ allowReturnOutsideFunction: true, strictMode: false, sourceType: 'module', - plugins: ['exportDefaultFrom', 'exportNamespaceFrom', 'dynamicImport', 'typescript', 'jsx'] + plugins: ['classProperties', 'exportDefaultFrom', 'exportNamespaceFrom', 'dynamicImport', 'typescript', 'jsx'] }); let exports = {}; @@ -83,68 +87,94 @@ module.exports = new Transformer({ } }); - function processExport(path) { + function log(message, level, path) { + //console.log(path.node.name); + //console.log(`${asset.filePath}\n${' '.repeat(level)} ${level} ${message}`); + } + + function processPath(path, thing) { + console.log('called processPath'); if (path.isVariableDeclarator()) { + console.log('isVariableDeclarator'); if (!path.node.init) { return; } let docs = getJSDocs(path.parentPath); - let value = processExport(path.get('init')); - addDocs(value, docs); - return value; + processExport(path.get('init'), thing); + addDocs(thing, docs); + return thing; } if (isReactForwardRef(path)) { - return processExport(path.get('arguments.0')); + console.log('isReactForwardRef'); + return processExport(path.get('arguments.0'), thing); } if (path.isFunction()) { + console.log('isFunction'); if (isReactComponent(path)) { + console.log('isReactComponent'); let props = path.node.params[0]; let docs = getJSDocs(path); - return { + return Object.assign(thing, { type: 'component', props: props && props.typeAnnotation ? processExport(path.get('params.0.typeAnnotation.typeAnnotation')) : null, description: docs.description || null - }; + }); } else { // TODO: normal function } } if (path.isTSTypeReference()) { + console.log('isTSTypeReference'); if (path.node.typeParameters) { - return { + console.log('diving into base'); + let base = processExport(path.get('typeName')); + console.log('came out of dive'); + console.log('trying for a match in type reference'); + if (base === partialNode) { + console.log('found a match! in type reference'); + } + let typeParameters = path.get('typeParameters.params').map(p => processExport(p)); + return Object.assign(thing, { type: 'application', - base: processExport(path.get('typeName')), - typeParameters: path.get('typeParameters.params').map(p => processExport(p)) - }; + base, + typeParameters + }); } - return processExport(path.get('typeName')); + let base = processExport(path.get('typeName'), thing); + console.log('trying for a match in type reference in else'); + if (base === partialNode) { + console.log('found a match! in type reference'); + } + return base; } if (path.isImportSpecifier()) { + console.log('isImportSpecifier'); asset.addDependency({ moduleSpecifier: path.parent.source.value, symbols: new Map([[path.node.imported.name, path.node.local.name]]), pipeline: 'docs-json' }); - return { + return Object.assign(thing, { type: 'reference', local: path.node.local.name, imported: path.node.imported.name, specifier: path.parent.source.value - }; + }); } if (path.isTSTypeAliasDeclaration()) { + console.log('isTSTypeAliasDeclaration'); let docs = getJSDocs(path); - return { + return Object.assign(thing, { type: 'alias', id: `${asset.filePath}:${path.node.id.name}`, name: path.node.id.name, @@ -152,65 +182,73 @@ module.exports = new Transformer({ typeParameters: path.node.typeParameters ? path.get('typeParameters.params').map(p => processExport(p)) : [], description: docs.description || null, access: docs.access - }; + }); } if (path.isTSInterfaceDeclaration()) { + console.log('isTSInterfaceDeclaration'); let properties = {}; + if (path.node.id.name === 'PartialNode') { + console.log('try1 parsing PartialNode'); + partialNode = thing; + } for (let propertyPath of path.get('body.body')) { let property = processExport(propertyPath); if (property) { properties[property.name] = property; } else { - console.log('UNKNOWN PROPERTY', propertyPath.node); + console.log('UNKNOWN PROPERTY interface declaration', propertyPath.node); } } let exts = path.node.extends ? path.get('extends').map(e => processExport(e)) : []; let docs = getJSDocs(path); - return addDocs({ + return Object.assign(thing, addDocs({ type: 'interface', id: `${asset.filePath}:${path.node.id.name}`, name: path.node.id.name, extends: exts, properties, typeParameters: path.node.typeParameters ? path.get('typeParameters.params').map(p => processExport(p)) : [] - }, docs); + }, docs)); } if (path.isTSTypeLiteral()) { + console.log('isTSTypeLiteral'); let properties = {}; for (let member of path.get('members')) { let property = processExport(member); if (property) { properties[property.name] = property; } else { - console.log('UNKNOWN PROPERTY', member.node); + console.log('UNKNOWN PROPERTY (type literal)', member.node); } } - return { + return Object.assign(thing, { type: 'object', properties - }; + }); } if (path.isTSPropertySignature()) { + console.log('isTSPropertySignature'); let name = t.isStringLiteral(path.node.key) ? path.node.key.value : path.node.key.name; let docs = getJSDocs(path); - return addDocs({ + return Object.assign(thing, addDocs({ type: 'property', name, value: processExport(path.get('typeAnnotation.typeAnnotation')), optional: path.node.optional || false - }, docs); + }, docs)); } if (path.isTSMethodSignature()) { + console.log('isTSMethodSignature'); let name = t.isStringLiteral(path.node.key) ? path.node.key.value : path.node.key.name; let docs = getJSDocs(path); - return addDocs({ + return Object.assign(thing, addDocs({ type: 'property', name, value: { @@ -227,84 +265,91 @@ module.exports = new Transformer({ ? path.get('typeParameters.params').map(p => processExport(p)) : [] } - }, docs); + }, docs)); } if (path.isTSExpressionWithTypeArguments()) { + console.log('isTSExpressionWithTypeArguments'); if (path.node.typeParameters) { - return { + return Object.assign(thing, { type: 'application', base: processExport(path.get('expression')), typeParameters: path.get('typeParameters.params').map(p => processExport(p)) - }; + }); } - return processExport(path.get('expression')); + return processExport(path.get('expression'), thing); } if (path.isIdentifier()) { + console.log('identifier', path.node.name); let binding = path.scope.getBinding(path.node.name); if (!binding) { - return { + return Object.assign(thing, { type: 'identifier', name: path.node.name - }; + }); } - - return processExport(binding.path); + let bindings = processExport(binding.path, thing, 'binding!'); + console.log('isIdentifier match', bindings === partialNode); + return bindings; } if (path.isTSBooleanKeyword()) { - return {type: 'boolean'}; + return Object.assign(thing, {type: 'boolean'}); } if (path.isTSStringKeyword()) { - return {type: 'string'}; + return Object.assign(thing, {type: 'string'}); } if (path.isTSNumberKeyword()) { - return {type: 'number'}; + return Object.assign(thing, {type: 'number'}); } if (path.isTSAnyKeyword()) { - return {type: 'any'}; + return Object.assign(thing, {type: 'any'}); } if (path.isTSNullKeyword()) { - return {type: 'null'}; + return Object.assign(thing, {type: 'null'}); } if (path.isTSVoidKeyword()) { - return {type: 'void'}; + return Object.assign(thing, {type: 'void'}); } if (path.isTSObjectKeyword()) { - return {type: 'object'}; // ??? + return Object.assign(thing, {type: 'object'}); // ??? } if (path.isTSArrayType()) { - return { + console.log('isTSArrayType'); + return Object.assign(thing, { type: 'array', elementType: processExport(path.get('elementType')) - }; + }); } if (path.isTSUnionType()) { - return { + console.log('isTSUnionType'); + return Object.assign(thing, { type: 'union', elements: path.get('types').map(t => processExport(t)) - }; + }); } if (path.isTSLiteralType()) { - return { + console.log('isTSLiteralType'); + return Object.assign(thing, { type: typeof path.node.literal.value, value: path.node.literal.value - }; + }); } if (path.isTSFunctionType() || path.isTSConstructorType()) { - return { + console.log('isTSFunctionType isTSConstructorType'); + return Object.assign(thing, { type: 'function', parameters: path.get('parameters').map(p => ({ type: 'parameter', @@ -313,27 +358,41 @@ module.exports = new Transformer({ })), return: path.node.typeAnnotation ? processExport(path.get('typeAnnotation.typeAnnotation')) : {type: 'any'}, typeParameters: path.node.typeParameters ? path.get('typeParameters.params').map(p => processExport(p)) : [] - }; + }); } if (path.isTSIntersectionType()) { - return { + console.log('isTSIntersectionType'); + return Object.assign(thing, { type: 'intersection', types: path.get('types').map(p => processExport(p)) - }; + }); } if (path.isTSTypeParameter()) { - return { + console.log('isTSTypeParameter'); + return Object.assign(thing, { type: 'typeParameter', name: path.node.name, default: path.node.default ? processExport(path.get('default')) : null - }; + }); } console.log('UNKNOWN TYPE', path.node.type); } + function processExport(path, thing = {}, binding = false) { + console.log('called processExport'); + if (nodeCache.has(path)) { + console.log('hit the cache'); + console.log(binding, partialNode === nodeCache.get(path)); + return nodeCache.get(path); + } else { + nodeCache.set(path, thing); + return processPath(path, thing); + } + } + function isReactForwardRef(path) { return isReactCall(path, 'forwardRef'); } @@ -479,7 +538,10 @@ module.exports = new Transformer({ // console.log(exports) asset.type = 'json'; - asset.setCode(JSON.stringify(exports, false, 2)); + let inspect = require('util').inspect; + console.log(inspect(exports, {depth: 50})); + let buffer = v8.serialize(exports); + asset.setBuffer(buffer); return [asset]; } }); From 65d7a8863209fb1f416ec3c7a796d7d86afa1e50 Mon Sep 17 00:00:00 2001 From: Rob Snow Date: Mon, 13 Apr 2020 14:04:37 -0700 Subject: [PATCH 2/6] I think I've resolved all the bugs I was dealing with to render the props/types for collections --- .../@react-spectrum/listbox/src/ListBox.tsx | 8 +++- .../@react-types/shared/src/collections.d.ts | 2 +- packages/dev/docs/src/types.js | 22 +++++++--- .../DocsTransformer.js | 44 ++++--------------- 4 files changed, 31 insertions(+), 45 deletions(-) diff --git a/packages/@react-spectrum/listbox/src/ListBox.tsx b/packages/@react-spectrum/listbox/src/ListBox.tsx index 7f9379be0f2..9c5f4a9a332 100644 --- a/packages/@react-spectrum/listbox/src/ListBox.tsx +++ b/packages/@react-spectrum/listbox/src/ListBox.tsx @@ -34,8 +34,12 @@ function ListBox(props: SpectrumListBoxProps, ref: DOMRef) ); } -/** forwardRef doesn't support generic parameters, so cast the result to the correct type - * https://stackoverflow.com/questions/58469229/react-with-typescript-generics-while-using-react-forwardref +// forwardRef doesn't support generic parameters, so cast the result to the correct type +// https://stackoverflow.com/questions/58469229/react-with-typescript-generics-while-using-react-forwardref + + +/** + * Listbox shows lists */ const _ListBox = React.forwardRef(ListBox) as (props: SpectrumListBoxProps & {ref?: DOMRef}) => ReactElement; export {_ListBox as ListBox}; diff --git a/packages/@react-types/shared/src/collections.d.ts b/packages/@react-types/shared/src/collections.d.ts index 4156d1f4daa..a27e3e2383f 100644 --- a/packages/@react-types/shared/src/collections.d.ts +++ b/packages/@react-types/shared/src/collections.d.ts @@ -106,7 +106,7 @@ export interface KeyboardDelegate { /** Returns the key visually one page above the given one, or `null` for none. */ getKeyPageAbove?(key: Key): Key, - + /** Returns the first key, or `null` for none. */ getFirstKey?(): Key, diff --git a/packages/dev/docs/src/types.js b/packages/dev/docs/src/types.js index a1b9d142f3e..2756a2f1e6e 100644 --- a/packages/dev/docs/src/types.js +++ b/packages/dev/docs/src/types.js @@ -85,7 +85,7 @@ export function Type({type}) { case 'alias': return ; default: - console.log('no render for TYPE', type); + console.log('no render component for TYPE', type); return null; } } @@ -122,11 +122,21 @@ function Identifier({name}) { function JoinList({elements, joiner}) { return elements - .reduce((acc, v, i) => [ - ...acc, - {joiner}, - - ], []).slice(1); + .reduce((acc, v, i) => { + if (!v) { + return acc; + } + return [ + ...acc, + + {joiner} + , + + ]; + }, []).slice(1); } function UnionType({elements}) { diff --git a/packages/dev/parcel-transformer-docs/DocsTransformer.js b/packages/dev/parcel-transformer-docs/DocsTransformer.js index f408c4b6ab0..b24bae8ebb2 100644 --- a/packages/dev/parcel-transformer-docs/DocsTransformer.js +++ b/packages/dev/parcel-transformer-docs/DocsTransformer.js @@ -93,9 +93,14 @@ module.exports = new Transformer({ } function processPath(path, thing) { - console.log('called processPath'); + if (path.isTSParenthesizedType()) { + return processExport(path.get('typeAnnotation'), thing); + } + if (path.isTSAsExpression()) { + // not sure why I can't pass typeAnnotation instead + return processExport(path.get('expression'), thing); + } if (path.isVariableDeclarator()) { - console.log('isVariableDeclarator'); if (!path.node.init) { return; } @@ -107,14 +112,11 @@ module.exports = new Transformer({ } if (isReactForwardRef(path)) { - console.log('isReactForwardRef'); return processExport(path.get('arguments.0'), thing); } if (path.isFunction()) { - console.log('isFunction'); if (isReactComponent(path)) { - console.log('isReactComponent'); let props = path.node.params[0]; let docs = getJSDocs(path); return Object.assign(thing, { @@ -130,15 +132,8 @@ module.exports = new Transformer({ } if (path.isTSTypeReference()) { - console.log('isTSTypeReference'); if (path.node.typeParameters) { - console.log('diving into base'); let base = processExport(path.get('typeName')); - console.log('came out of dive'); - console.log('trying for a match in type reference'); - if (base === partialNode) { - console.log('found a match! in type reference'); - } let typeParameters = path.get('typeParameters.params').map(p => processExport(p)); return Object.assign(thing, { type: 'application', @@ -148,15 +143,10 @@ module.exports = new Transformer({ } let base = processExport(path.get('typeName'), thing); - console.log('trying for a match in type reference in else'); - if (base === partialNode) { - console.log('found a match! in type reference'); - } return base; } if (path.isImportSpecifier()) { - console.log('isImportSpecifier'); asset.addDependency({ moduleSpecifier: path.parent.source.value, symbols: new Map([[path.node.imported.name, path.node.local.name]]), @@ -172,7 +162,6 @@ module.exports = new Transformer({ } if (path.isTSTypeAliasDeclaration()) { - console.log('isTSTypeAliasDeclaration'); let docs = getJSDocs(path); return Object.assign(thing, { type: 'alias', @@ -186,10 +175,8 @@ module.exports = new Transformer({ } if (path.isTSInterfaceDeclaration()) { - console.log('isTSInterfaceDeclaration'); let properties = {}; if (path.node.id.name === 'PartialNode') { - console.log('try1 parsing PartialNode'); partialNode = thing; } for (let propertyPath of path.get('body.body')) { @@ -215,7 +202,6 @@ module.exports = new Transformer({ } if (path.isTSTypeLiteral()) { - console.log('isTSTypeLiteral'); let properties = {}; for (let member of path.get('members')) { let property = processExport(member); @@ -233,7 +219,6 @@ module.exports = new Transformer({ } if (path.isTSPropertySignature()) { - console.log('isTSPropertySignature'); let name = t.isStringLiteral(path.node.key) ? path.node.key.value : path.node.key.name; let docs = getJSDocs(path); return Object.assign(thing, addDocs({ @@ -245,7 +230,6 @@ module.exports = new Transformer({ } if (path.isTSMethodSignature()) { - console.log('isTSMethodSignature'); let name = t.isStringLiteral(path.node.key) ? path.node.key.value : path.node.key.name; let docs = getJSDocs(path); return Object.assign(thing, addDocs({ @@ -269,7 +253,6 @@ module.exports = new Transformer({ } if (path.isTSExpressionWithTypeArguments()) { - console.log('isTSExpressionWithTypeArguments'); if (path.node.typeParameters) { return Object.assign(thing, { type: 'application', @@ -282,7 +265,6 @@ module.exports = new Transformer({ } if (path.isIdentifier()) { - console.log('identifier', path.node.name); let binding = path.scope.getBinding(path.node.name); if (!binding) { return Object.assign(thing, { @@ -290,8 +272,7 @@ module.exports = new Transformer({ name: path.node.name }); } - let bindings = processExport(binding.path, thing, 'binding!'); - console.log('isIdentifier match', bindings === partialNode); + let bindings = processExport(binding.path, thing); return bindings; } @@ -324,7 +305,6 @@ module.exports = new Transformer({ } if (path.isTSArrayType()) { - console.log('isTSArrayType'); return Object.assign(thing, { type: 'array', elementType: processExport(path.get('elementType')) @@ -332,7 +312,6 @@ module.exports = new Transformer({ } if (path.isTSUnionType()) { - console.log('isTSUnionType'); return Object.assign(thing, { type: 'union', elements: path.get('types').map(t => processExport(t)) @@ -340,7 +319,6 @@ module.exports = new Transformer({ } if (path.isTSLiteralType()) { - console.log('isTSLiteralType'); return Object.assign(thing, { type: typeof path.node.literal.value, value: path.node.literal.value @@ -348,7 +326,6 @@ module.exports = new Transformer({ } if (path.isTSFunctionType() || path.isTSConstructorType()) { - console.log('isTSFunctionType isTSConstructorType'); return Object.assign(thing, { type: 'function', parameters: path.get('parameters').map(p => ({ @@ -362,7 +339,6 @@ module.exports = new Transformer({ } if (path.isTSIntersectionType()) { - console.log('isTSIntersectionType'); return Object.assign(thing, { type: 'intersection', types: path.get('types').map(p => processExport(p)) @@ -370,7 +346,6 @@ module.exports = new Transformer({ } if (path.isTSTypeParameter()) { - console.log('isTSTypeParameter'); return Object.assign(thing, { type: 'typeParameter', name: path.node.name, @@ -382,10 +357,7 @@ module.exports = new Transformer({ } function processExport(path, thing = {}, binding = false) { - console.log('called processExport'); if (nodeCache.has(path)) { - console.log('hit the cache'); - console.log(binding, partialNode === nodeCache.get(path)); return nodeCache.get(path); } else { nodeCache.set(path, thing); From 7ad88baf79d4d81aeff9a0bcbcc0b5af67ceb22d Mon Sep 17 00:00:00 2001 From: Rob Snow Date: Mon, 13 Apr 2020 14:07:45 -0700 Subject: [PATCH 3/6] Correct component name for title --- packages/@react-spectrum/listbox/docs/ListBox.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/@react-spectrum/listbox/docs/ListBox.mdx b/packages/@react-spectrum/listbox/docs/ListBox.mdx index 278074b19db..bfdb067c521 100644 --- a/packages/@react-spectrum/listbox/docs/ListBox.mdx +++ b/packages/@react-spectrum/listbox/docs/ListBox.mdx @@ -18,7 +18,7 @@ import packageData from '../package.json'; import {ListBox, Section, Item} from '@react-spectrum/listbox'; ``` -# Button +# ListBox

{docs.exports.ListBox.description}

From 8c0ae52515d0669f060ebbd544cc9a3825ebd253 Mon Sep 17 00:00:00 2001 From: Rob Snow Date: Mon, 13 Apr 2020 14:26:01 -0700 Subject: [PATCH 4/6] Rename variable --- .../DocsTransformer.js | 81 +++++++++---------- 1 file changed, 36 insertions(+), 45 deletions(-) diff --git a/packages/dev/parcel-transformer-docs/DocsTransformer.js b/packages/dev/parcel-transformer-docs/DocsTransformer.js index b24bae8ebb2..c291bedb85b 100644 --- a/packages/dev/parcel-transformer-docs/DocsTransformer.js +++ b/packages/dev/parcel-transformer-docs/DocsTransformer.js @@ -21,7 +21,6 @@ const v8 = require('v8'); module.exports = new Transformer({ async transform({asset, options}) { let nodeCache = new Map(); - let partialNode = null; if (asset.type === 'json') { return [asset]; } @@ -87,18 +86,13 @@ module.exports = new Transformer({ } }); - function log(message, level, path) { - //console.log(path.node.name); - //console.log(`${asset.filePath}\n${' '.repeat(level)} ${level} ${message}`); - } - - function processPath(path, thing) { + function processPath(path, node) { if (path.isTSParenthesizedType()) { - return processExport(path.get('typeAnnotation'), thing); + return processExport(path.get('typeAnnotation'), node); } if (path.isTSAsExpression()) { // not sure why I can't pass typeAnnotation instead - return processExport(path.get('expression'), thing); + return processExport(path.get('expression'), node); } if (path.isVariableDeclarator()) { if (!path.node.init) { @@ -106,20 +100,20 @@ module.exports = new Transformer({ } let docs = getJSDocs(path.parentPath); - processExport(path.get('init'), thing); - addDocs(thing, docs); - return thing; + processExport(path.get('init'), node); + addDocs(node, docs); + return node; } if (isReactForwardRef(path)) { - return processExport(path.get('arguments.0'), thing); + return processExport(path.get('arguments.0'), node); } if (path.isFunction()) { if (isReactComponent(path)) { let props = path.node.params[0]; let docs = getJSDocs(path); - return Object.assign(thing, { + return Object.assign(node, { type: 'component', props: props && props.typeAnnotation ? processExport(path.get('params.0.typeAnnotation.typeAnnotation')) @@ -135,14 +129,14 @@ module.exports = new Transformer({ if (path.node.typeParameters) { let base = processExport(path.get('typeName')); let typeParameters = path.get('typeParameters.params').map(p => processExport(p)); - return Object.assign(thing, { + return Object.assign(node, { type: 'application', base, typeParameters }); } - let base = processExport(path.get('typeName'), thing); + let base = processExport(path.get('typeName'), node); return base; } @@ -153,7 +147,7 @@ module.exports = new Transformer({ pipeline: 'docs-json' }); - return Object.assign(thing, { + return Object.assign(node, { type: 'reference', local: path.node.local.name, imported: path.node.imported.name, @@ -163,7 +157,7 @@ module.exports = new Transformer({ if (path.isTSTypeAliasDeclaration()) { let docs = getJSDocs(path); - return Object.assign(thing, { + return Object.assign(node, { type: 'alias', id: `${asset.filePath}:${path.node.id.name}`, name: path.node.id.name, @@ -176,9 +170,6 @@ module.exports = new Transformer({ if (path.isTSInterfaceDeclaration()) { let properties = {}; - if (path.node.id.name === 'PartialNode') { - partialNode = thing; - } for (let propertyPath of path.get('body.body')) { let property = processExport(propertyPath); if (property) { @@ -191,7 +182,7 @@ module.exports = new Transformer({ let exts = path.node.extends ? path.get('extends').map(e => processExport(e)) : []; let docs = getJSDocs(path); - return Object.assign(thing, addDocs({ + return Object.assign(node, addDocs({ type: 'interface', id: `${asset.filePath}:${path.node.id.name}`, name: path.node.id.name, @@ -212,7 +203,7 @@ module.exports = new Transformer({ } } - return Object.assign(thing, { + return Object.assign(node, { type: 'object', properties }); @@ -221,7 +212,7 @@ module.exports = new Transformer({ if (path.isTSPropertySignature()) { let name = t.isStringLiteral(path.node.key) ? path.node.key.value : path.node.key.name; let docs = getJSDocs(path); - return Object.assign(thing, addDocs({ + return Object.assign(node, addDocs({ type: 'property', name, value: processExport(path.get('typeAnnotation.typeAnnotation')), @@ -232,7 +223,7 @@ module.exports = new Transformer({ if (path.isTSMethodSignature()) { let name = t.isStringLiteral(path.node.key) ? path.node.key.value : path.node.key.name; let docs = getJSDocs(path); - return Object.assign(thing, addDocs({ + return Object.assign(node, addDocs({ type: 'property', name, value: { @@ -254,79 +245,79 @@ module.exports = new Transformer({ if (path.isTSExpressionWithTypeArguments()) { if (path.node.typeParameters) { - return Object.assign(thing, { + return Object.assign(node, { type: 'application', base: processExport(path.get('expression')), typeParameters: path.get('typeParameters.params').map(p => processExport(p)) }); } - return processExport(path.get('expression'), thing); + return processExport(path.get('expression'), node); } if (path.isIdentifier()) { let binding = path.scope.getBinding(path.node.name); if (!binding) { - return Object.assign(thing, { + return Object.assign(node, { type: 'identifier', name: path.node.name }); } - let bindings = processExport(binding.path, thing); + let bindings = processExport(binding.path, node); return bindings; } if (path.isTSBooleanKeyword()) { - return Object.assign(thing, {type: 'boolean'}); + return Object.assign(node, {type: 'boolean'}); } if (path.isTSStringKeyword()) { - return Object.assign(thing, {type: 'string'}); + return Object.assign(node, {type: 'string'}); } if (path.isTSNumberKeyword()) { - return Object.assign(thing, {type: 'number'}); + return Object.assign(node, {type: 'number'}); } if (path.isTSAnyKeyword()) { - return Object.assign(thing, {type: 'any'}); + return Object.assign(node, {type: 'any'}); } if (path.isTSNullKeyword()) { - return Object.assign(thing, {type: 'null'}); + return Object.assign(node, {type: 'null'}); } if (path.isTSVoidKeyword()) { - return Object.assign(thing, {type: 'void'}); + return Object.assign(node, {type: 'void'}); } if (path.isTSObjectKeyword()) { - return Object.assign(thing, {type: 'object'}); // ??? + return Object.assign(node, {type: 'object'}); // ??? } if (path.isTSArrayType()) { - return Object.assign(thing, { + return Object.assign(node, { type: 'array', elementType: processExport(path.get('elementType')) }); } if (path.isTSUnionType()) { - return Object.assign(thing, { + return Object.assign(node, { type: 'union', elements: path.get('types').map(t => processExport(t)) }); } if (path.isTSLiteralType()) { - return Object.assign(thing, { + return Object.assign(node, { type: typeof path.node.literal.value, value: path.node.literal.value }); } if (path.isTSFunctionType() || path.isTSConstructorType()) { - return Object.assign(thing, { + return Object.assign(node, { type: 'function', parameters: path.get('parameters').map(p => ({ type: 'parameter', @@ -339,14 +330,14 @@ module.exports = new Transformer({ } if (path.isTSIntersectionType()) { - return Object.assign(thing, { + return Object.assign(node, { type: 'intersection', types: path.get('types').map(p => processExport(p)) }); } if (path.isTSTypeParameter()) { - return Object.assign(thing, { + return Object.assign(node, { type: 'typeParameter', name: path.node.name, default: path.node.default ? processExport(path.get('default')) : null @@ -356,12 +347,12 @@ module.exports = new Transformer({ console.log('UNKNOWN TYPE', path.node.type); } - function processExport(path, thing = {}, binding = false) { + function processExport(path, node = {}) { if (nodeCache.has(path)) { return nodeCache.get(path); } else { - nodeCache.set(path, thing); - return processPath(path, thing); + nodeCache.set(path, node); + return processPath(path, node); } } From fe0c5b407655df9d738f2c4ce2af45ca72a3825f Mon Sep 17 00:00:00 2001 From: Rob Snow Date: Mon, 13 Apr 2020 14:36:48 -0700 Subject: [PATCH 5/6] remove early return --- packages/dev/docs/src/types.js | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/packages/dev/docs/src/types.js b/packages/dev/docs/src/types.js index 2756a2f1e6e..886d7ebac23 100644 --- a/packages/dev/docs/src/types.js +++ b/packages/dev/docs/src/types.js @@ -122,21 +122,16 @@ function Identifier({name}) { function JoinList({elements, joiner}) { return elements - .reduce((acc, v, i) => { - if (!v) { - return acc; - } - return [ - ...acc, - - {joiner} - , - - ]; - }, []).slice(1); + .reduce((acc, v, i) => [ + ...acc, + + {joiner} + , + + ], []).slice(1); } function UnionType({elements}) { From 2fc7ad233aa63877075c42bc0edad25ef640c47d Mon Sep 17 00:00:00 2001 From: Rob Snow Date: Mon, 13 Apr 2020 14:39:32 -0700 Subject: [PATCH 6/6] remove extra console log --- packages/dev/parcel-transformer-docs/DocsTransformer.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/dev/parcel-transformer-docs/DocsTransformer.js b/packages/dev/parcel-transformer-docs/DocsTransformer.js index c291bedb85b..c8726a057c2 100644 --- a/packages/dev/parcel-transformer-docs/DocsTransformer.js +++ b/packages/dev/parcel-transformer-docs/DocsTransformer.js @@ -501,8 +501,6 @@ module.exports = new Transformer({ // console.log(exports) asset.type = 'json'; - let inspect = require('util').inspect; - console.log(inspect(exports, {depth: 50})); let buffer = v8.serialize(exports); asset.setBuffer(buffer); return [asset];