cnpmcore 0.0.2 → 1.2.0

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 (243) hide show
  1. package/History.md +19 -0
  2. package/LICENSE +1 -1
  3. package/README.md +13 -4
  4. package/dist/app/common/AbstractService.d.ts +5 -0
  5. package/dist/app/{port/type/BaseController.js → common/AbstractService.js} +11 -9
  6. package/dist/app/common/FileUtil.d.ts +15 -0
  7. package/dist/app/common/FileUtil.js +77 -0
  8. package/dist/app/common/PackageUtil.d.ts +9 -0
  9. package/dist/app/common/PackageUtil.js +38 -16
  10. package/dist/app/common/SyncUtil.d.ts +2 -0
  11. package/dist/app/common/SyncUtil.js +17 -0
  12. package/dist/app/common/UserUtil.d.ts +5 -0
  13. package/dist/app/common/UserUtil.js +72 -0
  14. package/dist/app/common/adapter/BugVersionStore.d.ts +7 -0
  15. package/dist/app/common/adapter/BugVersionStore.js +28 -0
  16. package/dist/app/common/adapter/CacheAdapter.d.ts +13 -0
  17. package/dist/app/common/adapter/CacheAdapter.js +78 -0
  18. package/dist/app/common/adapter/NFSAdapter.d.ts +16 -0
  19. package/dist/app/common/adapter/NFSAdapter.js +62 -22
  20. package/dist/app/common/adapter/NPMRegistry.d.ts +78 -0
  21. package/dist/app/common/adapter/NPMRegistry.js +98 -0
  22. package/dist/app/common/adapter/QueueAdapter.d.ts +7 -0
  23. package/dist/app/common/adapter/QueueAdapter.js +37 -0
  24. package/dist/app/common/adapter/binary/AbstractBinary.d.ts +33 -0
  25. package/dist/app/common/adapter/binary/AbstractBinary.js +76 -0
  26. package/dist/app/common/adapter/binary/ApiBinary.d.ts +8 -0
  27. package/dist/app/common/adapter/binary/ApiBinary.js +31 -0
  28. package/dist/app/common/adapter/binary/BucketBinary.d.ts +5 -0
  29. package/dist/app/common/adapter/binary/BucketBinary.js +77 -0
  30. package/dist/app/common/adapter/binary/CypressBinary.d.ts +5 -0
  31. package/dist/app/common/adapter/binary/CypressBinary.js +63 -0
  32. package/dist/app/common/adapter/binary/ElectronBinary.d.ts +5 -0
  33. package/dist/app/common/adapter/binary/ElectronBinary.js +44 -0
  34. package/dist/app/common/adapter/binary/GithubBinary.d.ts +7 -0
  35. package/dist/app/common/adapter/binary/GithubBinary.js +93 -0
  36. package/dist/app/common/adapter/binary/ImageminBinary.d.ts +5 -0
  37. package/dist/app/common/adapter/binary/ImageminBinary.js +96 -0
  38. package/dist/app/common/adapter/binary/NodeBinary.d.ts +4 -0
  39. package/dist/app/common/adapter/binary/NodeBinary.js +41 -0
  40. package/dist/app/common/adapter/binary/NodePreGypBinary.d.ts +5 -0
  41. package/dist/app/common/adapter/binary/NodePreGypBinary.js +136 -0
  42. package/dist/app/common/adapter/binary/NwjsBinary.d.ts +6 -0
  43. package/dist/app/common/adapter/binary/NwjsBinary.js +47 -0
  44. package/dist/app/common/adapter/binary/PlaywrightBinary.d.ts +5 -0
  45. package/dist/app/common/adapter/binary/PlaywrightBinary.js +214 -0
  46. package/dist/app/common/adapter/binary/PuppeteerBinary.d.ts +6 -0
  47. package/dist/app/common/adapter/binary/PuppeteerBinary.js +125 -0
  48. package/dist/app/common/adapter/binary/SqlcipherBinary.d.ts +5 -0
  49. package/dist/app/common/adapter/binary/SqlcipherBinary.js +78 -0
  50. package/dist/app/common/aop/AsyncTimer.d.ts +9 -0
  51. package/dist/app/common/aop/AsyncTimer.js +36 -0
  52. package/dist/app/common/constants.d.ts +2 -0
  53. package/dist/app/common/constants.js +6 -0
  54. package/dist/app/common/dayjs.d.ts +2 -0
  55. package/dist/app/common/dayjs.js +10 -0
  56. package/dist/app/common/enum/Task.d.ts +12 -0
  57. package/dist/app/common/enum/Task.js +18 -0
  58. package/dist/app/common/enum/User.d.ts +5 -0
  59. package/dist/app/common/enum/User.js +10 -0
  60. package/dist/app/common/typing.d.ts +28 -0
  61. package/dist/app/common/typing.js +3 -0
  62. package/dist/app/core/entity/Binary.d.ts +28 -0
  63. package/dist/app/core/entity/Binary.js +29 -0
  64. package/dist/app/core/entity/BugVersion.d.ts +14 -0
  65. package/dist/app/core/entity/BugVersion.js +43 -0
  66. package/dist/app/core/entity/Change.d.ts +17 -0
  67. package/dist/app/core/entity/Change.js +20 -0
  68. package/dist/app/core/entity/Dist.d.ts +21 -0
  69. package/dist/app/core/entity/Dist.js +1 -2
  70. package/dist/app/core/entity/Entity.d.ts +11 -0
  71. package/dist/app/core/entity/Entity.js +3 -3
  72. package/dist/app/core/entity/Package.d.ts +45 -0
  73. package/dist/app/core/entity/Package.js +33 -25
  74. package/dist/app/core/entity/PackageTag.d.ts +17 -0
  75. package/dist/app/core/entity/PackageVersion.d.ts +26 -0
  76. package/dist/app/core/entity/PackageVersionBlock.d.ts +17 -0
  77. package/dist/app/core/entity/PackageVersionBlock.js +20 -0
  78. package/dist/app/core/entity/PackageVersionManifest.d.ts +17 -0
  79. package/dist/app/core/entity/PackageVersionManifest.js +20 -0
  80. package/dist/app/core/entity/Task.d.ts +43 -0
  81. package/dist/app/core/entity/Task.js +94 -0
  82. package/dist/app/core/entity/Token.d.ts +24 -0
  83. package/dist/app/core/entity/Token.js +23 -0
  84. package/dist/app/core/entity/User.d.ts +25 -0
  85. package/dist/app/core/entity/User.js +24 -0
  86. package/dist/app/core/event/BugVersionFixHandler.d.ts +6 -0
  87. package/dist/app/core/event/BugVersionFixHandler.js +42 -0
  88. package/dist/app/core/event/CacheCleaner.d.ts +38 -0
  89. package/dist/app/core/event/CacheCleaner.js +119 -0
  90. package/dist/app/core/event/ChangesStream.d.ts +32 -0
  91. package/dist/app/core/event/ChangesStream.js +106 -0
  92. package/dist/app/core/event/StoreManifest.d.ts +11 -0
  93. package/dist/app/core/event/StoreManifest.js +54 -0
  94. package/dist/app/core/event/index.d.ts +27 -0
  95. package/dist/app/core/event/index.js +11 -3
  96. package/dist/app/core/service/BinarySyncerService.d.ts +23 -0
  97. package/dist/app/core/service/BinarySyncerService.js +281 -0
  98. package/dist/app/core/service/BugVersionService.d.ts +11 -0
  99. package/dist/app/core/service/BugVersionService.js +86 -0
  100. package/dist/app/core/service/CacheService.d.ts +33 -0
  101. package/dist/app/core/service/CacheService.js +75 -0
  102. package/dist/app/core/service/ChangesStreamService.d.ts +11 -0
  103. package/dist/app/core/service/ChangesStreamService.js +186 -0
  104. package/dist/app/core/service/PackageManagerService.d.ts +83 -0
  105. package/dist/app/core/service/PackageManagerService.js +675 -78
  106. package/dist/app/core/service/PackageSyncerService.d.ts +24 -0
  107. package/dist/app/core/service/PackageSyncerService.js +667 -0
  108. package/dist/app/core/service/TaskService.d.ts +22 -0
  109. package/dist/app/core/service/TaskService.js +142 -0
  110. package/dist/app/core/service/UserService.d.ts +36 -0
  111. package/dist/app/core/service/UserService.js +120 -0
  112. package/dist/app/core/util/EntityUtil.d.ts +8 -0
  113. package/dist/app/core/util/EntityUtil.js +3 -3
  114. package/dist/app/infra/NFSClientAdapter.d.ts +18 -0
  115. package/dist/app/infra/NFSClientAdapter.js +74 -0
  116. package/dist/app/infra/package.json +6 -0
  117. package/dist/app/port/UserRoleManager.d.ts +24 -0
  118. package/dist/app/port/UserRoleManager.js +146 -0
  119. package/dist/app/port/controller/AbstractController.d.ts +32 -0
  120. package/dist/app/port/controller/AbstractController.js +112 -0
  121. package/dist/app/port/controller/BinarySyncController.d.ts +36 -0
  122. package/dist/app/port/controller/BinarySyncController.js +123 -0
  123. package/dist/app/port/controller/ChangesStreamController.d.ts +13 -0
  124. package/dist/app/port/controller/ChangesStreamController.js +53 -0
  125. package/dist/app/port/controller/DownloadController.d.ts +18 -0
  126. package/dist/app/port/controller/DownloadController.js +134 -0
  127. package/dist/app/port/controller/HomeController.d.ts +37 -0
  128. package/dist/app/port/controller/HomeController.js +72 -0
  129. package/dist/app/port/controller/PackageBlockController.d.ts +24 -0
  130. package/dist/app/port/controller/PackageBlockController.js +108 -0
  131. package/dist/app/port/controller/PackageSyncController.d.ts +35 -0
  132. package/dist/app/port/controller/PackageSyncController.js +205 -0
  133. package/dist/app/port/controller/PackageTagController.d.ts +12 -0
  134. package/dist/app/port/controller/PackageTagController.js +88 -0
  135. package/dist/app/port/controller/TokenController.d.ts +38 -0
  136. package/dist/app/port/controller/TokenController.js +125 -0
  137. package/dist/app/port/controller/UserController.d.ts +39 -0
  138. package/dist/app/port/controller/UserController.js +223 -0
  139. package/dist/app/port/controller/package/DownloadPackageVersionTar.d.ts +9 -0
  140. package/dist/app/port/controller/package/DownloadPackageVersionTar.js +82 -0
  141. package/dist/app/port/controller/package/RemovePackageVersionController.d.ts +8 -0
  142. package/dist/app/port/controller/package/RemovePackageVersionController.js +56 -0
  143. package/dist/app/port/controller/package/SavePackageVersionController.d.ts +48 -0
  144. package/dist/app/port/controller/package/SavePackageVersionController.js +221 -0
  145. package/dist/app/port/controller/package/ShowPackageController.d.ts +8 -0
  146. package/dist/app/port/controller/package/ShowPackageController.js +99 -0
  147. package/dist/app/port/controller/package/ShowPackageVersionController.d.ts +6 -0
  148. package/dist/app/port/controller/package/ShowPackageVersionController.js +55 -0
  149. package/dist/app/port/controller/package/UpdatePackageController.d.ts +17 -0
  150. package/dist/app/port/controller/package/UpdatePackageController.js +68 -0
  151. package/dist/app/port/middleware/AlwaysAuth.d.ts +2 -0
  152. package/dist/app/port/middleware/AlwaysAuth.js +17 -0
  153. package/dist/app/port/middleware/ErrorHandler.d.ts +2 -0
  154. package/dist/app/port/middleware/ErrorHandler.js +27 -5
  155. package/dist/app/port/middleware/Tracing.d.ts +2 -0
  156. package/dist/app/port/middleware/Tracing.js +22 -0
  157. package/dist/app/port/middleware/index.d.ts +2 -0
  158. package/dist/app/port/middleware/index.js +22 -0
  159. package/dist/app/port/typebox.d.ts +29 -0
  160. package/dist/app/port/typebox.js +71 -0
  161. package/dist/app/repository/AbstractRepository.d.ts +4 -0
  162. package/dist/app/repository/AbstractRepository.js +17 -0
  163. package/dist/app/repository/BinaryRepository.d.ts +7 -0
  164. package/dist/app/repository/BinaryRepository.js +45 -0
  165. package/dist/app/repository/ChangeRepository.d.ts +8 -0
  166. package/dist/app/repository/ChangeRepository.js +31 -0
  167. package/dist/app/repository/DistRepository.d.ts +15 -0
  168. package/dist/app/repository/DistRepository.js +69 -0
  169. package/dist/app/repository/PackageRepository.d.ts +39 -0
  170. package/dist/app/repository/PackageRepository.js +223 -36
  171. package/dist/app/repository/PackageVersionBlockRepository.d.ts +10 -0
  172. package/dist/app/repository/PackageVersionBlockRepository.js +51 -0
  173. package/dist/app/repository/PackageVersionDownloadRepository.d.ts +7 -0
  174. package/dist/app/repository/PackageVersionDownloadRepository.js +77 -0
  175. package/dist/app/repository/TaskRepository.d.ts +10 -0
  176. package/dist/app/repository/TaskRepository.js +82 -0
  177. package/dist/app/repository/UserRepository.d.ts +15 -0
  178. package/dist/app/repository/UserRepository.js +81 -0
  179. package/dist/app/repository/model/Binary.d.ts +13 -0
  180. package/dist/app/repository/model/Binary.js +53 -0
  181. package/dist/app/repository/model/Change.d.ts +10 -0
  182. package/dist/app/repository/model/Change.js +44 -0
  183. package/dist/app/repository/model/Dist.d.ts +12 -0
  184. package/dist/app/repository/model/Dist.js +10 -13
  185. package/dist/app/repository/model/HistoryTask.d.ts +18 -0
  186. package/dist/app/repository/model/HistoryTask.js +65 -0
  187. package/dist/app/repository/model/Maintainer.d.ts +8 -0
  188. package/dist/app/repository/model/Maintainer.js +36 -0
  189. package/dist/app/repository/model/Package.d.ts +13 -0
  190. package/dist/app/repository/model/Package.js +18 -9
  191. package/dist/app/repository/model/PackageDep.d.ts +11 -0
  192. package/dist/app/repository/model/PackageDep.js +9 -9
  193. package/dist/app/repository/model/PackageTag.d.ts +10 -0
  194. package/dist/app/repository/model/PackageTag.js +9 -9
  195. package/dist/app/repository/model/PackageVersion.d.ts +14 -0
  196. package/dist/app/repository/model/PackageVersion.js +9 -9
  197. package/dist/app/repository/model/PackageVersionBlock.d.ts +10 -0
  198. package/dist/app/repository/model/PackageVersionBlock.js +44 -0
  199. package/dist/app/repository/model/PackageVersionDownload.d.ts +40 -0
  200. package/dist/app/repository/model/PackageVersionDownload.js +132 -0
  201. package/dist/app/repository/model/PackageVersionManifest.d.ts +10 -0
  202. package/dist/app/repository/model/PackageVersionManifest.js +46 -0
  203. package/dist/app/repository/model/Task.d.ts +18 -0
  204. package/dist/app/repository/model/Task.js +65 -0
  205. package/dist/app/repository/model/Token.d.ts +13 -0
  206. package/dist/app/repository/model/Token.js +55 -0
  207. package/dist/app/repository/model/User.d.ts +14 -0
  208. package/dist/app/repository/model/User.js +56 -0
  209. package/dist/app/repository/util/EntityProperty.d.ts +1 -0
  210. package/dist/app/repository/util/ModelConvertor.d.ts +7 -0
  211. package/dist/app/repository/util/ModelConvertor.js +35 -2
  212. package/dist/app/repository/util/ModelConvertorUtil.d.ts +8 -0
  213. package/dist/app/schedule/ChangesStreamWorker.d.ts +8 -0
  214. package/dist/app/schedule/ChangesStreamWorker.js +27 -0
  215. package/dist/app/schedule/CheckRecentlyUpdatedPackages.d.ts +8 -0
  216. package/dist/app/schedule/CheckRecentlyUpdatedPackages.js +66 -0
  217. package/dist/app/schedule/CleanTempDir.d.ts +8 -0
  218. package/dist/app/schedule/CleanTempDir.js +48 -0
  219. package/dist/app/schedule/CreateSyncBinaryTask.d.ts +8 -0
  220. package/dist/app/schedule/CreateSyncBinaryTask.js +34 -0
  221. package/dist/app/schedule/SavePackageVersionDownloadCounter.d.ts +8 -0
  222. package/dist/app/schedule/SavePackageVersionDownloadCounter.js +21 -0
  223. package/dist/app/schedule/SyncBinaryWorker.d.ts +8 -0
  224. package/dist/app/schedule/SyncBinaryWorker.js +30 -0
  225. package/dist/app/schedule/SyncPackageWorker.d.ts +8 -0
  226. package/dist/app/schedule/SyncPackageWorker.js +44 -0
  227. package/dist/app/schedule/TaskTimeoutHandler.d.ts +9 -0
  228. package/dist/app/schedule/TaskTimeoutHandler.js +27 -0
  229. package/dist/app/schedule/UpdateTotalData.d.ts +9 -0
  230. package/dist/app/schedule/UpdateTotalData.js +103 -0
  231. package/dist/app.d.ts +11 -0
  232. package/dist/app.js +22 -0
  233. package/dist/config/binaries.d.ts +38 -0
  234. package/dist/config/binaries.js +810 -0
  235. package/dist/config/config.default.d.ts +3 -0
  236. package/dist/config/config.default.js +128 -9
  237. package/dist/config/config.unittest.d.ts +3 -0
  238. package/dist/config/config.unittest.js +18 -0
  239. package/dist/config/plugin.d.ts +3 -0
  240. package/dist/config/plugin.js +19 -3
  241. package/package.json +76 -21
  242. package/dist/app/common/adapter/NFSClientAdapter.js +0 -43
  243. package/dist/app/port/controller/PackageController.js +0 -273
@@ -0,0 +1,810 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SyncerClass = void 0;
4
+ var SyncerClass;
5
+ (function (SyncerClass) {
6
+ SyncerClass["NwjsBinary"] = "NwjsBinary";
7
+ SyncerClass["NodeBinary"] = "NodeBinary";
8
+ SyncerClass["CypressBinary"] = "CypressBinary";
9
+ SyncerClass["BucketBinary"] = "BucketBinary";
10
+ SyncerClass["GithubBinary"] = "GithubBinary";
11
+ SyncerClass["ElectronBinary"] = "ElectronBinary";
12
+ SyncerClass["SqlcipherBinary"] = "SqlcipherBinary";
13
+ SyncerClass["PuppeteerBinary"] = "PuppeteerBinary";
14
+ SyncerClass["NodePreGypBinary"] = "NodePreGypBinary";
15
+ SyncerClass["ImageminBinary"] = "ImageminBinary";
16
+ SyncerClass["PlaywrightBinary"] = "PlaywrightBinary";
17
+ })(SyncerClass = exports.SyncerClass || (exports.SyncerClass = {}));
18
+ const binaries = {
19
+ // NwjsBinary
20
+ nwjs: {
21
+ category: 'nwjs',
22
+ description: 'NW.js (previously known as node-webkit) lets you call all Node.js modules directly from DOM and enables a new way of writing applications with all Web technologies.',
23
+ syncer: SyncerClass.NwjsBinary,
24
+ repo: 'nwjs/nw.js',
25
+ distUrl: 'https://dl.nwjs.io/',
26
+ },
27
+ // NodeBinary
28
+ node: {
29
+ category: 'node',
30
+ description: 'Node.js® is a JavaScript runtime built on Chrome\'s V8 JavaScript engine.',
31
+ syncer: SyncerClass.NodeBinary,
32
+ repo: 'nodejs/node',
33
+ distUrl: 'https://nodejs.org/dist',
34
+ },
35
+ 'node-rc': {
36
+ category: 'node-rc',
37
+ description: 'Node.js Release Candidate',
38
+ syncer: SyncerClass.NodeBinary,
39
+ repo: 'nodejs/node',
40
+ distUrl: 'https://nodejs.org/download/rc',
41
+ },
42
+ 'node-nightly': {
43
+ category: 'node-nightly',
44
+ description: 'Node.js Nightly Build',
45
+ syncer: SyncerClass.NodeBinary,
46
+ repo: 'nodejs/node',
47
+ distUrl: 'https://nodejs.org/download/nightly',
48
+ },
49
+ 'node-unofficial-builds': {
50
+ category: 'node-unofficial-builds',
51
+ description: 'Node.js unofficial-builds project https://unofficial-builds.nodejs.org/',
52
+ syncer: SyncerClass.NodeBinary,
53
+ repo: 'nodejs/unofficial-builds',
54
+ distUrl: 'https://unofficial-builds.nodejs.org/download/release',
55
+ },
56
+ alinode: {
57
+ category: 'alinode',
58
+ description: 'Node.js 性能平台(Node.js Performance Platform)是面向中大型 Node.js 应用提供性能监控、安全提醒、故障排查、性能优化等服务的整体性解决方案。凭借对 Node.js 内核深入的理解,我们提供完善的工具链和服务,协助客户主动、快速发现和定位线上问题。',
59
+ syncer: SyncerClass.NodeBinary,
60
+ repo: '',
61
+ distUrl: 'http://alinode.aliyun.com/dist/new-alinode',
62
+ },
63
+ python: {
64
+ category: 'python',
65
+ description: 'The Python programming language https://www.python.org/',
66
+ syncer: SyncerClass.NodeBinary,
67
+ repo: 'python/cpython',
68
+ distUrl: 'https://www.python.org/ftp/python',
69
+ ignoreFiles: [
70
+ '/src/Python-1.6.tar.gz',
71
+ ],
72
+ },
73
+ // CypressBinary
74
+ cypress: {
75
+ category: 'cypress',
76
+ description: 'Fast, easy and reliable testing for anything that runs in a browser.',
77
+ syncer: SyncerClass.CypressBinary,
78
+ repo: 'cypress-io/cypress',
79
+ distUrl: 'https://www.cypress.io/',
80
+ },
81
+ // SqlcipherBinary
82
+ '@journeyapps/sqlcipher': {
83
+ category: '@journeyapps/sqlcipher',
84
+ description: 'SQLCipher bindings for Node',
85
+ syncer: SyncerClass.SqlcipherBinary,
86
+ repo: 'journeyapps/node-sqlcipher',
87
+ distUrl: 'https://journeyapps-node-binary.s3.amazonaws.com',
88
+ },
89
+ // PuppeteerBinary
90
+ 'chromium-browser-snapshots': {
91
+ category: 'chromium-browser-snapshots',
92
+ description: 'chromium-browser-snapshots sync for puppeteer',
93
+ syncer: SyncerClass.PuppeteerBinary,
94
+ repo: 'puppeteer/puppeteer',
95
+ distUrl: 'https://chromium-browser-snapshots.storage.googleapis.com/?delimiter=/&prefix=',
96
+ },
97
+ // NodePreGypBinary
98
+ 'grpc-tools': {
99
+ category: 'grpc-tools',
100
+ description: 'Tools for developing with gRPC on Node.js',
101
+ syncer: SyncerClass.NodePreGypBinary,
102
+ repo: 'https://github.com/grpc/grpc-node/blob/master/packages/grpc-tools/',
103
+ distUrl: 'https://node-precompiled-binaries.grpc.io',
104
+ },
105
+ grpc: {
106
+ category: 'grpc',
107
+ description: 'gRPC Library for Node',
108
+ syncer: SyncerClass.NodePreGypBinary,
109
+ repo: 'grpc/grpc-node',
110
+ distUrl: 'https://node-precompiled-binaries.grpc.io',
111
+ },
112
+ nodegit: {
113
+ category: 'nodegit',
114
+ description: 'Native Node bindings to Git.',
115
+ syncer: SyncerClass.NodePreGypBinary,
116
+ repo: 'nodegit/nodegit',
117
+ distUrl: 'https://axonodegit.s3.amazonaws.com/nodegit',
118
+ options: {
119
+ nodeArchs: {
120
+ linux: ['x64'],
121
+ darwin: ['x64'],
122
+ // https://github.com/nodegit/nodegit/blob/master/.github/workflows/tests.yml#L141
123
+ win32: ['x64', 'ia32'],
124
+ },
125
+ },
126
+ // don't sync it for now
127
+ disable: true,
128
+ },
129
+ // BucketBinary
130
+ chromedriver: {
131
+ category: 'chromedriver',
132
+ description: 'WebDriver is an open source tool for automated testing of webapps across many browsers',
133
+ syncer: SyncerClass.BucketBinary,
134
+ repo: 'https://chromedriver.chromium.org/contributing',
135
+ distUrl: 'https://chromedriver.storage.googleapis.com/',
136
+ },
137
+ selenium: {
138
+ category: 'selenium',
139
+ description: 'Selenium automates browsers. That\'s it!',
140
+ syncer: SyncerClass.BucketBinary,
141
+ repo: 'https://www.selenium.dev/',
142
+ distUrl: 'https://selenium-release.storage.googleapis.com/',
143
+ },
144
+ 'node-inspector': {
145
+ category: 'node-inspector',
146
+ description: 'Node.js debugger based on Blink Developer Tools',
147
+ syncer: SyncerClass.BucketBinary,
148
+ repo: 'node-inspector/node-inspector',
149
+ distUrl: 'https://node-inspector.s3.amazonaws.com/',
150
+ ignoreDirs: [
151
+ '/AWSLogs/',
152
+ ],
153
+ },
154
+ fsevents: {
155
+ category: 'fsevents',
156
+ description: 'Native access to MacOS FSEvents in Node.js',
157
+ syncer: SyncerClass.BucketBinary,
158
+ repo: 'fsevents/fsevents',
159
+ distUrl: 'https://fsevents-binaries.s3-us-west-2.amazonaws.com/',
160
+ },
161
+ 'tfjs-models': {
162
+ category: 'tfjs-models',
163
+ description: 'Pretrained models for TensorFlow.js',
164
+ syncer: SyncerClass.BucketBinary,
165
+ repo: 'tensorflow/tfjs-models',
166
+ distUrl: 'https://tfjs-models.storage.googleapis.com/',
167
+ },
168
+ tensorflow: {
169
+ category: 'tensorflow',
170
+ description: 'A WebGL accelerated JavaScript library for training and deploying ML models.',
171
+ syncer: SyncerClass.BucketBinary,
172
+ repo: 'tensorflow/tfjs',
173
+ distUrl: 'https://tensorflow.storage.googleapis.com/',
174
+ },
175
+ 'tf-builds': {
176
+ category: 'tf-builds',
177
+ description: 'A WebGL accelerated JavaScript library for training and deploying ML models.',
178
+ syncer: SyncerClass.BucketBinary,
179
+ repo: 'tensorflow/tfjs',
180
+ distUrl: 'https://tf-builds.storage.googleapis.com/',
181
+ },
182
+ prisma: {
183
+ category: 'prisma',
184
+ description: 'Next-generation ORM for Node.js & TypeScript | PostgreSQL, MySQL, MariaDB, SQL Server, SQLite & MongoDB (Preview) https://www.prisma.io/',
185
+ syncer: SyncerClass.BucketBinary,
186
+ repo: 'prisma/prisma',
187
+ distUrl: 'https://prisma-builds.s3-eu-west-1.amazonaws.com/',
188
+ ignoreDirs: [
189
+ // https://prisma-builds.s3-eu-west-1.amazonaws.com/?delimiter=/&prefix=
190
+ // https://github.com/cnpm/cnpmcore/issues/209
191
+ // need all_commits dir on 3.12.0
192
+ // '/all_commits/',
193
+ '/build_testruns/',
194
+ '/bump_engineer/',
195
+ '/m1_builds/',
196
+ '/master/',
197
+ '/ci/',
198
+ '/unreverse/',
199
+ '/signature_test_run/',
200
+ '/sql-server-char-collation-fix/',
201
+ '/test-ldd-output-on-release/',
202
+ '/windows-mysql-ci/',
203
+ ],
204
+ },
205
+ // ImageminBinary
206
+ 'jpegtran-bin': {
207
+ category: 'jpegtran-bin',
208
+ description: 'jpegtran bin-wrapper that makes it seamlessly available as a local dependency',
209
+ syncer: SyncerClass.ImageminBinary,
210
+ repo: 'imagemin/jpegtran-bin',
211
+ distUrl: 'https://raw.githubusercontent.com',
212
+ options: {
213
+ // https://github.com/imagemin/jpegtran-bin/blob/v4.0.0/lib/index.js
214
+ nodePlatforms: ['macos', 'linux', 'freebsd', 'sunos', 'win'],
215
+ nodeArchs: {
216
+ macos: [],
217
+ linux: ['x86', 'x64'],
218
+ freebsd: ['x86', 'x64'],
219
+ sunos: ['x86', 'x64'],
220
+ win: ['x86', 'x64'],
221
+ },
222
+ binFiles: {
223
+ macos: ['jpegtran'],
224
+ linux: ['jpegtran'],
225
+ freebsd: ['jpegtran'],
226
+ sunos: ['jpegtran'],
227
+ win: ['jpegtran.exe', 'libjpeg-62.dll'],
228
+ },
229
+ },
230
+ },
231
+ 'pngquant-bin': {
232
+ category: 'pngquant-bin',
233
+ description: 'pngquant bin-wrapper that makes it seamlessly available as a local dependency',
234
+ syncer: SyncerClass.ImageminBinary,
235
+ repo: 'imagemin/pngquant-bin',
236
+ distUrl: 'https://raw.githubusercontent.com',
237
+ options: {
238
+ // https://github.com/imagemin/pngquant-bin/blob/v4.0.0/lib/index.js
239
+ nodePlatforms: ['macos', 'linux', 'freebsd', 'win'],
240
+ nodeArchs: {
241
+ macos: [],
242
+ linux: ['x86', 'x64'],
243
+ freebsd: ['x64'],
244
+ win: [],
245
+ },
246
+ binFiles: {
247
+ macos: ['pngquant'],
248
+ linux: ['pngquant'],
249
+ freebsd: ['pngquant'],
250
+ win: ['pngquant.exe'],
251
+ },
252
+ },
253
+ },
254
+ 'mozjpeg-bin': {
255
+ category: 'mozjpeg-bin',
256
+ description: 'mozjpeg bin-wrapper that makes it seamlessly available as a local dependency',
257
+ syncer: SyncerClass.ImageminBinary,
258
+ repo: 'imagemin/mozjpeg-bin',
259
+ distUrl: 'https://raw.githubusercontent.com',
260
+ options: {
261
+ // should use https://www.npmjs.com/package/mozjpeg
262
+ npmPackageName: 'mozjpeg',
263
+ // https://github.com/imagemin/mozjpeg-bin/blob/v4.0.0/lib/index.js
264
+ // https://github.com/imagemin/mozjpeg-bin/blob/v5.0.0/lib/index.js
265
+ nodePlatforms: ['osx', 'macos', 'linux', 'win'],
266
+ nodeArchs: {
267
+ osx: [],
268
+ macos: [],
269
+ linux: [],
270
+ win: [],
271
+ },
272
+ binFiles: {
273
+ osx: ['cjpeg'],
274
+ macos: ['cjpeg'],
275
+ linux: ['cjpeg'],
276
+ win: ['cjpeg.exe'],
277
+ },
278
+ },
279
+ },
280
+ 'gifsicle-bin': {
281
+ category: 'gifsicle-bin',
282
+ description: 'gifsicle bin-wrapper that makes it seamlessly available as a local dependency',
283
+ syncer: SyncerClass.ImageminBinary,
284
+ repo: 'imagemin/gifsicle-bin',
285
+ distUrl: 'https://raw.githubusercontent.com',
286
+ options: {
287
+ // should use https://www.npmjs.com/package/gifsicle
288
+ npmPackageName: 'gifsicle',
289
+ // https://github.com/imagemin/gifsicle-bin/blob/v4.0.0/lib/index.js
290
+ // https://github.com/imagemin/gifsicle-bin/blob/v5.0.0/lib/index.js
291
+ nodePlatforms: ['macos', 'linux', 'freebsd', 'win'],
292
+ nodeArchs: {
293
+ macos: [],
294
+ linux: ['x86', 'x64'],
295
+ freebsd: ['x86', 'x64'],
296
+ win: ['x86', 'x64'],
297
+ },
298
+ binFiles: {
299
+ macos: ['gifsicle'],
300
+ linux: ['gifsicle'],
301
+ freebsd: ['gifsicle'],
302
+ win: ['gifsicle.exe'],
303
+ },
304
+ },
305
+ },
306
+ 'optipng-bin': {
307
+ category: 'optipng-bin',
308
+ description: 'optipng bin-wrapper that makes it seamlessly available as a local dependency',
309
+ syncer: SyncerClass.ImageminBinary,
310
+ repo: 'imagemin/optipng-bin',
311
+ distUrl: 'https://raw.githubusercontent.com',
312
+ options: {
313
+ // https://github.com/imagemin/optipng-bin/blob/v4.0.0/lib/index.js
314
+ // https://github.com/imagemin/optipng-bin/blob/v5.0.0/lib/index.js
315
+ nodePlatforms: ['macos', 'linux', 'freebsd', 'sunos', 'win'],
316
+ nodeArchs: {
317
+ macos: [],
318
+ linux: ['x86', 'x64'],
319
+ freebsd: ['x86', 'x64'],
320
+ sunos: ['x86', 'x64'],
321
+ win: [],
322
+ },
323
+ binFiles: {
324
+ macos: ['optipng'],
325
+ linux: ['optipng'],
326
+ freebsd: ['optipng'],
327
+ sunos: ['optipng'],
328
+ win: ['optipng.exe'],
329
+ },
330
+ },
331
+ },
332
+ 'zopflipng-bin': {
333
+ category: 'zopflipng-bin',
334
+ description: 'zopflipng bin-wrapper that makes it seamlessly available as a local dependency',
335
+ syncer: SyncerClass.ImageminBinary,
336
+ repo: 'imagemin/zopflipng-bin',
337
+ distUrl: 'https://raw.githubusercontent.com',
338
+ options: {
339
+ // https://github.com/imagemin/zopflipng-bin/blob/v4.0.0/lib/index.js
340
+ // https://github.com/imagemin/zopflipng-bin/blob/v5.0.0/lib/index.js
341
+ nodePlatforms: ['osx', 'linux', 'win32'],
342
+ nodeArchs: {
343
+ osx: [],
344
+ linux: [],
345
+ win32: [],
346
+ },
347
+ binFiles: {
348
+ osx: ['zopflipng'],
349
+ linux: ['zopflipng'],
350
+ win32: ['zopflipng.exe'],
351
+ },
352
+ },
353
+ },
354
+ 'jpegoptim-bin': {
355
+ category: 'jpegoptim-bin',
356
+ description: 'jpegoptim bin-wrapper that makes it seamlessly available as a local dependency',
357
+ syncer: SyncerClass.ImageminBinary,
358
+ repo: 'imagemin/jpegoptim-bin',
359
+ distUrl: 'https://raw.githubusercontent.com',
360
+ options: {
361
+ // https://github.com/imagemin/jpegoptim-bin/blob/v4.0.0/lib/index.js
362
+ // https://github.com/imagemin/jpegoptim-bin/blob/v5.0.0/lib/index.js
363
+ nodePlatforms: ['osx', 'linux', 'win32'],
364
+ nodeArchs: {
365
+ osx: [],
366
+ linux: [],
367
+ win32: [],
368
+ },
369
+ binFiles: {
370
+ osx: ['jpegoptim'],
371
+ linux: ['jpegoptim'],
372
+ win32: ['jpegoptim.exe'],
373
+ },
374
+ },
375
+ },
376
+ 'jpeg-recompress-bin': {
377
+ category: 'jpeg-recompress-bin',
378
+ description: 'jpeg-recompress bin-wrapper that makes it seamlessly available as a local dependency',
379
+ syncer: SyncerClass.ImageminBinary,
380
+ repo: 'imagemin/jpeg-recompress-bin',
381
+ distUrl: 'https://raw.githubusercontent.com',
382
+ options: {
383
+ // https://github.com/imagemin/jpeg-recompress-bin/blob/v4.0.0/lib/index.js
384
+ // https://github.com/imagemin/jpeg-recompress-bin/blob/v5.0.0/lib/index.js
385
+ nodePlatforms: ['osx', 'linux', 'win'],
386
+ nodeArchs: {
387
+ osx: [],
388
+ linux: [],
389
+ win: [],
390
+ },
391
+ binFiles: {
392
+ osx: ['jpeg-recompress'],
393
+ linux: ['jpeg-recompress'],
394
+ win: ['jpeg-recompress.exe'],
395
+ },
396
+ },
397
+ },
398
+ 'pngcrush-bin': {
399
+ category: 'pngcrush-bin',
400
+ description: 'pngcrush bin-wrapper that makes it seamlessly available as a local dependency',
401
+ syncer: SyncerClass.ImageminBinary,
402
+ repo: 'imagemin/pngcrush-bin',
403
+ distUrl: 'https://raw.githubusercontent.com',
404
+ options: {
405
+ // https://github.com/imagemin/pngcruss-bin/blob/v4.0.0/lib/index.js
406
+ // https://github.com/imagemin/pngcrush-bin/blob/v5.0.0/lib/index.js
407
+ nodePlatforms: ['osx', 'linux', 'win'],
408
+ nodeArchs: {
409
+ osx: [],
410
+ linux: [],
411
+ win: ['x64', 'x86'],
412
+ },
413
+ binFiles: {
414
+ osx: ['pngcrush'],
415
+ linux: ['pngcrush'],
416
+ win: ['pngcrush.exe'],
417
+ },
418
+ },
419
+ },
420
+ 'pngout-bin': {
421
+ category: 'pngout-bin',
422
+ description: 'pngout bin-wrapper that makes it seamlessly available as a local dependency',
423
+ syncer: SyncerClass.ImageminBinary,
424
+ repo: 'imagemin/pngout-bin',
425
+ distUrl: 'https://raw.githubusercontent.com',
426
+ options: {
427
+ // https://github.com/imagemin/pngout-bin/blob/v4.0.0/lib/index.js
428
+ // https://github.com/imagemin/pngout-bin/blob/v5.0.0/lib/index.js
429
+ nodePlatforms: ['osx', 'linux', 'freebsd', 'win32'],
430
+ nodeArchs: {
431
+ osx: [],
432
+ linux: ['x64', 'x86'],
433
+ freebsd: ['x64', 'x86'],
434
+ win32: [],
435
+ },
436
+ binFiles: {
437
+ osx: ['pngcrush'],
438
+ linux: ['pngcrush'],
439
+ freebsd: ['pngout'],
440
+ win32: ['pngcrush.exe'],
441
+ },
442
+ },
443
+ },
444
+ 'gif2webp-bin': {
445
+ category: 'gif2webp-bin',
446
+ description: 'gif2webp bin-wrapper that makes it seamlessly available as a local dependency',
447
+ syncer: SyncerClass.ImageminBinary,
448
+ repo: 'imagemin/gif2webp-bin',
449
+ distUrl: 'https://raw.githubusercontent.com',
450
+ options: {
451
+ // https://github.com/imagemin/gif2webp-bin/blob/v4.0.0/lib/index.js
452
+ nodePlatforms: ['macos', 'linux', 'win'],
453
+ nodeArchs: {
454
+ macos: [],
455
+ linux: [],
456
+ win: [],
457
+ },
458
+ binFiles: {
459
+ macos: ['gif2webp'],
460
+ linux: ['gif2webp'],
461
+ win: ['gif2webp.exe'],
462
+ },
463
+ },
464
+ },
465
+ 'guetzli-bin': {
466
+ category: 'guetzli-bin',
467
+ description: 'guetzli bin-wrapper that makes it seamlessly available as a local dependency',
468
+ syncer: SyncerClass.ImageminBinary,
469
+ repo: 'imagemin/guetzli-bin',
470
+ distUrl: 'https://raw.githubusercontent.com',
471
+ options: {
472
+ // should use https://www.npmjs.com/package/guetzli
473
+ npmPackageName: 'guetzli',
474
+ // https://github.com/imagemin/guetzli-bin/blob/v4.0.0/lib/index.js
475
+ nodePlatforms: ['macos', 'linux', 'win'],
476
+ nodeArchs: {
477
+ macos: [],
478
+ linux: [],
479
+ win: [],
480
+ },
481
+ binFiles: {
482
+ macos: ['guetzli'],
483
+ linux: ['guetzli'],
484
+ win: ['guetzli.exe'],
485
+ },
486
+ },
487
+ },
488
+ 'advpng-bin': {
489
+ category: 'advpng-bin',
490
+ description: 'advpng bin-wrapper that makes it seamlessly available as a local dependency',
491
+ syncer: SyncerClass.ImageminBinary,
492
+ repo: 'imagemin/advpng-bin',
493
+ distUrl: 'https://raw.githubusercontent.com',
494
+ options: {
495
+ // https://github.com/imagemin/advpng-bin/blob/v4.0.0/lib/index.js
496
+ nodePlatforms: ['osx', 'linux', 'win32'],
497
+ nodeArchs: {
498
+ osx: [],
499
+ linux: [],
500
+ win32: [],
501
+ },
502
+ binFiles: {
503
+ osx: ['advpng'],
504
+ linux: ['advpng'],
505
+ win32: ['advpng.exe'],
506
+ },
507
+ },
508
+ },
509
+ 'cwebp-bin': {
510
+ category: 'cwebp-bin',
511
+ description: 'cwebp bin-wrapper that makes it seamlessly available as a local dependency',
512
+ syncer: SyncerClass.ImageminBinary,
513
+ repo: 'imagemin/cwebp-bin',
514
+ distUrl: 'https://raw.githubusercontent.com',
515
+ options: {
516
+ // https://github.com/imagemin/cwebp-bin/blob/v4.0.0/lib/index.js
517
+ nodePlatforms: ['osx', 'linux', 'win'],
518
+ nodeArchs: {
519
+ osx: [],
520
+ linux: ['x86', 'x64'],
521
+ win: ['x86', 'x64'],
522
+ },
523
+ binFiles: {
524
+ osx: ['cwebp'],
525
+ linux: ['cwebp'],
526
+ win: ['cwebp.exe'],
527
+ },
528
+ },
529
+ },
530
+ // GithubBinary
531
+ npm: {
532
+ category: 'npm',
533
+ description: 'the package manager for JavaScript',
534
+ syncer: SyncerClass.GithubBinary,
535
+ repo: 'npm/cli',
536
+ distUrl: 'https://github.com/npm/cli/releases',
537
+ options: {
538
+ maxPage: 3,
539
+ },
540
+ },
541
+ xprofiler: {
542
+ category: 'xprofiler',
543
+ description: '🌀An addon for node.js, which supporting output performance log and real-time profiling through sampling.',
544
+ syncer: SyncerClass.GithubBinary,
545
+ repo: 'X-Profiler/xprofiler',
546
+ distUrl: 'https://github.com/X-Profiler/xprofiler/releases',
547
+ },
548
+ 'node-sass': {
549
+ category: 'node-sass',
550
+ description: '🌈 Node.js bindings to libsass',
551
+ syncer: SyncerClass.GithubBinary,
552
+ repo: 'sass/node-sass',
553
+ distUrl: 'https://github.com/sass/node-sass/releases',
554
+ },
555
+ 'sass-embedded': {
556
+ category: 'sass-embedded',
557
+ description: 'This is a wrapper for Dart Sass that implements the compiler side of the Embedded Sass protocol.',
558
+ syncer: SyncerClass.GithubBinary,
559
+ repo: 'sass/dart-sass-embedded',
560
+ distUrl: 'https://github.com/sass/dart-sass-embedded/releases',
561
+ },
562
+ electron: {
563
+ category: 'electron',
564
+ description: 'Build cross-platform desktop apps with JavaScript, HTML, and CSS',
565
+ syncer: SyncerClass.ElectronBinary,
566
+ repo: 'electron/electron',
567
+ distUrl: 'https://github.com/electron/electron/releases',
568
+ options: {
569
+ // for sync more old versions
570
+ maxPage: 1,
571
+ },
572
+ },
573
+ 'electron-nightly': {
574
+ category: 'electron-nightly',
575
+ description: 'Build cross-platform desktop apps with JavaScript, HTML, and CSS',
576
+ syncer: SyncerClass.GithubBinary,
577
+ repo: 'electron/nightlies',
578
+ distUrl: 'https://github.com/electron/nightlies/releases',
579
+ options: {
580
+ maxPage: 3,
581
+ },
582
+ },
583
+ 'electron-builder-binaries': {
584
+ category: 'electron-builder-binaries',
585
+ description: 'electron-builder downloads required tools files on demand (e.g. to code sign windows application, to make AppX).',
586
+ syncer: SyncerClass.GithubBinary,
587
+ repo: 'electron-userland/electron-builder-binaries',
588
+ distUrl: 'https://github.com/electron-userland/electron-builder-binaries/releases',
589
+ },
590
+ 'ffmpeg-static': {
591
+ category: 'ffmpeg-static',
592
+ description: 'ffmpeg static binaries for Mac OSX and Linux and Windows',
593
+ syncer: SyncerClass.GithubBinary,
594
+ repo: 'eugeneware/ffmpeg-static',
595
+ distUrl: 'https://github.com/eugeneware/ffmpeg-static/releases',
596
+ },
597
+ canvas: {
598
+ category: 'canvas',
599
+ description: 'Node canvas is a Cairo backed Canvas implementation for NodeJS.',
600
+ syncer: SyncerClass.GithubBinary,
601
+ repo: 'Automattic/node-canvas',
602
+ distUrl: 'https://github.com/Automattic/node-canvas/releases',
603
+ },
604
+ nodejieba: {
605
+ category: 'nodejieba',
606
+ description: '"结巴"中文分词的Node.js版本',
607
+ syncer: SyncerClass.GithubBinary,
608
+ repo: 'yanyiwu/nodejieba',
609
+ distUrl: 'https://github.com/yanyiwu/nodejieba/releases',
610
+ },
611
+ 'git-for-windows': {
612
+ category: 'git-for-windows',
613
+ description: 'A fork of Git containing Windows-specific patches.',
614
+ syncer: SyncerClass.GithubBinary,
615
+ repo: 'git-for-windows/git',
616
+ distUrl: 'https://github.com/git-for-windows/git/releases',
617
+ },
618
+ atom: {
619
+ category: 'atom',
620
+ description: 'The hackable text editor',
621
+ syncer: SyncerClass.GithubBinary,
622
+ repo: 'atom/atom',
623
+ distUrl: 'https://github.com/atom/atom/releases',
624
+ },
625
+ operadriver: {
626
+ category: 'operadriver',
627
+ description: 'OperaDriver for Chromium-based Opera releases',
628
+ syncer: SyncerClass.GithubBinary,
629
+ repo: 'operasoftware/operachromiumdriver',
630
+ distUrl: 'https://github.com/operasoftware/operachromiumdriver/releases',
631
+ },
632
+ geckodriver: {
633
+ category: 'geckodriver',
634
+ description: 'WebDriver for Firefox',
635
+ syncer: SyncerClass.GithubBinary,
636
+ repo: 'mozilla/geckodriver',
637
+ distUrl: 'https://github.com/mozilla/geckodriver/releases',
638
+ },
639
+ leveldown: {
640
+ category: 'leveldown',
641
+ description: 'Pure C++ Node.js LevelDB binding. An abstract-leveldown compliant store.',
642
+ syncer: SyncerClass.GithubBinary,
643
+ repo: 'Level/leveldown',
644
+ distUrl: 'https://github.com/Level/leveldown/releases',
645
+ },
646
+ couchbase: {
647
+ category: 'couchbase',
648
+ description: 'Couchbase Node.js Client Library (Official)',
649
+ syncer: SyncerClass.GithubBinary,
650
+ repo: 'couchbase/couchnode',
651
+ distUrl: 'https://github.com/couchbase/couchnode/releases',
652
+ },
653
+ gl: {
654
+ category: 'gl',
655
+ description: '🎃 Windowless WebGL for node.js',
656
+ syncer: SyncerClass.GithubBinary,
657
+ repo: 'stackgl/headless-gl',
658
+ distUrl: 'https://github.com/stackgl/headless-gl/releases',
659
+ },
660
+ flow: {
661
+ category: 'flow',
662
+ description: 'Adds static typing to JavaScript to improve developer productivity and code quality.',
663
+ syncer: SyncerClass.GithubBinary,
664
+ repo: 'facebook/flow',
665
+ distUrl: 'https://github.com/facebook/flow/releases',
666
+ },
667
+ robotjs: {
668
+ category: 'robotjs',
669
+ description: 'Node.js Desktop Automation. http://robotjs.io/',
670
+ syncer: SyncerClass.GithubBinary,
671
+ repo: 'octalmage/robotjs',
672
+ distUrl: 'https://github.com/octalmage/robotjs/releases',
673
+ },
674
+ poi: {
675
+ category: 'poi',
676
+ description: 'Scalable KanColle browser and tool. https://poi.io/',
677
+ syncer: SyncerClass.GithubBinary,
678
+ repo: 'poooi/poi',
679
+ distUrl: 'https://github.com/poooi/poi/releases',
680
+ },
681
+ 'utf-8-validate': {
682
+ category: 'utf-8-validate',
683
+ description: 'Check if a buffer contains valid UTF-8',
684
+ syncer: SyncerClass.GithubBinary,
685
+ repo: 'websockets/utf-8-validate',
686
+ distUrl: 'https://github.com/websockets/utf-8-validate/releases',
687
+ },
688
+ minikube: {
689
+ category: 'minikube',
690
+ description: 'Run Kubernetes locally https://minikube.sigs.k8s.io/',
691
+ syncer: SyncerClass.GithubBinary,
692
+ repo: 'kubernetes/minikube',
693
+ distUrl: 'https://github.com/kubernetes/minikube/releases',
694
+ },
695
+ 'sentry-cli': {
696
+ category: 'sentry-cli',
697
+ description: 'A command line utility to work with Sentry. https://docs.sentry.io/cli/',
698
+ syncer: SyncerClass.GithubBinary,
699
+ repo: 'getsentry/sentry-cli',
700
+ distUrl: 'https://github.com/getsentry/sentry-cli/releases',
701
+ },
702
+ 'sharp-libvips': {
703
+ category: 'sharp-libvips',
704
+ description: 'Packaging scripts to prebuild libvips and its dependencies - you\'re probably looking for https://github.com/lovell/sharp',
705
+ syncer: SyncerClass.GithubBinary,
706
+ repo: 'lovell/sharp-libvips',
707
+ distUrl: 'https://github.com/lovell/sharp-libvips/releases',
708
+ },
709
+ sharp: {
710
+ category: 'sharp',
711
+ description: 'High performance Node.js image processing, the fastest module to resize JPEG, PNG, WebP, AVIF and TIFF images. Uses the libvips library. https://sharp.pixelplumbing.com/',
712
+ syncer: SyncerClass.GithubBinary,
713
+ repo: 'lovell/sharp',
714
+ distUrl: 'https://github.com/lovell/sharp/releases',
715
+ },
716
+ swc: {
717
+ category: 'swc',
718
+ description: 'swc is a super-fast compiler written in rust; producing widely-supported javascript from modern standards and typescript. https://swc.rs/',
719
+ syncer: SyncerClass.GithubBinary,
720
+ repo: 'swc-project/swc',
721
+ distUrl: 'https://github.com/swc-project/swc/releases',
722
+ },
723
+ 'node-swc': {
724
+ category: 'node-swc',
725
+ description: 'Experimental repo to avoid spamming watchers, see https://github.com/swc-project/swc',
726
+ syncer: SyncerClass.GithubBinary,
727
+ repo: 'swc-project/node-swc',
728
+ distUrl: 'https://github.com/swc-project/node-swc/releases',
729
+ },
730
+ argon2: {
731
+ category: 'argon2',
732
+ description: 'Node.js bindings for Argon2 hashing algorithm',
733
+ syncer: SyncerClass.GithubBinary,
734
+ repo: 'ranisalt/node-argon2',
735
+ distUrl: 'https://github.com/ranisalt/node-argon2/releases',
736
+ },
737
+ iohook: {
738
+ category: 'iohook',
739
+ description: 'Node.js global keyboard and mouse listener.',
740
+ syncer: SyncerClass.GithubBinary,
741
+ repo: 'wilix-team/iohook',
742
+ distUrl: 'https://github.com/wilix-team/iohook/releases',
743
+ },
744
+ saucectl: {
745
+ category: 'saucectl',
746
+ description: 'A command line interface to run testrunner tests',
747
+ syncer: SyncerClass.GithubBinary,
748
+ repo: 'saucelabs/saucectl',
749
+ distUrl: 'https://github.com/saucelabs/saucectl/releases',
750
+ },
751
+ 'node-gdal-async': {
752
+ category: 'node-gdal-async',
753
+ description: 'Node.js bindings for GDAL (Geospatial Data Abstraction Library) with full async support. https://mmomtchev.github.io/node-gdal-async/',
754
+ syncer: SyncerClass.GithubBinary,
755
+ repo: 'mmomtchev/node-gdal-async',
756
+ distUrl: 'https://github.com/mmomtchev/node-gdal-async/releases',
757
+ },
758
+ 'looksgood-s2': {
759
+ category: 'looksgood-s2',
760
+ description: 'Node.js JavaScript & TypeScript bindings for Google S2.',
761
+ syncer: SyncerClass.GithubBinary,
762
+ repo: 'looksgood/s2',
763
+ distUrl: 'https://github.com/looksgood/s2/releases',
764
+ },
765
+ 'ali-zeromq': {
766
+ category: 'ali-zeromq',
767
+ description: 'Node.js bindings for zeromq',
768
+ syncer: SyncerClass.GithubBinary,
769
+ repo: 'looksgood/zeromq.js',
770
+ distUrl: 'https://github.com/looksgood/zeromq.js/releases',
771
+ },
772
+ 'ali-usb_ctl': {
773
+ category: 'ali-usb_ctl',
774
+ description: 'Node.js usb control module',
775
+ syncer: SyncerClass.GithubBinary,
776
+ repo: 'looksgood/ali-usb_ctl',
777
+ distUrl: 'https://github.com/looksgood/ali-usb_ctl/releases',
778
+ },
779
+ 'node-re2': {
780
+ category: 'node-re2',
781
+ description: 'node.js bindings for RE2: fast, safe alternative to backtracking regular expression engines.',
782
+ syncer: SyncerClass.GithubBinary,
783
+ repo: 'uhop/node-re2',
784
+ distUrl: 'https://github.com/uhop/node-re2/releases',
785
+ },
786
+ sqlite3: {
787
+ category: 'sqlite3',
788
+ description: 'Asynchronous, non-blocking SQLite3 bindings for Node.js',
789
+ syncer: SyncerClass.GithubBinary,
790
+ repo: 'TryGhost/node-sqlite3',
791
+ distUrl: 'https://github.com/TryGhost/node-sqlite3/releases',
792
+ },
793
+ keytar: {
794
+ category: 'keytar',
795
+ description: 'Native Password Node Module',
796
+ syncer: SyncerClass.GithubBinary,
797
+ repo: 'atom/node-keytar',
798
+ distUrl: 'https://github.com/atom/node-keytar/releases',
799
+ },
800
+ // PlaywrightBinary
801
+ playwright: {
802
+ category: 'playwright',
803
+ description: 'Playwright is a framework for Web Testing and Automation.',
804
+ syncer: SyncerClass.PlaywrightBinary,
805
+ repo: 'microsoft/playwright',
806
+ distUrl: 'https://github.com/microsoft/playwright/releases',
807
+ },
808
+ };
809
+ exports.default = binaries;
810
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmluYXJpZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9jb25maWcvYmluYXJpZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsSUFBWSxXQVlYO0FBWkQsV0FBWSxXQUFXO0lBQ3JCLHdDQUF5QixDQUFBO0lBQ3pCLHdDQUF5QixDQUFBO0lBQ3pCLDhDQUErQixDQUFBO0lBQy9CLDRDQUE2QixDQUFBO0lBQzdCLDRDQUE2QixDQUFBO0lBQzdCLGdEQUFpQyxDQUFBO0lBQ2pDLGtEQUFtQyxDQUFBO0lBQ25DLGtEQUFtQyxDQUFBO0lBQ25DLG9EQUFxQyxDQUFBO0lBQ3JDLGdEQUFpQyxDQUFBO0lBQ2pDLG9EQUFxQyxDQUFBO0FBQ3ZDLENBQUMsRUFaVyxXQUFXLEdBQVgsbUJBQVcsS0FBWCxtQkFBVyxRQVl0QjtBQTJCRCxNQUFNLFFBQVEsR0FFVjtJQUNGLGFBQWE7SUFDYixJQUFJLEVBQUU7UUFDSixRQUFRLEVBQUUsTUFBTTtRQUNoQixXQUFXLEVBQUUsc0tBQXNLO1FBQ25MLE1BQU0sRUFBRSxXQUFXLENBQUMsVUFBVTtRQUM5QixJQUFJLEVBQUUsWUFBWTtRQUNsQixPQUFPLEVBQUUscUJBQXFCO0tBQy9CO0lBQ0QsYUFBYTtJQUNiLElBQUksRUFBRTtRQUNKLFFBQVEsRUFBRSxNQUFNO1FBQ2hCLFdBQVcsRUFBRSwyRUFBMkU7UUFDeEYsTUFBTSxFQUFFLFdBQVcsQ0FBQyxVQUFVO1FBQzlCLElBQUksRUFBRSxhQUFhO1FBQ25CLE9BQU8sRUFBRSx5QkFBeUI7S0FDbkM7SUFDRCxTQUFTLEVBQUU7UUFDVCxRQUFRLEVBQUUsU0FBUztRQUNuQixXQUFXLEVBQUUsMkJBQTJCO1FBQ3hDLE1BQU0sRUFBRSxXQUFXLENBQUMsVUFBVTtRQUM5QixJQUFJLEVBQUUsYUFBYTtRQUNuQixPQUFPLEVBQUUsZ0NBQWdDO0tBQzFDO0lBQ0QsY0FBYyxFQUFFO1FBQ2QsUUFBUSxFQUFFLGNBQWM7UUFDeEIsV0FBVyxFQUFF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