-
Notifications
You must be signed in to change notification settings - Fork 89
/
Copy pathPackage.ts
108 lines (92 loc) · 2.89 KB
/
Package.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
import { Entity, EntityData } from './Entity.js';
import { EasyData, EntityUtil } from '../util/EntityUtil.js';
import { Dist } from './Dist.js';
import { getFullname } from '../../common/PackageUtil.js';
interface PackageData extends EntityData {
scope: string;
name: string;
packageId: string;
isPrivate: boolean;
description: string;
abbreviatedsDist?: Dist;
manifestsDist?: Dist;
registryId?: string;
}
export enum DIST_NAMES {
ABBREVIATED = 'abbreviated.json',
MANIFEST = 'package.json',
README = 'readme.md',
FULL_MANIFESTS = 'full_manifests.json',
ABBREVIATED_MANIFESTS = 'abbreviated_manifests.json',
}
interface FileInfo {
size: number;
shasum: string;
integrity: string;
}
export class Package extends Entity {
readonly scope: string;
readonly name: string;
readonly packageId: string;
readonly isPrivate: boolean;
// allow to update
description: string;
abbreviatedsDist?: Dist;
manifestsDist?: Dist;
registryId?: string;
constructor(data: PackageData) {
super(data);
this.scope = data.scope;
this.name = data.name;
this.packageId = data.packageId;
this.isPrivate = data.isPrivate;
this.description = data.description;
this.abbreviatedsDist = data.abbreviatedsDist;
this.manifestsDist = data.manifestsDist;
this.registryId = data.registryId;
}
static create(data: EasyData<PackageData, 'packageId'>): Package {
const newData = EntityUtil.defaultData(data, 'packageId');
return new Package(newData);
}
get fullname() {
return getFullname(this.scope, this.name);
}
createAbbreviated(version: string, info: FileInfo) {
return this.createDist(DIST_NAMES.ABBREVIATED, info, version);
}
createManifest(version: string, info: FileInfo) {
return this.createDist(DIST_NAMES.MANIFEST, info, version);
}
createReadme(version: string, info: FileInfo) {
return this.createDist(DIST_NAMES.README, info, version);
}
createTar(version: string, info: FileInfo) {
return this.createDist(`${this.name}-${version}.tgz`, info, version);
}
createFullManifests(info: FileInfo) {
return this.createDist(DIST_NAMES.FULL_MANIFESTS, info);
}
createAbbreviatedManifests(info: FileInfo) {
return this.createDist(DIST_NAMES.ABBREVIATED_MANIFESTS, info);
}
createPackageVersionFile(path: string, version: string, info: FileInfo) {
// path should starts with `/`, e.g.: '/foo/bar/index.js'
return this.createDist(`files${path}`, info, version);
}
private distDir(filename: string, version?: string) {
if (version) {
return `/packages/${this.fullname}/${version}/${filename}`;
}
return `/packages/${this.fullname}/${filename}`;
}
private createDist(name: string, info: FileInfo, version?: string) {
return Dist.create({
name,
size: info.size,
shasum: info.shasum,
integrity: info.integrity,
path: this.distDir(name, version),
});
}
}