Skip to content

Commit 919ec3b

Browse files
authored
refactor: migrate to ESM (#601)
1 parent bdfbb6e commit 919ec3b

File tree

107 files changed

+1025
-1386
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

107 files changed

+1025
-1386
lines changed

.eslintrc

+1-4
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,6 @@
1212
"node": true
1313
},
1414
"parserOptions": {
15-
"ecmaFeatures": {
16-
"globalReturn": true
17-
},
18-
"sourceType": "script"
15+
"sourceType": "module"
1916
}
2017
}

.mocharc.json

-3
This file was deleted.

bin/get-metadata

-10
This file was deleted.

bin/get-metadata.js

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#!/usr/bin/env node
2+
3+
import { fileURLToPath } from 'node:url';
4+
5+
import { runAsync } from '../lib/run.js';
6+
import { setVerbosityFromEnv } from '../lib/verbosity.js';
7+
8+
setVerbosityFromEnv();
9+
10+
const script = fileURLToPath(new URL('git-node.js', import.meta.url));
11+
runAsync(process.execPath, [script, 'metadata', ...process.argv.slice(2)]);

bin/git-node

-22
This file was deleted.

bin/git-node.js

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#!/usr/bin/env node
2+
3+
import { readdirSync } from 'fs';
4+
5+
import yargs from 'yargs';
6+
import { hideBin } from 'yargs/helpers';
7+
8+
import epilogue from '../components/git/epilogue.js';
9+
import { setVerbosityFromEnv } from '../lib/verbosity.js';
10+
11+
setVerbosityFromEnv();
12+
13+
const commandFiles = readdirSync(new URL('../components/git', import.meta.url))
14+
.filter(file => file !== 'epilogue.js');
15+
16+
function importCommand(commandFile) {
17+
return import(new URL(`../components/git/${commandFile}`, import.meta.url));
18+
}
19+
20+
Promise.all(commandFiles.map(importCommand)).then((commands) => {
21+
const args = yargs(hideBin(process.argv));
22+
commands.forEach(command => args.command(command));
23+
args.command('help', false, () => {}, (yargs) => { yargs.showHelp(); })
24+
.demandCommand(1)
25+
.strict()
26+
.epilogue(epilogue)
27+
.help('help')
28+
.parse();
29+
});

bin/ncu-ci bin/ncu-ci.js

+41-42
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,47 @@
11
#!/usr/bin/env node
22

3-
'use strict';
3+
import yargs from 'yargs';
4+
import clipboardy from 'clipboardy';
45

5-
const {
6+
import {
67
JobParser,
78
parseJobFromURL,
8-
CI_TYPES_KEYS: {
9-
PR,
10-
COMMIT,
11-
BENCHMARK,
12-
CITGM,
13-
CITGM_NOBUILD,
14-
DAILY_MASTER
15-
}
16-
} = require('../lib/ci/ci_type_parser');
17-
const { setVerbosityFromEnv } = require('../lib/verbosity');
18-
setVerbosityFromEnv();
19-
20-
const { listBuilds } = require('../lib/ci/ci_utils');
21-
22-
const { jobCache } = require('../lib/ci/build-types/job');
23-
const { PRBuild } = require('../lib/ci/build-types/pr_build');
24-
const { CommitBuild } = require('../lib/ci/build-types/commit_build');
25-
const { DailyBuild } = require('../lib/ci/build-types/daily_build');
26-
const { FailureAggregator } = require('../lib/ci/failure_aggregator');
27-
const { BenchmarkRun } = require('../lib/ci/build-types/benchmark_run');
28-
const { HealthBuild } = require('../lib/ci/build-types/health_build');
29-
const { CITGMBuild } = require('../lib/ci/build-types/citgm_build');
30-
const {
9+
CI_TYPES_KEYS
10+
} from '../lib/ci/ci_type_parser.js';
11+
import { setVerbosityFromEnv } from '../lib/verbosity.js';
12+
import { listBuilds } from '../lib/ci/ci_utils.js';
13+
import { jobCache } from '../lib/ci/build-types/job.js';
14+
import { PRBuild } from '../lib/ci/build-types/pr_build.js';
15+
import { CommitBuild } from '../lib/ci/build-types/commit_build.js';
16+
import { DailyBuild } from '../lib/ci/build-types/daily_build.js';
17+
import { FailureAggregator } from '../lib/ci/failure_aggregator.js';
18+
import { BenchmarkRun } from '../lib/ci/build-types/benchmark_run.js';
19+
import { HealthBuild } from '../lib/ci/build-types/health_build.js';
20+
import { CITGMBuild } from '../lib/ci/build-types/citgm_build.js';
21+
import {
3122
CITGMComparisonBuild
32-
} = require('../lib/ci/build-types/citgm_comparison_build');
33-
34-
const {
23+
} from '../lib/ci/build-types/citgm_comparison_build.js';
24+
import {
3525
RunPRJob
36-
} = require('../lib/ci/run_ci');
37-
const clipboardy = require('clipboardy');
38-
const { writeJson, writeFile } = require('../lib/file');
39-
const { getMergedConfig } = require('../lib/config');
26+
} from '../lib/ci/run_ci.js';
27+
import { writeJson, writeFile } from '../lib/file.js';
28+
import { getMergedConfig } from '../lib/config.js';
29+
import { runPromise } from '../lib/run.js';
30+
import auth from '../lib/auth.js';
31+
import Request from '../lib/request.js';
32+
import CLI from '../lib/cli.js';
33+
import { hideBin } from 'yargs/helpers';
34+
35+
setVerbosityFromEnv();
4036

41-
const { runPromise } = require('../lib/run');
42-
const auth = require('../lib/auth');
43-
const Request = require('../lib/request');
44-
const CLI = require('../lib/cli');
45-
const yargs = require('yargs');
37+
const {
38+
PR,
39+
COMMIT,
40+
BENCHMARK,
41+
CITGM,
42+
CITGM_NOBUILD,
43+
DAILY_MASTER
44+
} = CI_TYPES_KEYS;
4645

4746
const commandKeys = [
4847
'rate',
@@ -53,8 +52,7 @@ const commandKeys = [
5352
'citgm'
5453
];
5554

56-
// eslint-disable-next-line no-unused-vars
57-
const argv = yargs
55+
const args = yargs(hideBin(process.argv))
5856
.command({
5957
command: 'rate <type>',
6058
desc: 'Calculate the green rate of a CI job in the last 100 runs',
@@ -223,8 +221,9 @@ const argv = yargs
223221
}
224222
return true;
225223
})
226-
.help()
227-
.argv;
224+
.help();
225+
226+
args.parse();
228227

229228
const commandToType = {
230229
commit: COMMIT,
@@ -564,7 +563,7 @@ async function main(command, argv) {
564563
break;
565564
}
566565
default:
567-
return yargs.showHelp();
566+
return args.showHelp();
568567
}
569568

570569
await commandHandler.initialize();

bin/ncu-config bin/ncu-config.js

+10-9
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
#!/usr/bin/env node
22

3-
'use strict';
3+
import yargs from 'yargs';
4+
import { hideBin } from 'yargs/helpers';
45

5-
const {
6+
import {
67
getConfig, updateConfig, GLOBAL_CONFIG, PROJECT_CONFIG, LOCAL_CONFIG
7-
} = require('../lib/config');
8+
} from '../lib/config.js';
9+
import { setVerbosityFromEnv } from '../lib/verbosity.js';
810

9-
const { setVerbosityFromEnv } = require('../lib/verbosity');
1011
setVerbosityFromEnv();
1112

12-
const yargs = require('yargs');
13-
const argv = yargs
13+
const args = yargs(hideBin(process.argv))
1414
.command({
1515
command: 'set <key> <value>',
1616
desc: 'Set a config variable',
@@ -58,8 +58,9 @@ const argv = yargs
5858
describe: 'Use project config (./.ncurc)'
5959
})
6060
.conflicts('global', 'project')
61-
.help()
62-
.argv;
61+
.help();
62+
63+
const argv = args.parse();
6364

6465
function getConfigType(argv) {
6566
if (argv.global) {
@@ -95,5 +96,5 @@ function listHandler(argv) {
9596
}
9697

9798
if (!['get', 'set', 'list'].includes(argv._[0])) {
98-
yargs.showHelp();
99+
args.showHelp();
99100
}

bin/ncu-team bin/ncu-team.js

+28-26
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,35 @@
11
#!/usr/bin/env node
22

3-
'use strict';
4-
const Request = require('../lib/request');
5-
const auth = require('../lib/auth');
6-
const { runPromise } = require('../lib/run');
7-
const CLI = require('../lib/cli');
8-
const TeamInfo = require('../lib/team_info');
3+
import yargs from 'yargs';
4+
import { hideBin } from 'yargs/helpers';
5+
6+
import Request from '../lib/request.js';
7+
import auth from '../lib/auth.js';
8+
import { runPromise } from '../lib/run.js';
9+
import CLI from '../lib/cli.js';
10+
import TeamInfo from '../lib/team_info.js';
11+
12+
import { setVerbosityFromEnv } from '../lib/verbosity.js';
913

10-
const { setVerbosityFromEnv } = require('../lib/verbosity');
1114
setVerbosityFromEnv();
1215

13-
require('yargs') // eslint-disable-line
14-
.command({
15-
command: 'list <team> [org]',
16-
desc: 'Get the list of members in a team',
17-
builder: (yargs) => {
18-
yargs
19-
.positional('team', {
20-
describe: 'Name of the team',
21-
type: 'string'
22-
})
23-
.positional('org', {
24-
describe: 'Name of the organization',
25-
type: 'string',
26-
default: 'nodejs'
27-
});
28-
},
29-
handler: handler
30-
})
16+
yargs(hideBin(process.argv)).command({
17+
command: 'list <team> [org]',
18+
desc: 'Get the list of members in a team',
19+
builder: (yargs) => {
20+
yargs
21+
.positional('team', {
22+
describe: 'Name of the team',
23+
type: 'string'
24+
})
25+
.positional('org', {
26+
describe: 'Name of the organization',
27+
type: 'string',
28+
default: 'nodejs'
29+
});
30+
},
31+
handler: handler
32+
})
3133
.command({
3234
command: 'sync <file>',
3335
desc:
@@ -43,7 +45,7 @@ require('yargs') // eslint-disable-line
4345
})
4446
.demandCommand(1, 'must provide a valid command')
4547
.help()
46-
.argv;
48+
.parse();
4749

4850
function handler(argv) {
4951
runPromise(main(argv));

components/git/backport.js

+16-20
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
'use strict';
1+
import { parsePRFromURL } from '../../lib/links.js';
2+
import CLI from '../../lib/cli.js';
3+
import { runPromise } from '../../lib/run.js';
4+
import BackportSession from '../../lib/backport_session.js';
25

3-
const yargs = require('yargs');
4-
const { parsePRFromURL } = require('../../lib/links');
5-
const CLI = require('../../lib/cli');
6-
const { runPromise } = require('../../lib/run');
7-
const BackportSession = require('../../lib/backport_session');
6+
export const command = 'backport <identifier>';
7+
export const describe = 'Backport a PR to a release staging branch.';
88

99
const epilogue = `====================== Example =======================
1010
Demo: https://asciinema.org/a/221244
@@ -23,7 +23,10 @@ $ git node backport 24816 --to 11
2323
=====================================================
2424
`;
2525

26-
function builder(yargs) {
26+
let yargsInstance;
27+
28+
export function builder(yargs) {
29+
yargsInstance = yargs;
2730
return yargs
2831
.options({
2932
to: {
@@ -40,7 +43,9 @@ function builder(yargs) {
4043
.wrap(90);
4144
}
4245

43-
async function main(config) {
46+
async function main(argv, parsed) {
47+
const merged = (await import('../../lib/config.js')).getMergedConfig();
48+
const config = Object.assign({}, argv, parsed, merged);
4449
const logStream = process.stdout.isTTY ? process.stdout : process.stderr;
4550
const cli = new CLI(logStream);
4651
cli.setFigureIndent(0);
@@ -49,26 +54,17 @@ async function main(config) {
4954
return session.backport();
5055
}
5156

52-
function handler(argv) {
57+
export function handler(argv) {
5358
let parsed = {};
5459
const prid = Number.parseInt(argv.identifier);
5560
if (!Number.isNaN(prid)) {
5661
parsed.prid = prid;
5762
} else {
5863
parsed = parsePRFromURL(argv.identifier);
5964
if (!parsed) {
60-
return yargs.showHelp();
65+
return yargsInstance.showHelp();
6166
}
6267
}
6368

64-
const config = require('../../lib/config').getMergedConfig();
65-
const merged = Object.assign({}, argv, parsed, config);
66-
return runPromise(main(merged));
69+
return runPromise(main(argv, parsed));
6770
}
68-
69-
module.exports = {
70-
command: 'backport <identifier>',
71-
describe: 'Backport a PR to a release staging branch.',
72-
builder,
73-
handler
74-
};

components/git/epilogue.js

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
'use strict';
2-
3-
module.exports = `Steps to land a pull request:
1+
export default `Steps to land a pull request:
42
==============================================================================
53
$ cd path/to/node/project
64

0 commit comments

Comments
 (0)