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