scanoss 0.4.8-beta → 0.4.10-beta
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.idea/workspace.xml +100 -3
- package/build/main/cli/bin/cli-bin.js +2 -3
- package/build/main/cli/commands/scan.js +1 -16
- package/build/main/index.d.ts +1 -8
- package/build/main/index.js +2 -13
- package/build/main/sdk/filters/filtering.js +1 -1
- package/build/main/sdk/scanner/Dispatcher/Dispatcher.js +1 -1
- package/build/main/sdk/scanner/WfpProvider/WfpCalculator/WfpCalculator.d.ts +2 -2
- package/build/main/sdk/scanner/WfpProvider/WfpCalculator/WfpCalculator.js +2 -1
- package/build/main/sdk/scanner/WfpProvider/WfpProvider.d.ts +4 -1
- package/build/main/sdk/scanner/WfpProvider/WfpProvider.js +7 -1
- package/build/main/sdk/scanner/WfpProvider/WfpSplitter/WfpSplitter.d.ts +2 -1
- package/build/main/sdk/scanner/WfpProvider/WfpSplitter/WfpSplitter.js +54 -10
- package/build/main/sdk/tree/File.js +2 -2
- package/build/main/sdk/tree/Filters/DependencyFilter.js +2 -2
- package/build/main/sdk/tree/Filters/ScanFilter.js +2 -2
- package/build/main/sdk/tree/Folder.d.ts +0 -1
- package/build/main/sdk/tree/Folder.js +2 -5
- package/build/main/sdk/tree/Node.d.ts +0 -1
- package/build/main/sdk/tree/Node.js +1 -4
- package/build/main/sdk/tree/Tree.js +1 -2
- package/build/main/tsconfig.tsbuildinfo +63 -223
- package/build/module/cli/bin/cli-bin.js +2 -3
- package/build/module/cli/commands/scan.js +1 -16
- package/build/module/index.d.ts +1 -8
- package/build/module/index.js +2 -13
- package/build/module/sdk/filters/filtering.js +1 -1
- package/build/module/sdk/scanner/WfpProvider/WfpCalculator/WfpCalculator.d.ts +2 -2
- package/build/module/sdk/scanner/WfpProvider/WfpCalculator/WfpCalculator.js +2 -1
- package/build/module/sdk/scanner/WfpProvider/WfpProvider.d.ts +4 -1
- package/build/module/sdk/scanner/WfpProvider/WfpProvider.js +7 -1
- package/build/module/sdk/scanner/WfpProvider/WfpSplitter/WfpSplitter.d.ts +2 -1
- package/build/module/sdk/scanner/WfpProvider/WfpSplitter/WfpSplitter.js +53 -10
- package/build/module/sdk/tree/File.js +2 -2
- package/build/module/sdk/tree/Filters/DependencyFilter.js +2 -2
- package/build/module/sdk/tree/Filters/ScanFilter.js +2 -2
- package/build/module/sdk/tree/Folder.d.ts +0 -1
- package/build/module/sdk/tree/Folder.js +2 -5
- package/build/module/sdk/tree/Node.d.ts +0 -1
- package/build/module/sdk/tree/Node.js +1 -4
- package/build/module/sdk/tree/Tree.js +1 -2
- package/build/module/tsconfig.module.tsbuildinfo +63 -223
- package/package-lock.json +2 -2
- package/package.json +2 -9
- package/src/cli/bin/cli-bin.ts +2 -2
- package/src/cli/commands/scan.ts +0 -21
- package/src/index.ts +2 -14
- package/src/sdk/filters/filtering.ts +0 -1
- package/src/sdk/scanner/WfpProvider/WfpCalculator/WfpCalculator.ts +3 -1
- package/src/sdk/scanner/WfpProvider/WfpProvider.ts +15 -1
- package/src/sdk/scanner/WfpProvider/WfpSplitter/WfpSplitter.ts +70 -10
- package/src/sdk/tree/File.ts +1 -1
- package/src/sdk/tree/Filters/DependencyFilter.ts +1 -1
- package/src/sdk/tree/Filters/ScanFilter.ts +1 -1
- package/src/sdk/tree/Folder.ts +1 -4
- package/src/sdk/tree/Node.ts +0 -4
- package/src/sdk/tree/Tree.ts +0 -1
- package/tests/scanoss.sh +61 -0
- package/tests/sdk/Scanner/WfpProvider/WfpSplitter/WfpSplitter.spec.ts +37 -0
- package/tests/sdk/Scanner/WfpProvider/WfpSplitter/samples/wfp.wfp +68 -0
- package/tests/sdk/Scanner/WfpProvider/WfpSplitter/samples/wfp.wfp~ +68 -0
- package/yarn.lock +4736 -5067
- package/src/sdk/Decompress/DecompressionManager.ts +0 -80
- package/src/sdk/Decompress/Decompressor/DecompressTgz.ts +0 -20
- package/src/sdk/Decompress/Decompressor/DecompressZips.ts +0 -21
- package/src/sdk/Decompress/Decompressor/Decompressor.ts +0 -20
- package/src/sdk/tree/Filters/DecompressionFilter.ts +0 -22
- package/tests/sdk/DataLayer/DataProviderManager.spec.ts +0 -19
|
@@ -6,6 +6,7 @@ exports.WfpSplitter = void 0;
|
|
|
6
6
|
const WfpProvider_1 = require("../WfpProvider");
|
|
7
7
|
const fs_1 = __importDefault(require("fs"));
|
|
8
8
|
const ScannerCfg_1 = require("../../ScannerCfg");
|
|
9
|
+
//Regex find paths from wfp string
|
|
9
10
|
class WfpSplitter extends WfpProvider_1.WfpProvider {
|
|
10
11
|
constructor(scannerCfg = new ScannerCfg_1.ScannerCfg()) {
|
|
11
12
|
super();
|
|
@@ -19,11 +20,13 @@ class WfpSplitter extends WfpProvider_1.WfpProvider {
|
|
|
19
20
|
this.fingerprints = [];
|
|
20
21
|
this.continue = true;
|
|
21
22
|
this.fingerprintIndex = 0;
|
|
23
|
+
this.ignoreFiles = new Set(params.fileList);
|
|
22
24
|
const wfpPath = params.wfpPath;
|
|
23
25
|
if (!wfpPath)
|
|
24
26
|
this.sendError('WFP path is not defined');
|
|
25
27
|
this.wfpStream = fs_1.default.createReadStream(wfpPath, { encoding: 'utf8' });
|
|
26
28
|
this.setStreamListeners();
|
|
29
|
+
return this.finishPromise;
|
|
27
30
|
}
|
|
28
31
|
stop() {
|
|
29
32
|
this.continue = false;
|
|
@@ -39,6 +42,7 @@ class WfpSplitter extends WfpProvider_1.WfpProvider {
|
|
|
39
42
|
this.streamBufferFlush();
|
|
40
43
|
}
|
|
41
44
|
sendFingerprints() {
|
|
45
|
+
//The timer allows the main thread not to be blocked while sending wfps
|
|
42
46
|
if (this.timer === undefined) {
|
|
43
47
|
this.timer = setInterval(() => {
|
|
44
48
|
if (this.fingerprintIndex < this.fingerprints.length && this.continue) {
|
|
@@ -60,16 +64,56 @@ class WfpSplitter extends WfpProvider_1.WfpProvider {
|
|
|
60
64
|
}
|
|
61
65
|
}
|
|
62
66
|
streamBufferFlush() {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
67
|
+
var _a;
|
|
68
|
+
let ignoreFirstChunkOfFingerprint = false;
|
|
69
|
+
//Use a loop to make sure we read all currently available data
|
|
70
|
+
while (this.continue && null !== (this.chunkDataRead = this.wfpStream.read(1 * 1024 * 1024))) { // Read chunks of 1MB 1*1024*1024
|
|
71
|
+
// Removes fingerprints that are loose because the file=...... was removed in previous iteration
|
|
72
|
+
if (ignoreFirstChunkOfFingerprint) { //TODO: Test this scenario
|
|
73
|
+
//If there is no file= delete everything then
|
|
74
|
+
if (this.chunkDataRead.indexOf("file=") >= 0) {
|
|
75
|
+
this.chunkDataRead = this.chunkDataRead.substring(this.chunkDataRead.indexOf('file='));
|
|
76
|
+
ignoreFirstChunkOfFingerprint = false;
|
|
77
|
+
}
|
|
78
|
+
else
|
|
79
|
+
this.chunkDataRead = "";
|
|
80
|
+
}
|
|
81
|
+
/**** This part removes all the wfp that includes the paths inside this.ignoreFiles ****/
|
|
82
|
+
const rWfpPath = new RegExp(/^file=\w+,\d+,(?<path>.+)$/gm);
|
|
83
|
+
//Search for paths in the wfp and compares with the ignorefiles set
|
|
84
|
+
//When there is a match the matched fingerprint is deleted on the fly
|
|
85
|
+
let result;
|
|
86
|
+
while ((result = rWfpPath.exec(this.chunkDataRead)) !== null) {
|
|
87
|
+
if (this.ignoreFiles.has((_a = result === null || result === void 0 ? void 0 : result.groups) === null || _a === void 0 ? void 0 : _a.path)) {
|
|
88
|
+
const indexDeleteFrom = result.index;
|
|
89
|
+
//TODO: Verify this condition
|
|
90
|
+
//If there is no next file= in the string, remove until end.
|
|
91
|
+
let indexDeleteTo = this.chunkDataRead.indexOf('file=', indexDeleteFrom + 1);
|
|
92
|
+
if (indexDeleteTo < 0) {
|
|
93
|
+
indexDeleteTo = this.chunkDataRead.length;
|
|
94
|
+
//After the deletion of a wfp there are no other file=, so then set ignoreFirstChunkOfFingerprint to true.
|
|
95
|
+
//In the next iteration, the next chunk of data will be fingerprints without a file=. So, this first part will be discarded.
|
|
96
|
+
ignoreFirstChunkOfFingerprint = true;
|
|
97
|
+
}
|
|
98
|
+
const first = this.chunkDataRead.substring(0, indexDeleteFrom);
|
|
99
|
+
const second = this.chunkDataRead.substring(indexDeleteTo, this.chunkDataRead.length);
|
|
100
|
+
this.chunkDataRead = first + second;
|
|
101
|
+
rWfpPath.lastIndex = 0; //Make sure we reset the state of the regex.
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**** This part removes all the wfp that includes the paths inside this.ignoreFiles ****/
|
|
105
|
+
/**** This part process a chunk of wfp and send the packages to the subscriber ****/
|
|
106
|
+
if (this.chunkDataRead.length) {
|
|
107
|
+
// Extract the first portion of the chunk until the first file=
|
|
108
|
+
// Then append the chunk to the last fingerprint.
|
|
109
|
+
if (!this.chunkDataRead.startsWith('file=')) {
|
|
110
|
+
const chunkOfData = this.chunkDataRead.substring(0, this.chunkDataRead.indexOf('file='));
|
|
111
|
+
this.fingerprints[this.fingerprints.length - 1] += chunkOfData;
|
|
112
|
+
}
|
|
113
|
+
this.fingerprints = [...this.fingerprints, ...this.splitFingerprints(this.chunkDataRead)];
|
|
114
|
+
this.sendFingerprints();
|
|
70
115
|
}
|
|
71
|
-
|
|
72
|
-
this.sendFingerprints();
|
|
116
|
+
/**** This part process a chunk of wfp and send the packages to the subscriber ****/
|
|
73
117
|
}
|
|
74
118
|
}
|
|
75
119
|
setStreamListeners() {
|
|
@@ -90,4 +134,4 @@ class WfpSplitter extends WfpProvider_1.WfpProvider {
|
|
|
90
134
|
}
|
|
91
135
|
}
|
|
92
136
|
exports.WfpSplitter = WfpSplitter;
|
|
93
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
137
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV2ZwU3BsaXR0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvc2RrL3NjYW5uZXIvV2ZwUHJvdmlkZXIvV2ZwU3BsaXR0ZXIvV2ZwU3BsaXR0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxnREFBZ0U7QUFDaEUsNENBQW9CO0FBQ3BCLGlEQUE4QztBQUc5QyxrQ0FBa0M7QUFFbEMsTUFBYSxXQUFZLFNBQVEseUJBQVc7SUFnQjFDLFlBQVksVUFBVSxHQUFHLElBQUksdUJBQVUsRUFBRTtRQUN2QyxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0lBQy9CLENBQUM7SUFFTSxLQUFLLENBQUMsTUFBeUI7UUFFcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO1FBRXRELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNaLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFNUMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUUvQixJQUFJLENBQUMsT0FBTztZQUFFLElBQUksQ0FBQyxTQUFTLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUV4RCxJQUFJLENBQUMsU0FBUyxHQUFHLFlBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUNwRSxJQUFJ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
|
|
@@ -15,10 +15,10 @@ class File extends Node_2.default {
|
|
|
15
15
|
return null;
|
|
16
16
|
}
|
|
17
17
|
getFiles(f) {
|
|
18
|
-
if (
|
|
18
|
+
if (f && f.evaluate(this))
|
|
19
19
|
return [];
|
|
20
20
|
return [this.getPath()];
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
23
|
exports.default = File;
|
|
24
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zZGsvdHJlZS9GaWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxpQ0FBa0M7QUFDbEMsa0RBQTBCO0FBSTFCLE1BQXFCLElBQUssU0FBUSxjQUFJO0lBQ3BDLFlBQVksSUFBWSxFQUFFLElBQVk7UUFDcEMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNsQixJQUFJLENBQUMsSUFBSSxHQUFHLGVBQVEsQ0FBQyxJQUFJLENBQUM7SUFDNUIsQ0FBQztJQUVNLE9BQU8sQ0FBQyxJQUFZO1FBQ3pCLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFBRSxPQUFPLElBQUksQ0FBQztRQUN6QyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTSxRQUFRLENBQUMsQ0FBUztRQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ3JDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUMxQixDQUFDO0NBRUY7QUFoQkQsdUJBZ0JDIn0=
|
|
@@ -10,8 +10,8 @@ class DependencyFilter extends Filter_1.Filter {
|
|
|
10
10
|
this.filter.load(DefaultFilterForDependencies_1.defaultFilterForDependencies);
|
|
11
11
|
}
|
|
12
12
|
evaluate(node) {
|
|
13
|
-
return this.filter.include(node.getPath());
|
|
13
|
+
return !this.filter.include(node.getPath());
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
16
|
exports.DependencyFilter = DependencyFilter;
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVwZW5kZW5jeUZpbHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9zZGsvdHJlZS9GaWx0ZXJzL0RlcGVuZGVuY3lGaWx0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxxQ0FBa0M7QUFFbEMsdURBQXFEO0FBQ3JELDZGQUVvRDtBQUVwRCxNQUFhLGdCQUFpQixTQUFRLGVBQU07SUFJMUMsWUFBbUIsVUFBa0I7UUFDbkMsS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksc0JBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQywyREFBMEMsQ0FBQyxDQUFBO0lBQzlELENBQUM7SUFFTSxRQUFRLENBQUMsSUFBVTtRQUN4QixPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDOUMsQ0FBQztDQUVGO0FBZEQsNENBY0MifQ==
|
|
@@ -10,8 +10,8 @@ class ScanFilter extends Filter_1.Filter {
|
|
|
10
10
|
this.filter.load(DefaultFilterForScanning_1.defaultFilterForScanning);
|
|
11
11
|
}
|
|
12
12
|
evaluate(node) {
|
|
13
|
-
return this.filter.include(node.getPath());
|
|
13
|
+
return !this.filter.include(node.getPath());
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
16
|
exports.ScanFilter = ScanFilter;
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2NhbkZpbHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9zZGsvdHJlZS9GaWx0ZXJzL1NjYW5GaWx0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxxQ0FBa0M7QUFFbEMsdURBQXFEO0FBQ3JELHFGQUVnRDtBQUVoRCxNQUFhLFVBQVcsU0FBUSxlQUFNO0lBSXBDLFlBQW1CLFVBQWtCO1FBQ25DLEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLHNCQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsbURBQXNDLENBQUMsQ0FBQTtJQUMxRCxDQUFDO0lBRU0sUUFBUSxDQUFDLElBQVU7UUFDeEIsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzlDLENBQUM7Q0FFRjtBQWRELGdDQWNDIn0=
|
|
@@ -42,7 +42,7 @@ class Folder extends Node_2.default {
|
|
|
42
42
|
return true;
|
|
43
43
|
}
|
|
44
44
|
getFiles(f) {
|
|
45
|
-
if (
|
|
45
|
+
if (f && f.evaluate(this))
|
|
46
46
|
return [];
|
|
47
47
|
const files = [];
|
|
48
48
|
this.children.forEach((child) => {
|
|
@@ -50,9 +50,6 @@ class Folder extends Node_2.default {
|
|
|
50
50
|
});
|
|
51
51
|
return files;
|
|
52
52
|
}
|
|
53
|
-
removeChildren() {
|
|
54
|
-
this.children = [];
|
|
55
|
-
}
|
|
56
53
|
}
|
|
57
54
|
exports.default = Folder;
|
|
58
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRm9sZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3Nkay90cmVlL0ZvbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsaUNBQWtDO0FBQ2xDLGtEQUEwQjtBQUcxQixNQUFxQixNQUFPLFNBQVEsY0FBSTtJQUd0QyxZQUFZLElBQVksRUFBRSxLQUFhO1FBQ3JDLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLElBQUksR0FBRyxlQUFRLENBQUMsTUFBTSxDQUFDO1FBQzVCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFTSxRQUFRLENBQUMsSUFBVTtRQUN4QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRU0sV0FBVztRQUNoQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVNLE9BQU8sQ0FBQyxJQUFZO1FBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3pDLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFBRSxPQUFPLElBQUksQ0FBQztRQUN6QyxLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNqQyxJQUFJLElBQUksS0FBSyxJQUFJO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1NBQ2hDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsb0VBQW9FO0lBQzVELFdBQVcsQ0FBQyxJQUFZO1FBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ2pELGtDQUFrQztRQUNsQyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNqRCxJQUFJLGNBQWMsQ0FBQyxDQUFDLENBQUMsS0FBSyxZQUFZLENBQUMsQ0FBQyxDQUFDO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1NBQ3pEO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU0sUUFBUSxDQUFDLENBQVU7UUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFBRSxPQUFPLEVBQUUsQ0FBQTtRQUVwQyxNQUFNLEtBQUssR0FBa0IsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDOUIsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sS0FBSyxDQUFDO0lBRWYsQ0FBQztDQUNGO0FBakRELHlCQWlEQyJ9
|
|
@@ -11,9 +11,6 @@ class Node {
|
|
|
11
11
|
getPath() {
|
|
12
12
|
return this.path;
|
|
13
13
|
}
|
|
14
|
-
getType() {
|
|
15
|
-
return this.type;
|
|
16
|
-
}
|
|
17
14
|
}
|
|
18
15
|
exports.default = Node;
|
|
19
16
|
var NodeType;
|
|
@@ -22,4 +19,4 @@ var NodeType;
|
|
|
22
19
|
NodeType["FILE"] = "FILE";
|
|
23
20
|
})(NodeType = exports.NodeType || (exports.NodeType = {}));
|
|
24
21
|
;
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zZGsvdHJlZS9Ob2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBR0EsTUFBOEIsSUFBSTtJQVNoQyxZQUFZLElBQVksRUFBRSxLQUFhO1FBQ3JDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFNTSxPQUFPO1FBQ1osT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFTSxPQUFPO1FBQ1osT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ25CLENBQUM7Q0FFRjtBQTFCRCx1QkEwQkM7QUFFRCxJQUFZLFFBR1g7QUFIRCxXQUFZLFFBQVE7SUFDbEIsNkJBQWlCLENBQUE7SUFDakIseUJBQWEsQ0FBQTtBQUNmLENBQUMsRUFIVyxRQUFRLEdBQVIsZ0JBQVEsS0FBUixnQkFBUSxRQUduQjtBQUFBLENBQUMifQ==
|
|
@@ -16,7 +16,6 @@ class Tree {
|
|
|
16
16
|
this.rootFolder = new Folder_1.default('/', this.rootName);
|
|
17
17
|
}
|
|
18
18
|
build() {
|
|
19
|
-
this.rootFolder.removeChildren();
|
|
20
19
|
this.buildRec(this.rootPath, this.rootFolder);
|
|
21
20
|
return this.rootFolder;
|
|
22
21
|
}
|
|
@@ -67,4 +66,4 @@ class Tree {
|
|
|
67
66
|
}
|
|
68
67
|
}
|
|
69
68
|
exports.Tree = Tree;
|
|
70
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHJlZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zZGsvdHJlZS9UcmVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNENBQW9CO0FBQ3BCLGdEQUEyQjtBQUczQixpQ0FBa0M7QUFFbEMsa0RBQTBCO0FBQzFCLHNEQUE4QjtBQUk5QixNQUFhLElBQUk7SUFTZixZQUFZLElBQVk7UUFDdEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxjQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxnQkFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVNLEtBQUs7UUFDVixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzlDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBRU8sUUFBUSxDQUFDLElBQVksRUFBRSxJQUFZO1FBQ3pDLE1BQU0sVUFBVSxHQUFHLFlBQUU7YUFDbEIsV0FBVyxDQUFDLElBQUksRUFBRSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLHNDQUFzQzthQUNqRixJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDO2FBQzVCLE1BQU0sQ0FBQyxDQUFDLE1BQVcsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztRQUVyRCxLQUFLLE1BQU0sUUFBUSxJQUFJLFVBQVUsRUFBRTtZQUNqQyxNQUFNLFFBQVEsR0FBRyxHQUFHLElBQUksSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDNUMsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELElBQUksUUFBUSxDQUFDLFdBQVcsRUFBRSxFQUFFO2dCQUMxQixNQUFNLENBQUMsR0FBVyxJQUFJLGdCQUFNLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzdELElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDeEI7O2dCQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxjQUFJLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQ3pEO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsOEVBQThFO0lBQ3RFLGlCQUFpQixDQUFDLENBQU0sRUFBRSxDQUFNO1FBQ3RDLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRTtZQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRTtZQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDbkQsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRU0sUUFBUSxDQUFDLElBQVM7UUFDdkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBVyxDQUFDO0lBQ3JELENBQUM7SUFFTyxXQUFXLENBQUMsSUFBUztRQUMzQixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssZUFBUSxDQUFDLElBQUksRUFBRTtZQUMvQixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDM0Q7UUFDRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzVFLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGdCQUFNLENBQUMsU0FBUyxDQUFDLGtDQUFPLElBQUksS0FBRSxRQUFRLElBQUcsQ0FBQztJQUMvRSxDQUFDO0lBRU0sYUFBYTtRQUNsQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUVNLFdBQVc7UUFDaEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFTSxXQUFXLENBQUMsQ0FBVTtRQUMzQixPQUFRLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7Q0FDRjtBQXJFRCxvQkFxRUMifQ==
|