cnpmcore 4.12.0 → 4.13.1

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 (235) hide show
  1. package/dist/app/common/CryptoUtil.js +9 -5
  2. package/dist/app/common/ErrorUtil.js +2 -4
  3. package/dist/app/common/FileUtil.js +5 -6
  4. package/dist/app/common/PackageUtil.js +2 -4
  5. package/dist/app/common/UserUtil.d.ts +2 -2
  6. package/dist/app/common/UserUtil.js +4 -5
  7. package/dist/app/common/adapter/NFSAdapter.d.ts +1 -1
  8. package/dist/app/common/adapter/NFSAdapter.js +1 -1
  9. package/dist/app/common/adapter/NPMRegistry.d.ts +9 -5
  10. package/dist/app/common/adapter/NPMRegistry.js +23 -7
  11. package/dist/app/common/adapter/binary/AbstractBinary.d.ts +1 -1
  12. package/dist/app/common/adapter/binary/AbstractBinary.js +2 -2
  13. package/dist/app/common/adapter/binary/ApiBinary.js +3 -4
  14. package/dist/app/common/adapter/binary/BucketBinary.js +2 -2
  15. package/dist/app/common/adapter/binary/ChromeForTestingBinary.js +3 -5
  16. package/dist/app/common/adapter/binary/CypressBinary.js +3 -9
  17. package/dist/app/common/adapter/binary/EdgedriverBinary.js +2 -2
  18. package/dist/app/common/adapter/binary/ElectronBinary.d.ts +1 -1
  19. package/dist/app/common/adapter/binary/ElectronBinary.js +3 -4
  20. package/dist/app/common/adapter/binary/FirefoxBinary.js +2 -2
  21. package/dist/app/common/adapter/binary/ImageminBinary.js +3 -4
  22. package/dist/app/common/adapter/binary/NodeBinary.js +3 -3
  23. package/dist/app/common/adapter/binary/NodePreGypBinary.js +9 -19
  24. package/dist/app/common/adapter/binary/NwjsBinary.js +3 -5
  25. package/dist/app/common/adapter/binary/PlaywrightBinary.js +16 -18
  26. package/dist/app/common/adapter/binary/PrismaBinary.js +3 -5
  27. package/dist/app/common/adapter/binary/PuppeteerBinary.js +4 -7
  28. package/dist/app/common/adapter/binary/SqlcipherBinary.js +3 -10
  29. package/dist/app/common/adapter/changesStream/AbstractChangesStream.js +2 -2
  30. package/dist/app/common/adapter/changesStream/CnpmcoreChangesStream.js +2 -2
  31. package/dist/app/common/adapter/changesStream/CnpmjsorgChangesStream.js +2 -2
  32. package/dist/app/common/adapter/changesStream/NpmChangesStream.js +2 -2
  33. package/dist/app/common/aop/AsyncTimer.js +2 -2
  34. package/dist/app/common/constants.js +1 -1
  35. package/dist/app/common/typing.d.ts +2 -2
  36. package/dist/app/core/entity/Binary.d.ts +1 -1
  37. package/dist/app/core/entity/Binary.js +2 -2
  38. package/dist/app/core/entity/BugVersion.d.ts +16 -1
  39. package/dist/app/core/entity/BugVersion.js +12 -5
  40. package/dist/app/core/entity/Change.d.ts +1 -1
  41. package/dist/app/core/entity/Change.js +2 -2
  42. package/dist/app/core/entity/Dist.d.ts +1 -1
  43. package/dist/app/core/entity/Dist.js +2 -2
  44. package/dist/app/core/entity/Hook.d.ts +2 -2
  45. package/dist/app/core/entity/Hook.js +3 -6
  46. package/dist/app/core/entity/HookEvent.js +1 -1
  47. package/dist/app/core/entity/Package.d.ts +1 -1
  48. package/dist/app/core/entity/Package.js +4 -5
  49. package/dist/app/core/entity/PackageTag.d.ts +1 -1
  50. package/dist/app/core/entity/PackageTag.js +2 -2
  51. package/dist/app/core/entity/PackageVersion.d.ts +1 -1
  52. package/dist/app/core/entity/PackageVersion.js +2 -2
  53. package/dist/app/core/entity/PackageVersionBlock.d.ts +1 -1
  54. package/dist/app/core/entity/PackageVersionBlock.js +2 -2
  55. package/dist/app/core/entity/PackageVersionFile.d.ts +1 -1
  56. package/dist/app/core/entity/PackageVersionFile.js +3 -5
  57. package/dist/app/core/entity/PackageVersionManifest.d.ts +1 -1
  58. package/dist/app/core/entity/PackageVersionManifest.js +2 -2
  59. package/dist/app/core/entity/ProxyCache.d.ts +1 -1
  60. package/dist/app/core/entity/ProxyCache.js +2 -2
  61. package/dist/app/core/entity/Registry.d.ts +2 -2
  62. package/dist/app/core/entity/Registry.js +2 -2
  63. package/dist/app/core/entity/Scope.d.ts +1 -1
  64. package/dist/app/core/entity/Scope.js +2 -2
  65. package/dist/app/core/entity/SqlRange.js +2 -3
  66. package/dist/app/core/entity/Task.d.ts +1 -1
  67. package/dist/app/core/entity/Task.js +4 -4
  68. package/dist/app/core/entity/Token.d.ts +1 -1
  69. package/dist/app/core/entity/Token.js +3 -5
  70. package/dist/app/core/entity/User.d.ts +1 -1
  71. package/dist/app/core/entity/User.js +3 -3
  72. package/dist/app/core/entity/WebauthnCredential.d.ts +1 -1
  73. package/dist/app/core/entity/WebauthnCredential.js +2 -2
  74. package/dist/app/core/event/BugVersionFixHandler.js +2 -2
  75. package/dist/app/core/event/CacheCleaner.js +1 -1
  76. package/dist/app/core/event/ChangesStream.d.ts +1 -1
  77. package/dist/app/core/event/ChangesStream.js +2 -2
  78. package/dist/app/core/event/StoreManifest.js +2 -2
  79. package/dist/app/core/event/SyncESPackage.js +1 -1
  80. package/dist/app/core/event/SyncPackageVersionFile.js +3 -4
  81. package/dist/app/core/event/TotalHandler.js +1 -1
  82. package/dist/app/core/service/BinarySyncerService.d.ts +2 -2
  83. package/dist/app/core/service/BinarySyncerService.js +9 -9
  84. package/dist/app/core/service/BugVersionService.d.ts +17 -3
  85. package/dist/app/core/service/BugVersionService.js +32 -10
  86. package/dist/app/core/service/CacheService.d.ts +2 -0
  87. package/dist/app/core/service/CacheService.js +11 -1
  88. package/dist/app/core/service/ChangesStreamService.d.ts +2 -2
  89. package/dist/app/core/service/ChangesStreamService.js +7 -7
  90. package/dist/app/core/service/CreateHookTriggerService.js +2 -2
  91. package/dist/app/core/service/EventCorkerAdvice.js +1 -1
  92. package/dist/app/core/service/FixNoPaddingVersionService.js +3 -5
  93. package/dist/app/core/service/HomeService.js +2 -2
  94. package/dist/app/core/service/HookManageService.d.ts +1 -1
  95. package/dist/app/core/service/HookManageService.js +1 -1
  96. package/dist/app/core/service/HookTriggerService.d.ts +2 -2
  97. package/dist/app/core/service/HookTriggerService.js +2 -2
  98. package/dist/app/core/service/PackageManagerService.d.ts +34 -5
  99. package/dist/app/core/service/PackageManagerService.js +375 -86
  100. package/dist/app/core/service/PackageSearchService.d.ts +5 -1
  101. package/dist/app/core/service/PackageSearchService.js +44 -47
  102. package/dist/app/core/service/PackageSyncerService.d.ts +9 -1
  103. package/dist/app/core/service/PackageSyncerService.js +545 -79
  104. package/dist/app/core/service/PackageVersionFileService.d.ts +2 -2
  105. package/dist/app/core/service/PackageVersionFileService.js +3 -3
  106. package/dist/app/core/service/PackageVersionService.js +1 -1
  107. package/dist/app/core/service/ProxyCacheService.d.ts +2 -2
  108. package/dist/app/core/service/ProxyCacheService.js +4 -4
  109. package/dist/app/core/service/RegistryManagerService.js +7 -11
  110. package/dist/app/core/service/ScopeManagerService.js +1 -1
  111. package/dist/app/core/service/TaskService.d.ts +1 -1
  112. package/dist/app/core/service/TaskService.js +7 -6
  113. package/dist/app/core/service/TokenService.d.ts +1 -1
  114. package/dist/app/core/service/TokenService.js +10 -10
  115. package/dist/app/core/service/UserService.d.ts +5 -5
  116. package/dist/app/core/service/UserService.js +7 -7
  117. package/dist/app/core/util/EntityUtil.js +1 -1
  118. package/dist/app/infra/AuthAdapter.js +2 -2
  119. package/dist/app/infra/NFSClientAdapter.js +2 -2
  120. package/dist/app/infra/QueueAdapter.js +1 -1
  121. package/dist/app/infra/SearchAdapter.js +1 -1
  122. package/dist/app/port/UserRoleManager.d.ts +1 -1
  123. package/dist/app/port/UserRoleManager.js +5 -6
  124. package/dist/app/port/config.d.ts +15 -1
  125. package/dist/app/port/config.js +1 -1
  126. package/dist/app/port/controller/AbstractController.d.ts +6 -6
  127. package/dist/app/port/controller/AbstractController.js +7 -12
  128. package/dist/app/port/controller/AccessController.js +4 -4
  129. package/dist/app/port/controller/BinarySyncController.d.ts +1 -1
  130. package/dist/app/port/controller/BinarySyncController.js +6 -8
  131. package/dist/app/port/controller/ChangesStreamController.js +3 -3
  132. package/dist/app/port/controller/DownloadController.js +4 -4
  133. package/dist/app/port/controller/HomeController.d.ts +1 -1
  134. package/dist/app/port/controller/HomeController.js +2 -2
  135. package/dist/app/port/controller/HookController.js +6 -6
  136. package/dist/app/port/controller/PackageBlockController.d.ts +1 -1
  137. package/dist/app/port/controller/PackageBlockController.js +4 -4
  138. package/dist/app/port/controller/PackageSyncController.d.ts +1 -1
  139. package/dist/app/port/controller/PackageSyncController.js +7 -11
  140. package/dist/app/port/controller/PackageTagController.js +4 -9
  141. package/dist/app/port/controller/PackageVersionFileController.js +6 -11
  142. package/dist/app/port/controller/ProxyCacheController.d.ts +2 -2
  143. package/dist/app/port/controller/ProxyCacheController.js +8 -8
  144. package/dist/app/port/controller/RegistryController.d.ts +2 -2
  145. package/dist/app/port/controller/RegistryController.js +3 -3
  146. package/dist/app/port/controller/ScopeController.d.ts +2 -2
  147. package/dist/app/port/controller/ScopeController.js +2 -2
  148. package/dist/app/port/controller/TokenController.d.ts +2 -2
  149. package/dist/app/port/controller/TokenController.js +10 -10
  150. package/dist/app/port/controller/UserController.d.ts +1 -1
  151. package/dist/app/port/controller/UserController.js +6 -7
  152. package/dist/app/port/controller/admin/PaddingVersionController.js +2 -2
  153. package/dist/app/port/controller/convertor/HookConvertor.d.ts +1 -1
  154. package/dist/app/port/controller/convertor/HookConvertor.js +1 -1
  155. package/dist/app/port/controller/package/DownloadPackageVersionTar.d.ts +1 -1
  156. package/dist/app/port/controller/package/DownloadPackageVersionTar.js +4 -4
  157. package/dist/app/port/controller/package/RemovePackageVersionController.js +4 -5
  158. package/dist/app/port/controller/package/SavePackageVersionController.d.ts +2 -2
  159. package/dist/app/port/controller/package/SavePackageVersionController.js +12 -16
  160. package/dist/app/port/controller/package/SearchPackageController.d.ts +2 -2
  161. package/dist/app/port/controller/package/SearchPackageController.js +2 -2
  162. package/dist/app/port/controller/package/ShowPackageController.d.ts +2 -0
  163. package/dist/app/port/controller/package/ShowPackageController.js +83 -11
  164. package/dist/app/port/controller/package/ShowPackageVersionController.js +7 -9
  165. package/dist/app/port/controller/package/UpdatePackageController.d.ts +1 -1
  166. package/dist/app/port/controller/package/UpdatePackageController.js +5 -6
  167. package/dist/app/port/middleware/AlwaysAuth.js +1 -1
  168. package/dist/app/port/middleware/ErrorHandler.js +5 -13
  169. package/dist/app/port/schedule/ChangesStreamWorker.js +3 -4
  170. package/dist/app/port/schedule/CheckProxyCacheUpdateWorker.js +2 -2
  171. package/dist/app/port/schedule/CheckRecentlyUpdatedPackages.js +7 -11
  172. package/dist/app/port/schedule/CleanTempDir.js +2 -2
  173. package/dist/app/port/schedule/CreateSyncBinaryTask.js +2 -2
  174. package/dist/app/port/schedule/CreateTriggerHookWorker.js +4 -6
  175. package/dist/app/port/schedule/SavePackageVersionDownloadCounter.js +2 -2
  176. package/dist/app/port/schedule/SyncBinaryWorker.js +2 -2
  177. package/dist/app/port/schedule/SyncPackageWorker.js +3 -4
  178. package/dist/app/port/schedule/SyncProxyCacheWorker.js +3 -4
  179. package/dist/app/port/schedule/TaskTimeoutHandler.js +2 -2
  180. package/dist/app/port/schedule/TriggerHookWorker.js +3 -4
  181. package/dist/app/port/schedule/UpdateTotalData.js +3 -3
  182. package/dist/app/port/typebox.d.ts +2 -2
  183. package/dist/app/port/typebox.js +6 -6
  184. package/dist/app/port/webauth/WebauthController.d.ts +1 -1
  185. package/dist/app/port/webauth/WebauthController.js +10 -13
  186. package/dist/app/repository/BinaryRepository.js +3 -3
  187. package/dist/app/repository/ChangeRepository.d.ts +1 -1
  188. package/dist/app/repository/ChangeRepository.js +2 -2
  189. package/dist/app/repository/DistRepository.d.ts +6 -1
  190. package/dist/app/repository/DistRepository.js +38 -1
  191. package/dist/app/repository/HookRepository.d.ts +1 -1
  192. package/dist/app/repository/HookRepository.js +3 -3
  193. package/dist/app/repository/PackageRepository.d.ts +4 -4
  194. package/dist/app/repository/PackageRepository.js +20 -34
  195. package/dist/app/repository/PackageVersionBlockRepository.d.ts +1 -1
  196. package/dist/app/repository/PackageVersionBlockRepository.js +2 -2
  197. package/dist/app/repository/PackageVersionDownloadRepository.js +1 -1
  198. package/dist/app/repository/PackageVersionFileRepository.js +4 -6
  199. package/dist/app/repository/PackageVersionRepository.d.ts +8 -1
  200. package/dist/app/repository/PackageVersionRepository.js +18 -5
  201. package/dist/app/repository/ProxyCacheRepository.d.ts +3 -3
  202. package/dist/app/repository/ProxyCacheRepository.js +5 -7
  203. package/dist/app/repository/RegistryRepository.d.ts +1 -1
  204. package/dist/app/repository/RegistryRepository.js +4 -4
  205. package/dist/app/repository/ScopeRepository.d.ts +2 -2
  206. package/dist/app/repository/ScopeRepository.js +7 -9
  207. package/dist/app/repository/SearchRepository.js +1 -1
  208. package/dist/app/repository/TaskRepository.d.ts +1 -1
  209. package/dist/app/repository/TaskRepository.js +9 -9
  210. package/dist/app/repository/TotalRepository.js +2 -2
  211. package/dist/app/repository/UserRepository.d.ts +1 -1
  212. package/dist/app/repository/UserRepository.js +7 -7
  213. package/dist/app/repository/model/HistoryTask.d.ts +1 -1
  214. package/dist/app/repository/model/HistoryTask.js +1 -1
  215. package/dist/app/repository/model/Hook.d.ts +1 -1
  216. package/dist/app/repository/model/Hook.js +1 -1
  217. package/dist/app/repository/model/Package.js +2 -2
  218. package/dist/app/repository/model/PackageVersion.js +3 -3
  219. package/dist/app/repository/model/PackageVersionFile.js +2 -2
  220. package/dist/app/repository/model/ProxyCache.d.ts +1 -1
  221. package/dist/app/repository/model/ProxyCache.js +1 -1
  222. package/dist/app/repository/model/Registry.d.ts +1 -1
  223. package/dist/app/repository/model/Registry.js +1 -1
  224. package/dist/app/repository/model/Task.d.ts +1 -1
  225. package/dist/app/repository/model/Task.js +1 -1
  226. package/dist/app/repository/util/EntityProperty.js +1 -1
  227. package/dist/app/repository/util/ModelConvertor.js +3 -6
  228. package/dist/app/repository/util/ModelConvertorUtil.js +1 -1
  229. package/dist/app.js +2 -2
  230. package/dist/config/config.default.js +7 -3
  231. package/dist/config/config.unittest.d.ts +2 -2
  232. package/dist/config/config.unittest.js +4 -1
  233. package/dist/config/database.js +3 -2
  234. package/dist/config/plugin.js +1 -1
  235. package/package.json +46 -47
@@ -7,21 +7,23 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
7
7
  var __metadata = (this && this.__metadata) || function (k, v) {
8
8
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
9
  };
10
+ import { rm } from 'node:fs/promises';
10
11
  import os from 'node:os';
11
12
  import { setTimeout } from 'node:timers/promises';
12
- import { rm } from 'node:fs/promises';
13
+ import { Package as Packument } from '@cnpmjs/packument';
13
14
  import { AccessLevel, Inject, SingletonProto, HttpClient } from 'egg';
14
15
  import { Pointcut } from 'egg/aop';
16
+ import { BadRequestError } from 'egg/errors';
15
17
  import { isEmpty, isEqual } from 'lodash-es';
16
18
  import semver from 'semver';
17
- import { BadRequestError } from 'egg/errors';
18
- import { detectInstallScript, getScopeAndName, } from "../../common/PackageUtil.js";
19
- import { downloadToTempfile } from "../../common/FileUtil.js";
20
- import { TaskState, TaskType } from "../../common/enum/Task.js";
21
19
  import { AbstractService } from "../../common/AbstractService.js";
22
- import { Task, } from "../entity/Task.js";
23
- import { EventCorkAdvice } from "./EventCorkerAdvice.js";
24
20
  import { PresetRegistryName, SyncDeleteMode } from "../../common/constants.js";
21
+ import { TaskState, TaskType } from "../../common/enum/Task.js";
22
+ import { downloadToTempfile } from "../../common/FileUtil.js";
23
+ import { detectInstallScript, getScopeAndName } from "../../common/PackageUtil.js";
24
+ import { DistRepository } from "../../repository/DistRepository.js";
25
+ import { Task } from "../entity/Task.js";
26
+ import { EventCorkAdvice } from "./EventCorkerAdvice.js";
25
27
  function isoNow() {
26
28
  return new Date().toISOString();
27
29
  }
@@ -32,10 +34,7 @@ let PackageSyncerService = class PackageSyncerService extends AbstractService {
32
34
  const [scope, name] = getScopeAndName(fullname);
33
35
  const pkg = await this.packageRepository.findPackage(scope, name);
34
36
  // sync task request registry is not same as package registry
35
- if (pkg &&
36
- pkg.registryId &&
37
- options?.registryId &&
38
- pkg.registryId !== options.registryId) {
37
+ if (pkg && pkg.registryId && options?.registryId && pkg.registryId !== options.registryId) {
39
38
  throw new RegistryNotMatchError(`package ${fullname} is not in registry ${options.registryId}`);
40
39
  }
41
40
  return await this.taskService.createTask(Task.createSyncPackage(fullname, options), true);
@@ -51,9 +50,7 @@ let PackageSyncerService = class PackageSyncerService extends AbstractService {
51
50
  }
52
51
  get allowSyncDownloadData() {
53
52
  const config = this.config.cnpmcore;
54
- if (config.enableSyncDownloadData &&
55
- config.syncDownloadDataSourceRegistry &&
56
- config.syncDownloadDataMaxDate) {
53
+ if (config.enableSyncDownloadData && config.syncDownloadDataSourceRegistry && config.syncDownloadDataMaxDate) {
57
54
  return true;
58
55
  }
59
56
  return false;
@@ -72,12 +69,14 @@ let PackageSyncerService = class PackageSyncerService extends AbstractService {
72
69
  logs.push(`[${isoNow()}][DownloadData] 🚧🚧🚧🚧🚧 Syncing "${fullname}" download data "${start}:${end}" on ${registry} 🚧🚧🚧🚧🚧`);
73
70
  const failEnd = '❌❌❌❌❌ 🚮 give up 🚮 ❌❌❌❌❌';
74
71
  try {
75
- const { data, status, res } = await this.npmRegistry.getDownloadRanges(registry, fullname, start, end, { remoteAuthToken });
72
+ const { data, status, res } = await this.npmRegistry.getDownloadRanges(registry, fullname, start, end, {
73
+ remoteAuthToken,
74
+ });
76
75
  downloads = data.downloads || [];
77
76
  logs.push(`[${isoNow()}][DownloadData] 🚧 HTTP [${status}] timing: ${JSON.stringify(res.timing)}, downloads: ${downloads.length}`);
78
77
  }
79
78
  catch (err) {
80
- const status = err.status || 'unknow';
79
+ const status = err.status || 'unknown';
81
80
  logs.push(`[${isoNow()}][DownloadData] ❌ Get download data error: ${err}, status: ${status}`);
82
81
  logs.push(`[${isoNow()}][DownloadData] ${failEnd}`);
83
82
  await this.taskService.appendTaskLog(task, logs.join('\n'));
@@ -120,7 +119,7 @@ let PackageSyncerService = class PackageSyncerService extends AbstractService {
120
119
  logId = data.logId;
121
120
  }
122
121
  catch (err) {
123
- const status = err.status || 'unknow';
122
+ const status = err.status || 'unknown';
124
123
  // 可能会抛出 AggregateError 异常
125
124
  // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/AggregateError
126
125
  logs.push(`[${isoNow()}][UP] ❌ Sync ${fullname} fail, create sync task error: ${err}, status: ${status} ${err instanceof AggregateError ? err.errors : ''}`);
@@ -163,7 +162,7 @@ let PackageSyncerService = class PackageSyncerService extends AbstractService {
163
162
  }
164
163
  catch (err) {
165
164
  useTime = Date.now() - startTime;
166
- const status = err.status || 'unknow';
165
+ const status = err.status || 'unknown';
167
166
  logs.push(`[${isoNow()}][UP] 🚧 HTTP [${status}] [${useTime}ms] error: ${err}`);
168
167
  }
169
168
  }
@@ -172,21 +171,33 @@ let PackageSyncerService = class PackageSyncerService extends AbstractService {
172
171
  logs.push(`[${isoNow()}][UP] ${failEnd}`);
173
172
  await this.taskService.appendTaskLog(task, logs.join('\n'));
174
173
  }
175
- isRemovedInRemote(remoteFetchResult) {
176
- const { status, data } = remoteFetchResult;
177
- // deleted or blocked
178
- if (status === 451) {
179
- return true;
180
- }
181
- const hasMaintainers = data?.maintainers && data?.maintainers.length !== 0;
182
- if (hasMaintainers) {
174
+ isRemovedInRemote(maintainers, time, versions) {
175
+ if (maintainers && maintainers.length > 0) {
183
176
  return false;
184
177
  }
185
178
  // unpublished
186
- const timeMap = data.time || {};
187
- if (timeMap.unpublished) {
179
+ // https://registry.npmjs.com/babel-plugin-autocss
180
+ // {
181
+ // "_id": "babel-plugin-autocss",
182
+ // "name": "babel-plugin-autocss",
183
+ // "time": {
184
+ // "created": "2021-10-29T08:21:56.032Z",
185
+ // "0.0.1": "2021-10-29T08:21:56.206Z",
186
+ // "modified": "2022-01-14T12:34:23.941Z",
187
+ // "unpublished": {
188
+ // "time": "2022-01-14T12:34:23.941Z",
189
+ // "versions": [
190
+ // "0.0.1"
191
+ // ]
192
+ // }
193
+ // }
194
+ // }
195
+ if (time?.unpublished) {
188
196
  return true;
189
197
  }
198
+ if (!versions) {
199
+ return false;
200
+ }
190
201
  // security holder
191
202
  // test/fixtures/registry.npmjs.org/security-holding-package.json
192
203
  // {
@@ -207,7 +218,7 @@ let PackageSyncerService = class PackageSyncerService extends AbstractService {
207
218
  // "_attachments": {}
208
219
  // }
209
220
  let isSecurityHolder = true;
210
- for (const versionInfo of Object.entries(data.versions || {})) {
221
+ for (const versionInfo of Object.entries(versions)) {
211
222
  const [v, info] = versionInfo;
212
223
  // >=0.0.1-security <0.0.2-0
213
224
  const isSecurityVersion = semver.satisfies(v, '^0.0.1-security');
@@ -227,14 +238,15 @@ let PackageSyncerService = class PackageSyncerService extends AbstractService {
227
238
  // - ignore: 不做任何处理,直接结束任务
228
239
  // - delete: 删除包数据,包括 manifest 存储
229
240
  // - block: 软删除 将包标记为 block,用户无法直接使用
230
- async syncDeletePkg({ task, pkg, logUrl, url, logs, data, }) {
241
+ async syncDeletePkg({ task, pkg, logUrl, url, logs, data }) {
231
242
  const fullname = task.targetName;
232
243
  const failEnd = `❌❌❌❌❌ ${url || fullname} ❌❌❌❌❌`;
233
244
  const syncDeleteMode = this.config.cnpmcore.syncDeleteMode;
234
- logs.push(`[${isoNow()}] 🟢 Package "${fullname}" was removed in remote registry, response data: ${JSON.stringify(data)}, config.syncDeleteMode = ${syncDeleteMode}`);
245
+ const dataString = data.toString().substring(0, 1024);
246
+ logs.push(`[${isoNow()}] 🟢 Package "${fullname}" was removed in remote registry, response data: ${dataString}, config.syncDeleteMode = ${syncDeleteMode}`);
235
247
  // pkg not exists in local registry
236
248
  if (!pkg) {
237
- task.error = `Package not exists, response data: ${JSON.stringify(data)}`;
249
+ task.error = `Package not exists, response data: ${dataString}`;
238
250
  logs.push(`[${isoNow()}] ❌ ${task.error}, log: ${logUrl}`);
239
251
  logs.push(`[${isoNow()}] ${failEnd}`);
240
252
  await this.taskService.finishTask(task, TaskState.Fail, logs.join('\n'));
@@ -313,16 +325,17 @@ let PackageSyncerService = class PackageSyncerService extends AbstractService {
313
325
  const taskQueueLength = await this.taskService.getTaskQueueLength(task.type);
314
326
  const taskQueueHighWaterSize = this.config.cnpmcore.taskQueueHighWaterSize;
315
327
  const taskQueueInHighWaterState = taskQueueLength >= taskQueueHighWaterSize;
316
- const skipDependencies = taskQueueInHighWaterState
317
- ? true
318
- : !!originSkipDependencies;
328
+ const skipDependencies = taskQueueInHighWaterState ? true : !!originSkipDependencies;
319
329
  const syncUpstream = !!(!taskQueueInHighWaterState &&
320
330
  this.config.cnpmcore.sourceRegistryIsCNpm &&
321
331
  this.config.cnpmcore.syncUpstreamFirst &&
322
332
  registry.name === PresetRegistryName.default);
323
333
  const logUrl = `${this.config.cnpmcore.registry}/-/package/${fullname}/syncs/${task.taskId}/log`;
324
334
  this.logger.info('[PackageSyncerService.executeTask:start] taskId: %s, targetName: %s, attempts: %s, taskQueue: %s/%s, syncUpstream: %s, log: %s', task.taskId, task.targetName, task.attempts, taskQueueLength, taskQueueHighWaterSize, syncUpstream, logUrl);
325
- logs.push(`[${isoNow()}] 🚧🚧🚧🚧🚧 Syncing from ${registryHost}/${fullname}, skipDependencies: ${skipDependencies}, syncUpstream: ${syncUpstream}, syncDownloadData: ${!!syncDownloadData}, forceSyncHistory: ${!!forceSyncHistory} attempts: ${task.attempts}, worker: "${os.hostname()}/${process.pid}", taskQueue: ${taskQueueLength}/${taskQueueHighWaterSize} 🚧🚧🚧🚧🚧`);
335
+ logs.push(`[${isoNow()}] 🚧🚧🚧🚧🚧 Syncing from ${registryHost}/${fullname}, \
336
+ skipDependencies: ${skipDependencies}, syncUpstream: ${syncUpstream}, syncDownloadData: ${!!syncDownloadData}, \
337
+ forceSyncHistory: ${!!forceSyncHistory}, attempts: ${task.attempts}, worker: "${os.hostname()}/${process.pid}", \
338
+ taskQueue: ${taskQueueLength}/${taskQueueHighWaterSize} 🚧🚧🚧🚧🚧`);
326
339
  if (specificVersions) {
327
340
  logs.push(`[${isoNow()}] 👉 syncing specific versions: ${specificVersions.join(' | ')} 👈`);
328
341
  }
@@ -333,7 +346,7 @@ let PackageSyncerService = class PackageSyncerService extends AbstractService {
333
346
  this.logger.info('[PackageSyncerService.executeTask:fail] taskId: %s, targetName: %s, invalid registryId', task.taskId, task.targetName);
334
347
  return;
335
348
  }
336
- if (pkg && pkg?.registryId !== registry.registryId) {
349
+ if (pkg && pkg.registryId !== registry.registryId) {
337
350
  if (pkg.registryId) {
338
351
  logs.push(`[${isoNow()}] ❌❌❌❌❌ ${fullname} registry is ${pkg.registryId} not belong to ${registry.registryId}, skip sync ❌❌❌❌❌`);
339
352
  await this.taskService.finishTask(task, TaskState.Fail, logs.join('\n'));
@@ -370,7 +383,7 @@ let PackageSyncerService = class PackageSyncerService extends AbstractService {
370
383
  }
371
384
  let registryFetchResult;
372
385
  try {
373
- registryFetchResult = await this.npmRegistry.getFullManifests(fullname, {
386
+ registryFetchResult = await this.npmRegistry.getFullManifestsBuffer(fullname, {
374
387
  remoteAuthToken,
375
388
  });
376
389
  }
@@ -383,13 +396,13 @@ let PackageSyncerService = class PackageSyncerService extends AbstractService {
383
396
  await this.taskService.retryTask(task, logs.join('\n'));
384
397
  return;
385
398
  }
386
- const { url, data, headers, res, status } = registryFetchResult;
387
- /* c8 ignore next 13 */
388
- if (status >= 500 || !data) {
399
+ const { url: remoteUrl, data: remoteData, headers, res, status } = registryFetchResult;
400
+ if (status >= 500) {
389
401
  // GET https://registry.npmjs.org/%40modern-js%2Fstyle-compiler?t=1683348626499&cache=0, status: 522
390
402
  // registry will response status 522 and data will be null
391
403
  // > TypeError: Cannot read properties of null (reading 'readme')
392
- task.error = `request manifests response error, status: ${status}, data: ${JSON.stringify(data)}`;
404
+ task.error = `request manifests response error, status: ${status}, data size: ${remoteData.length}, \
405
+ data sample: ${remoteData.subarray(0, 200).toString()}`;
393
406
  logs.push(`[${isoNow()}] ❌ response headers: ${JSON.stringify(headers)}`);
394
407
  logs.push(`[${isoNow()}] ❌ Synced ${fullname} fail, ${task.error}, log: ${logUrl}`);
395
408
  logs.push(`[${isoNow()}] ❌❌❌❌❌ ${fullname} ❌❌❌❌❌`);
@@ -399,8 +412,8 @@ let PackageSyncerService = class PackageSyncerService extends AbstractService {
399
412
  }
400
413
  if (status === 404) {
401
414
  // ignore 404 status
402
- // https://github.com/node-modules/detect-port/issues/57
403
- task.error = `Package not found, status 404, data: ${JSON.stringify(data)}`;
415
+ // https://github.com/cnpm/cnpmcore/issues/739
416
+ task.error = `Package not found, status 404, data size: ${remoteData.length}, data sample: ${remoteData.subarray(0, 200).toString()}`;
404
417
  logs.push(`[${isoNow()}] ❌ ${task.error}, log: ${logUrl}`);
405
418
  logs.push(`[${isoNow()}] ❌ Synced ${fullname} fail, ${task.error}, log: ${logUrl}`);
406
419
  logs.push(`[${isoNow()}] ❌❌❌❌❌ ${fullname} ❌❌❌❌❌`);
@@ -408,6 +421,32 @@ let PackageSyncerService = class PackageSyncerService extends AbstractService {
408
421
  await this.taskService.finishTask(task, TaskState.Fail, logs.join('\n'));
409
422
  return;
410
423
  }
424
+ // deleted or blocked
425
+ if (status === 451) {
426
+ await this.syncDeletePkg({ task, pkg, logs, logUrl, url: remoteUrl, data: remoteData });
427
+ return;
428
+ }
429
+ logs.push(`[${isoNow()}] HTTP [${status}] body size: ${remoteData.length}, timing: ${JSON.stringify(res.timing)}`);
430
+ if (this.config.cnpmcore.experimental.syncPackageWithPackument && !this.config.cnpmcore.strictSyncSpecivicVersion) {
431
+ await this.syncPackageWithPackument({ task, remoteData, pkg, registry, logUrl, remoteUrl, logs });
432
+ return;
433
+ }
434
+ const startTime = Date.now();
435
+ let data;
436
+ try {
437
+ // @ts-expect-error JSON.parse accepts Buffer in Node.js, though TypeScript types don't reflect this
438
+ data = JSON.parse(remoteData);
439
+ }
440
+ catch (err) {
441
+ task.error = `parse manifest error: ${err}, data: ${remoteData.toString().substring(0, 1024)}`;
442
+ logs.push(`[${isoNow()}] ❌ ${task.error}, log: ${logUrl}`);
443
+ logs.push(`[${isoNow()}] ❌❌❌❌❌ ${fullname} ❌❌❌❌❌`);
444
+ this.logger.info('[PackageSyncerService.executeTask:fail-parse-manifest] taskId: %s, targetName: %s, %s', task.taskId, task.targetName, task.error);
445
+ await this.taskService.finishTask(task, TaskState.Fail, logs.join('\n'));
446
+ return;
447
+ }
448
+ const useTime = Date.now() - startTime;
449
+ logs.push(`[${isoNow()}] 📖 Manifest parse use ${useTime}ms`);
411
450
  let readme = data.readme || '';
412
451
  if (typeof readme !== 'string') {
413
452
  readme = JSON.stringify(readme);
@@ -416,24 +455,22 @@ let PackageSyncerService = class PackageSyncerService extends AbstractService {
416
455
  // "created": "2021-03-27T12:30:23.891Z",
417
456
  // "0.0.2": "2021-03-27T12:30:24.349Z",
418
457
  // "modified": "2021-12-08T14:59:57.264Z",
419
- const timeMap = data.time || {};
420
- const failEnd = `❌❌❌❌❌ ${url || fullname} ❌❌❌❌❌`;
421
- const contentLength = headers['content-length'] || '-';
422
- logs.push(`[${isoNow()}] HTTP [${status}] content-length: ${contentLength}, timing: ${JSON.stringify(res.timing)}`);
423
- if (this.isRemovedInRemote(registryFetchResult)) {
424
- await this.syncDeletePkg({ task, pkg, logs, logUrl, url, data });
458
+ const timeMap = (data.time ?? {});
459
+ const failEnd = `❌❌❌❌❌ ${remoteUrl || fullname} ❌❌❌❌❌`;
460
+ if (this.isRemovedInRemote(data.maintainers, timeMap, data.versions)) {
461
+ await this.syncDeletePkg({ task, pkg, logs, logUrl, url: remoteUrl, data: remoteData });
425
462
  return;
426
463
  }
427
- const versionMap = data.versions || {};
464
+ const versionMap = (data.versions || {});
428
465
  const distTags = data['dist-tags'] || {};
429
466
  // show latest information
430
467
  if (distTags.latest) {
431
- logs.push(`[${isoNow()}] 📖 ${fullname} latest version: ${distTags.latest ?? '-'}, published time: ${JSON.stringify(timeMap[distTags.latest])}`);
468
+ logs.push(`[${isoNow()}] 📖 ${fullname} latest version: ${distTags.latest}, published time: ${timeMap[distTags.latest]}`);
432
469
  }
433
470
  // 1. save maintainers
434
471
  // maintainers: [
435
- // { name: 'bomsy', email: 'b4bomsy@gmail.com' },
436
- // { name: 'jasonlaster11', email: 'jason.laster.11@gmail.com' }
472
+ // { name: 'foo', email: 'foo@gmail.com' },
473
+ // { name: 'bar', email: 'bar.laster.11@gmail.com' }
437
474
  // ],
438
475
  let maintainers = data.maintainers;
439
476
  const maintainersMap = {};
@@ -445,16 +482,14 @@ let PackageSyncerService = class PackageSyncerService extends AbstractService {
445
482
  // security holding package will not contains maintainers, auto set npm and npm@npmjs.com to maintainer
446
483
  // "description": "security holding package",
447
484
  // "repository": "npm/security-holder"
448
- if (data.description === 'security holding package' ||
449
- data.repository === 'npm/security-holder') {
485
+ if (data.description === 'security holding package' || data.repository === 'npm/security-holder') {
450
486
  data.maintainers = [{ name: 'npm', email: 'npm@npmjs.com' }];
451
487
  maintainers = data.maintainers;
452
488
  }
453
489
  else {
454
490
  // try to use latest tag version's maintainers instead
455
491
  const latestPackageVersion = distTags.latest && versionMap[distTags.latest];
456
- if (latestPackageVersion &&
457
- Array.isArray(latestPackageVersion.maintainers)) {
492
+ if (latestPackageVersion && Array.isArray(latestPackageVersion.maintainers)) {
458
493
  maintainers = latestPackageVersion.maintainers;
459
494
  logs.push(`[${isoNow()}] 📖 Use the latest version(${latestPackageVersion.version}) maintainers instead`);
460
495
  }
@@ -515,12 +550,10 @@ let PackageSyncerService = class PackageSyncerService extends AbstractService {
515
550
  }
516
551
  // Get the list of versions to sync this time
517
552
  const versions = specificVersions
518
- ? Object.values(versionMap).filter(verItem => specificVersions.includes(verItem.version))
553
+ ? Object.values(versionMap).filter((verItem) => specificVersions.includes(verItem.version))
519
554
  : Object.values(versionMap);
520
555
  // 全量同步时跳过排序
521
- const sortedAvailableVersions = specificVersions
522
- ? versions.map(item => item.version).sort(semver.rcompare)
523
- : [];
556
+ const sortedAvailableVersions = specificVersions ? versions.map((item) => item.version).sort(semver.rcompare) : [];
524
557
  // 在strictSyncSpecivicVersion模式下(不同步latest)且所有传入的version均不可用
525
558
  if (specificVersions && sortedAvailableVersions.length === 0) {
526
559
  logs.push(`[${isoNow()}] ❌ `);
@@ -533,7 +566,7 @@ let PackageSyncerService = class PackageSyncerService extends AbstractService {
533
566
  }
534
567
  if (specificVersions) {
535
568
  // specific versions may not in manifest.
536
- const notAvailableVersionList = specificVersions.filter(i => !sortedAvailableVersions.includes(i));
569
+ const notAvailableVersionList = specificVersions.filter((i) => !sortedAvailableVersions.includes(i));
537
570
  logs.push(`[${isoNow()}] 🚧 Syncing specific versions: ${sortedAvailableVersions.join(' | ')}`);
538
571
  if (notAvailableVersionList.length > 0) {
539
572
  logs.push(`🚧 Some specific versions are not available: 👉 ${notAvailableVersionList.join(' | ')} 👈`);
@@ -594,9 +627,7 @@ let PackageSyncerService = class PackageSyncerService extends AbstractService {
594
627
  for (const key of metaDataKeys) {
595
628
  let remoteItemValue = item[key];
596
629
  // make sure hasInstallScript exists
597
- if (key === 'hasInstallScript' &&
598
- remoteItemValue === undefined &&
599
- detectInstallScript(item)) {
630
+ if (key === 'hasInstallScript' && remoteItemValue === undefined && detectInstallScript(item)) {
600
631
  remoteItemValue = true;
601
632
  }
602
633
  if (!isEqual(remoteItemValue, existsItem[key])) {
@@ -638,20 +669,19 @@ let PackageSyncerService = class PackageSyncerService extends AbstractService {
638
669
  continue;
639
670
  }
640
671
  const publishTimeISO = timeMap[version];
641
- const publishTime = publishTimeISO
642
- ? new Date(publishTimeISO)
643
- : new Date();
672
+ const publishTime = publishTimeISO ? new Date(publishTimeISO) : new Date();
644
673
  const delay = Date.now() - publishTime.getTime();
645
674
  logs.push(`[${isoNow()}] 🚧 [${syncIndex}] Syncing version ${version}, delay: ${delay}ms [${publishTimeISO}], tarball: ${tarball}`);
646
675
  let localFile;
647
676
  try {
648
- const { tmpfile, headers, timing } = await downloadToTempfile(this.httpClient, this.config.dataDir, tarball, { remoteAuthToken });
677
+ const { tmpfile, headers, timing } = await downloadToTempfile(this.httpClient, this.config.dataDir, tarball, {
678
+ remoteAuthToken,
679
+ });
649
680
  localFile = tmpfile;
650
681
  logs.push(`[${isoNow()}] 🚧 [${syncIndex}] HTTP content-length: ${headers['content-length']}, timing: ${JSON.stringify(timing)} => ${localFile}`);
651
682
  }
652
683
  catch (err) {
653
- if (err.name === 'DownloadNotFoundError' ||
654
- err.name === 'DownloadStatusInvalidError') {
684
+ if (err.name === 'DownloadNotFoundError' || err.name === 'DownloadStatusInvalidError') {
655
685
  this.logger.warn('Download tarball %s error: %s', tarball, err);
656
686
  }
657
687
  else {
@@ -683,8 +713,7 @@ let PackageSyncerService = class PackageSyncerService extends AbstractService {
683
713
  };
684
714
  try {
685
715
  // 当 version 记录已经存在时,还需要校验一下 pkg.manifests 是否存在
686
- const publisher = users.find(user => user.displayName === item._npmUser?.name) ||
687
- users[0];
716
+ const publisher = users.find((user) => user.displayName === item._npmUser?.name) || users[0];
688
717
  const pkgVersion = await this.packageManagerService.publish(publishCmd, publisher);
689
718
  updateVersions.push(pkgVersion.version);
690
719
  logs.push(`[${isoNow()}] 🎉 [${syncIndex}] Synced version ${version} success, packageVersionId: ${pkgVersion.packageVersionId}, db id: ${pkgVersion.id}`);
@@ -811,7 +840,7 @@ let PackageSyncerService = class PackageSyncerService extends AbstractService {
811
840
  }
812
841
  }
813
842
  // 3.2 should add latest tag
814
- // 在同步 sepcific version 时如果没有同步 latestTag 的版本会出现 latestTag 丢失或指向版本不正确的情况
843
+ // 在同步 specific version 时如果没有同步 latestTag 的版本会出现 latestTag 丢失或指向版本不正确的情况
815
844
  if (specificVersions && this.config.cnpmcore.strictSyncSpecivicVersion) {
816
845
  // 不允许自动同步 latest 版本,从已同步版本中选出 latest
817
846
  let latestStableVersion = semver.maxSatisfying(sortedAvailableVersions, '*');
@@ -819,8 +848,7 @@ let PackageSyncerService = class PackageSyncerService extends AbstractService {
819
848
  if (!latestStableVersion) {
820
849
  latestStableVersion = sortedAvailableVersions[0];
821
850
  }
822
- if (!existsDistTags.latest ||
823
- semver.rcompare(existsDistTags.latest, latestStableVersion) === 1) {
851
+ if (!existsDistTags.latest || semver.rcompare(existsDistTags.latest, latestStableVersion) === 1) {
824
852
  logs.push(`[${isoNow()}] 🚧 patch latest tag from specific versions 🚧`);
825
853
  changedTags.push({
826
854
  action: 'change',
@@ -885,7 +913,437 @@ let PackageSyncerService = class PackageSyncerService extends AbstractService {
885
913
  await this.cacheService.removeCache(fullname);
886
914
  logs.push(`[${isoNow()}] 🗑️ Clean cache`);
887
915
  logs.push(`[${isoNow()}] 📝 Log URL: ${logUrl}`);
888
- logs.push(`[${isoNow()}] 🔗 ${url}`);
916
+ logs.push(`[${isoNow()}] 🔗 ${remoteUrl}`);
917
+ task.error = lastErrorMessage;
918
+ this.logger.info('[PackageSyncerService.executeTask:success] taskId: %s, targetName: %s', task.taskId, task.targetName);
919
+ await this.taskService.finishTask(task, TaskState.Success, logs.join('\n'));
920
+ }
921
+ /**
922
+ * sync package with packument
923
+ * TODO:
924
+ * - [ ] support specificVersions
925
+ */
926
+ async syncPackageWithPackument(options) {
927
+ let { task, remoteData, pkg, registry, logUrl, remoteUrl, logs } = options;
928
+ const fullname = task.targetName;
929
+ const { syncDownloadData, skipDependencies, forceSyncHistory } = task.data;
930
+ const [scope, name] = getScopeAndName(fullname);
931
+ let packument;
932
+ try {
933
+ packument = new Packument(remoteData);
934
+ }
935
+ catch (err) {
936
+ task.error = `parse packument error: ${err}, data: ${remoteData.toString().substring(0, 1024)}`;
937
+ logs.push(`[${isoNow()}] ❌ ${task.error}, log: ${logUrl}`);
938
+ logs.push(`[${isoNow()}] ❌❌❌❌❌ ${fullname} ❌❌❌❌❌`);
939
+ this.logger.info('[PackageSyncerService.executeTask:fail-parse-packument] taskId: %s, targetName: %s, %s', task.taskId, task.targetName, task.error);
940
+ await this.taskService.finishTask(task, TaskState.Fail, logs.join('\n'));
941
+ return;
942
+ }
943
+ let readme = packument.readme ?? '';
944
+ // "time": {
945
+ // "created": "2021-03-27T12:30:23.891Z",
946
+ // "0.0.2": "2021-03-27T12:30:24.349Z",
947
+ // "modified": "2021-12-08T14:59:57.264Z",
948
+ const timeMap = packument.time ?? {};
949
+ // maintainers: [
950
+ // { name: 'foo', email: 'foo@gmail.com' },
951
+ // { name: 'bar', email: 'bar.laster.11@gmail.com' }
952
+ // ],
953
+ let maintainers = (packument.maintainers ?? []);
954
+ // only maintainers is empty and package is unpublished, then delete the package
955
+ if (maintainers.length === 0 && packument.isUnpublished) {
956
+ await this.syncDeletePkg({ task, pkg, logs, logUrl, url: remoteUrl, data: remoteData });
957
+ return;
958
+ }
959
+ const failEnd = `❌❌❌❌❌ ${remoteUrl || fullname} ❌❌❌❌❌`;
960
+ const distTags = packument.distTags ?? {};
961
+ // show latest information
962
+ if (distTags.latest) {
963
+ logs.push(`[${isoNow()}] 📖 ${fullname} latest version: ${distTags.latest}, published time: ${timeMap[distTags.latest]}`);
964
+ }
965
+ // #region save maintainers
966
+ const maintainersMap = {};
967
+ const users = [];
968
+ let changedUserCount = 0;
969
+ if (maintainers.length === 0) {
970
+ const description = packument.description;
971
+ const repository = packument.repository;
972
+ // https://r.cnpmjs.org/webpack.js.org/sync/log/61dbc7c8ff747911a5701068
973
+ // https://registry.npmjs.org/webpack.js.org
974
+ // security holding package will not contains maintainers, auto set npm and npm@npmjs.com to maintainer
975
+ // "description": "security holding package",
976
+ // "repository": "npm/security-holder"
977
+ if (description === 'security holding package' || repository === 'npm/security-holder') {
978
+ maintainers = [{ name: 'npm', email: 'npm@npmjs.com' }];
979
+ }
980
+ else {
981
+ // try to use latest tag version's maintainers instead
982
+ const latestPackageVersion = packument.getLatestVersion();
983
+ if (latestPackageVersion && Array.isArray(latestPackageVersion.maintainers)) {
984
+ maintainers = latestPackageVersion.maintainers;
985
+ logs.push(`[${isoNow()}] 📖 Use the latest version(${latestPackageVersion.version}) maintainers instead`);
986
+ }
987
+ }
988
+ }
989
+ if (maintainers.length > 0) {
990
+ logs.push(`[${isoNow()}] 🚧 Syncing maintainers: ${JSON.stringify(maintainers)}`);
991
+ for (const maintainer of maintainers) {
992
+ if (maintainer.name && maintainer.email) {
993
+ maintainersMap[maintainer.name] = maintainer;
994
+ const { changed, user } = await this.userService.saveUser(maintainer.name, maintainer.email, registry.userPrefix);
995
+ users.push(user);
996
+ if (changed) {
997
+ changedUserCount++;
998
+ logs.push(`[${isoNow()}] 🟢 [${changedUserCount}] Synced ${maintainer.name} => ${user.name}(${user.userId})`);
999
+ }
1000
+ }
1001
+ }
1002
+ }
1003
+ // #endregion
1004
+ const firstUser = users[0];
1005
+ if (users.length === 0) {
1006
+ // check unpublished
1007
+ // https://r.cnpmjs.org/-/package/babel-plugin-autocss/syncs/61e4be46c7cbfac94d2ec597/log
1008
+ // {
1009
+ // "name": "babel-plugin-autocss",
1010
+ // "time": {
1011
+ // "created": "2021-10-29T08:21:56.032Z",
1012
+ // "0.0.1": "2021-10-29T08:21:56.206Z",
1013
+ // "modified": "2022-01-14T12:34:23.941Z",
1014
+ // "unpublished": {
1015
+ // "time": "2022-01-14T12:34:23.941Z",
1016
+ // "versions": [
1017
+ // "0.0.1"
1018
+ // ]
1019
+ // }
1020
+ // }
1021
+ // }
1022
+ // invalid maintainers, sync fail, should be a bug here
1023
+ task.error = `invalid maintainers: ${JSON.stringify(maintainers)}`;
1024
+ logs.push(`[${isoNow()}] ❌ ${task.error}, log: ${logUrl}`);
1025
+ logs.push(`[${isoNow()}] ${failEnd}`);
1026
+ this.logger.info('[PackageSyncerService.executeTask:fail-invalid-maintainers] taskId: %s, targetName: %s, %s', task.taskId, task.targetName, task.error);
1027
+ await this.taskService.finishTask(task, TaskState.Fail, logs.join('\n'));
1028
+ return;
1029
+ }
1030
+ let lastErrorMessage = '';
1031
+ const dependenciesSet = new Set();
1032
+ let existsVersions = await this.packageVersionRepository.findAllVersions(scope, name);
1033
+ // remove all versions for force sync history, only allow by admin
1034
+ if (forceSyncHistory === true && pkg) {
1035
+ for (const version of existsVersions) {
1036
+ const pkgVer = await this.packageRepository.findPackageVersion(pkg.packageId, version);
1037
+ if (pkgVer) {
1038
+ logs.push(`[${isoNow()}] 🚧 Remove version ${version} for force sync history`);
1039
+ await this.packageManagerService.removePackageVersion(pkg, pkgVer, true);
1040
+ }
1041
+ }
1042
+ existsVersions = [];
1043
+ }
1044
+ const existsVersionsSet = new Set(existsVersions);
1045
+ const startTime = Date.now();
1046
+ const diff = packument.diff(existsVersions);
1047
+ const useTime = Date.now() - startTime;
1048
+ const totalVersionCount = existsVersions.length + diff.addedVersions.length - diff.removedVersions.length;
1049
+ logs.push(`[${isoNow()}] 🚧 Syncing versions ${existsVersions.length} => ${totalVersionCount}, \
1050
+ ${diff.addedVersions.length} added, ${diff.removedVersions.length} removed, calculate diff use ${useTime}ms`);
1051
+ const updateVersions = [];
1052
+ let syncIndex = 0;
1053
+ // #region sync added versions
1054
+ for (const [version, [offsetStart, offsetEnd]] of diff.addedVersions) {
1055
+ // @ts-expect-error JSON.parse accepts Buffer in Node.js, though TypeScript types don't reflect this
1056
+ const item = JSON.parse(remoteData.subarray(offsetStart, offsetEnd));
1057
+ // New version found, start syncing
1058
+ syncIndex++;
1059
+ const description = item.description;
1060
+ // "dist": {
1061
+ // "shasum": "943e0ec03df00ebeb6273a5b94b916ba54b47581",
1062
+ // "tarball": "https://registry.npmjs.org/foo/-/foo-1.0.0.tgz"
1063
+ // },
1064
+ const dist = item.dist;
1065
+ const tarball = dist?.tarball;
1066
+ if (!tarball) {
1067
+ lastErrorMessage = `missing tarball, dist: ${JSON.stringify(dist)}`;
1068
+ logs.push(`[${isoNow()}] ❌ [${syncIndex}] Synced version ${version} fail, ${lastErrorMessage}`);
1069
+ await this.taskService.appendTaskLog(task, logs.join('\n'));
1070
+ logs = [];
1071
+ continue;
1072
+ }
1073
+ const publishTimeISO = timeMap[version];
1074
+ const publishTime = publishTimeISO ? new Date(publishTimeISO) : new Date();
1075
+ const delay = Date.now() - publishTime.getTime();
1076
+ logs.push(`[${isoNow()}] 🚧 [${syncIndex}] Syncing version ${version}, delay: ${delay}ms [${publishTimeISO}], tarball: ${tarball}`);
1077
+ let localFile;
1078
+ try {
1079
+ const { tmpfile, headers, timing } = await downloadToTempfile(this.httpClient, this.config.dataDir, tarball, {
1080
+ remoteAuthToken: registry.authToken,
1081
+ });
1082
+ localFile = tmpfile;
1083
+ logs.push(`[${isoNow()}] 🚧 [${syncIndex}] HTTP content-length: ${headers['content-length']}, timing: ${JSON.stringify(timing)} => ${localFile}`);
1084
+ }
1085
+ catch (err) {
1086
+ if (err.name === 'DownloadNotFoundError' || err.name === 'DownloadStatusInvalidError') {
1087
+ this.logger.warn('Download tarball %s error: %s', tarball, err);
1088
+ }
1089
+ else {
1090
+ this.logger.error('Download tarball %s error: %s', tarball, err);
1091
+ }
1092
+ lastErrorMessage = `download tarball error: ${err}`;
1093
+ logs.push(`[${isoNow()}] ❌ [${syncIndex}] Synced version ${version} fail, ${lastErrorMessage}`);
1094
+ await this.taskService.appendTaskLog(task, logs.join('\n'));
1095
+ logs = [];
1096
+ continue;
1097
+ }
1098
+ if (!pkg) {
1099
+ // try to read package entity again after first sync
1100
+ pkg = await this.packageRepository.findPackage(scope, name);
1101
+ }
1102
+ const publishCmd = {
1103
+ scope,
1104
+ name,
1105
+ version,
1106
+ description,
1107
+ packageJson: item,
1108
+ readme,
1109
+ registryId: registry.registryId,
1110
+ dist: {
1111
+ localFile,
1112
+ },
1113
+ isPrivate: false,
1114
+ publishTime,
1115
+ skipRefreshPackageManifests: true,
1116
+ };
1117
+ try {
1118
+ // if version record already exists, need to check if pkg.manifests exists
1119
+ const npmUserName = item._npmUser?.name;
1120
+ const publisher = (npmUserName && users.find((user) => user.displayName === npmUserName)) || firstUser;
1121
+ const pkgVersion = await this.packageManagerService.publish(publishCmd, publisher);
1122
+ updateVersions.push(pkgVersion.version);
1123
+ logs.push(`[${isoNow()}] 🎉 [${syncIndex}] Synced version ${version} success, packageVersionId: ${pkgVersion.packageVersionId}, db id: ${pkgVersion.id}`);
1124
+ }
1125
+ catch (err) {
1126
+ if (err.name === 'ForbiddenError') {
1127
+ logs.push(`[${isoNow()}] 🐛 [${syncIndex}] Synced version ${version} already exists, skip publish, try to set in local manifest`);
1128
+ // if pkg.maintainers not exists, need to supplement it
1129
+ updateVersions.push(version);
1130
+ }
1131
+ else {
1132
+ err.taskId = task.taskId;
1133
+ this.logger.error(err);
1134
+ lastErrorMessage = `publish error: ${err}`;
1135
+ logs.push(`[${isoNow()}] ❌ [${syncIndex}] Synced version ${version} error, ${lastErrorMessage}`);
1136
+ if (err.name === 'BadRequestError') {
1137
+ // if current version's dependencies not satisfied, try to retry
1138
+ // will retry at the end of the current queue
1139
+ this.logger.info('[PackageSyncerService.executeTask:fail-validate-deps] taskId: %s, targetName: %s, %s', task.taskId, task.targetName, task.error);
1140
+ await this.taskService.retryTask(task, logs.join('\n'));
1141
+ return;
1142
+ }
1143
+ }
1144
+ }
1145
+ await this.taskService.appendTaskLog(task, logs.join('\n'));
1146
+ logs = [];
1147
+ await rm(localFile, { force: true });
1148
+ if (!skipDependencies) {
1149
+ const dependencies = item.dependencies || {};
1150
+ for (const dependencyName in dependencies) {
1151
+ dependenciesSet.add(dependencyName);
1152
+ }
1153
+ const optionalDependencies = item.optionalDependencies || {};
1154
+ for (const dependencyName in optionalDependencies) {
1155
+ dependenciesSet.add(dependencyName);
1156
+ }
1157
+ }
1158
+ }
1159
+ // #endregion
1160
+ // try to read package entity again after new versions sync
1161
+ if (!pkg) {
1162
+ pkg = await this.packageRepository.findPackage(scope, name);
1163
+ }
1164
+ if (!pkg?.id) {
1165
+ // sync all versions fail in the first time
1166
+ logs.push(`[${isoNow()}] ❌ All versions sync fail, package not exists, log: ${logUrl}`);
1167
+ logs.push(`[${isoNow()}] ${failEnd}`);
1168
+ task.error = lastErrorMessage;
1169
+ this.logger.info('[PackageSyncerService.executeTask:fail] taskId: %s, targetName: %s, package not exists', task.taskId, task.targetName);
1170
+ await this.taskService.finishTask(task, TaskState.Fail, logs.join('\n'));
1171
+ return;
1172
+ }
1173
+ // #region sync removed versions
1174
+ for (const version of diff.removedVersions) {
1175
+ const pkgVersion = await this.packageRepository.findPackageVersion(pkg.packageId, version);
1176
+ if (pkgVersion) {
1177
+ await this.packageManagerService.removePackageVersion(pkg, pkgVersion, true);
1178
+ logs.push(`[${isoNow()}] 🟢 Removed version ${version} success`);
1179
+ }
1180
+ }
1181
+ // #endregion
1182
+ // #region check different meta data
1183
+ // these fields will be changed after publish, so we need to check if they are different
1184
+ const fieldsToCheck = [
1185
+ 'deprecated',
1186
+ 'funding',
1187
+ // this field won't change, but this is a bug(#910) on cnpmcore, so we need to check if it is different
1188
+ '_npmUser',
1189
+ ];
1190
+ // for performance reason, we won't check all versions by default, only check those versions on dist-tags
1191
+ for (const version of Object.values(distTags)) {
1192
+ // ignore already synced versions
1193
+ if (updateVersions.includes(version) || diff.removedVersions.includes(version)) {
1194
+ continue;
1195
+ }
1196
+ const pkgVersion = await this.packageRepository.findPackageVersion(pkg.packageId, version);
1197
+ if (!pkgVersion) {
1198
+ logs.push(`[${isoNow()}] 🚧 version ${version} not exists in database, skip check different meta data`);
1199
+ continue;
1200
+ }
1201
+ const manifestBuilder = await this.distRepository.findPackageVersionManifestJSONBuilder(pkg.packageId, version);
1202
+ if (!manifestBuilder) {
1203
+ logs.push(`[${isoNow()}] 🚧 version ${version} manifest not exists, skip check different meta data`);
1204
+ continue;
1205
+ }
1206
+ const abbreviatedManifestBuilder = await this.distRepository.findPackageAbbreviatedManifestJSONBuilder(pkg.packageId, version);
1207
+ if (!abbreviatedManifestBuilder) {
1208
+ logs.push(`[${isoNow()}] 🚧 version ${version} abbreviated manifest not exists, may be a bug here`);
1209
+ }
1210
+ let hasDifferent = false;
1211
+ const diffMeta = {};
1212
+ for (const field of fieldsToCheck) {
1213
+ const remoteValue = packument.getBufferIn(['versions', version, field])?.toString();
1214
+ const localValue = manifestBuilder.getBufferIn([field])?.toString();
1215
+ if (remoteValue !== localValue) {
1216
+ const newValue = remoteValue ? JSON.parse(remoteValue) : undefined;
1217
+ if (newValue === undefined) {
1218
+ // delete
1219
+ manifestBuilder.deleteIn([field]);
1220
+ abbreviatedManifestBuilder?.deleteIn([field]);
1221
+ diffMeta[field] = '$$delete$$';
1222
+ }
1223
+ else {
1224
+ // update
1225
+ manifestBuilder.setIn([field], newValue);
1226
+ abbreviatedManifestBuilder?.setIn([field], newValue);
1227
+ diffMeta[field] = newValue;
1228
+ }
1229
+ hasDifferent = true;
1230
+ }
1231
+ }
1232
+ if (hasDifferent) {
1233
+ await this.packageManagerService.savePackageVersionManifestWithBuilder(pkgVersion, manifestBuilder, abbreviatedManifestBuilder);
1234
+ updateVersions.push(version);
1235
+ logs.push(`[${isoNow()}] 🟢 Synced version ${version} success, different meta: ${JSON.stringify(diffMeta)}`);
1236
+ }
1237
+ }
1238
+ // #endregion
1239
+ logs.push(`[${isoNow()}] 🟢 Synced updated ${updateVersions.length} versions, removed ${diff.removedVersions.length} versions`);
1240
+ if (updateVersions.length > 0 || diff.removedVersions.length > 0) {
1241
+ logs.push(`[${isoNow()}] 🚧 Refreshing manifests to dists ......`);
1242
+ const start = Date.now();
1243
+ await this.taskService.appendTaskLog(task, logs.join('\n'));
1244
+ logs = [];
1245
+ await this.packageManagerService.refreshPackageChangeVersionsToDists(pkg, updateVersions, diff.removedVersions);
1246
+ logs.push(`[${isoNow()}] 🟢 Refresh use ${Date.now() - start}ms`);
1247
+ }
1248
+ // #region update tags
1249
+ // "dist-tags": {
1250
+ // "latest": "0.0.7"
1251
+ // },
1252
+ const changedTags = [];
1253
+ const existsDistTags = await this.packageManagerService.distTags(pkg);
1254
+ let shouldRefreshDistTags = false;
1255
+ for (const tag in distTags) {
1256
+ const version = distTags[tag];
1257
+ const utf8mb3Regex = /[\u0020-\uD7FF\uE000-\uFFFD]/;
1258
+ if (!utf8mb3Regex.test(tag)) {
1259
+ logs.push(`[${isoNow()}] 🚧 invalid tag(${tag}: ${version}), tag name is out of utf8mb3, skip`);
1260
+ continue;
1261
+ }
1262
+ // new tag's version is not exists in exists versions and update versions
1263
+ // e.g: if latest version's version write failed, skip it
1264
+ if (!existsVersionsSet.has(version) && !updateVersions.includes(version)) {
1265
+ logs.push(`[${isoNow()}] 🚧 invalid tag(${tag}: ${version}), version is not exists, skip`);
1266
+ continue;
1267
+ }
1268
+ const changed = await this.packageManagerService.savePackageTag(pkg, tag, version);
1269
+ if (changed) {
1270
+ changedTags.push({ action: 'change', tag, version });
1271
+ shouldRefreshDistTags = false;
1272
+ }
1273
+ else if (version !== existsDistTags[tag]) {
1274
+ shouldRefreshDistTags = true;
1275
+ logs.push(`[${isoNow()}] 🚧 Remote tag(${tag}: ${version}) not exists in local dist-tags`);
1276
+ }
1277
+ }
1278
+ // find out remove tags
1279
+ for (const tag in existsDistTags) {
1280
+ if (!(tag in distTags)) {
1281
+ const changed = await this.packageManagerService.removePackageTag(pkg, tag);
1282
+ if (changed) {
1283
+ changedTags.push({ action: 'remove', tag });
1284
+ shouldRefreshDistTags = false;
1285
+ }
1286
+ }
1287
+ }
1288
+ if (changedTags.length > 0) {
1289
+ logs.push(`[${isoNow()}] 🟢 Synced ${changedTags.length} tags: ${JSON.stringify(changedTags)}`);
1290
+ }
1291
+ if (shouldRefreshDistTags) {
1292
+ await this.packageManagerService.refreshPackageDistTagsToDists(pkg);
1293
+ logs.push(`[${isoNow()}] 🟢 Refresh dist-tags`);
1294
+ }
1295
+ // #endregion
1296
+ // #region update package maintainers
1297
+ const hasNewMaintainers = await this.packageManagerService.savePackageMaintainers(pkg, users);
1298
+ // find out remove maintainers
1299
+ const removedMaintainers = [];
1300
+ const existsMaintainers = await this.packageManagerService.maintainers(pkg);
1301
+ for (const maintainer of existsMaintainers) {
1302
+ const { name } = maintainer;
1303
+ if (!(name in maintainersMap)) {
1304
+ const user = await this.userRepository.findUserByName(`${registry.userPrefix || 'npm:'}${name}`);
1305
+ if (user) {
1306
+ await this.packageManagerService.removePackageMaintainer(pkg, user);
1307
+ removedMaintainers.push(maintainer);
1308
+ }
1309
+ }
1310
+ }
1311
+ if (removedMaintainers.length > 0) {
1312
+ logs.push(`[${isoNow()}] 🟢 Removed ${removedMaintainers.length} maintainers: ${JSON.stringify(removedMaintainers)}`);
1313
+ }
1314
+ // update package maintainers in dist
1315
+ // The event is initialized in the repository and distributed after uncork.
1316
+ // maintainers' information is updated in bulk to ensure consistency.
1317
+ if (hasNewMaintainers || removedMaintainers.length > 0) {
1318
+ logs.push(`[${isoNow()}] 🚧 Syncing maintainers to package manifest, from: ${JSON.stringify(maintainers)} to: ${JSON.stringify(existsMaintainers)}`);
1319
+ await this.packageManagerService.refreshPackageMaintainersToDists(pkg);
1320
+ logs.push(`[${isoNow()}] 🟢 Syncing maintainers to package manifest done`);
1321
+ }
1322
+ // #endregion
1323
+ // #region add deps sync task
1324
+ for (const dependencyName of dependenciesSet) {
1325
+ const existsTask = await this.taskRepository.findTaskByTargetName(dependencyName, TaskType.SyncPackage, TaskState.Waiting);
1326
+ if (existsTask) {
1327
+ logs.push(`[${isoNow()}] 📖 Has dependency "${dependencyName}" sync task: ${existsTask.taskId}, db id: ${existsTask.id}`);
1328
+ continue;
1329
+ }
1330
+ const tips = `Sync cause by "${fullname}" dependencies, parent task: ${task.taskId}`;
1331
+ const dependencyTask = await this.createTask(dependencyName, {
1332
+ authorId: task.authorId,
1333
+ authorIp: task.authorIp,
1334
+ tips,
1335
+ });
1336
+ logs.push(`[${isoNow()}] 📦 Add dependency "${dependencyName}" sync task: ${dependencyTask.taskId}, db id: ${dependencyTask.id}`);
1337
+ }
1338
+ // #endregion
1339
+ if (syncDownloadData) {
1340
+ await this.syncDownloadData(task, pkg);
1341
+ }
1342
+ // clean cache
1343
+ await this.cacheService.removeCache(fullname);
1344
+ logs.push(`[${isoNow()}] 🗑️ Clean cache`);
1345
+ logs.push(`[${isoNow()}] 📝 Log URL: ${logUrl}`);
1346
+ logs.push(`[${isoNow()}] 🔗 ${remoteUrl}`);
889
1347
  task.error = lastErrorMessage;
890
1348
  this.logger.info('[PackageSyncerService.executeTask:success] taskId: %s, targetName: %s', task.taskId, task.targetName);
891
1349
  await this.taskService.finishTask(task, TaskState.Success, logs.join('\n'));
@@ -903,6 +1361,10 @@ __decorate([
903
1361
  Inject(),
904
1362
  __metadata("design:type", Function)
905
1363
  ], PackageSyncerService.prototype, "packageVersionDownloadRepository", void 0);
1364
+ __decorate([
1365
+ Inject(),
1366
+ __metadata("design:type", Function)
1367
+ ], PackageSyncerService.prototype, "packageVersionRepository", void 0);
906
1368
  __decorate([
907
1369
  Inject(),
908
1370
  __metadata("design:type", Function)
@@ -939,6 +1401,10 @@ __decorate([
939
1401
  Inject(),
940
1402
  __metadata("design:type", Function)
941
1403
  ], PackageSyncerService.prototype, "scopeManagerService", void 0);
1404
+ __decorate([
1405
+ Inject(),
1406
+ __metadata("design:type", DistRepository)
1407
+ ], PackageSyncerService.prototype, "distRepository", void 0);
942
1408
  __decorate([
943
1409
  Pointcut(EventCorkAdvice),
944
1410
  __metadata("design:type", Function),
@@ -951,4 +1417,4 @@ PackageSyncerService = __decorate([
951
1417
  })
952
1418
  ], PackageSyncerService);
953
1419
  export { PackageSyncerService };
954
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFja2FnZVN5bmNlclNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9hcHAvY29yZS9zZXJ2aWNlL1BhY2thZ2VTeW5jZXJTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN6QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXRDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFDdEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNuQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUM3QyxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQU03QyxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLGVBQWUsR0FDaEIsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQVNsRSxPQUFPLEVBR0wsSUFBSSxHQUNMLE1BQU0sbUJBQW1CLENBQUM7QUFVM0IsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQVcvRSxTQUFTLE1BQU07SUFDYixPQUFPLElBQUksSUFBSSxFQUFFLENBQUMsV0FB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
1420
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFja2FnZVN5bmNlclNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9hcHAvY29yZS9zZXJ2aWNlL1BhY2thZ2VTeW5jZXJTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN0QyxPQUFPLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDekIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWxELE9BQU8sRUFBRSxPQUFPLElBQUksU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUN0RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ25DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDN0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDN0MsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBRTVCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUVsRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDL0UsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDbkYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBYXBFLE9BQU8sRUFBMkQsSUFBSSxFQUFFLE1BQU0sbUJBQW1CLENB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