diff --git a/package.json b/package.json index 9135d27a1..05441c5b5 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "JSONStream": "1.3.5", "async": "3.2.0", "body-parser": "1.19.0", - "commander": "7.2.0", + "clipanion": "3.0.0-rc.11", "compression": "1.7.4", "cookies": "0.8.0", "cors": "2.8.5", @@ -86,16 +86,16 @@ "@octokit/rest": "16.43.2", "@types/async": "3.2.4", "@types/bunyan": "1.8.6", - "@types/express": "4.17.1", - "@types/http-errors": "1.6.3", + "@types/express": "4.17.6", + "@types/http-errors": "1.8.0", "@types/jest": "26.0.14", - "@types/lodash": "4.14.157", + "@types/lodash": "4.14.167", "@types/mime": "2.0.1", "@types/minimatch": "3.0.3", - "@types/node": "12.12.21", + "@types/node": "14.14.37", "@types/pino": "6.3.6", - "@types/request": "2.48.3", - "@types/semver": "6.2.0", + "@types/request": "2.48.5", + "@types/semver": "7.3.4", "@typescript-eslint/eslint-plugin": "4.13.0", "@typescript-eslint/parser": "4.13.0", "@verdaccio/eslint-config": "^8.5.0", @@ -136,7 +136,7 @@ "selfsigned": "1.10.8", "standard-version": "9.1.1", "supertest": "6.1.1", - "typescript": "3.9.9", + "typescript": "4.1.3", "verdaccio-auth-memory": "10.0.0", "verdaccio-memory": "10.0.0" }, @@ -179,7 +179,7 @@ "docker:run": "docker run -it --rm -p 4873:4873 verdaccio/verdaccio:local" }, "engines": { - "node": ">=8", + "node": ">=12", "npm": ">=5" }, "preferGlobal": true, diff --git a/src/api/endpoint/api/package.ts b/src/api/endpoint/api/package.ts index 1a23418dc..894aad5d5 100644 --- a/src/api/endpoint/api/package.ts +++ b/src/api/endpoint/api/package.ts @@ -26,7 +26,7 @@ const downloadStream = ( }); stream.on('error', function (err): void { - return res.report_error(err); + return res.locals.report_error(err); }); res.header(HEADERS.CONTENT_TYPE, HEADERS.OCTET_STREAM); diff --git a/src/api/endpoint/api/publish.ts b/src/api/endpoint/api/publish.ts index 2440ed3d3..b41bff5c5 100644 --- a/src/api/endpoint/api/publish.ts +++ b/src/api/endpoint/api/publish.ts @@ -322,7 +322,7 @@ export function uploadPackageTarball(storage: IStorageHandler) { }); stream.on('error', function (err) { - return res.report_error(err); + return res.locals.report_error(err); }); stream.on('success', function () { diff --git a/src/api/index.ts b/src/api/index.ts index 7ef4b3f7b..3b930f36b 100644 --- a/src/api/index.ts +++ b/src/api/index.ts @@ -83,12 +83,12 @@ const defineAPI = function (config: IConfig, storage: IStorageHandler): any { if (err.code === 'ECONNABORT' && res.statusCode === HTTP_STATUS.NOT_MODIFIED) { return next(); } - if (_.isFunction(res.report_error) === false) { + if (_.isFunction(res.locals.report_error) === false) { // in case of very early error this middleware may not be loaded before error is generated // fixing that errorReportingMiddleware(req, res, _.noop); } - res.report_error(err); + res.locals.report_error(err); } else { // Fall to Middleware.final return next(err); diff --git a/src/api/middleware.ts b/src/api/middleware.ts index c8d804ed1..fc43dce48 100644 --- a/src/api/middleware.ts +++ b/src/api/middleware.ts @@ -192,7 +192,7 @@ export function final(body: FinalBody, req: $RequestExtend, res: $ResponseExtend if (typeof body === 'object' && _.isNil(body) === false) { if (typeof (body as MiddlewareError).error === 'string') { - res._verdaccio_error = (body as MiddlewareError).error; + res.locals._verdaccio_error = (body as MiddlewareError).error; } body = JSON.stringify(body, undefined, ' ') + '\n'; } @@ -210,6 +210,7 @@ export function final(body: FinalBody, req: $RequestExtend, res: $ResponseExtend // and should just close socket if (err.message.match(/set headers after they are sent/)) { if (_.isNil(res.socket) === false) { + // @ts-ignore res.socket.destroy(); } return; @@ -280,7 +281,7 @@ export function log(config: Config) { const remoteAddress = req.connection.remoteAddress; const remoteIP = forwardedFor ? `${forwardedFor} via ${remoteAddress}` : remoteAddress; let message; - if (res._verdaccio_error) { + if (res.locals._verdaccio_error) { message = LOG_VERDACCIO_ERROR; } else { message = LOG_VERDACCIO_BYTES; @@ -298,7 +299,7 @@ export function log(config: Config) { user: (req.remote_user && req.remote_user.name) || null, remoteIP, status: res.statusCode, - error: res._verdaccio_error, + error: res.locals._verdaccio_error, bytes: { in: bytesin, out: bytesout, @@ -330,8 +331,8 @@ export function log(config: Config) { // Middleware export function errorReportingMiddleware(req: $RequestExtend, res: $ResponseExtend, next: $NextFunctionVer): void { - res.report_error = - res.report_error || + res.locals.report_error = + res.locals.report_error || function (err: VerdaccioError): void { if (err.status && err.status >= HTTP_STATUS.BAD_REQUEST && err.status < 600) { if (!res.headersSent) { diff --git a/src/lib/cli.ts b/src/lib/cli.ts index a7b0579e8..ec1155f16 100644 --- a/src/lib/cli.ts +++ b/src/lib/cli.ts @@ -3,96 +3,15 @@ /* eslint no-sync:0 */ /* eslint no-empty:0 */ -import path from 'path'; -import semver from 'semver'; -import { bgYellow, bgRed } from 'kleur'; -import { startVerdaccio, listenDefaultCallback } from './bootstrap'; -import findConfigFile from './config-path'; -import { parseConfigFile } from './utils'; - -require('pkginfo')(module); - if (process.getuid && process.getuid() === 0) { - global.console.warn(bgYellow().red("*** WARNING: Verdaccio doesn't need superuser privileges. Don't run it under root! ***")); + process.emitWarning(`Verdaccio doesn't need superuser privileges. don't run it under root`); } -const MIN_NODE_VERSION = '12.0.0'; - -if (semver.satisfies(process.version, `>=${MIN_NODE_VERSION}`) === false) { - global.console.error(bgRed(`Verdaccio requires at least Node.js ${MIN_NODE_VERSION} or higher, please upgrade your Node.js distribution`)); - process.exit(1); -} - -process.title = 'verdaccio'; - // eslint-disable-next-line import/order const logger = require('./logger'); logger.setup(null, { logStart: false }); // default setup -const envinfo = require('envinfo'); -const commander = require('commander'); -const pkgVersion = module.exports.version; -const pkgName = module.exports.name; - -commander - .option('-i, --info', 'prints debugging information about the local environment') - .option('-l, --listen <[host:]port>', 'host:port number to listen on (default: localhost:4873)') - .option('-c, --config ', 'use this configuration file (default: ./config.yaml)') - .version(pkgVersion) - .parse(process.argv); - -const options = commander.opts(); - -function init() { - let verdaccioConfiguration; - let configPathLocation; - const cliListener = options.listen; - - try { - configPathLocation = findConfigFile(options.config); - verdaccioConfiguration = parseConfigFile(configPathLocation); - process.title = (verdaccioConfiguration.web && verdaccioConfiguration.web.title) || 'verdaccio'; - - if (!verdaccioConfiguration.self_path) { - verdaccioConfiguration.self_path = path.resolve(configPathLocation); - } - if (!verdaccioConfiguration.https) { - verdaccioConfiguration.https = { enable: false }; - } - - logger.logger.warn({ file: configPathLocation }, 'config file - @{file}'); - - startVerdaccio(verdaccioConfiguration, cliListener, configPathLocation, pkgVersion, pkgName, listenDefaultCallback); - } catch (err) { - logger.logger.fatal({ file: configPathLocation, err: err }, 'cannot open config file @{file}: @{!err.message}'); - process.exit(1); - } -} - -if (options.info) { - // eslint-disable-next-line no-console - console.log('\nEnvironment Info:'); - (async () => { - const data = await envinfo.run({ - System: ['OS', 'CPU'], - Binaries: ['Node', 'Yarn', 'npm'], - Virtualization: ['Docker'], - Browsers: ['Chrome', 'Edge', 'Firefox', 'Safari'], - npmGlobalPackages: ['verdaccio'], - }); - // eslint-disable-next-line no-console - console.log(data); - process.exit(0); - })(); -} else if (commander.args.length == 1 && !options.config) { - // handling "verdaccio [config]" case if "-c" is missing in command line - options.config = commander.args.pop(); - init(); -} else if (commander.args.length !== 0) { - commander.help(); -} else { - init(); -} +require('./cli/cli'); process.on('uncaughtException', function (err) { logger.logger.fatal( diff --git a/src/lib/cli/cli.ts b/src/lib/cli/cli.ts new file mode 100644 index 000000000..448c3464e --- /dev/null +++ b/src/lib/cli/cli.ts @@ -0,0 +1,32 @@ +import { Cli } from 'clipanion'; +import { InfoCommand } from './commands/info'; +import { InitCommand } from './commands/init'; +import { isVersionValid, MIN_NODE_VERSION } from './utils'; +import { VersionCommand } from './commands/version'; + +require('pkginfo')(module); +const pkgVersion = module.exports.version; + +if (process.getuid && process.getuid() === 0) { + process.emitWarning(`Verdaccio doesn't need superuser privileges. don't run it under root`); +} + +if (!isVersionValid(process.version)) { + throw new Error( + `Verdaccio requires at least Node.js v${MIN_NODE_VERSION} or higher and you have installed ${process.version}, + please upgrade your Node.js distribution` + ); +} + +const [node, app, ...args] = process.argv; + +const cli = new Cli({ + binaryLabel: `verdaccio`, + binaryName: `${node} ${app}`, + binaryVersion: pkgVersion, +}); + +cli.register(InfoCommand); +cli.register(InitCommand); +cli.register(VersionCommand); +cli.runExit(args, Cli.defaultContext); diff --git a/src/lib/cli/commands/info.ts b/src/lib/cli/commands/info.ts new file mode 100644 index 000000000..89d092742 --- /dev/null +++ b/src/lib/cli/commands/info.ts @@ -0,0 +1,20 @@ +import envinfo from 'envinfo'; +import { Command } from 'clipanion'; + +export class InfoCommand extends Command { + static paths = [[`--info`], [`-i`]]; + + async execute() { + this.context.stdout.write('\nEnvironment Info:'); + const data = await envinfo.run({ + System: ['OS', 'CPU'], + Binaries: ['node', 'yarn', 'npm', 'pnpm'], + Virtualization: ['Docker'], + Browsers: ['Chrome', 'Edge', 'Firefox', 'Safari'], + npmGlobalPackages: ['verdaccio'], + }); + + this.context.stdout.write(data); + process.exit(0); + } +} diff --git a/src/lib/cli/commands/init.ts b/src/lib/cli/commands/init.ts new file mode 100644 index 000000000..79c6fa936 --- /dev/null +++ b/src/lib/cli/commands/init.ts @@ -0,0 +1,78 @@ +import path from 'path'; +import { Command, Option } from 'clipanion'; + +import { startVerdaccio, listenDefaultCallback } from '../../bootstrap'; +import findConfigFile from '../../config-path'; +import { parseConfigFile } from '../../utils'; + +require('pkginfo')(module); +const pkgVersion = module.exports.version; +const pkgName = module.exports.name; + +export const DEFAULT_PROCESS_NAME: string = 'verdaccio'; +const logger = require('../../logger'); + +export class InitCommand extends Command { + static paths = [Command.Default]; + + listen = Option.String('-l,--listen', { + description: 'host:port number to listen on (default: localhost:4873)', + }); + + // eslint-disable-next-line + static usage = Command.Usage({ + description: `launch the server`, + details: ` + This start the registry in the default port. + + When used without arguments, it: + + - bootstrap the server at the port \`4873\` + + The optional arguments are: + + - \`--listen\` to switch the default server port, + - \`--config\` to define a different configuration path location, + + `, + examples: [ + [`Runs the server with the default configuration`, `verdaccio`], + [`Runs the server in the port 5000`, `verdaccio --listen 5000`], + [ + `Runs the server by using a different absolute location of the configuration file`, + `verdaccio --config /home/user/verdaccio/config.yaml`, + ], + ], + }); + + config = Option.String('-c,--config', { + description: 'use this configuration file (default: ./config.yaml)', + }); + + async execute() { + try { + const configPathLocation = findConfigFile(this.config as string); + const verdaccioConfiguration = parseConfigFile(configPathLocation); + if (!verdaccioConfiguration.self_path) { + verdaccioConfiguration.self_path = path.resolve(configPathLocation); + } + if (!verdaccioConfiguration.https) { + verdaccioConfiguration.https = { enable: false }; + } + + logger.logger.warn({ file: configPathLocation }, 'config file - @{file}'); + process.title = (verdaccioConfiguration.web && verdaccioConfiguration.web.title) || 'verdaccio'; + + startVerdaccio( + verdaccioConfiguration, + this.listen as string, + configPathLocation, + pkgVersion, + pkgName, + listenDefaultCallback + ); + } catch (err) { + process.exit(1); + } + } +} diff --git a/src/lib/cli/commands/version.ts b/src/lib/cli/commands/version.ts new file mode 100644 index 000000000..e77a0ac1d --- /dev/null +++ b/src/lib/cli/commands/version.ts @@ -0,0 +1,12 @@ +import { Command } from 'clipanion'; +require('pkginfo')(module); +const pkgVersion = module.exports.version; + +export class VersionCommand extends Command { + static paths = [[`--version`], [`-v`]]; + + async execute() { + this.context.stdout.write(`v${pkgVersion}`); + process.exit(0); + } +} diff --git a/src/lib/cli/utils.ts b/src/lib/cli/utils.ts index ebe8a383c..cb60425eb 100644 --- a/src/lib/cli/utils.ts +++ b/src/lib/cli/utils.ts @@ -1,9 +1,5 @@ -/** - * @prettier - * @flow - */ - import path from 'path'; +import semver from 'semver'; import { parseAddress } from '../utils'; import { DEFAULT_PORT } from '../constants'; @@ -14,6 +10,13 @@ export const resolveConfigPath = function (storageLocation: string, file: string return path.resolve(path.dirname(storageLocation), file); }; +export const MIN_NODE_VERSION = '12'; + +export function isVersionValid(version) { + return semver.satisfies(version, `>=${MIN_NODE_VERSION}`); +} + + /** * Retrieve all addresses defined in the config file. * Verdaccio is able to listen multiple ports diff --git a/src/lib/config-path.ts b/src/lib/config-path.ts index 68a25da83..2e47f9596 100644 --- a/src/lib/config-path.ts +++ b/src/lib/config-path.ts @@ -55,7 +55,7 @@ function createConfigFile(configLocation: any): SetupDirectory { } function readDefaultConfig(): string { - return fs.readFileSync(require.resolve('../../conf/default.yaml'), CHARACTER_ENCODING.UTF8); + return fs.readFileSync(require.resolve('../../conf/default.yaml'), 'utf-8'); } function createConfigFolder(configLocation): void { diff --git a/src/lib/storage-utils.ts b/src/lib/storage-utils.ts index 0ca82f5c6..da1c4f2d3 100644 --- a/src/lib/storage-utils.ts +++ b/src/lib/storage-utils.ts @@ -81,6 +81,7 @@ export function getLatestReadme(pkg: Package): string { export function cleanUpReadme(version: Version): Version { if (_.isNil(version) === false) { + // @ts-ignore delete version.readme; } @@ -137,7 +138,7 @@ export function cleanUpLinksRef(keepUpLinkData: boolean, result: Package): Packa * @param {*} name * @param {*} localStorage */ -export function checkPackageLocal(name: string, localStorage: IStorage): Promise { +export function checkPackageLocal(name: string, localStorage: IStorage): Promise { return new Promise((resolve, reject): void => { localStorage.getPackageMetadata(name, (err, results): void => { if (!_.isNil(err) && err.status !== HTTP_STATUS.NOT_FOUND) { @@ -151,7 +152,7 @@ export function checkPackageLocal(name: string, localStorage: IStorage): Promise }); } -export function publishPackage(name: string, metadata: any, localStorage: IStorage): Promise { +export function publishPackage(name: string, metadata: any, localStorage: IStorage): Promise { return new Promise((resolve, reject): void => { localStorage.addPackage(name, metadata, (err, latest): void => { if (!_.isNull(err)) { @@ -168,7 +169,7 @@ export function checkPackageRemote( name: string, isAllowPublishOffline: boolean, syncMetadata: Function -): Promise { +): Promise { return new Promise((resolve, reject): void => { syncMetadata(name, null, {}, (err, packageJsonLocal, upLinksErrors): void => { // something weird diff --git a/src/lib/up-storage.ts b/src/lib/up-storage.ts index 4997a5be1..904ccc867 100644 --- a/src/lib/up-storage.ts +++ b/src/lib/up-storage.ts @@ -677,6 +677,7 @@ class ProxyStorage implements IProxy { // if it's non-string (i.e. "false"), don't use it if (_.isString(this.proxy) === false) { + // @ts-ignore delete this.proxy; } else { debug('using proxy %o for %o', this.url.href, this.proxy); diff --git a/src/lib/utils.ts b/src/lib/utils.ts index 05a29da6b..b85451224 100644 --- a/src/lib/utils.ts +++ b/src/lib/utils.ts @@ -15,7 +15,7 @@ import { Request } from 'express'; import { getConflict, getBadData, getBadRequest, getInternalError, getUnauthorized, getForbidden, getServiceUnavailable, getNotFound, getCode } from '@verdaccio/commons-api'; import { generateGravatarUrl, GENERIC_AVATAR } from '../utils/user'; import { StringValue, AuthorAvatar } from '../../types'; -import { APP_ERROR, DEFAULT_PORT, DEFAULT_DOMAIN, DEFAULT_PROTOCOL, CHARACTER_ENCODING, HEADERS, DIST_TAGS, DEFAULT_USER } from './constants'; +import { APP_ERROR, DEFAULT_PORT, DEFAULT_DOMAIN, DEFAULT_PROTOCOL, HEADERS, DIST_TAGS, DEFAULT_USER } from './constants'; import { normalizeContributors } from './storage-utils'; @@ -369,7 +369,7 @@ export const ErrorCode = { export function parseConfigFile(configPath: string): any { try { if (/\.ya?ml$/i.test(configPath)) { - return YAML.load(fs.readFileSync(configPath, CHARACTER_ENCODING.UTF8)); + return YAML.load(fs.readFileSync(configPath, 'utf-8')); } debug('yaml parsed'); return require(configPath); diff --git a/test/e2e-cli/utils/registry.ts b/test/e2e-cli/utils/registry.ts index dc4b1d39c..94b9cd9e5 100644 --- a/test/e2e-cli/utils/registry.ts +++ b/test/e2e-cli/utils/registry.ts @@ -8,8 +8,8 @@ export function spawnRegistry(verdaccioPath: string, args: string[], childOption const childFork = fork(verdaccioPath, args, _childOptions); - childFork.on('message', (msg) => { - if ('verdaccio_started' in msg) { + childFork.on('message', (msg: {verdaccio_started: boolean}) => { + if (msg.verdaccio_started) { resolve(childFork); } }); diff --git a/test/functional/package/gzip.ts b/test/functional/package/gzip.ts index 7da2edc5c..f9c050b6c 100644 --- a/test/functional/package/gzip.ts +++ b/test/functional/package/gzip.ts @@ -14,7 +14,7 @@ export default function (server, express) { express.get(`/${PKG_NAME}`, function (req, res) { const pkg = JSON.parse( readFile('../fixtures/publish.json5') - .toString(CHARACTER_ENCODING.UTF8) + .toString('utf-8') .replace(/__NAME__/g, PKG_NAME) .replace(/__VERSION__/g, PKG_VERSION) ); @@ -87,6 +87,7 @@ export default function (server, express) { expect(unzipedBody.name).toBe(PKG_NAME); expect(Object.keys(unzipedBody.versions)).toHaveLength(VERSION_TOTAL); + // @ts-ignore resolve(); }); }); diff --git a/test/functional/tags/addtag.ts b/test/functional/tags/addtag.ts index 4e7e108af..f154b490d 100644 --- a/test/functional/tags/addtag.ts +++ b/test/functional/tags/addtag.ts @@ -1,5 +1,5 @@ import { readFile } from '../lib/test.utils'; -import { API_ERROR, HTTP_STATUS, CHARACTER_ENCODING } from '../../../src/lib/constants'; +import { API_ERROR, HTTP_STATUS } from '../../../src/lib/constants'; const readTags = () => readFile('../fixtures/publish.json5'); @@ -22,7 +22,7 @@ export default function (server) { PKG_NAME, JSON.parse( readTags() - .toString(CHARACTER_ENCODING.UTF8) + .toString('utf-8') .replace(/__NAME__/g, PKG_NAME) .replace(/__VERSION__/g, PKG_VERSION) ) diff --git a/test/lib/server.ts b/test/lib/server.ts index 233810820..7479f57f7 100644 --- a/test/lib/server.ts +++ b/test/lib/server.ts @@ -177,6 +177,7 @@ export default class Server implements IServerBridge { }) .catch(function (err) { if (err.code === 'ECONNRESET') { + // @ts-ignore resolve(); } else { reject(err); diff --git a/tsconfig.json b/tsconfig.json index 2a10c0a5b..71292d233 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -17,7 +17,8 @@ ] }, "exclude": [ - "node_modules" + "node_modules", + "**/*.spec.ts" ], "include": [ "src/**/*.ts", diff --git a/types/custom.d.ts b/types/custom.d.ts index 733e88c70..9c7e201cc 100644 --- a/types/custom.d.ts +++ b/types/custom.d.ts @@ -6,11 +6,5 @@ declare global { remote_user: RemoteUser; log: Logger; } - - export interface Response { - report_error: any; - _verdaccio_error: any; - socket?: any; - } } } diff --git a/yarn.lock b/yarn.lock index c7735df40..e3e7f5d68 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2687,14 +2687,15 @@ __metadata: languageName: node linkType: hard -"@types/express@npm:4.17.1": - version: 4.17.1 - resolution: "@types/express@npm:4.17.1" +"@types/express@npm:4.17.6": + version: 4.17.6 + resolution: "@types/express@npm:4.17.6" dependencies: "@types/body-parser": "*" "@types/express-serve-static-core": "*" + "@types/qs": "*" "@types/serve-static": "*" - checksum: 9bf150a786d691292766967dbcabbb7ba0ac2f5dd9effc995fce45fa1e1f7c126240d746f49e5f4cd04f16b8274dd64093307473002262e40adcaac7c2218529 + checksum: 45e31c66a048bfb8ddfb28f9c7f448f89eb8667132dc13f0e35397d5e4df05796f920a114bb774ba910bb3795a18d17a3ea8ae6aaf4d0d2e6b6c5622866f21d0 languageName: node linkType: hard @@ -2707,10 +2708,10 @@ __metadata: languageName: node linkType: hard -"@types/http-errors@npm:1.6.3": - version: 1.6.3 - resolution: "@types/http-errors@npm:1.6.3" - checksum: b3fd744dbb4202e502abd7ebb2b4294ab1d4b4d858cddb1fed9e3194d685afaee45fc24d4c262517e0af590c4a30862271583d58c4ea69302652fcd743f678c9 +"@types/http-errors@npm:1.8.0": + version: 1.8.0 + resolution: "@types/http-errors@npm:1.8.0" + checksum: f6a0cf40d026b339f3358771d1a98bce7e637429882255246ccf4056cf0f2df7aaf2997ba3072e13df8688f0cd2f9f99ac4d84bed4665710793de35642b4cdad languageName: node linkType: hard @@ -2773,10 +2774,10 @@ __metadata: languageName: node linkType: hard -"@types/lodash@npm:4.14.157": - version: 4.14.157 - resolution: "@types/lodash@npm:4.14.157" - checksum: ea8d890a4d78f4690f9d8e5cb03f3581e8ea59047696e2c2114087ec471e891b3ce683e5344c9c15ea7bd9730b79e5fd808b3eff80a01741503ea59922c2bb83 +"@types/lodash@npm:4.14.167": + version: 4.14.167 + resolution: "@types/lodash@npm:4.14.167" + checksum: 40778f83a86392625b3d52c15f59171a0f6a35436128b8fb1e37f89162f7950dc98570f27bc99ce1e2e04084e64da41cb45146d091d5181e12c6733bcf16fac6 languageName: node linkType: hard @@ -2801,13 +2802,20 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:*, @types/node@npm:12.12.21, @types/node@npm:>= 8": +"@types/node@npm:*, @types/node@npm:>= 8": version: 12.12.21 resolution: "@types/node@npm:12.12.21" checksum: 0f26ddafc5102a61fa853d6915035acaf65dfea0a4c56bb86f0f316150db486d97ccc535f1ee68d98db446f5cea287834102592e767a3c72139f8ab6ade757e8 languageName: node linkType: hard +"@types/node@npm:14.14.37": + version: 14.14.37 + resolution: "@types/node@npm:14.14.37" + checksum: 5e2d9baf7594ebacaf016716515f30de0765169412787f981481c2fb8b468923149bb9e2e3219ee672399811672ceddc339a7372a61cf15bc656836a5494d991 + languageName: node + linkType: hard + "@types/normalize-package-data@npm:^2.4.0": version: 2.4.0 resolution: "@types/normalize-package-data@npm:2.4.0" @@ -2863,22 +2871,22 @@ __metadata: languageName: node linkType: hard -"@types/request@npm:2.48.3": - version: 2.48.3 - resolution: "@types/request@npm:2.48.3" +"@types/request@npm:2.48.5": + version: 2.48.5 + resolution: "@types/request@npm:2.48.5" dependencies: "@types/caseless": "*" "@types/node": "*" "@types/tough-cookie": "*" form-data: ^2.5.0 - checksum: 0a412834d0ae3022ec6f228cd0430cec008b90653149c82e7c9a35f88dc376913d502f500893be52037789918ab752ec84d5f4840acf422411f7e65ffb629700 + checksum: 74f1a250cab068aec594cede9e57508e0b63d46110dd5d62611f087a4c0e9b524884b1d76f128e5ee86d3d91a40587986d85567b567653cd3e30873686ab195d languageName: node linkType: hard -"@types/semver@npm:6.2.0": - version: 6.2.0 - resolution: "@types/semver@npm:6.2.0" - checksum: 11af0aa05f7e69afe580c269b3ff6f374243873a36d87d689ed67ff9622a01b612e6119d3ce2bce9158d52e22928c81bf765c6b6af8f3c070df3560e87bb031a +"@types/semver@npm:7.3.4": + version: 7.3.4 + resolution: "@types/semver@npm:7.3.4" + checksum: 7e8588aa55ecb344eda6954674b83a3c568d97d478e70e4617bd3ab22902590ac416ccf2cea48b58fb2f0fbd80f9ad1896332c9b3c3189ffd24e4350ff22094a languageName: node linkType: hard @@ -4708,6 +4716,17 @@ __metadata: languageName: node linkType: hard +"clipanion@npm:3.0.0-rc.11": + version: 3.0.0-rc.11 + resolution: "clipanion@npm:3.0.0-rc.11" + dependencies: + typanion: ^3.3.0 + peerDependencies: + typanion: "*" + checksum: 8157d90a9925e99201f27ce67a71a5ca473170229315d215eb0af2a91377abd9fd432bde0fd642eb15a7f078b156b6d2a18ba01d7b78b53e7e7dac052791ce17 + languageName: node + linkType: hard + "cliui@npm:^6.0.0": version: 6.0.0 resolution: "cliui@npm:6.0.0" @@ -4824,13 +4843,6 @@ __metadata: languageName: node linkType: hard -"commander@npm:7.2.0": - version: 7.2.0 - resolution: "commander@npm:7.2.0" - checksum: bdc0eca5e25cd24af8440163d3c9a996785bbac4b49a590365699cdc1ed08cefbac8f268153208ab2bc5dc3cb1d3fb573fd1590c681e36e371342186bd331a4c - languageName: node - linkType: hard - "commander@npm:^2.14.1, commander@npm:^2.9.0, commander@npm:~2.20.0": version: 2.20.0 resolution: "commander@npm:2.20.0" @@ -13788,6 +13800,13 @@ resolve@1.1.7: languageName: node linkType: hard +"typanion@npm:^3.3.0": + version: 3.3.0 + resolution: "typanion@npm:3.3.0" + checksum: e31d9ee6e50bba9d066675a0efcc43df95c581176dcd02855c690bbf1936a160d56c8e3146d9e6870e982a4dc807221e9ede0f0d4603f82a074181ab1860d80d + languageName: node + linkType: hard + "type-check@npm:^0.4.0, type-check@npm:~0.4.0": version: 0.4.0 resolution: "type-check@npm:0.4.0" @@ -13881,23 +13900,23 @@ resolve@1.1.7: languageName: node linkType: hard -typescript@3.9.9: - version: 3.9.9 - resolution: "typescript@npm:3.9.9" +typescript@4.1.3: + version: 4.1.3 + resolution: "typescript@npm:4.1.3" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 22bbe953faa34903587f3bd8fb6c343d754745d4177e49da523a2a3b814fe5eaf60d9b23c2d401d038a08a5ac2d8094b268ba75adee840cc2358fb5a866624ab + checksum: 4f7ab1506ea22c7a1c313ec5b4285e93ce08d709ad6086d02d3096adb399ca339972ee56d1e578213c51dd0fb7b0fad50283c2d3c39642405644458ae29774f8 languageName: node linkType: hard -"typescript@patch:typescript@3.9.9#builtin": - version: 3.9.9 - resolution: "typescript@patch:typescript@npm%3A3.9.9#builtin::version=3.9.9&hash=5bf698" +"typescript@patch:typescript@4.1.3#builtin": + version: 4.1.3 + resolution: "typescript@patch:typescript@npm%3A4.1.3#builtin::version=4.1.3&hash=5bf698" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: a57cc051e94bd7f6344165a3318fa27d094c1a59822e6028aaa7c07628d5765dc0a850f2d92db32b988331a1abe51593bf1d217798b710ee3a1ff4b995888fd2 + checksum: 5637a1074cdaed15dbdc109d7e495f00971742fc169b06e758181ac6b091d086f6a7d60d9977dc4572357038c7d798e0786a043eda37d7776537a3d939416a8d languageName: node linkType: hard @@ -14218,16 +14237,16 @@ typescript@3.9.9: "@octokit/rest": 16.43.2 "@types/async": 3.2.4 "@types/bunyan": 1.8.6 - "@types/express": 4.17.1 - "@types/http-errors": 1.6.3 + "@types/express": 4.17.6 + "@types/http-errors": 1.8.0 "@types/jest": 26.0.14 - "@types/lodash": 4.14.157 + "@types/lodash": 4.14.167 "@types/mime": 2.0.1 "@types/minimatch": 3.0.3 - "@types/node": 12.12.21 + "@types/node": 14.14.37 "@types/pino": 6.3.6 - "@types/request": 2.48.3 - "@types/semver": 6.2.0 + "@types/request": 2.48.5 + "@types/semver": 7.3.4 "@typescript-eslint/eslint-plugin": 4.13.0 "@typescript-eslint/parser": 4.13.0 "@verdaccio/commons-api": 10.0.0 @@ -14245,8 +14264,8 @@ typescript@3.9.9: babel-loader: ^8.2.2 babel-plugin-dynamic-import-node: 2.3.3 body-parser: 1.19.0 + clipanion: 3.0.0-rc.11 codecov: 3.8.1 - commander: 7.2.0 compression: 1.7.4 cookies: 0.8.0 cors: 2.8.5 @@ -14305,7 +14324,7 @@ typescript@3.9.9: semver: 7.3.4 standard-version: 9.1.1 supertest: 6.1.1 - typescript: 3.9.9 + typescript: 4.1.3 validator: 13.5.2 verdaccio-audit: 10.0.0 verdaccio-auth-memory: 10.0.0