cnpmcore 3.34.3 → 3.34.5
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.
|
@@ -36,9 +36,9 @@ export declare abstract class AbstractController extends MiddlewareController {
|
|
|
36
36
|
protected createPackageNotFoundError(fullname: string, version?: string): PackageNotFoundError;
|
|
37
37
|
protected createPackageNotFoundErrorWithRedirect(fullname: string, version?: string, allowSync?: boolean): PackageNotFoundError;
|
|
38
38
|
protected createPackageBlockError(reason: string, fullname: string, version?: string): UnavailableForLegalReasonsError;
|
|
39
|
-
protected getPackageEntityByFullname(fullname: string): Promise<PackageEntity>;
|
|
40
|
-
protected getPackageEntity(scope: string, name: string): Promise<PackageEntity>;
|
|
41
|
-
protected getPackageVersionEntity(pkg: PackageEntity, version: string): Promise<PackageVersionEntity>;
|
|
39
|
+
protected getPackageEntityByFullname(fullname: string, allowSync?: boolean): Promise<PackageEntity>;
|
|
40
|
+
protected getPackageEntity(scope: string, name: string, allowSync?: boolean): Promise<PackageEntity>;
|
|
41
|
+
protected getPackageVersionEntity(pkg: PackageEntity, version: string, allowSync?: boolean): Promise<PackageVersionEntity>;
|
|
42
42
|
protected getAndCheckVersionFromFilename(ctx: EggContext, fullname: string, filenameWithVersion: string): string;
|
|
43
43
|
protected setCDNHeaders(ctx: EggContext): void;
|
|
44
44
|
}
|
|
@@ -113,23 +113,23 @@ class AbstractController extends middleware_1.MiddlewareController {
|
|
|
113
113
|
const message = version ? `${fullname}@${version} was blocked` : `${fullname} was blocked`;
|
|
114
114
|
return new egg_errors_1.UnavailableForLegalReasonsError(`${message}, reason: ${reason}`);
|
|
115
115
|
}
|
|
116
|
-
async getPackageEntityByFullname(fullname) {
|
|
116
|
+
async getPackageEntityByFullname(fullname, allowSync) {
|
|
117
117
|
const [scope, name] = (0, PackageUtil_1.getScopeAndName)(fullname);
|
|
118
|
-
return await this.getPackageEntity(scope, name);
|
|
118
|
+
return await this.getPackageEntity(scope, name, allowSync);
|
|
119
119
|
}
|
|
120
120
|
// try to get package entity, throw NotFoundError when package not exists
|
|
121
|
-
async getPackageEntity(scope, name) {
|
|
121
|
+
async getPackageEntity(scope, name, allowSync) {
|
|
122
122
|
const packageEntity = await this.packageRepository.findPackage(scope, name);
|
|
123
123
|
if (!packageEntity) {
|
|
124
124
|
const fullname = (0, PackageUtil_1.getFullname)(scope, name);
|
|
125
|
-
throw this.createPackageNotFoundErrorWithRedirect(fullname);
|
|
125
|
+
throw this.createPackageNotFoundErrorWithRedirect(fullname, undefined, allowSync);
|
|
126
126
|
}
|
|
127
127
|
return packageEntity;
|
|
128
128
|
}
|
|
129
|
-
async getPackageVersionEntity(pkg, version) {
|
|
129
|
+
async getPackageVersionEntity(pkg, version, allowSync) {
|
|
130
130
|
const packageVersion = await this.packageRepository.findPackageVersion(pkg.packageId, version);
|
|
131
131
|
if (!packageVersion) {
|
|
132
|
-
throw this.createPackageNotFoundErrorWithRedirect(pkg.fullname, version);
|
|
132
|
+
throw this.createPackageNotFoundErrorWithRedirect(pkg.fullname, version, allowSync);
|
|
133
133
|
}
|
|
134
134
|
return packageVersion;
|
|
135
135
|
}
|
|
@@ -177,4 +177,4 @@ __decorate([
|
|
|
177
177
|
(0, tegg_1.Inject)(),
|
|
178
178
|
__metadata("design:type", UserService_1.UserService)
|
|
179
179
|
], AbstractController.prototype, "userService", void 0);
|
|
180
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
180
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RDb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vYXBwL3BvcnQvY29udHJvbGxlci9BYnN0cmFjdENvbnRyb2xsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsMkNBR29CO0FBQ3BCLHNDQUdxQjtBQUtyQiw4Q0FBcUQ7QUFDckQsd0RBQXFEO0FBQ3JELDBFQUF1RTtBQUN2RSxvRUFBaUU7QUFDakUsMERBQXdFO0FBR3hFLGdFQUE2RDtBQUM3RCx3Q0FFb0I7QUFDcEIsc0RBQWtEO0FBRWxELE1BQU0sb0JBQXFCLFNBQVEsMEJBQWE7Q0FFL0M7QUFFRCxNQUFNLHVCQUF3QixTQUFRLDBCQUFhO0lBRWpELFlBQVksUUFBZ0I7UUFDMUIsS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUMzQixDQUFDO0NBQ0Y7QUFFRCxNQUFzQixrQkFBbUIsU0FBUSxpQ0FBb0I7SUFjbkUsSUFBYyxjQUFjO1FBQzFCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDO0lBQzdDLENBQUM7SUFFRCxJQUFjLFVBQVU7UUFDdEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEtBQUssb0JBQVEsQ0FBQyxJQUFJLENBQUM7SUFDekQsQ0FBQztJQUVTLGNBQWMsQ0FBQyxLQUFhO1FBQ3BDLE9BQU8sS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVTLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxHQUFlLEVBQUUsUUFBZ0IsRUFBRSxhQUFhLEdBQUcsSUFBSTtRQUN6RixNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLFFB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
|
|
@@ -19,16 +19,23 @@ const AbstractController_1 = require("../AbstractController");
|
|
|
19
19
|
const PackageUtil_1 = require("../../../common/PackageUtil");
|
|
20
20
|
const NFSAdapter_1 = require("../../../common/adapter/NFSAdapter");
|
|
21
21
|
const PackageManagerService_1 = require("../../../core/service/PackageManagerService");
|
|
22
|
+
const constants_1 = require("../../../common/constants");
|
|
22
23
|
let DownloadPackageVersionTarController = exports.DownloadPackageVersionTarController = class DownloadPackageVersionTarController extends AbstractController_1.AbstractController {
|
|
23
24
|
async download(ctx, fullname, filenameWithVersion) {
|
|
24
|
-
// try nfs url first, avoid db query
|
|
25
25
|
// tgz file storeKey: `/packages/${this.fullname}/${version}/${filename}`
|
|
26
26
|
const version = this.getAndCheckVersionFromFilename(ctx, fullname, filenameWithVersion);
|
|
27
27
|
const storeKey = `/packages/${fullname}/${version}/${filenameWithVersion}.tgz`;
|
|
28
28
|
const downloadUrl = await this.nfsAdapter.getDownloadUrl(storeKey);
|
|
29
|
+
if (this.config.cnpmcore.syncMode === constants_1.SyncMode.all && downloadUrl) {
|
|
30
|
+
// try nfs url first, avoid db query
|
|
31
|
+
this.packageManagerService.plusPackageVersionCounter(fullname, version);
|
|
32
|
+
ctx.redirect(downloadUrl);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
29
35
|
// check package version in database
|
|
30
|
-
const
|
|
31
|
-
const
|
|
36
|
+
const allowSync = this.getAllowSync(ctx);
|
|
37
|
+
const pkg = await this.getPackageEntityByFullname(fullname, allowSync);
|
|
38
|
+
const packageVersion = await this.getPackageVersionEntity(pkg, version, allowSync);
|
|
32
39
|
// read by nfs url
|
|
33
40
|
if (downloadUrl) {
|
|
34
41
|
this.packageManagerService.plusPackageVersionCounter(fullname, version);
|
|
@@ -93,4 +100,4 @@ __decorate([
|
|
|
93
100
|
exports.DownloadPackageVersionTarController = DownloadPackageVersionTarController = __decorate([
|
|
94
101
|
(0, tegg_1.HTTPController)()
|
|
95
102
|
], DownloadPackageVersionTarController);
|
|
96
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
103
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRG93bmxvYWRQYWNrYWdlVmVyc2lvblRhci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2FwcC9wb3J0L2NvbnRyb2xsZXIvcGFja2FnZS9Eb3dubG9hZFBhY2thZ2VWZXJzaW9uVGFyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDJDQUVvQjtBQUNwQixzQ0FRcUI7QUFDckIsOERBQTJEO0FBQzNELDZEQUFtRjtBQUNuRixtRUFBZ0U7QUFDaEUsdUZBQW9GO0FBQ3BGLHlEQUFxRDtBQUc5QyxJQUFNLG1DQUFtQyxpREFBekMsTUFBTSxtQ0FBb0MsU0FBUSx1Q0FBa0I7SUFXbkUsQUFBTixLQUFLLENBQUMsUUFBUSxDQUFZLEdBQWUsRUFBZSxRQUFnQixFQUFlLG1CQUEyQjtRQUNoSCx5RUFBeUU7UUFDekUsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLDhCQUE4QixDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztRQUN4RixNQUFNLFFBQVEsR0FBRyxhQUFhLFFBQVEsSUFBSSxPQUFPLElBQUksbUJBQW1CLE1BQU0sQ0FBQztRQUMvRSxNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25FLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxLQUFLLG9CQUFRLENBQUMsR0FBRyxJQUFJLFdBQVcsRUFBRTtZQUNqRSxvQ0FBb0M7WUFDcEMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLHlCQUF5QixDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUN4RSxHQUFHLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzFCLE9BQU87U0FDUjtRQUVELG9DQUFvQztRQUNwQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFD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
|