|
1 | 1 | const fs = require('fs');
|
2 | 2 | const { promisify } = require('util');
|
3 | 3 | const path = require('path');
|
4 |
| -const execAsync = require('./util/exec-async'); |
| 4 | +const exec_async = require('./util/exec-async'); |
5 | 5 |
|
6 | 6 | const storage = '~/.upgrade-deps';
|
7 | 7 |
|
8 |
| -const writeFileAsync = promisify( fs.writeFile ); |
9 |
| -const semverRegexStr = '[0-9]+\\.[0-9]+\\.[0-9]+'; |
10 |
| -const semverRegex = new RegExp( semverRegexStr ); |
11 |
| -const gitSemverRegex = new RegExp( `^.+#${ semverRegexStr }$` ); |
| 8 | +const write_file_async = promisify( fs.writeFile ); |
| 9 | +const semver_regex_str = '[0-9]+\\.[0-9]+\\.[0-9]+'; |
| 10 | +const semver_regex = new RegExp( semver_regex_str ); |
| 11 | +const git_semver_regex = new RegExp( `^.+#${ semver_regex_str }$` ); |
12 | 12 |
|
13 |
| -const getLatestNpm = async( pkgName ) => { |
14 |
| - const { stdout, stderr } = await execAsync( `npm show ${ pkgName } version` ); |
| 13 | +async function get_latest_npm( pkg_name ) { |
| 14 | + const { stdout, stderr } = await exec_async( `npm show ${ pkg_name } version` ); |
15 | 15 |
|
16 | 16 | if ( stderr ) {
|
17 | 17 | throw new Error( stderr );
|
18 | 18 | }
|
19 | 19 |
|
20 | 20 | return stdout.trim();
|
21 |
| -}; |
| 21 | +} |
22 | 22 |
|
23 |
| -const getLatestGit = async( version ) => { |
| 23 | +async function get_latest_git( version ) { |
24 | 24 | const [ repo ] = version.split('#');
|
25 | 25 |
|
26 | 26 | const destination = `${ storage }/${ repo }`;
|
27 | 27 |
|
28 |
| - await execAsync( `git clone git@github.com:${ repo } ${ destination }` ); |
| 28 | + await exec_async( `git clone git@github.com:${ repo } ${ destination }` ); |
29 | 29 |
|
30 |
| - const { stdout: latestTag } = await execAsync([ |
| 30 | + const { stdout: latest_tag } = await exec_async([ |
31 | 31 | `cd ${ destination }`,
|
32 | 32 | '&& git describe --tags `git rev-list --tags --max-count=1`'
|
33 | 33 | ].join(' ') );
|
34 | 34 |
|
35 |
| - return `${ repo }#${ latestTag.trim() }`; |
36 |
| -}; |
| 35 | + return `${ repo }#${ latest_tag.trim() }`; |
| 36 | +} |
37 | 37 |
|
38 |
| -const getLatest = async([ pkgName, version ]) => { |
| 38 | +async function get_latest([ pkg_name, version ]) { |
39 | 39 | let latest = version;
|
40 | 40 |
|
41 |
| - if ( gitSemverRegex.test( version ) ) { |
42 |
| - latest = await getLatestGit( version ); |
43 |
| - } else if ( semverRegex.test( version ) ) { |
44 |
| - latest = await getLatestNpm( pkgName ); |
| 41 | + if ( git_semver_regex.test( version ) ) { |
| 42 | + latest = await get_latest_git( version ); |
| 43 | + } else if ( semver_regex.test( version ) ) { |
| 44 | + latest = await get_latest_npm( pkg_name ); |
45 | 45 | }
|
46 | 46 |
|
47 |
| - return [ pkgName, latest ]; |
48 |
| -}; |
| 47 | + return [ pkg_name, latest ]; |
| 48 | +} |
49 | 49 |
|
50 |
| -const getPackageJSON = () => { |
51 |
| - const pkgJSONPath = path.join( process.cwd(), 'package.json' ); |
| 50 | +function get_pkg_json() { |
| 51 | + const pkg_json_path = path.join( process.cwd(), 'package.json' ); |
52 | 52 |
|
53 | 53 | try {
|
54 |
| - return require( pkgJSONPath ); |
| 54 | + return require( pkg_json_path ); |
55 | 55 | } catch ( ex ) {
|
56 | 56 | if ( ex.code === 'MODULE_NOT_FOUND' ) {
|
57 |
| - throw new Error( `couldnt find package.json in current directory: ${ pkgJSONPath }` ); |
| 57 | + throw new Error( `couldnt find package.json in current directory: ${ pkg_json_path }` ); |
58 | 58 | }
|
59 | 59 | throw ex;
|
60 | 60 | }
|
61 |
| -}; |
| 61 | +} |
62 | 62 |
|
63 |
| -const upgradeDeps = async({ breaking, dryRun }) => { |
| 63 | +async function upgrade_deps({ breaking, dryRun: dry_run }) { |
64 | 64 | try {
|
65 |
| - const packageJSON = getPackageJSON(); |
| 65 | + const pkg_json = get_pkg_json(); |
66 | 66 |
|
67 |
| - await execAsync( `[ ! -d ${ storage } ]` ).catch( () => { |
| 67 | + await exec_async( `[ ! -d ${ storage } ]` ).catch( () => { |
68 | 68 | console.log( `State directory "${ storage }" must be deleted to continue` );
|
69 | 69 | process.exit( 1 );
|
70 | 70 | });
|
71 | 71 |
|
72 |
| - await execAsync( `mkdir -p ${ storage }` ); |
| 72 | + await exec_async( `mkdir -p ${ storage }` ); |
73 | 73 |
|
74 |
| - const depsPromise = Promise.all( |
75 |
| - Object.entries( packageJSON.dependencies || {} ).map( getLatest ) |
| 74 | + const deps_promise = Promise.all( |
| 75 | + Object.entries( pkg_json.dependencies || {} ).map( get_latest ) |
76 | 76 | );
|
77 | 77 |
|
78 |
| - const devDepsPromise = Promise.all( |
79 |
| - Object.entries( packageJSON.devDependencies || {} ).map( getLatest ) |
| 78 | + const dev_deps_promise = Promise.all( |
| 79 | + Object.entries( pkg_json.devDependencies || {} ).map( get_latest ) |
80 | 80 | );
|
81 | 81 |
|
82 |
| - |
83 |
| - const [ dependencies, devDependencies ] = await Promise.all([ |
84 |
| - depsPromise, |
85 |
| - devDepsPromise |
| 82 | + const [ dependencies, dev_dependencies ] = await Promise.all([ |
| 83 | + deps_promise, |
| 84 | + dev_deps_promise |
86 | 85 | ]);
|
87 | 86 |
|
88 |
| - const updated = Object.assign( {}, packageJSON ); |
89 |
| - const dryRunUpdates = { dependencies: {}, devDependencies: {} }; |
| 87 | + const updated = Object.assign( {}, pkg_json ); |
| 88 | + const dry_run_updates = { dependencies: {}, devDependencies: {} }; |
90 | 89 |
|
91 | 90 | if ( dependencies.length ) {
|
92 | 91 | updated.dependencies = Object.fromEntries(
|
93 | 92 | dependencies.map( ([name, version]) => {
|
94 |
| - const prevVersion = packageJSON.dependencies[name]; |
95 |
| - const majorBump = prevVersion.split('.')[0] !== version.split('.')[0]; |
96 |
| - const newVersion = !majorBump || breaking ? version : prevVersion; |
| 93 | + const prev_version = pkg_json.dependencies[name]; |
| 94 | + const major_bump = prev_version.split('.')[0] !== version.split('.')[0]; |
| 95 | + const new_version = !major_bump || breaking ? version : prev_version; |
97 | 96 |
|
98 |
| - if ( prevVersion !== newVersion ) { |
99 |
| - dryRunUpdates.dependencies[ name ] = `${ prevVersion } -> ${ newVersion }`; |
| 97 | + if ( prev_version !== new_version ) { |
| 98 | + dry_run_updates.dependencies[ name ] = `${ prev_version } -> ${ new_version }`; |
100 | 99 | }
|
101 | 100 |
|
102 |
| - return [name, newVersion]; |
| 101 | + return [name, new_version]; |
103 | 102 | })
|
104 | 103 | );
|
105 | 104 | }
|
106 | 105 |
|
107 |
| - if ( devDependencies.length ) { |
| 106 | + if ( dev_dependencies.length ) { |
108 | 107 | updated.devDependencies = Object.fromEntries(
|
109 |
| - devDependencies.map( ([name, version]) => { |
110 |
| - const prevVersion = packageJSON.devDependencies[name]; |
111 |
| - const majorBump = prevVersion.split('.')[0] !== version.split('.')[0]; |
112 |
| - const newVersion = !majorBump || breaking ? version : prevVersion; |
| 108 | + dev_dependencies.map( ([name, version]) => { |
| 109 | + const prev_version = pkg_json.devDependencies[name]; |
| 110 | + const major_bump = prev_version.split('.')[0] !== version.split('.')[0]; |
| 111 | + const new_version = !major_bump || breaking ? version : prev_version; |
113 | 112 |
|
114 |
| - if ( prevVersion !== newVersion ) { |
115 |
| - dryRunUpdates.devDependencies[ name ] = `${ prevVersion } -> ${ newVersion }`; |
| 113 | + if ( prev_version !== new_version ) { |
| 114 | + dry_run_updates.devDependencies[ name ] = `${ prev_version } -> ${ new_version }`; |
116 | 115 | }
|
117 | 116 |
|
118 |
| - return [name, newVersion]; |
| 117 | + return [name, new_version]; |
119 | 118 | })
|
120 | 119 | );
|
121 | 120 | }
|
122 | 121 |
|
123 |
| - if ( dryRun ) { |
| 122 | + if ( dry_run ) { |
124 | 123 | console.log('Dry run package updates:\n');
|
125 |
| - console.log( JSON.stringify( dryRunUpdates, null, 2 ) ); |
| 124 | + console.log( JSON.stringify( dry_run_updates, null, 2 ) ); |
126 | 125 | } else {
|
127 |
| - await writeFileAsync( 'package.json', JSON.stringify( updated, null, 2 ).trim() ); |
| 126 | + await write_file_async( |
| 127 | + 'package.json', |
| 128 | + JSON.stringify( updated, null, 2 ).trim() + '\n' |
| 129 | + ); |
128 | 130 | }
|
129 | 131 |
|
130 |
| - await execAsync( `rm -rf ${ storage }` ); |
| 132 | + await exec_async( `rm -rf ${ storage }` ); |
131 | 133 |
|
132 | 134 | process.exit( 0 );
|
133 | 135 | } catch ( ex ) {
|
134 | 136 | console.error( 'Failure upgrading deps', ex );
|
135 | 137 |
|
136 |
| - await execAsync( `rm -rf ${ storage }` ); |
| 138 | + await exec_async( `rm -rf ${ storage }` ); |
137 | 139 |
|
138 | 140 | process.exit( 1 );
|
139 | 141 | }
|
140 |
| -}; |
| 142 | +} |
141 | 143 |
|
142 |
| -module.exports = upgradeDeps; |
| 144 | +module.exports = upgrade_deps; |
0 commit comments