cnpmcore 3.20.0 → 3.20.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.
- package/dist/app/common/adapter/NFSAdapter.d.ts +1 -0
- package/dist/app/common/adapter/NFSAdapter.js +12 -2
- package/dist/app/common/typing.d.ts +4 -0
- package/dist/app/core/service/PackageVersionFileService.js +4 -7
- package/dist/app/infra/NFSClientAdapter.d.ts +2 -1
- package/dist/app/infra/NFSClientAdapter.js +4 -1
- package/dist/app/repository/DistRepository.d.ts +1 -0
- package/dist/app/repository/DistRepository.js +5 -1
- package/package.json +1 -1
|
@@ -8,6 +8,7 @@ export declare class NFSAdapter {
|
|
|
8
8
|
uploadBytes(storeKey: string, bytes: Uint8Array): Promise<void>;
|
|
9
9
|
appendBytes(storeKey: string, bytes: Uint8Array, position?: string, headers?: IncomingHttpHeaders): Promise<string | undefined>;
|
|
10
10
|
uploadFile(storeKey: string, file: string): Promise<void>;
|
|
11
|
+
downloadFile(storeKey: string, file: string, timeout: number): Promise<void>;
|
|
11
12
|
remove(storeKey: string): Promise<void>;
|
|
12
13
|
getStream(storeKey: string): Promise<Readable | undefined>;
|
|
13
14
|
getBytes(storeKey: string): Promise<Uint8Array | undefined>;
|
|
@@ -37,8 +37,12 @@ let NFSAdapter = class NFSAdapter {
|
|
|
37
37
|
this.logger.info('[%s:uploadFile] key: %s, file: %s', INSTANCE_NAME, storeKey, file);
|
|
38
38
|
await this.nfsClient.upload(file, { key: storeKey });
|
|
39
39
|
}
|
|
40
|
+
async downloadFile(storeKey, file, timeout) {
|
|
41
|
+
this.logger.info('[%s:downloadFile] key: %s, file: %s, timeout: %s', INSTANCE_NAME, storeKey, file, timeout);
|
|
42
|
+
await this.nfsClient.download(storeKey, file, { timeout });
|
|
43
|
+
}
|
|
40
44
|
async remove(storeKey) {
|
|
41
|
-
this.logger.info('[%s:remove] key: %s
|
|
45
|
+
this.logger.info('[%s:remove] key: %s', INSTANCE_NAME, storeKey);
|
|
42
46
|
await this.nfsClient.remove(storeKey);
|
|
43
47
|
}
|
|
44
48
|
async getStream(storeKey) {
|
|
@@ -86,6 +90,12 @@ __decorate([
|
|
|
86
90
|
__metadata("design:paramtypes", [String, String]),
|
|
87
91
|
__metadata("design:returntype", Promise)
|
|
88
92
|
], NFSAdapter.prototype, "uploadFile", null);
|
|
93
|
+
__decorate([
|
|
94
|
+
(0, aop_1.Pointcut)(AsyncTimer_1.AsyncTimer),
|
|
95
|
+
__metadata("design:type", Function),
|
|
96
|
+
__metadata("design:paramtypes", [String, String, Number]),
|
|
97
|
+
__metadata("design:returntype", Promise)
|
|
98
|
+
], NFSAdapter.prototype, "downloadFile", null);
|
|
89
99
|
__decorate([
|
|
90
100
|
(0, aop_1.Pointcut)(AsyncTimer_1.AsyncTimer),
|
|
91
101
|
__metadata("design:type", Function),
|
|
@@ -117,4 +127,4 @@ NFSAdapter = __decorate([
|
|
|
117
127
|
})
|
|
118
128
|
], NFSAdapter);
|
|
119
129
|
exports.NFSAdapter = NFSAdapter;
|
|
120
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
130
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTkZTQWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2FwcC9jb21tb24vYWRhcHRlci9ORlNBZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUNBLHNDQUlxQjtBQUNyQix5Q0FBMkM7QUFFM0Msa0RBQStDO0FBSS9DLE1BQU0sYUFBYSxHQUFHLFlBQVksQ0FBQztBQU01QixJQUFNLFVBQVUsR0FBaEIsTUFBTSxVQUFVO0lBUWYsQUFBTixLQUFLLENBQUMsV0FBVyxDQUFDLFFBQWdCLEVBQUUsS0FBaUI7UUFDbkQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMscUNBQXFDLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0YsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQsa0NBQWtDO0lBRTVCLEFBQU4sS0FBSyxDQUFDLFdBQVcsQ0FBQyxRQUFnQixFQUFFLEtBQWlCLEVBQUUsUUFBaUIsRUFBRSxPQUE2QjtRQUNyRyxvREFBb0Q7UUFDcEQsSUFBSSxDQUFDLFFBQVE7WUFBRSxRQUFRLEdBQUcsU0FBUyxDQUFDO1FBQ3BDLE1BQU0sT0FBTyxHQUFHO1lBQ2QsR0FBRyxFQUFFLFFBQVE7WUFDYixRQUFRO1lBQ1IsT0FBTztTQUNSLENBQUM7UUFDRixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNoRSxJQUFJLE1BQU0sRUFBRSxrQkFBa0I7WUFBRSxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBR0ssQUFBTixLQUFLLENBQUMsVUFBVSxDQUFDLFFBQWdCLEVBQUUsSUFBWTtRQUM3QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxtQ0FBbUMsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3JGLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUdLLEFBQU4sS0FBSyxDQUFDLFlBQVksQ0FBQyxRQUFnQixFQUFFLElBQVksRUFBRSxPQUFlO1FBQ2hFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGtEQUFrRCxFQUNqRSxhQUFhLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMxQyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFHSyxBQUFOLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBZ0I7UUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsYUFBYSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUdLLEFBQU4sS0FBSyxDQUFDLFNBQVMsQ0FBQyxRQUFnQjtRQUM5QixPQUFPLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBR0ssQUFBTixLQUFLLENBQUMsUUFBUSxDQUFDLFFBQWdCO1FBQzdCLE9BQU8sTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBR0ssQUFBTixLQUFLLENBQUMsY0FBYyxDQUFDLFFBQWdCO1FBQ25DLElBQUksT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsS0FBSyxVQUFVLEVBQUU7WUFDNUMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQVcsQ0FBQztTQUMvQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsc0JBQXNCLENBQUMsUUFBZ0I7UUFDM0MsTUFBTSxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3hELElBQUksV0FBVyxFQUFFO1lBQ2YsT0FBTyxXQUFXLENBQUM7U0FDcEI7UUFDRCxPQUFPLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN4QyxDQUFDO0NBQ0YsQ0FBQTtBQXJFQztJQUFDLElBQUEsYUFBTSxHQUFFOzs2Q0FDNkI7QUFFdEM7SUFBQyxJQUFBLGFBQU0sR0FBRTs7MENBQzBCO0FBRzdCO0lBREwsSUFBQSxjQUFRLEVBQUMsdUJBQVUsQ0FBQzs7NkNBQ3NCLFVBQVU7OzZDQUdwRDtBQUlLO0lBREwsSUFBQSxjQUFRLEVBQUMsdUJBQVUsQ0FBQzs7NkNBQ3NCLFVBQVU7OzZDQVVwRDtBQUdLO0lBREwsSUFBQSxjQUFRLEVBQUMsdUJBQVUsQ0FBQzs7Ozs0Q0FJcEI7QUFHSztJQURMLElBQUEsY0FBUSxFQUFDLHVCQUFVLENBQUM7Ozs7OENBS3BCO0FBR0s7SUFETCxJQUFBLGNBQVEsRUFBQyx1QkFBVSxDQUFDOzs7O3dDQUlwQjtBQUdLO0lBREwsSUFBQSxjQUFRLEVBQUMsdUJBQVUsQ0FBQzs7OzsyQ0FHcEI7QUFHSztJQURMLElBQUEsY0FBUSxFQUFDLHVCQUFVLENBQUM7Ozs7MENBR3BCO0FBR0s7SUFETCxJQUFBLGNBQVEsRUFBQyx1QkFBVSxDQUFDOzs7O2dEQUtwQjtBQTdEVSxVQUFVO0lBSnRCLElBQUEscUJBQWMsRUFBQztRQUNkLElBQUksRUFBRSxhQUFhO1FBQ25CLFdBQVcsRUFBRSxrQkFBVyxDQUFDLE1BQU07S0FDaEMsQ0FBQztHQUNXLFVBQVUsQ0FzRXRCO0FBdEVZLGdDQUFVIn0=
|
|
@@ -18,6 +18,9 @@ export interface AppendOptions {
|
|
|
18
18
|
position?: string;
|
|
19
19
|
headers?: IncomingHttpHeaders;
|
|
20
20
|
}
|
|
21
|
+
export interface DownloadOptions {
|
|
22
|
+
timeout: number;
|
|
23
|
+
}
|
|
21
24
|
export interface NFSClient {
|
|
22
25
|
uploadBytes(bytes: Uint8Array, options: UploadOptions): Promise<UploadResult>;
|
|
23
26
|
appendBytes(bytes: Uint8Array, options: AppendOptions): Promise<AppendResult>;
|
|
@@ -25,6 +28,7 @@ export interface NFSClient {
|
|
|
25
28
|
remove(key: string): Promise<void>;
|
|
26
29
|
readBytes(key: string): Promise<Uint8Array | undefined>;
|
|
27
30
|
createDownloadStream(key: string): Promise<Readable | undefined>;
|
|
31
|
+
download(key: string, filepath: string, options: DownloadOptions): Promise<void>;
|
|
28
32
|
url?(key: string): string;
|
|
29
33
|
}
|
|
30
34
|
export interface QueueAdapter {
|
|
@@ -20,9 +20,7 @@ var _PackageVersionFileService_instances, _PackageVersionFileService_ensurePacka
|
|
|
20
20
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
21
|
exports.PackageVersionFileService = void 0;
|
|
22
22
|
const promises_1 = __importDefault(require("node:fs/promises"));
|
|
23
|
-
const node_fs_1 = require("node:fs");
|
|
24
23
|
const node_path_1 = require("node:path");
|
|
25
|
-
const promises_2 = require("node:stream/promises");
|
|
26
24
|
const node_crypto_1 = require("node:crypto");
|
|
27
25
|
const tar_1 = __importDefault(require("tar"));
|
|
28
26
|
const tegg_1 = require("@eggjs/tegg");
|
|
@@ -49,9 +47,6 @@ let PackageVersionFileService = class PackageVersionFileService extends Abstract
|
|
|
49
47
|
}
|
|
50
48
|
async syncPackageVersionFiles(pkgVersion) {
|
|
51
49
|
const files = [];
|
|
52
|
-
const tarStream = await this.distRepository.getDistStream(pkgVersion.tarDist);
|
|
53
|
-
if (!tarStream)
|
|
54
|
-
return files;
|
|
55
50
|
const pkg = await this.packageRepository.findPackageByPackageId(pkgVersion.packageId);
|
|
56
51
|
if (!pkg)
|
|
57
52
|
return files;
|
|
@@ -60,7 +55,9 @@ let PackageVersionFileService = class PackageVersionFileService extends Abstract
|
|
|
60
55
|
const tarFile = `${tmpdir}.tgz`;
|
|
61
56
|
const paths = [];
|
|
62
57
|
try {
|
|
63
|
-
|
|
58
|
+
this.logger.info('[PackageVersionFileService.syncPackageVersionFiles:download-start] dist:%s(path:%s, size:%s) => tarFile:%s', pkgVersion.tarDist.distId, pkgVersion.tarDist.path, pkgVersion.tarDist.size, tarFile);
|
|
59
|
+
await this.distRepository.downloadDistToFile(pkgVersion.tarDist, tarFile);
|
|
60
|
+
this.logger.info('[PackageVersionFileService.syncPackageVersionFiles:extract-start] tmpdir:%s', tmpdir);
|
|
64
61
|
await tar_1.default.extract({
|
|
65
62
|
file: tarFile,
|
|
66
63
|
cwd: tmpdir,
|
|
@@ -166,4 +163,4 @@ PackageVersionFileService = __decorate([
|
|
|
166
163
|
})
|
|
167
164
|
], PackageVersionFileService);
|
|
168
165
|
exports.PackageVersionFileService = PackageVersionFileService;
|
|
169
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
166
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFja2FnZVZlcnNpb25GaWxlU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2FwcC9jb3JlL3NlcnZpY2UvUGFja2FnZVZlcnNpb25GaWxlU2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxnRUFBa0M7QUFDbEMseUNBQW9EO0FBQ3BELDZDQUF5QztBQUN6Qyw4Q0FBc0I7QUFDdEIsc0NBSXFCO0FBQ3JCLGtFQUErRDtBQUMvRCwwREFFa0M7QUFDbEMsb0RBQWtFO0FBQ2xFLDBFQUU0QztBQUM1QyxnR0FBNkY7QUFDN0Ysb0VBQWlFO0FBQ2pFLHFFQUFrRTtBQU8zRCxJQUFNLHlCQUF5QixHQUEvQixNQUFNLHlCQUEwQixTQUFRLGlDQUFlO0lBQXZEOzs7SUF1SFAsQ0FBQztJQS9HQyxLQUFLLENBQUMsdUJBQXVCLENBQUMsVUFBMEIsRUFBRSxTQUFpQjtRQUN6RSxNQUFNLHVCQUFBLElBQUksc0dBQStCLE1BQW5DLElBQUksRUFBZ0MsVUFBVSxDQUFDLENBQUM7UUFDdEQsT0FBTyxNQUFNLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyx1QkFBdUIsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDakgsQ0FBQztJQUVELEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxVQUEwQixFQUFFLElBQVk7UUFDbkUsTUFBTSx1QkFBQSxJQUFJLHNHQUErQixNQUFuQyxJQUFJLEVBQWdDLFVBQVUsQ0FBQyxDQUFDO1FBQ3RELE1BQU0sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEdBQUcsdUJBQUEsSUFBSSw0RkFBcUIsTUFBekIsSUFBSSxFQUFzQixJQUFJLENBQUMsQ0FBQztRQUM1RCxPQUFPLE1BQU0sSUFBSSxDQUFDLDRCQUE0QixDQUFDLHNCQUFzQixDQUNuRSxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFD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
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { EggObjectLifecycle } from '@eggjs/tegg';
|
|
3
|
-
import { AppendResult, NFSClient, UploadOptions, UploadResult } from '../common/typing';
|
|
3
|
+
import { AppendResult, NFSClient, UploadOptions, UploadResult, DownloadOptions } from '../common/typing';
|
|
4
4
|
import { Readable } from 'stream';
|
|
5
5
|
export declare class NFSClientAdapter implements EggObjectLifecycle, NFSClient {
|
|
6
6
|
private logger;
|
|
@@ -15,4 +15,5 @@ export declare class NFSClientAdapter implements EggObjectLifecycle, NFSClient {
|
|
|
15
15
|
remove(key: string): Promise<void>;
|
|
16
16
|
upload(filePath: string, options: UploadOptions): Promise<UploadResult>;
|
|
17
17
|
uploadBytes(bytes: Uint8Array, options: UploadOptions): Promise<UploadResult>;
|
|
18
|
+
download(key: string, filePath: string, options: DownloadOptions): Promise<void>;
|
|
18
19
|
}
|
|
@@ -60,6 +60,9 @@ let NFSClientAdapter = class NFSClientAdapter {
|
|
|
60
60
|
}
|
|
61
61
|
return await this._client.uploadBuffer(bytes, options);
|
|
62
62
|
}
|
|
63
|
+
async download(key, filePath, options) {
|
|
64
|
+
return await this._client.download(key, filePath, options);
|
|
65
|
+
}
|
|
63
66
|
};
|
|
64
67
|
__decorate([
|
|
65
68
|
(0, tegg_1.Inject)(),
|
|
@@ -77,4 +80,4 @@ NFSClientAdapter = __decorate([
|
|
|
77
80
|
})
|
|
78
81
|
], NFSClientAdapter);
|
|
79
82
|
exports.NFSClientAdapter = NFSClientAdapter;
|
|
80
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
83
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTkZTQ2xpZW50QWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2FwcC9pbmZyYS9ORlNDbGllbnRBZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHNDQU9xQjtBQUVyQixzREFBK0I7QUFReEIsSUFBTSxnQkFBZ0IsR0FBdEIsTUFBTSxnQkFBZ0I7SUFVM0IsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFJRCxLQUFLLENBQUMsSUFBSTtRQUNSLGtFQUFrRTtRQUNsRSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRTtZQUMxQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztTQUN2QzthQUFNO1lBQ0wsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsS0FBSyxNQUFNLEVBQUU7Z0JBQzlCLE1BQU0sSUFBSSxLQUFLLENBQUMsd0RBQXdELENBQUMsQ0FBQzthQUMzRTtZQUVELHFEQUFxRDtZQUNyRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxxRUFBcUUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM3RyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksaUJBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1NBQzNEO1FBRUQsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxLQUFLLFVBQVUsRUFBRTtZQUMxQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDaEQ7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFpQixFQUFFLE9BQXNCO1FBQ3pELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUU7WUFDNUIsT0FBTyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztTQUN2RDtRQUNELE9BQU8sTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVELEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxHQUFXO1FBQ3BDLE9BQU8sTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQVc7UUFDekIsT0FBTyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQVc7UUFDdEIsT0FBTyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQWdCLEVBQUUsT0FBc0I7UUFDbkQsT0FBTyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFpQixFQUFFLE9BQXNCO1FBQ3pELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUU7WUFDNUIsT0FBTyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztTQUN2RDtRQUNELE9BQU8sTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBVyxFQUFFLFFBQWdCLEVBQUUsT0FBd0I7UUFDcEUsT0FBTyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDN0QsQ0FBQztDQUNGLENBQUE7QUFuRUM7SUFBQyxJQUFBLGFBQU0sR0FBRTtJQUNSLElBQUEsbUJBQVksRUFBQyxjQUFPLENBQUMsR0FBRyxDQUFDOztnREFDQTtBQUUxQjtJQUFDLElBQUEsYUFBTSxHQUFFOztnREFDb0I7QUFObEIsZ0JBQWdCO0lBSjVCLElBQUEscUJBQWMsRUFBQztRQUNkLElBQUksRUFBRSxXQUFXO1FBQ2pCLFdBQVcsRUFBRSxrQkFBVyxDQUFDLE1BQU07S0FDaEMsQ0FBQztHQUNXLGdCQUFnQixDQW9FNUI7QUFwRVksNENBQWdCIn0=
|
|
@@ -13,4 +13,5 @@ export declare class DistRepository {
|
|
|
13
13
|
saveDist(dist: Dist, buf: Uint8Array | string): Promise<void>;
|
|
14
14
|
destroyDist(dist: Dist): Promise<void>;
|
|
15
15
|
downloadDist(dist: Dist): Promise<string | import("stream").Readable | undefined>;
|
|
16
|
+
downloadDistToFile(dist: Dist, file: string): Promise<void>;
|
|
16
17
|
}
|
|
@@ -63,6 +63,10 @@ let DistRepository = class DistRepository {
|
|
|
63
63
|
async downloadDist(dist) {
|
|
64
64
|
return await this.nfsAdapter.getDownloadUrlOrStream(dist.path);
|
|
65
65
|
}
|
|
66
|
+
async downloadDistToFile(dist, file) {
|
|
67
|
+
// max up to 5mins
|
|
68
|
+
return await this.nfsAdapter.downloadFile(dist.path, file, 60000 * 5);
|
|
69
|
+
}
|
|
66
70
|
};
|
|
67
71
|
__decorate([
|
|
68
72
|
(0, tegg_1.Inject)(),
|
|
@@ -78,4 +82,4 @@ DistRepository = __decorate([
|
|
|
78
82
|
})
|
|
79
83
|
], DistRepository);
|
|
80
84
|
exports.DistRepository = DistRepository;
|
|
81
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
85
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGlzdFJlcG9zaXRvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9hcHAvcmVwb3NpdG9yeS9EaXN0UmVwb3NpdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSxzQ0FBa0U7QUFDbEUsNkRBQTBEO0FBQzFELDJEQUF5RTtBQU1sRSxJQUFNLGNBQWMsR0FBcEIsTUFBTSxjQUFjO0lBT3pCLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxTQUFpQixFQUFFLE9BQWU7UUFDakUsTUFBTSxjQUFjLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsa0JBQWtCLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzNGLElBQUksY0FBYyxFQUFFO1lBQ2xCLE1BQU0sQ0FBRSxrQkFBa0IsRUFBRSxNQUFNLENBQUUsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUM7Z0JBQ3ZELElBQUksQ0FBQyxtQkFBbUIsQ0FBa0IsY0FBYyxDQUFDLFlBQVksQ0FBQztnQkFDdEUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUM7YUFDdEQsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxrQkFBa0IsRUFBRTtnQkFDdEIsa0JBQWtCLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQzthQUNwQztZQUNELE9BQU8sa0JBQWtCLENBQUM7U0FDM0I7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLDhCQUE4QixDQUFDLFNBQWlCLEVBQUUsT0FBZTtRQUNyRSxNQUFNLGNBQWMsR0FBRyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDM0YsSUFBSSxjQUFjLEVBQUU7WUFDbEIsT0FBTyxNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLENBQUM7U0FDdkU7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLG1CQUFtQixDQUFJLElBQVU7UUFDckMsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkQsSUFBSSxHQUFHLEVBQUU7WUFDUCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFNLENBQUM7U0FDN0I7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLHFCQUFxQixDQUFDLElBQVU7UUFDcEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDdEIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFVO1FBQzVCLE9BQU8sTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBVTtRQUM1QixPQUFPLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUSxDQUFDLElBQVUsRUFBRSxHQUF3QjtRQUNqRCxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRTtZQUMzQixPQUFPLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztTQUN6RDtRQUNELE9BQU8sTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUFDLElBQVU7UUFDMUIsT0FBTyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFVO1FBQzNCLE9BQU8sTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQsS0FBSyxDQUFDLGtCQUFrQixDQUFDLElBQVUsRUFBRSxJQUFZO1FBQy9DLGtCQUFrQjtRQUNsQixPQUFPLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7Q0FDRixDQUFBO0FBbkVDO0lBQUMsSUFBQSxhQUFNLEdBQUU7OEJBQzJCLHFDQUFpQjt5REFBQztBQUV0RDtJQUFDLElBQUEsYUFBTSxHQUFFOzhCQUNvQix1QkFBVTtrREFBQztBQUw3QixjQUFjO0lBSDFCLElBQUEscUJBQWMsRUFBQztRQUNkLFdBQVcsRUFBRSxrQkFBVyxDQUFDLE1BQU07S0FDaEMsQ0FBQztHQUNXLGNBQWMsQ0FvRTFCO0FBcEVZLHdDQUFjIn0=
|