1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const core_1 = require("@jscpd/core");
|
4 | const safe_1 = require("colors/safe");
|
5 | const finder_1 = require("@jscpd/finder");
|
6 | const init_1 = require("./init");
|
7 | const print_1 = require("./print");
|
8 | const crypto_1 = require("crypto");
|
9 | const store_1 = require("./init/store");
|
10 | const tokenizer_1 = require("@jscpd/tokenizer");
|
11 | const reporters_1 = require("./init/reporters");
|
12 | const subscribers_1 = require("./init/subscribers");
|
13 | const hooks_1 = require("./init/hooks");
|
14 | function jscpd(argv) {
|
15 | const packageJson = require(__dirname + '/../package.json');
|
16 | console.time(safe_1.italic(safe_1.grey('Detection time:')));
|
17 | const cli = init_1.initCli(packageJson, argv);
|
18 | const options = init_1.initOptions(cli);
|
19 | if (options.list) {
|
20 | print_1.printSupportedFormat();
|
21 | }
|
22 | if (options.debug) {
|
23 | print_1.printOptions(options);
|
24 | }
|
25 | const files = finder_1.getFilesToDetect(options);
|
26 | if (!options.path || options.path.length === 0) {
|
27 | console.log(`"path" option not provided`);
|
28 | return Promise.resolve([]);
|
29 | }
|
30 | if (options.debug) {
|
31 | print_1.printFiles(files);
|
32 | return Promise.resolve([]);
|
33 | }
|
34 | else {
|
35 | const hashFunction = (value) => {
|
36 | return crypto_1.createHash('md5').update(value).digest('hex');
|
37 | };
|
38 | options.hashFunction = options.hashFunction || hashFunction;
|
39 | const store = store_1.getStore(cli.store);
|
40 | const statistic = new core_1.Statistic(options);
|
41 | const tokenizer = new tokenizer_1.Tokenizer();
|
42 | const detector = new finder_1.InFilesDetector(tokenizer, store, statistic, options);
|
43 | reporters_1.registerReporters(options, detector);
|
44 | subscribers_1.registerSubscribers(options, detector);
|
45 | hooks_1.registerHooks(options, detector);
|
46 | return detector.detect(files).then((clones) => {
|
47 | console.timeEnd(safe_1.italic(safe_1.grey('Detection time:')));
|
48 | return clones;
|
49 | }).finally(() => {
|
50 | store.close();
|
51 | });
|
52 | }
|
53 | }
|
54 | exports.jscpd = jscpd;
|
55 |
|
\ | No newline at end of file |