cnpmcore 3.38.0 → 3.38.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.
|
@@ -8,6 +8,6 @@ export declare class CacheAdapter {
|
|
|
8
8
|
delete(key: string): Promise<void>;
|
|
9
9
|
lock(key: string, seconds: number): Promise<string | null>;
|
|
10
10
|
unlock(key: string, lockTimestamp: string): Promise<void>;
|
|
11
|
-
usingLock(key: string, seconds: number, func: () => Promise<void>): Promise<
|
|
11
|
+
usingLock(key: string, seconds: number, func: () => Promise<void>): Promise<boolean>;
|
|
12
12
|
private getLockName;
|
|
13
13
|
}
|
|
@@ -57,13 +57,14 @@ let CacheAdapter = exports.CacheAdapter = class CacheAdapter {
|
|
|
57
57
|
async usingLock(key, seconds, func) {
|
|
58
58
|
const lockTimestamp = await this.lock(key, seconds);
|
|
59
59
|
if (!lockTimestamp)
|
|
60
|
-
return;
|
|
60
|
+
return false;
|
|
61
61
|
try {
|
|
62
62
|
await func();
|
|
63
63
|
}
|
|
64
64
|
finally {
|
|
65
65
|
await this.unlock(key, lockTimestamp);
|
|
66
66
|
}
|
|
67
|
+
return true;
|
|
67
68
|
}
|
|
68
69
|
getLockName(key) {
|
|
69
70
|
return `CNPMCORE_L_${key}`;
|
|
@@ -78,4 +79,4 @@ exports.CacheAdapter = CacheAdapter = __decorate([
|
|
|
78
79
|
accessLevel: tegg_1.AccessLevel.PUBLIC,
|
|
79
80
|
})
|
|
80
81
|
], CacheAdapter);
|
|
81
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2FjaGVBZGFwdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vYXBwL2NvbW1vbi9hZGFwdGVyL0NhY2hlQWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSxzQ0FJcUI7QUFLckIsTUFBTSxPQUFPLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUtuQixJQUFNLFlBQVksMEJBQWxCLE1BQU0sWUFBWTtJQUl2QixLQUFLLENBQUMsUUFBUSxDQUFDLEdBQVcsRUFBRSxLQUFhO1FBQ3ZDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFXO1FBQ3hCLE9BQU8sTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFXLEVBQUUsSUFBWTtRQUNqQyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBVztRQUNuQixPQUFPLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBVztRQUN0QixNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQVcsRUFBRSxPQUFlO1FBQ3JDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkMsTUFBTSxlQUFlLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN2RCxJQUFJLGVBQWUsRUFBRTtZQUNuQixJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDLEdBQUcsT0FBTyxHQUFHLElBQUksRUFBRTtnQkFDM0QsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUNELDBCQUEwQjtZQUMxQixNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ2hDO1FBQ0QsTUFBTSxTQUFTLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsT0FBTyxHQUFHLElBQUksRUFBRSxDQUFDO1FBQ25ELE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3pELHdCQUF3QjtRQUN4QixJQUFJLElBQUksS0FBSyxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDNUIsU0FBUztRQUNULE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzNDLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQVcsRUFBRSxhQUFxQjtRQUM3QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sZUFBZSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLGVBQWUsSUFBSSxhQUFhLEtBQUssZUFBZTtZQUFFLE9BQU87UUFDbEUsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFXLEVBQUUsT0FBZSxFQUFFLElBQXlCO1FBQ3JFLE1BQU0sYUFBYSxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLGFBQWE7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUNqQyxJQUFJO1lBQ0YsTUFBTSxJQUFJLEVBQUUsQ0FBQztTQUNkO2dCQUFTO1lBQ1IsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxhQUFhLENBQUMsQ0FBQztTQUN2QztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVPLFdBQVcsQ0FBQyxHQUFXO1FBQzdCLE9BQU8sY0FBYyxHQUFHLEVBQUUsQ0FBQztJQUM3QixDQUFDO0NBQ0YsQ0FBQTtBQTlEa0I7SUFEaEIsSUFBQSxhQUFNLEdBQUU7OzJDQUNxQjt1QkFGbkIsWUFBWTtJQUh4QixJQUFBLHFCQUFjLEVBQUM7UUFDZCxXQUFXLEVBQUUsa0JBQVcsQ0FBQyxNQUFNO0tBQ2hDLENBQUM7R0FDVyxZQUFZLENBZ0V4QiJ9
|
|
@@ -37,6 +37,7 @@ type FullPackage = Omit<Static<typeof FullPackageRule>, 'versions' | '_attachmen
|
|
|
37
37
|
export declare class SavePackageVersionController extends AbstractController {
|
|
38
38
|
private readonly packageManagerService;
|
|
39
39
|
private readonly registryManagerService;
|
|
40
|
+
private readonly cacheAdapter;
|
|
40
41
|
save(ctx: EggContext, fullname: string, pkg: FullPackage): Promise<{
|
|
41
42
|
ok: boolean;
|
|
42
43
|
} | {
|
|
@@ -50,6 +50,7 @@ const PackageUtil_1 = require("../../../common/PackageUtil");
|
|
|
50
50
|
const PackageManagerService_1 = require("../../../core/service/PackageManagerService");
|
|
51
51
|
const typebox_2 = require("../../typebox");
|
|
52
52
|
const RegistryManagerService_1 = require("../../../core/service/RegistryManagerService");
|
|
53
|
+
const CacheAdapter_1 = require("../../../common/adapter/CacheAdapter");
|
|
53
54
|
const STRICT_CHECK_TARBALL_FIELDS = ['name', 'version', 'scripts', 'dependencies', 'devDependencies', 'peerDependencies', 'optionalDependencies', 'license', 'licenses', 'bin'];
|
|
54
55
|
const FullPackageRule = typebox_1.Type.Object({
|
|
55
56
|
name: typebox_2.Name,
|
|
@@ -171,20 +172,28 @@ let SavePackageVersionController = exports.SavePackageVersionController = class
|
|
|
171
172
|
packageVersion.description = '';
|
|
172
173
|
}
|
|
173
174
|
const registry = await this.registryManagerService.ensureSelfRegistry();
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
175
|
+
let packageVersionEntity;
|
|
176
|
+
const lockRes = await this.cacheAdapter.usingLock(`${pkg.name}:publish`, 60, async () => {
|
|
177
|
+
packageVersionEntity = await this.packageManagerService.publish({
|
|
178
|
+
scope,
|
|
179
|
+
name,
|
|
180
|
+
version: packageVersion.version,
|
|
181
|
+
description: packageVersion.description,
|
|
182
|
+
packageJson: packageVersion,
|
|
183
|
+
readme,
|
|
184
|
+
dist: {
|
|
185
|
+
content: tarballBytes,
|
|
186
|
+
},
|
|
187
|
+
tag: tagWithVersion.tag,
|
|
188
|
+
registryId: registry.registryId,
|
|
189
|
+
isPrivate: true,
|
|
190
|
+
}, user);
|
|
191
|
+
});
|
|
192
|
+
// lock fail
|
|
193
|
+
if (!lockRes) {
|
|
194
|
+
this.logger.warn('[package:version:add] check lock fail');
|
|
195
|
+
throw new egg_errors_1.ConflictError('Unable to create the publication lock, please try again later.');
|
|
196
|
+
}
|
|
188
197
|
this.logger.info('[package:version:add] %s@%s, packageVersionId: %s, tag: %s, userId: %s', packageVersion.name, packageVersion.version, packageVersionEntity.packageVersionId, tagWithVersion.tag, user.userId);
|
|
189
198
|
ctx.status = 201;
|
|
190
199
|
return {
|
|
@@ -221,6 +230,10 @@ __decorate([
|
|
|
221
230
|
(0, tegg_1.Inject)(),
|
|
222
231
|
__metadata("design:type", RegistryManagerService_1.RegistryManagerService)
|
|
223
232
|
], SavePackageVersionController.prototype, "registryManagerService", void 0);
|
|
233
|
+
__decorate([
|
|
234
|
+
(0, tegg_1.Inject)(),
|
|
235
|
+
__metadata("design:type", CacheAdapter_1.CacheAdapter)
|
|
236
|
+
], SavePackageVersionController.prototype, "cacheAdapter", void 0);
|
|
224
237
|
__decorate([
|
|
225
238
|
(0, tegg_1.HTTPMethod)({
|
|
226
239
|
// PUT /:fullname
|
|
@@ -238,4 +251,4 @@ __decorate([
|
|
|
238
251
|
exports.SavePackageVersionController = SavePackageVersionController = __decorate([
|
|
239
252
|
(0, tegg_1.HTTPController)()
|
|
240
253
|
], SavePackageVersionController);
|
|
241
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
254
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2F2ZVBhY2thZ2VWZXJzaW9uQ29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2FwcC9wb3J0L2NvbnRyb2xsZXIvcGFja2FnZS9TYXZlUGFja2FnZVZlcnNpb25Db250cm9sbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsbUNBQWlDO0FBQ2pDLDJDQUlvQjtBQUNwQixzQ0FTcUI7QUFDckIsMkNBQTZCO0FBQzdCLDBGQUErRDtBQUMvRCwrQ0FBaUQ7QUFDakQsOERBQTJEO0FBQzNELDZEQUF1RztBQUN2Ryx1RkFBb0Y7QUFDcEYsMkNBS3VCO0FBQ3ZCLHlGQUFzRjtBQUV0Rix1RUFBb0U7QUFFcEUsTUFBTSwyQkFBMkIsR0FBMEIsQ0FBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsc0JBQXNCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUUsQ0FBQztBQWN6TSxNQUFNLGVBQWUsR0FBRyxjQUFJLENBQUMsTUFBTSxDQUFDO0lBQ2xDLElBQUksRUFBRSxjQUFRO0lBQ2QsNEdBQTRHO0lBQzVHLFFBQVEsRUFBRSxjQUFJLENBQUMsUUFBUSxDQUFDLGNBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNuQyxZQUFZLEVBQUUsY0FBSSxDQUFDLFFBQVEsQ0FBQyxjQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDdkMsV0FBVyxFQUFFLGNBQUksQ0FBQyxRQUFRLENBQUMscUJBQWUsQ0FBQztJQUMzQyxXQUFXLEVBQUUsY0FBSSxDQUFDLFFBQVEsQ0FBQyxjQUFJLENBQUMsTUFBTSxDQUFDLGNBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxjQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNyRSxNQUFNLEVBQUUsY0FBSSxDQUFDLFFB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
|