@build-script/package-tools 0.0.26 → 0.0.28
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/bins/load.devel.js +15 -0
- package/{load.js → bins/load.js} +1 -1
- package/lib/commands/detect-package-change.d.ts.map +1 -1
- package/lib/commands/detect-package-change.js +1 -1
- package/lib/commands/detect-package-change.js.map +1 -1
- package/lib/commands/monorepo-publish.d.ts.map +1 -1
- package/lib/commands/monorepo-publish.js +31 -15
- package/lib/commands/monorepo-publish.js.map +1 -1
- package/lib/commands/run-if-version-mismatch.d.ts.map +1 -1
- package/lib/commands/run-if-version-mismatch.js +1 -1
- package/lib/commands/run-if-version-mismatch.js.map +1 -1
- package/lib/common/cache/native.npm.d.ts +4 -1
- package/lib/common/cache/native.npm.d.ts.map +1 -1
- package/lib/common/cache/native.npm.js +13 -10
- package/lib/common/cache/native.npm.js.map +1 -1
- package/lib/common/git/git.d.ts +3 -1
- package/lib/common/git/git.d.ts.map +1 -1
- package/lib/common/git/git.js +12 -10
- package/lib/common/git/git.js.map +1 -1
- package/lib/common/package-manager/driver.abstract.d.ts +3 -1
- package/lib/common/package-manager/driver.abstract.d.ts.map +1 -1
- package/lib/common/package-manager/driver.abstract.js +16 -14
- package/lib/common/package-manager/driver.abstract.js.map +1 -1
- package/lib/common/package-manager/package-manager.d.ts +2 -1
- package/lib/common/package-manager/package-manager.d.ts.map +1 -1
- package/lib/common/package-manager/package-manager.js +4 -3
- package/lib/common/package-manager/package-manager.js.map +1 -1
- package/lib/common/package-manager/proxy.d.ts +3 -2
- package/lib/common/package-manager/proxy.d.ts.map +1 -1
- package/lib/common/package-manager/proxy.js +6 -6
- package/lib/common/package-manager/proxy.js.map +1 -1
- package/lib/common/shared-jobs/detect-change-job.d.ts.map +1 -1
- package/lib/common/shared-jobs/detect-change-job.js +12 -13
- package/lib/common/shared-jobs/detect-change-job.js.map +1 -1
- package/lib/common/taball/decompress.d.ts +2 -1
- package/lib/common/taball/decompress.d.ts.map +1 -1
- package/lib/common/taball/decompress.js +2 -2
- package/lib/common/taball/decompress.js.map +1 -1
- package/lib/common/taball/file-download.d.ts +8 -1
- package/lib/common/taball/file-download.d.ts.map +1 -1
- package/lib/common/taball/file-download.js +107 -97
- package/lib/common/taball/file-download.js.map +1 -1
- package/lib/common/temp-work-folder.d.ts +3 -1
- package/lib/common/temp-work-folder.d.ts.map +1 -1
- package/lib/common/temp-work-folder.js +9 -7
- package/lib/common/temp-work-folder.js.map +1 -1
- package/lib/common/version.generated.d.ts +1 -1
- package/lib/common/version.generated.js +1 -1
- package/package.json +16 -17
- package/src/commands/detect-package-change.ts +1 -2
- package/src/commands/monorepo-publish.ts +33 -15
- package/src/commands/run-if-version-mismatch.ts +1 -2
- package/src/common/cache/native.npm.ts +13 -10
- package/src/common/git/git.ts +13 -10
- package/src/common/package-manager/driver.abstract.ts +14 -13
- package/src/common/package-manager/package-manager.ts +10 -4
- package/src/common/package-manager/proxy.ts +6 -6
- package/src/common/shared-jobs/detect-change-job.ts +13 -13
- package/src/common/taball/decompress.ts +2 -2
- package/src/common/taball/file-download.ts +113 -105
- package/src/common/temp-work-folder.ts +7 -6
- package/src/common/version.generated.ts +1 -1
- package/src/tsconfig.json +0 -1
- package/src/command-file-map.generator.ts +0 -10
- package/src/common/version.generator.ts +0 -19
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { logger } from '@idlebox/cli';
|
|
1
|
+
import { logger as defaultLogger } from '@idlebox/cli';
|
|
2
2
|
import { ensureLinkTarget } from '@idlebox/ensure-symlink';
|
|
3
3
|
import { execLazyError, exists, writeFileIfChange } from '@idlebox/node';
|
|
4
4
|
import { execa } from 'execa';
|
|
@@ -17,12 +17,14 @@ export var PackageManagerUsageKind;
|
|
|
17
17
|
export class PackageManager {
|
|
18
18
|
usageKind;
|
|
19
19
|
workspace;
|
|
20
|
+
logger;
|
|
20
21
|
projectPath;
|
|
21
22
|
configTemp;
|
|
22
|
-
constructor(usageKind, workspace, subdir = process.cwd()) {
|
|
23
|
+
constructor(usageKind, workspace, subdir = process.cwd(), logger = defaultLogger) {
|
|
23
24
|
this.usageKind = usageKind;
|
|
24
25
|
this.workspace = workspace;
|
|
25
|
-
this.
|
|
26
|
+
this.logger = logger;
|
|
27
|
+
this.configTemp = new TempWorkingFolder(this.workspace, 'package-manager', logger, true);
|
|
26
28
|
this.projectPath = resolve(workspace.root, subdir);
|
|
27
29
|
if (!this.projectPath.startsWith(workspace.root)) {
|
|
28
30
|
throw new Error(`project "${this.projectPath}" is outside the workspace root`);
|
|
@@ -33,13 +35,13 @@ export class PackageManager {
|
|
|
33
35
|
}
|
|
34
36
|
async pack(saveAs) {
|
|
35
37
|
const pkg = await this.loadPackageJson();
|
|
36
|
-
logger.log `打包项目 (${pkg.publishConfig?.['packCommand'] ? 'custom' : 'default'}): relative<${this.projectPath}> -> relative<${saveAs}>`;
|
|
38
|
+
this.logger.log `打包项目 (${pkg.publishConfig?.['packCommand'] ? 'custom' : 'default'}): relative<${this.projectPath}> -> relative<${saveAs}>`;
|
|
37
39
|
if (pkg.publishConfig?.['packCommand']) {
|
|
38
40
|
const cmds = typeof pkg.publishConfig['packCommand'] === 'string' ? splitCmd(pkg.publishConfig['packCommand']) : pkg.publishConfig['packCommand'];
|
|
39
41
|
if (!Array.isArray(cmds)) {
|
|
40
|
-
logger.fatal `publishConfig.packCommand必须是字符串或字符串数组, 但实际是: ${typeof pkg.publishConfig['packCommand']}`;
|
|
42
|
+
this.logger.fatal `publishConfig.packCommand必须是字符串或字符串数组, 但实际是: ${typeof pkg.publishConfig['packCommand']}`;
|
|
41
43
|
}
|
|
42
|
-
logger.verbose ` - 自定义打包命令: ${Array.from(cmds)}`;
|
|
44
|
+
this.logger.verbose ` - 自定义打包命令: ${Array.from(cmds)}`;
|
|
43
45
|
const [cmd, ...args] = cmds;
|
|
44
46
|
await execLazyError(cmd, [...args, '--out', saveAs], {
|
|
45
47
|
cwd: this.projectPath,
|
|
@@ -89,24 +91,24 @@ export class PackageManager {
|
|
|
89
91
|
const scope = await this.getScope();
|
|
90
92
|
if (scope) {
|
|
91
93
|
const { stdout } = await this._execGetOut(cwd, ['config', 'get', `${scope}:${key}`], true, binary);
|
|
92
|
-
logger.debug('$ %s config get %s:%s -> %s (cwd: %s)', binary, scope, key, stdout, cwd);
|
|
94
|
+
this.logger.debug('$ %s config get %s:%s -> %s (cwd: %s)', binary, scope, key, stdout, cwd);
|
|
93
95
|
if (`${stdout}` !== 'undefined') {
|
|
94
96
|
return stdout;
|
|
95
97
|
}
|
|
96
98
|
}
|
|
97
99
|
const { stdout } = await this._execGetOut(cwd, ['config', 'get', key], true, binary);
|
|
98
|
-
logger.debug('$ %s config get %s -> %s (cwd: %s)', binary, key, stdout, cwd);
|
|
100
|
+
this.logger.debug('$ %s config get %s -> %s (cwd: %s)', binary, key, stdout, cwd);
|
|
99
101
|
return stdout === 'undefined' ? undefined : stdout;
|
|
100
102
|
}
|
|
101
103
|
async uploadTarball(pack, cwd = this.projectPath) {
|
|
102
|
-
logger.debug(`上传压缩包: ${pack}`);
|
|
104
|
+
this.logger.debug(`上传压缩包: ${pack}`);
|
|
103
105
|
try {
|
|
104
106
|
const r = await this._uploadTarball(pack, cwd);
|
|
105
|
-
logger.debug ` 发布成功: ${r.name} @ ${r.version} [${r.published}]`;
|
|
107
|
+
this.logger.debug ` 发布成功: ${r.name} @ ${r.version} [${r.published}]`;
|
|
106
108
|
return r;
|
|
107
109
|
}
|
|
108
110
|
catch (e) {
|
|
109
|
-
logger.debug ` tarball发布失败`;
|
|
111
|
+
this.logger.debug ` tarball发布失败`;
|
|
110
112
|
throw e;
|
|
111
113
|
}
|
|
112
114
|
}
|
|
@@ -136,14 +138,14 @@ export class PackageManager {
|
|
|
136
138
|
if (!this._cachedReg) {
|
|
137
139
|
switch (registryInput) {
|
|
138
140
|
case 'detect':
|
|
139
|
-
logger.debug(`检测registry地址: ${registryInput}`);
|
|
141
|
+
this.logger.debug(`检测registry地址: ${registryInput}`);
|
|
140
142
|
this._cachedReg = await this.getConfig('registry');
|
|
141
143
|
break;
|
|
142
144
|
default:
|
|
143
145
|
if (!registryInput.startsWith('https://')) {
|
|
144
146
|
throw new Error(`不支持的--registry协议: ${registryInput}`);
|
|
145
147
|
}
|
|
146
|
-
logger.debug('使用命令行提供的registry地址 (%s)', registryInput);
|
|
148
|
+
this.logger.debug('使用命令行提供的registry地址 (%s)', registryInput);
|
|
147
149
|
this._cachedReg = registryInput;
|
|
148
150
|
}
|
|
149
151
|
}
|
|
@@ -156,7 +158,7 @@ export class PackageManager {
|
|
|
156
158
|
const path = await this.getConfig('cache');
|
|
157
159
|
if (!path)
|
|
158
160
|
throw new Error('npm config get cache返回为空');
|
|
159
|
-
this._cache_handler = new NpmCacheHandler(this, registry, path);
|
|
161
|
+
this._cache_handler = new NpmCacheHandler(this, registry, path, this.logger);
|
|
160
162
|
}
|
|
161
163
|
return this._cache_handler;
|
|
162
164
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"driver.abstract.js","sourceRoot":"","sources":["../../../src/common/package-manager/driver.abstract.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"driver.abstract.js","sourceRoot":"","sources":["../../../src/common/package-manager/driver.abstract.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { WorkspaceBase } from '@build-script/monorepo-lib';
|
|
2
|
+
import { type IMyLogger } from '@idlebox/cli';
|
|
2
3
|
import type { PackageManager, PackageManagerUsageKind } from './driver.abstract.js';
|
|
3
4
|
export type IPackageManager = PackageManager;
|
|
4
|
-
export declare function createPackageManager(usage: PackageManagerUsageKind, workspace: WorkspaceBase, subdir?: string): Promise<IPackageManager>;
|
|
5
|
+
export declare function createPackageManager(usage: PackageManagerUsageKind, workspace: WorkspaceBase, subdir?: string, logger?: IMyLogger): Promise<IPackageManager>;
|
|
5
6
|
//# sourceMappingURL=package-manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-manager.d.ts","sourceRoot":"","sources":["../../../src/common/package-manager/package-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"package-manager.d.ts","sourceRoot":"","sources":["../../../src/common/package-manager/package-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAA2B,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAEvE,OAAO,KAAK,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAKpF,MAAM,MAAM,eAAe,GAAG,cAAc,CAAC;AAM7C,wBAAsB,oBAAoB,CACzC,KAAK,EAAE,uBAAuB,EAC9B,SAAS,EAAE,aAAa,EACxB,MAAM,CAAC,EAAE,MAAM,EACf,MAAM,GAAE,SAAyB,GAC/B,OAAO,CAAC,eAAe,CAAC,CAsB1B"}
|
|
@@ -1,18 +1,19 @@
|
|
|
1
|
+
import { logger as defaultLogger } from '@idlebox/cli';
|
|
1
2
|
import { commandInPath, PathEnvironment } from '@idlebox/node';
|
|
2
3
|
import { NPM } from './driver.npm.js';
|
|
3
4
|
import { PNPM } from './driver.pnpm.js';
|
|
4
5
|
import { reconfigureProxyWithNpmrc } from './proxy.js';
|
|
5
6
|
let pmCls;
|
|
6
|
-
export async function createPackageManager(usage, workspace, subdir) {
|
|
7
|
+
export async function createPackageManager(usage, workspace, subdir, logger = defaultLogger) {
|
|
7
8
|
if (pmCls) {
|
|
8
|
-
return new pmCls(usage, workspace, subdir);
|
|
9
|
+
return new pmCls(usage, workspace, subdir, logger);
|
|
9
10
|
}
|
|
10
11
|
const supports = { pnpm: PNPM, npm: NPM };
|
|
11
12
|
for (const [name, Cls] of Object.entries(supports)) {
|
|
12
13
|
if (!(await commandInPath(name).catch(() => false))) {
|
|
13
14
|
continue;
|
|
14
15
|
}
|
|
15
|
-
const pm = new Cls(usage, workspace, subdir);
|
|
16
|
+
const pm = new Cls(usage, workspace, subdir, logger);
|
|
16
17
|
await reconfigureProxyWithNpmrc(pm);
|
|
17
18
|
pmCls = Cls;
|
|
18
19
|
return pm;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-manager.js","sourceRoot":"","sources":["../../../src/common/package-manager/package-manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAE/D,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAMvD,IAAI,KAA4C,CAAC;AAEjD,MAAM,CAAC,KAAK,UAAU,oBAAoB,
|
|
1
|
+
{"version":3,"file":"package-manager.js","sourceRoot":"","sources":["../../../src/common/package-manager/package-manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,IAAI,aAAa,EAAkB,MAAM,cAAc,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAE/D,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAMvD,IAAI,KAA4C,CAAC;AAEjD,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACzC,KAA8B,EAC9B,SAAwB,EACxB,MAAe,EACf,SAAoB,aAAa;IAEjC,IAAI,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,QAAQ,GAA8C,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IACrF,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpD,IAAI,CAAC,CAAC,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YACrD,SAAS;QACV,CAAC;QAED,MAAM,EAAE,GAAG,IAAI,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAErD,MAAM,yBAAyB,CAAC,EAAE,CAAC,CAAC;QAEpC,KAAK,GAAG,GAAG,CAAC;QACZ,OAAO,EAAE,CAAC;IACX,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,eAAe,EAAE,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,YAAY,OAAO,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC1F,MAAM,IAAI,KAAK,CAAC,uBAAuB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC3E,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { type IMyLogger } from '@idlebox/cli';
|
|
1
2
|
import type { IPackageManager } from './package-manager.js';
|
|
2
|
-
export declare function getProxyValue(url: string): string;
|
|
3
|
+
export declare function getProxyValue(url: string, logger?: IMyLogger): string;
|
|
3
4
|
export declare function reconfigureProxyWithNpmrc(pm: IPackageManager): Promise<void>;
|
|
4
|
-
export declare function configureProxyFromEnvironment(): void;
|
|
5
|
+
export declare function configureProxyFromEnvironment(logger?: IMyLogger): void;
|
|
5
6
|
//# sourceMappingURL=proxy.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../../src/common/package-manager/proxy.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../../src/common/package-manager/proxy.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAGvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAY5D,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,SAAyB,GAAG,MAAM,CA+CpF;AAED,wBAAsB,yBAAyB,CAAC,EAAE,EAAE,eAAe,iBAelE;AAED,wBAAgB,6BAA6B,CAAC,MAAM,GAAE,SAAyB,QAwC9E"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import { logger as defaultLogger } from '@idlebox/cli';
|
|
1
2
|
import { escapeRegExp } from '@idlebox/common';
|
|
2
|
-
import { logger } from '@idlebox/cli';
|
|
3
3
|
import { getEnvironment } from '@idlebox/node';
|
|
4
4
|
let proxy_override_by_env = false;
|
|
5
5
|
function makeRe(str) {
|
|
@@ -9,7 +9,7 @@ function makeRe(str) {
|
|
|
9
9
|
.join('.+');
|
|
10
10
|
return new RegExp(`^${reTxt}$`, 'i');
|
|
11
11
|
}
|
|
12
|
-
export function getProxyValue(url) {
|
|
12
|
+
export function getProxyValue(url, logger = defaultLogger) {
|
|
13
13
|
const proxyValue = process.env.http_proxy;
|
|
14
14
|
if (!proxyValue) {
|
|
15
15
|
return '';
|
|
@@ -58,18 +58,18 @@ export function getProxyValue(url) {
|
|
|
58
58
|
export async function reconfigureProxyWithNpmrc(pm) {
|
|
59
59
|
if (proxy_override_by_env)
|
|
60
60
|
return;
|
|
61
|
-
logger.debug('通过npm设置代理服务器:');
|
|
61
|
+
pm.logger.debug('通过npm设置代理服务器:');
|
|
62
62
|
const p = await pm.getConfig('proxy');
|
|
63
63
|
const np = await pm.getConfig('noproxy');
|
|
64
64
|
if (p) {
|
|
65
|
-
logger.debug(` * proxy server = ${p}`);
|
|
65
|
+
pm.logger.debug(` * proxy server = ${p}`);
|
|
66
66
|
}
|
|
67
67
|
if (np) {
|
|
68
|
-
logger.debug(` * no_proxy = ${np}`);
|
|
68
|
+
pm.logger.debug(` * no_proxy = ${np}`);
|
|
69
69
|
}
|
|
70
70
|
applyEnv(p || '', np || '');
|
|
71
71
|
}
|
|
72
|
-
export function configureProxyFromEnvironment() {
|
|
72
|
+
export function configureProxyFromEnvironment(logger = defaultLogger) {
|
|
73
73
|
// bootstrap({
|
|
74
74
|
// environmentVariableNamespace: '',
|
|
75
75
|
// forceGlobalAgent: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../../src/common/package-manager/proxy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../../src/common/package-manager/proxy.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detect-change-job.d.ts","sourceRoot":"","sources":["../../../src/common/shared-jobs/detect-change-job.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"detect-change-job.d.ts","sourceRoot":"","sources":["../../../src/common/shared-jobs/detect-change-job.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAG7E,UAAU,OAAO;IAChB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,UAAU,cAAc;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,wBAAsB,mBAAmB,CAAC,EAAE,EAAE,eAAe,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,CAmE7G"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { logger } from '@idlebox/cli';
|
|
2
1
|
import { PathEnvironment } from '@idlebox/node';
|
|
3
2
|
import { resolve } from 'node:path';
|
|
4
3
|
import { gt } from 'semver';
|
|
@@ -8,7 +7,7 @@ import { makePackageJsonOrderConsistence } from '../package-manager/package-json
|
|
|
8
7
|
import { TempWorkingFolder } from '../temp-work-folder.js';
|
|
9
8
|
export async function executeChangeDetect(pm, options = {}) {
|
|
10
9
|
const packageJson = await pm.loadPackageJson();
|
|
11
|
-
logger.debug('修改检测 | 包名: %s', packageJson.name);
|
|
10
|
+
pm.logger.debug('修改检测 | 包名: %s', packageJson.name);
|
|
12
11
|
if (!packageJson.name) {
|
|
13
12
|
throw new Error(`${pm.projectPath}/package.json 中缺少 name 字段`);
|
|
14
13
|
}
|
|
@@ -22,14 +21,14 @@ export async function executeChangeDetect(pm, options = {}) {
|
|
|
22
21
|
}
|
|
23
22
|
}
|
|
24
23
|
if (packageJson.private && !options.forcePrivate) {
|
|
25
|
-
logger.debug('检测到私有包,禁止运行');
|
|
24
|
+
pm.logger.debug('检测到私有包,禁止运行');
|
|
26
25
|
return { changedFiles: [], hasChange: false };
|
|
27
26
|
}
|
|
28
27
|
const remotePackage = await cache.fetchVersion(packageJson.name, distTagInput);
|
|
29
|
-
logger.debug(' -> npm 远程版本 = %s', remotePackage?.version);
|
|
30
|
-
logger.debug(' -> package.json 本地版本 = %s', packageJson.version);
|
|
28
|
+
pm.logger.debug(' -> npm 远程版本 = %s', remotePackage?.version);
|
|
29
|
+
pm.logger.debug(' -> package.json 本地版本 = %s', packageJson.version);
|
|
31
30
|
if (!remotePackage || gt(packageJson.version, remotePackage.version)) {
|
|
32
|
-
logger.debug('本地版本 (%s) 已经大于远程版本 (%s),无需进一步检测', packageJson.version, remotePackage?.version);
|
|
31
|
+
pm.logger.debug('本地版本 (%s) 已经大于远程版本 (%s),无需进一步检测', packageJson.version, remotePackage?.version);
|
|
33
32
|
return {
|
|
34
33
|
changedFiles: ['package.json'],
|
|
35
34
|
hasChange: false,
|
|
@@ -37,25 +36,25 @@ export async function executeChangeDetect(pm, options = {}) {
|
|
|
37
36
|
packageJsonDiff: `短路检测: "version" 本地为 ${packageJson.version}, 远程版本为 ${remotePackage?.version}`,
|
|
38
37
|
};
|
|
39
38
|
}
|
|
40
|
-
logger.debug('本地版本 (%s) 小于或等于远程版本 (%s),尝试检测更改...', packageJson.version, remotePackage.version);
|
|
39
|
+
pm.logger.debug('本地版本 (%s) 小于或等于远程版本 (%s),尝试检测更改...', packageJson.version, remotePackage.version);
|
|
41
40
|
const tarball = await cache.downloadTarball(packageJson.name, distTagInput);
|
|
42
|
-
const tempFolder = new TempWorkingFolder(pm.workspace, 'package-change-detect');
|
|
41
|
+
const tempFolder = new TempWorkingFolder(pm.workspace, 'package-change-detect', pm.logger);
|
|
43
42
|
const workingRoot = tempFolder.resolve('working');
|
|
44
43
|
await workingRoot.unpack(tarball);
|
|
45
44
|
await makePackageJsonOrderConsistence(workingRoot.path);
|
|
46
|
-
const gitrepo = new GitWorkingTree(workingRoot.path);
|
|
45
|
+
const gitrepo = new GitWorkingTree(workingRoot.path, pm.logger);
|
|
47
46
|
await gitrepo.init();
|
|
48
47
|
const pack = await pm.pack(tempFolder.joinpath('local-pack.tgz'));
|
|
49
|
-
logger.verbose(' --> %s', pack);
|
|
48
|
+
pm.logger.verbose(' --> %s', pack);
|
|
50
49
|
await workingRoot.unpack(pack);
|
|
51
|
-
logger.verbose(' unpacked successfully');
|
|
50
|
+
pm.logger.verbose(' unpacked successfully');
|
|
52
51
|
await makePackageJsonOrderConsistence(workingRoot.path);
|
|
53
52
|
const changedFiles = await gitrepo.commitChanges();
|
|
54
|
-
logger.verbose ` changed files: list<${changedFiles}>`;
|
|
53
|
+
pm.logger.verbose ` changed files: list<${changedFiles}>`;
|
|
55
54
|
let packageJsonDiff = '';
|
|
56
55
|
if (changedFiles.includes('package.json')) {
|
|
57
56
|
packageJsonDiff = await gitrepo.fileDiff('package.json');
|
|
58
|
-
logger.debug(` - package.json 文件的修改:\n${packageJsonDiff}`);
|
|
57
|
+
pm.logger.debug(` - package.json 文件的修改:\n${packageJsonDiff}`);
|
|
59
58
|
}
|
|
60
59
|
return { changedFiles, hasChange: changedFiles.length > 0, remoteVersion: remotePackage.version, packageJsonDiff };
|
|
61
60
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detect-change-job.js","sourceRoot":"","sources":["../../../src/common/shared-jobs/detect-change-job.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"detect-change-job.js","sourceRoot":"","sources":["../../../src/common/shared-jobs/detect-change-job.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
|
|
1
|
+
import { type IMyLogger } from '@idlebox/cli';
|
|
2
|
+
export declare function decompressPack(src: string, dest: string, logger?: IMyLogger): Promise<void>;
|
|
2
3
|
//# sourceMappingURL=decompress.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decompress.d.ts","sourceRoot":"","sources":["../../../src/common/taball/decompress.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"decompress.d.ts","sourceRoot":"","sources":["../../../src/common/taball/decompress.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAOvE,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,SAAyB,iBAuChG"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
+
import { logger as defaultLogger } from '@idlebox/cli';
|
|
1
2
|
import { convertCatchedError } from '@idlebox/common';
|
|
2
|
-
import { logger } from '@idlebox/cli';
|
|
3
3
|
import { existsSync, unlinkSync } from 'node:fs';
|
|
4
4
|
import tgz from 'targz';
|
|
5
5
|
const packageFolder = /^package\//;
|
|
6
|
-
export async function decompressPack(src, dest) {
|
|
6
|
+
export async function decompressPack(src, dest, logger = defaultLogger) {
|
|
7
7
|
logger.debug(`解压文件: ${src}\n\u3000\u3000目录: ${dest}`);
|
|
8
8
|
await new Promise((resolve, reject) => {
|
|
9
9
|
if (!existsSync(src)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decompress.js","sourceRoot":"","sources":["../../../src/common/taball/decompress.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"decompress.js","sourceRoot":"","sources":["../../../src/common/taball/decompress.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,aAAa,EAAkB,MAAM,cAAc,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,GAAG,MAAM,OAAO,CAAC;AAExB,MAAM,aAAa,GAAG,YAAY,CAAC;AAEnC,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,GAAW,EAAE,IAAY,EAAE,SAAoB,aAAa;IAChG,MAAM,CAAC,KAAK,CAAC,SAAS,GAAG,qBAAqB,IAAI,EAAE,CAAC,CAAC;IACtD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC3C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,EAAE,CAAC,CAAC;QACnD,CAAC;QAED,GAAG,CAAC,UAAU,CACb;YACC,GAAG;YACH,IAAI;YACJ,GAAG,EAAE;gBACJ,MAAM,CAAC,CAAC,EAAE,MAAM;oBACf,OAAO,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;gBAChC,CAAC;gBACD,GAAG,CAAC,MAAM;oBACT,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;wBACrC,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;oBACtD,CAAC;yBAAM,CAAC;wBACP,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;oBAClB,CAAC;oBACD,OAAO,MAAM,CAAC;gBACf,CAAC;aACD;SACD,EACD,CAAC,CAAC,EAAE,EAAE;YACL,IAAI,CAAC,EAAE,CAAC;gBACP,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;gBAC5C,IAAI,CAAC;oBACJ,UAAU,CAAC,GAAG,CAAC,CAAC;gBACjB,CAAC;gBAAC,MAAM,CAAC,CAAA,CAAC;gBACV,MAAM,CAAC,CAAC,CAAC,CAAC;YACX,CAAC;iBAAM,CAAC;gBACP,OAAO,EAAE,CAAC;YACX,CAAC;QACF,CAAC,CACD,CAAC;IACH,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AACtB,CAAC"}
|
|
@@ -1,6 +1,13 @@
|
|
|
1
|
+
import { type IMyLogger } from '@idlebox/cli';
|
|
1
2
|
import type { IncomingMessage } from 'node:http';
|
|
2
3
|
import type { Readable } from 'node:stream';
|
|
3
|
-
export declare
|
|
4
|
+
export declare class FileDownloader {
|
|
5
|
+
readonly logger: IMyLogger;
|
|
6
|
+
constructor(logger?: IMyLogger);
|
|
7
|
+
download(url: string, file: string): Promise<string>;
|
|
8
|
+
private http_stream;
|
|
9
|
+
private send_request;
|
|
10
|
+
}
|
|
4
11
|
export declare class HttpError extends Error {
|
|
5
12
|
readonly url: string;
|
|
6
13
|
readonly code: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-download.d.ts","sourceRoot":"","sources":["../../../src/common/taball/file-download.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"file-download.d.ts","sourceRoot":"","sources":["../../../src/common/taball/file-download.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAKvE,OAAO,KAAK,EAAuB,eAAe,EAAuB,MAAM,WAAW,CAAC;AAG3F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAQ5C,qBAAa,cAAc;aACE,MAAM,EAAE,SAAS;gBAAjB,MAAM,GAAE,SAAyB;IAEhD,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;YA6BjC,WAAW;IA4BzB,OAAO,CAAC,YAAY;CA0DpB;AAgBD,qBAAa,SAAU,SAAQ,KAAK;aAElB,GAAG,EAAE,MAAM;aACX,IAAI,EAAE,MAAM;gBADZ,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EAC5B,GAAG,EAAE,MAAM;IAKZ,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,IAAI,SAAS;CAGrC;AAED,KAAK,OAAO,GAAG;IAAE,MAAM,EAAE,QAAQ,CAAA;CAAE,CAAC;AACpC,MAAM,MAAM,mBAAmB,GAAG,IAAI,CAAC,eAAe,EAAE,MAAM,QAAQ,CAAC,GAAG,OAAO,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { logger } from '@idlebox/cli';
|
|
1
|
+
import { logger as defaultLogger } from '@idlebox/cli';
|
|
2
2
|
import { sleep } from '@idlebox/common';
|
|
3
3
|
import { exists, streamPromise } from '@idlebox/node';
|
|
4
4
|
import { createWriteStream } from 'node:fs';
|
|
@@ -6,29 +6,115 @@ import { mkdir, readFile, rename, writeFile } from 'node:fs/promises';
|
|
|
6
6
|
import { get } from 'node:https';
|
|
7
7
|
import { dirname } from 'node:path';
|
|
8
8
|
import { createBrotliDecompress, createGunzip, createInflate } from 'node:zlib';
|
|
9
|
-
export
|
|
10
|
-
|
|
11
|
-
logger
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
9
|
+
export class FileDownloader {
|
|
10
|
+
logger;
|
|
11
|
+
constructor(logger = defaultLogger) {
|
|
12
|
+
this.logger = logger;
|
|
13
|
+
}
|
|
14
|
+
async download(url, file) {
|
|
15
|
+
const metadata = `${file}.meta.json`;
|
|
16
|
+
this.logger.debug `下载文件:\n 地址: long<${url}>\n 保存到: long<${file}>`;
|
|
17
|
+
let meta;
|
|
18
|
+
if ((await exists(metadata)) && (await exists(file))) {
|
|
19
|
+
try {
|
|
20
|
+
meta = JSON.parse(await readFile(metadata, 'utf-8'));
|
|
21
|
+
}
|
|
22
|
+
catch { }
|
|
23
|
+
if (meta?.url === url) {
|
|
24
|
+
this.logger.debug(' -> 已经下载');
|
|
25
|
+
return file;
|
|
26
|
+
}
|
|
16
27
|
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
28
|
+
const response = await this.http_stream(url);
|
|
29
|
+
await mkdir(dirname(file), { recursive: true });
|
|
30
|
+
const writeOut = createWriteStream(`${file}.downloading`);
|
|
31
|
+
await streamPromise(response.stream.pipe(writeOut));
|
|
32
|
+
meta = { headers: response.headers, url };
|
|
33
|
+
await writeFile(metadata, JSON.stringify(meta), 'utf-8');
|
|
34
|
+
await rename(`${file}.downloading`, file);
|
|
35
|
+
this.logger.debug(' -> 下载完成');
|
|
36
|
+
return file;
|
|
37
|
+
}
|
|
38
|
+
async http_stream(url, headers) {
|
|
39
|
+
let try_remain = 3;
|
|
40
|
+
let redirect_cnt = 0;
|
|
41
|
+
while (try_remain-- > 0) {
|
|
42
|
+
try {
|
|
43
|
+
return await this.send_request(url, headers || {});
|
|
44
|
+
}
|
|
45
|
+
catch (e) {
|
|
46
|
+
if (RedirectError.is(e)) {
|
|
47
|
+
redirect_cnt++;
|
|
48
|
+
if (redirect_cnt > 8) {
|
|
49
|
+
throw new HttpError(url, 0, '重定向次数过多');
|
|
50
|
+
}
|
|
51
|
+
this.logger.debug(`[http] 重定向到 ${e.location}`);
|
|
52
|
+
url = e.location;
|
|
53
|
+
try_remain++;
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
this.logger.error('获取 %s 失败 [剩余尝试次数 %s]', url, try_remain);
|
|
57
|
+
if (try_remain === 0)
|
|
58
|
+
throw e;
|
|
59
|
+
await sleep(2000);
|
|
60
|
+
}
|
|
21
61
|
}
|
|
62
|
+
throw new Error('不可能的错误');
|
|
63
|
+
}
|
|
64
|
+
send_request(url, headers) {
|
|
65
|
+
headers['Accept-Encoding'] = 'br,gzip,deflate';
|
|
66
|
+
return new Promise((resolve, reject) => {
|
|
67
|
+
this.logger.debug(`[http] 请求 ${url}`);
|
|
68
|
+
const request = get(url, { headers }, (response) => {
|
|
69
|
+
this.logger.debug(`[http] 响应 ${response.statusCode} [encoding: ${response.headers['content-encoding']}][${response.headers['content-length']} bytes]`);
|
|
70
|
+
if (response.statusCode === 200) {
|
|
71
|
+
const bytes = Number.parseInt(response.headers['content-length'] ?? '--', 10);
|
|
72
|
+
if (bytes > 5 * 1024 * 1024 && process.stderr.isTTY) {
|
|
73
|
+
let downloaded = 0;
|
|
74
|
+
response.on('data', (bs) => {
|
|
75
|
+
downloaded += bs.length;
|
|
76
|
+
process.stderr.write(`\x1B[2mdownload: ${downloaded} of ${bytes} bytes (${Math.round((downloaded / bytes) * 100)}%)\x1B[0m\r`);
|
|
77
|
+
});
|
|
78
|
+
response.on('end', () => {
|
|
79
|
+
process.stderr.write('\x1B[K');
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
let stream;
|
|
83
|
+
switch (response.headers['content-encoding']) {
|
|
84
|
+
case 'br':
|
|
85
|
+
stream = response.pipe(createBrotliDecompress());
|
|
86
|
+
break;
|
|
87
|
+
// Or, just use zlib.createUnzip() to handle both of the following cases:
|
|
88
|
+
case 'gzip':
|
|
89
|
+
stream = response.pipe(createGunzip());
|
|
90
|
+
break;
|
|
91
|
+
case 'deflate':
|
|
92
|
+
stream = response.pipe(createInflate());
|
|
93
|
+
break;
|
|
94
|
+
default:
|
|
95
|
+
stream = response;
|
|
96
|
+
break;
|
|
97
|
+
}
|
|
98
|
+
resolve(Object.assign(response, { stream }));
|
|
99
|
+
}
|
|
100
|
+
else if ((response.statusCode === 302 ||
|
|
101
|
+
response.statusCode === 301 ||
|
|
102
|
+
response.statusCode === 303 ||
|
|
103
|
+
response.statusCode === 307 ||
|
|
104
|
+
response.statusCode === 308) &&
|
|
105
|
+
response.headers.location) {
|
|
106
|
+
reject(new RedirectError(url, response.headers.location, response.statusCode));
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
reject(new HttpError(url, response.statusCode, response.statusMessage));
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
request.on('error', (err) => {
|
|
113
|
+
reject(err);
|
|
114
|
+
});
|
|
115
|
+
request.end();
|
|
116
|
+
});
|
|
22
117
|
}
|
|
23
|
-
const response = await http_stream(url);
|
|
24
|
-
await mkdir(dirname(file), { recursive: true });
|
|
25
|
-
const writeOut = createWriteStream(`${file}.downloading`);
|
|
26
|
-
await streamPromise(response.stream.pipe(writeOut));
|
|
27
|
-
meta = { headers: response.headers, url };
|
|
28
|
-
await writeFile(metadata, JSON.stringify(meta), 'utf-8');
|
|
29
|
-
await rename(`${file}.downloading`, file);
|
|
30
|
-
logger.debug(' -> 下载完成');
|
|
31
|
-
return file;
|
|
32
118
|
}
|
|
33
119
|
class RedirectError extends Error {
|
|
34
120
|
location;
|
|
@@ -54,80 +140,4 @@ export class HttpError extends Error {
|
|
|
54
140
|
return obj instanceof HttpError;
|
|
55
141
|
}
|
|
56
142
|
}
|
|
57
|
-
async function http_stream(url, headers) {
|
|
58
|
-
let try_remain = 3;
|
|
59
|
-
let redirect_cnt = 0;
|
|
60
|
-
while (try_remain-- > 0) {
|
|
61
|
-
try {
|
|
62
|
-
return await send_request(url, headers || {});
|
|
63
|
-
}
|
|
64
|
-
catch (e) {
|
|
65
|
-
if (RedirectError.is(e)) {
|
|
66
|
-
redirect_cnt++;
|
|
67
|
-
if (redirect_cnt > 8) {
|
|
68
|
-
throw new HttpError(url, 0, '重定向次数过多');
|
|
69
|
-
}
|
|
70
|
-
logger.debug(`[http] 重定向到 ${e.location}`);
|
|
71
|
-
url = e.location;
|
|
72
|
-
try_remain++;
|
|
73
|
-
continue;
|
|
74
|
-
}
|
|
75
|
-
logger.error('获取 %s 失败 [剩余尝试次数 %s]', url, try_remain);
|
|
76
|
-
if (try_remain === 0)
|
|
77
|
-
throw e;
|
|
78
|
-
await sleep(2000);
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
throw new Error('不可能的错误');
|
|
82
|
-
}
|
|
83
|
-
function send_request(url, headers) {
|
|
84
|
-
headers['Accept-Encoding'] = 'br,gzip,deflate';
|
|
85
|
-
return new Promise((resolve, reject) => {
|
|
86
|
-
logger.debug(`[http] 请求 ${url}`);
|
|
87
|
-
const request = get(url, { headers }, (response) => {
|
|
88
|
-
logger.debug(`[http] 响应 ${response.statusCode} [encoding: ${response.headers['content-encoding']}][${response.headers['content-length']} bytes]`);
|
|
89
|
-
if (response.statusCode === 200) {
|
|
90
|
-
const bytes = Number.parseInt(response.headers['content-length'] ?? '--', 10);
|
|
91
|
-
if (bytes > 5 * 1024 * 1024 && process.stderr.isTTY) {
|
|
92
|
-
let downloaded = 0;
|
|
93
|
-
response.on('data', (bs) => {
|
|
94
|
-
downloaded += bs.length;
|
|
95
|
-
process.stderr.write(`\x1B[2mdownload: ${downloaded} of ${bytes} bytes (${Math.round((downloaded / bytes) * 100)}%)\x1B[0m\r`);
|
|
96
|
-
});
|
|
97
|
-
response.on('end', () => {
|
|
98
|
-
process.stderr.write('\x1B[K');
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
let stream;
|
|
102
|
-
switch (response.headers['content-encoding']) {
|
|
103
|
-
case 'br':
|
|
104
|
-
stream = response.pipe(createBrotliDecompress());
|
|
105
|
-
break;
|
|
106
|
-
// Or, just use zlib.createUnzip() to handle both of the following cases:
|
|
107
|
-
case 'gzip':
|
|
108
|
-
stream = response.pipe(createGunzip());
|
|
109
|
-
break;
|
|
110
|
-
case 'deflate':
|
|
111
|
-
stream = response.pipe(createInflate());
|
|
112
|
-
break;
|
|
113
|
-
default:
|
|
114
|
-
stream = response;
|
|
115
|
-
break;
|
|
116
|
-
}
|
|
117
|
-
resolve(Object.assign(response, { stream }));
|
|
118
|
-
}
|
|
119
|
-
else if ((response.statusCode === 302 || response.statusCode === 301 || response.statusCode === 303 || response.statusCode === 307 || response.statusCode === 308) &&
|
|
120
|
-
response.headers.location) {
|
|
121
|
-
reject(new RedirectError(url, response.headers.location, response.statusCode));
|
|
122
|
-
}
|
|
123
|
-
else {
|
|
124
|
-
reject(new HttpError(url, response.statusCode, response.statusMessage));
|
|
125
|
-
}
|
|
126
|
-
});
|
|
127
|
-
request.on('error', (err) => {
|
|
128
|
-
reject(err);
|
|
129
|
-
});
|
|
130
|
-
request.end();
|
|
131
|
-
});
|
|
132
|
-
}
|
|
133
143
|
//# sourceMappingURL=file-download.js.map
|