mirror of
https://github.com/verdaccio/verdaccio.git
synced 2025-02-21 07:29:37 +01:00
Merge pull request #1360 from verdaccio/feat-error-code
feat: storage plugins can throw http status codes
This commit is contained in:
commit
4f87750c18
@ -63,6 +63,7 @@
|
|||||||
"@types/minimatch": "3.0.3",
|
"@types/minimatch": "3.0.3",
|
||||||
"@types/node": "12.6.2",
|
"@types/node": "12.6.2",
|
||||||
"@types/request": "2.48.2",
|
"@types/request": "2.48.2",
|
||||||
|
"@types/semver": "6.0.1",
|
||||||
"@typescript-eslint/eslint-plugin": "1.12.0",
|
"@typescript-eslint/eslint-plugin": "1.12.0",
|
||||||
"@verdaccio/babel-preset": "0.2.1",
|
"@verdaccio/babel-preset": "0.2.1",
|
||||||
"@verdaccio/eslint-config": "0.0.1",
|
"@verdaccio/eslint-config": "0.0.1",
|
||||||
|
@ -3,7 +3,7 @@ import UrlNode from 'url';
|
|||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import { ErrorCode, isObject, getLatestVersion, tagVersion, validateName } from './utils';
|
import { ErrorCode, isObject, getLatestVersion, tagVersion, validateName } from './utils';
|
||||||
import { generatePackageTemplate, normalizePackage, generateRevision, getLatestReadme, cleanUpReadme, normalizeContributors } from './storage-utils';
|
import { generatePackageTemplate, normalizePackage, generateRevision, getLatestReadme, cleanUpReadme, normalizeContributors } from './storage-utils';
|
||||||
import { API_ERROR, DIST_TAGS, STORAGE, USERS } from './constants';
|
import { API_ERROR, DIST_TAGS, HTTP_STATUS, STORAGE, USERS } from './constants';
|
||||||
import { createTarballHash } from './crypto-utils';
|
import { createTarballHash } from './crypto-utils';
|
||||||
import { prepareSearchPackage } from './storage-utils';
|
import { prepareSearchPackage } from './storage-utils';
|
||||||
import loadPlugin from '../lib/plugin-loader';
|
import loadPlugin from '../lib/plugin-loader';
|
||||||
@ -34,10 +34,10 @@ class LocalStorage implements IStorage {
|
|||||||
return callback(ErrorCode.getNotFound('this package cannot be added'));
|
return callback(ErrorCode.getNotFound('this package cannot be added'));
|
||||||
}
|
}
|
||||||
|
|
||||||
storage.createPackage(name, generatePackageTemplate(name), (err: VerdaccioError): void => {
|
storage.createPackage(name, generatePackageTemplate(name), err => {
|
||||||
// FIXME: it will be fixed here https://github.com/verdaccio/verdaccio/pull/1360
|
// FIXME: it will be fixed here https://github.com/verdaccio/verdaccio/pull/1360
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
if (_.isNull(err) === false && err.code === STORAGE.FILE_EXIST_ERROR) {
|
if (_.isNull(err) === false && (err.code === STORAGE.FILE_EXIST_ERROR || err.code === HTTP_STATUS.CONFLICT)) {
|
||||||
return callback(ErrorCode.getConflict());
|
return callback(ErrorCode.getConflict());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -65,7 +65,7 @@ class LocalStorage implements IStorage {
|
|||||||
|
|
||||||
storage.readPackage(name, (err, data: Package): void => {
|
storage.readPackage(name, (err, data: Package): void => {
|
||||||
if (_.isNil(err) === false) {
|
if (_.isNil(err) === false) {
|
||||||
if (err.code === STORAGE.NO_SUCH_FILE_ERROR) {
|
if (err.code === STORAGE.NO_SUCH_FILE_ERROR || err.code === HTTP_STATUS.NOT_FOUND) {
|
||||||
return callback(ErrorCode.getNotFound());
|
return callback(ErrorCode.getNotFound());
|
||||||
} else {
|
} else {
|
||||||
return callback(err);
|
return callback(err);
|
||||||
@ -419,13 +419,13 @@ class LocalStorage implements IStorage {
|
|||||||
|
|
||||||
const writeStream: IUploadTarball = storage.writeTarball(filename);
|
const writeStream: IUploadTarball = storage.writeTarball(filename);
|
||||||
|
|
||||||
writeStream.on('error', (err: VerdaccioError): void => {
|
writeStream.on('error', err => {
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
if (err.code === STORAGE.FILE_EXIST_ERROR) {
|
if (err.code === STORAGE.FILE_EXIST_ERROR || err.code === HTTP_STATUS.CONFLICT) {
|
||||||
uploadStream.emit('error', ErrorCode.getConflict());
|
uploadStream.emit('error', ErrorCode.getConflict());
|
||||||
uploadStream.abort();
|
uploadStream.abort();
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
} else if (err.code === STORAGE.NO_SUCH_FILE_ERROR) {
|
} else if (err.code === STORAGE.NO_SUCH_FILE_ERROR || err.code === HTTP_STATUS.NOT_FOUND) {
|
||||||
// check if package exists to throw an appropriate message
|
// check if package exists to throw an appropriate message
|
||||||
this.getPackageMetadata(name, function(_err: VerdaccioError, _res: Package): void {
|
this.getPackageMetadata(name, function(_err: VerdaccioError, _res: Package): void {
|
||||||
if (_err) {
|
if (_err) {
|
||||||
@ -531,9 +531,9 @@ class LocalStorage implements IStorage {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
readTarballStream.on('error', function(err: VerdaccioError): void {
|
readTarballStream.on('error', function(err) {
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
if (err && err.code === STORAGE.NO_SUCH_FILE_ERROR) {
|
if (err.code === STORAGE.NO_SUCH_FILE_ERROR || err.code === HTTP_STATUS.NOT_FOUND) {
|
||||||
stream.emit('error', e404('no such file available'));
|
stream.emit('error', e404('no such file available'));
|
||||||
} else {
|
} else {
|
||||||
stream.emit('error', err);
|
stream.emit('error', err);
|
||||||
@ -624,7 +624,7 @@ class LocalStorage implements IStorage {
|
|||||||
private _readPackage(name: string, storage: any, callback: Callback): void {
|
private _readPackage(name: string, storage: any, callback: Callback): void {
|
||||||
storage.readPackage(name, (err, result): void => {
|
storage.readPackage(name, (err, result): void => {
|
||||||
if (err) {
|
if (err) {
|
||||||
if (err.code === STORAGE.NO_SUCH_FILE_ERROR) {
|
if (err.code === STORAGE.NO_SUCH_FILE_ERROR || err.code === HTTP_STATUS.NOT_FOUND) {
|
||||||
return callback(ErrorCode.getNotFound());
|
return callback(ErrorCode.getNotFound());
|
||||||
} else {
|
} else {
|
||||||
return callback(this._internalError(err, STORAGE.PACKAGE_FILE_NAME, 'error reading'));
|
return callback(this._internalError(err, STORAGE.PACKAGE_FILE_NAME, 'error reading'));
|
||||||
@ -666,7 +666,7 @@ class LocalStorage implements IStorage {
|
|||||||
storage.readPackage(pkgName, (err, data): void => {
|
storage.readPackage(pkgName, (err, data): void => {
|
||||||
// TODO: race condition
|
// TODO: race condition
|
||||||
if (_.isNil(err) === false) {
|
if (_.isNil(err) === false) {
|
||||||
if (err.code === STORAGE.NO_SUCH_FILE_ERROR) {
|
if (err.code === STORAGE.NO_SUCH_FILE_ERROR || err.code === HTTP_STATUS.NOT_FOUND) {
|
||||||
data = generatePackageTemplate(pkgName);
|
data = generatePackageTemplate(pkgName);
|
||||||
} else {
|
} else {
|
||||||
return callback(this._internalError(err, STORAGE.PACKAGE_FILE_NAME, 'error reading'));
|
return callback(this._internalError(err, STORAGE.PACKAGE_FILE_NAME, 'error reading'));
|
||||||
|
@ -263,16 +263,20 @@ export function parseAddress(urlAddress: any): any {
|
|||||||
* @return {Array} sorted Array
|
* @return {Array} sorted Array
|
||||||
*/
|
*/
|
||||||
export function semverSort(listVersions: string[]): string[] {
|
export function semverSort(listVersions: string[]): string[] {
|
||||||
return listVersions
|
return (
|
||||||
.filter(function(x): boolean {
|
listVersions
|
||||||
if (!semver.parse(x, true)) {
|
.filter(function(x): boolean {
|
||||||
Logger.logger.warn({ ver: x }, 'ignoring bad version @{ver}');
|
if (!semver.parse(x, true)) {
|
||||||
return false;
|
Logger.logger.warn({ ver: x }, 'ignoring bad version @{ver}');
|
||||||
}
|
return false;
|
||||||
return true;
|
}
|
||||||
})
|
return true;
|
||||||
.sort(semver.compareLoose)
|
})
|
||||||
.map(String);
|
// FIXME: it seems the @types/semver do not handle a legitimate method named 'compareLoose'
|
||||||
|
// @ts-ignore
|
||||||
|
.sort(semver.compareLoose)
|
||||||
|
.map(String)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
BIN
yarn.lock
BIN
yarn.lock
Binary file not shown.
Loading…
Reference in New Issue
Block a user