Files
v10/site/scripts/api-docs-builder/src/html-handler.ts
T

40 lines
1.1 KiB
TypeScript

import * as ts from 'typescript';
import type { HtmlExtraction } from './types.js';
/** Extract tagName from a Lit element file. */
export function extractHtml(
filePath: string,
program: ts.Program,
componentName: string,
elementName?: string
): HtmlExtraction | null {
const sourceFile = program.getSourceFile(filePath);
if (!sourceFile) return null;
const className = elementName ?? `${componentName}Element`;
let tagName = '';
function visit(node: ts.Node) {
if (ts.isClassDeclaration(node) && node.name?.text === className) {
for (const member of node.members) {
if (
ts.isPropertyDeclaration(member) &&
member.name &&
ts.isIdentifier(member.name) &&
member.name.text === 'tagName' &&
member.modifiers?.some((m) => m.kind === ts.SyntaxKind.StaticKeyword) &&
member.initializer &&
ts.isStringLiteral(member.initializer)
) {
tagName = member.initializer.text;
}
}
}
ts.forEachChild(node, visit);
}
visit(sourceFile);
return tagName ? { tagName } : null;
}