UNPKG

ecmascript-version-detector

Version:
71 lines (67 loc) 2.39 kB
// LICENSE : MIT "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.parse = parse; var babylon = require("babylon"); var ASTQ = require("astq"); var ObjectAssign = require("object.assign"); var astq = new ASTQ(); var types = require("../data/index.json"); /** * @param {string} code * @param {Object} [babylonOptions] * @returns {Object[]} */ function parseCode(code, babylonOptions) { var defaultOption = { sourceType: "module", plugins: ["jsx", "flow", "asyncFunctions", "classConstructorCall", "doExpressions", "trailingFunctionCommas", "objectRestSpread", "decorators", "classProperties", "exportExtensions", "exponentiationOperator", "asyncGenerators", "functionBind", "functionSent"] }; return require("babylon").parse(code, babylonOptions || defaultOption); } /** * parse `code` and return `results`. * Sometimes, the `parse` function throw parse error. * @param {string} code * @param {{babylonOptions: Object}} [options] * @returns {{selector:string, version:string, node: Object, en: Object}[]} results * @throws */ function parse(code) { var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; var babylonOptions = options.babylonOptions; var AST = parseCode(code, babylonOptions); var infoList = []; // ignore to add duplicated range var canPushInfo = function canPushInfo(type, match) { var start = match.start; var end = match.end; var sameRangeInfo = infoList.find(function (targetInfo) { return targetInfo.node.start === start && targetInfo.node.end === end; }); if (!sameRangeInfo) { return true; } // Specificity - prefer detail selector return type.selector.length > sameRangeInfo.selector.length; }; types.forEach(function (type) { var selector = type.selector; var results = astq.query(AST, selector); if (results.length === 0) { return false; } results.forEach(function (match) { if (!canPushInfo(type, match)) { return; } var result = ObjectAssign({}, type, { node: match }); infoList.push(result); }); return true; }); return infoList; } //# sourceMappingURL=ecmascript-version-detector.js.map