cnpmcore
Version:
Private NPM Registry for Enterprise
155 lines • 12.3 kB
JavaScript
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
import { AccessLevel, Inject, SingletonProto } from 'egg';
import semver, { Range } from 'semver';
import { getScopeAndName } from "../../common/PackageUtil.js";
import { SqlRange } from "../entity/SqlRange.js";
let PackageVersionService = class PackageVersionService {
async readManifest(pkgId, spec, isFullManifests, withBugVersion = true) {
const realSpec = this.findRealSpec(spec);
let version = await this.getVersion(realSpec, false);
if (!version) {
return undefined;
}
let bugVersionAdvice;
if (withBugVersion) {
const bugVersion = await this.bugVersionService.getBugVersion();
if (bugVersion) {
const advice = bugVersion.fixVersion(spec.name, version);
if (advice) {
bugVersionAdvice = {
advice,
version,
};
version = advice.version;
}
}
}
let manifest;
if (isFullManifests) {
manifest = await this.distRepository.findPackageVersionManifest(pkgId, version);
}
else {
manifest = await this.distRepository.findPackageAbbreviatedManifest(pkgId, version);
}
if (manifest && bugVersionAdvice) {
manifest.deprecated = `[WARNING] Use ${bugVersionAdvice.advice.version} instead of ${bugVersionAdvice.version}, reason: ${bugVersionAdvice.advice.reason}`;
manifest.version = bugVersionAdvice.version;
}
return manifest;
}
findRealSpec(spec) {
let realSpec;
switch (spec.type) {
case 'alias': {
realSpec = spec.subSpec;
break;
}
case 'version':
case 'tag':
case 'range': {
realSpec = spec;
break;
}
default: {
throw new Error(`cnpmcore not support spec: ${spec.raw}`);
}
}
return realSpec;
}
async getVersion(spec, withBugVersion = true) {
let version;
const [scope, name] = getScopeAndName(spec.name);
const fetchSpec = spec.fetchSpec;
// 优先通过 tag 来进行判断
if (spec.type === 'tag') {
version = await this.packageVersionRepository.findVersionByTag(scope, name, fetchSpec);
}
else if (spec.type === 'version') {
// 1.0.0
// '=1.0.0' => '1.0.0'
// https://github.com/npm/npm-package-arg/blob/main/lib/npa.js#L392
version = semver.valid(fetchSpec, true);
}
else if (spec.type === 'range') {
// a@1.1 情况下,1.1 会解析为 range,如果有对应的 distTag 时会失效
// 这里需要进行兼容
// 仅当 spec 不为 version 时才查询,减少请求次数
const versionMatchTag = await this.packageVersionRepository.findVersionByTag(scope, name, fetchSpec);
if (versionMatchTag) {
version = versionMatchTag;
}
else {
const range = new Range(fetchSpec);
// Prefer latest tag version if it satisfies the range
// e.g., latest=4.1.0, newest=4.2.0, range=^4 should return 4.1.0
const latestVersion = await this.packageVersionRepository.findVersionByTag(scope, name, 'latest');
if (latestVersion && semver.satisfies(latestVersion, range)) {
version = latestVersion;
}
else {
const paddingSemVer = new SqlRange(range);
if (paddingSemVer.containPreRelease) {
const versions = await this.packageVersionRepository.findSatisfyVersionsWithPrerelease(scope, name, paddingSemVer);
version = semver.maxSatisfying(versions, range);
}
else {
version = await this.packageVersionRepository.findMaxSatisfyVersion(scope, name, paddingSemVer);
}
}
}
}
if (version && withBugVersion) {
const bugVersion = await this.bugVersionService.getBugVersion();
if (bugVersion) {
const advice = bugVersion.fixVersion(spec.name, version);
if (advice) {
version = advice.version;
}
}
}
return version;
}
async findBlockInfo(fullname) {
const [scope, name] = getScopeAndName(fullname);
const packageId = await this.packageRepository.findPackageId(scope, name);
if (!packageId) {
return null;
}
return await this.packageVersionBlockRepository.findPackageBlock(packageId);
}
};
__decorate([
Inject(),
__metadata("design:type", Function)
], PackageVersionService.prototype, "packageVersionRepository", void 0);
__decorate([
Inject(),
__metadata("design:type", Function)
], PackageVersionService.prototype, "packageRepository", void 0);
__decorate([
Inject(),
__metadata("design:type", Function)
], PackageVersionService.prototype, "packageVersionBlockRepository", void 0);
__decorate([
Inject(),
__metadata("design:type", Function)
], PackageVersionService.prototype, "bugVersionService", void 0);
__decorate([
Inject(),
__metadata("design:type", Function)
], PackageVersionService.prototype, "distRepository", void 0);
PackageVersionService = __decorate([
SingletonProto({
accessLevel: AccessLevel.PUBLIC,
})
], PackageVersionService);
export { PackageVersionService };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFja2FnZVZlcnNpb25TZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vYXBwL2NvcmUvc2VydmljZS9QYWNrYWdlVmVyc2lvblNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBRTFELE9BQU8sTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRXZDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQU05RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFNMUMsSUFBTSxxQkFBcUIsR0FBM0IsTUFBTSxxQkFBcUI7SUFnQmhDLEtBQUssQ0FBQyxZQUFZLENBQ2hCLEtBQWEsRUFDYixJQUFZLEVBQ1osZUFBd0IsRUFDeEIsY0FBYyxHQUFHLElBQUk7UUFFckIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxJQUFJLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNiLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFDRCxJQUFJLGdCQUtTLENBQUM7UUFDZCxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ25CLE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ2hFLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ2YsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUNuRSxJQUFJLE1BQU0sRUFBRSxDQUFDO29C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