cnpmcore 3.75.0 → 3.75.2
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.
package/README.md
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
# Private NPM Registry for Enterprise
|
|
2
2
|
|
|
3
|
-
[](https://github.com/cnpm/cnpmcore/actions/workflows/nodejs.yml)
|
|
4
|
-
[](https://github.com/cnpm/cnpmcore/actions/workflows/codeql-analysis.yml)
|
|
3
|
+
[](https://github.com/cnpm/cnpmcore/actions/workflows/nodejs.yml)
|
|
4
|
+
[](https://app.codecov.io/gh/cnpm/cnpmcore/tree/3.x)
|
|
6
5
|
[](https://app.fossa.com/projects/git%2Bgithub.com%2Fcnpm%2Fcnpmcore?ref=badge_shield)
|
|
7
6
|
|
|
8
7
|
Reimplement based on [cnpmjs.org](https://github.com/cnpm/cnpmjs.org) with TypeScript.
|
|
@@ -137,11 +137,11 @@ let PackageVersionService = class PackageVersionService {
|
|
|
137
137
|
}
|
|
138
138
|
async findBlockInfo(fullname) {
|
|
139
139
|
const [scope, name] = (0, PackageUtil_1.getScopeAndName)(fullname);
|
|
140
|
-
const
|
|
141
|
-
if (!
|
|
140
|
+
const packageId = await this.packageRepository.findPackageId(scope, name);
|
|
141
|
+
if (!packageId) {
|
|
142
142
|
return null;
|
|
143
143
|
}
|
|
144
|
-
return await this.packageVersionBlockRepository.findPackageBlock(
|
|
144
|
+
return await this.packageVersionBlockRepository.findPackageBlock(packageId);
|
|
145
145
|
}
|
|
146
146
|
};
|
|
147
147
|
exports.PackageVersionService = PackageVersionService;
|
|
@@ -170,4 +170,4 @@ exports.PackageVersionService = PackageVersionService = __decorate([
|
|
|
170
170
|
accessLevel: tegg_1.AccessLevel.PUBLIC,
|
|
171
171
|
})
|
|
172
172
|
], PackageVersionService);
|
|
173
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
173
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFja2FnZVZlcnNpb25TZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vYXBwL2NvcmUvc2VydmljZS9QYWNrYWdlVmVyc2lvblNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxzQ0FBa0U7QUFDbEUsaURBQXVDO0FBRXZDLHdGQUFxRjtBQUNyRiwwREFBMkQ7QUFDM0QsaURBQThDO0FBQzlDLDJEQUF3RDtBQUV4RCxvRUFBaUU7QUFFakUsa0dBQStGO0FBS3hGLElBQU0scUJBQXFCLEdBQTNCLE1BQU0scUJBQXFCO0lBZ0JoQyxLQUFLLENBQUMsWUFBWSxDQUFDLEtBQWEsRUFBRSxJQUFZLEVBQUUsZUFBd0IsRUFBRSxjQUFjLEdBQUcsSUFBSTtRQUM3RixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pDLElBQUksT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNaLE9BQU8sU0FBUyxDQUFDO1NBQ2xCO1FBQ0QsSUFBSSxnQkFHUyxDQUFDO1FBQ2QsSUFBSSxjQUFjLEVBQUU7WUFDbEIsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDaEUsSUFBSSxVQUFVLEVBQUU7Z0JBQ2QsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUMxRCxJQUFJLE1BQU0sRUFBRTtvQkFDVixnQkFBZ0IsR0FBRzt3QkFDakIsTUFBTTt3QkFDTixPQUFPO3FCQUNSLENBQUM7b0JBQ0YsT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7aUJBQzFCO2FB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
|
|
@@ -7,7 +7,6 @@ export declare class DownloadPackageVersionTarController extends AbstractControl
|
|
|
7
7
|
registryManagerService: RegistryManagerService;
|
|
8
8
|
private proxyCacheService;
|
|
9
9
|
private packageSyncerService;
|
|
10
|
-
private packageVersionService;
|
|
11
10
|
private nfsAdapter;
|
|
12
11
|
downloadForOptions(ctx: EggContext): Promise<void>;
|
|
13
12
|
download(ctx: EggContext, fullname: string, filenameWithVersion: string): Promise<import("stream").Readable | undefined>;
|
|
@@ -24,7 +24,6 @@ const PackageManagerService_1 = require("../../../core/service/PackageManagerSer
|
|
|
24
24
|
const ProxyCacheService_1 = require("../../../core/service/ProxyCacheService");
|
|
25
25
|
const PackageSyncerService_1 = require("../../../core/service/PackageSyncerService");
|
|
26
26
|
const RegistryManagerService_1 = require("../../../core/service/RegistryManagerService");
|
|
27
|
-
const PackageVersionService_1 = require("../../../core/service/PackageVersionService");
|
|
28
27
|
let DownloadPackageVersionTarController = class DownloadPackageVersionTarController extends AbstractController_1.AbstractController {
|
|
29
28
|
// Support OPTIONS Request on tgz download
|
|
30
29
|
async downloadForOptions(ctx) {
|
|
@@ -37,13 +36,6 @@ let DownloadPackageVersionTarController = class DownloadPackageVersionTarControl
|
|
|
37
36
|
const version = this.getAndCheckVersionFromFilename(ctx, fullname, filenameWithVersion);
|
|
38
37
|
const storeKey = `/packages/${fullname}/${version}/${filenameWithVersion}.tgz`;
|
|
39
38
|
const downloadUrl = await this.nfsAdapter.getDownloadUrl(storeKey);
|
|
40
|
-
// block tgz only all versions have been blocked
|
|
41
|
-
const blockInfo = await this.packageVersionService.findBlockInfo(fullname);
|
|
42
|
-
if (blockInfo?.reason) {
|
|
43
|
-
this.setCDNHeaders(ctx);
|
|
44
|
-
ctx.logger.info('[PackageController:downloadVersionTar] %s@%s, block for %s', fullname, version, blockInfo.reason);
|
|
45
|
-
throw this.createPackageBlockError(blockInfo.reason, fullname, version);
|
|
46
|
-
}
|
|
47
39
|
if (this.config.cnpmcore.syncMode === constants_1.SyncMode.all && downloadUrl) {
|
|
48
40
|
// try nfs url first, avoid db query
|
|
49
41
|
this.packageManagerService.plusPackageVersionCounter(fullname, version);
|
|
@@ -137,10 +129,6 @@ __decorate([
|
|
|
137
129
|
(0, tegg_1.Inject)(),
|
|
138
130
|
__metadata("design:type", PackageSyncerService_1.PackageSyncerService)
|
|
139
131
|
], DownloadPackageVersionTarController.prototype, "packageSyncerService", void 0);
|
|
140
|
-
__decorate([
|
|
141
|
-
(0, tegg_1.Inject)(),
|
|
142
|
-
__metadata("design:type", PackageVersionService_1.PackageVersionService)
|
|
143
|
-
], DownloadPackageVersionTarController.prototype, "packageVersionService", void 0);
|
|
144
132
|
__decorate([
|
|
145
133
|
(0, tegg_1.Inject)(),
|
|
146
134
|
__metadata("design:type", NFSAdapter_1.NFSAdapter)
|
|
@@ -209,4 +197,4 @@ __decorate([
|
|
|
209
197
|
exports.DownloadPackageVersionTarController = DownloadPackageVersionTarController = __decorate([
|
|
210
198
|
(0, tegg_1.HTTPController)()
|
|
211
199
|
], DownloadPackageVersionTarController);
|
|
212
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
200
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRG93bmxvYWRQYWNrYWdlVmVyc2lvblRhci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2FwcC9wb3J0L2NvbnRyb2xsZXIvcGFja2FnZS9Eb3dubG9hZFBhY2thZ2VWZXJzaW9uVGFyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDZDQUEwQztBQUMxQywyQ0FFb0I7QUFDcEIsc0NBUXFCO0FBQ3JCLDhEQUEyRDtBQUMzRCw2REFBbUY7QUFDbkYseURBQXFEO0FBQ3JELG1FQUFnRTtBQUNoRSx1RkFBb0Y7QUFDcEYsK0VBQTRFO0FBQzVFLHFGQUFrRjtBQUNsRix5RkFBc0Y7QUFHL0UsSUFBTSxtQ0FBbUMsR0FBekMsTUFBTSxtQ0FBb0MsU0FBUSx1Q0FBa0I7SUFZekUsMENBQTBDO0lBTXBDLEFBQU4sS0FBSyxDQUFDLGtCQUFrQixDQUFZLEdBQWU7UUFDakQsR0FBRyxDQUFDLEdBQUcsQ0FBQyw2QkFBNkIsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUM1QyxHQUFHLENBQUMsR0FBRyxDQUFDLDhCQUE4QixFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3BELEdBQUcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO0lBQ25CLENBQUM7SUFPSyxBQUFOLEtBQUssQ0FBQyxRQUFRLENBQVksR0FBZSxFQUFlLFFBQWdCLEVBQWUsbUJBQTJCO1FBQ2hILHlFQUF5RTtRQUN6RSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsOEJBQThCLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3hGLE1BQU0sUUFBUSxHQUFHLGFBQWEsUUFBUSxJQUFJLE9BQU8sSUFBSSxtQkFBbUIsTUFBTSxDQUFDO1FBQy9FLE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFbkUsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFD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
|