typescript
Version:
TypeScript is a language for application scale JavaScript development
47 lines • 2.52 kB
JavaScript
/**
* Hand-written visitor implementations for nodes with runtime-dependent
* child ordering. Generated code in visitor.generated.ts and factory.generated.ts
* delegates to these functions.
*/
import { SyntaxKind } from "#enums/syntaxKind";
import { updateJSDocParameterTag, updateJSDocPropertyTag, } from "./factory.generated.js";
import { isEntityName, isIdentifier, isTypeNode, } from "./is.js";
import { visitNode, visitNodes, } from "./visitor.generated.js";
export { visitEachChild, visitNode, visitNodes, visitNodesArray } from "./visitor.generated.js";
// ── forEachChild helpers (same signature as forEachChildTable entries) ──
function visitNodeForEachChild(cbNode, node) {
return node ? cbNode(node) : undefined;
}
function visitNodesForEachChild(cbNode, cbNodes, nodes) {
if (!nodes)
return undefined;
if (cbNodes)
return cbNodes(nodes);
for (const node of nodes) {
const result = cbNode(node);
if (result)
return result;
}
return undefined;
}
// ── forEachChild implementations ──
function forEachChildOfJSDocParameterOrPropertyTag(data, cbNode, cbNodes) {
return visitNodeForEachChild(cbNode, data.tagName) ||
(data.isNameFirst
? visitNodeForEachChild(cbNode, data.name) || visitNodeForEachChild(cbNode, data.typeExpression)
: visitNodeForEachChild(cbNode, data.typeExpression) || visitNodeForEachChild(cbNode, data.name)) ||
visitNodesForEachChild(cbNode, cbNodes, data.comment);
}
export { forEachChildOfJSDocParameterOrPropertyTag as forEachChildOfJSDocParameterTag, forEachChildOfJSDocParameterOrPropertyTag as forEachChildOfJSDocPropertyTag };
// ── visitEachChild implementations ──
function visitEachChildOfJSDocParameterOrPropertyTag(node, visitor) {
const _tagName = visitNode(node.tagName, visitor, isIdentifier);
const _name = visitNode(node.name, visitor, isEntityName);
const _typeExpression = visitNode(node.typeExpression, visitor, isTypeNode);
const _comment = visitNodes(node.comment, visitor);
return node.kind === SyntaxKind.JSDocParameterTag
? updateJSDocParameterTag(node, _tagName, _name, _typeExpression, _comment)
: updateJSDocPropertyTag(node, _tagName, _name, _typeExpression, _comment);
}
export { visitEachChildOfJSDocParameterOrPropertyTag as visitEachChildOfJSDocParameterTag, visitEachChildOfJSDocParameterOrPropertyTag as visitEachChildOfJSDocPropertyTag };
//# sourceMappingURL=visitor.js.map