@ts-ast-parser/core
Version:
Reflects a simplified version of the TypeScript AST for generating documentation
54 lines • 2.19 kB
JavaScript
import { ExportDeclarationNode } from '../nodes/export-declaration-node.js';
import { ExportAssignmentNode } from '../nodes/export-assignment-node.js';
import { NamespaceExportNode } from '../nodes/namespace-export-node.js';
import { NamedExportNode } from '../nodes/named-export-node.js';
import { ReExportNode } from '../nodes/re-export-node.js';
import { hasExportKeyword } from '../utils/export.js';
import ts from 'typescript';
export const exportDeclarationFactory = {
isNode: (node) => hasExportKeyword(node),
create: (node, context) => {
const exports = [];
if (ts.isVariableStatement(node)) {
for (const declaration of node.declarationList.declarations) {
exports.push(new ExportDeclarationNode(node, context, declaration));
}
}
if (ts.isFunctionDeclaration(node) ||
ts.isClassDeclaration(node) ||
ts.isInterfaceDeclaration(node) ||
ts.isEnumDeclaration(node) ||
ts.isTypeAliasDeclaration(node)) {
exports.push(new ExportDeclarationNode(node, context));
}
return exports;
},
};
export const exportAssignmentFactory = {
isNode: (node) => ts.isExportAssignment(node),
create: (node, context) => {
return [new ExportAssignmentNode(node, context)];
},
};
export const exportStatementFactory = {
isNode: (node) => ts.isExportDeclaration(node),
create: (node, context) => {
const isNamed = node.exportClause && ts.isNamedExports(node.exportClause);
const isNamespaced = node.exportClause && ts.isNamespaceExport(node.exportClause);
const isReexport = node.moduleSpecifier !== undefined;
const result = [];
if (isNamed) {
for (const element of node.exportClause.elements) {
result.push(new NamedExportNode(node, element, context));
}
}
else if (isNamespaced) {
result.push(new NamespaceExportNode(node, context));
}
else if (isReexport) {
result.push(new ReExportNode(node, context));
}
return result;
},
};
//# sourceMappingURL=create-export.js.map