UNPKG

jscpd

Version:

Copy/paste detector for programming code, support JavaScript, CoffeeScript, PHP, Ruby, Python, Less, Go, Java, Yaml, C#, C++, C, Puppet, Twig languages

74 lines 5.11 kB
"use strict"; var __values = (this && this.__values) || function (o) { var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0; if (m) return m.call(o); return { next: function () { if (o && i >= o.length) o = void 0; return { value: o && o[i++], done: !o }; } }; }; Object.defineProperty(exports, "__esModule", { value: true }); var clone_1 = require("./clone"); var events_1 = require("./events"); var models_1 = require("./stores/models"); var stores_manager_1 = require("./stores/stores-manager"); var options_1 = require("./utils/options"); var Detector = /** @class */ (function () { function Detector(options, eventEmitter) { this.options = options; this.eventEmitter = eventEmitter; } Detector.prototype.detectByMap = function (tokenMap) { var e_1, _a; var clones = []; if (tokenMap.getLength() >= options_1.getOption('minTokens', this.options)) { var isClone = false; var start = void 0; var end = void 0; var HashesStore = stores_manager_1.StoresManager.getStore(models_1.getHashDbName(tokenMap.getFormat())); try { for (var tokenMap_1 = __values(tokenMap), tokenMap_1_1 = tokenMap_1.next(); !tokenMap_1_1.done; tokenMap_1_1 = tokenMap_1.next()) { var mapFrame = tokenMap_1_1.value; if (HashesStore.has(mapFrame.id)) { isClone = true; if (!start) { start = end = mapFrame; } else { end = mapFrame; } } else { this._cloneFound(isClone, start, end, clones); isClone = false; start = undefined; HashesStore.set(mapFrame.id, mapFrame); } } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (tokenMap_1_1 && !tokenMap_1_1.done && (_a = tokenMap_1.return)) _a.call(tokenMap_1); } finally { if (e_1) throw e_1.error; } } this._cloneFound(isClone, start, end, clones); } return clones; }; Detector.prototype._cloneFound = function (isClone, start, end, clones) { if (isClone && start && end) { var clone = clone_1.createClone(start, end); if (clone_1.isCloneLinesBiggerLimit(clone, options_1.getOption('minLines', this.options))) { clones.push(clone); this.eventEmitter.emit(events_1.CLONE_FOUND_EVENT, clone); } } }; return Detector; }()); exports.Detector = Detector; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0ZWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZGV0ZWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQ0EsaUNBQStEO0FBQy9ELG1DQUE2QztBQUs3QywwQ0FBZ0Q7QUFDaEQsMERBQXdEO0FBRXhELDJDQUE0QztBQUU1QztJQUNFLGtCQUFvQixPQUFpQixFQUFVLFlBQTBCO1FBQXJELFlBQU8sR0FBUCxPQUFPLENBQVU7UUFBVSxpQkFBWSxHQUFaLFlBQVksQ0FBYztJQUFHLENBQUM7SUFFdEUsOEJBQVcsR0FBbEIsVUFBbUIsUUFBbUI7O1FBQ3BDLElBQU0sTUFBTSxHQUFhLEVBQUUsQ0FBQztRQUM1QixJQUFJLFFBQVEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxtQkFBUyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDaEUsSUFBSSxPQUFPLEdBQVksS0FBSyxDQUFDO1lBQzdCLElBQUksS0FBSyxTQUF1QixDQUFDO1lBQ2pDLElBQUksR0FBRyxTQUF1QixDQUFDO1lBRS9CLElBQU0sV0FBVyxHQUFzQiw4QkFBYSxDQUFDLFFBQVEsQ0FBQyxzQkFBYSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUVoRyxDQUFDOztnQkFFRixLQUF1QixJQUFBLGFBQUEsU0FBQSxRQUFRLENBQUEsa0NBQUEsd0RBQUU7b0JBQTVCLElBQU0sUUFBUSxxQkFBQTtvQkFDakIsSUFBSSxXQUFXLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRTt3QkFDaEMsT0FBTyxHQUFHLElBQUksQ0FBQzt3QkFDZixJQUFJLENBQUMsS0FBSyxFQUFFOzRCQUNWLEtBQUssR0FBRyxHQUFHLEdBQUcsUUFBUSxDQUFDO3lCQUN4Qjs2QkFBTTs0QkFDTCxHQUFHLEdBQUcsUUFBUSxDQUFDO3lCQUNoQjtxQkFDRjt5QkFBTTt3QkFDTCxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO3dCQUM5QyxPQUFPLEdBQUcsS0FBSyxDQUFDO3dCQUNoQixLQUFLLEdBQUcsU0FBUyxDQUFDO3dCQUNsQixXQUFXLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7cUJBQ3hDO2lCQUNGOzs7Ozs7Ozs7WUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQy9DO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVPLDhCQUFXLEdBQW5CLFVBQW9CLE9BQWdCLEVBQUUsS0FBNEIsRUFBRSxHQUEwQixFQUFFLE1BQWdCO1FBQzlHLElBQUksT0FBTyxJQUFJLEtBQUssSUFBSSxHQUFHLEVBQUU7WUFDM0IsSUFBTSxLQUFLLEdBQVcsbUJBQVcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDOUMsSUFBSSwrQkFBdUIsQ0FBQyxLQUFLLEVBQUUsbUJBQVMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUU7Z0JBQ3ZFLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLDBCQUFpQixFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQ2xEO1NBQ0Y7SUFDSCxDQUFDO0lBQ0gsZUFBQztBQUFELENBQUMsQUEzQ0QsSUEyQ0M7QUEzQ1ksNEJBQVEifQ==