cannabis
Version:
TypeScript AST Query library
236 lines • 11.7 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var micromatch_1 = require("micromatch");
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 astNode_1 = require("../node/astNode");
var astNodeType_1 = require("../node/astNodeType");
var path_1 = require("../node/path");
var config_1 = require("../query/config");
// import { ExecutionContext } from '../queryAst'
var util_1 = require("./util");
function installFunctions(astq) {
astq.func('isFunctionLike', function (adapter, node, arg) {
return ts_simple_ast_extra_1.isNode((node || arg)) && ts_simple_ast_extra_1.ts.isFunctionLike((node || arg).compilerNode);
});
astq.func('getExtended', function (adapter, node, arg) {
return astNodeType_1.getExtended(arg || node);
});
astq.func('derivedClasses', function (adapter, node, arg) {
return astNodeType_1.getDerivedClasses(arg || node);
});
astq.func('matchEvery', function (adapter, node, input, patterns) {
var s = util_1.splitString(input);
if (s.find(function (s) { return typeof s !== 'string'; }) !== undefined) {
return false;
}
var p = util_1.splitString(patterns);
if (p.find(function (s) { return typeof s !== 'string'; }) !== undefined) {
return false;
}
return micromatch_1.every(s, p);
});
astq.func('matchAll', function (adapter, node, input, patterns) {
var s = util_1.splitString(input);
if (s.find(function (s) { return typeof s !== 'string'; }) !== undefined) {
return false;
}
var p = util_1.splitString(patterns);
if (p.find(function (s) { return typeof s !== 'string'; }) !== undefined) {
return false;
}
return micromatch_1.all(s, p);
});
astq.func('getExtendedNames', function (adapter, node, arg) {
return astNodeType_1.getExtendedNames(arg || node) || [];
});
astq.func('text', function (adapter, node, arg) {
var n = (arg || node);
return misc_utils_of_mine_generic_1.isArray(n) ? n.map(astNode_1.getASTNodeText) : astNode_1.getASTNodeText(n);
});
astq.func('name', function (adapter, node, arg) {
var n = (arg || node);
return misc_utils_of_mine_generic_1.isArray(n) ? n.map(astNode_1.getASTNodeName) : astNode_1.getASTNodeName(n);
});
astq.func('extendsAllNamed', function (adapter, node, nameOrNode, name) {
if (typeof name === 'string') {
node = nameOrNode;
nameOrNode = name;
}
return ts_simple_ast_extra_1.isNode(node) && (ts_simple_ast_extra_1.tsMorph.TypeGuards.isClassDeclaration(node) || ts_simple_ast_extra_1.tsMorph.TypeGuards.isInterfaceDeclaration(node)) &&
misc_utils_of_mine_generic_1.compareTexts(util_1.splitString(nameOrNode), astNodeType_1.getExtendedNames(node), { verb: 'equals', multiplicity: 'allOf' }) || false;
});
astq.func('extendsAnyNamed', function (adapter, node, name, arg3) {
if (typeof arg3 === 'string') {
node = name;
name = arg3;
}
return ts_simple_ast_extra_1.isNode(node) && (ts_simple_ast_extra_1.tsMorph.TypeGuards.isClassDeclaration(node) || ts_simple_ast_extra_1.tsMorph.TypeGuards.isInterfaceDeclaration(node)) &&
misc_utils_of_mine_generic_1.compareTexts(util_1.splitString(name), astNodeType_1.getExtendedNames(node), { verb: 'equals' }) || false;
});
astq.func('getImplemented', function (adapter, node, arg) {
return astNodeType_1.getImplemented(arg || node);
});
astq.func('getImplementations', function (adapter, node, arg) {
return astNodeType_1.getImplementations(arg || node);
});
astq.func('getImplementedNames', function (adapter, node, arg) {
return astNodeType_1.getImplementedNames(arg || node);
});
astq.func('implementsAnyNamed', function (adapter, node, name, arg3) {
if (typeof arg3 === 'string') {
node = name;
name = arg3;
}
return ts_simple_ast_extra_1.isNode(node) && ts_simple_ast_extra_1.tsMorph.TypeGuards.isClassDeclaration(node) && misc_utils_of_mine_generic_1.compareTexts(name.split(','), astNodeType_1.getImplementedNames(node), { verb: 'equals', multiplicity: 'anyOf' }) || false;
});
astq.func('implementsAllNamed', function (adapter, node, name, arg3) {
if (typeof arg3 === 'string') {
node = name;
name = arg3;
}
return ts_simple_ast_extra_1.isNode(node) && ts_simple_ast_extra_1.tsMorph.TypeGuards.isClassDeclaration(node) && misc_utils_of_mine_generic_1.compareTexts(name.split(','), astNodeType_1.getImplementedNames(node), { verb: 'equals', multiplicity: 'allOf' }) || false;
});
astq.func('findReferences', function (adapter, node, arg) {
var n = arg || node;
return misc_utils_of_mine_generic_1.isArray(n) ? n.map(astNodeType_1.findReferences) : astNodeType_1.findReferences(n);
});
astq.func('sourceFile', function (adapter, node, arg) {
var n = (arg || node);
return misc_utils_of_mine_generic_1.isArray(n) ? n.map(util_1.getSourceFile) : util_1.getSourceFile(n);
});
astq.func('debug', function (adapter, node) {
var args = [];
for (var _i = 2; _i < arguments.length; _i++) {
args[_i - 2] = arguments[_i];
}
// const context = getNodeProperty<ExecutionContext>(astq as any, 'context')
// if (!context || !context.logs) {
// return true
// }
var logs = config_1.getConfig('logs');
if (!logs) {
return true;
}
if (!args || args.length === 0) {
args = [node];
}
args = misc_utils_of_mine_generic_1.asArray(args);
if (typeof logs === 'function') {
logs.apply(void 0, args.map(util_1.print));
}
else if (misc_utils_of_mine_generic_1.isArray(logs)) {
logs.push(args.map(util_1.print).join(', '));
}
return args[args.length - 1]; // return tue so users can write AND expressions and keep the query.
});
astq.func('array', function (adapter, node) {
var args = [];
for (var _i = 2; _i < arguments.length; _i++) {
args[_i - 2] = arguments[_i];
}
return args && misc_utils_of_mine_generic_1.isArray(args) ? args : [];
});
astq.func('stringArray', function (adapter, node) {
var args = [];
for (var _i = 2; _i < arguments.length; _i++) {
args[_i - 2] = arguments[_i];
}
return (args && misc_utils_of_mine_generic_1.isArray(args) ? args : []).map(function (e) { return e + ''; });
});
astq.func('join', function (adapter, node, arr, joinChar) {
return misc_utils_of_mine_generic_1.isArray(arr) && arr.join(joinChar || ' ') || '';
});
astq.func('map', function (adapter, node, arr, propertyName) {
return propertyName && arr && misc_utils_of_mine_generic_1.isArray(arr) && misc_utils_of_mine_generic_1.isString(propertyName) ? arr.filter(misc_utils_of_mine_generic_1.notUndefined).map(function (e) { return util_1.propertyValue(e, propertyName); }).filter(misc_utils_of_mine_generic_1.notUndefined) : [];
});
astq.func('compareText', function (adapter, node, actual, expected, options) {
var a = util_1.splitString(actual || []).filter(misc_utils_of_mine_generic_1.notUndefined);
var e = util_1.splitString(expected || []).filter(misc_utils_of_mine_generic_1.notUndefined);
var o = misc_utils_of_mine_generic_1.stringToObject(options || '') || {};
if (!a || !e.length || !a.length || !e.length) {
return false;
}
return misc_utils_of_mine_generic_1.compareTexts(a, e, o);
});
astq.func('flat', function (adapter, node, arr) {
return arr && misc_utils_of_mine_generic_1.isArray(arr) && arr.length ? misc_utils_of_mine_generic_1.isArray(arr[0]) ? arr.flat() : arr : [];
});
astq.func('declarations', function (adapter, node, arg) {
var n = misc_utils_of_mine_generic_1.asArray((arg || node));
return n.map(function (n) {
if (ts_simple_ast_extra_1.isNode(n)) {
var s = n.getSymbol();
return s && s.getDeclarations() || [];
}
else {
return [];
}
}).flat();
});
astq.func('namePath', function (adapter, node, arg) {
return path_1.getASTNodeNamePath(arg || node);
});
astq.func('ancestors', function (adapter, node, arg) {
var n = (arg || node);
return misc_utils_of_mine_generic_1.isArray(n) ? n.map(astNode_1.getASTNodeAncestors) : astNode_1.getASTNodeAncestors(n);
});
astq.func('siblings', function (adapter, node, arg) {
var n = (arg || node);
return misc_utils_of_mine_generic_1.isArray(n) ? n.map(astNode_1.getASTNodeSiblings) : astNode_1.getASTNodeSiblings(n);
});
astq.func('children', function (adapter, node, arg) {
var n = (arg || node);
return misc_utils_of_mine_generic_1.isArray(n) ? n.map(function (n) { return astNode_1.getASTNodeChildren(n); }) : astNode_1.getASTNodeChildren(n);
});
astq.func('parent', function (adapter, node, arg) {
var n = (arg || node);
return misc_utils_of_mine_generic_1.isArray(n) ? n.map(astNode_1.getASTNodeParent) : astNode_1.getASTNodeParent(n);
});
astq.func('kindName', function (adapter, node, arg) {
var n = arg || node;
return misc_utils_of_mine_generic_1.isArray(n) ? n.map(astNode_1.getASTNodeKindName) : astNode_1.getASTNodeKindName(n);
});
astq.func('includes', function (adapter, node, a, b) {
var n = b || node;
if (misc_utils_of_mine_generic_1.isArray(a) || misc_utils_of_mine_generic_1.isString(a)) {
// in case of includes([['a'], ['a']], 'a') we could do some magic but we we won't :
// if (a && a.length && isString(a[0])) {
// }
return a.includes(n);
}
return false;
});
astq.func('localNames', function (adapter, node, arg) {
var n = (arg || node);
return misc_utils_of_mine_generic_1.isArray(n) ? n.map(astNodeType_1.localNames) : astNodeType_1.localNames(n);
});
astq.func('typeText', function (adapter, node, arg) {
var n = (arg || node);
return misc_utils_of_mine_generic_1.isArray(n) ? n.map(astNodeType_1.getASTNodeTypeAsString) : astNodeType_1.getASTNodeTypeAsString(n);
});
astq.func('Type', function (adapter, node, arg) {
var n = (arg || node);
return misc_utils_of_mine_generic_1.isArray(n) ? n.map(astNodeType_1.getASTNodeType) : astNodeType_1.getASTNodeType(n);
});
astq.func('returnType', function (adapter, node, arg) {
var n = (arg || node);
return misc_utils_of_mine_generic_1.isArray(n) ? n.map(astNodeType_1.getReturnType) : astNodeType_1.getReturnType(n);
});
astq.func('get', function (adapter, node, nodesOrName, name) {
var n;
if (typeof nodesOrName === 'string') {
n = node;
name = nodesOrName;
}
else {
n = (nodesOrName || node);
}
if (!name) {
return null;
}
return misc_utils_of_mine_generic_1.isArray(n) ? n.map(function (c) { return util_1.propertyValue(c, name); }) : util_1.propertyValue(n, name);
});
}
exports.installFunctions = installFunctions;
//# sourceMappingURL=functions.js.map