@verdaccio/store 6.0.0-6-next.13 → 6.0.0-6-next.17

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/local-storage.ts"],"names":["debug","normalizeSearchPackage","pkg","searchItem","latest","pkgUtils","getLatest","version","versions","result","name","scope","description","keywords","date","time","author","publisher","maintainers","links","npm","homepage","repository","bugs","package","scoped","PROTO_NAME","LocalStorage","constructor","config","logger","child","sub","storagePlugin","init","_loadStorage","warn","addPackage","callback","storage","_getLocalStorage","_","isNil","ErrorCode","getNotFound","createPackage","err","isNull","code","STORAGE","FILE_EXIST_ERROR","HTTP_STATUS","CONFLICT","message","getConflict","removePackage","Promise","resolve","reject","readPackage","data","NO_SUCH_FILE_ERROR","NOT_FOUND","remove","attachments","Object","keys","_attachments","length","attachment","deletePackage","PACKAGE_FILE_NAME","error","getBadData","updateVersions","packageInfo","_readCreatePackage","packageLocalJson","change","readme","versionId","contributors","dist","tarball","urlObject","UrlNode","parse","filename","pathname","replace","_distfiles","hash","url","sha","shasum","upLink","Symbol","for","_updateUplinkToRemoteProtocol","tag","DIST_TAGS","up","_uplinks","prototype","hasOwnProperty","call","need_change","etag","fetched","isEqual","_writePackage","addVersion","metadata","_updatePackage","cb","hasVersion","validatioUtils","isObject","isString","errorMessage","getBadRequest","currentDate","Date","toISOString","created","add","mergeTags","pkgName","tags","API_ERROR","VERSION_NOT_EXIST","changePackage","incomingPkg","revision","localData","incomingVersion","info","file","incomingDeprecated","deprecated","modified","USERS","removeTarball","validateName","then","catch","getInternalError","addTarball","shaOneHash","uploadStream","UploadTarball","_transform","abort","done","args","update","appliedData","apply","process","nextTick","emit","getForbidden","writeStream","writeTarball","on","getPackageMetadata","_err","updater","digest","pipe","getTarball","_createFailureStreamResponse","_streamSuccessReadTarBall","stream","ReadTarball","readTarballStream","readTarball","e404","content","_readPackage","search","searchStream","query","t","text","q","quality","p","popularity","m","maintenance","s","size","getMetadata","searchPackage","searchPackageItem","score","flags","searchScore","end","items","item","write","getPackageStorage","_internalError","_createNewPackage","updateHandler","updatePackage","bind","normalizePackage","json","savePackage","_setDefaultRevision","_rev","DEFAULT_REVISION","_debug","upLinkKey","tarballUrl","uplinkUrl","uplinks","host","protocol","registry","format","getSecret","secretKey","setSecret","checkSecretKey","Storage","_loadStorePlugin","LocalDatabase","plugin_params","plugins","store","plugin","head","saveToken","token","isFunction","getCode","SERVICE_UNAVAILABLE","SUPPORT_ERRORS","PLUGIN_MISSING_INTERFACE","deleteToken","user","tokenKey","readTokens","filter"],"mappings":"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","sourcesContent":["import assert from 'assert';\nimport UrlNode from 'url';\nimport { PassThrough } from 'stream';\nimport _ from 'lodash';\nimport buildDebug from 'debug';\n\nimport { ErrorCode, isObject, getLatestVersion } from '@verdaccio/utils';\nimport { searchUtils, pluginUtils, pkgUtils, validatioUtils } from '@verdaccio/core';\nimport { API_ERROR, DIST_TAGS, HTTP_STATUS, SUPPORT_ERRORS, USERS } from '@verdaccio/commons-api';\nimport { createTarballHash } from '@verdaccio/utils';\nimport { loadPlugin } from '@verdaccio/loaders';\nimport LocalDatabase from '@verdaccio/local-storage';\nimport { UploadTarball, ReadTarball } from '@verdaccio/streams';\nimport {\n Token,\n TokenFilter,\n Package,\n Config,\n IUploadTarball,\n IReadTarball,\n MergeTags,\n Version,\n DistFile,\n Callback,\n Logger,\n IPackageStorage,\n Author,\n CallbackAction,\n StringValue,\n StorageUpdateCallback,\n} from '@verdaccio/types';\nimport { VerdaccioError } from '@verdaccio/commons-api';\n\nimport {\n generatePackageTemplate,\n normalizePackage,\n generateRevision,\n getLatestReadme,\n cleanUpReadme,\n normalizeContributors,\n STORAGE,\n tagVersion,\n} from './storage-utils';\n\nconst debug = buildDebug('verdaccio:storage:local');\n\nexport type IPluginStorage = pluginUtils.IPluginStorage<Config>;\n\nexport function normalizeSearchPackage(\n pkg: Package,\n searchItem: searchUtils.SearchItem\n): searchUtils.SearchPackageBody {\n const latest = pkgUtils.getLatest(pkg);\n const version: Version = pkg.versions[latest];\n const result: searchUtils.SearchPackageBody = {\n name: version.name,\n scope: '',\n description: version.description,\n version: latest,\n keywords: version.keywords,\n date: pkg.time[latest],\n // FIXME: type\n author: version.author as any,\n // FIXME: not possible fill this out from a private package\n publisher: {},\n // FIXME: type\n maintainers: version.maintainers as any,\n links: {\n npm: '',\n homepage: version.homepage,\n repository: version.repository,\n bugs: version.bugs,\n },\n };\n\n if (typeof searchItem.package.scoped === 'string') {\n result.scope = searchItem.package.scoped;\n }\n\n return result;\n}\n\nexport const PROTO_NAME = '__proto__';\n\n/**\n * Implements Storage interface (same for storage.js, local-storage.js, up-storage.js).\n */\nclass LocalStorage {\n public config: Config;\n public storagePlugin: IPluginStorage;\n public logger: Logger;\n\n public constructor(config: Config, logger: Logger) {\n debug('local storage created');\n this.logger = logger.child({ sub: 'fs' });\n this.config = config;\n // @ts-expect-error\n this.storagePlugin = null;\n }\n\n public async init() {\n if (this.storagePlugin === null) {\n this.storagePlugin = this._loadStorage(this.config, this.logger);\n debug('storage plugin init');\n await this.storagePlugin.init();\n debug('storage plugin initialized');\n } else {\n this.logger.warn('storage plugin has been already initialized');\n }\n return;\n }\n\n public addPackage(name: string, pkg: Package, callback: Callback): void {\n debug(`creating a package for`, name);\n const storage: any = this._getLocalStorage(name);\n\n if (_.isNil(storage)) {\n debug(`storage is missing for %o package cannot be added`, name);\n return callback(ErrorCode.getNotFound('this package cannot be added'));\n }\n\n storage.createPackage(name, generatePackageTemplate(name), (err) => {\n if (\n _.isNull(err) === false &&\n (err.code === STORAGE.FILE_EXIST_ERROR || err.code === HTTP_STATUS.CONFLICT)\n ) {\n debug(`error on creating a package for %o with error %o`, name, err.message);\n return callback(ErrorCode.getConflict());\n }\n\n const latest = getLatestVersion(pkg);\n if (_.isNil(latest) === false && pkg.versions[latest]) {\n debug('latest version found %o for %o', latest, name);\n return callback(null, pkg.versions[latest]);\n }\n\n debug('no latest version found for %o', name);\n return callback();\n });\n }\n\n /**\n * Remove package with all it contents.\n */\n public async removePackage(name: string): Promise<void> {\n debug('remove package %s', name);\n const storage: any = this._getLocalStorage(name);\n\n if (_.isNil(storage)) {\n throw ErrorCode.getNotFound();\n }\n\n return new Promise((resolve, reject) => {\n storage.readPackage(name, async (err, data: Package): Promise<void> => {\n if (_.isNil(err) === false) {\n if (err.code === STORAGE.NO_SUCH_FILE_ERROR || err.code === HTTP_STATUS.NOT_FOUND) {\n debug(`error on not found %o with error %o`, name, err.message);\n return reject(ErrorCode.getNotFound());\n }\n return reject(err);\n }\n\n data = normalizePackage(data);\n\n try {\n await this.storagePlugin.remove(name);\n // remove each attachment\n const attachments = Object.keys(data._attachments);\n debug('attachments to remove %s', attachments?.length);\n for (let attachment of attachments) {\n debug('remove attachment %s', attachment);\n await storage.deletePackage(attachment);\n }\n // remove package.json\n debug('remove package.json');\n await storage.deletePackage(STORAGE.PACKAGE_FILE_NAME);\n // remove folder\n debug('remove package folder');\n await storage.removePackage();\n resolve();\n } catch (err: any) {\n this.logger.error({ err }, 'removed package has failed @{err.message}');\n throw ErrorCode.getBadData(err.message);\n }\n });\n });\n }\n\n /**\n * Synchronize remote package info with the local one\n * @param {*} name\n * @param {*} packageInfo\n * @param {*} callback\n */\n public updateVersions(name: string, packageInfo: Package, callback: Callback): void {\n debug(`updating versions for package %o`, name);\n this._readCreatePackage(name, (err, packageLocalJson): void => {\n if (err) {\n return callback(err);\n }\n\n let change = false;\n // updating readme\n packageLocalJson.readme = getLatestReadme(packageInfo);\n if (packageInfo.readme !== packageLocalJson.readme) {\n change = true;\n }\n\n debug('update versions');\n for (const versionId in packageInfo.versions) {\n if (_.isNil(packageLocalJson.versions[versionId])) {\n let version = packageInfo.versions[versionId];\n\n // we don't keep readme for package versions,\n // only one readme per package\n version = cleanUpReadme(version);\n debug('clean up readme for %o', versionId);\n version.contributors = normalizeContributors(version.contributors as Author[]);\n\n change = true;\n packageLocalJson.versions[versionId] = version;\n\n if (version?.dist?.tarball) {\n const urlObject: any = UrlNode.parse(version.dist.tarball);\n const filename = urlObject.pathname.replace(/^.*\\//, '');\n\n // we do NOT overwrite any existing records\n if (_.isNil(packageLocalJson._distfiles[filename])) {\n const hash: DistFile = (packageLocalJson._distfiles[filename] = {\n url: version.dist.tarball,\n sha: version.dist.shasum,\n });\n const upLink: string = version[Symbol.for('__verdaccio_uplink')];\n\n if (_.isNil(upLink) === false) {\n this._updateUplinkToRemoteProtocol(hash, upLink);\n }\n }\n }\n }\n }\n\n debug('update dist-tags');\n for (const tag in packageInfo[DIST_TAGS]) {\n if (\n !packageLocalJson[DIST_TAGS][tag] ||\n packageLocalJson[DIST_TAGS][tag] !== packageInfo[DIST_TAGS][tag]\n ) {\n change = true;\n packageLocalJson[DIST_TAGS][tag] = packageInfo[DIST_TAGS][tag];\n }\n }\n\n for (const up in packageInfo._uplinks) {\n if (Object.prototype.hasOwnProperty.call(packageInfo._uplinks, up)) {\n const need_change =\n !isObject(packageLocalJson._uplinks[up]) ||\n packageInfo._uplinks[up].etag !== packageLocalJson._uplinks[up].etag ||\n packageInfo._uplinks[up].fetched !== packageLocalJson._uplinks[up].fetched;\n\n if (need_change) {\n change = true;\n packageLocalJson._uplinks[up] = packageInfo._uplinks[up];\n }\n }\n }\n\n debug('update time');\n if ('time' in packageInfo && !_.isEqual(packageLocalJson.time, packageInfo.time)) {\n packageLocalJson.time = packageInfo.time;\n change = true;\n }\n\n if (change) {\n debug('updating package info %o', name);\n this._writePackage(name, packageLocalJson, function (err): void {\n callback(err, packageLocalJson);\n });\n } else {\n callback(null, packageLocalJson);\n }\n });\n }\n\n /**\n * Add a new version to a previous local package.\n * @param {*} name\n * @param {*} version\n * @param {*} metadata\n * @param {*} tag\n * @param {*} callback\n */\n public addVersion(\n name: string,\n version: string,\n metadata: Version,\n tag: StringValue,\n callback: Callback\n ): void {\n debug(`add version %s package for %s`, version, name);\n this._updatePackage(\n name,\n async (data, cb: Callback): Promise<void> => {\n debug('%s package is being updated', name);\n // keep only one readme per package\n data.readme = metadata.readme;\n debug('%s` readme mutated', name);\n // TODO: lodash remove\n metadata = cleanUpReadme(metadata);\n metadata.contributors = normalizeContributors(metadata.contributors as Author[]);\n debug('%s` contributors normalized', name);\n const hasVersion = data.versions[version] != null;\n if (hasVersion) {\n debug('%s version %s already exists', name, version);\n return cb(ErrorCode.getConflict());\n }\n\n // if uploaded tarball has a different shasum, it's very likely that we\n // have some kind of error\n if (validatioUtils.isObject(metadata.dist) && _.isString(metadata.dist.tarball)) {\n const tarball = metadata.dist.tarball.replace(/.*\\//, '');\n\n if (validatioUtils.isObject(data._attachments[tarball])) {\n if (\n _.isNil(data._attachments[tarball].shasum) === false &&\n _.isNil(metadata.dist.shasum) === false\n ) {\n if (data._attachments[tarball].shasum != metadata.dist.shasum) {\n const errorMessage =\n `shasum error, ` +\n `${data._attachments[tarball].shasum} != ${metadata.dist.shasum}`;\n return cb(ErrorCode.getBadRequest(errorMessage));\n }\n }\n\n const currentDate = new Date().toISOString();\n\n // some old storage do not have this field #740\n if (_.isNil(data.time)) {\n data.time = {};\n }\n\n data.time['modified'] = currentDate;\n\n if ('created' in data.time === false) {\n data.time.created = currentDate;\n }\n\n data.time[version] = currentDate;\n data._attachments[tarball].version = version;\n }\n }\n\n data.versions[version] = metadata;\n tagVersion(data, version, tag);\n\n try {\n debug('%s` add on database', name);\n await this.storagePlugin.add(name);\n cb();\n } catch (err: any) {\n cb(ErrorCode.getBadData(err.message));\n }\n },\n callback\n );\n }\n\n /**\n * Merge a new list of tags for a local packages with the existing one.\n * @param {*} pkgName\n * @param {*} tags\n * @param {*} callback\n */\n public mergeTags(pkgName: string, tags: MergeTags, callback: Callback): void {\n debug(`merge tags for`, pkgName);\n this._updatePackage(\n pkgName,\n (data, cb): void => {\n /* eslint guard-for-in: 0 */\n for (const tag in tags) {\n // this handle dist-tag rm command\n if (_.isNull(tags[tag])) {\n delete data[DIST_TAGS][tag];\n continue;\n }\n\n if (_.isNil(data.versions[tags[tag]])) {\n return cb(ErrorCode.getNotFound(API_ERROR.VERSION_NOT_EXIST));\n }\n const version: string = tags[tag];\n tagVersion(data, version, tag);\n }\n cb(null);\n },\n callback\n );\n }\n\n /**\n * Update the package metadata, tags and attachments (tarballs).\n * Note: Currently supports unpublishing and deprecation.\n * @param {*} name\n * @param {*} incomingPkg\n * @param {*} revision\n * @param {*} callback\n * @return {Function}\n */\n public changePackage(\n name: string,\n incomingPkg: Package,\n revision: string | void,\n callback: Callback\n ): void {\n debug(`change package tags for %o revision %s`, name, revision);\n if (\n !validatioUtils.isObject(incomingPkg.versions) ||\n !validatioUtils.isObject(incomingPkg[DIST_TAGS])\n ) {\n debug(`change package bad data for %o`, name);\n return callback(ErrorCode.getBadData());\n }\n\n debug(`change package udapting package for %o`, name);\n this._updatePackage(\n name,\n (localData: Package, cb: CallbackAction): void => {\n for (const version in localData.versions) {\n const incomingVersion = incomingPkg.versions[version];\n if (_.isNil(incomingVersion)) {\n this.logger.info({ name: name, version: version }, 'unpublishing @{name}@@{version}');\n\n // FIXME: I prefer return a new object rather mutate the metadata\n delete localData.versions[version];\n delete localData.time![version];\n\n for (const file in localData._attachments) {\n if (localData._attachments[file].version === version) {\n delete localData._attachments[file].version;\n }\n }\n } else if (Object.prototype.hasOwnProperty.call(incomingVersion, 'deprecated')) {\n const incomingDeprecated = incomingVersion.deprecated;\n if (incomingDeprecated != localData.versions[version].deprecated) {\n if (!incomingDeprecated) {\n this.logger.info(\n { name: name, version: version },\n 'undeprecating @{name}@@{version}'\n );\n delete localData.versions[version].deprecated;\n } else {\n this.logger.info(\n { name: name, version: version },\n 'deprecating @{name}@@{version}'\n );\n localData.versions[version].deprecated = incomingDeprecated;\n }\n localData.time!.modified = new Date().toISOString();\n }\n }\n }\n\n localData[USERS] = incomingPkg[USERS];\n localData[DIST_TAGS] = incomingPkg[DIST_TAGS];\n cb(null);\n },\n function (err): void {\n if (err) {\n return callback(err);\n }\n callback();\n }\n );\n }\n /**\n * Remove a tarball.\n * @param {*} name\n * @param {*} filename\n * @param {*} revision\n * @param {*} callback\n */\n public removeTarball(\n name: string,\n filename: string,\n revision: string,\n callback: CallbackAction\n ): void {\n debug('remove tarball %s for %s', filename, name);\n assert(validatioUtils.validateName(filename));\n this._updatePackage(\n name,\n (data, cb): void => {\n if (data._attachments[filename]) {\n // TODO: avoid using delete\n delete data._attachments[filename];\n cb(null);\n } else {\n cb(ErrorCode.getNotFound('no such file available'));\n }\n },\n (err: VerdaccioError) => {\n if (err) {\n this.logger.error({ err }, 'remove tarball error @{err.message}');\n return callback(err);\n }\n const storage = this._getLocalStorage(name);\n\n if (storage) {\n debug('removing %s from storage', filename);\n storage\n .deletePackage(filename)\n .then((): void => {\n debug('package %s removed', filename);\n return callback(null);\n })\n .catch((err) => {\n this.logger.error({ err }, 'error removing %s from storage');\n return callback(null);\n });\n } else {\n callback(ErrorCode.getInternalError());\n }\n }\n );\n }\n\n /**\n * Add a tarball.\n * @param {String} name\n * @param {String} filename\n * @return {Stream}\n */\n public addTarball(name: string, filename: string): IUploadTarball {\n debug(`add a tarball for %o`, name);\n assert(validatioUtils.validateName(filename));\n\n let length = 0;\n const shaOneHash = createTarballHash();\n const uploadStream: IUploadTarball = new UploadTarball({});\n const _transform = uploadStream._transform;\n const storage = this._getLocalStorage(name);\n\n uploadStream.abort = function (): void {};\n uploadStream.done = function (): void {};\n\n uploadStream._transform = function (data, ...args): void {\n shaOneHash.update(data);\n // measure the length for validation reasons\n length += data.length;\n const appliedData = [data, ...args];\n // FIXME: not sure about this approach, tsc complains\n // @ts-ignore\n _transform.apply(uploadStream, appliedData);\n };\n\n if (name === PROTO_NAME) {\n process.nextTick((): void => {\n uploadStream.emit('error', ErrorCode.getForbidden());\n });\n return uploadStream;\n }\n\n // FIXME: this condition will never met, storage is always defined\n if (!storage) {\n process.nextTick((): void => {\n uploadStream.emit('error', \"can't upload this package\");\n });\n return uploadStream;\n }\n\n const writeStream: IUploadTarball = storage.writeTarball(filename);\n\n writeStream.on('error', (err) => {\n // @ts-ignore\n if (err.code === STORAGE.FILE_EXIST_ERROR || err.code === HTTP_STATUS.CONFLICT) {\n uploadStream.emit('error', ErrorCode.getConflict());\n uploadStream.abort();\n // @ts-ignore\n } else if (err.code === STORAGE.NO_SUCH_FILE_ERROR || err.code === HTTP_STATUS.NOT_FOUND) {\n // check if package exists to throw an appropriate message\n this.getPackageMetadata(name, function (_err: VerdaccioError): void {\n if (_err) {\n uploadStream.emit('error', _err);\n } else {\n uploadStream.emit('error', err);\n }\n });\n } else {\n uploadStream.emit('error', err);\n }\n });\n\n writeStream.on('open', function (): void {\n // re-emitting open because it's handled in storage.js\n uploadStream.emit('open');\n });\n\n writeStream.on('success', (): void => {\n this._updatePackage(\n name,\n function updater(data, cb): void {\n // FUTURE: move this to tarballUtils\n data._attachments[filename] = {\n shasum: shaOneHash.digest('hex'),\n };\n cb(null);\n },\n function (err): void {\n if (err) {\n // FIXME: if the update package fails, remove tarball to avoid left\n // orphan tarballs\n uploadStream.emit('error', err);\n } else {\n uploadStream.emit('success');\n }\n }\n );\n });\n\n uploadStream.abort = function (): void {\n writeStream.abort();\n };\n\n uploadStream.done = function (): void {\n if (!length) {\n uploadStream.emit('error', ErrorCode.getBadData('refusing to accept zero-length file'));\n writeStream.abort();\n } else {\n writeStream.done();\n }\n };\n\n uploadStream.pipe(writeStream);\n\n return uploadStream;\n }\n\n /**\n * Get a tarball.\n * @param {*} name\n * @param {*} filename\n * @return {ReadTarball}\n */\n public getTarball(name: string, filename: string): IReadTarball {\n assert(validatioUtils.validateName(filename));\n\n const storage: IPackageStorage = this._getLocalStorage(name);\n\n if (_.isNil(storage)) {\n return this._createFailureStreamResponse();\n }\n\n return this._streamSuccessReadTarBall(storage, filename);\n }\n\n /**\n * Return a stream that emits a read failure.\n * @private\n * @return {ReadTarball}\n */\n private _createFailureStreamResponse(): IReadTarball {\n const stream: IReadTarball = new ReadTarball({});\n\n process.nextTick((): void => {\n stream.emit('error', ErrorCode.getNotFound('no such file available'));\n });\n return stream;\n }\n\n /**\n * Return a stream that emits the tarball data\n * @param {Object} storage\n * @param {String} filename\n * @private\n * @return {ReadTarball}\n */\n private _streamSuccessReadTarBall(storage: any, filename: string): IReadTarball {\n const stream: IReadTarball = new ReadTarball({});\n const readTarballStream = storage.readTarball(filename);\n const e404 = ErrorCode.getNotFound;\n\n stream.abort = function (): void {\n if (_.isNil(readTarballStream) === false) {\n readTarballStream.abort();\n }\n };\n\n readTarballStream.on('error', function (err) {\n // @ts-ignore\n if (err.code === STORAGE.NO_SUCH_FILE_ERROR || err.code === HTTP_STATUS.NOT_FOUND) {\n stream.emit('error', e404('no such file available'));\n } else {\n stream.emit('error', err);\n }\n });\n\n readTarballStream.on('content-length', function (content): void {\n stream.emit('content-length', content);\n });\n\n readTarballStream.on('open', function (): void {\n // re-emitting open because it's handled in storage.js\n stream.emit('open');\n readTarballStream.pipe(stream);\n });\n\n return stream;\n }\n\n /**\n * Retrieve a package by name.\n * @param {*} name\n * @param {*} callback\n * @return {Function}\n */\n public getPackageMetadata(name: string, callback: Callback = (): void => {}): void {\n const storage: IPackageStorage = this._getLocalStorage(name);\n debug('get package metadata for %o', name);\n if (typeof storage === 'undefined') {\n return callback(ErrorCode.getNotFound());\n }\n\n this._readPackage(name, storage, callback);\n }\n\n public async search(searchStream: PassThrough, query: searchUtils.SearchQuery): Promise<void> {\n debug('search on each package');\n this.logger.info(\n { t: query.text, q: query.quality, p: query.popularity, m: query.maintenance, s: query.size },\n 'search by text @{t}| maintenance @{m}| quality @{q}| popularity @{p}'\n );\n const getMetadata = (searchItem: searchUtils.SearchItem) => {\n return new Promise((resolve, reject) => {\n this.getPackageMetadata(\n searchItem?.package?.name,\n (err: VerdaccioError, pkg: Package): void => {\n if (err) {\n this.logger.error(\n { err, pkgName: searchItem?.package?.name },\n 'error on load package @{pkgName} metaadata @{err.message}'\n );\n reject(err);\n }\n\n const searchPackage = normalizeSearchPackage(pkg, searchItem);\n const searchPackageItem: searchUtils.SearchPackageItem = {\n package: searchPackage,\n score: searchItem.score,\n flags: searchItem?.flags,\n // FUTURE: find a better way to calculate the score\n searchScore: 1,\n };\n debug('push to stream %o', searchItem?.package?.name);\n resolve(searchPackageItem);\n }\n );\n });\n };\n\n if (typeof this.storagePlugin.search === 'undefined') {\n this.logger.info('plugin search not implemented yet');\n searchStream.end();\n } else {\n debug('search on each package by plugin');\n const items = await this.storagePlugin.search(query);\n try {\n for (const item of items) {\n const metadata = await getMetadata(item);\n searchStream.write(metadata);\n }\n debug('search local stream end');\n searchStream.end();\n } catch (err) {\n this.logger.error({ err, query }, 'error on search by plugin @{err.message}');\n searchStream.emit('error', err);\n }\n }\n }\n\n /**\n * Retrieve a wrapper that provide access to the package location.\n * @param {Object} pkgName package name.\n * @return {Object}\n */\n private _getLocalStorage(pkgName: string): IPackageStorage {\n debug('get local storage for %o', pkgName);\n return this.storagePlugin.getPackageStorage(pkgName);\n }\n\n /**\n * Read a json file from storage.\n * @param {Object} storage\n * @param {Function} callback\n */\n private _readPackage(name: string, storage: any, callback: Callback): void {\n storage.readPackage(name, (err, result): void => {\n if (err) {\n if (err.code === STORAGE.NO_SUCH_FILE_ERROR || err.code === HTTP_STATUS.NOT_FOUND) {\n debug('package %s not found', name);\n return callback(ErrorCode.getNotFound());\n }\n return callback(this._internalError(err, STORAGE.PACKAGE_FILE_NAME, 'error reading'));\n }\n\n callback(err, normalizePackage(result));\n });\n }\n\n /**\n * Retrieve either a previous created local package or a boilerplate.\n * @param {*} pkgName\n * @param {*} callback\n * @return {Function}\n */\n private _readCreatePackage(pkgName: string, callback: Callback): void {\n const storage: any = this._getLocalStorage(pkgName);\n if (_.isNil(storage)) {\n this._createNewPackage(pkgName, callback);\n return;\n }\n\n storage.readPackage(pkgName, (err, data): void => {\n // TODO: race condition\n if (_.isNil(err) === false) {\n if (err.code === STORAGE.NO_SUCH_FILE_ERROR || err.code === HTTP_STATUS.NOT_FOUND) {\n data = generatePackageTemplate(pkgName);\n } else {\n return callback(this._internalError(err, STORAGE.PACKAGE_FILE_NAME, 'error reading'));\n }\n }\n\n callback(null, normalizePackage(data));\n });\n }\n\n private _createNewPackage(name: string, callback: Callback): Callback {\n return callback(null, normalizePackage(generatePackageTemplate(name)));\n }\n\n /**\n * Handle internal error\n * @param {*} err\n * @param {*} file\n * @param {*} message\n * @return {Object} Error instance\n */\n private _internalError(err: string, file: string, message: string): VerdaccioError {\n this.logger.error({ err: err, file: file }, `${message} @{file}: @{!err.message}`);\n\n return ErrorCode.getInternalError();\n }\n\n /**\n * @param {*} name package name\n * @param {*} updateHandler function(package, cb) - update function\n * @param {*} callback callback that gets invoked after it's all updated\n * @return {Function}\n */\n private _updatePackage(\n name: string,\n updateHandler: StorageUpdateCallback,\n callback: Callback\n ): void {\n const storage: IPackageStorage = this._getLocalStorage(name);\n\n if (!storage) {\n return callback(ErrorCode.getNotFound());\n }\n\n storage.updatePackage(\n name,\n updateHandler,\n this._writePackage.bind(this),\n normalizePackage,\n callback\n );\n }\n\n /**\n * Update the revision (_rev) string for a package.\n * @param {*} name\n * @param {*} json\n * @param {*} callback\n * @return {Function}\n */\n private _writePackage(name: string, json: Package, callback: Callback): void {\n const storage: any = this._getLocalStorage(name);\n if (_.isNil(storage)) {\n return callback();\n }\n storage.savePackage(name, this._setDefaultRevision(json), callback);\n }\n\n private _setDefaultRevision(json: Package): Package {\n // calculate revision from couch db\n if (_.isString(json._rev) === false) {\n json._rev = STORAGE.DEFAULT_REVISION;\n }\n\n // this is intended in debug mode we do not want modify the store revision\n if (_.isNil(this.config._debug)) {\n json._rev = generateRevision(json._rev);\n }\n\n return json;\n }\n\n // private _deleteAttachments(storage: any, attachments: string[], callback: Callback): void {\n // debug('deleting %o attachments total %o', attachments?.length);\n // const unlinkNext = function (cb): void {\n // if (_.isEmpty(attachments)) {\n // return cb();\n // }\n\n // const attachment = attachments.shift();\n // storage.deletePackage(attachment, function (): void {\n // unlinkNext(cb);\n // });\n // };\n\n // unlinkNext(function (): void {\n // // try to unlink the directory, but ignore errors because it can fail\n // storage.removePackage(function (err): void {\n // callback(err);\n // });\n // });\n // }\n\n /**\n * Ensure the dist file remains as the same protocol\n * @param {Object} hash metadata\n * @param {String} upLinkKey registry key\n * @private\n */\n private _updateUplinkToRemoteProtocol(hash: DistFile, upLinkKey: string): void {\n // if we got this information from a known registry,\n // use the same protocol for the tarball\n //\n // see https://github.com/rlidwka/sinopia/issues/166\n const tarballUrl: any = UrlNode.parse(hash.url);\n const uplinkUrl: any = UrlNode.parse(this.config.uplinks[upLinkKey].url);\n\n if (uplinkUrl.host === tarballUrl.host) {\n tarballUrl.protocol = uplinkUrl.protocol;\n hash.registry = upLinkKey;\n hash.url = UrlNode.format(tarballUrl);\n }\n }\n\n public async getSecret(config: Config): Promise<void> {\n const secretKey = await this.storagePlugin.getSecret();\n\n return this.storagePlugin.setSecret(config.checkSecretKey(secretKey));\n }\n\n private _loadStorage(config: Config, logger: Logger): IPluginStorage {\n const Storage = this._loadStorePlugin();\n\n if (_.isNil(Storage)) {\n assert(this.config.storage, 'CONFIG: storage path not defined');\n return new LocalDatabase(this.config, logger);\n }\n return Storage as IPluginStorage;\n }\n\n private _loadStorePlugin(): IPluginStorage | void {\n const plugin_params = {\n config: this.config,\n logger: this.logger,\n };\n\n const plugins: IPluginStorage[] = loadPlugin<IPluginStorage>(\n this.config,\n this.config.store,\n plugin_params,\n (plugin): IPluginStorage => {\n return plugin.getPackageStorage;\n }\n );\n\n return _.head(plugins);\n }\n\n public saveToken(token: Token): Promise<any> {\n if (_.isFunction(this.storagePlugin.saveToken) === false) {\n return Promise.reject(\n ErrorCode.getCode(HTTP_STATUS.SERVICE_UNAVAILABLE, SUPPORT_ERRORS.PLUGIN_MISSING_INTERFACE)\n );\n }\n\n return this.storagePlugin.saveToken(token);\n }\n\n public deleteToken(user: string, tokenKey: string): Promise<any> {\n if (_.isFunction(this.storagePlugin.deleteToken) === false) {\n return Promise.reject(\n ErrorCode.getCode(HTTP_STATUS.SERVICE_UNAVAILABLE, SUPPORT_ERRORS.PLUGIN_MISSING_INTERFACE)\n );\n }\n\n return this.storagePlugin.deleteToken(user, tokenKey);\n }\n\n public readTokens(filter: TokenFilter): Promise<Token[]> {\n if (_.isFunction(this.storagePlugin.readTokens) === false) {\n return Promise.reject(\n ErrorCode.getCode(HTTP_STATUS.SERVICE_UNAVAILABLE, SUPPORT_ERRORS.PLUGIN_MISSING_INTERFACE)\n );\n }\n\n return this.storagePlugin.readTokens(filter);\n }\n}\n\nexport { LocalStorage };\n"],"file":"local-storage.js"}
1
+ {"version":3,"sources":["../src/local-storage.ts"],"names":["debug","normalizeSearchPackage","pkg","searchItem","latest","pkgUtils","getLatest","version","versions","result","name","scope","description","keywords","date","time","author","publisher","maintainers","links","npm","homepage","repository","bugs","package","scoped","PROTO_NAME","LocalStorage","constructor","config","logger","child","sub","storagePlugin","init","_loadStorage","warn","addPackage","callback","storage","_getLocalStorage","_","isNil","errorUtils","getNotFound","createPackage","err","isNull","code","STORAGE","FILE_EXIST_ERROR","HTTP_STATUS","CONFLICT","message","getConflict","removePackage","Promise","resolve","reject","readPackage","data","NO_SUCH_FILE_ERROR","NOT_FOUND","remove","attachments","Object","keys","_attachments","length","attachment","deletePackage","PACKAGE_FILE_NAME","error","getBadData","updateVersions","packageInfo","_readCreatePackage","packageLocalJson","change","readme","versionId","contributors","dist","tarball","urlObject","UrlNode","parse","filename","pathname","replace","_distfiles","hash","url","sha","shasum","upLink","Symbol","for","_updateUplinkToRemoteProtocol","tag","DIST_TAGS","up","_uplinks","prototype","hasOwnProperty","call","need_change","etag","fetched","isEqual","_writePackage","addVersion","metadata","_updatePackage","cb","hasVersion","validatioUtils","isObject","isString","errorMessage","getBadRequest","currentDate","Date","toISOString","created","add","mergeTags","pkgName","tags","API_ERROR","VERSION_NOT_EXIST","changePackage","incomingPkg","revision","localData","incomingVersion","info","file","incomingDeprecated","deprecated","modified","USERS","removeTarball","validateName","then","catch","getInternalError","addTarball","shaOneHash","uploadStream","UploadTarball","_transform","abort","done","args","update","appliedData","apply","process","nextTick","emit","getForbidden","writeStream","writeTarball","on","getPackageMetadata","_err","updater","digest","pipe","getTarball","_createFailureStreamResponse","_streamSuccessReadTarBall","stream","ReadTarball","readTarballStream","readTarball","e404","content","getPackageMetadataNext","_readPackageNext","_readPackage","search","searchStream","query","t","text","q","quality","p","popularity","m","maintenance","s","size","getMetadata","searchPackage","searchPackageItem","score","flags","searchScore","end","items","item","write","getPackageStorage","_internalError","readPackageNext","_createNewPackage","updateHandler","updatePackage","bind","normalizePackage","json","savePackage","_setDefaultRevision","_rev","DEFAULT_REVISION","_debug","upLinkKey","tarballUrl","uplinkUrl","uplinks","host","protocol","registry","format","getSecret","secretKey","setSecret","checkSecretKey","Storage","_loadStorePlugin","LocalDatabase","plugin_params","plugins","store","plugin","head","saveToken","token","isFunction","getCode","SERVICE_UNAVAILABLE","SUPPORT_ERRORS","PLUGIN_MISSING_INTERFACE","deleteToken","user","tokenKey","readTokens","filter"],"mappings":"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","sourcesContent":["import assert from 'assert';\nimport buildDebug from 'debug';\nimport _ from 'lodash';\nimport { PassThrough } from 'stream';\nimport UrlNode from 'url';\n\nimport { errorUtils, pkgUtils, pluginUtils, searchUtils, validatioUtils } from '@verdaccio/core';\nimport { API_ERROR, DIST_TAGS, HTTP_STATUS, SUPPORT_ERRORS, USERS } from '@verdaccio/core';\nimport { VerdaccioError } from '@verdaccio/core';\nimport { loadPlugin } from '@verdaccio/loaders';\nimport LocalDatabase from '@verdaccio/local-storage';\nimport { ReadTarball, UploadTarball } from '@verdaccio/streams';\nimport {\n Author,\n Callback,\n CallbackAction,\n Config,\n DistFile,\n IPackageStorage,\n IReadTarball,\n IUploadTarball,\n Logger,\n MergeTags,\n Package,\n StorageUpdateCallback,\n StringValue,\n Token,\n TokenFilter,\n Version,\n} from '@verdaccio/types';\nimport { getLatestVersion, isObject } from '@verdaccio/utils';\nimport { createTarballHash, normalizeContributors } from '@verdaccio/utils';\n\nimport {\n STORAGE,\n cleanUpReadme,\n generatePackageTemplate,\n generateRevision,\n getLatestReadme,\n normalizePackage,\n tagVersion,\n} from './storage-utils';\n\nconst debug = buildDebug('verdaccio:storage:local');\n\nexport type IPluginStorage = pluginUtils.IPluginStorage<Config>;\n\nexport function normalizeSearchPackage(\n pkg: Package,\n searchItem: searchUtils.SearchItem\n): searchUtils.SearchPackageBody {\n const latest = pkgUtils.getLatest(pkg);\n const version: Version = pkg.versions[latest];\n const result: searchUtils.SearchPackageBody = {\n name: version.name,\n scope: '',\n description: version.description,\n version: latest,\n keywords: version.keywords,\n date: pkg.time[latest],\n // FIXME: type\n author: version.author as any,\n // FIXME: not possible fill this out from a private package\n publisher: {},\n // FIXME: type\n maintainers: version.maintainers as any,\n links: {\n npm: '',\n homepage: version.homepage,\n repository: version.repository,\n bugs: version.bugs,\n },\n };\n\n if (typeof searchItem.package.scoped === 'string') {\n result.scope = searchItem.package.scoped;\n }\n\n return result;\n}\n\nexport const PROTO_NAME = '__proto__';\n\n/**\n * Implements Storage interface (same for storage.js, local-storage.js, up-storage.js).\n */\nclass LocalStorage {\n public config: Config;\n public storagePlugin: IPluginStorage;\n public logger: Logger;\n\n public constructor(config: Config, logger: Logger) {\n debug('local storage created');\n this.logger = logger.child({ sub: 'fs' });\n this.config = config;\n // @ts-expect-error\n this.storagePlugin = null;\n }\n\n public async init() {\n if (this.storagePlugin === null) {\n this.storagePlugin = this._loadStorage(this.config, this.logger);\n debug('storage plugin init');\n await this.storagePlugin.init();\n debug('storage plugin initialized');\n } else {\n this.logger.warn('storage plugin has been already initialized');\n }\n return;\n }\n\n public addPackage(name: string, pkg: Package, callback: Callback): void {\n debug(`creating a package for`, name);\n const storage: any = this._getLocalStorage(name);\n\n if (_.isNil(storage)) {\n debug(`storage is missing for %o package cannot be added`, name);\n return callback(errorUtils.getNotFound('this package cannot be added'));\n }\n\n storage.createPackage(name, generatePackageTemplate(name), (err) => {\n if (\n _.isNull(err) === false &&\n (err.code === STORAGE.FILE_EXIST_ERROR || err.code === HTTP_STATUS.CONFLICT)\n ) {\n debug(`error on creating a package for %o with error %o`, name, err.message);\n return callback(errorUtils.getConflict());\n }\n\n const latest = getLatestVersion(pkg);\n if (_.isNil(latest) === false && pkg.versions[latest]) {\n debug('latest version found %o for %o', latest, name);\n return callback(null, pkg.versions[latest]);\n }\n\n debug('no latest version found for %o', name);\n return callback();\n });\n }\n\n /**\n * Remove package with all it contents.\n */\n public async removePackage(name: string): Promise<void> {\n debug('remove package %s', name);\n const storage: any = this._getLocalStorage(name);\n\n if (_.isNil(storage)) {\n throw errorUtils.getNotFound();\n }\n\n return new Promise((resolve, reject) => {\n storage.readPackage(name, async (err, data: Package): Promise<void> => {\n if (_.isNil(err) === false) {\n if (err.code === STORAGE.NO_SUCH_FILE_ERROR || err.code === HTTP_STATUS.NOT_FOUND) {\n debug(`error on not found %o with error %o`, name, err.message);\n return reject(errorUtils.getNotFound());\n }\n return reject(err);\n }\n\n data = normalizePackage(data);\n\n try {\n await this.storagePlugin.remove(name);\n // remove each attachment\n const attachments = Object.keys(data._attachments);\n debug('attachments to remove %s', attachments?.length);\n for (let attachment of attachments) {\n debug('remove attachment %s', attachment);\n await storage.deletePackage(attachment);\n }\n // remove package.json\n debug('remove package.json');\n await storage.deletePackage(STORAGE.PACKAGE_FILE_NAME);\n // remove folder\n debug('remove package folder');\n await storage.removePackage();\n resolve();\n } catch (err: any) {\n this.logger.error({ err }, 'removed package has failed @{err.message}');\n throw errorUtils.getBadData(err.message);\n }\n });\n });\n }\n\n /**\n * Synchronize remote package info with the local one\n * @param {*} name\n * @param {*} packageInfo\n * @param {*} callback\n */\n public updateVersions(name: string, packageInfo: Package, callback: Callback): void {\n debug(`updating versions for package %o`, name);\n this._readCreatePackage(name, (err, packageLocalJson): void => {\n if (err) {\n return callback(err);\n }\n\n let change = false;\n // updating readme\n packageLocalJson.readme = getLatestReadme(packageInfo);\n if (packageInfo.readme !== packageLocalJson.readme) {\n change = true;\n }\n\n debug('update versions');\n for (const versionId in packageInfo.versions) {\n if (_.isNil(packageLocalJson.versions[versionId])) {\n let version = packageInfo.versions[versionId];\n\n // we don't keep readme for package versions,\n // only one readme per package\n version = cleanUpReadme(version);\n debug('clean up readme for %o', versionId);\n version.contributors = normalizeContributors(version.contributors as Author[]);\n\n change = true;\n packageLocalJson.versions[versionId] = version;\n\n if (version?.dist?.tarball) {\n const urlObject: any = UrlNode.parse(version.dist.tarball);\n const filename = urlObject.pathname.replace(/^.*\\//, '');\n\n // we do NOT overwrite any existing records\n if (_.isNil(packageLocalJson._distfiles[filename])) {\n const hash: DistFile = (packageLocalJson._distfiles[filename] = {\n url: version.dist.tarball,\n sha: version.dist.shasum,\n });\n const upLink: string = version[Symbol.for('__verdaccio_uplink')];\n\n if (_.isNil(upLink) === false) {\n this._updateUplinkToRemoteProtocol(hash, upLink);\n }\n }\n }\n }\n }\n\n debug('update dist-tags');\n for (const tag in packageInfo[DIST_TAGS]) {\n if (\n !packageLocalJson[DIST_TAGS][tag] ||\n packageLocalJson[DIST_TAGS][tag] !== packageInfo[DIST_TAGS][tag]\n ) {\n change = true;\n packageLocalJson[DIST_TAGS][tag] = packageInfo[DIST_TAGS][tag];\n }\n }\n\n for (const up in packageInfo._uplinks) {\n if (Object.prototype.hasOwnProperty.call(packageInfo._uplinks, up)) {\n const need_change =\n !isObject(packageLocalJson._uplinks[up]) ||\n packageInfo._uplinks[up].etag !== packageLocalJson._uplinks[up].etag ||\n packageInfo._uplinks[up].fetched !== packageLocalJson._uplinks[up].fetched;\n\n if (need_change) {\n change = true;\n packageLocalJson._uplinks[up] = packageInfo._uplinks[up];\n }\n }\n }\n\n debug('update time');\n if ('time' in packageInfo && !_.isEqual(packageLocalJson.time, packageInfo.time)) {\n packageLocalJson.time = packageInfo.time;\n change = true;\n }\n\n if (change) {\n debug('updating package info %o', name);\n this._writePackage(name, packageLocalJson, function (err): void {\n callback(err, packageLocalJson);\n });\n } else {\n callback(null, packageLocalJson);\n }\n });\n }\n\n /**\n * Add a new version to a previous local package.\n * @param {*} name\n * @param {*} version\n * @param {*} metadata\n * @param {*} tag\n * @param {*} callback\n */\n public addVersion(\n name: string,\n version: string,\n metadata: Version,\n tag: StringValue,\n callback: Callback\n ): void {\n debug(`add version %s package for %s`, version, name);\n this._updatePackage(\n name,\n async (data, cb: Callback): Promise<void> => {\n debug('%s package is being updated', name);\n // keep only one readme per package\n data.readme = metadata.readme;\n debug('%s` readme mutated', name);\n // TODO: lodash remove\n metadata = cleanUpReadme(metadata);\n metadata.contributors = normalizeContributors(metadata.contributors as Author[]);\n debug('%s` contributors normalized', name);\n const hasVersion = data.versions[version] != null;\n if (hasVersion) {\n debug('%s version %s already exists', name, version);\n return cb(errorUtils.getConflict());\n }\n\n // if uploaded tarball has a different shasum, it's very likely that we\n // have some kind of error\n if (validatioUtils.isObject(metadata.dist) && _.isString(metadata.dist.tarball)) {\n const tarball = metadata.dist.tarball.replace(/.*\\//, '');\n\n if (validatioUtils.isObject(data._attachments[tarball])) {\n if (\n _.isNil(data._attachments[tarball].shasum) === false &&\n _.isNil(metadata.dist.shasum) === false\n ) {\n if (data._attachments[tarball].shasum != metadata.dist.shasum) {\n const errorMessage =\n `shasum error, ` +\n `${data._attachments[tarball].shasum} != ${metadata.dist.shasum}`;\n return cb(errorUtils.getBadRequest(errorMessage));\n }\n }\n\n const currentDate = new Date().toISOString();\n\n // some old storage do not have this field #740\n if (_.isNil(data.time)) {\n data.time = {};\n }\n\n data.time['modified'] = currentDate;\n\n if ('created' in data.time === false) {\n data.time.created = currentDate;\n }\n\n data.time[version] = currentDate;\n data._attachments[tarball].version = version;\n }\n }\n\n data.versions[version] = metadata;\n tagVersion(data, version, tag);\n\n try {\n debug('%s` add on database', name);\n await this.storagePlugin.add(name);\n cb();\n } catch (err: any) {\n cb(errorUtils.getBadData(err.message));\n }\n },\n callback\n );\n }\n\n /**\n * Merge a new list of tags for a local packages with the existing one.\n * @param {*} pkgName\n * @param {*} tags\n * @param {*} callback\n */\n public mergeTags(pkgName: string, tags: MergeTags, callback: Callback): void {\n debug(`merge tags for`, pkgName);\n this._updatePackage(\n pkgName,\n (data, cb): void => {\n /* eslint guard-for-in: 0 */\n for (const tag in tags) {\n // this handle dist-tag rm command\n if (_.isNull(tags[tag])) {\n delete data[DIST_TAGS][tag];\n continue;\n }\n\n if (_.isNil(data.versions[tags[tag]])) {\n return cb(errorUtils.getNotFound(API_ERROR.VERSION_NOT_EXIST));\n }\n const version: string = tags[tag];\n tagVersion(data, version, tag);\n }\n cb(null);\n },\n callback\n );\n }\n\n /**\n * Update the package metadata, tags and attachments (tarballs).\n * Note: Currently supports unpublishing and deprecation.\n * @param {*} name\n * @param {*} incomingPkg\n * @param {*} revision\n * @param {*} callback\n * @return {Function}\n */\n public changePackage(\n name: string,\n incomingPkg: Package,\n revision: string | void,\n callback: Callback\n ): void {\n debug(`change package tags for %o revision %s`, name, revision);\n if (\n !validatioUtils.isObject(incomingPkg.versions) ||\n !validatioUtils.isObject(incomingPkg[DIST_TAGS])\n ) {\n debug(`change package bad data for %o`, name);\n return callback(errorUtils.getBadData());\n }\n\n debug(`change package udapting package for %o`, name);\n this._updatePackage(\n name,\n (localData: Package, cb: CallbackAction): void => {\n for (const version in localData.versions) {\n const incomingVersion = incomingPkg.versions[version];\n if (_.isNil(incomingVersion)) {\n this.logger.info({ name: name, version: version }, 'unpublishing @{name}@@{version}');\n\n // FIXME: I prefer return a new object rather mutate the metadata\n delete localData.versions[version];\n delete localData.time![version];\n\n for (const file in localData._attachments) {\n if (localData._attachments[file].version === version) {\n delete localData._attachments[file].version;\n }\n }\n } else if (Object.prototype.hasOwnProperty.call(incomingVersion, 'deprecated')) {\n const incomingDeprecated = incomingVersion.deprecated;\n if (incomingDeprecated != localData.versions[version].deprecated) {\n if (!incomingDeprecated) {\n this.logger.info(\n { name: name, version: version },\n 'undeprecating @{name}@@{version}'\n );\n delete localData.versions[version].deprecated;\n } else {\n this.logger.info(\n { name: name, version: version },\n 'deprecating @{name}@@{version}'\n );\n localData.versions[version].deprecated = incomingDeprecated;\n }\n localData.time!.modified = new Date().toISOString();\n }\n }\n }\n\n localData[USERS] = incomingPkg[USERS];\n localData[DIST_TAGS] = incomingPkg[DIST_TAGS];\n cb(null);\n },\n function (err): void {\n if (err) {\n return callback(err);\n }\n callback();\n }\n );\n }\n /**\n * Remove a tarball.\n * @param {*} name\n * @param {*} filename\n * @param {*} revision\n * @param {*} callback\n */\n public removeTarball(\n name: string,\n filename: string,\n revision: string,\n callback: CallbackAction\n ): void {\n debug('remove tarball %s for %s', filename, name);\n assert(validatioUtils.validateName(filename));\n this._updatePackage(\n name,\n (data, cb): void => {\n if (data._attachments[filename]) {\n // TODO: avoid using delete\n delete data._attachments[filename];\n cb(null);\n } else {\n cb(errorUtils.getNotFound('no such file available'));\n }\n },\n (err: VerdaccioError) => {\n if (err) {\n this.logger.error({ err }, 'remove tarball error @{err.message}');\n return callback(err);\n }\n const storage = this._getLocalStorage(name);\n\n if (storage) {\n debug('removing %s from storage', filename);\n storage\n .deletePackage(filename)\n .then((): void => {\n debug('package %s removed', filename);\n return callback(null);\n })\n .catch((err) => {\n this.logger.error({ err }, 'error removing %s from storage');\n return callback(null);\n });\n } else {\n callback(errorUtils.getInternalError());\n }\n }\n );\n }\n\n /**\n * Add a tarball.\n * @param {String} name\n * @param {String} filename\n * @return {Stream}\n */\n public addTarball(name: string, filename: string): IUploadTarball {\n debug(`add a tarball for %o`, name);\n assert(validatioUtils.validateName(filename));\n\n let length = 0;\n const shaOneHash = createTarballHash();\n const uploadStream: IUploadTarball = new UploadTarball({});\n const _transform = uploadStream._transform;\n const storage = this._getLocalStorage(name);\n\n uploadStream.abort = function (): void {};\n uploadStream.done = function (): void {};\n\n uploadStream._transform = function (data, ...args): void {\n shaOneHash.update(data);\n // measure the length for validation reasons\n length += data.length;\n const appliedData = [data, ...args];\n // FIXME: not sure about this approach, tsc complains\n // @ts-ignore\n _transform.apply(uploadStream, appliedData);\n };\n\n if (name === PROTO_NAME) {\n process.nextTick((): void => {\n uploadStream.emit('error', errorUtils.getForbidden());\n });\n return uploadStream;\n }\n\n // FIXME: this condition will never met, storage is always defined\n if (!storage) {\n process.nextTick((): void => {\n uploadStream.emit('error', \"can't upload this package\");\n });\n return uploadStream;\n }\n\n const writeStream: IUploadTarball = storage.writeTarball(filename);\n\n writeStream.on('error', (err) => {\n // @ts-ignore\n if (err.code === STORAGE.FILE_EXIST_ERROR || err.code === HTTP_STATUS.CONFLICT) {\n uploadStream.emit('error', errorUtils.getConflict());\n uploadStream.abort();\n // @ts-ignore\n } else if (err.code === STORAGE.NO_SUCH_FILE_ERROR || err.code === HTTP_STATUS.NOT_FOUND) {\n // check if package exists to throw an appropriate message\n this.getPackageMetadata(name, function (_err: VerdaccioError): void {\n if (_err) {\n uploadStream.emit('error', _err);\n } else {\n uploadStream.emit('error', err);\n }\n });\n } else {\n uploadStream.emit('error', err);\n }\n });\n\n writeStream.on('open', function (): void {\n // re-emitting open because it's handled in storage.js\n uploadStream.emit('open');\n });\n\n writeStream.on('success', (): void => {\n this._updatePackage(\n name,\n function updater(data, cb): void {\n // FUTURE: move this to tarballUtils\n data._attachments[filename] = {\n shasum: shaOneHash.digest('hex'),\n };\n cb(null);\n },\n function (err): void {\n if (err) {\n // FIXME: if the update package fails, remove tarball to avoid left\n // orphan tarballs\n uploadStream.emit('error', err);\n } else {\n uploadStream.emit('success');\n }\n }\n );\n });\n\n uploadStream.abort = function (): void {\n writeStream.abort();\n };\n\n uploadStream.done = function (): void {\n if (!length) {\n uploadStream.emit('error', errorUtils.getBadData('refusing to accept zero-length file'));\n writeStream.abort();\n } else {\n writeStream.done();\n }\n };\n\n uploadStream.pipe(writeStream);\n\n return uploadStream;\n }\n\n /**\n * Get a tarball.\n * @param {*} name\n * @param {*} filename\n * @return {ReadTarball}\n */\n public getTarball(name: string, filename: string): IReadTarball {\n assert(validatioUtils.validateName(filename));\n\n const storage: IPackageStorage = this._getLocalStorage(name);\n\n if (_.isNil(storage)) {\n return this._createFailureStreamResponse();\n }\n\n return this._streamSuccessReadTarBall(storage, filename);\n }\n\n /**\n * Return a stream that emits a read failure.\n * @private\n * @return {ReadTarball}\n */\n private _createFailureStreamResponse(): IReadTarball {\n const stream: IReadTarball = new ReadTarball({});\n\n process.nextTick((): void => {\n stream.emit('error', errorUtils.getNotFound('no such file available'));\n });\n return stream;\n }\n\n /**\n * Return a stream that emits the tarball data\n * @param {Object} storage\n * @param {String} filename\n * @private\n * @return {ReadTarball}\n */\n private _streamSuccessReadTarBall(storage: any, filename: string): IReadTarball {\n const stream: IReadTarball = new ReadTarball({});\n const readTarballStream = storage.readTarball(filename);\n const e404 = errorUtils.getNotFound;\n\n stream.abort = function (): void {\n if (_.isNil(readTarballStream) === false) {\n readTarballStream.abort();\n }\n };\n\n readTarballStream.on('error', function (err) {\n // @ts-ignore\n if (err.code === STORAGE.NO_SUCH_FILE_ERROR || err.code === HTTP_STATUS.NOT_FOUND) {\n stream.emit('error', e404('no such file available'));\n } else {\n stream.emit('error', err);\n }\n });\n\n readTarballStream.on('content-length', function (content): void {\n stream.emit('content-length', content);\n });\n\n readTarballStream.on('open', function (): void {\n // re-emitting open because it's handled in storage.js\n stream.emit('open');\n readTarballStream.pipe(stream);\n });\n\n return stream;\n }\n\n public async getPackageMetadataNext(name: string): Promise<Package> {\n const storage: IPackageStorage = this._getLocalStorage(name);\n debug('get package metadata for %o', name);\n if (typeof storage === 'undefined') {\n // TODO: this might be a better an error to throw\n // if storage is not there cannot be 404.\n throw errorUtils.getNotFound();\n }\n\n return await this._readPackageNext(name, storage);\n }\n\n /**\n * Retrieve a package by name.\n * @param {*} name\n * @param {*} callback\n * @return {Function}\n * @deprecated\n */\n public getPackageMetadata(name: string, callback: Callback = (): void => {}): void {\n const storage: IPackageStorage = this._getLocalStorage(name);\n debug('get package metadata for %o', name);\n if (typeof storage === 'undefined') {\n return callback(errorUtils.getNotFound());\n }\n\n this._readPackage(name, storage, callback);\n }\n\n public async search(searchStream: PassThrough, query: searchUtils.SearchQuery): Promise<void> {\n debug('search on each package');\n this.logger.info(\n { t: query.text, q: query.quality, p: query.popularity, m: query.maintenance, s: query.size },\n 'search by text @{t}| maintenance @{m}| quality @{q}| popularity @{p}'\n );\n const getMetadata = (searchItem: searchUtils.SearchItem) => {\n return new Promise((resolve, reject) => {\n this.getPackageMetadata(\n searchItem?.package?.name,\n (err: VerdaccioError, pkg: Package): void => {\n if (err) {\n this.logger.error(\n { err, pkgName: searchItem?.package?.name },\n 'error on load package @{pkgName} metaadata @{err.message}'\n );\n reject(err);\n }\n\n const searchPackage = normalizeSearchPackage(pkg, searchItem);\n const searchPackageItem: searchUtils.SearchPackageItem = {\n package: searchPackage,\n score: searchItem.score,\n flags: searchItem?.flags,\n // FUTURE: find a better way to calculate the score\n searchScore: 1,\n };\n debug('push to stream %o', searchItem?.package?.name);\n resolve(searchPackageItem);\n }\n );\n });\n };\n\n if (typeof this.storagePlugin.search === 'undefined') {\n this.logger.info('plugin search not implemented yet');\n searchStream.end();\n } else {\n debug('search on each package by plugin');\n const items = await this.storagePlugin.search(query);\n try {\n for (const item of items) {\n const metadata = await getMetadata(item);\n searchStream.write(metadata);\n }\n debug('search local stream end');\n searchStream.end();\n } catch (err) {\n this.logger.error({ err, query }, 'error on search by plugin @{err.message}');\n searchStream.emit('error', err);\n }\n }\n }\n\n /**\n * Retrieve a wrapper that provide access to the package location.\n * @param {Object} pkgName package name.\n * @return {Object}\n */\n private _getLocalStorage(pkgName: string): IPackageStorage {\n debug('get local storage for %o', pkgName);\n return this.storagePlugin.getPackageStorage(pkgName);\n }\n\n /**\n * Read a json file from storage.\n * @param {Object} storage\n * @param {Function} callback\n * @deprecated\n */\n private _readPackage(name: string, storage: any, callback: Callback): void {\n storage.readPackage(name, (err, result): void => {\n if (err) {\n if (err.code === STORAGE.NO_SUCH_FILE_ERROR || err.code === HTTP_STATUS.NOT_FOUND) {\n debug('package %s not found', name);\n return callback(errorUtils.getNotFound());\n }\n return callback(this._internalError(err, STORAGE.PACKAGE_FILE_NAME, 'error reading'));\n }\n\n callback(err, normalizePackage(result));\n });\n }\n\n private async _readPackageNext(name: string, storage: any): Promise<Package> {\n try {\n const result: Package = await storage.readPackageNext(name);\n return normalizePackage(result);\n } catch (err: any) {\n if (err.code === STORAGE.NO_SUCH_FILE_ERROR || err.code === HTTP_STATUS.NOT_FOUND) {\n debug('package %s not found', name);\n throw errorUtils.getNotFound();\n }\n this.logger.error(\n { err: err, file: STORAGE.PACKAGE_FILE_NAME },\n `error reading @{file}: @{!err.message}`\n );\n\n throw errorUtils.getInternalError();\n }\n }\n\n /**\n * Retrieve either a previous created local package or a boilerplate.\n * @param {*} pkgName\n * @param {*} callback\n * @return {Function}\n */\n private _readCreatePackage(pkgName: string, callback: Callback): void {\n const storage: any = this._getLocalStorage(pkgName);\n if (_.isNil(storage)) {\n this._createNewPackage(pkgName, callback);\n return;\n }\n\n storage.readPackage(pkgName, (err, data): void => {\n // TODO: race condition\n if (_.isNil(err) === false) {\n if (err.code === STORAGE.NO_SUCH_FILE_ERROR || err.code === HTTP_STATUS.NOT_FOUND) {\n data = generatePackageTemplate(pkgName);\n } else {\n return callback(this._internalError(err, STORAGE.PACKAGE_FILE_NAME, 'error reading'));\n }\n }\n\n callback(null, normalizePackage(data));\n });\n }\n\n private _createNewPackage(name: string, callback: Callback): Callback {\n return callback(null, normalizePackage(generatePackageTemplate(name)));\n }\n\n /**\n * Handle internal error\n * @param {*} err\n * @param {*} file\n * @param {*} message\n * @return {Object} Error instance\n */\n private _internalError(err: string, file: string, message: string): VerdaccioError {\n this.logger.error({ err: err, file: file }, `${message} @{file}: @{!err.message}`);\n\n return errorUtils.getInternalError();\n }\n\n /**\n * @param {*} name package name\n * @param {*} updateHandler function(package, cb) - update function\n * @param {*} callback callback that gets invoked after it's all updated\n * @return {Function}\n */\n private _updatePackage(\n name: string,\n updateHandler: StorageUpdateCallback,\n callback: Callback\n ): void {\n const storage: IPackageStorage = this._getLocalStorage(name);\n\n if (!storage) {\n return callback(errorUtils.getNotFound());\n }\n\n storage.updatePackage(\n name,\n updateHandler,\n this._writePackage.bind(this),\n normalizePackage,\n callback\n );\n }\n\n /**\n * Update the revision (_rev) string for a package.\n * @param {*} name\n * @param {*} json\n * @param {*} callback\n * @return {Function}\n */\n private _writePackage(name: string, json: Package, callback: Callback): void {\n const storage: any = this._getLocalStorage(name);\n if (_.isNil(storage)) {\n return callback();\n }\n storage.savePackage(name, this._setDefaultRevision(json), callback);\n }\n\n private _setDefaultRevision(json: Package): Package {\n // calculate revision from couch db\n if (_.isString(json._rev) === false) {\n json._rev = STORAGE.DEFAULT_REVISION;\n }\n\n // this is intended in debug mode we do not want modify the store revision\n if (_.isNil(this.config._debug)) {\n json._rev = generateRevision(json._rev);\n }\n\n return json;\n }\n\n // private _deleteAttachments(storage: any, attachments: string[], callback: Callback): void {\n // debug('deleting %o attachments total %o', attachments?.length);\n // const unlinkNext = function (cb): void {\n // if (_.isEmpty(attachments)) {\n // return cb();\n // }\n\n // const attachment = attachments.shift();\n // storage.deletePackage(attachment, function (): void {\n // unlinkNext(cb);\n // });\n // };\n\n // unlinkNext(function (): void {\n // // try to unlink the directory, but ignore errors because it can fail\n // storage.removePackage(function (err): void {\n // callback(err);\n // });\n // });\n // }\n\n /**\n * Ensure the dist file remains as the same protocol\n * @param {Object} hash metadata\n * @param {String} upLinkKey registry key\n * @private\n */\n private _updateUplinkToRemoteProtocol(hash: DistFile, upLinkKey: string): void {\n // if we got this information from a known registry,\n // use the same protocol for the tarball\n //\n // see https://github.com/rlidwka/sinopia/issues/166\n const tarballUrl: any = UrlNode.parse(hash.url);\n const uplinkUrl: any = UrlNode.parse(this.config.uplinks[upLinkKey].url);\n\n if (uplinkUrl.host === tarballUrl.host) {\n tarballUrl.protocol = uplinkUrl.protocol;\n hash.registry = upLinkKey;\n hash.url = UrlNode.format(tarballUrl);\n }\n }\n\n public async getSecret(config: Config): Promise<void> {\n const secretKey = await this.storagePlugin.getSecret();\n\n return this.storagePlugin.setSecret(config.checkSecretKey(secretKey));\n }\n\n private _loadStorage(config: Config, logger: Logger): IPluginStorage {\n const Storage = this._loadStorePlugin();\n\n if (_.isNil(Storage)) {\n assert(this.config.storage, 'CONFIG: storage path not defined');\n return new LocalDatabase(this.config, logger);\n }\n return Storage as IPluginStorage;\n }\n\n private _loadStorePlugin(): IPluginStorage | void {\n const plugin_params = {\n config: this.config,\n logger: this.logger,\n };\n\n const plugins: IPluginStorage[] = loadPlugin<IPluginStorage>(\n this.config,\n this.config.store,\n plugin_params,\n (plugin): IPluginStorage => {\n return plugin.getPackageStorage;\n }\n );\n\n return _.head(plugins);\n }\n\n public saveToken(token: Token): Promise<any> {\n if (_.isFunction(this.storagePlugin.saveToken) === false) {\n return Promise.reject(\n errorUtils.getCode(HTTP_STATUS.SERVICE_UNAVAILABLE, SUPPORT_ERRORS.PLUGIN_MISSING_INTERFACE)\n );\n }\n\n return this.storagePlugin.saveToken(token);\n }\n\n public deleteToken(user: string, tokenKey: string): Promise<any> {\n if (_.isFunction(this.storagePlugin.deleteToken) === false) {\n return Promise.reject(\n errorUtils.getCode(HTTP_STATUS.SERVICE_UNAVAILABLE, SUPPORT_ERRORS.PLUGIN_MISSING_INTERFACE)\n );\n }\n\n return this.storagePlugin.deleteToken(user, tokenKey);\n }\n\n public readTokens(filter: TokenFilter): Promise<Token[]> {\n if (_.isFunction(this.storagePlugin.readTokens) === false) {\n return Promise.reject(\n errorUtils.getCode(HTTP_STATUS.SERVICE_UNAVAILABLE, SUPPORT_ERRORS.PLUGIN_MISSING_INTERFACE)\n );\n }\n\n return this.storagePlugin.readTokens(filter);\n }\n}\n\nexport { LocalStorage };\n"],"file":"local-storage.js"}
package/build/search.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import lunrMutable from 'lunr-mutable-indexes';
2
- import { Version } from '@verdaccio/types';
3
- import { ProxyList, ProxySearchParams } from '@verdaccio/proxy';
4
2
  import { searchUtils } from '@verdaccio/core';
3
+ import { ProxyList, ProxySearchParams } from '@verdaccio/proxy';
4
+ import { Version } from '@verdaccio/types';
5
5
  import { LocalStorage } from './local-storage';
6
6
  import { Storage } from './storage';
7
7
  export interface ISearchResult {
@@ -23,6 +23,12 @@ export declare class SearchManager {
23
23
  readonly localStorage: LocalStorage;
24
24
  constructor(uplinks: ProxyList, storage: LocalStorage);
25
25
  get proxyList(): string[];
26
+ /**
27
+ * Handle search on packages and proxies.
28
+ * Iterate all proxies configured and search in all endpoints in v2 and pipe all responses
29
+ * to a stream, once the proxies request has finished search in local storage for all packages
30
+ * (privated and cached).
31
+ */
26
32
  search(options: ProxySearchParams): Promise<searchUtils.SearchPackageItem[]>;
27
33
  /**
28
34
  * Consume the upstream and pipe it to a transformable stream.
package/build/search.js CHANGED
@@ -3,31 +3,27 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports.SearchManager = exports.SearchInstance = void 0;
6
7
  exports.removeDuplicates = removeDuplicates;
7
- exports.SearchInstance = exports.SearchManager = void 0;
8
8
 
9
- var _stream = require("stream");
9
+ var _debug = _interopRequireDefault(require("debug"));
10
+
11
+ var _lodash = _interopRequireDefault(require("lodash"));
10
12
 
11
13
  var _lunr = _interopRequireDefault(require("lunr"));
12
14
 
13
15
  var _lunrMutableIndexes = _interopRequireDefault(require("lunr-mutable-indexes"));
14
16
 
15
- var _lodash = _interopRequireDefault(require("lodash"));
17
+ var _stream = require("stream");
16
18
 
17
- var _debug = _interopRequireDefault(require("debug"));
19
+ var _core = require("@verdaccio/core");
18
20
 
19
21
  var _logger = require("@verdaccio/logger");
20
22
 
21
- var _core = require("@verdaccio/core");
22
-
23
23
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
24
24
 
25
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
26
-
27
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
28
-
29
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
30
-
25
+ /* eslint-disable @typescript-eslint/no-unused-vars */
26
+ // eslint-disable no-invalid-this
31
27
  const debug = (0, _debug.default)('verdaccio:storage:search');
32
28
 
33
29
  function removeDuplicates(results) {
@@ -83,10 +79,6 @@ class TransFormResults extends _stream.Transform {
83
79
 
84
80
  class SearchManager {
85
81
  constructor(uplinks, storage) {
86
- _defineProperty(this, "uplinks", void 0);
87
-
88
- _defineProperty(this, "localStorage", void 0);
89
-
90
82
  this.uplinks = uplinks;
91
83
  this.localStorage = storage;
92
84
  }
@@ -95,6 +87,13 @@ class SearchManager {
95
87
  const uplinksList = Object.keys(this.uplinks);
96
88
  return uplinksList;
97
89
  }
90
+ /**
91
+ * Handle search on packages and proxies.
92
+ * Iterate all proxies configured and search in all endpoints in v2 and pipe all responses
93
+ * to a stream, once the proxies request has finished search in local storage for all packages
94
+ * (privated and cached).
95
+ */
96
+
98
97
 
99
98
  async search(options) {
100
99
  const transformResults = new TransFormResults({
@@ -163,11 +162,8 @@ class SearchManager {
163
162
 
164
163
 
165
164
  consumeSearchStream(uplinkId, uplink, options, searchPassThrough) {
166
- // TODO: review how to handle abort
167
- const abortController = new AbortController();
168
- return uplink.search(_objectSpread(_objectSpread({}, options), {}, {
169
- abort: abortController
170
- })).then(bodyStream => {
165
+ return uplink.search({ ...options
166
+ }).then(bodyStream => {
171
167
  bodyStream.pipe(searchPassThrough, {
172
168
  end: false
173
169
  });
@@ -198,10 +194,6 @@ class Search {
198
194
  * Constructor.
199
195
  */
200
196
  constructor() {
201
- _defineProperty(this, "index", void 0);
202
-
203
- _defineProperty(this, "storage", void 0);
204
-
205
197
  this.index = (0, _lunrMutableIndexes.default)(function () {
206
198
  // FIXME: there is no types for this library
207
199
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/search.ts"],"names":["debug","removeDuplicates","results","pkgNames","filter","pkg","includes","package","name","push","TransFormResults","Transform","constructor","options","_transform","chunk","_encoding","callback","_","isArray","pkgItem","forEach","SearchManager","uplinks","storage","localStorage","proxyList","uplinksList","Object","keys","search","transformResults","objectMode","streamPassThrough","PassThrough","upLinkList","searchUplinksStreams","map","uplinkId","uplink","logger","fatal","Error","consumeSearchStream","Promise","all","err","error","emit","query","data","outPutStream","errorUtils","getInternalError","message","on","resolve","checkAccessPromises","length","searchPassThrough","abortController","AbortController","abort","then","bodyStream","pipe","end","Search","index","field","boost","builder","pipeline","remove","lunr","stemmer","init","storagePlugin","get","items","ref","score","add","id","description","version","keywords","author","_npmUser","reindex","getLocalDatabase","packages","i","configureStorage","SearchInstance"],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\n// eslint-disable no-invalid-this\n\nimport { PassThrough, Transform, pipeline } from 'stream';\nimport lunr from 'lunr';\nimport lunrMutable from 'lunr-mutable-indexes';\nimport _ from 'lodash';\nimport buildDebug from 'debug';\nimport { logger } from '@verdaccio/logger';\nimport { Version } from '@verdaccio/types';\nimport { IProxy, ProxyList, ProxySearchParams } from '@verdaccio/proxy';\nimport { VerdaccioError } from '@verdaccio/commons-api';\nimport { searchUtils, errorUtils } from '@verdaccio/core';\nimport { LocalStorage } from './local-storage';\nimport { Storage } from './storage';\n\nconst debug = buildDebug('verdaccio:storage:search');\nexport interface ISearchResult {\n ref: string;\n score: number;\n}\nexport interface IWebSearch {\n index: lunrMutable.index;\n storage: Storage;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n query(query: string): ISearchResult[];\n add(pkg: Version): void;\n remove(name: string): void;\n reindex(): void;\n configureStorage(storage: Storage): void;\n}\n\nexport function removeDuplicates(results: searchUtils.SearchPackageItem[]) {\n const pkgNames: any[] = [];\n return results.filter((pkg) => {\n if (pkgNames.includes(pkg?.package?.name)) {\n return false;\n }\n pkgNames.push(pkg?.package?.name);\n return true;\n });\n}\n\nclass TransFormResults extends Transform {\n public constructor(options) {\n super(options);\n }\n\n /**\n * Transform either array of packages or a single package into a stream of packages.\n * From uplinks the chunks are array but from local packages are objects.\n * @param {string} chunk\n * @param {string} encoding\n * @param {function} done\n * @returns {void}\n * @override\n */\n public _transform(chunk, _encoding, callback) {\n if (_.isArray(chunk)) {\n (chunk as searchUtils.SearchItem[])\n .filter((pkgItem) => {\n debug(`streaming remote pkg name ${pkgItem?.package?.name}`);\n return true;\n })\n .forEach((pkgItem) => {\n this.push(pkgItem);\n });\n return callback();\n } else {\n debug(`streaming local pkg name ${chunk?.package?.name}`);\n this.push(chunk);\n return callback();\n }\n }\n}\n\nexport class SearchManager {\n public readonly uplinks: ProxyList;\n public readonly localStorage: LocalStorage;\n constructor(uplinks: ProxyList, storage: LocalStorage) {\n this.uplinks = uplinks;\n this.localStorage = storage;\n }\n\n public get proxyList() {\n const uplinksList = Object.keys(this.uplinks);\n\n return uplinksList;\n }\n\n public async search(options: ProxySearchParams): Promise<searchUtils.SearchPackageItem[]> {\n const transformResults = new TransFormResults({ objectMode: true });\n const streamPassThrough = new PassThrough({ objectMode: true });\n const upLinkList = this.proxyList;\n\n const searchUplinksStreams = upLinkList.map((uplinkId) => {\n const uplink = this.uplinks[uplinkId];\n if (!uplink) {\n // this should never tecnically happens\n logger.fatal({ uplinkId }, 'uplink @upLinkId not found');\n throw new Error(`uplink ${uplinkId} not found`);\n }\n return this.consumeSearchStream(uplinkId, uplink, options, streamPassThrough);\n });\n\n try {\n debug('search uplinks');\n await Promise.all([...searchUplinksStreams]);\n debug('search uplinks done');\n } catch (err) {\n logger.error({ err }, ' error on uplinks search @{err}');\n streamPassThrough.emit('error', err);\n throw err;\n }\n debug('search local');\n await this.localStorage.search(streamPassThrough, options.query as searchUtils.SearchQuery);\n\n const data: searchUtils.SearchPackageItem[] = [];\n const outPutStream = new PassThrough({ objectMode: true });\n pipeline(streamPassThrough, transformResults, outPutStream, (err) => {\n if (err) {\n throw errorUtils.getInternalError(err ? err.message : 'unknown error');\n } else {\n debug('Pipeline succeeded.');\n }\n });\n\n outPutStream.on('data', (chunk) => {\n data.push(chunk);\n });\n\n return new Promise((resolve) => {\n outPutStream.on('finish', async () => {\n const checkAccessPromises: searchUtils.SearchPackageItem[] = removeDuplicates(data);\n debug('stream finish event %s', checkAccessPromises.length);\n return resolve(checkAccessPromises);\n });\n debug('search done');\n });\n }\n\n /**\n * Consume the upstream and pipe it to a transformable stream.\n */\n private consumeSearchStream(\n uplinkId: string,\n uplink: IProxy,\n options: ProxySearchParams,\n searchPassThrough: PassThrough\n ): Promise<any> {\n // TODO: review how to handle abort\n const abortController = new AbortController();\n return uplink.search({ ...options, abort: abortController }).then((bodyStream) => {\n bodyStream.pipe(searchPassThrough, { end: false });\n bodyStream.on('error', (err: VerdaccioError): void => {\n logger.error(\n { uplinkId, err: err },\n 'search error for uplink @{uplinkId}: @{err?.message}'\n );\n searchPassThrough.end();\n });\n return new Promise((resolve) => bodyStream.on('end', resolve));\n });\n }\n}\n\n/**\n * Handle the search Indexer.\n */\nclass Search implements IWebSearch {\n public readonly index: lunrMutable.index;\n // @ts-ignore\n public storage: Storage;\n\n /**\n * Constructor.\n */\n public constructor() {\n this.index = lunrMutable(function (): void {\n // FIXME: there is no types for this library\n /* eslint no-invalid-this:off */\n // @ts-ignore\n this.field('name', { boost: 10 });\n // @ts-ignore\n this.field('description', { boost: 4 });\n // @ts-ignore\n this.field('author', { boost: 6 });\n // @ts-ignore\n this.field('keywords', { boost: 7 });\n // @ts-ignore\n this.field('version');\n // @ts-ignore\n this.field('readme');\n });\n\n this.index.builder.pipeline.remove(lunr.stemmer);\n }\n\n public init() {\n return Promise.resolve();\n }\n\n /**\n * Performs a query to the indexer.\n * If the keyword is a * it returns all local elements\n * otherwise performs a search\n * @param {*} q the keyword\n * @return {Array} list of results.\n */\n public query(query: string): ISearchResult[] {\n const localStorage = this.storage.localStorage as LocalStorage;\n\n return query === '*'\n ? (localStorage.storagePlugin as any).get((items): any => {\n items.map(function (pkg): any {\n return { ref: pkg, score: 1 };\n });\n })\n : this.index.search(`*${query}*`);\n }\n\n /**\n * Add a new element to index\n * @param {*} pkg the package\n */\n public add(pkg: Version): void {\n this.index.add({\n id: pkg.name,\n name: pkg.name,\n description: pkg.description,\n version: `v${pkg.version}`,\n keywords: pkg.keywords,\n author: pkg._npmUser ? pkg._npmUser.name : '???',\n });\n }\n\n /**\n * Remove an element from the index.\n * @param {*} name the id element\n */\n public remove(name: string): void {\n this.index.remove({ id: name });\n }\n\n /**\n * Force a re-index.\n */\n public reindex(): void {\n this.storage.getLocalDatabase((error, packages): void => {\n if (error) {\n // that function shouldn't produce any\n throw error;\n }\n let i = packages.length;\n while (i--) {\n this.add(packages[i]);\n }\n });\n }\n\n /**\n * Set up the {Storage}\n * @param {*} storage An storage reference.\n */\n public configureStorage(storage: Storage): void {\n this.storage = storage;\n this.reindex();\n }\n}\n\nconst SearchInstance = new Search();\n\nexport { SearchInstance };\n"],"file":"search.js"}
1
+ {"version":3,"sources":["../src/search.ts"],"names":["debug","removeDuplicates","results","pkgNames","filter","pkg","includes","package","name","push","TransFormResults","Transform","constructor","options","_transform","chunk","_encoding","callback","_","isArray","pkgItem","forEach","SearchManager","uplinks","storage","localStorage","proxyList","uplinksList","Object","keys","search","transformResults","objectMode","streamPassThrough","PassThrough","upLinkList","searchUplinksStreams","map","uplinkId","uplink","logger","fatal","Error","consumeSearchStream","Promise","all","err","error","emit","query","data","outPutStream","errorUtils","getInternalError","message","on","resolve","checkAccessPromises","length","searchPassThrough","then","bodyStream","pipe","end","Search","index","field","boost","builder","pipeline","remove","lunr","stemmer","init","storagePlugin","get","items","ref","score","add","id","description","version","keywords","author","_npmUser","reindex","getLocalDatabase","packages","i","configureStorage","SearchInstance"],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\n// eslint-disable no-invalid-this\nimport buildDebug from 'debug';\nimport _ from 'lodash';\nimport lunr from 'lunr';\nimport lunrMutable from 'lunr-mutable-indexes';\nimport { PassThrough, Transform, pipeline } from 'stream';\n\nimport { VerdaccioError } from '@verdaccio/core';\nimport { errorUtils, searchUtils } from '@verdaccio/core';\nimport { logger } from '@verdaccio/logger';\nimport { IProxy, ProxyList, ProxySearchParams } from '@verdaccio/proxy';\nimport { Version } from '@verdaccio/types';\n\nimport { LocalStorage } from './local-storage';\nimport { Storage } from './storage';\n\nconst debug = buildDebug('verdaccio:storage:search');\nexport interface ISearchResult {\n ref: string;\n score: number;\n}\nexport interface IWebSearch {\n index: lunrMutable.index;\n storage: Storage;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n query(query: string): ISearchResult[];\n add(pkg: Version): void;\n remove(name: string): void;\n reindex(): void;\n configureStorage(storage: Storage): void;\n}\n\nexport function removeDuplicates(results: searchUtils.SearchPackageItem[]) {\n const pkgNames: any[] = [];\n return results.filter((pkg) => {\n if (pkgNames.includes(pkg?.package?.name)) {\n return false;\n }\n pkgNames.push(pkg?.package?.name);\n return true;\n });\n}\n\nclass TransFormResults extends Transform {\n public constructor(options) {\n super(options);\n }\n\n /**\n * Transform either array of packages or a single package into a stream of packages.\n * From uplinks the chunks are array but from local packages are objects.\n * @param {string} chunk\n * @param {string} encoding\n * @param {function} done\n * @returns {void}\n * @override\n */\n public _transform(chunk, _encoding, callback) {\n if (_.isArray(chunk)) {\n (chunk as searchUtils.SearchItem[])\n .filter((pkgItem) => {\n debug(`streaming remote pkg name ${pkgItem?.package?.name}`);\n return true;\n })\n .forEach((pkgItem) => {\n this.push(pkgItem);\n });\n return callback();\n } else {\n debug(`streaming local pkg name ${chunk?.package?.name}`);\n this.push(chunk);\n return callback();\n }\n }\n}\n\nexport class SearchManager {\n public readonly uplinks: ProxyList;\n public readonly localStorage: LocalStorage;\n constructor(uplinks: ProxyList, storage: LocalStorage) {\n this.uplinks = uplinks;\n this.localStorage = storage;\n }\n\n public get proxyList() {\n const uplinksList = Object.keys(this.uplinks);\n\n return uplinksList;\n }\n\n /**\n * Handle search on packages and proxies.\n * Iterate all proxies configured and search in all endpoints in v2 and pipe all responses\n * to a stream, once the proxies request has finished search in local storage for all packages\n * (privated and cached).\n */\n public async search(options: ProxySearchParams): Promise<searchUtils.SearchPackageItem[]> {\n const transformResults = new TransFormResults({ objectMode: true });\n const streamPassThrough = new PassThrough({ objectMode: true });\n const upLinkList = this.proxyList;\n\n const searchUplinksStreams = upLinkList.map((uplinkId) => {\n const uplink = this.uplinks[uplinkId];\n if (!uplink) {\n // this should never tecnically happens\n logger.fatal({ uplinkId }, 'uplink @upLinkId not found');\n throw new Error(`uplink ${uplinkId} not found`);\n }\n return this.consumeSearchStream(uplinkId, uplink, options, streamPassThrough);\n });\n\n try {\n debug('search uplinks');\n await Promise.all([...searchUplinksStreams]);\n debug('search uplinks done');\n } catch (err) {\n logger.error({ err }, ' error on uplinks search @{err}');\n streamPassThrough.emit('error', err);\n throw err;\n }\n debug('search local');\n await this.localStorage.search(streamPassThrough, options.query as searchUtils.SearchQuery);\n\n const data: searchUtils.SearchPackageItem[] = [];\n const outPutStream = new PassThrough({ objectMode: true });\n pipeline(streamPassThrough, transformResults, outPutStream, (err) => {\n if (err) {\n throw errorUtils.getInternalError(err ? err.message : 'unknown error');\n } else {\n debug('Pipeline succeeded.');\n }\n });\n\n outPutStream.on('data', (chunk) => {\n data.push(chunk);\n });\n\n return new Promise((resolve) => {\n outPutStream.on('finish', async () => {\n const checkAccessPromises: searchUtils.SearchPackageItem[] = removeDuplicates(data);\n debug('stream finish event %s', checkAccessPromises.length);\n return resolve(checkAccessPromises);\n });\n debug('search done');\n });\n }\n\n /**\n * Consume the upstream and pipe it to a transformable stream.\n */\n private consumeSearchStream(\n uplinkId: string,\n uplink: IProxy,\n options: ProxySearchParams,\n searchPassThrough: PassThrough\n ): Promise<any> {\n return uplink.search({ ...options }).then((bodyStream) => {\n bodyStream.pipe(searchPassThrough, { end: false });\n bodyStream.on('error', (err: VerdaccioError): void => {\n logger.error(\n { uplinkId, err: err },\n 'search error for uplink @{uplinkId}: @{err?.message}'\n );\n searchPassThrough.end();\n });\n return new Promise((resolve) => bodyStream.on('end', resolve));\n });\n }\n}\n\n/**\n * Handle the search Indexer.\n */\nclass Search implements IWebSearch {\n public readonly index: lunrMutable.index;\n // @ts-ignore\n public storage: Storage;\n\n /**\n * Constructor.\n */\n public constructor() {\n this.index = lunrMutable(function (): void {\n // FIXME: there is no types for this library\n /* eslint no-invalid-this:off */\n // @ts-ignore\n this.field('name', { boost: 10 });\n // @ts-ignore\n this.field('description', { boost: 4 });\n // @ts-ignore\n this.field('author', { boost: 6 });\n // @ts-ignore\n this.field('keywords', { boost: 7 });\n // @ts-ignore\n this.field('version');\n // @ts-ignore\n this.field('readme');\n });\n\n this.index.builder.pipeline.remove(lunr.stemmer);\n }\n\n public init() {\n return Promise.resolve();\n }\n\n /**\n * Performs a query to the indexer.\n * If the keyword is a * it returns all local elements\n * otherwise performs a search\n * @param {*} q the keyword\n * @return {Array} list of results.\n */\n public query(query: string): ISearchResult[] {\n const localStorage = this.storage.localStorage as LocalStorage;\n\n return query === '*'\n ? (localStorage.storagePlugin as any).get((items): any => {\n items.map(function (pkg): any {\n return { ref: pkg, score: 1 };\n });\n })\n : this.index.search(`*${query}*`);\n }\n\n /**\n * Add a new element to index\n * @param {*} pkg the package\n */\n public add(pkg: Version): void {\n this.index.add({\n id: pkg.name,\n name: pkg.name,\n description: pkg.description,\n version: `v${pkg.version}`,\n keywords: pkg.keywords,\n author: pkg._npmUser ? pkg._npmUser.name : '???',\n });\n }\n\n /**\n * Remove an element from the index.\n * @param {*} name the id element\n */\n public remove(name: string): void {\n this.index.remove({ id: name });\n }\n\n /**\n * Force a re-index.\n */\n public reindex(): void {\n this.storage.getLocalDatabase((error, packages): void => {\n if (error) {\n // that function shouldn't produce any\n throw error;\n }\n let i = packages.length;\n while (i--) {\n this.add(packages[i]);\n }\n });\n }\n\n /**\n * Set up the {Storage}\n * @param {*} storage An storage reference.\n */\n public configureStorage(storage: Storage): void {\n this.storage = storage;\n this.reindex();\n }\n}\n\nconst SearchInstance = new Search();\n\nexport { SearchInstance };\n"],"file":"search.js"}
@@ -1,4 +1,4 @@
1
- import { Package, Version, Author, StringValue } from '@verdaccio/types';
1
+ import { Package, StringValue, Version } from '@verdaccio/types';
2
2
  import { LocalStorage } from './local-storage';
3
3
  export declare const STORAGE: {
4
4
  PACKAGE_FILE_NAME: string;
@@ -15,7 +15,6 @@ export declare function normalizePackage(pkg: Package): Package;
15
15
  export declare function generateRevision(rev: string): string;
16
16
  export declare function getLatestReadme(pkg: Package): string;
17
17
  export declare function cleanUpReadme(version: any): Version;
18
- export declare function normalizeContributors(contributors: Author[]): Author[];
19
18
  export declare const WHITELIST: string[];
20
19
  export declare function cleanUpLinksRef(result: Package, keepUpLinkData?: boolean): Package;
21
20
  /**