cannabis
Version:
TypeScript AST Query library
140 lines • 5.4 kB
JavaScript
;
var __spreadArrays = (this && this.__spreadArrays) || function () {
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
for (var r = Array(s), k = 0, i = 0; i < il; i++)
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
r[k] = a[j];
return r;
};
Object.defineProperty(exports, "__esModule", { value: true });
var misc_utils_of_mine_generic_1 = require("misc-utils-of-mine-generic");
var ts_simple_ast_extra_1 = require("ts-simple-ast-extra");
var config_1 = require("../query/config");
var file_1 = require("../query/file");
/**
* Returns immediate children. In case of Nodes, children are obtained using forEachChild or getChildren according to
* given getChildren parameter or to global config
*/
function getASTNodeChildren(f, getChildren) {
if (getChildren === void 0) { getChildren = config_1.getConfig('getChildren'); }
return !f
? []
: ts_simple_ast_extra_1.isDirectory(f)
? f.getDirectories().concat(f.getSourceFiles()).filter(function (f) { return config_1.getConfig('includeFilesInNodeModules') || !getASTNodeFilePath(f).includes('node_modules'); })
: f ? getChildren ? f.getChildren() : f.forEachChildAsArray() : [];
}
exports.getASTNodeChildren = getASTNodeChildren;
function getASTNodeParent(f) {
return !f
? undefined
: ts_simple_ast_extra_1.isDirectory(f)
? (f.getParent() && f.getParent().isDescendantOf(file_1.getASTRoot().getRootDirectory()) ? f.getParent() : undefined)
: ts_simple_ast_extra_1.isSourceFile(f)
? f.getDirectory()
: f.getParent();
}
exports.getASTNodeParent = getASTNodeParent;
function getASTNodeSiblings(n) {
if (ts_simple_ast_extra_1.isSourceFile(n)) {
var p = n.getDirectory();
if (p && p !== n) {
return p.getSourceFiles().filter(function (f) { return f !== n; });
}
}
else if (ts_simple_ast_extra_1.isDirectory(n)) {
var p = n.getParent();
if (p && p !== n) {
return p.getDirectories().filter(function (f) { return f !== n; });
}
}
else {
return __spreadArrays(n.getNextSiblings(), n.getPreviousSiblings());
}
return [];
}
exports.getASTNodeSiblings = getASTNodeSiblings;
function getASTNodeAncestors(n) {
var propName = 'ancestors';
if (config_1.getConfig('cacheAncestors')) {
var cached = getNodeProperty(n, propName);
if (typeof cached !== 'undefined') {
return cached;
}
}
var value = [];
var b = n;
while ((b = getASTNodeParent(b)) && b !== n) {
value.push(b);
}
if (config_1.getConfig('cacheAncestors')) {
setNodeProperty(n, propName, value);
}
return value;
}
exports.getASTNodeAncestors = getASTNodeAncestors;
/**
* Gets a ASTNode that represents the SourceFile of given node, or undefined if it doesn't apply (i.e, given node is a directory).
*/
function getASTSourceFile(f) {
return !f
? undefined
: ts_simple_ast_extra_1.isDirectory(f)
? undefined : ts_simple_ast_extra_1.isSourceFile(f) ? f : f.getSourceFile();
}
exports.getASTSourceFile = getASTSourceFile;
function isASTNode(f) {
return f && (ts_simple_ast_extra_1.isNode(f) || ts_simple_ast_extra_1.isDirectory(f));
}
exports.isASTNode = isASTNode;
function getASTNodeKindName(n) {
return !n ? '' : ts_simple_ast_extra_1.isNode(n) ? n.getKindName() : 'Directory';
}
exports.getASTNodeKindName = getASTNodeKindName;
function getASTNodeName(node) {
if (ts_simple_ast_extra_1.isDirectory(node) || ts_simple_ast_extra_1.isSourceFile(node)) {
return node.getBaseName() || '';
}
else {
return ts_simple_ast_extra_1.getName(node) || '';
}
}
exports.getASTNodeName = getASTNodeName;
function setNodeProperty(n, path, value) {
ts_simple_ast_extra_1.setNodeProperty(n, __spreadArrays(['cannabis'], misc_utils_of_mine_generic_1.asArray(path)), value);
}
exports.setNodeProperty = setNodeProperty;
function getNodeProperty(n, path) {
return ts_simple_ast_extra_1.getNodeProperty(n, __spreadArrays(['cannabis'], misc_utils_of_mine_generic_1.asArray(path)));
}
exports.getNodeProperty = getNodeProperty;
function getASTNodeText(n) {
return !n ? '' : ts_simple_ast_extra_1.isDirectory(n) ? n.getPath() : ts_simple_ast_extra_1.isNode(n) ? n.getText() : '';
}
exports.getASTNodeText = getASTNodeText;
function getASTNodeFilePath(n) {
return ts_simple_ast_extra_1.isDirectory(n) ? n.getPath() : n ? n.getSourceFile().getFilePath() : '';
}
exports.getASTNodeFilePath = getASTNodeFilePath;
function visit(n, v, childrenFirst, parent, level) {
if (childrenFirst === void 0) { childrenFirst = config_1.getConfig('visitChildrenFirst'); }
if (level === void 0) { level = 0; }
if (!n) {
return;
}
if (!childrenFirst && v(n, parent, level)) {
return true;
}
getASTNodeChildren(n).forEach(function (c) { visit(c, v, childrenFirst, n, level + 1); });
return childrenFirst && v(n, parent, level);
}
exports.visit = visit;
function getASTNodeDescendants(node) {
var a = [];
visit(node, function (n) {
a.push(n);
return false;
});
return a;
}
exports.getASTNodeDescendants = getASTNodeDescendants;
//# sourceMappingURL=astNode.js.map