scanoss 0.7.4 → 0.7.8

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 (281) hide show
  1. package/.idea/workspace.xml +22 -20
  2. package/build/main/cli/bin/cli-bin.d.ts +2 -1
  3. package/build/main/cli/bin/cli-bin.js +10 -2
  4. package/build/main/package.json +120 -0
  5. package/build/main/sdk/Dependencies/LocalDependency/parsers/rubyParser.d.ts +1 -1
  6. package/build/main/sdk/Dependencies/LocalDependency/parsers/rubyParser.js +4 -4
  7. package/build/main/sdk/scanner/Dispatcher/Dispatcher.js +5 -2
  8. package/build/main/sdk/scanner/Fingerprint.d.ts +2 -2
  9. package/build/main/sdk/scanner/Fingerprint.js +26 -8
  10. package/build/main/sdk/scanner/Scanner.js +4 -1
  11. package/build/main/sdk/scanner/ScannerCfg.d.ts +1 -0
  12. package/build/main/sdk/scanner/ScannerCfg.js +6 -3
  13. package/build/main/sdk/scanner/WfpProvider/WfpCalculator/WfpCalculator.js +6 -3
  14. package/build/main/src/cli/bin/cli-bin.d.ts +2 -0
  15. package/build/main/src/cli/bin/cli-bin.js +68 -0
  16. package/build/main/src/cli/commands/dep.d.ts +1 -0
  17. package/build/main/src/cli/commands/dep.js +38 -0
  18. package/build/main/src/cli/commands/helpers.d.ts +2 -0
  19. package/build/main/src/cli/commands/helpers.js +25 -0
  20. package/build/main/src/cli/commands/scan.d.ts +1 -0
  21. package/build/main/src/cli/commands/scan.js +138 -0
  22. package/build/main/src/cli/commands/wfp.d.ts +1 -0
  23. package/build/main/src/cli/commands/wfp.js +54 -0
  24. package/build/main/src/index.d.ts +14 -0
  25. package/build/main/src/index.js +30 -0
  26. package/build/main/src/sdk/DataLayer/DataLayerTypes.d.ts +108 -0
  27. package/build/main/src/sdk/DataLayer/DataLayerTypes.js +5 -0
  28. package/build/main/src/sdk/DataLayer/DataProviderManager.d.ts +7 -0
  29. package/build/main/src/sdk/DataLayer/DataProviderManager.js +24 -0
  30. package/build/main/src/sdk/DataLayer/DataProviders/ComponentDataProvider.d.ts +13 -0
  31. package/build/main/src/sdk/DataLayer/DataProviders/ComponentDataProvider.js +164 -0
  32. package/build/main/src/sdk/DataLayer/DataProviders/DependencyDataProvider.d.ts +9 -0
  33. package/build/main/src/sdk/DataLayer/DataProviders/DependencyDataProvider.js +37 -0
  34. package/build/main/src/sdk/DataLayer/DataProviders/LicenseDataProvider.d.ts +18 -0
  35. package/build/main/src/sdk/DataLayer/DataProviders/LicenseDataProvider.js +148 -0
  36. package/build/main/src/sdk/DataLayer/DataProviders/SummaryDataProvider.d.ts +11 -0
  37. package/build/main/src/sdk/DataLayer/DataProviders/SummaryDataProvider.js +33 -0
  38. package/build/main/src/sdk/Decompress/DecompressionManager.d.ts +12 -0
  39. package/build/main/src/sdk/Decompress/DecompressionManager.js +73 -0
  40. package/build/main/src/sdk/Decompress/Decompressor/DecompressTgz.d.ts +5 -0
  41. package/build/main/src/sdk/Decompress/Decompressor/DecompressTgz.js +22 -0
  42. package/build/main/src/sdk/Decompress/Decompressor/DecompressZips.d.ts +5 -0
  43. package/build/main/src/sdk/Decompress/Decompressor/DecompressZips.js +24 -0
  44. package/build/main/src/sdk/Decompress/Decompressor/Decompressor.d.ts +10 -0
  45. package/build/main/src/sdk/Decompress/Decompressor/Decompressor.js +18 -0
  46. package/build/main/src/sdk/Dependencies/DependencyScanner.d.ts +11 -0
  47. package/build/main/src/sdk/Dependencies/DependencyScanner.js +96 -0
  48. package/build/main/src/sdk/Dependencies/DependencyScannerCfg.d.ts +4 -0
  49. package/build/main/src/sdk/Dependencies/DependencyScannerCfg.js +10 -0
  50. package/build/main/src/sdk/Dependencies/DependencyTypes.d.ts +21 -0
  51. package/build/main/src/sdk/Dependencies/DependencyTypes.js +2 -0
  52. package/build/main/src/sdk/Dependencies/LocalDependency/DependencyTypes.d.ts +16 -0
  53. package/build/main/src/sdk/Dependencies/LocalDependency/DependencyTypes.js +2 -0
  54. package/build/main/src/sdk/Dependencies/LocalDependency/LocalDependency.d.ts +8 -0
  55. package/build/main/src/sdk/Dependencies/LocalDependency/LocalDependency.js +102 -0
  56. package/build/main/src/sdk/Dependencies/LocalDependency/parsers/buildGradleParser.d.ts +2 -0
  57. package/build/main/src/sdk/Dependencies/LocalDependency/parsers/buildGradleParser.js +95 -0
  58. package/build/main/src/sdk/Dependencies/LocalDependency/parsers/golangParser.d.ts +3 -0
  59. package/build/main/src/sdk/Dependencies/LocalDependency/parsers/golangParser.js +97 -0
  60. package/build/main/src/sdk/Dependencies/LocalDependency/parsers/mavenParser.d.ts +2 -0
  61. package/build/main/src/sdk/Dependencies/LocalDependency/parsers/mavenParser.js +183 -0
  62. package/build/main/src/sdk/Dependencies/LocalDependency/parsers/npmParser.d.ts +13 -0
  63. package/build/main/src/sdk/Dependencies/LocalDependency/parsers/npmParser.js +187 -0
  64. package/build/main/src/sdk/Dependencies/LocalDependency/parsers/nugetParser.d.ts +3 -0
  65. package/build/main/src/sdk/Dependencies/LocalDependency/parsers/nugetParser.js +58 -0
  66. package/build/main/src/sdk/Dependencies/LocalDependency/parsers/pyParser.d.ts +2 -0
  67. package/build/main/src/sdk/Dependencies/LocalDependency/parsers/pyParser.js +64 -0
  68. package/build/main/src/sdk/Dependencies/LocalDependency/parsers/rubyParser.d.ts +3 -0
  69. package/build/main/src/sdk/Dependencies/LocalDependency/parsers/rubyParser.js +132 -0
  70. package/build/main/src/sdk/Dependencies/LocalDependency/parsers/utils.d.ts +2 -0
  71. package/build/main/src/sdk/Dependencies/LocalDependency/parsers/utils.js +19 -0
  72. package/build/main/src/sdk/Report/Report.d.ts +8 -0
  73. package/build/main/src/sdk/Report/Report.js +26 -0
  74. package/build/main/src/sdk/filters/DefaultFilterForDependencies.d.ts +16 -0
  75. package/build/main/src/sdk/filters/DefaultFilterForDependencies.js +145 -0
  76. package/build/main/src/sdk/filters/DefaultFilterForScanning.d.ts +16 -0
  77. package/build/main/src/sdk/filters/DefaultFilterForScanning.js +194 -0
  78. package/build/main/src/sdk/filters/filtering.d.ts +32 -0
  79. package/build/main/src/sdk/filters/filtering.js +228 -0
  80. package/build/main/src/sdk/grpc/GrpcDependencyService.d.ts +11 -0
  81. package/build/main/src/sdk/grpc/GrpcDependencyService.js +86 -0
  82. package/build/main/src/sdk/grpc/scanoss/api/common/v2/scanoss-common_grpc_pb.d.ts +0 -0
  83. package/build/main/src/sdk/grpc/scanoss/api/common/v2/scanoss-common_grpc_pb.js +2 -0
  84. package/build/main/src/sdk/grpc/scanoss/api/common/v2/scanoss-common_pb.d.ts +1 -0
  85. package/build/main/src/sdk/grpc/scanoss/api/common/v2/scanoss-common_pb.js +404 -0
  86. package/build/main/src/sdk/grpc/scanoss/api/dependencies/v2/scanoss-dependencies_grpc_pb.d.ts +39 -0
  87. package/build/main/src/sdk/grpc/scanoss/api/dependencies/v2/scanoss-dependencies_grpc_pb.js +98 -0
  88. package/build/main/src/sdk/grpc/scanoss/api/dependencies/v2/scanoss-dependencies_pb.d.ts +1 -0
  89. package/build/main/src/sdk/grpc/scanoss/api/dependencies/v2/scanoss-dependencies_pb.js +1197 -0
  90. package/build/main/src/sdk/grpc/scanoss/api/scanning/v2/scanoss-scanning_grpc_pb.d.ts +19 -0
  91. package/build/main/src/sdk/grpc/scanoss/api/scanning/v2/scanoss-scanning_grpc_pb.js +66 -0
  92. package/build/main/src/sdk/grpc/scanoss/api/scanning/v2/scanoss-scanning_pb.d.ts +1 -0
  93. package/build/main/src/sdk/grpc/scanoss/api/scanning/v2/scanoss-scanning_pb.js +14 -0
  94. package/build/main/src/sdk/scanner/Dispatcher/DispatchableItem.d.ts +19 -0
  95. package/build/main/src/sdk/scanner/Dispatcher/DispatchableItem.js +43 -0
  96. package/build/main/src/sdk/scanner/Dispatcher/Dispatcher.d.ts +20 -0
  97. package/build/main/src/sdk/scanner/Dispatcher/Dispatcher.js +160 -0
  98. package/build/main/src/sdk/scanner/Dispatcher/DispatcherResponse.d.ts +12 -0
  99. package/build/main/src/sdk/scanner/Dispatcher/DispatcherResponse.js +33 -0
  100. package/build/main/src/sdk/scanner/Dispatcher/GlobalControllerAborter.d.ts +10 -0
  101. package/build/main/src/sdk/scanner/Dispatcher/GlobalControllerAborter.js +32 -0
  102. package/build/main/src/sdk/scanner/Fingerprint.d.ts +16 -0
  103. package/build/main/src/sdk/scanner/Fingerprint.js +78 -0
  104. package/build/main/src/sdk/scanner/Scannable/ScannableItem.d.ts +15 -0
  105. package/build/main/src/sdk/scanner/Scannable/ScannableItem.js +27 -0
  106. package/build/main/src/sdk/scanner/Scanner.d.ts +46 -0
  107. package/build/main/src/sdk/scanner/Scanner.js +283 -0
  108. package/build/main/src/sdk/scanner/ScannerCfg.d.ts +16 -0
  109. package/build/main/src/sdk/scanner/ScannerCfg.js +30 -0
  110. package/build/main/src/sdk/scanner/ScannerTypes.d.ts +121 -0
  111. package/build/main/src/sdk/scanner/ScannerTypes.js +48 -0
  112. package/build/main/src/sdk/scanner/WfpProvider/FingerprintPackage.d.ts +9 -0
  113. package/build/main/src/sdk/scanner/WfpProvider/FingerprintPackage.js +31 -0
  114. package/build/main/src/sdk/scanner/WfpProvider/WfpCalculator/WfpCalculator.d.ts +20 -0
  115. package/build/main/src/sdk/scanner/WfpProvider/WfpCalculator/WfpCalculator.js +492 -0
  116. package/build/main/src/sdk/scanner/WfpProvider/WfpProvider.d.ts +35 -0
  117. package/build/main/src/sdk/scanner/WfpProvider/WfpProvider.js +68 -0
  118. package/build/main/src/sdk/scanner/WfpProvider/WfpSplitter/WfpSplitter.d.ts +21 -0
  119. package/build/main/src/sdk/scanner/WfpProvider/WfpSplitter/WfpSplitter.js +139 -0
  120. package/build/main/src/sdk/tree/File.d.ts +7 -0
  121. package/build/main/src/sdk/tree/File.js +24 -0
  122. package/build/main/src/sdk/tree/Filters/DecompressionFilter.d.ts +7 -0
  123. package/build/main/src/sdk/tree/Filters/DecompressionFilter.js +21 -0
  124. package/build/main/src/sdk/tree/Filters/DependencyFilter.d.ts +7 -0
  125. package/build/main/src/sdk/tree/Filters/DependencyFilter.js +17 -0
  126. package/build/main/src/sdk/tree/Filters/Filter.d.ts +4 -0
  127. package/build/main/src/sdk/tree/Filters/Filter.js +6 -0
  128. package/build/main/src/sdk/tree/Filters/ScanFilter.d.ts +7 -0
  129. package/build/main/src/sdk/tree/Filters/ScanFilter.js +17 -0
  130. package/build/main/src/sdk/tree/Folder.d.ts +12 -0
  131. package/build/main/src/sdk/tree/Folder.js +58 -0
  132. package/build/main/src/sdk/tree/Node.d.ts +17 -0
  133. package/build/main/src/sdk/tree/Node.js +25 -0
  134. package/build/main/src/sdk/tree/Tree.d.ts +18 -0
  135. package/build/main/src/sdk/tree/Tree.js +70 -0
  136. package/build/main/tsconfig.tsbuildinfo +126 -123
  137. package/build/module/cli/bin/cli-bin.d.ts +2 -1
  138. package/build/module/cli/bin/cli-bin.js +6 -2
  139. package/build/module/package.json +120 -0
  140. package/build/module/sdk/Dependencies/LocalDependency/parsers/rubyParser.d.ts +1 -1
  141. package/build/module/sdk/Dependencies/LocalDependency/parsers/rubyParser.js +4 -4
  142. package/build/module/sdk/scanner/Dispatcher/Dispatcher.js +5 -2
  143. package/build/module/sdk/scanner/Fingerprint.d.ts +2 -2
  144. package/build/module/sdk/scanner/Fingerprint.js +6 -6
  145. package/build/module/sdk/scanner/Scanner.js +4 -1
  146. package/build/module/sdk/scanner/ScannerCfg.d.ts +1 -0
  147. package/build/module/sdk/scanner/ScannerCfg.js +6 -3
  148. package/build/module/sdk/scanner/WfpProvider/WfpCalculator/WfpCalculator.js +6 -3
  149. package/build/module/src/cli/bin/cli-bin.d.ts +2 -0
  150. package/build/module/src/cli/bin/cli-bin.js +67 -0
  151. package/build/module/src/cli/commands/dep.d.ts +1 -0
  152. package/build/module/src/cli/commands/dep.js +32 -0
  153. package/build/module/src/cli/commands/helpers.d.ts +2 -0
  154. package/build/module/src/cli/commands/helpers.js +19 -0
  155. package/build/module/src/cli/commands/scan.d.ts +1 -0
  156. package/build/module/src/cli/commands/scan.js +135 -0
  157. package/build/module/src/cli/commands/wfp.d.ts +1 -0
  158. package/build/module/src/cli/commands/wfp.js +48 -0
  159. package/build/module/src/index.d.ts +14 -0
  160. package/build/module/src/index.js +19 -0
  161. package/build/module/src/sdk/DataLayer/DataLayerTypes.d.ts +108 -0
  162. package/build/module/src/sdk/DataLayer/DataLayerTypes.js +5 -0
  163. package/build/module/src/sdk/DataLayer/DataProviderManager.d.ts +7 -0
  164. package/build/module/src/sdk/DataLayer/DataProviderManager.js +21 -0
  165. package/build/module/src/sdk/DataLayer/DataProviders/ComponentDataProvider.d.ts +13 -0
  166. package/build/module/src/sdk/DataLayer/DataProviders/ComponentDataProvider.js +159 -0
  167. package/build/module/src/sdk/DataLayer/DataProviders/DependencyDataProvider.d.ts +9 -0
  168. package/build/module/src/sdk/DataLayer/DataProviders/DependencyDataProvider.js +34 -0
  169. package/build/module/src/sdk/DataLayer/DataProviders/LicenseDataProvider.d.ts +18 -0
  170. package/build/module/src/sdk/DataLayer/DataProviders/LicenseDataProvider.js +145 -0
  171. package/build/module/src/sdk/DataLayer/DataProviders/SummaryDataProvider.d.ts +11 -0
  172. package/build/module/src/sdk/DataLayer/DataProviders/SummaryDataProvider.js +30 -0
  173. package/build/module/src/sdk/Decompress/DecompressionManager.d.ts +12 -0
  174. package/build/module/src/sdk/Decompress/DecompressionManager.js +67 -0
  175. package/build/module/src/sdk/Decompress/Decompressor/DecompressTgz.d.ts +5 -0
  176. package/build/module/src/sdk/Decompress/Decompressor/DecompressTgz.js +16 -0
  177. package/build/module/src/sdk/Decompress/Decompressor/DecompressZips.d.ts +5 -0
  178. package/build/module/src/sdk/Decompress/Decompressor/DecompressZips.js +18 -0
  179. package/build/module/src/sdk/Decompress/Decompressor/Decompressor.d.ts +10 -0
  180. package/build/module/src/sdk/Decompress/Decompressor/Decompressor.js +15 -0
  181. package/build/module/src/sdk/Dependencies/DependencyScanner.d.ts +11 -0
  182. package/build/module/src/sdk/Dependencies/DependencyScanner.js +93 -0
  183. package/build/module/src/sdk/Dependencies/DependencyScannerCfg.d.ts +4 -0
  184. package/build/module/src/sdk/Dependencies/DependencyScannerCfg.js +7 -0
  185. package/build/module/src/sdk/Dependencies/DependencyTypes.d.ts +21 -0
  186. package/build/module/src/sdk/Dependencies/DependencyTypes.js +2 -0
  187. package/build/module/src/sdk/Dependencies/LocalDependency/DependencyTypes.d.ts +16 -0
  188. package/build/module/src/sdk/Dependencies/LocalDependency/DependencyTypes.js +2 -0
  189. package/build/module/src/sdk/Dependencies/LocalDependency/LocalDependency.d.ts +8 -0
  190. package/build/module/src/sdk/Dependencies/LocalDependency/LocalDependency.js +96 -0
  191. package/build/module/src/sdk/Dependencies/LocalDependency/parsers/buildGradleParser.d.ts +2 -0
  192. package/build/module/src/sdk/Dependencies/LocalDependency/parsers/buildGradleParser.js +87 -0
  193. package/build/module/src/sdk/Dependencies/LocalDependency/parsers/golangParser.d.ts +3 -0
  194. package/build/module/src/sdk/Dependencies/LocalDependency/parsers/golangParser.js +88 -0
  195. package/build/module/src/sdk/Dependencies/LocalDependency/parsers/mavenParser.d.ts +2 -0
  196. package/build/module/src/sdk/Dependencies/LocalDependency/parsers/mavenParser.js +180 -0
  197. package/build/module/src/sdk/Dependencies/LocalDependency/parsers/npmParser.d.ts +13 -0
  198. package/build/module/src/sdk/Dependencies/LocalDependency/parsers/npmParser.js +175 -0
  199. package/build/module/src/sdk/Dependencies/LocalDependency/parsers/nugetParser.d.ts +3 -0
  200. package/build/module/src/sdk/Dependencies/LocalDependency/parsers/nugetParser.js +49 -0
  201. package/build/module/src/sdk/Dependencies/LocalDependency/parsers/pyParser.d.ts +2 -0
  202. package/build/module/src/sdk/Dependencies/LocalDependency/parsers/pyParser.js +57 -0
  203. package/build/module/src/sdk/Dependencies/LocalDependency/parsers/rubyParser.d.ts +3 -0
  204. package/build/module/src/sdk/Dependencies/LocalDependency/parsers/rubyParser.js +125 -0
  205. package/build/module/src/sdk/Dependencies/LocalDependency/parsers/utils.d.ts +2 -0
  206. package/build/module/src/sdk/Dependencies/LocalDependency/parsers/utils.js +15 -0
  207. package/build/module/src/sdk/Report/Report.d.ts +8 -0
  208. package/build/module/src/sdk/Report/Report.js +20 -0
  209. package/build/module/src/sdk/filters/DefaultFilterForDependencies.d.ts +16 -0
  210. package/build/module/src/sdk/filters/DefaultFilterForDependencies.js +143 -0
  211. package/build/module/src/sdk/filters/DefaultFilterForScanning.d.ts +16 -0
  212. package/build/module/src/sdk/filters/DefaultFilterForScanning.js +192 -0
  213. package/build/module/src/sdk/filters/filtering.d.ts +32 -0
  214. package/build/module/src/sdk/filters/filtering.js +203 -0
  215. package/build/module/src/sdk/grpc/GrpcDependencyService.d.ts +11 -0
  216. package/build/module/src/sdk/grpc/GrpcDependencyService.js +64 -0
  217. package/build/module/src/sdk/grpc/scanoss/api/common/v2/scanoss-common_grpc_pb.d.ts +0 -0
  218. package/build/module/src/sdk/grpc/scanoss/api/common/v2/scanoss-common_grpc_pb.js +2 -0
  219. package/build/module/src/sdk/grpc/scanoss/api/common/v2/scanoss-common_pb.d.ts +1 -0
  220. package/build/module/src/sdk/grpc/scanoss/api/common/v2/scanoss-common_pb.js +404 -0
  221. package/build/module/src/sdk/grpc/scanoss/api/dependencies/v2/scanoss-dependencies_grpc_pb.d.ts +39 -0
  222. package/build/module/src/sdk/grpc/scanoss/api/dependencies/v2/scanoss-dependencies_grpc_pb.js +98 -0
  223. package/build/module/src/sdk/grpc/scanoss/api/dependencies/v2/scanoss-dependencies_pb.d.ts +1 -0
  224. package/build/module/src/sdk/grpc/scanoss/api/dependencies/v2/scanoss-dependencies_pb.js +1197 -0
  225. package/build/module/src/sdk/grpc/scanoss/api/scanning/v2/scanoss-scanning_grpc_pb.d.ts +19 -0
  226. package/build/module/src/sdk/grpc/scanoss/api/scanning/v2/scanoss-scanning_grpc_pb.js +66 -0
  227. package/build/module/src/sdk/grpc/scanoss/api/scanning/v2/scanoss-scanning_pb.d.ts +1 -0
  228. package/build/module/src/sdk/grpc/scanoss/api/scanning/v2/scanoss-scanning_pb.js +14 -0
  229. package/build/module/src/sdk/scanner/Dispatcher/DispatchableItem.d.ts +19 -0
  230. package/build/module/src/sdk/scanner/Dispatcher/DispatchableItem.js +37 -0
  231. package/build/module/src/sdk/scanner/Dispatcher/Dispatcher.d.ts +20 -0
  232. package/build/module/src/sdk/scanner/Dispatcher/Dispatcher.js +135 -0
  233. package/build/module/src/sdk/scanner/Dispatcher/DispatcherResponse.d.ts +12 -0
  234. package/build/module/src/sdk/scanner/Dispatcher/DispatcherResponse.js +30 -0
  235. package/build/module/src/sdk/scanner/Dispatcher/GlobalControllerAborter.d.ts +10 -0
  236. package/build/module/src/sdk/scanner/Dispatcher/GlobalControllerAborter.js +26 -0
  237. package/build/module/src/sdk/scanner/Fingerprint.d.ts +16 -0
  238. package/build/module/src/sdk/scanner/Fingerprint.js +54 -0
  239. package/build/module/src/sdk/scanner/Scannable/ScannableItem.d.ts +15 -0
  240. package/build/module/src/sdk/scanner/Scannable/ScannableItem.js +24 -0
  241. package/build/module/src/sdk/scanner/Scanner.d.ts +46 -0
  242. package/build/module/src/sdk/scanner/Scanner.js +275 -0
  243. package/build/module/src/sdk/scanner/ScannerCfg.d.ts +16 -0
  244. package/build/module/src/sdk/scanner/ScannerCfg.js +27 -0
  245. package/build/module/src/sdk/scanner/ScannerTypes.d.ts +121 -0
  246. package/build/module/src/sdk/scanner/ScannerTypes.js +46 -0
  247. package/build/module/src/sdk/scanner/WfpProvider/FingerprintPackage.d.ts +9 -0
  248. package/build/module/src/sdk/scanner/WfpProvider/FingerprintPackage.js +28 -0
  249. package/build/module/src/sdk/scanner/WfpProvider/WfpCalculator/WfpCalculator.d.ts +20 -0
  250. package/build/module/src/sdk/scanner/WfpProvider/WfpCalculator/WfpCalculator.js +486 -0
  251. package/build/module/src/sdk/scanner/WfpProvider/WfpProvider.d.ts +35 -0
  252. package/build/module/src/sdk/scanner/WfpProvider/WfpProvider.js +65 -0
  253. package/build/module/src/sdk/scanner/WfpProvider/WfpSplitter/WfpSplitter.d.ts +21 -0
  254. package/build/module/src/sdk/scanner/WfpProvider/WfpSplitter/WfpSplitter.js +132 -0
  255. package/build/module/src/sdk/tree/File.d.ts +7 -0
  256. package/build/module/src/sdk/tree/File.js +19 -0
  257. package/build/module/src/sdk/tree/Filters/DecompressionFilter.d.ts +7 -0
  258. package/build/module/src/sdk/tree/Filters/DecompressionFilter.js +18 -0
  259. package/build/module/src/sdk/tree/Filters/DependencyFilter.d.ts +7 -0
  260. package/build/module/src/sdk/tree/Filters/DependencyFilter.js +14 -0
  261. package/build/module/src/sdk/tree/Filters/Filter.d.ts +4 -0
  262. package/build/module/src/sdk/tree/Filters/Filter.js +3 -0
  263. package/build/module/src/sdk/tree/Filters/ScanFilter.d.ts +7 -0
  264. package/build/module/src/sdk/tree/Filters/ScanFilter.js +14 -0
  265. package/build/module/src/sdk/tree/Folder.d.ts +12 -0
  266. package/build/module/src/sdk/tree/Folder.js +53 -0
  267. package/build/module/src/sdk/tree/Node.d.ts +17 -0
  268. package/build/module/src/sdk/tree/Node.js +22 -0
  269. package/build/module/src/sdk/tree/Tree.d.ts +18 -0
  270. package/build/module/src/sdk/tree/Tree.js +64 -0
  271. package/build/module/tsconfig.module.tsbuildinfo +126 -123
  272. package/package-lock.json +17117 -0
  273. package/package.json +1 -1
  274. package/src/cli/bin/cli-bin.ts +7 -4
  275. package/src/sdk/Dependencies/LocalDependency/parsers/rubyParser.ts +10 -9
  276. package/src/sdk/scanner/Dispatcher/Dispatcher.ts +5 -2
  277. package/src/sdk/scanner/Fingerprint.ts +6 -8
  278. package/src/sdk/scanner/Scanner.ts +4 -0
  279. package/src/sdk/scanner/ScannerCfg.ts +8 -2
  280. package/src/sdk/scanner/WfpProvider/WfpCalculator/WfpCalculator.ts +7 -2
  281. package/yarn.lock +4977 -4864
@@ -0,0 +1,486 @@
1
+ import fs from 'fs';
2
+ import { Worker } from 'worker_threads';
3
+ import { ScannableItem } from '../../Scannable/ScannableItem';
4
+ import { ScannerCfg } from '../../ScannerCfg';
5
+ import { FingerprintPackage } from '../FingerprintPackage';
6
+ import { WfpProvider } from '../WfpProvider';
7
+ const stringWorker = `
8
+ const { parentPort } = require('worker_threads');
9
+
10
+ parentPort.on('message', async (scannableItem) => {
11
+
12
+ let fingerprint;
13
+ if ( scannableItem.winnowingMode === "FULL_WINNOWING") {
14
+ fingerprint = wfp_for_content(
15
+ scannableItem.content,
16
+ scannableItem.contentSource,
17
+ scannableItem.maxSizeWfp
18
+ );
19
+ } else if (scannableItem.winnowingMode === "FULL_WINNOWING_HPSM") {
20
+ fingerprint = wfp_hpsm_for_content(
21
+ scannableItem.content,
22
+ scannableItem.contentSource,
23
+ scannableItem.maxSizeWfp
24
+ );
25
+ } else if (scannableItem.winnowingMode === "WINNOWING_ONLY_MD5") {
26
+ fingerprint = wfp_only_md5(
27
+ scannableItem.content,
28
+ scannableItem.contentSource
29
+ );
30
+ }
31
+
32
+ scannableItem.fingerprint = fingerprint;
33
+ parentPort.postMessage(scannableItem);
34
+
35
+ });
36
+
37
+ /**
38
+ * Winnowing and HPSM algorithm begins
39
+ */
40
+
41
+ const crypto = require('crypto');
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 calc_wfp(contents, maxSize) {
82
+ let gram = '';
83
+ const window = [];
84
+ let normalized = 0;
85
+ let line = 1;
86
+ let min_hash = 'ffffffff';
87
+ let last_hash = 'ffffffff';
88
+ let last_line = 0;
89
+ let output = '';
90
+ let gram_crc32 = 0;
91
+ let wfp = '';
92
+
93
+ for (let i = 0; i < contents.length; i++) {
94
+ if(wfp.length > maxSize)
95
+ return wfp;
96
+
97
+ const byte = contents[i];
98
+ if (byte == ASCII_LF) {
99
+ line += 1;
100
+ normalized = 0;
101
+ } else {
102
+ normalized = normalize(byte);
103
+ }
104
+ // Is this an useful byte?
105
+ if (normalized) {
106
+ gram += String.fromCharCode(normalized);
107
+
108
+ if (gram.length >= GRAM) {
109
+ gram_crc32 = crc32c_hex(gram);
110
+ window.push(gram_crc32);
111
+
112
+ if (window.length >= WINDOW) {
113
+ min_hash = min_hex_array(window);
114
+ if (min_hash !== last_hash) {
115
+ // Hashing the hash will result in a better balanced output data set
116
+ // as it will counter the winnowing effect which selects the "minimum"
117
+ // hash in each window
118
+ const min_hash_bytes_le = parseHexString(
119
+ toLittleEndianCRCHex(min_hash)
120
+ );
121
+ const crc_hex = crc32c_for_bytes_hex(min_hash_bytes_le);
122
+
123
+ if (last_line != line) {
124
+ if (output.length > 0) {
125
+ wfp += String(output) + String.fromCharCode(10);
126
+ }
127
+ output = String(line) + '=' + String(crc_hex);
128
+ } else {
129
+ output += ',' + String(crc_hex);
130
+ }
131
+ last_line = line;
132
+ last_hash = min_hash;
133
+ }
134
+ window.shift();
135
+ }
136
+ gram = gram.slice(1);
137
+ }
138
+ }
139
+ }
140
+ if (output.length > 0) {
141
+ wfp += String(output) + String.fromCharCode(10);
142
+ }
143
+
144
+ return wfp;
145
+ }
146
+
147
+ function parseHexString(str) {
148
+ const result = [];
149
+ while (str.length >= 2) {
150
+ result.push(parseInt(str.substring(0, 2), 16));
151
+ str = str.substring(2, str.length);
152
+ }
153
+
154
+ return result;
155
+ }
156
+
157
+ /**
158
+ *
159
+ * @param {string} hex
160
+ */
161
+ function toLittleEndianCRCHex(hex) {
162
+ return (
163
+ hex.charAt(6) +
164
+ hex.charAt(7) +
165
+ hex.charAt(4) +
166
+ hex.charAt(5) +
167
+ hex.charAt(2) +
168
+ hex.charAt(3) +
169
+ hex.charAt(0) +
170
+ hex.charAt(1)
171
+ );
172
+ }
173
+
174
+ let CRC_TABLE = [];
175
+
176
+ function makeCRCTable() {
177
+ let c;
178
+ const crcTable = [];
179
+ for (let n = 0; n < 256; n++) {
180
+ c = n;
181
+ for (let k = 0; k < 8; k++) {
182
+ c = c & 1 ? 0x82f63b78 ^ (c >>> 1) : c >>> 1;
183
+ }
184
+ crcTable[n] = c;
185
+ }
186
+ return crcTable;
187
+ }
188
+
189
+ function crc32c(str) {
190
+ if (CRC_TABLE.length == 0) {
191
+ CRC_TABLE = makeCRCTable();
192
+ }
193
+ let crc = 0 ^ -1;
194
+
195
+ for (let i = 0; i < str.length; i++) {
196
+ crc = (crc >>> 8) ^ CRC_TABLE[(crc ^ str.charCodeAt(i)) & 0xff];
197
+ }
198
+
199
+ return (crc ^ -1) >>> 0;
200
+ }
201
+
202
+ function crc32c_for_bytes(bytes) {
203
+ if (CRC_TABLE.length == 0) {
204
+ CRC_TABLE = makeCRCTable();
205
+ }
206
+ let crc = 0 ^ -1;
207
+
208
+ for (let i = 0; i < bytes.length; i++) {
209
+ crc = (crc >>> 8) ^ CRC_TABLE[(crc ^ bytes[i]) & 0xff];
210
+ }
211
+
212
+ return (crc ^ -1) >>> 0;
213
+ }
214
+
215
+ function crc32c_for_bytes_hex(bytes) {
216
+ return crc32c_for_bytes(bytes).toString(16).padStart(8, '0');
217
+ }
218
+
219
+ function crc32c_hex(str) {
220
+ return crc32c(str).toString(16).padStart(8, '0');
221
+ }
222
+
223
+ function truncate_string(input, maxSize){
224
+ return input.slice(0, maxSize)
225
+ }
226
+
227
+ function toHexString(byteArray) {
228
+ return Array.from(byteArray, function(byte) {
229
+ return ('0' + (byte & 0xFF).toString(16)).slice(-2);
230
+ }).join('')
231
+ }
232
+
233
+ function calc_hpsm(content) {
234
+ let list_normalized = []; //Array of numbers
235
+ let crc_lines = []; //Array of numbers that represent the crc8_maxim for each line of the file
236
+
237
+ let last_line = 0;
238
+ crc8_MAXIM_DOW_GenerateTable();
239
+
240
+ for(let i = 0; i<content.length; i++) {
241
+ const c = content[i];
242
+ if (c == ASCII_LF) { //When there is a new line
243
+ if (list_normalized.length) {
244
+ crc_lines.push(crc8_MAXIM_DOW_Buffer(list_normalized))
245
+ list_normalized=[];
246
+ } else if(last_line+1 == i) {
247
+ crc_lines.push(0xFF);
248
+ } else if (i-last_line > 1) {
249
+ crc_lines.push(0x00)
250
+ }
251
+ last_line = i;
252
+ } else {
253
+ const c_normalized = normalize(c);
254
+ if (c_normalized != 0) list_normalized.push(c_normalized)
255
+ }
256
+ }
257
+ return "hpsm=" + toHexString(crc_lines)
258
+ }
259
+
260
+
261
+ /**
262
+ * Create a wfp_hpsm package joining wfp (with md5 line) and a hpsm.
263
+ *
264
+ * Example:
265
+ * wfp = file=508cb9dfbe1c7dca5ed24f124473f33d,300,asd.c
266
+ * 11=b19bdbfa
267
+ *
268
+ * hpsm = hpsm=1909ff06ff688630ff45a92b52f47eff3500ffff
269
+ *
270
+ * wfp_hpsm = file=508cb9dfbe1c7dca5ed24f124473f33d,300,asd.c
271
+ * hpsm=1909ff06ff688630ff45a92b52f47eff3500ffff
272
+ * 11=b19bdbfa
273
+ *
274
+ * @param {string} wfp Complete wfp string (with md5 line)
275
+ * @param {string} hpsm
276
+ * @returns {string}
277
+ */
278
+ function join_wfp_hpsm(wfp, hpsm) {
279
+ let header = wfp.match(/file=.*/);
280
+ header += String.fromCharCode(10);
281
+ header += hpsm;
282
+ wfp = wfp.replace(/file=.*/, "")
283
+ return header + wfp;
284
+ }
285
+
286
+ /**
287
+ *
288
+ * @param {Buffer} content
289
+ * @param {string} contentSource
290
+ * @param {number} maxSize
291
+ * @returns {string}
292
+ */
293
+ function wfp_hpsm_for_content(content, contentSource, maxSize) {
294
+ let wfp = wfp_for_content(content, contentSource, maxSize)
295
+ let hpsm = calc_hpsm(content) //Returns a string
296
+ let wfp_hpsm_joined = join_wfp_hpsm(wfp, hpsm)
297
+ return truncate_string(wfp_hpsm_joined, maxSize)
298
+ }
299
+
300
+ function wfp_for_content(content, contentSource, maxSize) {
301
+ let wfp = wfp_only_md5(content, contentSource);
302
+ wfp += calc_wfp(content, maxSize);
303
+ return wfp;
304
+ }
305
+
306
+ function wfp_only_md5(contents, contentSource) {
307
+ const file_md5 = crypto.createHash('md5').update(contents).digest('hex');
308
+ let wfp = 'file=' + String(file_md5) + ',' + String(contents.length) + ',' + String(contentSource)+ String.fromCharCode(10);
309
+ return wfp;
310
+ }
311
+
312
+ /**
313
+ * CRC8_MAXIM algorithm begins
314
+ */
315
+
316
+
317
+ //=============================================================================
318
+ // Implementation of CRC-8/MAXIM-DOW,CRC-8/MAXIM,DOW-CRC.
319
+ // Notes: Code ported from C Auto-generated by http://crc.drque.net/
320
+ //=============================================================================
321
+
322
+ //Table size
323
+ const CRC8_MAXIM_DOW_TABLE_SIZE = 0x100
324
+ const CRC8_MAXIM_DOW_POLYNOMIAL = 0x8C // 0x31 reflected
325
+ const CRC8_MAXIM_DOW_INITIAL = 0x00 // 0x00 reflected
326
+ const CRC8_MAXIM_DOW_FINAL = 0x00 // 0x00 reflected
327
+
328
+ let crc8_MAXIM_DOW_Table = []
329
+
330
+ /**
331
+ * Compute CRC of byte without lookup tables.
332
+ *
333
+ * @param {number} crc Current CRC or initial value
334
+ * @param {number} byte New byte to accumulate.
335
+ * @returns {number} Updated CRC.
336
+ */
337
+ function crc8_MAXIM_DOW_ByteNoTable(crc, byte) {
338
+ crc ^= byte;
339
+ for (let count = 0; count<8; count++) {
340
+ const isSet = (crc & 0x01)
341
+ crc >>= 1;
342
+ if (isSet) crc ^= CRC8_MAXIM_DOW_POLYNOMIAL
343
+ }
344
+ return crc
345
+ }
346
+
347
+ /**
348
+ * Create the lookup table.
349
+ * Note: Must be called before any table based CRC calculations can be done.
350
+ */
351
+ function crc8_MAXIM_DOW_GenerateTable() {
352
+ for(let i = 0; i<CRC8_MAXIM_DOW_TABLE_SIZE; i++) {
353
+ crc8_MAXIM_DOW_Table.push(crc8_MAXIM_DOW_ByteNoTable(0, i))
354
+ }
355
+ }
356
+
357
+ /**
358
+ * Update CRC by byte.
359
+ *
360
+ * @param {number} crc Initial CRC.
361
+ * @param {number} byte New byte to accumulate.
362
+ * @returns {number} Updated CRC.
363
+ */
364
+ function crc8_MAXIM_DOW_Byte( crc, byte )
365
+ {
366
+ const index = byte ^ crc;
367
+ return crc8_MAXIM_DOW_Table[ index ] ^ ( crc >> 8 );
368
+ }
369
+
370
+ /**
371
+ * Compute CRC of buffer.
372
+ * Note: crc8_MAXIM_DOW_GenerateTable() must be called before use this function
373
+ *
374
+ * @param {Buffer} buffer Buffer with bytes to calculate CRC.
375
+ * @returns {number} CRC
376
+ */
377
+ function crc8_MAXIM_DOW_Buffer(buffer) {
378
+ let crc = CRC8_MAXIM_DOW_INITIAL;
379
+ for (let index = 0; index < buffer.length ; index ++) {
380
+ crc = crc8_MAXIM_DOW_Byte(crc, buffer[index])
381
+ }
382
+ crc ^= CRC8_MAXIM_DOW_FINAL;
383
+ return crc;
384
+ }
385
+ `;
386
+ export class WfpCalculator extends WfpProvider {
387
+ constructor(scannerCfg = new ScannerCfg()) {
388
+ super();
389
+ this.scannerCfg = scannerCfg;
390
+ }
391
+ init() {
392
+ super.init();
393
+ this.continue = true;
394
+ this.fileList = [];
395
+ this.fileListIndex = 0;
396
+ }
397
+ prepareWorker() {
398
+ this.worker = new Worker(stringWorker, { eval: true });
399
+ this.worker.on('message', async (scannableItem) => {
400
+ this.fingerprintPacker(scannableItem.fingerprint);
401
+ await this.nextStepMachine();
402
+ });
403
+ }
404
+ recoveryIndex() {
405
+ // Files: contains all files winnowed but not packed yet
406
+ const files = new FingerprintPackage(this.wfp, this.folderRoot).getFilesFingerprinted();
407
+ if (files.length) {
408
+ const lastFileWinnowed = files[files.length - 1];
409
+ let i = 0;
410
+ while (i <= files.length && lastFileWinnowed !== this.fileList[this.fileListIndex - i]) {
411
+ i += 1;
412
+ }
413
+ // If file already winnowed cannot be found in fileList emit an error.
414
+ if (i > files.length) {
415
+ this.sendError('Cannot recovery index on winnower');
416
+ return -1;
417
+ }
418
+ this.fileListIndex -= i;
419
+ if (this.fileList[this.fileListIndex] === lastFileWinnowed)
420
+ this.fileListIndex += 1;
421
+ }
422
+ return 0;
423
+ }
424
+ forceStopWorker() {
425
+ this.worker.removeAllListeners();
426
+ this.worker.terminate();
427
+ }
428
+ processPackedWfp(content) {
429
+ const fingerprint = new FingerprintPackage(content, this.folderRoot);
430
+ this.sendFingerprint(fingerprint);
431
+ }
432
+ async getNextScannableItem() {
433
+ if (this.fileListIndex >= this.fileList.length)
434
+ return null;
435
+ const path = this.fileList[this.fileListIndex];
436
+ const contentSource = path.replace(`${this.folderRoot}`, '');
437
+ const content = await fs.promises.readFile(path);
438
+ this.fileListIndex += 1;
439
+ const scannable = new ScannableItem(content, contentSource, this.winnowingMode, this.scannerCfg.WFP_FILE_MAX_SIZE);
440
+ return scannable;
441
+ }
442
+ async nextStepMachine() {
443
+ if (!this.continue)
444
+ return;
445
+ const scannableItem = await this.getNextScannableItem();
446
+ if (scannableItem)
447
+ this.worker.postMessage(scannableItem);
448
+ else {
449
+ this.finishWinnowing();
450
+ this.forceStopWorker();
451
+ this.sendLog('[ SCANNER ]: WFP Calculator finished...');
452
+ }
453
+ }
454
+ start(params) {
455
+ if (!params.fileList)
456
+ this.sendError('File list is required');
457
+ this.sendLog('[ SCANNER ]: WFP Calculator starting...');
458
+ this.init();
459
+ this.prepareWorker();
460
+ if (params.winnowingMode)
461
+ this.setWinnowingMode(params.winnowingMode);
462
+ this.pendingFiles = true;
463
+ this.folderRoot = params.folderRoot;
464
+ this.fileList = params.fileList;
465
+ this.nextStepMachine();
466
+ return this.finishPromise;
467
+ }
468
+ pause() {
469
+ this.sendLog('[ SCANNER ]: WFP Calculator paused...');
470
+ this.continue = false;
471
+ }
472
+ resume() {
473
+ this.sendLog('[ SCANNER ]: WFP Calculator resumed...');
474
+ this.continue = true;
475
+ this.recoveryIndex();
476
+ this.nextStepMachine();
477
+ }
478
+ stop() {
479
+ this.continue = false;
480
+ this.pendingFiles = false;
481
+ this.forceStopWorker();
482
+ this.prepareWorker();
483
+ this.init();
484
+ }
485
+ }
486
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV2ZwQ2FsY3VsYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9zZGsvc2Nhbm5lci9XZnBQcm92aWRlci9XZnBDYWxjdWxhdG9yL1dmcENhbGN1bGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3BCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRzlDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzNELE9BQU8sRUFBcUIsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFaEUsTUFBTSxZQUFZLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQTBYcEIsQ0FBQztBQUVGLE1BQU0sT0FBTyxhQUFjLFNBQVEsV0FBVztJQU81QyxZQUFZLFVBQVUsR0FBRyxJQUFJLFVBQVUsRUFBRTtRQUN2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
@@ -0,0 +1,35 @@
1
+ /// <reference types="node" />
2
+ import { Worker } from 'worker_threads';
3
+ import { EventEmitter } from "stream";
4
+ import { ScannerCfg } from "../ScannerCfg";
5
+ import { WinnowingMode } from "../ScannerTypes";
6
+ import { FingerprintPackage } from "./FingerprintPackage";
7
+ export interface IWfpProviderInput {
8
+ wfpPath?: string;
9
+ folderRoot?: string;
10
+ fileList?: Array<string>;
11
+ winnowingMode?: WinnowingMode;
12
+ }
13
+ export declare abstract class WfpProvider extends EventEmitter {
14
+ protected wfp: string;
15
+ protected scannerCfg: ScannerCfg;
16
+ protected folderRoot: string;
17
+ protected worker: Worker;
18
+ protected pendingFiles: boolean;
19
+ protected winnowingMode: WinnowingMode;
20
+ protected finishPromise: Promise<void>;
21
+ protected finishPromiseResolve: (value?: void | PromiseLike<void>) => void;
22
+ protected finishPromiseReject: (value?: void | PromiseLike<void>) => void;
23
+ protected init(): void;
24
+ protected fingerprintPacker(fingerprint: string): boolean;
25
+ protected finishWinnowing(): void;
26
+ protected sendFingerprint(fingerprintPackage: FingerprintPackage): void;
27
+ protected sendLog(logMsg: string): void;
28
+ protected sendError(errorMsg: string): void;
29
+ protected setWinnowingMode(mode: WinnowingMode): void;
30
+ abstract start(params: IWfpProviderInput): Promise<void>;
31
+ abstract stop(): void;
32
+ abstract pause(): void;
33
+ abstract resume(): void;
34
+ hasPendingFiles(): boolean;
35
+ }
@@ -0,0 +1,65 @@
1
+ import { EventEmitter } from "stream";
2
+ import { ScannerEvents, WinnowingMode } from "../ScannerTypes";
3
+ import { FingerprintPackage } from "./FingerprintPackage";
4
+ export class WfpProvider extends EventEmitter {
5
+ init() {
6
+ this.wfp = '';
7
+ this.folderRoot = '';
8
+ this.pendingFiles = false;
9
+ this.winnowingMode = WinnowingMode.FULL_WINNOWING;
10
+ this.finishPromise = new Promise((resolve, reject) => {
11
+ this.finishPromiseResolve = resolve;
12
+ this.finishPromiseReject = reject;
13
+ });
14
+ }
15
+ // returns true if the function emitted a new fingerprint packet
16
+ fingerprintPacker(fingerprint) {
17
+ // When the fingerprint of one file is bigger than 64Kb, truncate to the last 64Kb line.
18
+ if (fingerprint.length > this.scannerCfg.WFP_FILE_MAX_SIZE) {
19
+ let truncateStringOnIndex = this.scannerCfg.WFP_FILE_MAX_SIZE;
20
+ let keepRemovingCharacters = true;
21
+ while (keepRemovingCharacters) {
22
+ if (fingerprint[truncateStringOnIndex] === '\n')
23
+ keepRemovingCharacters = false;
24
+ truncateStringOnIndex -= 1;
25
+ }
26
+ truncateStringOnIndex += 1;
27
+ // eslint-disable-next-line no-param-reassign
28
+ fingerprint = fingerprint.substring(0, truncateStringOnIndex);
29
+ // eslint-disable-next-line no-param-reassign
30
+ fingerprint += '\n';
31
+ }
32
+ if (this.wfp.length + fingerprint.length >= this.scannerCfg.WFP_FILE_MAX_SIZE && this.wfp.length > 0) {
33
+ this.sendFingerprint(new FingerprintPackage(this.wfp, this.folderRoot));
34
+ this.wfp = '';
35
+ }
36
+ this.wfp += fingerprint;
37
+ if (this.wfp !== fingerprint)
38
+ return false;
39
+ return true;
40
+ }
41
+ finishWinnowing() {
42
+ if (this.wfp.length !== 0)
43
+ this.sendFingerprint(new FingerprintPackage(this.wfp, this.folderRoot));
44
+ this.pendingFiles = false;
45
+ this.emit(ScannerEvents.WINNOWING_FINISHED);
46
+ this.finishPromiseResolve();
47
+ }
48
+ sendFingerprint(fingerprintPackage) {
49
+ this.emit(ScannerEvents.WINNOWING_NEW_CONTENT, fingerprintPackage);
50
+ }
51
+ sendLog(logMsg) {
52
+ this.emit(ScannerEvents.WINNOWER_LOG, logMsg);
53
+ }
54
+ sendError(errorMsg) {
55
+ this.emit(ScannerEvents.ERROR, new Error(errorMsg));
56
+ this.finishPromiseReject();
57
+ }
58
+ setWinnowingMode(mode) {
59
+ this.winnowingMode = mode;
60
+ }
61
+ hasPendingFiles() {
62
+ return this.pendingFiles;
63
+ }
64
+ }
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV2ZwUHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvc2RrL3NjYW5uZXIvV2ZwUHJvdmlkZXIvV2ZwUHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUV0QyxPQUFPLEVBQUUsYUFBYSxFQUFnQixhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQVUxRCxNQUFNLE9BQWdCLFdBQVksU0FBUSxZQUFZO0lBYzFDLElBQUk7UUFDWixJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUNkLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDLGNBQWMsQ0FBQztRQUVsRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ25ELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxPQUFPLENBQUM7WUFDcEMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLE1BQU0sQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztJQUVMLENBQUM7SUFFRCxnRUFBZ0U7SUFDdEQsaUJBQWlCLENBQUMsV0FBbUI7UUFDN0Msd0ZBQXdGO1FBQ3hGLElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixFQUFFO1lBQzFELElBQUkscUJBQXFCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQztZQUM5RCxJQUFJLHNCQUFzQixHQUFHLElBQUksQ0FBQztZQUNsQyxPQUFPLHNCQUFzQixFQUFFO2dCQUM3QixJQUFJLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLElBQUk7b0JBQUUsc0JBQXNCLEdBQUcsS0FBSyxDQUFDO2dCQUNoRixxQkFBcUIsSUFBSSxDQUFDLENBQUM7YUFDNUI7WUFDRCxxQkFBcUIsSUFBSSxDQUFDLENBQUM7WUFDM0IsNkNBQTZDO1lBQzdDLFdBQVcsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO1lBQzlELDZDQUE2QztZQUM3QyxXQUFXLElBQUksSUFBSSxDQUFDO1NBQ3JCO1FBRUQsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3BHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQ3hFLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO1NBQ2Y7UUFDRCxJQUFJLENBQUMsR0FBRyxJQUFJLFdBQVcsQ0FBQztRQUV4QixJQUFHLElBQUksQ0FBQyxHQUFHLEtBQUssV0FBVztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQzFDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVTLGVBQWU7UUFDdkIsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDbkcsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBR1MsZUFBZSxDQUFDLGtCQUFzQztRQUM5RCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFUyxPQUFPLENBQUMsTUFBYztRQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVTLFNBQVMsQ0FBQyxRQUFnQjtRQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRVMsZ0JBQWdCLENBQUMsSUFBbUI7UUFDNUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7SUFDNUIsQ0FBQztJQVNNLGVBQWU7UUFDcEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7Q0FFRiJ9
@@ -0,0 +1,21 @@
1
+ import { IWfpProviderInput, WfpProvider } from "../WfpProvider";
2
+ import { ScannerCfg } from "../../ScannerCfg";
3
+ export declare class WfpSplitter extends WfpProvider {
4
+ private continue;
5
+ private wfpStream;
6
+ private chunkDataRead;
7
+ private fingerprints;
8
+ private fingerprintIndex;
9
+ private timer;
10
+ private ignoreFiles;
11
+ constructor(scannerCfg?: ScannerCfg);
12
+ start(params: IWfpProviderInput): Promise<void>;
13
+ stop(): void;
14
+ pause(): void;
15
+ resume(): void;
16
+ private sendFingerprints;
17
+ private stopSendFingerprints;
18
+ private streamBufferFlush;
19
+ private setStreamListeners;
20
+ private splitFingerprints;
21
+ }