X Tutup
Skip to content

Commit 439e83d

Browse files
refactor: remove all usages of the legacy request module (electron#30492)
* Replaces request with got * Replaces nugget with got streams * Replaces request in docs with got * Upgrades dugite to drop requests dependency
1 parent 08ff1c2 commit 439e83d

File tree

9 files changed

+238
-664
lines changed

9 files changed

+238
-664
lines changed

docs/api/session.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,8 @@ available from next tick of the process.
8686
const { session } = require('electron')
8787
session.defaultSession.on('will-download', (event, item, webContents) => {
8888
event.preventDefault()
89-
require('request')(item.getURL(), (data) => {
90-
require('fs').writeFileSync('/somewhere', data)
89+
require('got')(item.getURL()).then((response) => {
90+
require('fs').writeFileSync('/somewhere', response.body)
9191
})
9292
})
9393
```

package.json

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
"check-for-leaks": "^1.2.1",
3636
"colors": "^1.4.0",
3737
"dotenv-safe": "^4.0.4",
38-
"dugite": "^1.45.0",
38+
"dugite": "^1.103.0",
3939
"eslint": "^7.4.0",
4040
"eslint-config-standard": "^14.1.1",
4141
"eslint-plugin-import": "^2.22.0",
@@ -54,12 +54,10 @@
5454
"markdownlint": "^0.21.1",
5555
"markdownlint-cli": "^0.25.0",
5656
"minimist": "^1.2.5",
57-
"nugget": "^2.0.1",
5857
"null-loader": "^4.0.0",
5958
"pre-flight": "^1.1.0",
6059
"remark-cli": "^10.0.0",
6160
"remark-preset-lint-markdown-style-guide": "^4.0.0",
62-
"request": "^2.88.2",
6361
"semver": "^5.6.0",
6462
"shx": "^0.3.2",
6563
"standard-markdown": "^6.0.0",

script/download-circleci-artifacts.js

Lines changed: 14 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,23 @@
11
const args = require('minimist')(process.argv.slice(2));
2-
const nugget = require('nugget');
3-
const request = require('request');
2+
const fs = require('fs');
3+
const got = require('got');
4+
const stream = require('stream');
5+
const { promisify } = require('util');
46

5-
async function makeRequest (requestOptions, parseResponse) {
6-
return new Promise((resolve, reject) => {
7-
request(requestOptions, (err, res, body) => {
8-
if (!err && res.statusCode >= 200 && res.statusCode < 300) {
9-
if (parseResponse) {
10-
const build = JSON.parse(body);
11-
resolve(build);
12-
} else {
13-
resolve(body);
14-
}
15-
} else {
16-
if (args.verbose) {
17-
console.error('Error occurred while requesting:', requestOptions.url);
18-
if (parseResponse) {
19-
try {
20-
console.log('Error: ', `(status ${res.statusCode})`, err || JSON.parse(res.body), requestOptions);
21-
} catch (err) {
22-
console.log('Error: ', `(status ${res.statusCode})`, err || res.body, requestOptions);
23-
}
24-
} else {
25-
console.log('Error: ', `(status ${res.statusCode})`, err || res.body, requestOptions);
26-
}
27-
}
28-
reject(err);
29-
}
30-
});
31-
});
32-
}
7+
const pipeline = promisify(stream.pipeline);
338

349
async function downloadArtifact (name, buildNum, dest) {
3510
const circleArtifactUrl = `https://circleci.com/api/v1.1/project/github/electron/electron/${args.buildNum}/artifacts?circle-token=${process.env.CIRCLE_TOKEN}`;
36-
const artifacts = await makeRequest({
37-
method: 'GET',
38-
url: circleArtifactUrl,
11+
const responsePromise = got(circleArtifactUrl, {
3912
headers: {
4013
'Content-Type': 'application/json',
4114
Accept: 'application/json'
4215
}
43-
}, true).catch(err => {
44-
if (args.verbose) {
45-
console.log('Error calling CircleCI:', err);
46-
} else {
47-
console.error('Error calling CircleCI to get artifact details');
48-
}
4916
});
17+
const [response, artifacts] = await Promise.all([responsePromise, responsePromise.json()]);
18+
if (response.statusCode !== 200) {
19+
console.error('Could not fetch circleci artifact list, got status code:', response.statusCode);
20+
}
5021
const artifactToDownload = artifacts.find(artifact => {
5122
return (artifact.path === name);
5223
});
@@ -86,19 +57,10 @@ async function downloadWithRetry (url, directory) {
8657
}
8758

8859
function downloadFile (url, directory) {
89-
return new Promise((resolve, reject) => {
90-
const nuggetOpts = {
91-
dir: directory,
92-
quiet: args.verbose
93-
};
94-
nugget(url, nuggetOpts, (err) => {
95-
if (err) {
96-
reject(err);
97-
} else {
98-
resolve();
99-
}
100-
});
101-
});
60+
return pipeline(
61+
got.stream(url),
62+
fs.createWriteStream(directory)
63+
);
10264
}
10365

10466
if (!args.name || !args.buildNum || !args.dest) {

script/release/ci-release-build.js

Lines changed: 12 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
if (!process.env.CI) require('dotenv-safe').load();
22

33
const assert = require('assert');
4-
const request = require('request');
4+
const got = require('got');
55

66
const BUILD_APPVEYOR_URL = 'https://ci.appveyor.com/api/builds';
77
const CIRCLECI_PIPELINE_URL = 'https://circleci.com/api/v2/project/gh/electron/electron/pipeline';
@@ -35,31 +35,18 @@ const vstsArmJobs = [
3535

3636
let jobRequestedCount = 0;
3737

38-
async function makeRequest (requestOptions, parseResponse) {
39-
return new Promise((resolve, reject) => {
40-
request(requestOptions, (err, res, body) => {
41-
if (!err && res.statusCode >= 200 && res.statusCode < 300) {
42-
if (parseResponse) {
43-
const build = JSON.parse(body);
44-
resolve(build);
45-
} else {
46-
resolve(body);
47-
}
48-
} else {
49-
console.error('Error occurred while requesting:', requestOptions.url);
50-
if (parseResponse) {
51-
try {
52-
console.log('Error: ', `(status ${res.statusCode})`, err || JSON.parse(res.body));
53-
} catch (err) {
54-
console.log('Error: ', `(status ${res.statusCode})`, res.body);
55-
}
56-
} else {
57-
console.log('Error: ', `(status ${res.statusCode})`, err || res.body);
58-
}
59-
reject(err);
60-
}
61-
});
38+
async function makeRequest ({ auth, url, headers, body, method }) {
39+
const response = await got(url, {
40+
headers,
41+
body,
42+
method,
43+
auth: auth ? `${auth.username}:${auth.password}` : undefined
6244
});
45+
if (response.statusCode !== 200) {
46+
console.error('Error: ', `(status ${response.statusCode})`, response.body);
47+
throw new Error(`Unexpected status code ${response.statusCode} from ${url}`);
48+
}
49+
return JSON.parse(response.body);
6350
}
6451

6552
async function circleCIcall (targetBranch, workflowName, options) {

script/release/get-asset.js

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
const { Octokit } = require('@octokit/rest');
2+
const got = require('got');
3+
4+
const octokit = new Octokit({
5+
userAgent: 'electron-asset-fetcher',
6+
auth: process.env.ELECTRON_GITHUB_TOKEN
7+
});
8+
9+
async function getAssetContents (repo, assetId) {
10+
const requestOptions = octokit.repos.getReleaseAsset.endpoint({
11+
owner: 'electron',
12+
repo,
13+
asset_id: assetId,
14+
headers: {
15+
Accept: 'application/octet-stream'
16+
}
17+
});
18+
19+
const { url, headers } = requestOptions;
20+
headers.authorization = `token ${process.env.ELECTRON_GITHUB_TOKEN}`;
21+
22+
const response = await got(url, {
23+
followRedirect: false,
24+
method: 'HEAD',
25+
headers
26+
});
27+
if (!response.headers.location) {
28+
console.error(response.headers, response.body);
29+
throw new Error(`cannot find asset[${assetId}], asset download did not redirect`);
30+
}
31+
32+
const fileResponse = await got(response.headers.location);
33+
if (fileResponse.status !== 200) {
34+
console.error(fileResponse.headers, fileResponse.body);
35+
throw new Error(`cannot download asset[${assetId}] from ${response.headers.location}, got status: ${fileResponse.status}`);
36+
}
37+
38+
return fileResponse.body;
39+
}
40+
41+
module.exports = {
42+
getAssetContents
43+
};

script/release/publish-to-npm.js

Lines changed: 11 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@ const temp = require('temp');
22
const fs = require('fs');
33
const path = require('path');
44
const childProcess = require('child_process');
5-
const { getCurrentBranch, ELECTRON_DIR } = require('../lib/utils');
6-
const request = require('request');
5+
const got = require('got');
76
const semver = require('semver');
7+
8+
const { getCurrentBranch, ELECTRON_DIR } = require('../lib/utils');
89
const rootPackageJson = require('../../package.json');
910

1011
const { Octokit } = require('@octokit/rest');
12+
const { getAssetContents } = require('./get-asset');
1113
const octokit = new Octokit({
1214
userAgent: 'electron-npm-publisher',
1315
auth: process.env.ELECTRON_GITHUB_TOKEN
@@ -91,22 +93,13 @@ new Promise((resolve, reject) => {
9193
if (!tsdAsset) {
9294
throw new Error(`cannot find electron.d.ts from v${rootPackageJson.version} release assets`);
9395
}
94-
return new Promise((resolve, reject) => {
95-
request.get({
96-
url: tsdAsset.url,
97-
headers: {
98-
accept: 'application/octet-stream',
99-
'user-agent': 'electron-npm-publisher'
100-
}
101-
}, (err, response, body) => {
102-
if (err || response.statusCode !== 200) {
103-
reject(err || new Error('Cannot download electron.d.ts'));
104-
} else {
105-
fs.writeFileSync(path.join(tempDir, 'electron.d.ts'), body);
106-
resolve(release);
107-
}
108-
});
109-
});
96+
97+
const typingsContent = await getAssetContents(
98+
rootPackageJson.version.indexOf('nightly') > 0 ? 'nightlies' : 'electron',
99+
tsdAsset.id
100+
);
101+
102+
fs.writeFileSync(path.join(tempDir, 'electron.d.ts'), typingsContent);
110103
})
111104
.then(async (release) => {
112105
const currentBranch = await getCurrentBranch();

script/release/release.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -384,7 +384,7 @@ async function verifyDraftGitHubReleaseAssets (release) {
384384
console.log('Fetching authenticated GitHub artifact URLs to verify shasums');
385385

386386
const remoteFilesToHash = await Promise.all(release.assets.map(async asset => {
387-
const requestOptions = await octokit.repos.getReleaseAsset.endpoint({
387+
const requestOptions = octokit.repos.getReleaseAsset.endpoint({
388388
owner: 'electron',
389389
repo: targetRepo,
390390
asset_id: asset.id,

spec/ts-smoke/electron/main.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1104,7 +1104,7 @@ shell.writeShortcutLink('/home/user/Desktop/shortcut.lnk', 'update', shell.readS
11041104

11051105
session.defaultSession.on('will-download', (event, item, webContents) => {
11061106
event.preventDefault()
1107-
require('request')(item.getURL(), (data: any) => {
1107+
require('got')(item.getURL()).then((data: any) => {
11081108
require('fs').writeFileSync('/somewhere', data)
11091109
})
11101110
})

0 commit comments

Comments
 (0)
X Tutup