@supernovaio/cli 2.0.41 → 2.0.42
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/code-analyzer/analyzers/component-usage.js.map +1 -1
- package/dist/code-analyzer/analyzers/helpers.js.map +1 -1
- package/dist/code-analyzer/analyzers/index.js.map +1 -1
- package/dist/code-analyzer/analyzers/jsdoc.js.map +1 -1
- package/dist/code-analyzer/analyzers/static-components.js.map +1 -1
- package/dist/code-analyzer/analyzers/storybook-docs.js.map +1 -1
- package/dist/code-analyzer/analyzers/storybook-stories.js.map +1 -1
- package/dist/code-analyzer/analyzers/types.js.map +1 -1
- package/dist/code-analyzer/analyzers/typescript-api.js.map +1 -1
- package/dist/code-analyzer/components/analyze.js.map +1 -1
- package/dist/code-analyzer/components/mappers/component.js.map +1 -1
- package/dist/code-analyzer/components/mappers/property.js.map +1 -1
- package/dist/code-analyzer/components/parser/index.js.map +1 -1
- package/dist/code-analyzer/components/parser/module-parser.js.map +1 -1
- package/dist/code-analyzer/components/parser/parser.js.map +1 -1
- package/dist/code-analyzer/components/parser/types.js.map +1 -1
- package/dist/code-analyzer/components/parser/utils/build-filter.js.map +1 -1
- package/dist/code-analyzer/components/parser/utils/filter-duplicates.js.map +1 -1
- package/dist/code-analyzer/components/parser/utils/is-react-component.js.map +1 -1
- package/dist/code-analyzer/components/parser/utils/trim-file-name.js.map +1 -1
- package/dist/code-analyzer/components/types.js.map +1 -1
- package/dist/code-analyzer/components/utils/get-module-exports-path.js.map +1 -1
- package/dist/code-analyzer/index.js.map +1 -1
- package/dist/code-analyzer/orchestrator/index.js.map +1 -1
- package/dist/code-analyzer/orchestrator/run-analysis.js.map +1 -1
- package/dist/code-analyzer/snapshot/index.js.map +1 -1
- package/dist/code-analyzer/snapshot/write-snapshot.js.map +1 -1
- package/dist/commands/analyze/adoption.js.map +1 -1
- package/dist/commands/analyze/components.js.map +1 -1
- package/dist/commands/analyze/status.js.map +1 -1
- package/dist/commands/analyze.js.map +1 -1
- package/dist/commands/components-import.js.map +1 -1
- package/dist/commands/describe-design-system.js.map +1 -1
- package/dist/commands/describe-workspaces.js.map +1 -1
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/logout.js.map +1 -1
- package/dist/commands/publish-documentation.js.map +1 -1
- package/dist/commands/run-local-exporter.js.map +1 -1
- package/dist/commands/storybook-import.js.map +1 -1
- package/dist/commands/sync-tokens.js.map +1 -1
- package/dist/commands/template-upload.d.ts +0 -1
- package/dist/commands/template-upload.d.ts.map +1 -1
- package/dist/commands/template-upload.js +25 -34
- package/dist/commands/template-upload.js.map +1 -1
- package/dist/commands/whoami.js.map +1 -1
- package/dist/hooks/postrun/save-config.js.map +1 -1
- package/dist/hooks/prerun/load-config.js.map +1 -1
- package/dist/hooks/prerun/sentry.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/services/auth.service.js.map +1 -1
- package/dist/services/index.js.map +1 -1
- package/dist/services/user.service.d.ts.map +1 -1
- package/dist/services/user.service.js.map +1 -1
- package/dist/services/vault.service.js.map +1 -1
- package/dist/types/base-command.js.map +1 -1
- package/dist/types/config.js.map +1 -1
- package/dist/types/environment.js.map +1 -1
- package/dist/types/flags.js.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/login.js.map +1 -1
- package/dist/types/not-authorized.error.js.map +1 -1
- package/dist/types/sentry-command.js.map +1 -1
- package/dist/types/types.js.map +1 -1
- package/dist/utils/analyze-command.js.map +1 -1
- package/dist/utils/analyze-status.js.map +1 -1
- package/dist/utils/api-client.js.map +1 -1
- package/dist/utils/common.js.map +1 -1
- package/dist/utils/config.service.js.map +1 -1
- package/dist/utils/discover.d.ts +1 -1
- package/dist/utils/discover.d.ts.map +1 -1
- package/dist/utils/discover.js +5 -5
- package/dist/utils/discover.js.map +1 -1
- package/dist/utils/figma-tokens-data-loader.js.map +1 -1
- package/dist/utils/http-client.js.map +1 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/run-exporter/exporter-utils.js.map +1 -1
- package/dist/utils/sdk.js.map +1 -1
- package/dist/utils/validate-templates.js.map +1 -1
- package/oclif.manifest.json +1 -8
- package/package.json +11 -11
- package/dist/docker-scripts/extract-private-packages.js +0 -74
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.js","sources":["../../../../src/code-analyzer/components/parser/parser.ts"],"sourceRoot":"","sourcesContent":["import path from \"node:path\"\nimport type { SymbolDisplayPart } from \"typescript\"\nimport * as ts from \"typescript\"\n\nimport {\n Component,\n ComponentDoc,\n ComponentNameResolver,\n InterfaceOrTypeAliasDeclaration,\n JSDoc,\n Method,\n MethodParameter,\n ParentType,\n ParserOptions,\n PropFilter,\n PropItemType,\n Props,\n ResolvedType,\n ResolvedTypeKind,\n StringIndexedObject,\n} from \"./types.js\"\nimport { buildFilter } from \"./utils/build-filter.js\"\nimport { isReactComponent } from \"./utils/is-react-component.js\"\nimport { trimFileName } from \"./utils/trim-file-name.js\"\n\nexport const defaultOptions: ts.CompilerOptions = {\n jsx: ts.JsxEmit.React,\n module: ts.ModuleKind.CommonJS,\n target: ts.ScriptTarget.Latest,\n}\n\nconst isOptional = (prop: ts.Symbol) =>\n // tslint:disable-next-line:no-bitwise\n // eslint-disable-next-line no-bitwise\n (prop.getFlags() & ts.SymbolFlags.Optional) !== 0\n\nconst defaultJSDoc: JSDoc = {\n description: \"\",\n fullComment: \"\",\n tags: {},\n}\n\nexport class Parser {\n private readonly checker: ts.TypeChecker\n private readonly propFilter: PropFilter\n private readonly savePropValueAsString: boolean\n private readonly shouldExtractLiteralValuesFromEnum: boolean\n private readonly shouldExtractValuesFromUnion: boolean\n private readonly shouldIncludeExpression: boolean\n private readonly shouldIncludePropTagMap: boolean\n private readonly shouldRemoveUndefinedFromOptional: boolean\n private readonly shouldSortUnions: boolean\n\n constructor(program: ts.Program, opts: ParserOptions) {\n const {\n savePropValueAsString,\n shouldExtractLiteralValuesFromEnum,\n shouldExtractValuesFromUnion,\n shouldIncludeExpression,\n shouldIncludePropTagMap,\n shouldRemoveUndefinedFromOptional,\n shouldSortUnions,\n } = opts\n this.checker = program.getTypeChecker()\n this.propFilter = buildFilter(opts)\n this.shouldExtractLiteralValuesFromEnum = Boolean(shouldExtractLiteralValuesFromEnum)\n this.shouldRemoveUndefinedFromOptional = Boolean(shouldRemoveUndefinedFromOptional)\n this.shouldExtractValuesFromUnion = Boolean(shouldExtractValuesFromUnion)\n this.shouldSortUnions = Boolean(shouldSortUnions)\n this.savePropValueAsString = Boolean(savePropValueAsString)\n this.shouldIncludePropTagMap = Boolean(shouldIncludePropTagMap)\n this.shouldIncludeExpression = Boolean(shouldIncludeExpression)\n }\n\n public extractDefaultPropsFromComponent(symbol: ts.Symbol, source: ts.SourceFile) {\n const possibleStatements = [\n ...source.statements\n // ensure that name property is available\n .filter(stmt => Boolean((stmt as ts.ClassDeclaration).name))\n .filter(stmt => this.checker.getSymbolAtLocation((stmt as ts.ClassDeclaration).name!) === symbol),\n ...source.statements.filter(stmt => ts.isExpressionStatement(stmt) || ts.isVariableStatement(stmt)),\n ]\n\n return possibleStatements.reduce((res, statement) => {\n if (statementIsClassDeclaration(statement) && statement.members.length > 0) {\n const possibleDefaultProps = statement.members.filter(\n member => member.name && getPropertyName(member.name) === \"defaultProps\",\n )\n\n if (possibleDefaultProps.length === 0) {\n return res\n }\n\n const defaultProps = possibleDefaultProps[0]\n let { initializer } = defaultProps as ts.PropertyDeclaration\n if (!initializer) {\n return res\n }\n\n let { properties } = initializer as ts.ObjectLiteralExpression\n\n while (ts.isIdentifier(initializer as ts.Identifier)) {\n const defaultPropsReference = this.checker.getSymbolAtLocation(initializer as ts.Node)\n if (defaultPropsReference) {\n const declarations = defaultPropsReference.getDeclarations()\n\n if (declarations) {\n if (ts.isImportSpecifier(declarations[0])) {\n const symbol = this.checker.getSymbolAtLocation(declarations[0].name)\n if (!symbol) {\n continue\n }\n\n const aliasedSymbol = this.checker.getAliasedSymbol(symbol)\n if (aliasedSymbol && aliasedSymbol.declarations && aliasedSymbol.declarations.length > 0) {\n initializer = (aliasedSymbol.declarations[0] as ts.VariableDeclaration).initializer\n } else {\n continue\n }\n } else {\n initializer = (declarations[0] as ts.VariableDeclaration).initializer\n }\n\n properties = (initializer as ts.ObjectLiteralExpression).properties\n }\n }\n }\n\n let propMap = {}\n\n if (properties) {\n propMap = this.getPropMap(properties as ts.NodeArray<ts.PropertyAssignment>)\n }\n\n return {\n ...res,\n ...propMap,\n }\n }\n\n if (statementIsStatelessWithDefaultProps(statement)) {\n let propMap = {}\n for (const child of (statement as ts.ExpressionStatement).getChildren()) {\n let { right } = child as ts.BinaryExpression\n\n if (right && ts.isIdentifier(right)) {\n const value = ((source as any).locals as ts.SymbolTable).get(right.escapedText)\n\n if (\n value &&\n value.valueDeclaration &&\n ts.isVariableDeclaration(value.valueDeclaration) &&\n value.valueDeclaration.initializer\n ) {\n right = value.valueDeclaration.initializer\n }\n }\n\n if (right) {\n const { properties } = right as ts.ObjectLiteralExpression\n if (properties) {\n propMap = this.getPropMap(properties as ts.NodeArray<ts.PropertyAssignment>)\n }\n }\n }\n\n return {\n ...res,\n ...propMap,\n }\n }\n\n const functionStatement = this.getFunctionStatement(statement)\n\n // Extracting default values from props destructuring\n if (functionStatement && functionStatement.parameters && functionStatement.parameters.length > 0) {\n const { name } = functionStatement.parameters[0]\n\n if (ts.isObjectBindingPattern(name)) {\n return {\n ...res,\n ...this.getPropMap(name.elements),\n }\n }\n }\n\n return res\n }, {})\n }\n\n public extractMembersFromType(type: ts.Type): ts.Symbol[] {\n const methodSymbols: ts.Symbol[] = []\n\n /**\n * Need to loop over properties first so we capture any\n * static methods. static methods aren't captured in type.symbol.members\n */\n for (const property of type.getProperties()) {\n // Only add members, don't add non-member properties\n if (this.getCallSignature(property)) {\n methodSymbols.push(property)\n }\n }\n\n if (type.symbol && type.symbol.members) {\n for (const [_, member] of type.symbol.members) {\n methodSymbols.push(member)\n }\n }\n\n return methodSymbols\n }\n\n public extractPropsFromTypeIfStatefulComponent(type: ts.Type): null | ts.Symbol {\n const constructSignatures = type.getConstructSignatures()\n\n if (constructSignatures.length > 0) {\n // React.Component. Is a class, so the props object we're interested\n // in is the type of 'props' property of the object constructed by the class.\n\n for (const sig of constructSignatures) {\n const instanceType = sig.getReturnType()\n\n const props = instanceType.getProperty(\"props\")\n\n if (props) {\n return props\n }\n }\n }\n\n return null\n }\n\n public extractPropsFromTypeIfStatelessComponent(type: ts.Type): null | ts.Symbol {\n const callSignatures = type.getCallSignatures()\n\n if (callSignatures.length > 0) {\n // Could be a stateless component. Is a function, so the props object we're interested\n // in is the (only) parameter.\n\n for (const sig of callSignatures) {\n const params = sig.getParameters()\n if (params.length === 0) {\n continue\n }\n\n // Maybe we could check return type instead,\n // but not sure if Element, ReactElement<T> are all possible values\n const propsParam = params[0]\n if (propsParam.name === \"props\" || params.length === 1) {\n return propsParam\n }\n }\n }\n\n return null\n }\n\n public findDocComment(symbol: ts.Symbol): JSDoc {\n const comment = this.getFullJsDocComment(symbol)\n if (comment.fullComment || comment.tags.default) {\n return comment\n }\n\n const rootSymbols = this.checker.getRootSymbols(symbol)\n const commentsOnRootSymbols = rootSymbols\n .filter(x => x !== symbol)\n .map(x => this.getFullJsDocComment(x))\n .filter(x => Boolean(x.fullComment) || Boolean(comment.tags.default))\n\n if (commentsOnRootSymbols.length > 0) {\n return commentsOnRootSymbols[0]\n }\n\n return defaultJSDoc\n }\n\n public getCallSignature(symbol: ts.Symbol) {\n const symbolType = this.checker.getTypeOfSymbolAtLocation(symbol, symbol.valueDeclaration!)\n\n return symbolType.getCallSignatures()[0]\n }\n\n public getComponentInfo(\n exp: ts.Symbol,\n source: ts.SourceFile,\n componentNameResolver: ComponentNameResolver = () => undefined,\n customComponentTypes: ParserOptions[\"customComponentTypes\"] = [],\n ): ComponentDoc | null {\n const rootExportName = exp.getName()\n if (exp.declarations && exp.declarations.length === 0) {\n return null\n }\n\n let rootExp = this.getComponentFromExpression(exp)\n const declaration = rootExp.valueDeclaration || rootExp.declarations![0]\n const type = this.checker.getTypeOfSymbolAtLocation(rootExp, declaration)\n\n let commentSource = rootExp\n const typeSymbol = type.symbol || type.aliasSymbol\n const originalName = rootExp.getName()\n\n // get file path of aliased symbol. E.g. when there is named export we want to get filename of exported symbol not the file that declares the named export\n const filePath =\n exp.flags & ts.SymbolFlags.Alias\n ? this.checker.getAliasedSymbol(exp).declarations?.[0]?.getSourceFile().fileName || source.fileName\n : source.fileName\n\n if (!rootExp.valueDeclaration) {\n if (!typeSymbol && (rootExp.flags & ts.SymbolFlags.Alias) !== 0) {\n commentSource = this.checker.getAliasedSymbol(commentSource)\n } else if (typeSymbol) {\n rootExp = typeSymbol\n const expName = rootExp.getName()\n\n const defaultComponentTypes = [\n \"__function\",\n \"StatelessComponent\",\n \"Stateless\",\n \"StyledComponentClass\",\n \"StyledComponent\",\n \"IStyledComponent\",\n \"FunctionComponent\",\n \"ForwardRefExoticComponent\",\n \"MemoExoticComponent\",\n ]\n\n const supportedComponentTypes = [...defaultComponentTypes, ...customComponentTypes]\n\n commentSource = supportedComponentTypes.includes(expName)\n ? this.checker.getAliasedSymbol(commentSource)\n : rootExp\n } else {\n return null\n }\n } else if (type.symbol && (ts.isPropertyAccessExpression(declaration) || ts.isPropertyDeclaration(declaration))) {\n commentSource = type.symbol\n }\n\n // Skip over PropTypes that are exported\n if (typeSymbol && (typeSymbol.getEscapedName() === \"Requireable\" || typeSymbol.getEscapedName() === \"Validator\")) {\n return null\n }\n\n const propsType =\n this.extractPropsFromTypeIfStatelessComponent(type) || this.extractPropsFromTypeIfStatefulComponent(type)\n\n const nameSource = originalName === \"default\" ? rootExp : commentSource\n\n const resolvedComponentName = componentNameResolver(nameSource, source)\n const { description, tags } = this.findDocComment(commentSource)\n\n const exportName = computeComponentExportName(nameSource, source, customComponentTypes, rootExportName)\n\n const displayName = resolvedComponentName || tags.visibleName || computeComponentDisplayName(nameSource, source)\n\n const methods = this.getMethodsInfo(type)\n\n let result: ComponentDoc | null = null\n\n if (propsType) {\n // if there is no value declaration then don't pick up default props\n const defaultProps = commentSource.valueDeclaration\n ? this.extractDefaultPropsFromComponent(commentSource, commentSource.valueDeclaration.getSourceFile())\n : {}\n const props = this.getPropsInfo(propsType, defaultProps)\n\n for (const propName of Object.keys(props)) {\n const prop = props[propName]\n const component: Component = { name: exportName }\n if (!this.propFilter(prop, component)) {\n delete props[propName]\n }\n }\n\n result = {\n description,\n displayName,\n exportName,\n filePath,\n methods,\n props,\n tags,\n }\n } else if (exportName) {\n result = {\n description,\n displayName,\n exportName,\n filePath,\n methods,\n props: {},\n tags,\n }\n }\n\n if (result !== null && this.shouldIncludeExpression) {\n result.expression = rootExp\n result.rootExpression = exp\n }\n\n return result\n }\n\n /**\n * Gets the TypeScript type structure for a given type\n */\n public getResolvedType({\n propType,\n skipUndefinedInUnion,\n visitedTypes = new Set(),\n }: {\n propType: ts.Type\n skipUndefinedInUnion?: boolean\n visitedTypes?: Set<string>\n }): ResolvedType {\n const typeString = this.checker.typeToString(propType)\n const raw = typeString\n\n // Prevent infinite recursion\n if (visitedTypes.has(typeString)) {\n return { kind: ResolvedTypeKind.Any, raw }\n }\n\n // Add current type to visited set\n const newVisitedTypes = new Set(visitedTypes)\n newVisitedTypes.add(typeString)\n\n // Handle function types\n if (propType.getCallSignatures().length > 0) {\n return { kind: ResolvedTypeKind.Function, raw }\n }\n\n // Handle React node types\n if (/^(ReactNode|ReactElement|Element)<?.*$/i.test(typeString)) {\n return { kind: ResolvedTypeKind.Slot, raw }\n }\n\n // we need to check if the type is not boolean because boolean is recognized as union\n if (propType.isUnion() && (propType.flags & ts.TypeFlags.Boolean) === 0) {\n const types = propType.types\n .filter(type => {\n if (skipUndefinedInUnion && type.flags & ts.TypeFlags.Undefined) {\n return false\n }\n\n return true\n })\n .map(subType => this.getResolvedType({ propType: subType, visitedTypes: newVisitedTypes }))\n .filter((type): type is ResolvedType => type !== null)\n\n if (types.length === 1) {\n return types[0]\n }\n\n return {\n kind: ResolvedTypeKind.Union,\n raw: skipUndefinedInUnion ? raw.replaceAll(\" | undefined\", \"\") : raw,\n types,\n }\n }\n\n if (propType.isIntersection()) {\n const isEverySubTypeObject = propType.types.every(subType => subType.flags & ts.TypeFlags.Object)\n\n if (isEverySubTypeObject) {\n return {\n kind: ResolvedTypeKind.Object,\n raw,\n }\n }\n\n return {\n kind: ResolvedTypeKind.Any,\n raw,\n }\n }\n\n // Handle array types\n if (this.checker.isArrayType(propType)) {\n // Get the element type of the array\n const elementType = this.checker.getTypeArguments(propType as ts.TypeReference)[0]\n const baseType = this.getResolvedType({ propType: elementType, visitedTypes: newVisitedTypes })\n return {\n ...baseType,\n raw,\n isArray: true,\n }\n }\n\n // literal string type e.g. \"Hello\", \"World\"\n if (propType.isStringLiteral()) {\n return { kind: ResolvedTypeKind.StringLiteral, raw: raw.replaceAll('\"', \"\") }\n }\n\n // Handle primitive types\n if ((propType.flags & ts.TypeFlags.String) !== 0) {\n return { kind: ResolvedTypeKind.String, raw }\n }\n\n // literal number type e.g. 1, 2, 3\n if (propType.isNumberLiteral()) {\n return { kind: ResolvedTypeKind.NumberLiteral, raw }\n }\n\n if ((propType.flags & ts.TypeFlags.Number) !== 0) {\n return { kind: ResolvedTypeKind.Number, raw }\n }\n\n // literal type, e.g. true, false\n if ((propType.flags & ts.TypeFlags.BooleanLiteral) !== 0) {\n return { kind: ResolvedTypeKind.BooleanLiteral, raw }\n }\n\n if ((propType.flags & ts.TypeFlags.Boolean) !== 0) {\n return { kind: ResolvedTypeKind.Boolean, raw }\n }\n\n if ((propType.flags & ts.TypeFlags.Null) !== 0) {\n return { kind: ResolvedTypeKind.Null, raw }\n }\n\n if ((propType.flags & ts.TypeFlags.Undefined) !== 0) {\n return { kind: ResolvedTypeKind.Undefined, raw }\n }\n\n // Handle object types\n if ((propType.flags & ts.TypeFlags.Object) !== 0) {\n const rawDeclaration = propType.symbol?.declarations?.[0]?.getText()\n const isDeclarationFromReact = propType.symbol?.declarations?.[0]\n ?.getSourceFile()\n .fileName.includes(\"@types/react\")\n\n return { kind: ResolvedTypeKind.Object, raw: rawDeclaration && !isDeclarationFromReact ? rawDeclaration : raw }\n }\n\n return { kind: ResolvedTypeKind.Any, raw }\n }\n\n /**\n * This is implementation of original docgen type resolving. We have custom resolving of types right now so this is not needed.\n */\n public getDocgenType(propType: ts.Type, isRequired: boolean): PropItemType {\n // When we are going to process the type, we check if this type has a constraint (is a generic type with constraint)\n if (propType.getConstraint()) {\n // If so, we assing the property the type that is the constraint\n propType = propType.getConstraint()!\n }\n\n let propTypeString = this.checker.typeToString(propType)\n if (this.shouldRemoveUndefinedFromOptional && !isRequired) {\n propTypeString = propTypeString.replace(\" | undefined\", \"\")\n }\n\n if (\n propType.isUnion() &&\n (this.shouldExtractValuesFromUnion ||\n (this.shouldExtractLiteralValuesFromEnum &&\n propType.types.every(\n type =>\n type.getFlags() &\n (ts.TypeFlags.StringLiteral |\n ts.TypeFlags.NumberLiteral |\n ts.TypeFlags.EnumLiteral |\n ts.TypeFlags.Undefined),\n )))\n ) {\n let value = propType.types.map(type => this.getInfoFromUnionType(type))\n\n if (this.shouldRemoveUndefinedFromOptional && !isRequired) {\n value = value.filter(option => option.value != \"undefined\")\n }\n\n if (this.shouldSortUnions) {\n value.sort((a, b) => a.value.toString().localeCompare(b.value.toString()))\n }\n\n return {\n name: \"enum\",\n raw: propTypeString,\n value,\n }\n }\n\n if (this.shouldRemoveUndefinedFromOptional && !isRequired) {\n propTypeString = propTypeString.replace(\" | undefined\", \"\")\n }\n\n return { name: propTypeString }\n }\n\n /**\n * Extracts a full JsDoc comment from a symbol, even\n * though TypeScript has broken down the JsDoc comment into plain\n * text and JsDoc tags.\n */\n public getFullJsDocComment(symbol: ts.Symbol): JSDoc {\n // in some cases this can be undefined (Pick<Type, 'prop1'|'prop2'>)\n if (symbol.getDocumentationComment === undefined) {\n return defaultJSDoc\n }\n\n let mainComment = ts.displayPartsToString(symbol.getDocumentationComment(this.checker))\n\n if (mainComment) {\n mainComment = mainComment.replaceAll(\"\\r\\n\", \"\\n\")\n }\n\n const tags = symbol.getJsDocTags() || []\n\n const tagComments: string[] = []\n const tagMap: StringIndexedObject<string> = {}\n\n for (const tag of tags) {\n const trimmedText = ts.displayPartsToString(tag.text).trim()\n const currentValue = tagMap[tag.name]\n tagMap[tag.name] = currentValue ? currentValue + \"\\n\" + trimmedText : trimmedText\n\n if (![\"default\", \"type\"].includes(tag.name)) {\n tagComments.push(formatTag(tag))\n }\n }\n\n return {\n description: mainComment,\n fullComment: (mainComment + \"\\n\" + tagComments.join(\"\\n\")).trim(),\n tags: tagMap,\n }\n }\n\n getFunctionStatement(statement: ts.Statement) {\n if (ts.isFunctionDeclaration(statement)) {\n return statement\n }\n\n if (ts.isVariableStatement(statement)) {\n let initializer = statement.declarationList && statement.declarationList.declarations[0].initializer\n\n // Look at forwardRef function argument\n if (initializer && ts.isCallExpression(initializer)) {\n const symbol = this.checker.getSymbolAtLocation(initializer.expression)\n if (!symbol || symbol.getName() !== \"forwardRef\") return\n initializer = initializer.arguments[0]\n }\n\n if (initializer && (ts.isArrowFunction(initializer) || ts.isFunctionExpression(initializer))) {\n return initializer\n }\n }\n\n return undefined\n }\n\n public getLiteralValueFromImportSpecifier(\n property: ts.ImportSpecifier,\n ): boolean | null | number | string | undefined {\n if (ts.isImportSpecifier(property)) {\n const symbol = this.checker.getSymbolAtLocation(property.name)\n\n if (!symbol) {\n return null\n }\n\n const aliasedSymbol = this.checker.getAliasedSymbol(symbol)\n if (aliasedSymbol && aliasedSymbol.declarations && aliasedSymbol.declarations.length > 0) {\n return this.getLiteralValueFromPropertyAssignment(aliasedSymbol.declarations[0] as ts.BindingElement)\n }\n\n return null\n }\n\n return null\n }\n\n public getLiteralValueFromPropertyAssignment(\n property: ts.BindingElement | ts.PropertyAssignment,\n ): boolean | null | number | string | undefined {\n let { initializer } = property\n\n // Shorthand properties, so inflect their actual value\n if (!initializer && ts.isShorthandPropertyAssignment(property)) {\n const symbol = this.checker.getShorthandAssignmentValueSymbol(property)\n const decl = symbol && (symbol.valueDeclaration as ts.VariableDeclaration)\n\n if (decl && decl.initializer) {\n initializer = decl.initializer!\n }\n }\n\n if (!initializer) {\n return undefined\n }\n\n // Literal values\n switch (initializer.kind) {\n case ts.SyntaxKind.FalseKeyword: {\n return this.savePropValueAsString ? \"false\" : false\n }\n\n case ts.SyntaxKind.Identifier: {\n if ((initializer as ts.Identifier).text === \"undefined\") {\n return \"undefined\"\n }\n\n const symbol = this.checker.getSymbolAtLocation(initializer as ts.Identifier)\n\n if (symbol && symbol.declarations && symbol.declarations.length > 0) {\n if (ts.isImportSpecifier(symbol.declarations[0])) {\n return this.getLiteralValueFromImportSpecifier(symbol.declarations[0] as ts.ImportSpecifier)\n }\n\n return this.getLiteralValueFromPropertyAssignment(symbol.declarations[0] as ts.BindingElement)\n }\n\n return null\n }\n\n case ts.SyntaxKind.NullKeyword: {\n return this.savePropValueAsString ? \"null\" : null\n }\n\n case ts.SyntaxKind.NumericLiteral: {\n return this.savePropValueAsString\n ? `${(initializer as ts.NumericLiteral).text}`\n : Number((initializer as ts.NumericLiteral).text)\n }\n\n case ts.SyntaxKind.PrefixUnaryExpression: {\n return this.savePropValueAsString\n ? initializer.getFullText().trim()\n : Number((initializer as ts.PrefixUnaryExpression).getFullText())\n }\n\n case ts.SyntaxKind.StringLiteral: {\n return (initializer as ts.StringLiteral).text.trim()\n }\n\n case ts.SyntaxKind.TrueKeyword: {\n return this.savePropValueAsString ? \"true\" : true\n }\n\n case ts.SyntaxKind.PropertyAccessExpression: {\n const symbol = this.checker.getSymbolAtLocation(initializer as ts.PropertyAccessExpression)\n\n if (symbol && symbol.declarations && symbol.declarations.length > 0) {\n const declaration = symbol.declarations[0]\n\n if (ts.isBindingElement(declaration) || ts.isPropertyAssignment(declaration)) {\n return this.getLiteralValueFromPropertyAssignment(declaration)\n }\n }\n\n return null\n }\n\n case ts.SyntaxKind.ObjectLiteralExpression:\n default: {\n try {\n return initializer.getText()\n } catch {\n return null\n }\n }\n }\n }\n\n public getMethodsInfo(type: ts.Type): Method[] {\n const members = this.extractMembersFromType(type)\n const methods: Method[] = []\n for (const member of members) {\n if (!this.isTaggedPublic(member)) {\n continue\n }\n\n const name = member.getName()\n const docblock = this.getFullJsDocComment(member).fullComment\n const callSignature = this.getCallSignature(member)\n const params = this.getParameterInfo(callSignature)\n const description = ts.displayPartsToString(member.getDocumentationComment(this.checker))\n const returnType = this.checker.typeToString(callSignature.getReturnType())\n const returnDescription = ts.displayPartsToString(this.getReturnDescription(member))\n const modifiers = this.getModifiers(member)\n\n methods.push({\n description,\n docblock,\n modifiers,\n name,\n params,\n returns: returnDescription\n ? {\n description: returnDescription,\n type: returnType,\n }\n : null,\n })\n }\n\n return methods\n }\n\n public getModifiers(member: ts.Symbol) {\n const modifiers: string[] = []\n if (!member.valueDeclaration) {\n return modifiers\n }\n\n const flags = ts.getCombinedModifierFlags(member.valueDeclaration)\n const isStatic = (flags & ts.ModifierFlags.Static) !== 0 // tslint:disable-line no-bitwise\n\n if (isStatic) {\n modifiers.push(\"static\")\n }\n\n return modifiers\n }\n\n public getParameterInfo(callSignature: ts.Signature): MethodParameter[] {\n return callSignature.parameters.map(param => {\n const paramType = this.checker.getTypeOfSymbolAtLocation(param, param.valueDeclaration!)\n const paramDeclaration = this.checker.symbolToParameterDeclaration(param, undefined, undefined)\n const isOptionalParam: boolean = Boolean(paramDeclaration && paramDeclaration.questionToken)\n\n return {\n description: ts.displayPartsToString(param.getDocumentationComment(this.checker)) || null,\n name: param.getName() + (isOptionalParam ? \"?\" : \"\"),\n type: { name: this.checker.typeToString(paramType) },\n }\n })\n }\n\n public getPropMap(\n properties: ts.NodeArray<ts.BindingElement | ts.PropertyAssignment>,\n ): StringIndexedObject<boolean | null | number | string> {\n return properties.reduce(\n (acc, property) => {\n if (ts.isSpreadAssignment(property) || !property.name) {\n return acc\n }\n\n const literalValue = this.getLiteralValueFromPropertyAssignment(property)\n const propertyName = getPropertyName(property.name)\n\n if (\n (typeof literalValue === \"string\" ||\n typeof literalValue === \"number\" ||\n typeof literalValue === \"boolean\" ||\n literalValue === null) &&\n propertyName !== null\n ) {\n acc[propertyName] = literalValue\n }\n\n return acc\n },\n {} as StringIndexedObject<boolean | null | number | string>,\n )\n }\n\n public getPropsInfo(propsObj: ts.Symbol, defaultProps: StringIndexedObject<string> = {}): Props {\n if (!propsObj.valueDeclaration) {\n return {}\n }\n\n const propsType = this.checker.getTypeOfSymbolAtLocation(propsObj, propsObj.valueDeclaration)\n const baseProps = propsType.getApparentProperties()\n let propertiesOfProps = baseProps\n\n if (propsType.isUnionOrIntersection()) {\n propertiesOfProps = [\n // Resolve extra properties in the union/intersection\n ...(propertiesOfProps = (this.checker as any).getAllPossiblePropertiesOfTypes(propsType.types)),\n // But props we already have override those as they are already correct.\n ...baseProps,\n ]\n\n if (propertiesOfProps.length === 0) {\n const isUnionType = (type: ts.Type): boolean => (type.flags & ts.TypeFlags.Union) !== 0\n\n const types: ts.Type[] = isUnionType(propsType) ? (propsType as ts.UnionType).types : [propsType]\n\n const subTypes = (this.checker as any).getAllPossiblePropertiesOfTypes(\n types.reduce<ts.Symbol[]>((all, t) => {\n const typeArray = isUnionType(t) ? (t as ts.UnionType).types : [t]\n return [...all, ...(typeArray.map(t => t.symbol!).filter(s => s !== undefined) as ts.Symbol[])]\n }, []),\n )\n\n propertiesOfProps = [...subTypes, ...baseProps]\n }\n }\n\n const result: Props = {}\n\n for (const prop of propertiesOfProps) {\n const propName = prop.getName()\n\n // Find type of prop by looking in context of the props object itself.\n const propType = this.checker.getTypeOfSymbolAtLocation(prop, propsObj.valueDeclaration!)\n\n const jsDocComment = this.findDocComment(prop)\n const hasCodeBasedDefault = defaultProps[propName] !== undefined\n\n let defaultValue: null | { value: any } = null\n\n if (hasCodeBasedDefault) {\n defaultValue = { value: defaultProps[propName] }\n } else if (jsDocComment.tags.default) {\n defaultValue = { value: jsDocComment.tags.default }\n }\n\n const parent = getParentType(prop)\n const parents = getDeclarations(prop)\n const declarations = prop.declarations || []\n\n const baseProp = baseProps.find(p => p.getName() === propName)\n\n const required =\n !isOptional(prop) &&\n !hasCodeBasedDefault &&\n // If in a intersection or union check original declaration for \"?\"\n declarations.every(d => !((ts.isPropertySignature(d) || ts.isPropertyDeclaration(d) || ts.isParameter(d)) && d.questionToken)) &&\n (!baseProp || !isOptional(baseProp))\n\n const type = jsDocComment.tags.type\n ? {\n name: jsDocComment.tags.type,\n }\n : this.getDocgenType(propType, required)\n\n const propTags = this.shouldIncludePropTagMap ? { tags: jsDocComment.tags } : {}\n const description = this.shouldIncludePropTagMap\n ? jsDocComment.description.replaceAll(\"\\r\\n\", \"\\n\")\n : jsDocComment.fullComment.replaceAll(\"\\r\\n\", \"\\n\")\n\n const resolvedType = this.getResolvedType({ propType, skipUndefinedInUnion: !required })\n\n result[propName] = {\n resolvedType,\n declarations: parents,\n defaultValue,\n description,\n name: propName,\n parent,\n required,\n type,\n ...propTags,\n }\n }\n\n return result\n }\n\n public getReturnDescription(symbol: ts.Symbol): SymbolDisplayPart[] | undefined {\n const tags = symbol.getJsDocTags()\n const returnTag = tags.find(tag => tag.name === \"returns\")\n if (!returnTag || !Array.isArray(returnTag.text)) {\n return\n }\n\n return returnTag.text\n }\n\n public isTaggedPublic(symbol: ts.Symbol) {\n const jsDocTags = symbol.getJsDocTags()\n return Boolean(jsDocTags.find(tag => tag.name === \"public\"))\n }\n\n /**\n * Parses a symbol that is an export from a source file.\n */\n public parseExportSymbol(exp: ts.Symbol, sourceFile: ts.SourceFile) {\n if (!isReactComponent(exp, sourceFile, this.checker)) {\n return []\n }\n\n const componentDocs: ComponentDoc[] = []\n const doc = this.getComponentInfo(exp, sourceFile)\n\n if (doc) {\n componentDocs.push(doc)\n }\n\n if (!exp.exports) {\n return componentDocs\n }\n\n // Then document any static sub-components\n for (const [_, symbol] of exp.exports) {\n if (symbol.flags & ts.SymbolFlags.Prototype) {\n continue\n }\n\n if (symbol.flags & ts.SymbolFlags.Method) {\n const signature = this.getCallSignature(symbol)\n const returnType = this.checker.typeToString(signature.getReturnType())\n\n if (returnType !== \"Element\") {\n continue\n }\n }\n\n const doc = this.getComponentInfo(symbol, sourceFile)\n\n if (doc) {\n const prefix = exp.escapedName === \"default\" ? \"\" : `${exp.escapedName}.`\n\n componentDocs.push({\n ...doc,\n displayName: `${prefix}${symbol.escapedName}`,\n })\n }\n }\n\n return componentDocs\n }\n\n private getComponentFromExpression(exp: ts.Symbol) {\n const declaration = exp.valueDeclaration || exp.declarations![0]\n const type = this.checker.getTypeOfSymbolAtLocation(exp, declaration)\n const typeSymbol = type.symbol || type.aliasSymbol\n\n if (!typeSymbol) {\n return exp\n }\n\n const symbolName = typeSymbol.getName()\n\n if (\n (symbolName === \"MemoExoticComponent\" || symbolName === \"ForwardRefExoticComponent\") &&\n exp.valueDeclaration &&\n ts.isExportAssignment(exp.valueDeclaration) &&\n ts.isCallExpression(exp.valueDeclaration.expression)\n ) {\n const component = this.checker.getSymbolAtLocation(exp.valueDeclaration.expression.arguments[0])\n\n if (component) {\n exp = component\n }\n }\n\n return exp\n }\n\n private getInfoFromUnionType(type: ts.Type): Partial<JSDoc> & {\n value: number | string\n } {\n let commentInfo = {}\n if (type.getSymbol()) {\n commentInfo = { ...this.getFullJsDocComment(type.getSymbol()!) }\n }\n\n return {\n value: this.getValuesFromUnionType(type),\n ...commentInfo,\n }\n }\n\n private getValuesFromUnionType(type: ts.Type): number | string {\n if (type.isStringLiteral()) return `\"${type.value}\"`\n if (type.isNumberLiteral()) return `${type.value}`\n return this.checker.typeToString(type)\n }\n}\n\nfunction statementIsClassDeclaration(statement: ts.Statement): statement is ts.ClassDeclaration {\n return Boolean((statement as ts.ClassDeclaration).members)\n}\n\nfunction statementIsStatelessWithDefaultProps(statement: ts.Statement): boolean {\n const children = (statement as ts.ExpressionStatement).getChildren()\n for (const child of children) {\n const { left } = child as ts.BinaryExpression\n if (left) {\n const { name } = left as ts.PropertyAccessExpression\n if (name && name.escapedText === \"defaultProps\") {\n return true\n }\n }\n }\n\n return false\n}\n\nfunction getPropertyName(name: ts.BindingPattern | ts.PropertyName): null | string {\n switch (name.kind) {\n case ts.SyntaxKind.ComputedPropertyName: {\n return name.getText()\n }\n\n case ts.SyntaxKind.Identifier:\n case ts.SyntaxKind.NumericLiteral:\n case ts.SyntaxKind.StringLiteral: {\n return name.text\n }\n\n default: {\n return null\n }\n }\n}\n\nfunction formatTag(tag: ts.JSDocTagInfo) {\n let result = \"@\" + tag.name\n if (tag.text) {\n result += \" \" + ts.displayPartsToString(tag.text)\n }\n\n return result\n}\n\nfunction getTextValueOfClassMember(classDeclaration: ts.ClassDeclaration, memberName: string): string {\n const classDeclarationMembers = classDeclaration.members || []\n const [textValue] =\n classDeclarationMembers &&\n classDeclarationMembers\n .filter(member => ts.isPropertyDeclaration(member))\n .filter(member => {\n const name = ts.getNameOfDeclaration(member) as ts.Identifier\n return name && name.text === memberName\n })\n .map(member => {\n const property = member as ts.PropertyDeclaration\n return property.initializer && (property.initializer as ts.Identifier).text\n })\n\n return textValue || \"\"\n}\n\nfunction getTextValueOfFunctionProperty(_exp: ts.Symbol, source: ts.SourceFile, propertyName: string) {\n const [textValue] = source.statements\n .filter(statement => ts.isExpressionStatement(statement))\n .filter(statement => {\n const expr = (statement as ts.ExpressionStatement).expression as ts.BinaryExpression\n return (\n expr.left &&\n (expr.left as ts.PropertyAccessExpression).name &&\n (expr.left as ts.PropertyAccessExpression).name.escapedText === propertyName\n )\n })\n .filter(statement =>\n ts.isStringLiteral(((statement as ts.ExpressionStatement).expression as ts.BinaryExpression).right),\n )\n .map(\n statement =>\n (((statement as ts.ExpressionStatement).expression as ts.BinaryExpression).right as ts.Identifier).text,\n )\n\n return textValue || \"\"\n}\n\nfunction computeComponentDisplayName(exp: ts.Symbol, source: ts.SourceFile) {\n const statelessDisplayName = getTextValueOfFunctionProperty(exp, source, \"displayName\")\n\n const statefulDisplayName =\n exp.valueDeclaration &&\n ts.isClassDeclaration(exp.valueDeclaration) &&\n getTextValueOfClassMember(exp.valueDeclaration, \"displayName\")\n\n return statelessDisplayName || statefulDisplayName || null\n}\n\nfunction computeComponentExportName(\n rootExport: ts.Symbol,\n source: ts.SourceFile,\n customComponentTypes: ParserOptions[\"customComponentTypes\"] = [],\n rootExportName: string,\n) {\n const exportName = rootExport.getName()\n\n const defaultComponentTypes = [\n \"default\",\n \"__function\",\n \"Stateless\",\n \"StyledComponentClass\",\n \"StyledComponent\",\n \"IStyledComponent\",\n \"FunctionComponent\",\n \"StatelessComponent\",\n \"ForwardRefExoticComponent\",\n \"MemoExoticComponent\",\n ]\n\n const supportedComponentTypes = [...defaultComponentTypes, ...customComponentTypes]\n\n if (!defaultComponentTypes.includes(rootExportName)) {\n return rootExportName\n }\n\n if (supportedComponentTypes.includes(exportName)) {\n return getDefaultExportForFile(source)\n }\n\n return exportName\n}\n\n// Default export for a file: named after file\nexport function getDefaultExportForFile(source: ts.SourceFile) {\n const name = path.basename(source.fileName).split(\".\")[0]\n const filename = name === \"index\" ? path.basename(path.dirname(source.fileName)) : name\n\n // JS identifiers must starts with a letter, and contain letters and/or numbers\n // So, you could not take filename as is\n const identifier = filename.replaceAll(/^[^A-Z]*/gi, \"\").replaceAll(/[^A-Z0-9]*/gi, \"\")\n\n return identifier.length > 0 ? identifier : \"DefaultName\"\n}\n\nfunction isTypeLiteral(node: ts.Node): node is ts.TypeLiteralNode {\n return node.kind === ts.SyntaxKind.TypeLiteral\n}\n\nfunction getDeclarations(prop: ts.Symbol): ParentType[] | undefined {\n const declarations = prop.getDeclarations()\n\n if (declarations === undefined || declarations.length === 0) {\n return undefined\n }\n\n const parents: ParentType[] = []\n\n for (const declaration of declarations) {\n const { parent } = declaration\n\n if (!isTypeLiteral(parent) && !isInterfaceOrTypeAliasDeclaration(parent)) {\n continue\n }\n\n const parentName = \"name\" in parent ? (parent as InterfaceOrTypeAliasDeclaration).name.text : \"TypeLiteral\"\n\n const { fileName } = (parent as InterfaceOrTypeAliasDeclaration | ts.TypeLiteralNode).getSourceFile()\n\n parents.push({\n fileName,\n name: parentName,\n })\n }\n\n return parents\n}\n\nfunction getParentType(prop: ts.Symbol): ParentType | undefined {\n const declarations = prop.getDeclarations()\n\n if (declarations == null || declarations.length === 0) {\n return undefined\n }\n\n // Props can be declared only in one place\n const { parent } = declarations[0]\n\n if (!isInterfaceOrTypeAliasDeclaration(parent)) {\n return undefined\n }\n\n const parentName = parent.name.text\n const { fileName } = parent.getSourceFile()\n\n return {\n fileName: trimFileName(fileName),\n name: parentName,\n }\n}\n\nfunction isInterfaceOrTypeAliasDeclaration(node: ts.Node): node is ts.InterfaceDeclaration | ts.TypeAliasDeclaration {\n return node.kind === ts.SyntaxKind.InterfaceDeclaration || node.kind === ts.SyntaxKind.TypeAliasDeclaration\n}\n"],"names":[],"mappings":"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","debug_id":"f43107ed-302c-5e6b-965c-db25f3a82db1"}
|
|
1
|
+
{"version":3,"file":"parser.js","sources":["../../../../src/code-analyzer/components/parser/parser.ts"],"sourceRoot":"","sourcesContent":["import path from \"node:path\"\nimport type { SymbolDisplayPart } from \"typescript\"\nimport * as ts from \"typescript\"\n\nimport {\n Component,\n ComponentDoc,\n ComponentNameResolver,\n InterfaceOrTypeAliasDeclaration,\n JSDoc,\n Method,\n MethodParameter,\n ParentType,\n ParserOptions,\n PropFilter,\n PropItemType,\n Props,\n ResolvedType,\n ResolvedTypeKind,\n StringIndexedObject,\n} from \"./types.js\"\nimport { buildFilter } from \"./utils/build-filter.js\"\nimport { isReactComponent } from \"./utils/is-react-component.js\"\nimport { trimFileName } from \"./utils/trim-file-name.js\"\n\nexport const defaultOptions: ts.CompilerOptions = {\n jsx: ts.JsxEmit.React,\n module: ts.ModuleKind.CommonJS,\n target: ts.ScriptTarget.Latest,\n}\n\nconst isOptional = (prop: ts.Symbol) =>\n // tslint:disable-next-line:no-bitwise\n // eslint-disable-next-line no-bitwise\n (prop.getFlags() & ts.SymbolFlags.Optional) !== 0\n\nconst defaultJSDoc: JSDoc = {\n description: \"\",\n fullComment: \"\",\n tags: {},\n}\n\nexport class Parser {\n private readonly checker: ts.TypeChecker\n private readonly propFilter: PropFilter\n private readonly savePropValueAsString: boolean\n private readonly shouldExtractLiteralValuesFromEnum: boolean\n private readonly shouldExtractValuesFromUnion: boolean\n private readonly shouldIncludeExpression: boolean\n private readonly shouldIncludePropTagMap: boolean\n private readonly shouldRemoveUndefinedFromOptional: boolean\n private readonly shouldSortUnions: boolean\n\n constructor(program: ts.Program, opts: ParserOptions) {\n const {\n savePropValueAsString,\n shouldExtractLiteralValuesFromEnum,\n shouldExtractValuesFromUnion,\n shouldIncludeExpression,\n shouldIncludePropTagMap,\n shouldRemoveUndefinedFromOptional,\n shouldSortUnions,\n } = opts\n this.checker = program.getTypeChecker()\n this.propFilter = buildFilter(opts)\n this.shouldExtractLiteralValuesFromEnum = Boolean(shouldExtractLiteralValuesFromEnum)\n this.shouldRemoveUndefinedFromOptional = Boolean(shouldRemoveUndefinedFromOptional)\n this.shouldExtractValuesFromUnion = Boolean(shouldExtractValuesFromUnion)\n this.shouldSortUnions = Boolean(shouldSortUnions)\n this.savePropValueAsString = Boolean(savePropValueAsString)\n this.shouldIncludePropTagMap = Boolean(shouldIncludePropTagMap)\n this.shouldIncludeExpression = Boolean(shouldIncludeExpression)\n }\n\n public extractDefaultPropsFromComponent(symbol: ts.Symbol, source: ts.SourceFile) {\n const possibleStatements = [\n ...source.statements\n // ensure that name property is available\n .filter(stmt => Boolean((stmt as ts.ClassDeclaration).name))\n .filter(stmt => this.checker.getSymbolAtLocation((stmt as ts.ClassDeclaration).name!) === symbol),\n ...source.statements.filter(stmt => ts.isExpressionStatement(stmt) || ts.isVariableStatement(stmt)),\n ]\n\n return possibleStatements.reduce((res, statement) => {\n if (statementIsClassDeclaration(statement) && statement.members.length > 0) {\n const possibleDefaultProps = statement.members.filter(\n member => member.name && getPropertyName(member.name) === \"defaultProps\",\n )\n\n if (possibleDefaultProps.length === 0) {\n return res\n }\n\n const defaultProps = possibleDefaultProps[0]\n let { initializer } = defaultProps as ts.PropertyDeclaration\n if (!initializer) {\n return res\n }\n\n let { properties } = initializer as ts.ObjectLiteralExpression\n\n while (ts.isIdentifier(initializer as ts.Identifier)) {\n const defaultPropsReference = this.checker.getSymbolAtLocation(initializer as ts.Node)\n if (defaultPropsReference) {\n const declarations = defaultPropsReference.getDeclarations()\n\n if (declarations) {\n if (ts.isImportSpecifier(declarations[0])) {\n const symbol = this.checker.getSymbolAtLocation(declarations[0].name)\n if (!symbol) {\n continue\n }\n\n const aliasedSymbol = this.checker.getAliasedSymbol(symbol)\n if (aliasedSymbol && aliasedSymbol.declarations && aliasedSymbol.declarations.length > 0) {\n initializer = (aliasedSymbol.declarations[0] as ts.VariableDeclaration).initializer\n } else {\n continue\n }\n } else {\n initializer = (declarations[0] as ts.VariableDeclaration).initializer\n }\n\n properties = (initializer as ts.ObjectLiteralExpression).properties\n }\n }\n }\n\n let propMap = {}\n\n if (properties) {\n propMap = this.getPropMap(properties as ts.NodeArray<ts.PropertyAssignment>)\n }\n\n return {\n ...res,\n ...propMap,\n }\n }\n\n if (statementIsStatelessWithDefaultProps(statement)) {\n let propMap = {}\n for (const child of (statement as ts.ExpressionStatement).getChildren()) {\n let { right } = child as ts.BinaryExpression\n\n if (right && ts.isIdentifier(right)) {\n const value = ((source as any).locals as ts.SymbolTable).get(right.escapedText)\n\n if (\n value &&\n value.valueDeclaration &&\n ts.isVariableDeclaration(value.valueDeclaration) &&\n value.valueDeclaration.initializer\n ) {\n right = value.valueDeclaration.initializer\n }\n }\n\n if (right) {\n const { properties } = right as ts.ObjectLiteralExpression\n if (properties) {\n propMap = this.getPropMap(properties as ts.NodeArray<ts.PropertyAssignment>)\n }\n }\n }\n\n return {\n ...res,\n ...propMap,\n }\n }\n\n const functionStatement = this.getFunctionStatement(statement)\n\n // Extracting default values from props destructuring\n if (functionStatement && functionStatement.parameters && functionStatement.parameters.length > 0) {\n const { name } = functionStatement.parameters[0]\n\n if (ts.isObjectBindingPattern(name)) {\n return {\n ...res,\n ...this.getPropMap(name.elements),\n }\n }\n }\n\n return res\n }, {})\n }\n\n public extractMembersFromType(type: ts.Type): ts.Symbol[] {\n const methodSymbols: ts.Symbol[] = []\n\n /**\n * Need to loop over properties first so we capture any\n * static methods. static methods aren't captured in type.symbol.members\n */\n for (const property of type.getProperties()) {\n // Only add members, don't add non-member properties\n if (this.getCallSignature(property)) {\n methodSymbols.push(property)\n }\n }\n\n if (type.symbol && type.symbol.members) {\n for (const [_, member] of type.symbol.members) {\n methodSymbols.push(member)\n }\n }\n\n return methodSymbols\n }\n\n public extractPropsFromTypeIfStatefulComponent(type: ts.Type): null | ts.Symbol {\n const constructSignatures = type.getConstructSignatures()\n\n if (constructSignatures.length > 0) {\n // React.Component. Is a class, so the props object we're interested\n // in is the type of 'props' property of the object constructed by the class.\n\n for (const sig of constructSignatures) {\n const instanceType = sig.getReturnType()\n\n const props = instanceType.getProperty(\"props\")\n\n if (props) {\n return props\n }\n }\n }\n\n return null\n }\n\n public extractPropsFromTypeIfStatelessComponent(type: ts.Type): null | ts.Symbol {\n const callSignatures = type.getCallSignatures()\n\n if (callSignatures.length > 0) {\n // Could be a stateless component. Is a function, so the props object we're interested\n // in is the (only) parameter.\n\n for (const sig of callSignatures) {\n const params = sig.getParameters()\n if (params.length === 0) {\n continue\n }\n\n // Maybe we could check return type instead,\n // but not sure if Element, ReactElement<T> are all possible values\n const propsParam = params[0]\n if (propsParam.name === \"props\" || params.length === 1) {\n return propsParam\n }\n }\n }\n\n return null\n }\n\n public findDocComment(symbol: ts.Symbol): JSDoc {\n const comment = this.getFullJsDocComment(symbol)\n if (comment.fullComment || comment.tags.default) {\n return comment\n }\n\n const rootSymbols = this.checker.getRootSymbols(symbol)\n const commentsOnRootSymbols = rootSymbols\n .filter(x => x !== symbol)\n .map(x => this.getFullJsDocComment(x))\n .filter(x => Boolean(x.fullComment) || Boolean(comment.tags.default))\n\n if (commentsOnRootSymbols.length > 0) {\n return commentsOnRootSymbols[0]\n }\n\n return defaultJSDoc\n }\n\n public getCallSignature(symbol: ts.Symbol) {\n const symbolType = this.checker.getTypeOfSymbolAtLocation(symbol, symbol.valueDeclaration!)\n\n return symbolType.getCallSignatures()[0]\n }\n\n public getComponentInfo(\n exp: ts.Symbol,\n source: ts.SourceFile,\n componentNameResolver: ComponentNameResolver = () => undefined,\n customComponentTypes: ParserOptions[\"customComponentTypes\"] = [],\n ): ComponentDoc | null {\n const rootExportName = exp.getName()\n if (exp.declarations && exp.declarations.length === 0) {\n return null\n }\n\n let rootExp = this.getComponentFromExpression(exp)\n const declaration = rootExp.valueDeclaration || rootExp.declarations![0]\n const type = this.checker.getTypeOfSymbolAtLocation(rootExp, declaration)\n\n let commentSource = rootExp\n const typeSymbol = type.symbol || type.aliasSymbol\n const originalName = rootExp.getName()\n\n // get file path of aliased symbol. E.g. when there is named export we want to get filename of exported symbol not the file that declares the named export\n const filePath =\n exp.flags & ts.SymbolFlags.Alias\n ? this.checker.getAliasedSymbol(exp).declarations?.[0]?.getSourceFile().fileName || source.fileName\n : source.fileName\n\n if (!rootExp.valueDeclaration) {\n if (!typeSymbol && (rootExp.flags & ts.SymbolFlags.Alias) !== 0) {\n commentSource = this.checker.getAliasedSymbol(commentSource)\n } else if (typeSymbol) {\n rootExp = typeSymbol\n const expName = rootExp.getName()\n\n const defaultComponentTypes = [\n \"__function\",\n \"StatelessComponent\",\n \"Stateless\",\n \"StyledComponentClass\",\n \"StyledComponent\",\n \"IStyledComponent\",\n \"FunctionComponent\",\n \"ForwardRefExoticComponent\",\n \"MemoExoticComponent\",\n ]\n\n const supportedComponentTypes = [...defaultComponentTypes, ...customComponentTypes]\n\n commentSource = supportedComponentTypes.includes(expName)\n ? this.checker.getAliasedSymbol(commentSource)\n : rootExp\n } else {\n return null\n }\n } else if (type.symbol && (ts.isPropertyAccessExpression(declaration) || ts.isPropertyDeclaration(declaration))) {\n commentSource = type.symbol\n }\n\n // Skip over PropTypes that are exported\n if (typeSymbol && (typeSymbol.getEscapedName() === \"Requireable\" || typeSymbol.getEscapedName() === \"Validator\")) {\n return null\n }\n\n const propsType =\n this.extractPropsFromTypeIfStatelessComponent(type) || this.extractPropsFromTypeIfStatefulComponent(type)\n\n const nameSource = originalName === \"default\" ? rootExp : commentSource\n\n const resolvedComponentName = componentNameResolver(nameSource, source)\n const { description, tags } = this.findDocComment(commentSource)\n\n const exportName = computeComponentExportName(nameSource, source, customComponentTypes, rootExportName)\n\n const displayName = resolvedComponentName || tags.visibleName || computeComponentDisplayName(nameSource, source)\n\n const methods = this.getMethodsInfo(type)\n\n let result: ComponentDoc | null = null\n\n if (propsType) {\n // if there is no value declaration then don't pick up default props\n const defaultProps = commentSource.valueDeclaration\n ? this.extractDefaultPropsFromComponent(commentSource, commentSource.valueDeclaration.getSourceFile())\n : {}\n const props = this.getPropsInfo(propsType, defaultProps)\n\n for (const propName of Object.keys(props)) {\n const prop = props[propName]\n const component: Component = { name: exportName }\n if (!this.propFilter(prop, component)) {\n delete props[propName]\n }\n }\n\n result = {\n description,\n displayName,\n exportName,\n filePath,\n methods,\n props,\n tags,\n }\n } else if (exportName) {\n result = {\n description,\n displayName,\n exportName,\n filePath,\n methods,\n props: {},\n tags,\n }\n }\n\n if (result !== null && this.shouldIncludeExpression) {\n result.expression = rootExp\n result.rootExpression = exp\n }\n\n return result\n }\n\n /**\n * Gets the TypeScript type structure for a given type\n */\n public getResolvedType({\n propType,\n skipUndefinedInUnion,\n visitedTypes = new Set(),\n }: {\n propType: ts.Type\n skipUndefinedInUnion?: boolean\n visitedTypes?: Set<string>\n }): ResolvedType {\n const typeString = this.checker.typeToString(propType)\n const raw = typeString\n\n // Prevent infinite recursion\n if (visitedTypes.has(typeString)) {\n return { kind: ResolvedTypeKind.Any, raw }\n }\n\n // Add current type to visited set\n const newVisitedTypes = new Set(visitedTypes)\n newVisitedTypes.add(typeString)\n\n // Handle function types\n if (propType.getCallSignatures().length > 0) {\n return { kind: ResolvedTypeKind.Function, raw }\n }\n\n // Handle React node types\n if (/^(ReactNode|ReactElement|Element)<?.*$/i.test(typeString)) {\n return { kind: ResolvedTypeKind.Slot, raw }\n }\n\n // we need to check if the type is not boolean because boolean is recognized as union\n if (propType.isUnion() && (propType.flags & ts.TypeFlags.Boolean) === 0) {\n const types = propType.types\n .filter(type => {\n if (skipUndefinedInUnion && type.flags & ts.TypeFlags.Undefined) {\n return false\n }\n\n return true\n })\n .map(subType => this.getResolvedType({ propType: subType, visitedTypes: newVisitedTypes }))\n .filter((type): type is ResolvedType => type !== null)\n\n if (types.length === 1) {\n return types[0]\n }\n\n return {\n kind: ResolvedTypeKind.Union,\n raw: skipUndefinedInUnion ? raw.replaceAll(\" | undefined\", \"\") : raw,\n types,\n }\n }\n\n if (propType.isIntersection()) {\n const isEverySubTypeObject = propType.types.every(subType => subType.flags & ts.TypeFlags.Object)\n\n if (isEverySubTypeObject) {\n return {\n kind: ResolvedTypeKind.Object,\n raw,\n }\n }\n\n return {\n kind: ResolvedTypeKind.Any,\n raw,\n }\n }\n\n // Handle array types\n if (this.checker.isArrayType(propType)) {\n // Get the element type of the array\n const elementType = this.checker.getTypeArguments(propType as ts.TypeReference)[0]\n const baseType = this.getResolvedType({ propType: elementType, visitedTypes: newVisitedTypes })\n return {\n ...baseType,\n raw,\n isArray: true,\n }\n }\n\n // literal string type e.g. \"Hello\", \"World\"\n if (propType.isStringLiteral()) {\n return { kind: ResolvedTypeKind.StringLiteral, raw: raw.replaceAll('\"', \"\") }\n }\n\n // Handle primitive types\n if ((propType.flags & ts.TypeFlags.String) !== 0) {\n return { kind: ResolvedTypeKind.String, raw }\n }\n\n // literal number type e.g. 1, 2, 3\n if (propType.isNumberLiteral()) {\n return { kind: ResolvedTypeKind.NumberLiteral, raw }\n }\n\n if ((propType.flags & ts.TypeFlags.Number) !== 0) {\n return { kind: ResolvedTypeKind.Number, raw }\n }\n\n // literal type, e.g. true, false\n if ((propType.flags & ts.TypeFlags.BooleanLiteral) !== 0) {\n return { kind: ResolvedTypeKind.BooleanLiteral, raw }\n }\n\n if ((propType.flags & ts.TypeFlags.Boolean) !== 0) {\n return { kind: ResolvedTypeKind.Boolean, raw }\n }\n\n if ((propType.flags & ts.TypeFlags.Null) !== 0) {\n return { kind: ResolvedTypeKind.Null, raw }\n }\n\n if ((propType.flags & ts.TypeFlags.Undefined) !== 0) {\n return { kind: ResolvedTypeKind.Undefined, raw }\n }\n\n // Handle object types\n if ((propType.flags & ts.TypeFlags.Object) !== 0) {\n const rawDeclaration = propType.symbol?.declarations?.[0]?.getText()\n const isDeclarationFromReact = propType.symbol?.declarations?.[0]\n ?.getSourceFile()\n .fileName.includes(\"@types/react\")\n\n return { kind: ResolvedTypeKind.Object, raw: rawDeclaration && !isDeclarationFromReact ? rawDeclaration : raw }\n }\n\n return { kind: ResolvedTypeKind.Any, raw }\n }\n\n /**\n * This is implementation of original docgen type resolving. We have custom resolving of types right now so this is not needed.\n */\n public getDocgenType(propType: ts.Type, isRequired: boolean): PropItemType {\n // When we are going to process the type, we check if this type has a constraint (is a generic type with constraint)\n if (propType.getConstraint()) {\n // If so, we assing the property the type that is the constraint\n propType = propType.getConstraint()!\n }\n\n let propTypeString = this.checker.typeToString(propType)\n if (this.shouldRemoveUndefinedFromOptional && !isRequired) {\n propTypeString = propTypeString.replace(\" | undefined\", \"\")\n }\n\n if (\n propType.isUnion() &&\n (this.shouldExtractValuesFromUnion ||\n (this.shouldExtractLiteralValuesFromEnum &&\n propType.types.every(\n type =>\n type.getFlags() &\n (ts.TypeFlags.StringLiteral |\n ts.TypeFlags.NumberLiteral |\n ts.TypeFlags.EnumLiteral |\n ts.TypeFlags.Undefined),\n )))\n ) {\n let value = propType.types.map(type => this.getInfoFromUnionType(type))\n\n if (this.shouldRemoveUndefinedFromOptional && !isRequired) {\n value = value.filter(option => option.value != \"undefined\")\n }\n\n if (this.shouldSortUnions) {\n value.sort((a, b) => a.value.toString().localeCompare(b.value.toString()))\n }\n\n return {\n name: \"enum\",\n raw: propTypeString,\n value,\n }\n }\n\n if (this.shouldRemoveUndefinedFromOptional && !isRequired) {\n propTypeString = propTypeString.replace(\" | undefined\", \"\")\n }\n\n return { name: propTypeString }\n }\n\n /**\n * Extracts a full JsDoc comment from a symbol, even\n * though TypeScript has broken down the JsDoc comment into plain\n * text and JsDoc tags.\n */\n public getFullJsDocComment(symbol: ts.Symbol): JSDoc {\n // in some cases this can be undefined (Pick<Type, 'prop1'|'prop2'>)\n if (symbol.getDocumentationComment === undefined) {\n return defaultJSDoc\n }\n\n let mainComment = ts.displayPartsToString(symbol.getDocumentationComment(this.checker))\n\n if (mainComment) {\n mainComment = mainComment.replaceAll(\"\\r\\n\", \"\\n\")\n }\n\n const tags = symbol.getJsDocTags() || []\n\n const tagComments: string[] = []\n const tagMap: StringIndexedObject<string> = {}\n\n for (const tag of tags) {\n const trimmedText = ts.displayPartsToString(tag.text).trim()\n const currentValue = tagMap[tag.name]\n tagMap[tag.name] = currentValue ? currentValue + \"\\n\" + trimmedText : trimmedText\n\n if (![\"default\", \"type\"].includes(tag.name)) {\n tagComments.push(formatTag(tag))\n }\n }\n\n return {\n description: mainComment,\n fullComment: (mainComment + \"\\n\" + tagComments.join(\"\\n\")).trim(),\n tags: tagMap,\n }\n }\n\n getFunctionStatement(statement: ts.Statement) {\n if (ts.isFunctionDeclaration(statement)) {\n return statement\n }\n\n if (ts.isVariableStatement(statement)) {\n let initializer = statement.declarationList && statement.declarationList.declarations[0].initializer\n\n // Look at forwardRef function argument\n if (initializer && ts.isCallExpression(initializer)) {\n const symbol = this.checker.getSymbolAtLocation(initializer.expression)\n if (!symbol || symbol.getName() !== \"forwardRef\") return\n initializer = initializer.arguments[0]\n }\n\n if (initializer && (ts.isArrowFunction(initializer) || ts.isFunctionExpression(initializer))) {\n return initializer\n }\n }\n\n return undefined\n }\n\n public getLiteralValueFromImportSpecifier(\n property: ts.ImportSpecifier,\n ): boolean | null | number | string | undefined {\n if (ts.isImportSpecifier(property)) {\n const symbol = this.checker.getSymbolAtLocation(property.name)\n\n if (!symbol) {\n return null\n }\n\n const aliasedSymbol = this.checker.getAliasedSymbol(symbol)\n if (aliasedSymbol && aliasedSymbol.declarations && aliasedSymbol.declarations.length > 0) {\n return this.getLiteralValueFromPropertyAssignment(aliasedSymbol.declarations[0] as ts.BindingElement)\n }\n\n return null\n }\n\n return null\n }\n\n public getLiteralValueFromPropertyAssignment(\n property: ts.BindingElement | ts.PropertyAssignment,\n ): boolean | null | number | string | undefined {\n let { initializer } = property\n\n // Shorthand properties, so inflect their actual value\n if (!initializer && ts.isShorthandPropertyAssignment(property)) {\n const symbol = this.checker.getShorthandAssignmentValueSymbol(property)\n const decl = symbol && (symbol.valueDeclaration as ts.VariableDeclaration)\n\n if (decl && decl.initializer) {\n initializer = decl.initializer!\n }\n }\n\n if (!initializer) {\n return undefined\n }\n\n // Literal values\n switch (initializer.kind) {\n case ts.SyntaxKind.FalseKeyword: {\n return this.savePropValueAsString ? \"false\" : false\n }\n\n case ts.SyntaxKind.Identifier: {\n if ((initializer as ts.Identifier).text === \"undefined\") {\n return \"undefined\"\n }\n\n const symbol = this.checker.getSymbolAtLocation(initializer as ts.Identifier)\n\n if (symbol && symbol.declarations && symbol.declarations.length > 0) {\n if (ts.isImportSpecifier(symbol.declarations[0])) {\n return this.getLiteralValueFromImportSpecifier(symbol.declarations[0] as ts.ImportSpecifier)\n }\n\n return this.getLiteralValueFromPropertyAssignment(symbol.declarations[0] as ts.BindingElement)\n }\n\n return null\n }\n\n case ts.SyntaxKind.NullKeyword: {\n return this.savePropValueAsString ? \"null\" : null\n }\n\n case ts.SyntaxKind.NumericLiteral: {\n return this.savePropValueAsString\n ? `${(initializer as ts.NumericLiteral).text}`\n : Number((initializer as ts.NumericLiteral).text)\n }\n\n case ts.SyntaxKind.PrefixUnaryExpression: {\n return this.savePropValueAsString\n ? initializer.getFullText().trim()\n : Number((initializer as ts.PrefixUnaryExpression).getFullText())\n }\n\n case ts.SyntaxKind.StringLiteral: {\n return (initializer as ts.StringLiteral).text.trim()\n }\n\n case ts.SyntaxKind.TrueKeyword: {\n return this.savePropValueAsString ? \"true\" : true\n }\n\n case ts.SyntaxKind.PropertyAccessExpression: {\n const symbol = this.checker.getSymbolAtLocation(initializer as ts.PropertyAccessExpression)\n\n if (symbol && symbol.declarations && symbol.declarations.length > 0) {\n const declaration = symbol.declarations[0]\n\n if (ts.isBindingElement(declaration) || ts.isPropertyAssignment(declaration)) {\n return this.getLiteralValueFromPropertyAssignment(declaration)\n }\n }\n\n return null\n }\n\n case ts.SyntaxKind.ObjectLiteralExpression:\n default: {\n try {\n return initializer.getText()\n } catch {\n return null\n }\n }\n }\n }\n\n public getMethodsInfo(type: ts.Type): Method[] {\n const members = this.extractMembersFromType(type)\n const methods: Method[] = []\n for (const member of members) {\n if (!this.isTaggedPublic(member)) {\n continue\n }\n\n const name = member.getName()\n const docblock = this.getFullJsDocComment(member).fullComment\n const callSignature = this.getCallSignature(member)\n const params = this.getParameterInfo(callSignature)\n const description = ts.displayPartsToString(member.getDocumentationComment(this.checker))\n const returnType = this.checker.typeToString(callSignature.getReturnType())\n const returnDescription = ts.displayPartsToString(this.getReturnDescription(member))\n const modifiers = this.getModifiers(member)\n\n methods.push({\n description,\n docblock,\n modifiers,\n name,\n params,\n returns: returnDescription\n ? {\n description: returnDescription,\n type: returnType,\n }\n : null,\n })\n }\n\n return methods\n }\n\n public getModifiers(member: ts.Symbol) {\n const modifiers: string[] = []\n if (!member.valueDeclaration) {\n return modifiers\n }\n\n const flags = ts.getCombinedModifierFlags(member.valueDeclaration)\n const isStatic = (flags & ts.ModifierFlags.Static) !== 0 // tslint:disable-line no-bitwise\n\n if (isStatic) {\n modifiers.push(\"static\")\n }\n\n return modifiers\n }\n\n public getParameterInfo(callSignature: ts.Signature): MethodParameter[] {\n return callSignature.parameters.map(param => {\n const paramType = this.checker.getTypeOfSymbolAtLocation(param, param.valueDeclaration!)\n const paramDeclaration = this.checker.symbolToParameterDeclaration(param, undefined, undefined)\n const isOptionalParam: boolean = Boolean(paramDeclaration && paramDeclaration.questionToken)\n\n return {\n description: ts.displayPartsToString(param.getDocumentationComment(this.checker)) || null,\n name: param.getName() + (isOptionalParam ? \"?\" : \"\"),\n type: { name: this.checker.typeToString(paramType) },\n }\n })\n }\n\n public getPropMap(\n properties: ts.NodeArray<ts.BindingElement | ts.PropertyAssignment>,\n ): StringIndexedObject<boolean | null | number | string> {\n return properties.reduce(\n (acc, property) => {\n if (ts.isSpreadAssignment(property) || !property.name) {\n return acc\n }\n\n const literalValue = this.getLiteralValueFromPropertyAssignment(property)\n const propertyName = getPropertyName(property.name)\n\n if (\n (typeof literalValue === \"string\" ||\n typeof literalValue === \"number\" ||\n typeof literalValue === \"boolean\" ||\n literalValue === null) &&\n propertyName !== null\n ) {\n acc[propertyName] = literalValue\n }\n\n return acc\n },\n {} as StringIndexedObject<boolean | null | number | string>,\n )\n }\n\n public getPropsInfo(propsObj: ts.Symbol, defaultProps: StringIndexedObject<string> = {}): Props {\n if (!propsObj.valueDeclaration) {\n return {}\n }\n\n const propsType = this.checker.getTypeOfSymbolAtLocation(propsObj, propsObj.valueDeclaration)\n const baseProps = propsType.getApparentProperties()\n let propertiesOfProps = baseProps\n\n if (propsType.isUnionOrIntersection()) {\n propertiesOfProps = [\n // Resolve extra properties in the union/intersection\n ...(propertiesOfProps = (this.checker as any).getAllPossiblePropertiesOfTypes(propsType.types)),\n // But props we already have override those as they are already correct.\n ...baseProps,\n ]\n\n if (propertiesOfProps.length === 0) {\n const isUnionType = (type: ts.Type): boolean => (type.flags & ts.TypeFlags.Union) !== 0\n\n const types: ts.Type[] = isUnionType(propsType) ? (propsType as ts.UnionType).types : [propsType]\n\n const subTypes = (this.checker as any).getAllPossiblePropertiesOfTypes(\n types.reduce<ts.Symbol[]>((all, t) => {\n const typeArray = isUnionType(t) ? (t as ts.UnionType).types : [t]\n return [...all, ...(typeArray.map(t => t.symbol!).filter(s => s !== undefined) as ts.Symbol[])]\n }, []),\n )\n\n propertiesOfProps = [...subTypes, ...baseProps]\n }\n }\n\n const result: Props = {}\n\n for (const prop of propertiesOfProps) {\n const propName = prop.getName()\n\n // Find type of prop by looking in context of the props object itself.\n const propType = this.checker.getTypeOfSymbolAtLocation(prop, propsObj.valueDeclaration!)\n\n const jsDocComment = this.findDocComment(prop)\n const hasCodeBasedDefault = defaultProps[propName] !== undefined\n\n let defaultValue: null | { value: any } = null\n\n if (hasCodeBasedDefault) {\n defaultValue = { value: defaultProps[propName] }\n } else if (jsDocComment.tags.default) {\n defaultValue = { value: jsDocComment.tags.default }\n }\n\n const parent = getParentType(prop)\n const parents = getDeclarations(prop)\n const declarations = prop.declarations || []\n\n const baseProp = baseProps.find(p => p.getName() === propName)\n\n const required =\n !isOptional(prop) &&\n !hasCodeBasedDefault &&\n // If in a intersection or union check original declaration for \"?\"\n declarations.every(d => !((ts.isPropertySignature(d) || ts.isPropertyDeclaration(d) || ts.isParameter(d)) && d.questionToken)) &&\n (!baseProp || !isOptional(baseProp))\n\n const type = jsDocComment.tags.type\n ? {\n name: jsDocComment.tags.type,\n }\n : this.getDocgenType(propType, required)\n\n const propTags = this.shouldIncludePropTagMap ? { tags: jsDocComment.tags } : {}\n const description = this.shouldIncludePropTagMap\n ? jsDocComment.description.replaceAll(\"\\r\\n\", \"\\n\")\n : jsDocComment.fullComment.replaceAll(\"\\r\\n\", \"\\n\")\n\n const resolvedType = this.getResolvedType({ propType, skipUndefinedInUnion: !required })\n\n result[propName] = {\n resolvedType,\n declarations: parents,\n defaultValue,\n description,\n name: propName,\n parent,\n required,\n type,\n ...propTags,\n }\n }\n\n return result\n }\n\n public getReturnDescription(symbol: ts.Symbol): SymbolDisplayPart[] | undefined {\n const tags = symbol.getJsDocTags()\n const returnTag = tags.find(tag => tag.name === \"returns\")\n if (!returnTag || !Array.isArray(returnTag.text)) {\n return\n }\n\n return returnTag.text\n }\n\n public isTaggedPublic(symbol: ts.Symbol) {\n const jsDocTags = symbol.getJsDocTags()\n return Boolean(jsDocTags.find(tag => tag.name === \"public\"))\n }\n\n /**\n * Parses a symbol that is an export from a source file.\n */\n public parseExportSymbol(exp: ts.Symbol, sourceFile: ts.SourceFile) {\n if (!isReactComponent(exp, sourceFile, this.checker)) {\n return []\n }\n\n const componentDocs: ComponentDoc[] = []\n const doc = this.getComponentInfo(exp, sourceFile)\n\n if (doc) {\n componentDocs.push(doc)\n }\n\n if (!exp.exports) {\n return componentDocs\n }\n\n // Then document any static sub-components\n for (const [_, symbol] of exp.exports) {\n if (symbol.flags & ts.SymbolFlags.Prototype) {\n continue\n }\n\n if (symbol.flags & ts.SymbolFlags.Method) {\n const signature = this.getCallSignature(symbol)\n const returnType = this.checker.typeToString(signature.getReturnType())\n\n if (returnType !== \"Element\") {\n continue\n }\n }\n\n const doc = this.getComponentInfo(symbol, sourceFile)\n\n if (doc) {\n const prefix = exp.escapedName === \"default\" ? \"\" : `${exp.escapedName}.`\n\n componentDocs.push({\n ...doc,\n displayName: `${prefix}${symbol.escapedName}`,\n })\n }\n }\n\n return componentDocs\n }\n\n private getComponentFromExpression(exp: ts.Symbol) {\n const declaration = exp.valueDeclaration || exp.declarations![0]\n const type = this.checker.getTypeOfSymbolAtLocation(exp, declaration)\n const typeSymbol = type.symbol || type.aliasSymbol\n\n if (!typeSymbol) {\n return exp\n }\n\n const symbolName = typeSymbol.getName()\n\n if (\n (symbolName === \"MemoExoticComponent\" || symbolName === \"ForwardRefExoticComponent\") &&\n exp.valueDeclaration &&\n ts.isExportAssignment(exp.valueDeclaration) &&\n ts.isCallExpression(exp.valueDeclaration.expression)\n ) {\n const component = this.checker.getSymbolAtLocation(exp.valueDeclaration.expression.arguments[0])\n\n if (component) {\n exp = component\n }\n }\n\n return exp\n }\n\n private getInfoFromUnionType(type: ts.Type): Partial<JSDoc> & {\n value: number | string\n } {\n let commentInfo = {}\n if (type.getSymbol()) {\n commentInfo = { ...this.getFullJsDocComment(type.getSymbol()!) }\n }\n\n return {\n value: this.getValuesFromUnionType(type),\n ...commentInfo,\n }\n }\n\n private getValuesFromUnionType(type: ts.Type): number | string {\n if (type.isStringLiteral()) return `\"${type.value}\"`\n if (type.isNumberLiteral()) return `${type.value}`\n return this.checker.typeToString(type)\n }\n}\n\nfunction statementIsClassDeclaration(statement: ts.Statement): statement is ts.ClassDeclaration {\n return Boolean((statement as ts.ClassDeclaration).members)\n}\n\nfunction statementIsStatelessWithDefaultProps(statement: ts.Statement): boolean {\n const children = (statement as ts.ExpressionStatement).getChildren()\n for (const child of children) {\n const { left } = child as ts.BinaryExpression\n if (left) {\n const { name } = left as ts.PropertyAccessExpression\n if (name && name.escapedText === \"defaultProps\") {\n return true\n }\n }\n }\n\n return false\n}\n\nfunction getPropertyName(name: ts.BindingPattern | ts.PropertyName): null | string {\n switch (name.kind) {\n case ts.SyntaxKind.ComputedPropertyName: {\n return name.getText()\n }\n\n case ts.SyntaxKind.Identifier:\n case ts.SyntaxKind.NumericLiteral:\n case ts.SyntaxKind.StringLiteral: {\n return name.text\n }\n\n default: {\n return null\n }\n }\n}\n\nfunction formatTag(tag: ts.JSDocTagInfo) {\n let result = \"@\" + tag.name\n if (tag.text) {\n result += \" \" + ts.displayPartsToString(tag.text)\n }\n\n return result\n}\n\nfunction getTextValueOfClassMember(classDeclaration: ts.ClassDeclaration, memberName: string): string {\n const classDeclarationMembers = classDeclaration.members || []\n const [textValue] =\n classDeclarationMembers &&\n classDeclarationMembers\n .filter(member => ts.isPropertyDeclaration(member))\n .filter(member => {\n const name = ts.getNameOfDeclaration(member) as ts.Identifier\n return name && name.text === memberName\n })\n .map(member => {\n const property = member as ts.PropertyDeclaration\n return property.initializer && (property.initializer as ts.Identifier).text\n })\n\n return textValue || \"\"\n}\n\nfunction getTextValueOfFunctionProperty(_exp: ts.Symbol, source: ts.SourceFile, propertyName: string) {\n const [textValue] = source.statements\n .filter(statement => ts.isExpressionStatement(statement))\n .filter(statement => {\n const expr = (statement as ts.ExpressionStatement).expression as ts.BinaryExpression\n return (\n expr.left &&\n (expr.left as ts.PropertyAccessExpression).name &&\n (expr.left as ts.PropertyAccessExpression).name.escapedText === propertyName\n )\n })\n .filter(statement =>\n ts.isStringLiteral(((statement as ts.ExpressionStatement).expression as ts.BinaryExpression).right),\n )\n .map(\n statement =>\n (((statement as ts.ExpressionStatement).expression as ts.BinaryExpression).right as ts.Identifier).text,\n )\n\n return textValue || \"\"\n}\n\nfunction computeComponentDisplayName(exp: ts.Symbol, source: ts.SourceFile) {\n const statelessDisplayName = getTextValueOfFunctionProperty(exp, source, \"displayName\")\n\n const statefulDisplayName =\n exp.valueDeclaration &&\n ts.isClassDeclaration(exp.valueDeclaration) &&\n getTextValueOfClassMember(exp.valueDeclaration, \"displayName\")\n\n return statelessDisplayName || statefulDisplayName || null\n}\n\nfunction computeComponentExportName(\n rootExport: ts.Symbol,\n source: ts.SourceFile,\n customComponentTypes: ParserOptions[\"customComponentTypes\"] = [],\n rootExportName: string,\n) {\n const exportName = rootExport.getName()\n\n const defaultComponentTypes = [\n \"default\",\n \"__function\",\n \"Stateless\",\n \"StyledComponentClass\",\n \"StyledComponent\",\n \"IStyledComponent\",\n \"FunctionComponent\",\n \"StatelessComponent\",\n \"ForwardRefExoticComponent\",\n \"MemoExoticComponent\",\n ]\n\n const supportedComponentTypes = [...defaultComponentTypes, ...customComponentTypes]\n\n if (!defaultComponentTypes.includes(rootExportName)) {\n return rootExportName\n }\n\n if (supportedComponentTypes.includes(exportName)) {\n return getDefaultExportForFile(source)\n }\n\n return exportName\n}\n\n// Default export for a file: named after file\nexport function getDefaultExportForFile(source: ts.SourceFile) {\n const name = path.basename(source.fileName).split(\".\")[0]\n const filename = name === \"index\" ? path.basename(path.dirname(source.fileName)) : name\n\n // JS identifiers must starts with a letter, and contain letters and/or numbers\n // So, you could not take filename as is\n const identifier = filename.replaceAll(/^[^A-Z]*/gi, \"\").replaceAll(/[^A-Z0-9]*/gi, \"\")\n\n return identifier.length > 0 ? identifier : \"DefaultName\"\n}\n\nfunction isTypeLiteral(node: ts.Node): node is ts.TypeLiteralNode {\n return node.kind === ts.SyntaxKind.TypeLiteral\n}\n\nfunction getDeclarations(prop: ts.Symbol): ParentType[] | undefined {\n const declarations = prop.getDeclarations()\n\n if (declarations === undefined || declarations.length === 0) {\n return undefined\n }\n\n const parents: ParentType[] = []\n\n for (const declaration of declarations) {\n const { parent } = declaration\n\n if (!isTypeLiteral(parent) && !isInterfaceOrTypeAliasDeclaration(parent)) {\n continue\n }\n\n const parentName = \"name\" in parent ? (parent as InterfaceOrTypeAliasDeclaration).name.text : \"TypeLiteral\"\n\n const { fileName } = (parent as InterfaceOrTypeAliasDeclaration | ts.TypeLiteralNode).getSourceFile()\n\n parents.push({\n fileName,\n name: parentName,\n })\n }\n\n return parents\n}\n\nfunction getParentType(prop: ts.Symbol): ParentType | undefined {\n const declarations = prop.getDeclarations()\n\n if (declarations == null || declarations.length === 0) {\n return undefined\n }\n\n // Props can be declared only in one place\n const { parent } = declarations[0]\n\n if (!isInterfaceOrTypeAliasDeclaration(parent)) {\n return undefined\n }\n\n const parentName = parent.name.text\n const { fileName } = parent.getSourceFile()\n\n return {\n fileName: trimFileName(fileName),\n name: parentName,\n }\n}\n\nfunction isInterfaceOrTypeAliasDeclaration(node: ts.Node): node is ts.InterfaceDeclaration | ts.TypeAliasDeclaration {\n return node.kind === ts.SyntaxKind.InterfaceDeclaration || node.kind === ts.SyntaxKind.TypeAliasDeclaration\n}\n"],"names":[],"mappings":"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","debugId":"f43107ed-302c-5e6b-965c-db25f3a82db1"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sources":["../../../../src/code-analyzer/components/parser/types.ts"],"sourceRoot":"","sourcesContent":["import * as ts from \"typescript\"\n\nexport type InterfaceOrTypeAliasDeclaration = ts.InterfaceDeclaration | ts.TypeAliasDeclaration\nexport interface StringIndexedObject<T> {\n [key: string]: T\n}\n\nexport interface ComponentDoc {\n description: string\n displayName: string | null\n exportName: string\n expression?: ts.Symbol\n filePath: string\n methods: Method[]\n props: Props\n rootExpression?: ts.Symbol\n tags?: StringIndexedObject<string>\n}\n\nexport interface Props extends StringIndexedObject<PropItem> {}\n\nexport interface PropItem {\n declarations?: ParentType[]\n defaultValue: any\n description: string\n name: string\n parent?: ParentType\n required: boolean\n resolvedType: ResolvedType\n tags?: {}\n type: PropItemType\n}\n\nexport interface Method {\n description: string\n docblock: string\n modifiers: string[]\n name: string\n params: MethodParameter[]\n returns?: null | {\n description?: null | string\n type?: string\n }\n}\n\nexport interface MethodParameter {\n description?: null | string\n name: string\n type: MethodParameterType\n}\n\nexport interface MethodParameterType {\n name: string\n}\n\nexport interface Component {\n name: string\n}\n\nexport interface ResolvedPropItemType {\n name: string\n raw?: string\n value?: any\n}\n\nexport interface PropItemType {\n name: string\n raw?: string\n value?: any\n}\n\nexport interface ParentType {\n fileName: string\n name: string\n}\n\nexport type PropFilter = (props: PropItem, component: Component) => boolean\n\nexport type ComponentNameResolver = (exp: ts.Symbol, source: ts.SourceFile) => false | null | string | undefined\n\nexport interface ParserOptions {\n componentNameResolver?: ComponentNameResolver\n customComponentTypes?: string[]\n propFilter?: PropFilter | StaticPropFilter\n savePropValueAsString?: boolean\n shouldExtractLiteralValuesFromEnum?: boolean\n shouldExtractValuesFromUnion?: boolean\n shouldIncludeExpression?: boolean\n shouldIncludePropTagMap?: boolean\n shouldRemoveUndefinedFromOptional?: boolean\n shouldSortUnions?: boolean\n skipChildrenPropWithoutDoc?: boolean\n}\n\nexport interface StaticPropFilter {\n skipPropsWithName?: string | string[]\n skipPropsWithoutDoc?: boolean\n}\n\nexport const defaultParserOpts: ParserOptions = {}\n\nexport interface FileParser {\n parse(filePathOrPaths: string | string[]): ComponentDoc[]\n parseWithProgramProvider(filePathOrPaths: string | string[], programProvider?: () => ts.Program): ComponentDoc[]\n}\n\nexport interface JSDoc {\n description: string\n fullComment: string\n tags: StringIndexedObject<string>\n}\n\ninterface ResolvedTypeBase {\n isArray?: boolean\n raw: string\n}\n\ninterface ResolvedUnionType extends ResolvedTypeBase {\n kind: ResolvedTypeKind.Union\n /** Types included in union */\n types: ResolvedType[]\n}\n\ninterface ResolvedSpecificType extends ResolvedTypeBase {\n kind: Exclude<ResolvedTypeKind, ResolvedTypeKind.Union>\n}\n\n/**\n * Represents a TypeScript type with its structure\n */\nexport type ResolvedType = ResolvedUnionType | ResolvedSpecificType\n\n/**\n * Kinds of TypeScript types\n */\nexport enum ResolvedTypeKind {\n Any = \"any\",\n Boolean = \"boolean\",\n BooleanLiteral = \"booleanLiteral\",\n Function = \"function\",\n Null = \"null\",\n Number = \"number\",\n NumberLiteral = \"numberLiteral\",\n Object = \"object\",\n Slot = \"slot\", // For React components/elements\n String = \"string\",\n StringLiteral = \"stringLiteral\",\n Undefined = \"undefined\",\n Union = \"union\",\n}\n"],"names":[],"mappings":";;AAmGA,MAAM,CAAC,MAAM,iBAAiB,GAAkB,EAAE,CAAA;AAoClD,MAAM,CAAN,IAAY,gBAcX;AAdD,WAAY,gBAAgB;IAC1B,+BAAW,CAAA;IACX,uCAAmB,CAAA;IACnB,qDAAiC,CAAA;IACjC,yCAAqB,CAAA;IACrB,iCAAa,CAAA;IACb,qCAAiB,CAAA;IACjB,mDAA+B,CAAA;IAC/B,qCAAiB,CAAA;IACjB,iCAAa,CAAA;IACb,qCAAiB,CAAA;IACjB,mDAA+B,CAAA;IAC/B,2CAAuB,CAAA;IACvB,mCAAe,CAAA;AACjB,CAAC,EAdW,gBAAgB,KAAhB,gBAAgB,QAc3B","
|
|
1
|
+
{"version":3,"file":"types.js","sources":["../../../../src/code-analyzer/components/parser/types.ts"],"sourceRoot":"","sourcesContent":["import * as ts from \"typescript\"\n\nexport type InterfaceOrTypeAliasDeclaration = ts.InterfaceDeclaration | ts.TypeAliasDeclaration\nexport interface StringIndexedObject<T> {\n [key: string]: T\n}\n\nexport interface ComponentDoc {\n description: string\n displayName: string | null\n exportName: string\n expression?: ts.Symbol\n filePath: string\n methods: Method[]\n props: Props\n rootExpression?: ts.Symbol\n tags?: StringIndexedObject<string>\n}\n\nexport interface Props extends StringIndexedObject<PropItem> {}\n\nexport interface PropItem {\n declarations?: ParentType[]\n defaultValue: any\n description: string\n name: string\n parent?: ParentType\n required: boolean\n resolvedType: ResolvedType\n tags?: {}\n type: PropItemType\n}\n\nexport interface Method {\n description: string\n docblock: string\n modifiers: string[]\n name: string\n params: MethodParameter[]\n returns?: null | {\n description?: null | string\n type?: string\n }\n}\n\nexport interface MethodParameter {\n description?: null | string\n name: string\n type: MethodParameterType\n}\n\nexport interface MethodParameterType {\n name: string\n}\n\nexport interface Component {\n name: string\n}\n\nexport interface ResolvedPropItemType {\n name: string\n raw?: string\n value?: any\n}\n\nexport interface PropItemType {\n name: string\n raw?: string\n value?: any\n}\n\nexport interface ParentType {\n fileName: string\n name: string\n}\n\nexport type PropFilter = (props: PropItem, component: Component) => boolean\n\nexport type ComponentNameResolver = (exp: ts.Symbol, source: ts.SourceFile) => false | null | string | undefined\n\nexport interface ParserOptions {\n componentNameResolver?: ComponentNameResolver\n customComponentTypes?: string[]\n propFilter?: PropFilter | StaticPropFilter\n savePropValueAsString?: boolean\n shouldExtractLiteralValuesFromEnum?: boolean\n shouldExtractValuesFromUnion?: boolean\n shouldIncludeExpression?: boolean\n shouldIncludePropTagMap?: boolean\n shouldRemoveUndefinedFromOptional?: boolean\n shouldSortUnions?: boolean\n skipChildrenPropWithoutDoc?: boolean\n}\n\nexport interface StaticPropFilter {\n skipPropsWithName?: string | string[]\n skipPropsWithoutDoc?: boolean\n}\n\nexport const defaultParserOpts: ParserOptions = {}\n\nexport interface FileParser {\n parse(filePathOrPaths: string | string[]): ComponentDoc[]\n parseWithProgramProvider(filePathOrPaths: string | string[], programProvider?: () => ts.Program): ComponentDoc[]\n}\n\nexport interface JSDoc {\n description: string\n fullComment: string\n tags: StringIndexedObject<string>\n}\n\ninterface ResolvedTypeBase {\n isArray?: boolean\n raw: string\n}\n\ninterface ResolvedUnionType extends ResolvedTypeBase {\n kind: ResolvedTypeKind.Union\n /** Types included in union */\n types: ResolvedType[]\n}\n\ninterface ResolvedSpecificType extends ResolvedTypeBase {\n kind: Exclude<ResolvedTypeKind, ResolvedTypeKind.Union>\n}\n\n/**\n * Represents a TypeScript type with its structure\n */\nexport type ResolvedType = ResolvedUnionType | ResolvedSpecificType\n\n/**\n * Kinds of TypeScript types\n */\nexport enum ResolvedTypeKind {\n Any = \"any\",\n Boolean = \"boolean\",\n BooleanLiteral = \"booleanLiteral\",\n Function = \"function\",\n Null = \"null\",\n Number = \"number\",\n NumberLiteral = \"numberLiteral\",\n Object = \"object\",\n Slot = \"slot\", // For React components/elements\n String = \"string\",\n StringLiteral = \"stringLiteral\",\n Undefined = \"undefined\",\n Union = \"union\",\n}\n"],"names":[],"mappings":";;AAmGA,MAAM,CAAC,MAAM,iBAAiB,GAAkB,EAAE,CAAA;AAoClD,MAAM,CAAN,IAAY,gBAcX;AAdD,WAAY,gBAAgB;IAC1B,+BAAW,CAAA;IACX,uCAAmB,CAAA;IACnB,qDAAiC,CAAA;IACjC,yCAAqB,CAAA;IACrB,iCAAa,CAAA;IACb,qCAAiB,CAAA;IACjB,mDAA+B,CAAA;IAC/B,qCAAiB,CAAA;IACjB,iCAAa,CAAA;IACb,qCAAiB,CAAA;IACjB,mDAA+B,CAAA;IAC/B,2CAAuB,CAAA;IACvB,mCAAe,CAAA;AACjB,CAAC,EAdW,gBAAgB,KAAhB,gBAAgB,QAc3B","debugId":"f68f3b5a-b9d4-575a-a444-9ec17ddea751"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-filter.js","sources":["../../../../../src/code-analyzer/components/parser/utils/build-filter.ts"],"sourceRoot":"","sourcesContent":["import { Component, ParserOptions, PropFilter, PropItem, StaticPropFilter } from \"../types.js\"\n\nexport function buildFilter(opts: ParserOptions): PropFilter {\n return (prop: PropItem, component: Component) => {\n const { propFilter } = opts\n // skip children property in case it has no custom documentation\n if (prop.name === \"children\" && prop.description.length === 0 && opts.skipChildrenPropWithoutDoc !== false) {\n return false\n }\n\n if (typeof propFilter === \"function\") {\n const keep = propFilter(prop, component)\n if (!keep) {\n return false\n }\n } else if (typeof propFilter === \"object\") {\n const { skipPropsWithName, skipPropsWithoutDoc } = propFilter as StaticPropFilter\n if (typeof skipPropsWithName === \"string\" && skipPropsWithName === prop.name) {\n return false\n }\n\n if (Array.isArray(skipPropsWithName) && skipPropsWithName.includes(prop.name)) {\n return false\n }\n\n if (skipPropsWithoutDoc && prop.description.length === 0) {\n return false\n }\n }\n\n return true\n }\n}\n"],"names":[],"mappings":";;AAEA,MAAM,UAAU,WAAW,CAAC,IAAmB;IAC7C,OAAO,CAAC,IAAc,EAAE,SAAoB,EAAE,EAAE;QAC9C,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAA;QAE3B,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,0BAA0B,KAAK,KAAK,EAAE,CAAC;YAC3G,OAAO,KAAK,CAAA;QACd,CAAC;QAED,IAAI,OAAO,UAAU,KAAK,UAAU,EAAE,CAAC;YACrC,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;YACxC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO,KAAK,CAAA;YACd,CAAC;QACH,CAAC;aAAM,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;YAC1C,MAAM,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,GAAG,UAA8B,CAAA;YACjF,IAAI,OAAO,iBAAiB,KAAK,QAAQ,IAAI,iBAAiB,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC7E,OAAO,KAAK,CAAA;YACd,CAAC;YAED,IAAI,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC9E,OAAO,KAAK,CAAA;YACd,CAAC;YAED,IAAI,mBAAmB,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzD,OAAO,KAAK,CAAA;YACd,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAA;IACb,CAAC,CAAA;AACH,CAAC","
|
|
1
|
+
{"version":3,"file":"build-filter.js","sources":["../../../../../src/code-analyzer/components/parser/utils/build-filter.ts"],"sourceRoot":"","sourcesContent":["import { Component, ParserOptions, PropFilter, PropItem, StaticPropFilter } from \"../types.js\"\n\nexport function buildFilter(opts: ParserOptions): PropFilter {\n return (prop: PropItem, component: Component) => {\n const { propFilter } = opts\n // skip children property in case it has no custom documentation\n if (prop.name === \"children\" && prop.description.length === 0 && opts.skipChildrenPropWithoutDoc !== false) {\n return false\n }\n\n if (typeof propFilter === \"function\") {\n const keep = propFilter(prop, component)\n if (!keep) {\n return false\n }\n } else if (typeof propFilter === \"object\") {\n const { skipPropsWithName, skipPropsWithoutDoc } = propFilter as StaticPropFilter\n if (typeof skipPropsWithName === \"string\" && skipPropsWithName === prop.name) {\n return false\n }\n\n if (Array.isArray(skipPropsWithName) && skipPropsWithName.includes(prop.name)) {\n return false\n }\n\n if (skipPropsWithoutDoc && prop.description.length === 0) {\n return false\n }\n }\n\n return true\n }\n}\n"],"names":[],"mappings":";;AAEA,MAAM,UAAU,WAAW,CAAC,IAAmB;IAC7C,OAAO,CAAC,IAAc,EAAE,SAAoB,EAAE,EAAE;QAC9C,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAA;QAE3B,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,0BAA0B,KAAK,KAAK,EAAE,CAAC;YAC3G,OAAO,KAAK,CAAA;QACd,CAAC;QAED,IAAI,OAAO,UAAU,KAAK,UAAU,EAAE,CAAC;YACrC,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;YACxC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO,KAAK,CAAA;YACd,CAAC;QACH,CAAC;aAAM,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;YAC1C,MAAM,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,GAAG,UAA8B,CAAA;YACjF,IAAI,OAAO,iBAAiB,KAAK,QAAQ,IAAI,iBAAiB,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC7E,OAAO,KAAK,CAAA;YACd,CAAC;YAED,IAAI,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC9E,OAAO,KAAK,CAAA;YACd,CAAC;YAED,IAAI,mBAAmB,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzD,OAAO,KAAK,CAAA;YACd,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAA;IACb,CAAC,CAAA;AACH,CAAC","debugId":"04849526-d02f-53c7-ba4f-d166b05ca545"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter-duplicates.js","sources":["../../../../../src/code-analyzer/components/parser/utils/filter-duplicates.ts"],"sourceRoot":"","sourcesContent":["import { ComponentDoc } from \"../types.js\"\n\nexport function filterDuplicates(components: ComponentDoc[]) {\n const componentDocsNoDuplicates = (() => {\n const uniqueComponents: ComponentDoc[] = []\n for (const comp of components) {\n const duplicate = uniqueComponents.find(component => component!.exportName === comp!.exportName)\n if (!duplicate) {\n uniqueComponents.push(comp)\n }\n }\n\n return uniqueComponents\n })()\n\n return componentDocsNoDuplicates.filter((comp, index, comps) =>\n comps.slice(index + 1).every(innerComp => innerComp!.exportName !== comp!.exportName),\n )\n}\n"],"names":[],"mappings":";;AAEA,MAAM,UAAU,gBAAgB,CAAC,UAA0B;IACzD,MAAM,yBAAyB,GAAG,CAAC,GAAG,EAAE;QACtC,MAAM,gBAAgB,GAAmB,EAAE,CAAA;QAC3C,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;YAC9B,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAU,CAAC,UAAU,KAAK,IAAK,CAAC,UAAU,CAAC,CAAA;YAChG,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAC7B,CAAC;QACH,CAAC;QAED,OAAO,gBAAgB,CAAA;IACzB,CAAC,CAAC,EAAE,CAAA;IAEJ,OAAO,yBAAyB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAC7D,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,SAAU,CAAC,UAAU,KAAK,IAAK,CAAC,UAAU,CAAC,CACtF,CAAA;AACH,CAAC","
|
|
1
|
+
{"version":3,"file":"filter-duplicates.js","sources":["../../../../../src/code-analyzer/components/parser/utils/filter-duplicates.ts"],"sourceRoot":"","sourcesContent":["import { ComponentDoc } from \"../types.js\"\n\nexport function filterDuplicates(components: ComponentDoc[]) {\n const componentDocsNoDuplicates = (() => {\n const uniqueComponents: ComponentDoc[] = []\n for (const comp of components) {\n const duplicate = uniqueComponents.find(component => component!.exportName === comp!.exportName)\n if (!duplicate) {\n uniqueComponents.push(comp)\n }\n }\n\n return uniqueComponents\n })()\n\n return componentDocsNoDuplicates.filter((comp, index, comps) =>\n comps.slice(index + 1).every(innerComp => innerComp!.exportName !== comp!.exportName),\n )\n}\n"],"names":[],"mappings":";;AAEA,MAAM,UAAU,gBAAgB,CAAC,UAA0B;IACzD,MAAM,yBAAyB,GAAG,CAAC,GAAG,EAAE;QACtC,MAAM,gBAAgB,GAAmB,EAAE,CAAA;QAC3C,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;YAC9B,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAU,CAAC,UAAU,KAAK,IAAK,CAAC,UAAU,CAAC,CAAA;YAChG,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAC7B,CAAC;QACH,CAAC;QAED,OAAO,gBAAgB,CAAA;IACzB,CAAC,CAAC,EAAE,CAAA;IAEJ,OAAO,yBAAyB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAC7D,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,SAAU,CAAC,UAAU,KAAK,IAAK,CAAC,UAAU,CAAC,CACtF,CAAA;AACH,CAAC","debugId":"44adf6bc-a987-5df9-bebc-77cb10e8c5e2"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"is-react-component.js","sources":["../../../../../src/code-analyzer/components/parser/utils/is-react-component.ts"],"sourceRoot":"","sourcesContent":["import * as ts from \"typescript\"\n\nconst validReactTypes = [\n \"FC\",\n \"FunctionComponent\",\n \"Component\",\n \"Element\",\n \"ReactElement\",\n \"ForwardRefExoticComponent\",\n \"ReactNode\",\n]\n\n/**\n * Helper function to check if type is from React\n */\nexport function isTypeFromReact(type: ts.Type, checker: ts.TypeChecker): boolean {\n if (type.isUnion()) {\n // in case the return type is a union we need to check if any of the types are from react\n return type.types.some(t => isTypeFromReact(t, checker))\n }\n\n if (type.symbol && type.symbol.declarations && type.symbol.declarations.length > 0) {\n const declaration = type.symbol.declarations[0]\n const sourceFile = declaration.getSourceFile()\n const { fileName } = sourceFile\n\n const typeString = checker.typeToString(type)\n\n const isReactType = Boolean(typeString.match(new RegExp(`^(React[.])?${validReactTypes.join(\"|\")}.*`))?.length)\n\n // Check if it's from react package\n return isReactType && fileName.includes(\"@types/react\")\n }\n\n return false\n}\n\n/**\n * Helper function to check if a symbol is a React component. It checks cases when react component is a function or reassigned to different variable.\n */\nexport function isReactComponent(symbol: ts.Symbol, _sourceFile: ts.SourceFile, checker: ts.TypeChecker) {\n // Get the actual symbol if it's an alias - component reassigned to different variable\n const actualSymbol = symbol.flags & ts.SymbolFlags.Alias ? checker.getAliasedSymbol(symbol) : symbol\n\n const type = checker.getTypeOfSymbol(actualSymbol)\n\n if (isTypeFromReact(type, checker)) {\n return true\n }\n\n // check case when it might be a function\n const [signature] = type.getCallSignatures()\n\n if (signature) {\n const returnType = checker.getReturnTypeOfSignature(signature)\n if (isTypeFromReact(returnType, checker)) {\n return true\n }\n }\n\n return false\n}\n"],"names":[],"mappings":";;AAAA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAA;AAEhC,MAAM,eAAe,GAAG;IACtB,IAAI;IACJ,mBAAmB;IACnB,WAAW;IACX,SAAS;IACT,cAAc;IACd,2BAA2B;IAC3B,WAAW;CACZ,CAAA;AAKD,MAAM,UAAU,eAAe,CAAC,IAAa,EAAE,OAAuB;IACpE,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;QAEnB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAA;IAC1D,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnF,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QAC/C,MAAM,UAAU,GAAG,WAAW,CAAC,aAAa,EAAE,CAAA;QAC9C,MAAM,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAA;QAE/B,MAAM,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;QAE7C,MAAM,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,eAAe,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;QAG/G,OAAO,WAAW,IAAI,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAA;IACzD,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC;AAKD,MAAM,UAAU,gBAAgB,CAAC,MAAiB,EAAE,WAA0B,EAAE,OAAuB;IAErG,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;IAEpG,MAAM,IAAI,GAAG,OAAO,CAAC,eAAe,CAAC,YAAY,CAAC,CAAA;IAElD,IAAI,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC;QACnC,OAAO,IAAI,CAAA;IACb,CAAC;IAGD,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAA;IAE5C,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,UAAU,GAAG,OAAO,CAAC,wBAAwB,CAAC,SAAS,CAAC,CAAA;QAC9D,IAAI,eAAe,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC;YACzC,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC","
|
|
1
|
+
{"version":3,"file":"is-react-component.js","sources":["../../../../../src/code-analyzer/components/parser/utils/is-react-component.ts"],"sourceRoot":"","sourcesContent":["import * as ts from \"typescript\"\n\nconst validReactTypes = [\n \"FC\",\n \"FunctionComponent\",\n \"Component\",\n \"Element\",\n \"ReactElement\",\n \"ForwardRefExoticComponent\",\n \"ReactNode\",\n]\n\n/**\n * Helper function to check if type is from React\n */\nexport function isTypeFromReact(type: ts.Type, checker: ts.TypeChecker): boolean {\n if (type.isUnion()) {\n // in case the return type is a union we need to check if any of the types are from react\n return type.types.some(t => isTypeFromReact(t, checker))\n }\n\n if (type.symbol && type.symbol.declarations && type.symbol.declarations.length > 0) {\n const declaration = type.symbol.declarations[0]\n const sourceFile = declaration.getSourceFile()\n const { fileName } = sourceFile\n\n const typeString = checker.typeToString(type)\n\n const isReactType = Boolean(typeString.match(new RegExp(`^(React[.])?${validReactTypes.join(\"|\")}.*`))?.length)\n\n // Check if it's from react package\n return isReactType && fileName.includes(\"@types/react\")\n }\n\n return false\n}\n\n/**\n * Helper function to check if a symbol is a React component. It checks cases when react component is a function or reassigned to different variable.\n */\nexport function isReactComponent(symbol: ts.Symbol, _sourceFile: ts.SourceFile, checker: ts.TypeChecker) {\n // Get the actual symbol if it's an alias - component reassigned to different variable\n const actualSymbol = symbol.flags & ts.SymbolFlags.Alias ? checker.getAliasedSymbol(symbol) : symbol\n\n const type = checker.getTypeOfSymbol(actualSymbol)\n\n if (isTypeFromReact(type, checker)) {\n return true\n }\n\n // check case when it might be a function\n const [signature] = type.getCallSignatures()\n\n if (signature) {\n const returnType = checker.getReturnTypeOfSignature(signature)\n if (isTypeFromReact(returnType, checker)) {\n return true\n }\n }\n\n return false\n}\n"],"names":[],"mappings":";;AAAA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAA;AAEhC,MAAM,eAAe,GAAG;IACtB,IAAI;IACJ,mBAAmB;IACnB,WAAW;IACX,SAAS;IACT,cAAc;IACd,2BAA2B;IAC3B,WAAW;CACZ,CAAA;AAKD,MAAM,UAAU,eAAe,CAAC,IAAa,EAAE,OAAuB;IACpE,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;QAEnB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAA;IAC1D,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnF,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QAC/C,MAAM,UAAU,GAAG,WAAW,CAAC,aAAa,EAAE,CAAA;QAC9C,MAAM,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAA;QAE/B,MAAM,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;QAE7C,MAAM,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,eAAe,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;QAG/G,OAAO,WAAW,IAAI,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAA;IACzD,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC;AAKD,MAAM,UAAU,gBAAgB,CAAC,MAAiB,EAAE,WAA0B,EAAE,OAAuB;IAErG,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;IAEpG,MAAM,IAAI,GAAG,OAAO,CAAC,eAAe,CAAC,YAAY,CAAC,CAAA;IAElD,IAAI,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC;QACnC,OAAO,IAAI,CAAA;IACb,CAAC;IAGD,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAA;IAE5C,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,UAAU,GAAG,OAAO,CAAC,wBAAwB,CAAC,SAAS,CAAC,CAAA;QAC9D,IAAI,eAAe,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC;YACzC,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC","debugId":"178af39f-58b8-56d2-87e4-134a2b5ee97c"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trim-file-name.js","sources":["../../../../../src/code-analyzer/components/parser/utils/trim-file-name.ts"],"sourceRoot":"","sourcesContent":["import path from \"node:path\"\n\nconst slashRegex = /[\\\\/]/g\n\nexport function trimFileName(fileName: string, cwd: string = process.cwd(), platform?: \"posix\" | \"win32\") {\n // This allows tests to run regardless of current platform\n const pathLib = platform ? path[platform] : path\n\n // Typescript formats Windows paths with forward slashes. For easier use of\n // the path utilities, normalize to platform-standard slashes, then restore\n // the original slashes when returning the result.\n const originalSep = fileName.match(slashRegex)?.[0] || pathLib.sep\n const normalizedFileName = pathLib.normalize(fileName)\n const { root } = pathLib.parse(cwd)\n\n // Walk up paths from the current directory until we find a common ancestor,\n // and return the path relative to that. This will work in either a single-\n // package repo or a monorepo (where dependencies may be installed at the\n // root, but commands may be run in a package folder).\n let parent = cwd\n do {\n if (normalizedFileName.startsWith(parent)) {\n return (\n pathLib\n // Preserve the parent directory name to match existing behavior\n .relative(pathLib.dirname(parent), normalizedFileName)\n // Restore original type of slashes\n .replaceAll(slashRegex, originalSep)\n )\n }\n\n parent = pathLib.dirname(parent)\n } while (parent !== root)\n\n // No common ancestor, so return the path as-is\n return fileName\n}\n"],"names":[],"mappings":";;AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,MAAM,UAAU,GAAG,QAAQ,CAAA;AAE3B,MAAM,UAAU,YAAY,CAAC,QAAgB,EAAE,MAAc,OAAO,CAAC,GAAG,EAAE,EAAE,QAA4B;IAEtG,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAKhD,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,GAAG,CAAA;IAClE,MAAM,kBAAkB,GAAG,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;IACtD,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAMnC,IAAI,MAAM,GAAG,GAAG,CAAA;IAChB,GAAG,CAAC;QACF,IAAI,kBAAkB,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1C,OAAO,CACL,OAAO;iBAEJ,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,kBAAkB,CAAC;iBAErD,UAAU,CAAC,UAAU,EAAE,WAAW,CAAC,CACvC,CAAA;QACH,CAAC;QAED,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IAClC,CAAC,QAAQ,MAAM,KAAK,IAAI,EAAC;IAGzB,OAAO,QAAQ,CAAA;AACjB,CAAC","
|
|
1
|
+
{"version":3,"file":"trim-file-name.js","sources":["../../../../../src/code-analyzer/components/parser/utils/trim-file-name.ts"],"sourceRoot":"","sourcesContent":["import path from \"node:path\"\n\nconst slashRegex = /[\\\\/]/g\n\nexport function trimFileName(fileName: string, cwd: string = process.cwd(), platform?: \"posix\" | \"win32\") {\n // This allows tests to run regardless of current platform\n const pathLib = platform ? path[platform] : path\n\n // Typescript formats Windows paths with forward slashes. For easier use of\n // the path utilities, normalize to platform-standard slashes, then restore\n // the original slashes when returning the result.\n const originalSep = fileName.match(slashRegex)?.[0] || pathLib.sep\n const normalizedFileName = pathLib.normalize(fileName)\n const { root } = pathLib.parse(cwd)\n\n // Walk up paths from the current directory until we find a common ancestor,\n // and return the path relative to that. This will work in either a single-\n // package repo or a monorepo (where dependencies may be installed at the\n // root, but commands may be run in a package folder).\n let parent = cwd\n do {\n if (normalizedFileName.startsWith(parent)) {\n return (\n pathLib\n // Preserve the parent directory name to match existing behavior\n .relative(pathLib.dirname(parent), normalizedFileName)\n // Restore original type of slashes\n .replaceAll(slashRegex, originalSep)\n )\n }\n\n parent = pathLib.dirname(parent)\n } while (parent !== root)\n\n // No common ancestor, so return the path as-is\n return fileName\n}\n"],"names":[],"mappings":";;AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,MAAM,UAAU,GAAG,QAAQ,CAAA;AAE3B,MAAM,UAAU,YAAY,CAAC,QAAgB,EAAE,MAAc,OAAO,CAAC,GAAG,EAAE,EAAE,QAA4B;IAEtG,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAKhD,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,GAAG,CAAA;IAClE,MAAM,kBAAkB,GAAG,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;IACtD,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAMnC,IAAI,MAAM,GAAG,GAAG,CAAA;IAChB,GAAG,CAAC;QACF,IAAI,kBAAkB,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1C,OAAO,CACL,OAAO;iBAEJ,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,kBAAkB,CAAC;iBAErD,UAAU,CAAC,UAAU,EAAE,WAAW,CAAC,CACvC,CAAA;QACH,CAAC;QAED,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IAClC,CAAC,QAAQ,MAAM,KAAK,IAAI,EAAC;IAGzB,OAAO,QAAQ,CAAA;AACjB,CAAC","debugId":"2dabe1ff-5512-5ef7-813f-572f6a4a2409"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sources":["../../../src/code-analyzer/components/types.ts"],"sourceRoot":"","sourcesContent":["import { ParentType, ResolvedType, StringIndexedObject } from \"./parser/types.js\"\n\nexport type Component = {\n /**\n * Exported name of the component used to import the component from the library / path\n */\n exportName: string\n\n /**\n * Path to the component file\n */\n componentPath: string\n\n /**\n * Description of the component\n */\n description: string\n\n /**\n * Tags of the component\n */\n tags: StringIndexedObject<string> | null\n\n /**\n * Map of the component's name to their descriptors\n */\n properties: Record<string, ComponentProperty>\n}\n\nexport type ComponentProperty = {\n /**\n * Type of control used to edit the property\n */\n // control: ControlTypeInfo\n\n /**\n * Default value of the property\n */\n defaultValue: string | undefined\n\n /**\n * Code name of the property\n */\n name: string\n\n /**\n * False if the property is optional (annotated with `?`), true otherwise\n */\n required: boolean\n\n /**\n * Resolved type of the property\n */\n type: ResolvedType\n\n /**\n * Declarations of the property\n */\n declarations: ParentType[] | undefined\n\n /**\n * Tags of the property\n */\n tags: StringIndexedObject<string> | undefined\n\n /**\n * Description of the property\n */\n description: string\n}\n"],"names":[],"mappings":"","
|
|
1
|
+
{"version":3,"file":"types.js","sources":["../../../src/code-analyzer/components/types.ts"],"sourceRoot":"","sourcesContent":["import { ParentType, ResolvedType, StringIndexedObject } from \"./parser/types.js\"\n\nexport type Component = {\n /**\n * Exported name of the component used to import the component from the library / path\n */\n exportName: string\n\n /**\n * Path to the component file\n */\n componentPath: string\n\n /**\n * Description of the component\n */\n description: string\n\n /**\n * Tags of the component\n */\n tags: StringIndexedObject<string> | null\n\n /**\n * Map of the component's name to their descriptors\n */\n properties: Record<string, ComponentProperty>\n}\n\nexport type ComponentProperty = {\n /**\n * Type of control used to edit the property\n */\n // control: ControlTypeInfo\n\n /**\n * Default value of the property\n */\n defaultValue: string | undefined\n\n /**\n * Code name of the property\n */\n name: string\n\n /**\n * False if the property is optional (annotated with `?`), true otherwise\n */\n required: boolean\n\n /**\n * Resolved type of the property\n */\n type: ResolvedType\n\n /**\n * Declarations of the property\n */\n declarations: ParentType[] | undefined\n\n /**\n * Tags of the property\n */\n tags: StringIndexedObject<string> | undefined\n\n /**\n * Description of the property\n */\n description: string\n}\n"],"names":[],"mappings":"","debugId":"4cb88c65-f378-5ec6-a380-0e98cf9fb7a1"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-module-exports-path.js","sources":["../../../../src/code-analyzer/components/utils/get-module-exports-path.ts"],"sourceRoot":"","sourcesContent":["import * as fs from \"node:fs/promises\"\nimport path from \"node:path\"\n\nfunction getNodeModulesRoots(rootDir: string): string[] {\n const roots: string[] = []\n let current = path.resolve(rootDir)\n\n while (true) {\n roots.push(path.join(current, \"node_modules\"))\n const parent = path.dirname(current)\n if (parent === current) {\n break\n }\n\n current = parent\n }\n\n return roots\n}\n\nexport async function getModuleEntryPath(rootDir: string, modulePath: string): Promise<string> {\n let entryFile: null | string = null\n\n const possibleEntries = [\n path.join(modulePath, \"index.ts\"),\n path.join(modulePath, \"index.mts\"),\n path.join(modulePath, \"index.mjs\"),\n path.join(modulePath, \"index.d.ts\"),\n path.join(modulePath, \"index.d.mts\"),\n path.join(modulePath, \"dist/index.d.ts\"),\n path.join(modulePath, \"dist/index.d.mts\"),\n path.join(modulePath, \"dist/index.mts\"),\n path.join(modulePath, \"dist/index.mjs\"),\n path.join(modulePath, \"lib/index.d.ts\"),\n path.join(modulePath, \"lib/index.d.mts\"),\n path.join(modulePath, \"index.js\"),\n path.join(modulePath, \"index.cjs\"),\n path.join(modulePath, \"dist/index.js\"),\n path.join(modulePath, \"dist/index.cjs\"),\n path.join(modulePath, \"lib/index.js\"),\n path.join(modulePath, \"lib/index.cjs\"),\n ]\n\n const nodeModulesRoots = getNodeModulesRoots(rootDir)\n const allPossibleEntriesPaths = [\n ...nodeModulesRoots.flatMap(nodeModulesRoot => possibleEntries.map(entry => path.join(nodeModulesRoot, entry))),\n ...possibleEntries.map(entry => path.join(rootDir, entry)),\n ]\n\n for (const entryPath of allPossibleEntriesPaths) {\n try {\n await fs.access(entryPath)\n entryFile = entryPath\n break\n } catch {\n continue\n }\n }\n\n if (!entryFile) {\n throw new Error(`Could not find entry file for \"${modulePath}\"`)\n }\n\n return entryFile\n}\n"],"names":[],"mappings":"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","
|
|
1
|
+
{"version":3,"file":"get-module-exports-path.js","sources":["../../../../src/code-analyzer/components/utils/get-module-exports-path.ts"],"sourceRoot":"","sourcesContent":["import * as fs from \"node:fs/promises\"\nimport path from \"node:path\"\n\nfunction getNodeModulesRoots(rootDir: string): string[] {\n const roots: string[] = []\n let current = path.resolve(rootDir)\n\n while (true) {\n roots.push(path.join(current, \"node_modules\"))\n const parent = path.dirname(current)\n if (parent === current) {\n break\n }\n\n current = parent\n }\n\n return roots\n}\n\nexport async function getModuleEntryPath(rootDir: string, modulePath: string): Promise<string> {\n let entryFile: null | string = null\n\n const possibleEntries = [\n path.join(modulePath, \"index.ts\"),\n path.join(modulePath, \"index.mts\"),\n path.join(modulePath, \"index.mjs\"),\n path.join(modulePath, \"index.d.ts\"),\n path.join(modulePath, \"index.d.mts\"),\n path.join(modulePath, \"dist/index.d.ts\"),\n path.join(modulePath, \"dist/index.d.mts\"),\n path.join(modulePath, \"dist/index.mts\"),\n path.join(modulePath, \"dist/index.mjs\"),\n path.join(modulePath, \"lib/index.d.ts\"),\n path.join(modulePath, \"lib/index.d.mts\"),\n path.join(modulePath, \"index.js\"),\n path.join(modulePath, \"index.cjs\"),\n path.join(modulePath, \"dist/index.js\"),\n path.join(modulePath, \"dist/index.cjs\"),\n path.join(modulePath, \"lib/index.js\"),\n path.join(modulePath, \"lib/index.cjs\"),\n ]\n\n const nodeModulesRoots = getNodeModulesRoots(rootDir)\n const allPossibleEntriesPaths = [\n ...nodeModulesRoots.flatMap(nodeModulesRoot => possibleEntries.map(entry => path.join(nodeModulesRoot, entry))),\n ...possibleEntries.map(entry => path.join(rootDir, entry)),\n ]\n\n for (const entryPath of allPossibleEntriesPaths) {\n try {\n await fs.access(entryPath)\n entryFile = entryPath\n break\n } catch {\n continue\n }\n }\n\n if (!entryFile) {\n throw new Error(`Could not find entry file for \"${modulePath}\"`)\n }\n\n return entryFile\n}\n"],"names":[],"mappings":"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","debugId":"d6a0a8d6-93f5-5ba0-8222-f2bb5a3c4b4c"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/code-analyzer/index.ts"],"sourceRoot":"","sourcesContent":["export * from \"./analyzers/index.js\"\nexport * from \"./components/analyze.js\"\nexport * from \"./orchestrator/index.js\"\nexport * from \"./snapshot/index.js\"\n"],"names":[],"mappings":";;AAAA,cAAc,sBAAsB,CAAA;AACpC,cAAc,yBAAyB,CAAA;AACvC,cAAc,yBAAyB,CAAA;AACvC,cAAc,qBAAqB,CAAA","
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/code-analyzer/index.ts"],"sourceRoot":"","sourcesContent":["export * from \"./analyzers/index.js\"\nexport * from \"./components/analyze.js\"\nexport * from \"./orchestrator/index.js\"\nexport * from \"./snapshot/index.js\"\n"],"names":[],"mappings":";;AAAA,cAAc,sBAAsB,CAAA;AACpC,cAAc,yBAAyB,CAAA;AACvC,cAAc,yBAAyB,CAAA;AACvC,cAAc,qBAAqB,CAAA","debugId":"212bb6c3-8bf9-5063-a704-66e0880dd080"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/code-analyzer/orchestrator/index.ts"],"sourceRoot":"","sourcesContent":["export * from \"./run-analysis.js\"\n"],"names":[],"mappings":";;AAAA,cAAc,mBAAmB,CAAA","
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/code-analyzer/orchestrator/index.ts"],"sourceRoot":"","sourcesContent":["export * from \"./run-analysis.js\"\n"],"names":[],"mappings":";;AAAA,cAAc,mBAAmB,CAAA","debugId":"42d0c813-f724-5d47-82ab-04f3876ebc82"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-analysis.js","sources":["../../../src/code-analyzer/orchestrator/run-analysis.ts"],"sourceRoot":"","sourcesContent":["import path from \"node:path\"\n\nimport { AnalyzerArtifacts, AnalyzerName, AnalyzerRun, ComponentDescriptor } from \"../analyzers/types.js\"\nimport { analyzeComponentUsage } from \"../analyzers/component-usage.js\"\nimport { analyzeJsDoc } from \"../analyzers/jsdoc.js\"\nimport { analyzeStaticComponents } from \"../analyzers/static-components.js\"\nimport { analyzeStorybookDocs } from \"../analyzers/storybook-docs.js\"\nimport { analyzeStorybookStories } from \"../analyzers/storybook-stories.js\"\nimport { analyzeTypescriptApi } from \"../analyzers/typescript-api.js\"\nimport { writeSnapshot } from \"../snapshot/write-snapshot.js\"\n\nexport type AnalyzeProjectInput = {\n designSystemId?: string\n excludePaths?: string[]\n importFrom: string | string[]\n mode?: \"all\" | \"components\" | \"usage\"\n projectRoot: string\n snapshotBaseRoot?: string\n runCommitSha?: string\n snapshotId?: string\n versionId?: string\n}\n\nexport type AnalyzeProjectOutput = {\n components: ComponentDescriptor[]\n snapshotId: string\n snapshotRoot: string\n}\n\nfunction createSnapshotId(): string {\n const now = new Date()\n const yyyy = now.getUTCFullYear()\n const mm = String(now.getUTCMonth() + 1).padStart(2, \"0\")\n const dd = String(now.getUTCDate()).padStart(2, \"0\")\n const hh = String(now.getUTCHours()).padStart(2, \"0\")\n const mi = String(now.getUTCMinutes()).padStart(2, \"0\")\n const ss = String(now.getUTCSeconds()).padStart(2, \"0\")\n const ms = String(now.getUTCMilliseconds()).padStart(3, \"0\")\n\n return `snap-${yyyy}${mm}${dd}-${hh}${mi}${ss}${ms}`\n}\n\nasync function runAnalyzer<T>(\n name: AnalyzerName,\n work: () => Promise<T>,\n): Promise<{ output?: T; run: AnalyzerRun }> {\n const startedAt = new Date().toISOString()\n const started = Date.now()\n\n try {\n const output = await work()\n return {\n output,\n run: {\n analyzer: name,\n durationMs: Date.now() - started,\n finishedAt: new Date().toISOString(),\n startedAt,\n status: \"done\",\n },\n }\n } catch (error) {\n return {\n run: {\n analyzer: name,\n durationMs: Date.now() - started,\n finishedAt: new Date().toISOString(),\n message: error instanceof Error ? error.message : String(error),\n startedAt,\n status: \"failed\",\n },\n }\n }\n}\n\nexport async function runCodeAnalysis(input: AnalyzeProjectInput): Promise<AnalyzeProjectOutput> {\n const snapshotId = input.snapshotId ?? createSnapshotId()\n const snapshotRoot = path.join(input.snapshotBaseRoot ?? input.projectRoot, \".supernova\", \"snapshots\", snapshotId)\n const excludePaths = input.excludePaths ?? []\n const mode = input.mode ?? \"components\"\n const runComponentPipeline = mode === \"components\" || mode === \"all\"\n const runUsagePipeline = mode === \"usage\" || mode === \"all\"\n const usageImportFromPackages = (Array.isArray(input.importFrom) ? input.importFrom : [input.importFrom])\n .map(item => item.trim())\n .filter(Boolean)\n\n const artifacts: AnalyzerArtifacts = {\n componentUsage: {},\n jsdoc: {},\n staticComponents: [],\n storybookDocs: {},\n storybookStories: {},\n typescriptApi: {},\n }\n let components: ComponentDescriptor[] = []\n\n if (runComponentPipeline) {\n const componentsImportFrom = Array.isArray(input.importFrom) ? input.importFrom[0] : input.importFrom\n const staticRun = await runAnalyzer(\"static-components\", async () =>\n analyzeStaticComponents(input.projectRoot, componentsImportFrom),\n )\n const staticResult = staticRun.output\n components = staticResult?.components ?? []\n artifacts.staticComponents = components\n\n const typescriptApiRun = await runAnalyzer(\"typescript-api\", async () =>\n staticResult ? analyzeTypescriptApi(staticResult) : Promise.resolve({}),\n )\n artifacts.typescriptApi = typescriptApiRun.output ?? {}\n\n const storiesRun = await runAnalyzer(\"storybook-stories\", async () =>\n analyzeStorybookStories(input.projectRoot, components, excludePaths),\n )\n artifacts.storybookStories = storiesRun.output ?? {}\n\n const docsRun = await runAnalyzer(\"storybook-docs\", async () =>\n analyzeStorybookDocs(input.projectRoot, components, excludePaths),\n )\n artifacts.storybookDocs = docsRun.output ?? {}\n\n const jsdocRun = await runAnalyzer(\"jsdoc\", async () =>\n staticResult ? analyzeJsDoc(staticResult) : Promise.resolve({}),\n )\n artifacts.jsdoc = jsdocRun.output ?? {}\n }\n\n if (runUsagePipeline) {\n const usageRun = await runAnalyzer(\"component-usage\", async () =>\n analyzeComponentUsage(input.projectRoot, components, input.importFrom, excludePaths),\n )\n artifacts.componentUsage = usageRun.output?.records ?? {}\n if (components.length === 0 && usageRun.output?.components.length) {\n components = usageRun.output.components\n }\n }\n\n await writeSnapshot({\n artifacts,\n rawArtifacts:\n mode === \"usage\"\n ? [\"component-usage\"]\n : mode === \"components\"\n ? [\"static-components\", \"typescript-api\", \"storybook-stories\", \"storybook-docs\", \"jsdoc\"]\n : [\"static-components\", \"typescript-api\", \"storybook-stories\", \"storybook-docs\", \"jsdoc\", \"component-usage\"],\n snapshotRoot,\n usageImportFromPackages,\n })\n\n return {\n components,\n snapshotId,\n snapshotRoot,\n }\n}\n"],"names":[],"mappings":"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","debug_id":"22fe8582-d0a7-5587-85d0-4e932dfc7f38"}
|
|
1
|
+
{"version":3,"file":"run-analysis.js","sources":["../../../src/code-analyzer/orchestrator/run-analysis.ts"],"sourceRoot":"","sourcesContent":["import path from \"node:path\"\n\nimport { AnalyzerArtifacts, AnalyzerName, AnalyzerRun, ComponentDescriptor } from \"../analyzers/types.js\"\nimport { analyzeComponentUsage } from \"../analyzers/component-usage.js\"\nimport { analyzeJsDoc } from \"../analyzers/jsdoc.js\"\nimport { analyzeStaticComponents } from \"../analyzers/static-components.js\"\nimport { analyzeStorybookDocs } from \"../analyzers/storybook-docs.js\"\nimport { analyzeStorybookStories } from \"../analyzers/storybook-stories.js\"\nimport { analyzeTypescriptApi } from \"../analyzers/typescript-api.js\"\nimport { writeSnapshot } from \"../snapshot/write-snapshot.js\"\n\nexport type AnalyzeProjectInput = {\n designSystemId?: string\n excludePaths?: string[]\n importFrom: string | string[]\n mode?: \"all\" | \"components\" | \"usage\"\n projectRoot: string\n snapshotBaseRoot?: string\n runCommitSha?: string\n snapshotId?: string\n versionId?: string\n}\n\nexport type AnalyzeProjectOutput = {\n components: ComponentDescriptor[]\n snapshotId: string\n snapshotRoot: string\n}\n\nfunction createSnapshotId(): string {\n const now = new Date()\n const yyyy = now.getUTCFullYear()\n const mm = String(now.getUTCMonth() + 1).padStart(2, \"0\")\n const dd = String(now.getUTCDate()).padStart(2, \"0\")\n const hh = String(now.getUTCHours()).padStart(2, \"0\")\n const mi = String(now.getUTCMinutes()).padStart(2, \"0\")\n const ss = String(now.getUTCSeconds()).padStart(2, \"0\")\n const ms = String(now.getUTCMilliseconds()).padStart(3, \"0\")\n\n return `snap-${yyyy}${mm}${dd}-${hh}${mi}${ss}${ms}`\n}\n\nasync function runAnalyzer<T>(\n name: AnalyzerName,\n work: () => Promise<T>,\n): Promise<{ output?: T; run: AnalyzerRun }> {\n const startedAt = new Date().toISOString()\n const started = Date.now()\n\n try {\n const output = await work()\n return {\n output,\n run: {\n analyzer: name,\n durationMs: Date.now() - started,\n finishedAt: new Date().toISOString(),\n startedAt,\n status: \"done\",\n },\n }\n } catch (error) {\n return {\n run: {\n analyzer: name,\n durationMs: Date.now() - started,\n finishedAt: new Date().toISOString(),\n message: error instanceof Error ? error.message : String(error),\n startedAt,\n status: \"failed\",\n },\n }\n }\n}\n\nexport async function runCodeAnalysis(input: AnalyzeProjectInput): Promise<AnalyzeProjectOutput> {\n const snapshotId = input.snapshotId ?? createSnapshotId()\n const snapshotRoot = path.join(input.snapshotBaseRoot ?? input.projectRoot, \".supernova\", \"snapshots\", snapshotId)\n const excludePaths = input.excludePaths ?? []\n const mode = input.mode ?? \"components\"\n const runComponentPipeline = mode === \"components\" || mode === \"all\"\n const runUsagePipeline = mode === \"usage\" || mode === \"all\"\n const usageImportFromPackages = (Array.isArray(input.importFrom) ? input.importFrom : [input.importFrom])\n .map(item => item.trim())\n .filter(Boolean)\n\n const artifacts: AnalyzerArtifacts = {\n componentUsage: {},\n jsdoc: {},\n staticComponents: [],\n storybookDocs: {},\n storybookStories: {},\n typescriptApi: {},\n }\n let components: ComponentDescriptor[] = []\n\n if (runComponentPipeline) {\n const componentsImportFrom = Array.isArray(input.importFrom) ? input.importFrom[0] : input.importFrom\n const staticRun = await runAnalyzer(\"static-components\", async () =>\n analyzeStaticComponents(input.projectRoot, componentsImportFrom),\n )\n const staticResult = staticRun.output\n components = staticResult?.components ?? []\n artifacts.staticComponents = components\n\n const typescriptApiRun = await runAnalyzer(\"typescript-api\", async () =>\n staticResult ? analyzeTypescriptApi(staticResult) : Promise.resolve({}),\n )\n artifacts.typescriptApi = typescriptApiRun.output ?? {}\n\n const storiesRun = await runAnalyzer(\"storybook-stories\", async () =>\n analyzeStorybookStories(input.projectRoot, components, excludePaths),\n )\n artifacts.storybookStories = storiesRun.output ?? {}\n\n const docsRun = await runAnalyzer(\"storybook-docs\", async () =>\n analyzeStorybookDocs(input.projectRoot, components, excludePaths),\n )\n artifacts.storybookDocs = docsRun.output ?? {}\n\n const jsdocRun = await runAnalyzer(\"jsdoc\", async () =>\n staticResult ? analyzeJsDoc(staticResult) : Promise.resolve({}),\n )\n artifacts.jsdoc = jsdocRun.output ?? {}\n }\n\n if (runUsagePipeline) {\n const usageRun = await runAnalyzer(\"component-usage\", async () =>\n analyzeComponentUsage(input.projectRoot, components, input.importFrom, excludePaths),\n )\n artifacts.componentUsage = usageRun.output?.records ?? {}\n if (components.length === 0 && usageRun.output?.components.length) {\n components = usageRun.output.components\n }\n }\n\n await writeSnapshot({\n artifacts,\n rawArtifacts:\n mode === \"usage\"\n ? [\"component-usage\"]\n : mode === \"components\"\n ? [\"static-components\", \"typescript-api\", \"storybook-stories\", \"storybook-docs\", \"jsdoc\"]\n : [\"static-components\", \"typescript-api\", \"storybook-stories\", \"storybook-docs\", \"jsdoc\", \"component-usage\"],\n snapshotRoot,\n usageImportFromPackages,\n })\n\n return {\n components,\n snapshotId,\n snapshotRoot,\n }\n}\n"],"names":[],"mappings":"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","debugId":"22fe8582-d0a7-5587-85d0-4e932dfc7f38"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/code-analyzer/snapshot/index.ts"],"sourceRoot":"","sourcesContent":["export * from \"./write-snapshot.js\"\n"],"names":[],"mappings":";;AAAA,cAAc,qBAAqB,CAAA","
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/code-analyzer/snapshot/index.ts"],"sourceRoot":"","sourcesContent":["export * from \"./write-snapshot.js\"\n"],"names":[],"mappings":";;AAAA,cAAc,qBAAqB,CAAA","debugId":"b1d36602-6dba-5745-9f45-abde550ade2f"}
|