@verdaccio/store 6.0.0-6-next.20 → 6.0.0-6-next.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +25 -0
- package/build/local-storage.js +6 -0
- package/build/local-storage.js.map +1 -1
- package/build/search.d.ts +0 -43
- package/build/search.js +31 -142
- package/build/search.js.map +1 -1
- package/build/storage-utils.js +1 -5
- package/build/storage-utils.js.map +1 -1
- package/build/storage.js +2 -10
- package/build/storage.js.map +1 -1
- package/package.json +12 -15
- package/src/local-storage.ts +6 -0
- package/src/search.ts +21 -124
- package/src/storage-utils.ts +1 -5
- package/src/storage.ts +2 -9
- package/test/search.spec.ts +0 -65
- package/test/storage.spec.ts +1 -1
package/build/storage.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/storage.ts"],"names":["semver","lte","process","version","global","AbortController","require","debug","Storage","constructor","config","uplinks","Object","keys","logger","child","module","filters","localStorage","searchManager","init","LocalStorage","getSecret","SearchManager","addPackage","name","metadata","callback","_isAllowPublishOffline","_syncUplinksMetadata","bind","err","addPackageNext","publish","_","isBoolean","allow_offline","readTokens","filter","saveToken","token","deleteToken","user","tokenKey","addVersion","tag","addVersionNext","mergeTags","tagHash","changePackage","revision","changePackageNext","removePackage","SearchInstance","remove","removeTarball","filename","addTarball","getTarball","readStream","ReadTarball","abort","self","localStream","isOpen","on","status","HTTP_STATUS","NOT_FOUND","emit","err404","getPackageMetadata","info","isNil","_distfiles","serveFile","v","pipe","file","uplink","uplinkId","packages","ProxyStorage","url","cache","_autogenerated","savestream","on_open","rstream2","fetchTarball","done","warn","fileName","getPackageByVersion","options","queryVersion","errorUtils","getNotFound","API_ERROR","VERSION_NOT_EXIST","convertedManifest","getPackageNext","versions","requestOptions","url_prefix","DIST_TAGS","matchedDisTagVersion","disTagVersion","getPackageManifest","manifest","getPackageByOptions","data","getPackageMetadataNext","INTERNAL_ERROR","_syncUplinksMetadataNext","req","uplinksLook","keepUpLinkData","error","message","Promise","resolve","reject","getPackageSynUpLinksCallback","result","uplinkErrors","normalizedPkg","assign","_attachments","length","getPackage","getLocalDatabase","storagePlugin","get","then","locals","itemPkg","pkgMetadata","latest","timeList","time","users","push","package","catch","packageInfo","found","upLinks","hasToLookIntoUplinks","async","map","upLink","cb","_options","upLinkMeta","_uplinks","upname","validatioUtils","isObject","fetched","Date","now","maxage","etag","getRemoteMetadata","upLinkResponse","eTag","remoteStatus","getInternalError","validateMetadata","sub","pkgUtils","mergeVersions","upLinksErrors","Array","isArray","uplinkTimeoutError","i","j","code","getServiceUnavailable","NO_PACKAGE","updateVersions","packageJsonLocal","filterErrors","filter_metadata","concat","_updateVersionsHiddenUpLink","prototype","hasOwnProperty","call","Symbol","for"],"mappings":"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","sourcesContent":["import assert from 'assert';\nimport async, { AsyncResultArrayCallback } from 'async';\nimport buildDebug from 'debug';\nimport _ from 'lodash';\nimport semver from 'semver';\n\nimport { hasProxyTo } from '@verdaccio/config';\nimport {\n API_ERROR,\n DIST_TAGS,\n HTTP_STATUS,\n errorUtils,\n pkgUtils,\n validatioUtils,\n} from '@verdaccio/core';\nimport { logger } from '@verdaccio/logger';\nimport { ProxyStorage } from '@verdaccio/proxy';\nimport { IProxy, ProxyList } from '@verdaccio/proxy';\nimport { ReadTarball } from '@verdaccio/streams';\nimport {\n convertDistRemoteToLocalTarballUrls,\n convertDistVersionToLocalTarballsUrl,\n} from '@verdaccio/tarball';\nimport {\n Callback,\n CallbackAction,\n Config,\n DistFile,\n GenericBody,\n IReadTarball,\n IUploadTarball,\n Logger,\n MergeTags,\n Package,\n StringValue,\n Token,\n TokenFilter,\n Version,\n Versions,\n} from '@verdaccio/types';\nimport { getVersion, normalizeDistTags } from '@verdaccio/utils';\n\nimport { LocalStorage } from './local-storage';\nimport { SearchInstance, SearchManager } from './search';\n// import { isPublishablePackage, validateInputs } from './star-utils';\nimport {\n checkPackageLocal,\n checkPackageRemote,\n cleanUpLinksRef,\n generatePackageTemplate,\n mergeUplinkTimeIntoLocal,\n publishPackage,\n} from './storage-utils';\nimport { IGetPackageOptions, IGetPackageOptionsNext, IPluginFilters, ISyncUplinks } from './type';\n// import { StarBody, Users } from './type';\nimport { setupUpLinks, updateVersionsHiddenUpLink } from './uplink-util';\n\nif (semver.lte(process.version, 'v15.0.0')) {\n global.AbortController = require('abortcontroller-polyfill/dist/cjs-ponyfill').AbortController;\n}\n\nconst debug = buildDebug('verdaccio:storage');\nclass Storage {\n public localStorage: LocalStorage;\n public searchManager: SearchManager | null;\n public readonly config: Config;\n public readonly logger: Logger;\n public readonly uplinks: ProxyList;\n public filters: IPluginFilters;\n\n public constructor(config: Config) {\n this.config = config;\n this.uplinks = setupUpLinks(config);\n debug('uplinks available %o', Object.keys(this.uplinks));\n this.logger = logger.child({ module: 'storage' });\n this.filters = [];\n // @ts-ignore\n this.localStorage = null;\n this.searchManager = null;\n }\n\n public async init(config: Config, filters: IPluginFilters = []): Promise<void> {\n if (this.localStorage === null) {\n this.filters = filters || [];\n debug('filters available %o', filters);\n this.localStorage = new LocalStorage(this.config, logger);\n await this.localStorage.init();\n debug('local init storage initialized');\n await this.localStorage.getSecret(config);\n debug('local storage secret initialized');\n this.searchManager = new SearchManager(this.uplinks, this.localStorage);\n } else {\n debug('storage has been already initialized');\n }\n return;\n }\n\n /**\n * Add a {name} package to a system\n Function checks if package with the same name is available from uplinks.\n If it isn't, we create package locally\n Used storages: local (write) && uplinks\n */\n public async addPackage(name: string, metadata: any, callback: Function): Promise<void> {\n try {\n debug('add package for %o', name);\n await checkPackageLocal(name, this.localStorage);\n debug('look up remote for %o', name);\n await checkPackageRemote(\n name,\n this._isAllowPublishOffline(),\n this._syncUplinksMetadata.bind(this)\n );\n debug('publishing a package for %o', name);\n await publishPackage(name, metadata, this.localStorage as LocalStorage);\n // TODO: return published data and replace callback by a promise\n callback(null, true);\n } catch (err: any) {\n debug('error on add a package for %o with error %o', name, err);\n callback(err);\n }\n }\n\n /**\n * Add a {name} package to a system\n Function checks if package with the same name is available from uplinks.\n If it isn't, we create package locally\n Used storages: local (write) && uplinks\n */\n public async addPackageNext(name: string, metadata: Package): Promise<Package> {\n try {\n debug('add package for %o', name);\n await checkPackageLocal(name, this.localStorage);\n debug('look up remote for %o', name);\n await checkPackageRemote(\n name,\n this._isAllowPublishOffline(),\n this._syncUplinksMetadata.bind(this)\n );\n debug('publishing a package for %o', name);\n // FIXME: publishPackage should return fresh metadata from backend\n // instead return metadata\n await publishPackage(name, metadata, this.localStorage as LocalStorage);\n return metadata;\n } catch (err: any) {\n debug('error on add a package for %o with error %o', name, err);\n throw err;\n }\n }\n\n private _isAllowPublishOffline(): boolean {\n return (\n typeof this.config.publish !== 'undefined' &&\n _.isBoolean(this.config.publish.allow_offline) &&\n this.config.publish.allow_offline\n );\n }\n\n public readTokens(filter: TokenFilter): Promise<Token[]> {\n return this.localStorage.readTokens(filter);\n }\n\n public saveToken(token: Token): Promise<void> {\n return this.localStorage.saveToken(token);\n }\n\n public deleteToken(user: string, tokenKey: string): Promise<any> {\n return this.localStorage.deleteToken(user, tokenKey);\n }\n\n /**\n * Add a new version of package {name} to a system\n Used storages: local (write)\n */\n public addVersion(\n name: string,\n version: string,\n metadata: Version,\n tag: StringValue,\n callback: CallbackAction\n ): void {\n debug('add the version %o for package %o', version, name);\n this.localStorage.addVersion(name, version, metadata, tag, callback);\n }\n\n public async addVersionNext(\n name: string,\n version: string,\n metadata: Version,\n tag: StringValue\n ): Promise<void> {\n debug('add the version %o for package %o', version, name);\n return this.localStorage.addVersionNext(name, version, metadata, tag);\n }\n\n /**\n * Tags a package version with a provided tag\n Used storages: local (write)\n */\n public mergeTags(name: string, tagHash: MergeTags, callback: CallbackAction): void {\n debug('merge tags for package %o tags %o', name, tagHash);\n this.localStorage.mergeTags(name, tagHash, callback);\n }\n\n /**\n * Change an existing package (i.e. unpublish one version)\n Function changes a package info from local storage and all uplinks with write access./\n Used storages: local (write)\n */\n public changePackage(\n name: string,\n metadata: Package,\n revision: string,\n callback: Callback\n ): void {\n debug('change existing package for package %o revision %o', name, revision);\n this.localStorage.changePackage(name, metadata, revision, callback);\n }\n\n /**\n * Change an existing package (i.e. unpublish one version)\n Function changes a package info from local storage and all uplinks with write access./\n Used storages: local (write)\n */\n public async changePackageNext(name: string, metadata: Package, revision: string): Promise<void> {\n debug('change existing package for package %o revision %o', name, revision);\n this.localStorage.changePackageNext(name, metadata, revision);\n }\n\n /**\n * Remove a package from a system\n Function removes a package from local storage\n Used storages: local (write)\n */\n public async removePackage(name: string): Promise<void> {\n debug('remove packagefor package %o', name);\n await this.localStorage.removePackage(name);\n // update the indexer\n SearchInstance.remove(name);\n }\n\n /**\n Remove a tarball from a system\n Function removes a tarball from local storage.\n Tarball in question should not be linked to in any existing\n versions, i.e. package version should be unpublished first.\n Used storage: local (write)\n */\n public removeTarball(\n name: string,\n filename: string,\n revision: string,\n callback: CallbackAction\n ): void {\n this.localStorage.removeTarball(name, filename, revision, callback);\n }\n\n /**\n * Upload a tarball for {name} package\n Function is synchronous and returns a WritableStream\n Used storages: local (write)\n */\n public addTarball(name: string, filename: string): IUploadTarball {\n debug('add tarball for package %o', name);\n return this.localStorage.addTarball(name, filename);\n }\n\n /**\n Get a tarball from a storage for {name} package\n Function is synchronous and returns a ReadableStream\n Function tries to read tarball locally, if it fails then it reads package\n information in order to figure out where we can get this tarball from\n Used storages: local || uplink (just one)\n */\n public getTarball(name: string, filename: string): IReadTarball {\n debug('get tarball for package %o filename %o', name, filename);\n const readStream = new ReadTarball({});\n readStream.abort = function () {};\n\n const self = this;\n\n // if someone requesting tarball, it means that we should already have some\n // information about it, so fetching package info is unnecessary\n\n // trying local first\n // flow: should be IReadTarball\n let localStream: any = self.localStorage.getTarball(name, filename);\n let isOpen = false;\n localStream.on('error', (err): any => {\n if (isOpen || err.status !== HTTP_STATUS.NOT_FOUND) {\n return readStream.emit('error', err);\n }\n\n // local reported 404\n const err404 = err;\n localStream.abort();\n localStream = null; // we force for garbage collector\n self.localStorage.getPackageMetadata(name, (err, info: Package): void => {\n if (_.isNil(err) && info._distfiles && _.isNil(info._distfiles[filename]) === false) {\n // information about this file exists locally\n serveFile(info._distfiles[filename]);\n } else {\n // we know nothing about this file, trying to get information elsewhere\n self._syncUplinksMetadata(name, info, {}, (err, info: Package): any => {\n if (_.isNil(err) === false) {\n return readStream.emit('error', err);\n }\n if (_.isNil(info._distfiles) || _.isNil(info._distfiles[filename])) {\n return readStream.emit('error', err404);\n }\n serveFile(info._distfiles[filename]);\n });\n }\n });\n });\n localStream.on('content-length', function (v): void {\n readStream.emit('content-length', v);\n });\n\n localStream.on('open', function (): void {\n isOpen = true;\n localStream.pipe(readStream);\n });\n return readStream;\n\n /**\n * Fetch and cache local/remote packages.\n * @param {Object} file define the package shape\n */\n function serveFile(file: DistFile): void {\n let uplink: any = null;\n\n for (const uplinkId in self.uplinks) {\n // https://github.com/verdaccio/verdaccio/issues/1642\n if (hasProxyTo(name, uplinkId, self.config.packages)) {\n uplink = self.uplinks[uplinkId];\n }\n }\n\n if (uplink == null) {\n uplink = new ProxyStorage(\n {\n url: file.url,\n cache: true,\n _autogenerated: true,\n },\n self.config\n );\n }\n\n let savestream: IUploadTarball | null = null;\n if (uplink.config.cache) {\n savestream = self.localStorage.addTarball(name, filename);\n }\n\n let on_open = function (): void {\n // prevent it from being called twice\n on_open = function () {};\n const rstream2 = uplink.fetchTarball(file.url);\n rstream2.on('error', function (err): void {\n if (savestream) {\n savestream.abort();\n }\n savestream = null;\n readStream.emit('error', err);\n });\n rstream2.on('end', function (): void {\n if (savestream) {\n savestream.done();\n }\n });\n\n rstream2.on('content-length', function (v): void {\n readStream.emit('content-length', v);\n if (savestream) {\n savestream.emit('content-length', v);\n }\n });\n rstream2.pipe(readStream);\n if (savestream) {\n rstream2.pipe(savestream);\n }\n };\n\n if (savestream) {\n savestream.on('open', function (): void {\n on_open();\n });\n\n savestream.on('error', function (err): void {\n self.logger.warn(\n { err: err, fileName: file },\n 'error saving file @{fileName}: @{err?.message}\\n@{err.stack}'\n );\n if (savestream) {\n savestream.abort();\n }\n savestream = null;\n on_open();\n });\n } else {\n on_open();\n }\n }\n }\n\n // public async starPackage(body: StarBody, options: IGetPackageOptionsNext): Promise<void> {\n // debug('star package');\n // const manifest = await this.getPackageNext(options);\n // const newStarUser = body[constants.USERS];\n // const remoteUsername: string = options.remoteUser.name as string;\n // const localStarUsers = manifest[constants.USERS];\n // // Check is star or unstar\n // const isStar = Object.keys(newStarUser).includes(remoteUsername);\n // debug('is start? %o', isStar);\n // if (\n // _.isNil(localStarUsers) === false &&\n // validateInputs(localStarUsers, remoteUsername, isStar)\n // ) {\n // // return afterChangePackage();\n // }\n // const users: Users = isStar\n // ? {\n // ...localStarUsers,\n // [remoteUsername]: true,\n // }\n // : _.reduce(\n // localStarUsers,\n // (users, value, key) => {\n // if (key !== remoteUsername) {\n // users[key] = value;\n // }\n // return users;\n // },\n // {}\n // );\n // debug('update package for %o', name);\n // }\n\n // public async publish(body: any, options: IGetPackageOptionsNext): Promise<any> {\n // const { name } = options;\n // debug('publishing or updating a new version for %o', name);\n // // we check if the request is npm star\n // if (!isPublishablePackage(body) && isObject(body.users)) {\n // debug('starting star a package');\n // await this.starPackage(body as StarBody, options);\n // }\n\n // return { ok: API_MESSAGE.PKG_CHANGED, success: true };\n // }\n\n public async getPackageByVersion(options: IGetPackageOptionsNext): Promise<Version> {\n const queryVersion = options.version as string;\n if (_.isNil(queryVersion)) {\n throw errorUtils.getNotFound(`${API_ERROR.VERSION_NOT_EXIST}: ${queryVersion}`);\n }\n\n // we have version, so we need to return specific version\n const [convertedManifest] = await this.getPackageNext(options);\n\n const version: Version | undefined = getVersion(convertedManifest.versions, queryVersion);\n\n debug('query by latest version %o and result %o', queryVersion, version);\n if (typeof version !== 'undefined') {\n debug('latest version found %o', version);\n return convertDistVersionToLocalTarballsUrl(\n convertedManifest.name,\n version,\n options.requestOptions,\n this.config.url_prefix\n );\n }\n\n // the version could be a dist-tag eg: beta, alpha, so we find the matched version\n // on disg-tag list\n if (_.isNil(convertedManifest[DIST_TAGS]) === false) {\n if (_.isNil(convertedManifest[DIST_TAGS][queryVersion]) === false) {\n // the version found as a distag\n const matchedDisTagVersion: string = convertedManifest[DIST_TAGS][queryVersion];\n debug('dist-tag version found %o', matchedDisTagVersion);\n const disTagVersion: Version | undefined = getVersion(\n convertedManifest.versions,\n matchedDisTagVersion\n );\n if (typeof disTagVersion !== 'undefined') {\n debug('dist-tag found %o', disTagVersion);\n return convertDistVersionToLocalTarballsUrl(\n convertedManifest.name,\n disTagVersion,\n options.requestOptions,\n this.config.url_prefix\n );\n }\n }\n } else {\n debug('dist tag not detected');\n }\n\n // we didn't find the version, not found error\n debug('package version not found %o', queryVersion);\n throw errorUtils.getNotFound(`${API_ERROR.VERSION_NOT_EXIST}: ${queryVersion}`);\n }\n\n public async getPackageManifest(options: IGetPackageOptionsNext): Promise<Package> {\n // convert dist remotes to local bars\n const [manifest] = await this.getPackageNext(options);\n const convertedManifest = convertDistRemoteToLocalTarballUrls(\n manifest,\n options.requestOptions,\n this.config.url_prefix\n );\n\n return convertedManifest;\n }\n\n /**\n * Return a manifest or version based on the options.\n * @param options {Object}\n * @returns A package manifest or specific version\n */\n public async getPackageByOptions(options: IGetPackageOptionsNext): Promise<Package | Version> {\n // if no version we return the whole manifest\n if (_.isNil(options.version) === false) {\n return this.getPackageByVersion(options);\n } else {\n return this.getPackageManifest(options);\n }\n }\n\n public async getPackageNext(options: IGetPackageOptionsNext): Promise<[Package, any[]]> {\n const { name } = options;\n debug('get package for %o', name);\n try {\n let data: Package;\n try {\n data = await this.localStorage.getPackageMetadataNext(name);\n } catch (err: any) {\n // we don't have package locally, so we need to fetch it from uplinks\n if (err && (!err.status || err.status >= HTTP_STATUS.INTERNAL_ERROR)) {\n throw err;\n }\n }\n\n // time to sync with uplinks if we have any\n debug('sync uplinks for %o', name);\n // @ts-expect-error\n return this._syncUplinksMetadataNext(name, data, {\n req: options.req,\n uplinksLook: options.uplinksLook,\n keepUpLinkData: options.keepUpLinkData,\n });\n } catch (err: any) {\n this.logger.error(\n { name, err: err.message },\n 'error on get package for @{name} with error @{err}'\n );\n throw err;\n }\n }\n\n private _syncUplinksMetadataNext(\n name: string,\n data: Package,\n { uplinksLook, keepUpLinkData, req }\n ): Promise<[Package, any[]]> {\n return new Promise((resolve, reject) => {\n this._syncUplinksMetadata(\n name,\n data,\n { req: req, uplinksLook },\n function getPackageSynUpLinksCallback(err, result: Package, uplinkErrors): void {\n if (err) {\n debug('error on sync package for %o with error %o', name, err?.message);\n return reject(err);\n }\n\n const normalizedPkg = Object.assign({}, result, {\n ...normalizeDistTags(cleanUpLinksRef(result, keepUpLinkData)),\n _attachments: {},\n });\n\n debug('no. sync uplinks errors %o', uplinkErrors?.length);\n resolve([normalizedPkg, uplinkErrors]);\n }\n );\n });\n }\n\n /**\n Retrieve a package metadata for {name} package\n Function invokes localStorage.getPackage and uplink.get_package for every\n uplink with proxy_access rights against {name} and combines results\n into one json object\n Used storages: local && uplink (proxy_access)\n\n * @param {object} options\n * @property {string} options.name Package Name\n * @property {object} options.req Express `req` object\n * @property {boolean} options.keepUpLinkData keep up link info in package meta, last update, etc.\n * @property {function} options.callback Callback for receive data\n */\n public getPackage(options: IGetPackageOptions): void {\n const { name } = options;\n debug('get package for %o', name);\n this.localStorage.getPackageMetadata(name, (err, data) => {\n if (err && (!err.status || err.status >= HTTP_STATUS.INTERNAL_ERROR)) {\n // report internal errors right away\n debug('error on get package for %o with error %o', name, err?.message);\n return options.callback(err);\n }\n\n debug('sync uplinks for %o', name);\n this._syncUplinksMetadata(\n name,\n data,\n { req: options.req, uplinksLook: options.uplinksLook },\n function getPackageSynUpLinksCallback(err, result: Package, uplinkErrors): void {\n if (err) {\n debug('error on sync package for %o with error %o', name, err?.message);\n return options.callback(err);\n }\n\n result = normalizeDistTags(cleanUpLinksRef(result, options?.keepUpLinkData));\n\n // npm can throw if this field doesn't exist\n result._attachments = {};\n\n debug('no. sync uplinks errors %o', uplinkErrors?.length);\n options.callback(null, result, uplinkErrors);\n }\n );\n });\n }\n\n /**\n * Retrieve only private local packages\n * @param {*} callback\n */\n public getLocalDatabase(callback: Callback): void {\n const self = this;\n debug('get local database');\n if (this.localStorage.storagePlugin !== null) {\n this.localStorage.storagePlugin\n .get()\n .then((locals) => {\n const packages: Version[] = [];\n const getPackage = function (itemPkg): void {\n self.localStorage.getPackageMetadata(\n locals[itemPkg],\n function (err, pkgMetadata: Package): void {\n if (_.isNil(err)) {\n const latest = pkgMetadata[DIST_TAGS].latest;\n if (latest && pkgMetadata.versions[latest]) {\n const version: Version = pkgMetadata.versions[latest];\n const timeList = pkgMetadata.time as GenericBody;\n const time = timeList[latest];\n // @ts-ignore\n version.time = time;\n\n // Add for stars api\n // @ts-ignore\n version.users = pkgMetadata.users;\n\n packages.push(version);\n } else {\n self.logger.warn(\n { package: locals[itemPkg] },\n 'package @{package} does not have a \"latest\" tag?'\n );\n }\n }\n\n if (itemPkg >= locals.length - 1) {\n callback(null, packages);\n } else {\n getPackage(itemPkg + 1);\n }\n }\n );\n };\n\n if (locals.length) {\n getPackage(0);\n } else {\n callback(null, []);\n }\n })\n .catch((err) => {\n callback(err);\n });\n } else {\n debug('local stora instance is null');\n }\n }\n\n // notas, debo migrar _syncUplinksMetadata algo mas lindo\n\n /**\n * Function fetches package metadata from uplinks and synchronizes it with local data\n if package is available locally, it MUST be provided in pkginfo\n returns callback(err, result, uplink_errors)\n */\n public _syncUplinksMetadata(\n name: string,\n packageInfo: Package,\n options: ISyncUplinks,\n callback: Callback\n ): void {\n let found = true;\n const self = this;\n const upLinks: IProxy[] = [];\n const hasToLookIntoUplinks = _.isNil(options.uplinksLook) || options.uplinksLook;\n debug('is sync uplink enabled %o', hasToLookIntoUplinks);\n\n if (!packageInfo) {\n found = false;\n packageInfo = generatePackageTemplate(name);\n }\n\n for (const uplink in this.uplinks) {\n if (hasProxyTo(name, uplink, this.config.packages) && hasToLookIntoUplinks) {\n upLinks.push(this.uplinks[uplink]);\n }\n }\n\n debug('uplink list %o', upLinks.length);\n\n async.map(\n upLinks,\n (upLink, cb): void => {\n const _options = Object.assign({}, options);\n const upLinkMeta = packageInfo._uplinks[upLink.upname];\n\n if (validatioUtils.isObject(upLinkMeta)) {\n const fetched = upLinkMeta.fetched;\n\n if (fetched && Date.now() - fetched < upLink.maxage) {\n return cb();\n }\n\n _options.etag = upLinkMeta.etag;\n }\n\n upLink.getRemoteMetadata(name, _options, (err, upLinkResponse, eTag): void => {\n if (err && err.remoteStatus === 304) {\n upLinkMeta.fetched = Date.now();\n }\n\n if (err || !upLinkResponse) {\n return cb(null, [err || errorUtils.getInternalError('no data')]);\n }\n\n try {\n validatioUtils.validateMetadata(upLinkResponse, name);\n } catch (err: any) {\n self.logger.error(\n {\n sub: 'out',\n err: err,\n },\n 'package.json validating error @{!err?.message}\\n@{err.stack}'\n );\n return cb(null, [err]);\n }\n\n packageInfo._uplinks[upLink.upname] = {\n etag: eTag,\n fetched: Date.now(),\n };\n\n packageInfo.time = mergeUplinkTimeIntoLocal(packageInfo, upLinkResponse);\n\n updateVersionsHiddenUpLink(upLinkResponse.versions, upLink);\n\n try {\n pkgUtils.mergeVersions(packageInfo, upLinkResponse);\n } catch (err: any) {\n self.logger.error(\n {\n sub: 'out',\n err: err,\n },\n 'package.json parsing error @{!err?.message}\\n@{err.stack}'\n );\n return cb(null, [err]);\n }\n\n // if we got to this point, assume that the correct package exists\n // on the uplink\n found = true;\n cb();\n });\n },\n // @ts-ignore\n (err: Error, upLinksErrors: any): AsyncResultArrayCallback<unknown, Error> => {\n assert(!err && Array.isArray(upLinksErrors));\n\n // Check for connection timeout or reset errors with uplink(s)\n // (these should be handled differently from the package not being found)\n if (!found) {\n let uplinkTimeoutError;\n for (let i = 0; i < upLinksErrors.length; i++) {\n if (upLinksErrors[i]) {\n for (let j = 0; j < upLinksErrors[i].length; j++) {\n if (upLinksErrors[i][j]) {\n const code = upLinksErrors[i][j].code;\n if (code === 'ETIMEDOUT' || code === 'ESOCKETTIMEDOUT' || code === 'ECONNRESET') {\n uplinkTimeoutError = true;\n break;\n }\n }\n }\n }\n }\n\n if (uplinkTimeoutError) {\n return callback(errorUtils.getServiceUnavailable(), null, upLinksErrors);\n }\n return callback(errorUtils.getNotFound(API_ERROR.NO_PACKAGE), null, upLinksErrors);\n }\n\n if (upLinks.length === 0) {\n return callback(null, packageInfo);\n }\n\n self.localStorage.updateVersions(\n name,\n packageInfo,\n async (err, packageJsonLocal: Package): Promise<any> => {\n if (err) {\n return callback(err);\n }\n // Any error here will cause a 404, like an uplink error. This is likely\n // the right thing to do\n // as a broken filter is a security risk.\n const filterErrors: Error[] = [];\n // This MUST be done serially and not in parallel as they modify packageJsonLocal\n for (const filter of self.filters) {\n try {\n // These filters can assume it's save to modify packageJsonLocal\n // and return it directly for\n // performance (i.e. need not be pure)\n packageJsonLocal = await filter.filter_metadata(packageJsonLocal);\n } catch (err: any) {\n filterErrors.push(err);\n }\n }\n callback(null, packageJsonLocal, _.concat(upLinksErrors, filterErrors));\n }\n );\n }\n );\n }\n\n /**\n * Set a hidden value for each version.\n * @param {Array} versions list of version\n * @param {String} upLink uplink name\n * @private\n */\n public _updateVersionsHiddenUpLink(versions: Versions, upLink: IProxy): void {\n for (const i in versions) {\n if (Object.prototype.hasOwnProperty.call(versions, i)) {\n const version = versions[i];\n\n // holds a \"hidden\" value to be used by the package storage.\n // $FlowFixMe\n version[Symbol.for('__verdaccio_uplink')] = upLink.upname;\n }\n }\n }\n}\n\nexport { Storage };\n"],"file":"storage.js"}
|
|
1
|
+
{"version":3,"sources":["../src/storage.ts"],"names":["debug","Storage","constructor","config","uplinks","Object","keys","logger","child","module","filters","localStorage","searchManager","init","LocalStorage","getSecret","SearchManager","addPackage","name","metadata","callback","_isAllowPublishOffline","_syncUplinksMetadata","bind","err","addPackageNext","publish","_","isBoolean","allow_offline","readTokens","filter","saveToken","token","deleteToken","user","tokenKey","addVersion","version","tag","addVersionNext","mergeTags","tagHash","changePackage","revision","changePackageNext","removePackage","removeTarball","filename","addTarball","getTarball","readStream","ReadTarball","abort","self","localStream","isOpen","on","status","HTTP_STATUS","NOT_FOUND","emit","err404","getPackageMetadata","info","isNil","_distfiles","serveFile","v","pipe","file","uplink","uplinkId","packages","ProxyStorage","url","cache","_autogenerated","savestream","on_open","rstream2","fetchTarball","done","warn","fileName","getPackageByVersion","options","queryVersion","errorUtils","getNotFound","API_ERROR","VERSION_NOT_EXIST","convertedManifest","getPackageNext","versions","requestOptions","url_prefix","DIST_TAGS","matchedDisTagVersion","disTagVersion","getPackageManifest","manifest","getPackageByOptions","data","getPackageMetadataNext","INTERNAL_ERROR","_syncUplinksMetadataNext","req","uplinksLook","keepUpLinkData","error","message","Promise","resolve","reject","getPackageSynUpLinksCallback","result","uplinkErrors","normalizedPkg","assign","_attachments","length","getPackage","getLocalDatabase","storagePlugin","get","then","locals","itemPkg","pkgMetadata","latest","timeList","time","users","push","package","catch","packageInfo","found","upLinks","hasToLookIntoUplinks","async","map","upLink","cb","_options","upLinkMeta","_uplinks","upname","validatioUtils","isObject","fetched","Date","now","maxage","etag","getRemoteMetadata","upLinkResponse","eTag","remoteStatus","getInternalError","validateMetadata","sub","pkgUtils","mergeVersions","upLinksErrors","Array","isArray","uplinkTimeoutError","i","j","code","getServiceUnavailable","NO_PACKAGE","updateVersions","packageJsonLocal","filterErrors","filter_metadata","concat","_updateVersionsHiddenUpLink","prototype","hasOwnProperty","call","Symbol","for"],"mappings":"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","sourcesContent":["import assert from 'assert';\nimport async, { AsyncResultArrayCallback } from 'async';\nimport buildDebug from 'debug';\nimport _ from 'lodash';\n\nimport { hasProxyTo } from '@verdaccio/config';\nimport {\n API_ERROR,\n DIST_TAGS,\n HTTP_STATUS,\n errorUtils,\n pkgUtils,\n validatioUtils,\n} from '@verdaccio/core';\nimport { logger } from '@verdaccio/logger';\nimport { ProxyStorage } from '@verdaccio/proxy';\nimport { IProxy, ProxyList } from '@verdaccio/proxy';\nimport { ReadTarball } from '@verdaccio/streams';\nimport {\n convertDistRemoteToLocalTarballUrls,\n convertDistVersionToLocalTarballsUrl,\n} from '@verdaccio/tarball';\nimport {\n Callback,\n CallbackAction,\n Config,\n DistFile,\n GenericBody,\n IReadTarball,\n IUploadTarball,\n Logger,\n MergeTags,\n Package,\n StringValue,\n Token,\n TokenFilter,\n Version,\n Versions,\n} from '@verdaccio/types';\nimport { getVersion, normalizeDistTags } from '@verdaccio/utils';\n\nimport { LocalStorage } from './local-storage';\nimport { SearchManager } from './search';\n// import { isPublishablePackage, validateInputs } from './star-utils';\nimport {\n checkPackageLocal,\n checkPackageRemote,\n cleanUpLinksRef,\n generatePackageTemplate,\n mergeUplinkTimeIntoLocal,\n publishPackage,\n} from './storage-utils';\nimport { IGetPackageOptions, IGetPackageOptionsNext, IPluginFilters, ISyncUplinks } from './type';\n// import { StarBody, Users } from './type';\nimport { setupUpLinks, updateVersionsHiddenUpLink } from './uplink-util';\n\nconst debug = buildDebug('verdaccio:storage');\nclass Storage {\n public localStorage: LocalStorage;\n public searchManager: SearchManager | null;\n public readonly config: Config;\n public readonly logger: Logger;\n public readonly uplinks: ProxyList;\n public filters: IPluginFilters;\n\n public constructor(config: Config) {\n this.config = config;\n this.uplinks = setupUpLinks(config);\n debug('uplinks available %o', Object.keys(this.uplinks));\n this.logger = logger.child({ module: 'storage' });\n this.filters = [];\n // @ts-ignore\n this.localStorage = null;\n this.searchManager = null;\n }\n\n public async init(config: Config, filters: IPluginFilters = []): Promise<void> {\n if (this.localStorage === null) {\n this.filters = filters || [];\n debug('filters available %o', filters);\n this.localStorage = new LocalStorage(this.config, logger);\n await this.localStorage.init();\n debug('local init storage initialized');\n await this.localStorage.getSecret(config);\n debug('local storage secret initialized');\n this.searchManager = new SearchManager(this.uplinks, this.localStorage);\n } else {\n debug('storage has been already initialized');\n }\n return;\n }\n\n /**\n * Add a {name} package to a system\n Function checks if package with the same name is available from uplinks.\n If it isn't, we create package locally\n Used storages: local (write) && uplinks\n */\n public async addPackage(name: string, metadata: any, callback: Function): Promise<void> {\n try {\n debug('add package for %o', name);\n await checkPackageLocal(name, this.localStorage);\n debug('look up remote for %o', name);\n await checkPackageRemote(\n name,\n this._isAllowPublishOffline(),\n this._syncUplinksMetadata.bind(this)\n );\n debug('publishing a package for %o', name);\n await publishPackage(name, metadata, this.localStorage as LocalStorage);\n // TODO: return published data and replace callback by a promise\n callback(null, true);\n } catch (err: any) {\n debug('error on add a package for %o with error %o', name, err);\n callback(err);\n }\n }\n\n /**\n * Add a {name} package to a system\n Function checks if package with the same name is available from uplinks.\n If it isn't, we create package locally\n Used storages: local (write) && uplinks\n */\n public async addPackageNext(name: string, metadata: Package): Promise<Package> {\n try {\n debug('add package for %o', name);\n await checkPackageLocal(name, this.localStorage);\n debug('look up remote for %o', name);\n await checkPackageRemote(\n name,\n this._isAllowPublishOffline(),\n this._syncUplinksMetadata.bind(this)\n );\n debug('publishing a package for %o', name);\n // FIXME: publishPackage should return fresh metadata from backend\n // instead return metadata\n await publishPackage(name, metadata, this.localStorage as LocalStorage);\n return metadata;\n } catch (err: any) {\n debug('error on add a package for %o with error %o', name, err);\n throw err;\n }\n }\n\n private _isAllowPublishOffline(): boolean {\n return (\n typeof this.config.publish !== 'undefined' &&\n _.isBoolean(this.config.publish.allow_offline) &&\n this.config.publish.allow_offline\n );\n }\n\n public readTokens(filter: TokenFilter): Promise<Token[]> {\n return this.localStorage.readTokens(filter);\n }\n\n public saveToken(token: Token): Promise<void> {\n return this.localStorage.saveToken(token);\n }\n\n public deleteToken(user: string, tokenKey: string): Promise<any> {\n return this.localStorage.deleteToken(user, tokenKey);\n }\n\n /**\n * Add a new version of package {name} to a system\n Used storages: local (write)\n */\n public addVersion(\n name: string,\n version: string,\n metadata: Version,\n tag: StringValue,\n callback: CallbackAction\n ): void {\n debug('add the version %o for package %o', version, name);\n this.localStorage.addVersion(name, version, metadata, tag, callback);\n }\n\n public async addVersionNext(\n name: string,\n version: string,\n metadata: Version,\n tag: StringValue\n ): Promise<void> {\n debug('add the version %o for package %o', version, name);\n return this.localStorage.addVersionNext(name, version, metadata, tag);\n }\n\n /**\n * Tags a package version with a provided tag\n Used storages: local (write)\n */\n public mergeTags(name: string, tagHash: MergeTags, callback: CallbackAction): void {\n debug('merge tags for package %o tags %o', name, tagHash);\n this.localStorage.mergeTags(name, tagHash, callback);\n }\n\n /**\n * Change an existing package (i.e. unpublish one version)\n Function changes a package info from local storage and all uplinks with write access./\n Used storages: local (write)\n */\n public changePackage(\n name: string,\n metadata: Package,\n revision: string,\n callback: Callback\n ): void {\n debug('change existing package for package %o revision %o', name, revision);\n this.localStorage.changePackage(name, metadata, revision, callback);\n }\n\n /**\n * Change an existing package (i.e. unpublish one version)\n Function changes a package info from local storage and all uplinks with write access./\n Used storages: local (write)\n */\n public async changePackageNext(name: string, metadata: Package, revision: string): Promise<void> {\n debug('change existing package for package %o revision %o', name, revision);\n this.localStorage.changePackageNext(name, metadata, revision);\n }\n\n /**\n * Remove a package from a system\n Function removes a package from local storage\n Used storages: local (write)\n */\n public async removePackage(name: string): Promise<void> {\n debug('remove packagefor package %o', name);\n await this.localStorage.removePackage(name);\n }\n\n /**\n Remove a tarball from a system\n Function removes a tarball from local storage.\n Tarball in question should not be linked to in any existing\n versions, i.e. package version should be unpublished first.\n Used storage: local (write)\n */\n public removeTarball(\n name: string,\n filename: string,\n revision: string,\n callback: CallbackAction\n ): void {\n this.localStorage.removeTarball(name, filename, revision, callback);\n }\n\n /**\n * Upload a tarball for {name} package\n Function is synchronous and returns a WritableStream\n Used storages: local (write)\n */\n public addTarball(name: string, filename: string): IUploadTarball {\n debug('add tarball for package %o', name);\n return this.localStorage.addTarball(name, filename);\n }\n\n /**\n Get a tarball from a storage for {name} package\n Function is synchronous and returns a ReadableStream\n Function tries to read tarball locally, if it fails then it reads package\n information in order to figure out where we can get this tarball from\n Used storages: local || uplink (just one)\n */\n public getTarball(name: string, filename: string): IReadTarball {\n debug('get tarball for package %o filename %o', name, filename);\n const readStream = new ReadTarball({});\n readStream.abort = function () {};\n\n const self = this;\n\n // if someone requesting tarball, it means that we should already have some\n // information about it, so fetching package info is unnecessary\n\n // trying local first\n // flow: should be IReadTarball\n let localStream: any = self.localStorage.getTarball(name, filename);\n let isOpen = false;\n localStream.on('error', (err): any => {\n if (isOpen || err.status !== HTTP_STATUS.NOT_FOUND) {\n return readStream.emit('error', err);\n }\n\n // local reported 404\n const err404 = err;\n localStream.abort();\n localStream = null; // we force for garbage collector\n self.localStorage.getPackageMetadata(name, (err, info: Package): void => {\n if (_.isNil(err) && info._distfiles && _.isNil(info._distfiles[filename]) === false) {\n // information about this file exists locally\n serveFile(info._distfiles[filename]);\n } else {\n // we know nothing about this file, trying to get information elsewhere\n self._syncUplinksMetadata(name, info, {}, (err, info: Package): any => {\n if (_.isNil(err) === false) {\n return readStream.emit('error', err);\n }\n if (_.isNil(info._distfiles) || _.isNil(info._distfiles[filename])) {\n return readStream.emit('error', err404);\n }\n serveFile(info._distfiles[filename]);\n });\n }\n });\n });\n localStream.on('content-length', function (v): void {\n readStream.emit('content-length', v);\n });\n\n localStream.on('open', function (): void {\n isOpen = true;\n localStream.pipe(readStream);\n });\n return readStream;\n\n /**\n * Fetch and cache local/remote packages.\n * @param {Object} file define the package shape\n */\n function serveFile(file: DistFile): void {\n let uplink: any = null;\n\n for (const uplinkId in self.uplinks) {\n // https://github.com/verdaccio/verdaccio/issues/1642\n if (hasProxyTo(name, uplinkId, self.config.packages)) {\n uplink = self.uplinks[uplinkId];\n }\n }\n\n if (uplink == null) {\n uplink = new ProxyStorage(\n {\n url: file.url,\n cache: true,\n _autogenerated: true,\n },\n self.config\n );\n }\n\n let savestream: IUploadTarball | null = null;\n if (uplink.config.cache) {\n savestream = self.localStorage.addTarball(name, filename);\n }\n\n let on_open = function (): void {\n // prevent it from being called twice\n on_open = function () {};\n const rstream2 = uplink.fetchTarball(file.url);\n rstream2.on('error', function (err): void {\n if (savestream) {\n savestream.abort();\n }\n savestream = null;\n readStream.emit('error', err);\n });\n rstream2.on('end', function (): void {\n if (savestream) {\n savestream.done();\n }\n });\n\n rstream2.on('content-length', function (v): void {\n readStream.emit('content-length', v);\n if (savestream) {\n savestream.emit('content-length', v);\n }\n });\n rstream2.pipe(readStream);\n if (savestream) {\n rstream2.pipe(savestream);\n }\n };\n\n if (savestream) {\n savestream.on('open', function (): void {\n on_open();\n });\n\n savestream.on('error', function (err): void {\n self.logger.warn(\n { err: err, fileName: file },\n 'error saving file @{fileName}: @{err?.message}\\n@{err.stack}'\n );\n if (savestream) {\n savestream.abort();\n }\n savestream = null;\n on_open();\n });\n } else {\n on_open();\n }\n }\n }\n\n // public async starPackage(body: StarBody, options: IGetPackageOptionsNext): Promise<void> {\n // debug('star package');\n // const manifest = await this.getPackageNext(options);\n // const newStarUser = body[constants.USERS];\n // const remoteUsername: string = options.remoteUser.name as string;\n // const localStarUsers = manifest[constants.USERS];\n // // Check is star or unstar\n // const isStar = Object.keys(newStarUser).includes(remoteUsername);\n // debug('is start? %o', isStar);\n // if (\n // _.isNil(localStarUsers) === false &&\n // validateInputs(localStarUsers, remoteUsername, isStar)\n // ) {\n // // return afterChangePackage();\n // }\n // const users: Users = isStar\n // ? {\n // ...localStarUsers,\n // [remoteUsername]: true,\n // }\n // : _.reduce(\n // localStarUsers,\n // (users, value, key) => {\n // if (key !== remoteUsername) {\n // users[key] = value;\n // }\n // return users;\n // },\n // {}\n // );\n // debug('update package for %o', name);\n // }\n\n // public async publish(body: any, options: IGetPackageOptionsNext): Promise<any> {\n // const { name } = options;\n // debug('publishing or updating a new version for %o', name);\n // // we check if the request is npm star\n // if (!isPublishablePackage(body) && isObject(body.users)) {\n // debug('starting star a package');\n // await this.starPackage(body as StarBody, options);\n // }\n\n // return { ok: API_MESSAGE.PKG_CHANGED, success: true };\n // }\n\n public async getPackageByVersion(options: IGetPackageOptionsNext): Promise<Version> {\n const queryVersion = options.version as string;\n if (_.isNil(queryVersion)) {\n throw errorUtils.getNotFound(`${API_ERROR.VERSION_NOT_EXIST}: ${queryVersion}`);\n }\n\n // we have version, so we need to return specific version\n const [convertedManifest] = await this.getPackageNext(options);\n\n const version: Version | undefined = getVersion(convertedManifest.versions, queryVersion);\n\n debug('query by latest version %o and result %o', queryVersion, version);\n if (typeof version !== 'undefined') {\n debug('latest version found %o', version);\n return convertDistVersionToLocalTarballsUrl(\n convertedManifest.name,\n version,\n options.requestOptions,\n this.config.url_prefix\n );\n }\n\n // the version could be a dist-tag eg: beta, alpha, so we find the matched version\n // on disg-tag list\n if (_.isNil(convertedManifest[DIST_TAGS]) === false) {\n if (_.isNil(convertedManifest[DIST_TAGS][queryVersion]) === false) {\n // the version found as a distag\n const matchedDisTagVersion: string = convertedManifest[DIST_TAGS][queryVersion];\n debug('dist-tag version found %o', matchedDisTagVersion);\n const disTagVersion: Version | undefined = getVersion(\n convertedManifest.versions,\n matchedDisTagVersion\n );\n if (typeof disTagVersion !== 'undefined') {\n debug('dist-tag found %o', disTagVersion);\n return convertDistVersionToLocalTarballsUrl(\n convertedManifest.name,\n disTagVersion,\n options.requestOptions,\n this.config.url_prefix\n );\n }\n }\n } else {\n debug('dist tag not detected');\n }\n\n // we didn't find the version, not found error\n debug('package version not found %o', queryVersion);\n throw errorUtils.getNotFound(`${API_ERROR.VERSION_NOT_EXIST}: ${queryVersion}`);\n }\n\n public async getPackageManifest(options: IGetPackageOptionsNext): Promise<Package> {\n // convert dist remotes to local bars\n const [manifest] = await this.getPackageNext(options);\n const convertedManifest = convertDistRemoteToLocalTarballUrls(\n manifest,\n options.requestOptions,\n this.config.url_prefix\n );\n\n return convertedManifest;\n }\n\n /**\n * Return a manifest or version based on the options.\n * @param options {Object}\n * @returns A package manifest or specific version\n */\n public async getPackageByOptions(options: IGetPackageOptionsNext): Promise<Package | Version> {\n // if no version we return the whole manifest\n if (_.isNil(options.version) === false) {\n return this.getPackageByVersion(options);\n } else {\n return this.getPackageManifest(options);\n }\n }\n\n public async getPackageNext(options: IGetPackageOptionsNext): Promise<[Package, any[]]> {\n const { name } = options;\n debug('get package for %o', name);\n try {\n let data: Package;\n try {\n data = await this.localStorage.getPackageMetadataNext(name);\n } catch (err: any) {\n // we don't have package locally, so we need to fetch it from uplinks\n if (err && (!err.status || err.status >= HTTP_STATUS.INTERNAL_ERROR)) {\n throw err;\n }\n }\n\n // time to sync with uplinks if we have any\n debug('sync uplinks for %o', name);\n // @ts-expect-error\n return this._syncUplinksMetadataNext(name, data, {\n req: options.req,\n uplinksLook: options.uplinksLook,\n keepUpLinkData: options.keepUpLinkData,\n });\n } catch (err: any) {\n this.logger.error(\n { name, err: err.message },\n 'error on get package for @{name} with error @{err}'\n );\n throw err;\n }\n }\n\n private _syncUplinksMetadataNext(\n name: string,\n data: Package,\n { uplinksLook, keepUpLinkData, req }\n ): Promise<[Package, any[]]> {\n return new Promise((resolve, reject) => {\n this._syncUplinksMetadata(\n name,\n data,\n { req: req, uplinksLook },\n function getPackageSynUpLinksCallback(err, result: Package, uplinkErrors): void {\n if (err) {\n debug('error on sync package for %o with error %o', name, err?.message);\n return reject(err);\n }\n\n const normalizedPkg = Object.assign({}, result, {\n ...normalizeDistTags(cleanUpLinksRef(result, keepUpLinkData)),\n _attachments: {},\n });\n\n debug('no. sync uplinks errors %o for %s', uplinkErrors?.length, name);\n resolve([normalizedPkg, uplinkErrors]);\n }\n );\n });\n }\n\n /**\n Retrieve a package metadata for {name} package\n Function invokes localStorage.getPackage and uplink.get_package for every\n uplink with proxy_access rights against {name} and combines results\n into one json object\n Used storages: local && uplink (proxy_access)\n\n * @param {object} options\n * @property {string} options.name Package Name\n * @property {object} options.req Express `req` object\n * @property {boolean} options.keepUpLinkData keep up link info in package meta, last update, etc.\n * @property {function} options.callback Callback for receive data\n */\n public getPackage(options: IGetPackageOptions): void {\n const { name } = options;\n debug('get package for %o', name);\n this.localStorage.getPackageMetadata(name, (err, data) => {\n if (err && (!err.status || err.status >= HTTP_STATUS.INTERNAL_ERROR)) {\n // report internal errors right away\n debug('error on get package for %o with error %o', name, err?.message);\n return options.callback(err);\n }\n\n debug('sync uplinks for %o', name);\n this._syncUplinksMetadata(\n name,\n data,\n { req: options.req, uplinksLook: options.uplinksLook },\n function getPackageSynUpLinksCallback(err, result: Package, uplinkErrors): void {\n if (err) {\n debug('error on sync package for %o with error %o', name, err?.message);\n return options.callback(err);\n }\n\n result = normalizeDistTags(cleanUpLinksRef(result, options?.keepUpLinkData));\n\n // npm can throw if this field doesn't exist\n result._attachments = {};\n\n debug('no. sync uplinks errors %o', uplinkErrors?.length);\n options.callback(null, result, uplinkErrors);\n }\n );\n });\n }\n\n /**\n * Retrieve only private local packages\n * @param {*} callback\n */\n public getLocalDatabase(callback: Callback): void {\n const self = this;\n debug('get local database');\n if (this.localStorage.storagePlugin !== null) {\n this.localStorage.storagePlugin\n .get()\n .then((locals) => {\n const packages: Version[] = [];\n const getPackage = function (itemPkg): void {\n self.localStorage.getPackageMetadata(\n locals[itemPkg],\n function (err, pkgMetadata: Package): void {\n if (_.isNil(err)) {\n const latest = pkgMetadata[DIST_TAGS].latest;\n if (latest && pkgMetadata.versions[latest]) {\n const version: Version = pkgMetadata.versions[latest];\n const timeList = pkgMetadata.time as GenericBody;\n const time = timeList[latest];\n // @ts-ignore\n version.time = time;\n\n // Add for stars api\n // @ts-ignore\n version.users = pkgMetadata.users;\n\n packages.push(version);\n } else {\n self.logger.warn(\n { package: locals[itemPkg] },\n 'package @{package} does not have a \"latest\" tag?'\n );\n }\n }\n\n if (itemPkg >= locals.length - 1) {\n callback(null, packages);\n } else {\n getPackage(itemPkg + 1);\n }\n }\n );\n };\n\n if (locals.length) {\n getPackage(0);\n } else {\n callback(null, []);\n }\n })\n .catch((err) => {\n callback(err);\n });\n } else {\n debug('local stora instance is null');\n }\n }\n\n // notas, debo migrar _syncUplinksMetadata algo mas lindo\n\n /**\n * Function fetches package metadata from uplinks and synchronizes it with local data\n if package is available locally, it MUST be provided in pkginfo\n returns callback(err, result, uplink_errors)\n */\n public _syncUplinksMetadata(\n name: string,\n packageInfo: Package,\n options: ISyncUplinks,\n callback: Callback\n ): void {\n let found = true;\n const self = this;\n const upLinks: IProxy[] = [];\n const hasToLookIntoUplinks = _.isNil(options.uplinksLook) || options.uplinksLook;\n debug('is sync uplink enabled %o', hasToLookIntoUplinks);\n\n if (!packageInfo) {\n found = false;\n packageInfo = generatePackageTemplate(name);\n }\n\n for (const uplink in this.uplinks) {\n if (hasProxyTo(name, uplink, this.config.packages) && hasToLookIntoUplinks) {\n upLinks.push(this.uplinks[uplink]);\n }\n }\n\n debug('uplink list %o', upLinks.length);\n\n async.map(\n upLinks,\n (upLink, cb): void => {\n const _options = Object.assign({}, options);\n const upLinkMeta = packageInfo._uplinks[upLink.upname];\n\n if (validatioUtils.isObject(upLinkMeta)) {\n const fetched = upLinkMeta.fetched;\n\n if (fetched && Date.now() - fetched < upLink.maxage) {\n return cb();\n }\n\n _options.etag = upLinkMeta.etag;\n }\n\n upLink.getRemoteMetadata(name, _options, (err, upLinkResponse, eTag): void => {\n if (err && err.remoteStatus === 304) {\n upLinkMeta.fetched = Date.now();\n }\n\n if (err || !upLinkResponse) {\n return cb(null, [err || errorUtils.getInternalError('no data')]);\n }\n\n try {\n validatioUtils.validateMetadata(upLinkResponse, name);\n } catch (err: any) {\n self.logger.error(\n {\n sub: 'out',\n err: err,\n },\n 'package.json validating error @{!err?.message}\\n@{err.stack}'\n );\n return cb(null, [err]);\n }\n\n packageInfo._uplinks[upLink.upname] = {\n etag: eTag,\n fetched: Date.now(),\n };\n\n packageInfo.time = mergeUplinkTimeIntoLocal(packageInfo, upLinkResponse);\n\n updateVersionsHiddenUpLink(upLinkResponse.versions, upLink);\n\n try {\n pkgUtils.mergeVersions(packageInfo, upLinkResponse);\n } catch (err: any) {\n self.logger.error(\n {\n sub: 'out',\n err: err,\n },\n 'package.json parsing error @{!err?.message}\\n@{err.stack}'\n );\n return cb(null, [err]);\n }\n\n // if we got to this point, assume that the correct package exists\n // on the uplink\n found = true;\n cb();\n });\n },\n // @ts-ignore\n (err: Error, upLinksErrors: any): AsyncResultArrayCallback<unknown, Error> => {\n assert(!err && Array.isArray(upLinksErrors));\n\n // Check for connection timeout or reset errors with uplink(s)\n // (these should be handled differently from the package not being found)\n if (!found) {\n let uplinkTimeoutError;\n for (let i = 0; i < upLinksErrors.length; i++) {\n if (upLinksErrors[i]) {\n for (let j = 0; j < upLinksErrors[i].length; j++) {\n if (upLinksErrors[i][j]) {\n const code = upLinksErrors[i][j].code;\n if (code === 'ETIMEDOUT' || code === 'ESOCKETTIMEDOUT' || code === 'ECONNRESET') {\n uplinkTimeoutError = true;\n break;\n }\n }\n }\n }\n }\n\n if (uplinkTimeoutError) {\n return callback(errorUtils.getServiceUnavailable(), null, upLinksErrors);\n }\n return callback(errorUtils.getNotFound(API_ERROR.NO_PACKAGE), null, upLinksErrors);\n }\n\n if (upLinks.length === 0) {\n return callback(null, packageInfo);\n }\n\n self.localStorage.updateVersions(\n name,\n packageInfo,\n async (err, packageJsonLocal: Package): Promise<any> => {\n if (err) {\n return callback(err);\n }\n // Any error here will cause a 404, like an uplink error. This is likely\n // the right thing to do\n // as a broken filter is a security risk.\n const filterErrors: Error[] = [];\n // This MUST be done serially and not in parallel as they modify packageJsonLocal\n for (const filter of self.filters) {\n try {\n // These filters can assume it's save to modify packageJsonLocal\n // and return it directly for\n // performance (i.e. need not be pure)\n packageJsonLocal = await filter.filter_metadata(packageJsonLocal);\n } catch (err: any) {\n filterErrors.push(err);\n }\n }\n callback(null, packageJsonLocal, _.concat(upLinksErrors, filterErrors));\n }\n );\n }\n );\n }\n\n /**\n * Set a hidden value for each version.\n * @param {Array} versions list of version\n * @param {String} upLink uplink name\n * @private\n */\n public _updateVersionsHiddenUpLink(versions: Versions, upLink: IProxy): void {\n for (const i in versions) {\n if (Object.prototype.hasOwnProperty.call(versions, i)) {\n const version = versions[i];\n\n // holds a \"hidden\" value to be used by the package storage.\n // $FlowFixMe\n version[Symbol.for('__verdaccio_uplink')] = upLink.upname;\n }\n }\n }\n}\n\nexport { Storage };\n"],"file":"storage.js"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@verdaccio/store",
|
|
3
|
-
"version": "6.0.0-6-next.
|
|
3
|
+
"version": "6.0.0-6-next.21",
|
|
4
4
|
"description": "loaders logic",
|
|
5
5
|
"main": "./build/index.js",
|
|
6
6
|
"types": "build/index.d.ts",
|
|
@@ -30,30 +30,27 @@
|
|
|
30
30
|
"npm": ">=6"
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@verdaccio/config": "6.0.0-6-next.
|
|
34
|
-
"@verdaccio/core": "6.0.0-6-next.
|
|
35
|
-
"@verdaccio/loaders": "6.0.0-6-next.
|
|
36
|
-
"@verdaccio/local-storage": "11.0.0-6-next.
|
|
37
|
-
"@verdaccio/logger": "6.0.0-6-next.
|
|
38
|
-
"@verdaccio/proxy": "6.0.0-6-next.
|
|
33
|
+
"@verdaccio/config": "6.0.0-6-next.13",
|
|
34
|
+
"@verdaccio/core": "6.0.0-6-next.5",
|
|
35
|
+
"@verdaccio/loaders": "6.0.0-6-next.12",
|
|
36
|
+
"@verdaccio/local-storage": "11.0.0-6-next.12",
|
|
37
|
+
"@verdaccio/logger": "6.0.0-6-next.11",
|
|
38
|
+
"@verdaccio/proxy": "6.0.0-6-next.19",
|
|
39
39
|
"@verdaccio/streams": "11.0.0-6-next.5",
|
|
40
|
-
"@verdaccio/utils": "6.0.0-6-next.
|
|
41
|
-
"@verdaccio/tarball": "11.0.0-6-next.
|
|
40
|
+
"@verdaccio/utils": "6.0.0-6-next.11",
|
|
41
|
+
"@verdaccio/tarball": "11.0.0-6-next.12",
|
|
42
42
|
"JSONStream": "1.3.5",
|
|
43
|
-
"abortcontroller-polyfill": "1.7.3",
|
|
44
43
|
"async": "3.2.3",
|
|
45
44
|
"debug": "4.3.3",
|
|
46
45
|
"lodash": "4.17.21",
|
|
47
|
-
"lunr": "2.3.9",
|
|
48
|
-
"lunr-mutable-indexes": "2.3.2",
|
|
49
46
|
"merge2": "1.4.1",
|
|
50
47
|
"semver": "7.3.5"
|
|
51
48
|
},
|
|
52
49
|
"devDependencies": {
|
|
53
50
|
"@types/node": "16.11.21",
|
|
54
|
-
"@verdaccio/mock": "6.0.0-6-next.
|
|
55
|
-
"@verdaccio/types": "11.0.0-6-next.
|
|
56
|
-
"@verdaccio/helper": "1.0.0",
|
|
51
|
+
"@verdaccio/mock": "6.0.0-6-next.14",
|
|
52
|
+
"@verdaccio/types": "11.0.0-6-next.11",
|
|
53
|
+
"@verdaccio/test-helper": "1.1.0-6-next.0",
|
|
57
54
|
"undici": "4.15.0",
|
|
58
55
|
"nock": "13.2.2",
|
|
59
56
|
"tmp-promise": "3.0.3",
|
package/src/local-storage.ts
CHANGED
|
@@ -958,10 +958,16 @@ class LocalStorage {
|
|
|
958
958
|
reject(err);
|
|
959
959
|
}
|
|
960
960
|
|
|
961
|
+
if (_.isEmpty(pkg?.versions)) {
|
|
962
|
+
return resolve({});
|
|
963
|
+
}
|
|
964
|
+
|
|
961
965
|
const searchPackage = normalizeSearchPackage(pkg, searchItem);
|
|
962
966
|
const searchPackageItem: searchUtils.SearchPackageItem = {
|
|
963
967
|
package: searchPackage,
|
|
964
968
|
score: searchItem.score,
|
|
969
|
+
verdaccioPkgCached: searchItem.verdaccioPkgCached,
|
|
970
|
+
verdaccioPrivate: searchItem.verdaccioPrivate,
|
|
965
971
|
flags: searchItem?.flags,
|
|
966
972
|
// FUTURE: find a better way to calculate the score
|
|
967
973
|
searchScore: 1,
|
package/src/search.ts
CHANGED
|
@@ -2,8 +2,6 @@
|
|
|
2
2
|
// eslint-disable no-invalid-this
|
|
3
3
|
import buildDebug from 'debug';
|
|
4
4
|
import _ from 'lodash';
|
|
5
|
-
import lunr from 'lunr';
|
|
6
|
-
import lunrMutable from 'lunr-mutable-indexes';
|
|
7
5
|
import { PassThrough, Transform, pipeline } from 'stream';
|
|
8
6
|
|
|
9
7
|
import { VerdaccioError } from '@verdaccio/core';
|
|
@@ -20,8 +18,8 @@ export interface ISearchResult {
|
|
|
20
18
|
ref: string;
|
|
21
19
|
score: number;
|
|
22
20
|
}
|
|
21
|
+
// @deprecated not longer used
|
|
23
22
|
export interface IWebSearch {
|
|
24
|
-
index: lunrMutable.index;
|
|
25
23
|
storage: Storage;
|
|
26
24
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
27
25
|
query(query: string): ISearchResult[];
|
|
@@ -33,7 +31,8 @@ export interface IWebSearch {
|
|
|
33
31
|
|
|
34
32
|
export function removeDuplicates(results: searchUtils.SearchPackageItem[]) {
|
|
35
33
|
const pkgNames: any[] = [];
|
|
36
|
-
|
|
34
|
+
const orderByResults = _.orderBy(results, ['verdaccioPrivate', 'asc']);
|
|
35
|
+
return orderByResults.filter((pkg) => {
|
|
37
36
|
if (pkgNames.includes(pkg?.package?.name)) {
|
|
38
37
|
return false;
|
|
39
38
|
}
|
|
@@ -58,16 +57,18 @@ class TransFormResults extends Transform {
|
|
|
58
57
|
*/
|
|
59
58
|
public _transform(chunk, _encoding, callback) {
|
|
60
59
|
if (_.isArray(chunk)) {
|
|
60
|
+
// from remotes we should expect chunks as arrays
|
|
61
61
|
(chunk as searchUtils.SearchItem[])
|
|
62
62
|
.filter((pkgItem) => {
|
|
63
63
|
debug(`streaming remote pkg name ${pkgItem?.package?.name}`);
|
|
64
64
|
return true;
|
|
65
65
|
})
|
|
66
66
|
.forEach((pkgItem) => {
|
|
67
|
-
this.push(pkgItem);
|
|
67
|
+
this.push({ ...pkgItem, verdaccioPkgCached: false, verdaccioPrivate: false });
|
|
68
68
|
});
|
|
69
69
|
return callback();
|
|
70
70
|
} else {
|
|
71
|
+
// local we expect objects
|
|
71
72
|
debug(`streaming local pkg name ${chunk?.package?.name}`);
|
|
72
73
|
this.push(chunk);
|
|
73
74
|
return callback();
|
|
@@ -105,30 +106,34 @@ export class SearchManager {
|
|
|
105
106
|
if (!uplink) {
|
|
106
107
|
// this should never tecnically happens
|
|
107
108
|
logger.fatal({ uplinkId }, 'uplink @upLinkId not found');
|
|
108
|
-
throw new Error(`uplink ${uplinkId} not found`);
|
|
109
109
|
}
|
|
110
110
|
return this.consumeSearchStream(uplinkId, uplink, options, streamPassThrough);
|
|
111
111
|
});
|
|
112
112
|
|
|
113
113
|
try {
|
|
114
114
|
debug('search uplinks');
|
|
115
|
-
|
|
115
|
+
// we only process those streams end successfully, if all fails
|
|
116
|
+
// we just include local storage
|
|
117
|
+
await Promise.allSettled([...searchUplinksStreams]);
|
|
116
118
|
debug('search uplinks done');
|
|
117
|
-
} catch (err) {
|
|
118
|
-
logger.error({ err }, ' error on uplinks search @{err}');
|
|
119
|
+
} catch (err: any) {
|
|
120
|
+
logger.error({ err: err?.message }, ' error on uplinks search @{err}');
|
|
119
121
|
streamPassThrough.emit('error', err);
|
|
120
|
-
throw err;
|
|
121
122
|
}
|
|
122
123
|
debug('search local');
|
|
123
|
-
|
|
124
|
-
|
|
124
|
+
try {
|
|
125
|
+
await this.localStorage.search(streamPassThrough, options.query as searchUtils.SearchQuery);
|
|
126
|
+
} catch (err: any) {
|
|
127
|
+
logger.error({ err: err?.message }, ' error on local search @{err}');
|
|
128
|
+
streamPassThrough.emit('error', err);
|
|
129
|
+
}
|
|
125
130
|
const data: searchUtils.SearchPackageItem[] = [];
|
|
126
131
|
const outPutStream = new PassThrough({ objectMode: true });
|
|
127
132
|
pipeline(streamPassThrough, transformResults, outPutStream, (err) => {
|
|
128
133
|
if (err) {
|
|
129
134
|
throw errorUtils.getInternalError(err ? err.message : 'unknown error');
|
|
130
135
|
} else {
|
|
131
|
-
debug('
|
|
136
|
+
debug('pipeline succeeded');
|
|
132
137
|
}
|
|
133
138
|
});
|
|
134
139
|
|
|
@@ -138,9 +143,9 @@ export class SearchManager {
|
|
|
138
143
|
|
|
139
144
|
return new Promise((resolve) => {
|
|
140
145
|
outPutStream.on('finish', async () => {
|
|
141
|
-
const
|
|
142
|
-
debug('stream
|
|
143
|
-
return resolve(
|
|
146
|
+
const searchFinalResults: searchUtils.SearchPackageItem[] = removeDuplicates(data);
|
|
147
|
+
debug('search stream total results: %o', searchFinalResults.length);
|
|
148
|
+
return resolve(searchFinalResults);
|
|
144
149
|
});
|
|
145
150
|
debug('search done');
|
|
146
151
|
});
|
|
@@ -168,111 +173,3 @@ export class SearchManager {
|
|
|
168
173
|
});
|
|
169
174
|
}
|
|
170
175
|
}
|
|
171
|
-
|
|
172
|
-
/**
|
|
173
|
-
* Handle the search Indexer.
|
|
174
|
-
*/
|
|
175
|
-
class Search implements IWebSearch {
|
|
176
|
-
public readonly index: lunrMutable.index;
|
|
177
|
-
// @ts-ignore
|
|
178
|
-
public storage: Storage;
|
|
179
|
-
|
|
180
|
-
/**
|
|
181
|
-
* Constructor.
|
|
182
|
-
*/
|
|
183
|
-
public constructor() {
|
|
184
|
-
this.index = lunrMutable(function (): void {
|
|
185
|
-
// FIXME: there is no types for this library
|
|
186
|
-
/* eslint no-invalid-this:off */
|
|
187
|
-
// @ts-ignore
|
|
188
|
-
this.field('name', { boost: 10 });
|
|
189
|
-
// @ts-ignore
|
|
190
|
-
this.field('description', { boost: 4 });
|
|
191
|
-
// @ts-ignore
|
|
192
|
-
this.field('author', { boost: 6 });
|
|
193
|
-
// @ts-ignore
|
|
194
|
-
this.field('keywords', { boost: 7 });
|
|
195
|
-
// @ts-ignore
|
|
196
|
-
this.field('version');
|
|
197
|
-
// @ts-ignore
|
|
198
|
-
this.field('readme');
|
|
199
|
-
});
|
|
200
|
-
|
|
201
|
-
this.index.builder.pipeline.remove(lunr.stemmer);
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
public init() {
|
|
205
|
-
return Promise.resolve();
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
/**
|
|
209
|
-
* Performs a query to the indexer.
|
|
210
|
-
* If the keyword is a * it returns all local elements
|
|
211
|
-
* otherwise performs a search
|
|
212
|
-
* @param {*} q the keyword
|
|
213
|
-
* @return {Array} list of results.
|
|
214
|
-
*/
|
|
215
|
-
public query(query: string): ISearchResult[] {
|
|
216
|
-
const localStorage = this.storage.localStorage as LocalStorage;
|
|
217
|
-
|
|
218
|
-
return query === '*'
|
|
219
|
-
? (localStorage.storagePlugin as any).get((items): any => {
|
|
220
|
-
items.map(function (pkg): any {
|
|
221
|
-
return { ref: pkg, score: 1 };
|
|
222
|
-
});
|
|
223
|
-
})
|
|
224
|
-
: this.index.search(`*${query}*`);
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
/**
|
|
228
|
-
* Add a new element to index
|
|
229
|
-
* @param {*} pkg the package
|
|
230
|
-
*/
|
|
231
|
-
public add(pkg: Version): void {
|
|
232
|
-
this.index.add({
|
|
233
|
-
id: pkg.name,
|
|
234
|
-
name: pkg.name,
|
|
235
|
-
description: pkg.description,
|
|
236
|
-
version: `v${pkg.version}`,
|
|
237
|
-
keywords: pkg.keywords,
|
|
238
|
-
author: pkg._npmUser ? pkg._npmUser.name : '???',
|
|
239
|
-
});
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
/**
|
|
243
|
-
* Remove an element from the index.
|
|
244
|
-
* @param {*} name the id element
|
|
245
|
-
*/
|
|
246
|
-
public remove(name: string): void {
|
|
247
|
-
this.index.remove({ id: name });
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
/**
|
|
251
|
-
* Force a re-index.
|
|
252
|
-
*/
|
|
253
|
-
public reindex(): void {
|
|
254
|
-
this.storage.getLocalDatabase((error, packages): void => {
|
|
255
|
-
if (error) {
|
|
256
|
-
// that function shouldn't produce any
|
|
257
|
-
throw error;
|
|
258
|
-
}
|
|
259
|
-
let i = packages.length;
|
|
260
|
-
while (i--) {
|
|
261
|
-
this.add(packages[i]);
|
|
262
|
-
}
|
|
263
|
-
});
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
/**
|
|
267
|
-
* Set up the {Storage}
|
|
268
|
-
* @param {*} storage An storage reference.
|
|
269
|
-
*/
|
|
270
|
-
public configureStorage(storage: Storage): void {
|
|
271
|
-
this.storage = storage;
|
|
272
|
-
this.reindex();
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
const SearchInstance = new Search();
|
|
277
|
-
|
|
278
|
-
export { SearchInstance };
|
package/src/storage-utils.ts
CHANGED
|
@@ -6,9 +6,7 @@ import { API_ERROR, DIST_TAGS, HTTP_STATUS, USERS } from '@verdaccio/core';
|
|
|
6
6
|
import { AttachMents, Package, StringValue, Version, Versions } from '@verdaccio/types';
|
|
7
7
|
import { generateRandomHexString, isNil, isObject, normalizeDistTags } from '@verdaccio/utils';
|
|
8
8
|
|
|
9
|
-
// import { Users } from '.';
|
|
10
9
|
import { LocalStorage } from './local-storage';
|
|
11
|
-
import { SearchInstance } from './search';
|
|
12
10
|
|
|
13
11
|
export const STORAGE = {
|
|
14
12
|
PACKAGE_FILE_NAME: 'package.json',
|
|
@@ -149,11 +147,9 @@ export function publishPackage(
|
|
|
149
147
|
localStorage: LocalStorage
|
|
150
148
|
): Promise<any> {
|
|
151
149
|
return new Promise<void>((resolve, reject): void => {
|
|
152
|
-
localStorage.addPackage(name, metadata, (err
|
|
150
|
+
localStorage.addPackage(name, metadata, (err): void => {
|
|
153
151
|
if (!_.isNull(err)) {
|
|
154
152
|
return reject(err);
|
|
155
|
-
} else if (!_.isUndefined(latest)) {
|
|
156
|
-
SearchInstance.add(latest);
|
|
157
153
|
}
|
|
158
154
|
return resolve();
|
|
159
155
|
});
|
package/src/storage.ts
CHANGED
|
@@ -2,7 +2,6 @@ import assert from 'assert';
|
|
|
2
2
|
import async, { AsyncResultArrayCallback } from 'async';
|
|
3
3
|
import buildDebug from 'debug';
|
|
4
4
|
import _ from 'lodash';
|
|
5
|
-
import semver from 'semver';
|
|
6
5
|
|
|
7
6
|
import { hasProxyTo } from '@verdaccio/config';
|
|
8
7
|
import {
|
|
@@ -41,7 +40,7 @@ import {
|
|
|
41
40
|
import { getVersion, normalizeDistTags } from '@verdaccio/utils';
|
|
42
41
|
|
|
43
42
|
import { LocalStorage } from './local-storage';
|
|
44
|
-
import {
|
|
43
|
+
import { SearchManager } from './search';
|
|
45
44
|
// import { isPublishablePackage, validateInputs } from './star-utils';
|
|
46
45
|
import {
|
|
47
46
|
checkPackageLocal,
|
|
@@ -55,10 +54,6 @@ import { IGetPackageOptions, IGetPackageOptionsNext, IPluginFilters, ISyncUplink
|
|
|
55
54
|
// import { StarBody, Users } from './type';
|
|
56
55
|
import { setupUpLinks, updateVersionsHiddenUpLink } from './uplink-util';
|
|
57
56
|
|
|
58
|
-
if (semver.lte(process.version, 'v15.0.0')) {
|
|
59
|
-
global.AbortController = require('abortcontroller-polyfill/dist/cjs-ponyfill').AbortController;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
57
|
const debug = buildDebug('verdaccio:storage');
|
|
63
58
|
class Storage {
|
|
64
59
|
public localStorage: LocalStorage;
|
|
@@ -235,8 +230,6 @@ class Storage {
|
|
|
235
230
|
public async removePackage(name: string): Promise<void> {
|
|
236
231
|
debug('remove packagefor package %o', name);
|
|
237
232
|
await this.localStorage.removePackage(name);
|
|
238
|
-
// update the indexer
|
|
239
|
-
SearchInstance.remove(name);
|
|
240
233
|
}
|
|
241
234
|
|
|
242
235
|
/**
|
|
@@ -579,7 +572,7 @@ class Storage {
|
|
|
579
572
|
_attachments: {},
|
|
580
573
|
});
|
|
581
574
|
|
|
582
|
-
debug('no. sync uplinks errors %o', uplinkErrors?.length);
|
|
575
|
+
debug('no. sync uplinks errors %o for %s', uplinkErrors?.length, name);
|
|
583
576
|
resolve([normalizedPkg, uplinkErrors]);
|
|
584
577
|
}
|
|
585
578
|
);
|