UNPKG

cannabis

Version:
236 lines 11.7 kB
"use strict"; 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