UNPKG

@jsdocs-io/extractor

Version:

Analyze and extract the API from npm packages

67 lines (60 loc) 1.53 kB
import * as tsm from 'ts-morph'; import { DeclarationKinds, ModuleDeclarations, NamespaceDeclaration, } from '../types/module-declarations'; import { formatText } from './format'; import { getFilename } from './get-filename'; import { SourceProvider } from './source-provider'; export function isFileModule( declaration: tsm.Node ): declaration is tsm.SourceFile { return tsm.Node.isSourceFile(declaration); } export function newFileModule({ id, name, declaration, declarations, getSource, }: { id: string; name: string; declaration: tsm.SourceFile; declarations: ModuleDeclarations; getSource: SourceProvider; }): NamespaceDeclaration { const kind = DeclarationKinds.NamespaceDeclaration; const docs = getFileModuleDocs({ declaration }); const source = getSource({ declaration }); const signature = getFileModuleSignature({ declaration }); return { kind, id, name, docs, source, signature, declarations, }; } function getFileModuleDocs({ declaration, }: { declaration: tsm.SourceFile; }): string[] { const doc = declaration .getDescendantsOfKind(tsm.SyntaxKind.JSDocComment)[0] ?.getText(); return doc ? [doc] : []; } function getFileModuleSignature({ declaration, }: { declaration: tsm.SourceFile; }): string { const filename = getFilename({ declaration }); const signature = `module '${filename}' {}`; return formatText(signature); }