scanoss 0.2.3

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.
Files changed (204) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/LICENSE +23 -0
  3. package/README.md +98 -0
  4. package/build/main/bin/cli-bin.d.ts +2 -0
  5. package/build/main/bin/cli-bin.js +58 -0
  6. package/build/main/commands/dep.d.ts +1 -0
  7. package/build/main/commands/dep.js +38 -0
  8. package/build/main/commands/fingerprint.d.ts +1 -0
  9. package/build/main/commands/fingerprint.js +49 -0
  10. package/build/main/commands/helpers.d.ts +1 -0
  11. package/build/main/commands/helpers.js +22 -0
  12. package/build/main/commands/scan.d.ts +1 -0
  13. package/build/main/commands/scan.js +91 -0
  14. package/build/main/index.d.ts +7 -0
  15. package/build/main/index.js +20 -0
  16. package/build/main/lib/dependencies/DependencyScanner.d.ts +11 -0
  17. package/build/main/lib/dependencies/DependencyScanner.js +94 -0
  18. package/build/main/lib/dependencies/DependencyScannerCfg.d.ts +4 -0
  19. package/build/main/lib/dependencies/DependencyScannerCfg.js +11 -0
  20. package/build/main/lib/dependencies/DependencyTypes.d.ts +21 -0
  21. package/build/main/lib/dependencies/DependencyTypes.js +3 -0
  22. package/build/main/lib/dependencies/LocalDependency/DependencyTypes.d.ts +16 -0
  23. package/build/main/lib/dependencies/LocalDependency/DependencyTypes.js +3 -0
  24. package/build/main/lib/dependencies/LocalDependency/LocalDependency.d.ts +6 -0
  25. package/build/main/lib/dependencies/LocalDependency/LocalDependency.js +51 -0
  26. package/build/main/lib/dependencies/LocalDependency/parsers/golangParser.d.ts +2 -0
  27. package/build/main/lib/dependencies/LocalDependency/parsers/golangParser.js +63 -0
  28. package/build/main/lib/dependencies/LocalDependency/parsers/mavenParser.d.ts +2 -0
  29. package/build/main/lib/dependencies/LocalDependency/parsers/mavenParser.js +173 -0
  30. package/build/main/lib/dependencies/LocalDependency/parsers/npmParser.d.ts +3 -0
  31. package/build/main/lib/dependencies/LocalDependency/parsers/npmParser.js +50 -0
  32. package/build/main/lib/dependencies/LocalDependency/parsers/pyParser.d.ts +2 -0
  33. package/build/main/lib/dependencies/LocalDependency/parsers/pyParser.js +65 -0
  34. package/build/main/lib/dependencies/LocalDependency/parsers/rubyParser.d.ts +3 -0
  35. package/build/main/lib/dependencies/LocalDependency/parsers/rubyParser.js +133 -0
  36. package/build/main/lib/dependencies/LocalDependency/parsers/utils.d.ts +2 -0
  37. package/build/main/lib/dependencies/LocalDependency/parsers/utils.js +20 -0
  38. package/build/main/lib/filters/defaultFilter.d.ts +16 -0
  39. package/build/main/lib/filters/defaultFilter.js +195 -0
  40. package/build/main/lib/filters/filtering.d.ts +32 -0
  41. package/build/main/lib/filters/filtering.js +229 -0
  42. package/build/main/lib/grpc/GrpcDependencyService.d.ts +11 -0
  43. package/build/main/lib/grpc/GrpcDependencyService.js +87 -0
  44. package/build/main/lib/grpc/scanoss/api/common/v2/scanoss-common_grpc_pb.d.ts +0 -0
  45. package/build/main/lib/grpc/scanoss/api/common/v2/scanoss-common_grpc_pb.js +2 -0
  46. package/build/main/lib/grpc/scanoss/api/common/v2/scanoss-common_pb.d.ts +1 -0
  47. package/build/main/lib/grpc/scanoss/api/common/v2/scanoss-common_pb.js +404 -0
  48. package/build/main/lib/grpc/scanoss/api/components/v2/scanoss-components_grpc_pb.d.ts +62 -0
  49. package/build/main/lib/grpc/scanoss/api/components/v2/scanoss-components_grpc_pb.js +128 -0
  50. package/build/main/lib/grpc/scanoss/api/components/v2/scanoss-components_pb.d.ts +1 -0
  51. package/build/main/lib/grpc/scanoss/api/components/v2/scanoss-components_pb.js +1403 -0
  52. package/build/main/lib/grpc/scanoss/api/dependencies/v2/scanoss-dependencies_grpc_pb.d.ts +42 -0
  53. package/build/main/lib/grpc/scanoss/api/dependencies/v2/scanoss-dependencies_grpc_pb.js +98 -0
  54. package/build/main/lib/grpc/scanoss/api/dependencies/v2/scanoss-dependencies_pb.d.ts +1 -0
  55. package/build/main/lib/grpc/scanoss/api/dependencies/v2/scanoss-dependencies_pb.js +1197 -0
  56. package/build/main/lib/grpc/scanoss/api/scanning/v2/scanoss-scanning_grpc_pb.d.ts +21 -0
  57. package/build/main/lib/grpc/scanoss/api/scanning/v2/scanoss-scanning_grpc_pb.js +66 -0
  58. package/build/main/lib/grpc/scanoss/api/scanning/v2/scanoss-scanning_pb.d.ts +1 -0
  59. package/build/main/lib/grpc/scanoss/api/scanning/v2/scanoss-scanning_pb.js +14 -0
  60. package/build/main/lib/scanner/Dispatcher/DispatchableItem.d.ts +19 -0
  61. package/build/main/lib/scanner/Dispatcher/DispatchableItem.js +44 -0
  62. package/build/main/lib/scanner/Dispatcher/Dispatcher.d.ts +19 -0
  63. package/build/main/lib/scanner/Dispatcher/Dispatcher.js +122 -0
  64. package/build/main/lib/scanner/Dispatcher/DispatcherResponse.d.ts +12 -0
  65. package/build/main/lib/scanner/Dispatcher/DispatcherResponse.js +34 -0
  66. package/build/main/lib/scanner/Dispatcher/GlobalControllerAborter.d.ts +10 -0
  67. package/build/main/lib/scanner/Dispatcher/GlobalControllerAborter.js +33 -0
  68. package/build/main/lib/scanner/Scannable/ScannableItem.d.ts +15 -0
  69. package/build/main/lib/scanner/Scannable/ScannableItem.js +28 -0
  70. package/build/main/lib/scanner/Scanner.d.ts +46 -0
  71. package/build/main/lib/scanner/Scanner.js +280 -0
  72. package/build/main/lib/scanner/ScannerCfg.d.ts +13 -0
  73. package/build/main/lib/scanner/ScannerCfg.js +27 -0
  74. package/build/main/lib/scanner/ScannerQueue.d.ts +3 -0
  75. package/build/main/lib/scanner/ScannerQueue.js +8 -0
  76. package/build/main/lib/scanner/ScannerTypes.d.ts +39 -0
  77. package/build/main/lib/scanner/ScannerTypes.js +40 -0
  78. package/build/main/lib/scanner/WfpProvider/FingerprintPackage.d.ts +9 -0
  79. package/build/main/lib/scanner/WfpProvider/FingerprintPackage.js +32 -0
  80. package/build/main/lib/scanner/WfpProvider/FingerprintPacket.d.ts +12 -0
  81. package/build/main/lib/scanner/WfpProvider/FingerprintPacket.js +38 -0
  82. package/build/main/lib/scanner/WfpProvider/WfpCalculator/WfpCalculator.d.ts +20 -0
  83. package/build/main/lib/scanner/WfpProvider/WfpCalculator/WfpCalculator.js +334 -0
  84. package/build/main/lib/scanner/WfpProvider/WfpProvider.d.ts +32 -0
  85. package/build/main/lib/scanner/WfpProvider/WfpProvider.js +63 -0
  86. package/build/main/lib/scanner/WfpProvider/WfpProviderFactory.d.ts +6 -0
  87. package/build/main/lib/scanner/WfpProvider/WfpProviderFactory.js +16 -0
  88. package/build/main/lib/scanner/WfpProvider/WfpSplitter/WfpSplitter.d.ts +20 -0
  89. package/build/main/lib/scanner/WfpProvider/WfpSplitter/WfpSplitter.js +94 -0
  90. package/build/main/lib/scanner/Winnower/Winnower.d.ts +36 -0
  91. package/build/main/lib/scanner/Winnower/Winnower.js +407 -0
  92. package/build/main/lib/scanner/Winnower/WinnowerExtractor.d.ts +10 -0
  93. package/build/main/lib/scanner/Winnower/WinnowerExtractor.js +33 -0
  94. package/build/main/lib/scanner/Winnower/WinnowerResponse.d.ts +11 -0
  95. package/build/main/lib/scanner/Winnower/WinnowerResponse.js +32 -0
  96. package/build/main/lib/tree/File.d.ts +6 -0
  97. package/build/main/lib/tree/File.js +23 -0
  98. package/build/main/lib/tree/Folder.d.ts +10 -0
  99. package/build/main/lib/tree/Folder.js +54 -0
  100. package/build/main/lib/tree/Node.d.ts +15 -0
  101. package/build/main/lib/tree/Node.js +23 -0
  102. package/build/main/lib/tree/Tree.d.ts +19 -0
  103. package/build/main/lib/tree/Tree.js +76 -0
  104. package/build/module/bin/cli-bin.d.ts +2 -0
  105. package/build/module/bin/cli-bin.js +56 -0
  106. package/build/module/commands/dep.d.ts +1 -0
  107. package/build/module/commands/dep.js +31 -0
  108. package/build/module/commands/fingerprint.d.ts +1 -0
  109. package/build/module/commands/fingerprint.js +42 -0
  110. package/build/module/commands/helpers.d.ts +1 -0
  111. package/build/module/commands/helpers.js +15 -0
  112. package/build/module/commands/scan.d.ts +1 -0
  113. package/build/module/commands/scan.js +84 -0
  114. package/build/module/index.d.ts +7 -0
  115. package/build/module/index.js +8 -0
  116. package/build/module/lib/dependencies/DependencyScanner.d.ts +11 -0
  117. package/build/module/lib/dependencies/DependencyScanner.js +92 -0
  118. package/build/module/lib/dependencies/DependencyScannerCfg.d.ts +4 -0
  119. package/build/module/lib/dependencies/DependencyScannerCfg.js +5 -0
  120. package/build/module/lib/dependencies/DependencyTypes.d.ts +21 -0
  121. package/build/module/lib/dependencies/DependencyTypes.js +2 -0
  122. package/build/module/lib/dependencies/LocalDependency/DependencyTypes.d.ts +16 -0
  123. package/build/module/lib/dependencies/LocalDependency/DependencyTypes.js +2 -0
  124. package/build/module/lib/dependencies/LocalDependency/LocalDependency.d.ts +6 -0
  125. package/build/module/lib/dependencies/LocalDependency/LocalDependency.js +45 -0
  126. package/build/module/lib/dependencies/LocalDependency/parsers/golangParser.d.ts +2 -0
  127. package/build/module/lib/dependencies/LocalDependency/parsers/golangParser.js +55 -0
  128. package/build/module/lib/dependencies/LocalDependency/parsers/mavenParser.d.ts +2 -0
  129. package/build/module/lib/dependencies/LocalDependency/parsers/mavenParser.js +166 -0
  130. package/build/module/lib/dependencies/LocalDependency/parsers/npmParser.d.ts +3 -0
  131. package/build/module/lib/dependencies/LocalDependency/parsers/npmParser.js +42 -0
  132. package/build/module/lib/dependencies/LocalDependency/parsers/pyParser.d.ts +2 -0
  133. package/build/module/lib/dependencies/LocalDependency/parsers/pyParser.js +57 -0
  134. package/build/module/lib/dependencies/LocalDependency/parsers/rubyParser.d.ts +3 -0
  135. package/build/module/lib/dependencies/LocalDependency/parsers/rubyParser.js +130 -0
  136. package/build/module/lib/dependencies/LocalDependency/parsers/utils.d.ts +2 -0
  137. package/build/module/lib/dependencies/LocalDependency/parsers/utils.js +15 -0
  138. package/build/module/lib/filters/defaultFilter.d.ts +16 -0
  139. package/build/module/lib/filters/defaultFilter.js +192 -0
  140. package/build/module/lib/filters/filtering.d.ts +32 -0
  141. package/build/module/lib/filters/filtering.js +210 -0
  142. package/build/module/lib/grpc/GrpcDependencyService.d.ts +11 -0
  143. package/build/module/lib/grpc/GrpcDependencyService.js +66 -0
  144. package/build/module/lib/grpc/scanoss/api/common/v2/scanoss-common_grpc_pb.d.ts +0 -0
  145. package/build/module/lib/grpc/scanoss/api/common/v2/scanoss-common_grpc_pb.js +2 -0
  146. package/build/module/lib/grpc/scanoss/api/common/v2/scanoss-common_pb.d.ts +1 -0
  147. package/build/module/lib/grpc/scanoss/api/common/v2/scanoss-common_pb.js +404 -0
  148. package/build/module/lib/grpc/scanoss/api/components/v2/scanoss-components_grpc_pb.d.ts +62 -0
  149. package/build/module/lib/grpc/scanoss/api/components/v2/scanoss-components_grpc_pb.js +128 -0
  150. package/build/module/lib/grpc/scanoss/api/components/v2/scanoss-components_pb.d.ts +1 -0
  151. package/build/module/lib/grpc/scanoss/api/components/v2/scanoss-components_pb.js +1403 -0
  152. package/build/module/lib/grpc/scanoss/api/dependencies/v2/scanoss-dependencies_grpc_pb.d.ts +42 -0
  153. package/build/module/lib/grpc/scanoss/api/dependencies/v2/scanoss-dependencies_grpc_pb.js +98 -0
  154. package/build/module/lib/grpc/scanoss/api/dependencies/v2/scanoss-dependencies_pb.d.ts +1 -0
  155. package/build/module/lib/grpc/scanoss/api/dependencies/v2/scanoss-dependencies_pb.js +1197 -0
  156. package/build/module/lib/grpc/scanoss/api/scanning/v2/scanoss-scanning_grpc_pb.d.ts +21 -0
  157. package/build/module/lib/grpc/scanoss/api/scanning/v2/scanoss-scanning_grpc_pb.js +66 -0
  158. package/build/module/lib/grpc/scanoss/api/scanning/v2/scanoss-scanning_pb.d.ts +1 -0
  159. package/build/module/lib/grpc/scanoss/api/scanning/v2/scanoss-scanning_pb.js +14 -0
  160. package/build/module/lib/scanner/Dispatcher/DispatchableItem.d.ts +19 -0
  161. package/build/module/lib/scanner/Dispatcher/DispatchableItem.js +43 -0
  162. package/build/module/lib/scanner/Dispatcher/Dispatcher.d.ts +19 -0
  163. package/build/module/lib/scanner/Dispatcher/Dispatcher.js +121 -0
  164. package/build/module/lib/scanner/Dispatcher/DispatcherResponse.d.ts +12 -0
  165. package/build/module/lib/scanner/Dispatcher/DispatcherResponse.js +33 -0
  166. package/build/module/lib/scanner/Dispatcher/GlobalControllerAborter.d.ts +10 -0
  167. package/build/module/lib/scanner/Dispatcher/GlobalControllerAborter.js +28 -0
  168. package/build/module/lib/scanner/Scannable/ScannableItem.d.ts +15 -0
  169. package/build/module/lib/scanner/Scannable/ScannableItem.js +29 -0
  170. package/build/module/lib/scanner/Scanner.d.ts +46 -0
  171. package/build/module/lib/scanner/Scanner.js +288 -0
  172. package/build/module/lib/scanner/ScannerCfg.d.ts +13 -0
  173. package/build/module/lib/scanner/ScannerCfg.js +21 -0
  174. package/build/module/lib/scanner/ScannerQueue.d.ts +3 -0
  175. package/build/module/lib/scanner/ScannerQueue.js +4 -0
  176. package/build/module/lib/scanner/ScannerTypes.d.ts +39 -0
  177. package/build/module/lib/scanner/ScannerTypes.js +37 -0
  178. package/build/module/lib/scanner/WfpProvider/FingerprintPackage.d.ts +9 -0
  179. package/build/module/lib/scanner/WfpProvider/FingerprintPackage.js +30 -0
  180. package/build/module/lib/scanner/WfpProvider/FingerprintPacket.d.ts +12 -0
  181. package/build/module/lib/scanner/WfpProvider/FingerprintPacket.js +37 -0
  182. package/build/module/lib/scanner/WfpProvider/WfpCalculator/WfpCalculator.d.ts +20 -0
  183. package/build/module/lib/scanner/WfpProvider/WfpCalculator/WfpCalculator.js +330 -0
  184. package/build/module/lib/scanner/WfpProvider/WfpProvider.d.ts +32 -0
  185. package/build/module/lib/scanner/WfpProvider/WfpProvider.js +65 -0
  186. package/build/module/lib/scanner/WfpProvider/WfpProviderFactory.d.ts +6 -0
  187. package/build/module/lib/scanner/WfpProvider/WfpProviderFactory.js +12 -0
  188. package/build/module/lib/scanner/WfpProvider/WfpSplitter/WfpSplitter.d.ts +20 -0
  189. package/build/module/lib/scanner/WfpProvider/WfpSplitter/WfpSplitter.js +93 -0
  190. package/build/module/lib/scanner/Winnower/Winnower.d.ts +36 -0
  191. package/build/module/lib/scanner/Winnower/Winnower.js +411 -0
  192. package/build/module/lib/scanner/Winnower/WinnowerExtractor.d.ts +10 -0
  193. package/build/module/lib/scanner/Winnower/WinnowerExtractor.js +30 -0
  194. package/build/module/lib/scanner/Winnower/WinnowerResponse.d.ts +11 -0
  195. package/build/module/lib/scanner/Winnower/WinnowerResponse.js +31 -0
  196. package/build/module/lib/tree/File.d.ts +6 -0
  197. package/build/module/lib/tree/File.js +17 -0
  198. package/build/module/lib/tree/Folder.d.ts +10 -0
  199. package/build/module/lib/tree/Folder.js +49 -0
  200. package/build/module/lib/tree/Node.d.ts +15 -0
  201. package/build/module/lib/tree/Node.js +23 -0
  202. package/build/module/lib/tree/Tree.d.ts +19 -0
  203. package/build/module/lib/tree/Tree.js +73 -0
  204. package/package.json +121 -0
@@ -0,0 +1,407 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Winnower = void 0;
7
+ const events_1 = __importDefault(require("events"));
8
+ const fs_1 = __importDefault(require("fs"));
9
+ const worker_threads_1 = require("worker_threads");
10
+ const ScannableItem_1 = require("../Scannable/ScannableItem");
11
+ const ScannerCfg_1 = require("../ScannerCfg");
12
+ const ScannerTypes_1 = require("../ScannerTypes");
13
+ const WinnowerExtractor_1 = require("./WinnowerExtractor");
14
+ const WinnowerResponse_1 = require("./WinnowerResponse");
15
+ const stringWorker = `
16
+ const { parentPort } = require('worker_threads');
17
+
18
+ parentPort.on('message', async (scannableItem) => {
19
+
20
+ let fingerprint;
21
+ if ( scannableItem.winnowingMode === "FULL_WINNOWING") {
22
+ fingerprint = wfp_for_content(
23
+ scannableItem.content,
24
+ scannableItem.contentSource,
25
+ scannableItem.maxSizeWfp
26
+ );
27
+ } else {
28
+ fingerprint = wfp_only_md5(
29
+ scannableItem.content,
30
+ scannableItem.contentSource
31
+ );
32
+ }
33
+
34
+ scannableItem.fingerprint = fingerprint;
35
+
36
+ parentPort.postMessage(scannableItem);
37
+ });
38
+
39
+
40
+ const crypto = require('crypto');
41
+
42
+ const isWin = process.platform === 'win32';
43
+ const pathSeparator = isWin ? String.fromCharCode(92) : '/';
44
+
45
+ // Winnowing configuration. DO NOT CHANGE.
46
+ const GRAM = 30;
47
+ const WINDOW = 64;
48
+
49
+ // ASCII characters
50
+ const ASCII_0 = 48;
51
+ const ASCII_9 = 57;
52
+ const ASCII_A = 65;
53
+ const ASCII_Z = 90;
54
+ const ASCII_a = 97;
55
+ const ASCII_z = 122;
56
+ const ASCII_LF = 10;
57
+
58
+ function normalize(byte) {
59
+ if (byte < ASCII_0 || byte > ASCII_z) {
60
+ return 0;
61
+ }
62
+ if (byte <= ASCII_9 || byte >= ASCII_a) {
63
+ return byte;
64
+ }
65
+ if (byte >= ASCII_A && byte <= ASCII_Z) {
66
+ return byte + 32;
67
+ }
68
+ return 0;
69
+ }
70
+
71
+ function min_hex_array(array) {
72
+ let min = 'ffffffff';
73
+ for (let i = 0; i < array.length; i++) {
74
+ if (array[i] < min) {
75
+ min = array[i];
76
+ }
77
+ }
78
+ return min;
79
+ }
80
+
81
+ function wfp_for_content(content, contentSource, maxSize) {
82
+ let wfp = wfp_only_md5(content, contentSource);
83
+ wfp += calc_wfp(content, maxSize);
84
+ return wfp;
85
+ }
86
+
87
+ function wfp_only_md5(contents, contentSource) {
88
+ const file_md5 = crypto.createHash('md5').update(contents).digest('hex');
89
+ let wfp = 'file=' + String(file_md5) + ',' + String(contents.length) + ',' + String(contentSource)+ String.fromCharCode(10);
90
+ return wfp;
91
+ }
92
+
93
+ function calc_wfp(contents, maxSize) {
94
+ let gram = '';
95
+ const window = [];
96
+ let normalized = 0;
97
+ let line = 1;
98
+ let min_hash = 'ffffffff';
99
+ let last_hash = 'ffffffff';
100
+ let last_line = 0;
101
+ let output = '';
102
+ let gram_crc32 = 0;
103
+ let wfp = '';
104
+
105
+ for (let i = 0; i < contents.length; i++) {
106
+ if(wfp.length > maxSize)
107
+ return wfp;
108
+
109
+ const byte = contents[i];
110
+ if (byte == ASCII_LF) {
111
+ line += 1;
112
+ normalized = 0;
113
+ } else {
114
+ normalized = normalize(byte);
115
+ }
116
+ // Is this an useful byte?
117
+ if (normalized) {
118
+ gram += String.fromCharCode(normalized);
119
+
120
+ if (gram.length >= GRAM) {
121
+ gram_crc32 = crc32c_hex(gram);
122
+ window.push(gram_crc32);
123
+
124
+ if (window.length >= WINDOW) {
125
+ min_hash = min_hex_array(window);
126
+ if (min_hash !== last_hash) {
127
+ // Hashing the hash will result in a better balanced output data set
128
+ // as it will counter the winnowing effect which selects the "minimum"
129
+ // hash in each window
130
+ const min_hash_bytes_le = parseHexString(
131
+ toLittleEndianCRCHex(min_hash)
132
+ );
133
+ const crc_hex = crc32c_for_bytes_hex(min_hash_bytes_le);
134
+
135
+ if (last_line != line) {
136
+ if (output.length > 0) {
137
+ wfp += String(output) + String.fromCharCode(10);
138
+ }
139
+ output = String(line) + '=' + String(crc_hex);
140
+ } else {
141
+ output += ',' + String(crc_hex);
142
+ }
143
+ last_line = line;
144
+ last_hash = min_hash;
145
+ }
146
+ window.shift();
147
+ }
148
+ gram = gram.slice(1);
149
+ }
150
+ }
151
+ }
152
+ if (output.length > 0) {
153
+ wfp += String(output) + String.fromCharCode(10);
154
+ }
155
+
156
+ return wfp;
157
+ }
158
+
159
+ function parseHexString(str) {
160
+ const result = [];
161
+ while (str.length >= 2) {
162
+ result.push(parseInt(str.substring(0, 2), 16));
163
+ str = str.substring(2, str.length);
164
+ }
165
+
166
+ return result;
167
+ }
168
+
169
+ /**
170
+ *
171
+ * @param {string} hex
172
+ */
173
+ function toLittleEndianCRCHex(hex) {
174
+ return (
175
+ hex.charAt(6) +
176
+ hex.charAt(7) +
177
+ hex.charAt(4) +
178
+ hex.charAt(5) +
179
+ hex.charAt(2) +
180
+ hex.charAt(3) +
181
+ hex.charAt(0) +
182
+ hex.charAt(1)
183
+ );
184
+ }
185
+
186
+ let CRC_TABLE = [];
187
+
188
+ function makeCRCTable() {
189
+ let c;
190
+ const crcTable = [];
191
+ for (let n = 0; n < 256; n++) {
192
+ c = n;
193
+ for (let k = 0; k < 8; k++) {
194
+ c = c & 1 ? 0x82f63b78 ^ (c >>> 1) : c >>> 1;
195
+ }
196
+ crcTable[n] = c;
197
+ }
198
+ return crcTable;
199
+ }
200
+
201
+ function crc32c(str) {
202
+ if (CRC_TABLE.length == 0) {
203
+ CRC_TABLE = makeCRCTable();
204
+ }
205
+ let crc = 0 ^ -1;
206
+
207
+ for (let i = 0; i < str.length; i++) {
208
+ crc = (crc >>> 8) ^ CRC_TABLE[(crc ^ str.charCodeAt(i)) & 0xff];
209
+ }
210
+
211
+ return (crc ^ -1) >>> 0;
212
+ }
213
+
214
+ function crc32c_for_bytes(bytes) {
215
+ if (CRC_TABLE.length == 0) {
216
+ CRC_TABLE = makeCRCTable();
217
+ }
218
+ let crc = 0 ^ -1;
219
+
220
+ for (let i = 0; i < bytes.length; i++) {
221
+ crc = (crc >>> 8) ^ CRC_TABLE[(crc ^ bytes[i]) & 0xff];
222
+ }
223
+
224
+ return (crc ^ -1) >>> 0;
225
+ }
226
+
227
+ function crc32c_for_bytes_hex(bytes) {
228
+ return crc32c_for_bytes(bytes).toString(16).padStart(8, '0');
229
+ }
230
+
231
+ function crc32c_hex(str) {
232
+ return crc32c(str).toString(16).padStart(8, '0');
233
+ }
234
+
235
+ `;
236
+ class Winnower extends events_1.default {
237
+ constructor(scannerCfg = new ScannerCfg_1.ScannerCfg()) {
238
+ super();
239
+ this.scannerCfg = scannerCfg;
240
+ }
241
+ init() {
242
+ this.wfp = '';
243
+ this.folderRoot = '';
244
+ this.continue = true;
245
+ this.isRunning = false;
246
+ this.readingFromFile = false;
247
+ this.fileList = [];
248
+ this.fileListIndex = 0;
249
+ this.winnowingMode = ScannerTypes_1.WinnowingMode.FULL_WINNOWING;
250
+ }
251
+ prepareWorker() {
252
+ this.worker = new worker_threads_1.Worker(stringWorker, { eval: true });
253
+ this.worker.on('message', async (scannableItem) => {
254
+ await this.winnowerPacker(scannableItem.fingerprint);
255
+ await this.nextStepMachine();
256
+ });
257
+ }
258
+ recoveryIndex() {
259
+ // Files: contains all files winnowed but not packed yet
260
+ const files = new WinnowerResponse_1.WinnowerResponse(this.wfp, this.folderRoot).getFilesWinnowed();
261
+ if (files.length) {
262
+ const lastFileWinnowed = files[files.length - 1];
263
+ let i = 0;
264
+ while (i <= files.length && lastFileWinnowed !== this.fileList[this.fileListIndex - i]) {
265
+ i += 1;
266
+ }
267
+ // If file already winnowed cannot be found in fileList emit an error.
268
+ if (i > files.length) {
269
+ this.emit(ScannerTypes_1.ScannerEvents.ERROR, new Error('Cannot recovery index on winnower'));
270
+ return -1;
271
+ }
272
+ this.fileListIndex -= i;
273
+ if (this.fileList[this.fileListIndex] === lastFileWinnowed)
274
+ this.fileListIndex += 1;
275
+ }
276
+ return 0;
277
+ }
278
+ forceStopWorker() {
279
+ this.worker.removeAllListeners();
280
+ this.worker.terminate();
281
+ }
282
+ // returns true if the a winnowing packet was sended
283
+ winnowerPacker(winnowingResult) {
284
+ // When the fingerprint of one file is bigger than 64Kb, truncate to the last 64Kb line.
285
+ if (winnowingResult.length > this.scannerCfg.WFP_FILE_MAX_SIZE) {
286
+ let truncateStringOnIndex = this.scannerCfg.WFP_FILE_MAX_SIZE;
287
+ let keepRemovingCharacters = true;
288
+ while (keepRemovingCharacters) {
289
+ if (winnowingResult[truncateStringOnIndex] === '\n')
290
+ keepRemovingCharacters = false;
291
+ truncateStringOnIndex -= 1;
292
+ }
293
+ truncateStringOnIndex += 1;
294
+ // eslint-disable-next-line no-param-reassign
295
+ winnowingResult = winnowingResult.substring(0, truncateStringOnIndex);
296
+ // eslint-disable-next-line no-param-reassign
297
+ winnowingResult += '\n';
298
+ }
299
+ if (this.wfp.length + winnowingResult.length >= this.scannerCfg.WFP_FILE_MAX_SIZE) {
300
+ this.processPackedWfp(this.wfp);
301
+ this.wfp = '';
302
+ }
303
+ this.wfp += winnowingResult;
304
+ if (this.wfp !== winnowingResult)
305
+ return false;
306
+ return true;
307
+ }
308
+ processPackedWfp(content) {
309
+ const wnRsp = new WinnowerResponse_1.WinnowerResponse(content, this.folderRoot);
310
+ this.emit(ScannerTypes_1.ScannerEvents.WINNOWING_NEW_CONTENT, wnRsp);
311
+ }
312
+ async getNextScannableItem() {
313
+ if (this.fileListIndex >= this.fileList.length)
314
+ return null;
315
+ const path = this.fileList[this.fileListIndex];
316
+ const contentSource = path.replace(`${this.folderRoot}`, '');
317
+ const content = await fs_1.default.promises.readFile(path);
318
+ this.fileListIndex += 1;
319
+ const scannable = new ScannableItem_1.ScannableItem(content, contentSource, this.winnowingMode, this.scannerCfg.WFP_FILE_MAX_SIZE);
320
+ return scannable;
321
+ }
322
+ async nextStepMachine() {
323
+ if (!this.continue)
324
+ return;
325
+ const scannableItem = await this.getNextScannableItem();
326
+ if (scannableItem)
327
+ this.worker.postMessage(scannableItem);
328
+ else
329
+ this.finishWinnowing();
330
+ }
331
+ startWinnowingFromFile(filePath) {
332
+ this.emit(ScannerTypes_1.ScannerEvents.WINNOWER_LOG, '[ SCANNER ]: Starting Winnowing from file...');
333
+ this.readingFromFile = true;
334
+ this.isRunning = true;
335
+ this.winnowingExtractor = new WinnowerExtractor_1.WinnowerExtractor();
336
+ this.winnowingExtractor.loadFile(filePath);
337
+ this.extractionProcess(this.scannerCfg.DISPATCHER_QUEUE_SIZE_MAX_LIMIT);
338
+ }
339
+ async extractionProcess(n) {
340
+ let winBlock = '-';
341
+ while (winBlock !== '' && n >= 0) { // this.continue will change on method pause();
342
+ winBlock = this.winnowingExtractor.extractWinBlock(); // TODO Make async funcion
343
+ if (winBlock !== '') {
344
+ if (this.winnowerPacker(winBlock))
345
+ n -= 1;
346
+ }
347
+ }
348
+ // Last winnowing block
349
+ if (winBlock === '')
350
+ this.finishWinnowing();
351
+ }
352
+ async startWinnowing(scanInput) {
353
+ this.emit(ScannerTypes_1.ScannerEvents.WINNOWER_LOG, '[ SCANNER ]: Starting Winnowing...');
354
+ this.init();
355
+ this.prepareWorker();
356
+ if (scanInput.winnowingMode)
357
+ this.setWinnowingMode(scanInput.winnowingMode);
358
+ this.readingFromFile = false;
359
+ this.isRunning = true;
360
+ this.folderRoot = scanInput.folderRoot;
361
+ this.fileList = scanInput.fileList;
362
+ this.nextStepMachine();
363
+ }
364
+ finishWinnowing() {
365
+ if (this.wfp.length !== 0) {
366
+ this.processPackedWfp(this.wfp);
367
+ }
368
+ this.isRunning = false;
369
+ this.emit(ScannerTypes_1.ScannerEvents.WINNOWER_LOG, '[ SCANNER ]: Winnowing Finished...');
370
+ this.forceStopWorker();
371
+ }
372
+ pause() {
373
+ this.emit(ScannerTypes_1.ScannerEvents.WINNOWER_LOG, '[ SCANNER ]: Winnowing paused...');
374
+ this.continue = false;
375
+ if (!this.readingFromFile) {
376
+ this.forceStopWorker();
377
+ this.prepareWorker();
378
+ }
379
+ }
380
+ resume() {
381
+ this.emit(ScannerTypes_1.ScannerEvents.WINNOWER_LOG, '[ SCANNER ]: Winnowing resumed...');
382
+ this.continue = true;
383
+ if (!this.readingFromFile) {
384
+ this.recoveryIndex();
385
+ this.nextStepMachine();
386
+ }
387
+ else {
388
+ this.extractionProcess(this.scannerCfg.DISPATCHER_QUEUE_SIZE_MAX_LIMIT * 2);
389
+ }
390
+ }
391
+ stop() {
392
+ this.continue = false;
393
+ this.isRunning = false;
394
+ this.winnowingExtractor = null;
395
+ this.forceStopWorker();
396
+ this.prepareWorker();
397
+ this.init();
398
+ }
399
+ hasPendingFiles() {
400
+ return this.isRunning;
401
+ }
402
+ setWinnowingMode(mode) {
403
+ this.winnowingMode = mode;
404
+ }
405
+ }
406
+ exports.Winnower = Winnower;
407
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV2lubm93ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NjYW5uZXIvV2lubm93ZXIvV2lubm93ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsb0RBQWtDO0FBQ2xDLDRDQUFvQjtBQUNwQixtREFBd0M7QUFFeEMsOERBQTJEO0FBQzNELDhDQUEyQztBQUMzQyxrREFBNkU7QUFDN0UsMkRBQXdEO0FBRXhELHlEQUFzRDtBQUl0RCxNQUFNLFlBQVksR0FBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQTROcEIsQ0FBQztBQUVGLE1BQWEsUUFBUyxTQUFRLGdCQUFZO0lBdUJ4QyxZQUFZLFVBQVUsR0FBRyxJQUFJLHVCQUFVLEVBQUU7UUFDdkMsS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSTtRQUNGLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ2QsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDckIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFDN0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7UUFDdkIsSUFB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
@@ -0,0 +1,10 @@
1
+ export declare class WinnowerExtractor {
2
+ private winnowing;
3
+ private winnowingFilePath;
4
+ private blocksIndex;
5
+ private currentBlock;
6
+ constructor();
7
+ private init;
8
+ loadFile(path: string): void;
9
+ extractWinBlock(): string;
10
+ }
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.WinnowerExtractor = void 0;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ class WinnowerExtractor {
9
+ constructor() {
10
+ this.init();
11
+ }
12
+ init() {
13
+ this.winnowing = '';
14
+ this.currentBlock = 0;
15
+ }
16
+ loadFile(path) {
17
+ this.init();
18
+ this.winnowingFilePath = path;
19
+ this.winnowing = fs_1.default.readFileSync(path, 'utf-8');
20
+ const reg = /file=/g;
21
+ this.blocksIndex = [...((this.winnowing).matchAll(reg))].map(x => x.index);
22
+ }
23
+ ;
24
+ extractWinBlock() {
25
+ let res = '';
26
+ if (this.currentBlock < this.blocksIndex.length - 1)
27
+ res = this.winnowing.substring(this.blocksIndex[this.currentBlock], this.blocksIndex[this.currentBlock + 1]);
28
+ this.currentBlock += 1;
29
+ return res;
30
+ }
31
+ }
32
+ exports.WinnowerExtractor = WinnowerExtractor;
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV2lubm93ZXJFeHRyYWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NjYW5uZXIvV2lubm93ZXIvV2lubm93ZXJFeHRyYWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsNENBQW9CO0FBRXBCLE1BQWEsaUJBQWlCO0lBVTVCO1FBQ0UsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVPLElBQUk7UUFDVixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRU0sUUFBUSxDQUFDLElBQVk7UUFDMUIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1osSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztRQUM5QixJQUFJLENBQUMsU0FBUyxHQUFHLFlBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2hELE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQztRQUNyQixJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFBQSxDQUFDO0lBRUssZUFBZTtRQUNwQixJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDYixJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUMsQ0FBQztZQUMvQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0csSUFBSSxDQUFDLFlBQVksSUFBRSxDQUFDLENBQUM7UUFDckIsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0NBQ0Y7QUFsQ0QsOENBa0NDIn0=
@@ -0,0 +1,11 @@
1
+ export declare class WinnowerResponse {
2
+ private wfpContent;
3
+ private engineFlags;
4
+ private scanRoot;
5
+ constructor(wfpContent: any, scanRoot?: string);
6
+ isEqual(winnowerResponse: any): boolean;
7
+ getContent(): string;
8
+ setEngineFlags(engineFlags: number): void;
9
+ getEngineFlags(): number;
10
+ getFilesWinnowed(): any[] | "";
11
+ }
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WinnowerResponse = void 0;
4
+ class WinnowerResponse {
5
+ constructor(wfpContent, scanRoot = '') {
6
+ this.wfpContent = wfpContent;
7
+ this.scanRoot = scanRoot;
8
+ }
9
+ isEqual(winnowerResponse) {
10
+ return this.getContent() === winnowerResponse.getContent();
11
+ }
12
+ getContent() {
13
+ return this.wfpContent;
14
+ }
15
+ setEngineFlags(engineFlags) {
16
+ this.engineFlags = engineFlags;
17
+ }
18
+ getEngineFlags() {
19
+ return this.engineFlags;
20
+ }
21
+ getFilesWinnowed() {
22
+ const files = [];
23
+ const regExp = new RegExp(/,(\/.*)/g);
24
+ let result;
25
+ // eslint-disable-next-line no-cond-assign
26
+ while ((result = regExp.exec(this.wfpContent)))
27
+ files.push(this.scanRoot + result[1]);
28
+ return files || '';
29
+ }
30
+ }
31
+ exports.WinnowerResponse = WinnowerResponse;
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV2lubm93ZXJSZXNwb25zZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc2Nhbm5lci9XaW5ub3dlci9XaW5ub3dlclJlc3BvbnNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLE1BQWEsZ0JBQWdCO0lBTzNCLFlBQVksVUFBVSxFQUFFLFFBQVEsR0FBRyxFQUFFO1FBQ25DLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQzNCLENBQUM7SUFFTSxPQUFPLENBQUMsZ0JBQWdCO1FBQzdCLE9BQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQzdELENBQUM7SUFFTSxVQUFVO1FBQ2YsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFFTSxjQUFjLENBQUMsV0FBbUI7UUFDdkMsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7SUFDakMsQ0FBQztJQUVNLGNBQWM7UUFDbkIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFFTSxnQkFBZ0I7UUFDckIsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLE1BQU0sTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3RDLElBQUksTUFBTSxDQUFDO1FBQ1gsMENBQTBDO1FBQzFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEYsT0FBTyxLQUFLLElBQUksRUFBRSxDQUFDO0lBQ3JCLENBQUM7Q0FDRjtBQXBDRCw0Q0FvQ0MifQ==
@@ -0,0 +1,6 @@
1
+ import Node from './Node';
2
+ export default class File extends Node {
3
+ constructor(name: string, path: string);
4
+ getNode(path: string): Node;
5
+ getFiles(): Array<string>;
6
+ }
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const Node_1 = require("./Node");
7
+ const Node_2 = __importDefault(require("./Node"));
8
+ class File extends Node_2.default {
9
+ constructor(name, path) {
10
+ super(name, path);
11
+ this.type = Node_1.NodeType.FILE;
12
+ }
13
+ getNode(path) {
14
+ if (path === this.getPath())
15
+ return this;
16
+ return null;
17
+ }
18
+ getFiles() {
19
+ return [this.getPath()];
20
+ }
21
+ }
22
+ exports.default = File;
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdHJlZS9GaWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsaUNBQWtDO0FBQ2xDLGtEQUEwQjtBQUcxQixNQUFxQixJQUFLLFNBQVEsY0FBSTtJQUNwQyxZQUFZLElBQVksRUFBRSxJQUFZO1FBQ3BDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbEIsSUFBSSxDQUFDLElBQUksR0FBRyxlQUFRLENBQUMsSUFBSSxDQUFDO0lBQzVCLENBQUM7SUFFTSxPQUFPLENBQUMsSUFBWTtRQUN6QixJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDekMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU0sUUFBUTtRQUNiLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUMxQixDQUFDO0NBRUY7QUFmRCx1QkFlQyJ9
@@ -0,0 +1,10 @@
1
+ import Node from './Node';
2
+ export default class Folder extends Node {
3
+ private children;
4
+ constructor(path: string, label: string);
5
+ addChild(node: Node): void;
6
+ getChildren(): Node[];
7
+ getNode(path: string): Node;
8
+ private checkMyPath;
9
+ getFiles(): Array<string>;
10
+ }
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const Node_1 = require("./Node");
7
+ const Node_2 = __importDefault(require("./Node"));
8
+ class Folder extends Node_2.default {
9
+ constructor(path, label) {
10
+ super(path, label);
11
+ this.type = Node_1.NodeType.FOLDER;
12
+ this.children = [];
13
+ }
14
+ addChild(node) {
15
+ this.children.push(node);
16
+ }
17
+ getChildren() {
18
+ return this.children;
19
+ }
20
+ getNode(path) {
21
+ if (!this.checkMyPath(path))
22
+ return null;
23
+ if (path === this.getPath())
24
+ return this;
25
+ for (const child of this.children) {
26
+ const node = child.getNode(path);
27
+ if (node !== null)
28
+ return node;
29
+ }
30
+ return null;
31
+ }
32
+ // Returns true only if my path is contained in the path (parameter)
33
+ checkMyPath(path) {
34
+ if (!path.includes(this.getPath()))
35
+ return false;
36
+ // Only if first filter is passed.
37
+ const myPathExploded = this.getPath().split('/');
38
+ const pathExploded = path.split('/');
39
+ for (let i = 0; i < myPathExploded.length; i += 1) {
40
+ if (myPathExploded[i] !== pathExploded[i])
41
+ return false;
42
+ }
43
+ return true;
44
+ }
45
+ getFiles() {
46
+ const files = [];
47
+ this.children.forEach((child) => {
48
+ files.push(...child.getFiles());
49
+ });
50
+ return files;
51
+ }
52
+ }
53
+ exports.default = Folder;
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRm9sZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi90cmVlL0ZvbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLGlDQUFrQztBQUNsQyxrREFBMEI7QUFFMUIsTUFBcUIsTUFBTyxTQUFRLGNBQUk7SUFHdEMsWUFBWSxJQUFZLEVBQUUsS0FBYTtRQUNyQyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxJQUFJLEdBQUcsZUFBUSxDQUFDLE1BQU0sQ0FBQztRQUM1QixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRU0sUUFBUSxDQUFDLElBQVU7UUFDeEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVNLFdBQVc7UUFDaEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFTSxPQUFPLENBQUMsSUFBWTtRQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUN6QyxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDekMsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakMsSUFBSSxJQUFJLEtBQUssSUFBSTtnQkFBRSxPQUFPLElBQUksQ0FBQztTQUNoQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELG9FQUFvRTtJQUM1RCxXQUFXLENBQUMsSUFBWTtRQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUNqRCxrQ0FBa0M7UUFDbEMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDakQsSUFBSSxjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUssWUFBWSxDQUFDLENBQUMsQ0FBQztnQkFBRSxPQUFPLEtBQUssQ0FBQztTQUN6RDtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVNLFFBQVE7UUFDYixNQUFNLEtBQUssR0FBa0IsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDOUIsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0NBQ0Y7QUE5Q0QseUJBOENDIn0=
@@ -0,0 +1,15 @@
1
+ export default abstract class Node {
2
+ protected type: NodeType;
3
+ protected rPath: string;
4
+ protected label: string;
5
+ protected action: string;
6
+ constructor(path: string, label: string);
7
+ abstract getNode(path: string): Node;
8
+ abstract getFiles(): Array<string>;
9
+ getName(): string;
10
+ getPath(): string;
11
+ }
12
+ export declare enum NodeType {
13
+ FOLDER = "FOLDER",
14
+ FILE = "FILE"
15
+ }
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NodeType = void 0;
4
+ class Node {
5
+ constructor(path, label) {
6
+ this.rPath = path;
7
+ this.label = label;
8
+ }
9
+ getName() {
10
+ return this.label;
11
+ }
12
+ getPath() {
13
+ return this.rPath;
14
+ }
15
+ }
16
+ exports.default = Node;
17
+ var NodeType;
18
+ (function (NodeType) {
19
+ NodeType["FOLDER"] = "FOLDER";
20
+ NodeType["FILE"] = "FILE";
21
+ })(NodeType = exports.NodeType || (exports.NodeType = {}));
22
+ ;
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdHJlZS9Ob2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLE1BQThCLElBQUk7SUFTaEMsWUFBWSxJQUFZLEVBQUUsS0FBYTtRQUNyQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNsQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNyQixDQUFDO0lBUU0sT0FBTztRQUNaLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRU0sT0FBTztRQUNaLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0NBRUY7QUE1QkQsdUJBNEJDO0FBRUQsSUFBWSxRQUdYO0FBSEQsV0FBWSxRQUFRO0lBQ2xCLDZCQUFpQixDQUFBO0lBQ2pCLHlCQUFhLENBQUE7QUFDZixDQUFDLEVBSFcsUUFBUSxHQUFSLGdCQUFRLEtBQVIsZ0JBQVEsUUFHbkI7QUFBQSxDQUFDIn0=
@@ -0,0 +1,19 @@
1
+ import Node from './Node';
2
+ import Folder from './Folder';
3
+ import { FilterList } from '../filters/filtering';
4
+ export declare class Tree {
5
+ private rootFolder;
6
+ private rootName;
7
+ private rootPath;
8
+ private filter;
9
+ constructor(path: string);
10
+ buildTree(): Node;
11
+ loadFilter(f: FilterList): void;
12
+ private buildTreeRec;
13
+ private dirFirstFileAfter;
14
+ loadTree(data: any): void;
15
+ private deserialize;
16
+ getRootFolder(): Folder;
17
+ getRootPath(): string;
18
+ getFileList(): Array<string>;
19
+ }