@oclif/plugin-update 1.4.0-1 → 1.5.0
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/CHANGELOG.md +13 -0
 - package/README.md +4 -2
 - package/lib/commands/update.d.ts +2 -0
 - package/lib/commands/update.js +59 -24
 - package/oclif.manifest.json +1 -1
 - package/package.json +9 -9
 
    
        package/CHANGELOG.md
    CHANGED
    
    | 
         @@ -1,3 +1,16 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # Changelog
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            ## [1.5.0](https://github.com/oclif/plugin-update/compare/v1.4.0...v1.5.0) (2021-08-05)
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            ## [1.4.0](https://github.com/oclif/plugin-update/compare/v1.4.0-3...v1.4.0) (2021-08-05)
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            ### Bug Fixes
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            * allow 6 weeks before deleting CLIs ([#286](https://github.com/oclif/plugin-update/issues/286)) ([2ffc92a](https://github.com/oclif/plugin-update/commit/2ffc92a3687fd8e9ed939c59c6721d08ec7e6fa1))
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
       1 
14 
     | 
    
         
             
            ## [1.3.9](https://github.com/oclif/plugin-update/compare/v1.3.8...v1.3.9) (2018-11-26)
         
     | 
| 
       2 
15 
     | 
    
         | 
| 
       3 
16 
     | 
    
         | 
    
        package/README.md
    CHANGED
    
    | 
         @@ -4,7 +4,6 @@ 
     | 
|
| 
       4 
4 
     | 
    
         
             
            [](https://npmjs.org/package/@oclif/plugin-update)
         
     | 
| 
       5 
5 
     | 
    
         
             
            [](https://circleci.com/gh/oclif/plugin-update/tree/master)
         
     | 
| 
       6 
6 
     | 
    
         
             
            [](https://ci.appveyor.com/project/oclif/plugin-update/branch/master)
         
     | 
| 
       7 
     | 
    
         
            -
            [](https://codecov.io/gh/oclif/plugin-update)
         
     | 
| 
       8 
7 
     | 
    
         
             
            [](https://npmjs.org/package/@oclif/plugin-update)
         
     | 
| 
       9 
8 
     | 
    
         
             
            [](https://github.com/oclif/plugin-update/blob/master/package.json)
         
     | 
| 
       10 
9 
     | 
    
         | 
| 
         @@ -26,7 +25,10 @@ update the oclif-example CLI 
     | 
|
| 
       26 
25 
     | 
    
         
             
            ```
         
     | 
| 
       27 
26 
     | 
    
         
             
            USAGE
         
     | 
| 
       28 
27 
     | 
    
         
             
              $ oclif-example update [CHANNEL]
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
            OPTIONS
         
     | 
| 
      
 30 
     | 
    
         
            +
              --from-local  interactively choose an already installed version
         
     | 
| 
       29 
31 
     | 
    
         
             
            ```
         
     | 
| 
       30 
32 
     | 
    
         | 
| 
       31 
     | 
    
         
            -
            _See code: [src/commands/update.ts](https://github.com/oclif/plugin-update/blob/v1. 
     | 
| 
      
 33 
     | 
    
         
            +
            _See code: [src/commands/update.ts](https://github.com/oclif/plugin-update/blob/v1.5.0/src/commands/update.ts)_
         
     | 
| 
       32 
34 
     | 
    
         
             
            <!-- commandsstop -->
         
     | 
    
        package/lib/commands/update.d.ts
    CHANGED
    
    | 
         @@ -14,7 +14,9 @@ export default class UpdateCommand extends Command { 
     | 
|
| 
       14 
14 
     | 
    
         
             
                private readonly clientBin;
         
     | 
| 
       15 
15 
     | 
    
         
             
                run(): Promise<void>;
         
     | 
| 
       16 
16 
     | 
    
         
             
                private fetchManifest;
         
     | 
| 
      
 17 
     | 
    
         
            +
                private downloadAndExtract;
         
     | 
| 
       17 
18 
     | 
    
         
             
                private update;
         
     | 
| 
      
 19 
     | 
    
         
            +
                private updateToExistingVersion;
         
     | 
| 
       18 
20 
     | 
    
         
             
                private skipUpdate;
         
     | 
| 
       19 
21 
     | 
    
         
             
                private determineChannel;
         
     | 
| 
       20 
22 
     | 
    
         
             
                private determineCurrentVersion;
         
     | 
    
        package/lib/commands/update.js
    CHANGED
    
    | 
         @@ -20,25 +20,48 @@ class UpdateCommand extends command_1.default { 
     | 
|
| 
       20 
20 
     | 
    
         
             
                    this.autoupdate = Boolean(flags.autoupdate);
         
     | 
| 
       21 
21 
     | 
    
         
             
                    if (this.autoupdate)
         
     | 
| 
       22 
22 
     | 
    
         
             
                        await this.debounce();
         
     | 
| 
       23 
     | 
    
         
            -
                    cli_ux_1.default.action.start(`${this.config.name}: Updating CLI`);
         
     | 
| 
       24 
23 
     | 
    
         
             
                    this.channel = args.channel || await this.determineChannel();
         
     | 
| 
       25 
     | 
    
         
            -
                     
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
                        await  
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
      
 24 
     | 
    
         
            +
                    if (flags['from-local']) {
         
     | 
| 
      
 25 
     | 
    
         
            +
                        await this.ensureClientDir();
         
     | 
| 
      
 26 
     | 
    
         
            +
                        this.debug(`Looking for locally installed versions at ${this.clientRoot}`);
         
     | 
| 
      
 27 
     | 
    
         
            +
                        // Do not show known non-local version folder names, bin and current.
         
     | 
| 
      
 28 
     | 
    
         
            +
                        const versions = fs.readdirSync(this.clientRoot).filter(dirOrFile => dirOrFile !== 'bin' && dirOrFile !== 'current');
         
     | 
| 
      
 29 
     | 
    
         
            +
                        if (versions.length === 0)
         
     | 
| 
      
 30 
     | 
    
         
            +
                            throw new Error('No locally installed versions found.');
         
     | 
| 
      
 31 
     | 
    
         
            +
                        this.log(`Found versions: \n${versions.map(version => `     ${version}`).join('\n')}\n`);
         
     | 
| 
      
 32 
     | 
    
         
            +
                        const pinToVersion = await cli_ux_1.default.prompt('Enter a version to update to');
         
     | 
| 
      
 33 
     | 
    
         
            +
                        if (!versions.includes(pinToVersion))
         
     | 
| 
      
 34 
     | 
    
         
            +
                            throw new Error(`Version ${pinToVersion} not found in the locally installed versions.`);
         
     | 
| 
      
 35 
     | 
    
         
            +
                        if (!await fs.pathExists(path.join(this.clientRoot, pinToVersion))) {
         
     | 
| 
      
 36 
     | 
    
         
            +
                            throw new Error(`Version ${pinToVersion} is not already installed at ${this.clientRoot}.`);
         
     | 
| 
      
 37 
     | 
    
         
            +
                        }
         
     | 
| 
      
 38 
     | 
    
         
            +
                        cli_ux_1.default.action.start(`${this.config.name}: Updating CLI`);
         
     | 
| 
      
 39 
     | 
    
         
            +
                        this.debug(`switching to existing version ${pinToVersion}`);
         
     | 
| 
      
 40 
     | 
    
         
            +
                        this.updateToExistingVersion(pinToVersion);
         
     | 
| 
      
 41 
     | 
    
         
            +
                        this.log();
         
     | 
| 
      
 42 
     | 
    
         
            +
                        this.log(`Updating to an already installed version will not update the channel. If autoupdate is enabled, the CLI will eventually be updated back to ${this.channel}.`);
         
     | 
| 
      
 43 
     | 
    
         
            +
                    }
         
     | 
| 
      
 44 
     | 
    
         
            +
                    else {
         
     | 
| 
      
 45 
     | 
    
         
            +
                        cli_ux_1.default.action.start(`${this.config.name}: Updating CLI`);
         
     | 
| 
      
 46 
     | 
    
         
            +
                        await this.config.runHook('preupdate', { channel: this.channel });
         
     | 
| 
      
 47 
     | 
    
         
            +
                        const manifest = await this.fetchManifest();
         
     | 
| 
      
 48 
     | 
    
         
            +
                        this.currentVersion = await this.determineCurrentVersion();
         
     | 
| 
      
 49 
     | 
    
         
            +
                        this.updatedVersion = manifest.sha ? `${manifest.version}-${manifest.sha}` : manifest.version;
         
     | 
| 
      
 50 
     | 
    
         
            +
                        const reason = await this.skipUpdate();
         
     | 
| 
      
 51 
     | 
    
         
            +
                        if (reason)
         
     | 
| 
      
 52 
     | 
    
         
            +
                            cli_ux_1.default.action.stop(reason || 'done');
         
     | 
| 
      
 53 
     | 
    
         
            +
                        else
         
     | 
| 
      
 54 
     | 
    
         
            +
                            await this.update(manifest);
         
     | 
| 
      
 55 
     | 
    
         
            +
                        this.debug('tidy');
         
     | 
| 
      
 56 
     | 
    
         
            +
                        await this.tidy();
         
     | 
| 
      
 57 
     | 
    
         
            +
                        await this.config.runHook('update', { channel: this.channel });
         
     | 
| 
      
 58 
     | 
    
         
            +
                    }
         
     | 
| 
       37 
59 
     | 
    
         
             
                    this.debug('done');
         
     | 
| 
       38 
60 
     | 
    
         
             
                    cli_ux_1.default.action.stop();
         
     | 
| 
       39 
61 
     | 
    
         
             
                }
         
     | 
| 
       40 
62 
     | 
    
         
             
                async fetchManifest() {
         
     | 
| 
       41 
63 
     | 
    
         
             
                    const http = require('http-call').HTTP;
         
     | 
| 
      
 64 
     | 
    
         
            +
                    cli_ux_1.default.action.status = 'fetching manifest';
         
     | 
| 
       42 
65 
     | 
    
         
             
                    if (!this.config.scopedEnvVarTrue('USE_LEGACY_UPDATE')) {
         
     | 
| 
       43 
66 
     | 
    
         
             
                        try {
         
     | 
| 
       44 
67 
     | 
    
         
             
                            const newManifestUrl = this.config.s3Url(this.s3ChannelManifestKey(this.config.bin, this.config.platform, this.config.arch, this.config.pjson.oclif.update.s3.folder));
         
     | 
| 
         @@ -72,18 +95,13 @@ class UpdateCommand extends command_1.default { 
     | 
|
| 
       72 
95 
     | 
    
         
             
                        throw error;
         
     | 
| 
       73 
96 
     | 
    
         
             
                    }
         
     | 
| 
       74 
97 
     | 
    
         
             
                }
         
     | 
| 
       75 
     | 
    
         
            -
                async  
     | 
| 
       76 
     | 
    
         
            -
                    const { version 
     | 
| 
       77 
     | 
    
         
            -
                    if (manifestChannel)
         
     | 
| 
       78 
     | 
    
         
            -
                        channel = manifestChannel;
         
     | 
| 
       79 
     | 
    
         
            -
                    cli_ux_1.default.action.start(`${this.config.name}: Updating CLI from ${color_1.default.green(this.currentVersion)} to ${color_1.default.green(this.updatedVersion)}${channel === 'stable' ? '' : ' (' + color_1.default.yellow(channel) + ')'}`);
         
     | 
| 
       80 
     | 
    
         
            -
                    const http = require('http-call').HTTP;
         
     | 
| 
      
 98 
     | 
    
         
            +
                async downloadAndExtract(output, manifest, channel) {
         
     | 
| 
      
 99 
     | 
    
         
            +
                    const { version } = manifest;
         
     | 
| 
       81 
100 
     | 
    
         
             
                    const filesize = (n) => {
         
     | 
| 
       82 
101 
     | 
    
         
             
                        const [num, suffix] = require('filesize')(n, { output: 'array' });
         
     | 
| 
       83 
102 
     | 
    
         
             
                        return num.toFixed(1) + ` ${suffix}`;
         
     | 
| 
       84 
103 
     | 
    
         
             
                    };
         
     | 
| 
       85 
     | 
    
         
            -
                     
     | 
| 
       86 
     | 
    
         
            -
                    const output = path.join(this.clientRoot, this.updatedVersion);
         
     | 
| 
      
 104 
     | 
    
         
            +
                    const http = require('http-call').HTTP;
         
     | 
| 
       87 
105 
     | 
    
         
             
                    const gzUrl = manifest.gz || this.config.s3Url(this.config.s3Key('versioned', {
         
     | 
| 
       88 
106 
     | 
    
         
             
                        version,
         
     | 
| 
       89 
107 
     | 
    
         
             
                        channel,
         
     | 
| 
         @@ -117,11 +135,26 @@ class UpdateCommand extends command_1.default { 
     | 
|
| 
       117 
135 
     | 
    
         
             
                    }
         
     | 
| 
       118 
136 
     | 
    
         
             
                    stream.resume();
         
     | 
| 
       119 
137 
     | 
    
         
             
                    await extraction;
         
     | 
| 
      
 138 
     | 
    
         
            +
                }
         
     | 
| 
      
 139 
     | 
    
         
            +
                async update(manifest, channel = 'stable') {
         
     | 
| 
      
 140 
     | 
    
         
            +
                    const { channel: manifestChannel } = manifest;
         
     | 
| 
      
 141 
     | 
    
         
            +
                    if (manifestChannel)
         
     | 
| 
      
 142 
     | 
    
         
            +
                        channel = manifestChannel;
         
     | 
| 
      
 143 
     | 
    
         
            +
                    cli_ux_1.default.action.start(`${this.config.name}: Updating CLI from ${color_1.default.green(this.currentVersion)} to ${color_1.default.green(this.updatedVersion)}${channel === 'stable' ? '' : ' (' + color_1.default.yellow(channel) + ')'}`);
         
     | 
| 
      
 144 
     | 
    
         
            +
                    await this.ensureClientDir();
         
     | 
| 
      
 145 
     | 
    
         
            +
                    const output = path.join(this.clientRoot, this.updatedVersion);
         
     | 
| 
      
 146 
     | 
    
         
            +
                    if (!await fs.pathExists(output)) {
         
     | 
| 
      
 147 
     | 
    
         
            +
                        await this.downloadAndExtract(output, manifest, channel);
         
     | 
| 
      
 148 
     | 
    
         
            +
                    }
         
     | 
| 
       120 
149 
     | 
    
         
             
                    await this.setChannel();
         
     | 
| 
       121 
150 
     | 
    
         
             
                    await this.createBin(this.updatedVersion);
         
     | 
| 
       122 
151 
     | 
    
         
             
                    await this.touch();
         
     | 
| 
       123 
152 
     | 
    
         
             
                    await this.reexec();
         
     | 
| 
       124 
153 
     | 
    
         
             
                }
         
     | 
| 
      
 154 
     | 
    
         
            +
                async updateToExistingVersion(version) {
         
     | 
| 
      
 155 
     | 
    
         
            +
                    await this.createBin(version);
         
     | 
| 
      
 156 
     | 
    
         
            +
                    await this.touch();
         
     | 
| 
      
 157 
     | 
    
         
            +
                }
         
     | 
| 
       125 
158 
     | 
    
         
             
                async skipUpdate() {
         
     | 
| 
       126 
159 
     | 
    
         
             
                    if (!this.config.binPath) {
         
     | 
| 
       127 
160 
     | 
    
         
             
                        const instructions = this.config.scopedEnvVar('UPDATE_INSTRUCTIONS');
         
     | 
| 
         @@ -146,7 +179,7 @@ class UpdateCommand extends command_1.default { 
     | 
|
| 
       146 
179 
     | 
    
         
             
                }
         
     | 
| 
       147 
180 
     | 
    
         
             
                async determineCurrentVersion() {
         
     | 
| 
       148 
181 
     | 
    
         
             
                    try {
         
     | 
| 
       149 
     | 
    
         
            -
                        const currentVersion = await fs. 
     | 
| 
      
 182 
     | 
    
         
            +
                        const currentVersion = await fs.readFile(this.clientBin, 'utf8');
         
     | 
| 
       150 
183 
     | 
    
         
             
                        const matches = currentVersion.match(/\.\.[/|\\](.+)[/|\\]bin/);
         
     | 
| 
       151 
184 
     | 
    
         
             
                        return matches ? matches[1] : this.config.version;
         
     | 
| 
       152 
185 
     | 
    
         
             
                    }
         
     | 
| 
         @@ -210,7 +243,7 @@ class UpdateCommand extends command_1.default { 
     | 
|
| 
       210 
243 
     | 
    
         
             
                            if (['bin', 'current', this.config.version].includes(path.basename(f.path)))
         
     | 
| 
       211 
244 
     | 
    
         
             
                                return;
         
     | 
| 
       212 
245 
     | 
    
         
             
                            const mtime = f.stat.mtime;
         
     | 
| 
       213 
     | 
    
         
            -
                            mtime.setHours(mtime.getHours() + ( 
     | 
| 
      
 246 
     | 
    
         
            +
                            mtime.setHours(mtime.getHours() + (42 * 24));
         
     | 
| 
       214 
247 
     | 
    
         
             
                            if (mtime < new Date()) {
         
     | 
| 
       215 
248 
     | 
    
         
             
                                await fs.remove(f.path);
         
     | 
| 
       216 
249 
     | 
    
         
             
                            }
         
     | 
| 
         @@ -247,7 +280,8 @@ class UpdateCommand extends command_1.default { 
     | 
|
| 
       247 
280 
     | 
    
         
             
                            .on('error', reject)
         
     | 
| 
       248 
281 
     | 
    
         
             
                            .on('close', (status) => {
         
     | 
| 
       249 
282 
     | 
    
         
             
                            try {
         
     | 
| 
       250 
     | 
    
         
            -
                                 
     | 
| 
      
 283 
     | 
    
         
            +
                                if (status > 0)
         
     | 
| 
      
 284 
     | 
    
         
            +
                                    this.exit(status);
         
     | 
| 
       251 
285 
     | 
    
         
             
                            }
         
     | 
| 
       252 
286 
     | 
    
         
             
                            catch (error) {
         
     | 
| 
       253 
287 
     | 
    
         
             
                                reject(error);
         
     | 
| 
         @@ -318,4 +352,5 @@ UpdateCommand.description = 'update the <%= config.bin %> CLI'; 
     | 
|
| 
       318 
352 
     | 
    
         
             
            UpdateCommand.args = [{ name: 'channel', optional: true }];
         
     | 
| 
       319 
353 
     | 
    
         
             
            UpdateCommand.flags = {
         
     | 
| 
       320 
354 
     | 
    
         
             
                autoupdate: command_1.flags.boolean({ hidden: true }),
         
     | 
| 
      
 355 
     | 
    
         
            +
                'from-local': command_1.flags.boolean({ description: 'interactively choose an already installed version' }),
         
     | 
| 
       321 
356 
     | 
    
         
             
            };
         
     | 
    
        package/oclif.manifest.json
    CHANGED
    
    | 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":"1. 
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":"1.5.0","commands":{"update":{"id":"update","description":"update the <%= config.bin %> CLI","pluginName":"@oclif/plugin-update","pluginType":"core","aliases":[],"flags":{"autoupdate":{"name":"autoupdate","type":"boolean","hidden":true,"allowNo":false},"from-local":{"name":"from-local","type":"boolean","description":"interactively choose an already installed version","allowNo":false}},"args":[{"name":"channel"}]}}}
         
     | 
    
        package/package.json
    CHANGED
    
    | 
         @@ -1,6 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            {
         
     | 
| 
       2 
2 
     | 
    
         
             
              "name": "@oclif/plugin-update",
         
     | 
| 
       3 
     | 
    
         
            -
              "version": "1. 
     | 
| 
      
 3 
     | 
    
         
            +
              "version": "1.5.0",
         
     | 
| 
       4 
4 
     | 
    
         
             
              "author": "Jeff Dickey @jdxcode",
         
     | 
| 
       5 
5 
     | 
    
         
             
              "bugs": "https://github.com/oclif/plugin-update/issues",
         
     | 
| 
       6 
6 
     | 
    
         
             
              "dependencies": {
         
     | 
| 
         @@ -15,31 +15,31 @@ 
     | 
|
| 
       15 
15 
     | 
    
         
             
                "filesize": "^6.1.0",
         
     | 
| 
       16 
16 
     | 
    
         
             
                "fs-extra": "^9.0.1",
         
     | 
| 
       17 
17 
     | 
    
         
             
                "http-call": "^5.3.0",
         
     | 
| 
       18 
     | 
    
         
            -
                "lodash": "^4.17. 
     | 
| 
      
 18 
     | 
    
         
            +
                "lodash": "^4.17.21",
         
     | 
| 
       19 
19 
     | 
    
         
             
                "log-chopper": "^1.0.2",
         
     | 
| 
       20 
     | 
    
         
            -
                "semver": "^7.3. 
     | 
| 
      
 20 
     | 
    
         
            +
                "semver": "^7.3.5",
         
     | 
| 
       21 
21 
     | 
    
         
             
                "tar-fs": "^2.1.1"
         
     | 
| 
       22 
22 
     | 
    
         
             
              },
         
     | 
| 
       23 
23 
     | 
    
         
             
              "devDependencies": {
         
     | 
| 
       24 
24 
     | 
    
         
             
                "@oclif/dev-cli": "^1.26.0",
         
     | 
| 
       25 
25 
     | 
    
         
             
                "@oclif/plugin-help": "^3",
         
     | 
| 
       26 
26 
     | 
    
         
             
                "@oclif/test": "^1.2.8",
         
     | 
| 
       27 
     | 
    
         
            -
                "@types/chai": "^4.2. 
     | 
| 
      
 27 
     | 
    
         
            +
                "@types/chai": "^4.2.15",
         
     | 
| 
       28 
28 
     | 
    
         
             
                "@types/cross-spawn": "^6.0.2",
         
     | 
| 
       29 
29 
     | 
    
         
             
                "@types/execa": "^0.9.0",
         
     | 
| 
       30 
30 
     | 
    
         
             
                "@types/fs-extra": "^8.0.1",
         
     | 
| 
       31 
31 
     | 
    
         
             
                "@types/glob": "^7.1.3",
         
     | 
| 
       32 
32 
     | 
    
         
             
                "@types/lodash": "^4.14.168",
         
     | 
| 
       33 
     | 
    
         
            -
                "@types/mocha": "^8.2. 
     | 
| 
       34 
     | 
    
         
            -
                "@types/node": "^14.14. 
     | 
| 
      
 33 
     | 
    
         
            +
                "@types/mocha": "^8.2.2",
         
     | 
| 
      
 34 
     | 
    
         
            +
                "@types/node": "^14.14.31",
         
     | 
| 
       35 
35 
     | 
    
         
             
                "@types/supports-color": "^7.2.0",
         
     | 
| 
       36 
36 
     | 
    
         
             
                "@types/write-json-file": "^3.2.1",
         
     | 
| 
       37 
     | 
    
         
            -
                "chai": "^4. 
     | 
| 
       38 
     | 
    
         
            -
                "eslint": "^7. 
     | 
| 
      
 37 
     | 
    
         
            +
                "chai": "^4.3.4",
         
     | 
| 
      
 38 
     | 
    
         
            +
                "eslint": "^7.21.0",
         
     | 
| 
       39 
39 
     | 
    
         
             
                "eslint-config-oclif": "^3.1.0",
         
     | 
| 
       40 
40 
     | 
    
         
             
                "eslint-config-oclif-typescript": "^0.2.0",
         
     | 
| 
       41 
41 
     | 
    
         
             
                "globby": "^11.0.2",
         
     | 
| 
       42 
     | 
    
         
            -
                "mocha": "^ 
     | 
| 
      
 42 
     | 
    
         
            +
                "mocha": "^8.3.2",
         
     | 
| 
       43 
43 
     | 
    
         
             
                "qqjs": "^0.3.11",
         
     | 
| 
       44 
44 
     | 
    
         
             
                "ts-node": "^9.1.1",
         
     | 
| 
       45 
45 
     | 
    
         
             
                "tslib": "^2.1.0",
         
     |